- Add #preloader div with scrollable-page-background.png as CSS background,
matching the Svelte bg-fixed image so the transition is imperceptible
(image is cached by the time Svelte requests it)
- Revert #ssr-content to visually-hidden (clip) for Google Wave 1 crawl
- Prevent scrollbar flash by adding overflow:hidden to html,body inline
before main.css loads
- Parallel-fetch sub-page data (/blog/slug.json) alongside parent in initRouter
so Blog/WhitePapers components receive prefetched data on mount — eliminates
the list→article flash on direct navigation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Each page template now renders its content in a visually-hidden #ssr-content
div (sr-only technique) so search engine crawlers see real HTML without
impacting the Svelte app layout. Shared snippets handle nav, footer contact
info, and article cards.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Ajout de tobimori/kirby-seo via Composer
- snippet('seo/head') dans header.php (remplace les meta manuels)
- snippet('seo/schemas') dans footer.php pour JSON-LD
- Onglet SEO ajouté dans site.yml et tous les blueprints de pages
- Configuration SEO dans config.php (sitemap, robots, canonicalBase TODO)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- jeu.php : iframe démarre sur about:blank, URL stockée dans data-src
- Article.svelte : event delegation sur document (plus de timeout/querySelector)
→ le src de l'iframe est injecté seulement quand l'user clique (évite l'iframe noir)
→ supprime l'ancien $effect avec setTimeout au profit d'une délégation propre
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- jeu.php : supprime les espaces de l'URL (preg_replace), ajoute data-state="initial" sur l'overlay
- Article.svelte : porte le CSS complet depuis l'ancienne app React
(background opaque, play icon, hover, deactivate btn, game-active state)
- JS : ignore les clics sur overlay ended, remet data-state="initial" au deactivate
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- site/blueprints/blocks/jeu.yml : champ URL pour l'iframe
- site/snippets/blocks/jeu.php : rendu HTML statique (container + overlay + bouton désactivation)
- Article.svelte : $effect pour attacher les handlers clic sur .iframe-game-container
et onMount pour écouter postMessage GameReleaseFocus depuis impact.games
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Mise en place de Svelte 4 avec Vite pour le frontend (SPA)
- Simplification des templates PHP (header/footer minimalistes)
- Création de templates JSON pour API (home, about, expertise, portfolio, jouer, game, blog, article, project)
- Ajout d'un controller de site pour définir genericData globalement
- Structure des stores Svelte (page, navigation, locale, site)
- Router avec navaid pour navigation SPA et interception des liens
- Composants layout (Header, Footer, Cursor) et vues de base
- Build Vite vers assets/dist/ (index.js/css)
- Header PHP détecte assets/dist pour basculer dev/prod
Architecture fonctionnelle de base établie, à améliorer et compléter.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>