Refonte complète en SvelteKit (méthode OKI, AI-Overview ready)

Reconstruit le site statique mono-page (Bulma + htmx + Strapi) en SvelteKit 2 +
Svelte 5 (runes) + TypeScript, 100 % statique (adapter-static), auto-hébergé.

- Contenu enrichi à partir du dossier documentaire sourcé : 28 pages (histoire,
  Mé 67, procès 1968, 9 fiches militants, idéologie, héritage, publications,
  charte, orientation, sources, FAQ, actualités, contact, mentions légales).
- Souveraineté : retrait de Bulma/htmx/mustache/ionicons/Plausible/Google Fonts
  et de l'API Strapi. Polices Archivo/Inter et sprite SVG auto-hébergés (zéro emoji).
- Identité GONG (drapeau vert/blanc/rouge), thème sombre par défaut + clair AA,
  cadences motion gwoka, KineticText, timeline, 404 kréyòl, PWA hors-ligne.
- SEO/AI-Overview : HTML sémantique, JSON-LD (Organization, Person, Event,
  FAQPage, Article...), hreflang, sitemap dynamique, robots/humans.txt.
- Sécurité : CSP hachée + en-têtes (.htaccess o2switch + _headers Cloudflare), HSTS.
- Actualités éditées via Sveltia CMS (git-based) ; Strapi retiré.

npm run build : vert · npm run check : 0 erreur / 0 warning · JS 97 Ko gzip.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
sucupira
2026-07-24 23:57:37 -04:00
co-authored by Claude Opus 4.8
parent b89c1a80b7
commit cd9b9b093c
104 changed files with 14569 additions and 1383 deletions
+54
View File
@@ -0,0 +1,54 @@
<script lang="ts">
// Fil d'Ariane visible. Le JSON-LD BreadcrumbList est émis en parallèle par <Seo>.
interface Props {
items: { name: string; path: string }[];
}
let { items }: Props = $props();
</script>
<nav class="fil" aria-label="Fil d'Ariane">
<ol>
{#each items as item, i (item.path)}
<li>
{#if i < items.length - 1}
<a href={item.path} class="no-underline">{item.name}</a>
<span class="fil__sep" aria-hidden="true">/</span>
{:else}
<span aria-current="page">{item.name}</span>
{/if}
</li>
{/each}
</ol>
</nav>
<style>
.fil {
font-size: 0.82rem;
color: var(--muted);
}
.fil ol {
list-style: none;
display: flex;
flex-wrap: wrap;
gap: 0.4rem;
margin: 0 0 var(--space-3);
padding: 0;
}
.fil li {
display: inline-flex;
gap: 0.4rem;
align-items: center;
}
.fil a {
color: var(--muted);
}
.fil a:hover {
color: var(--accent);
}
.fil [aria-current='page'] {
color: var(--creme);
}
.fil__sep {
color: var(--muted-fort);
}
</style>