feat: refonte OKI — constellation, carte SVG déterministe, timeline interactive

- Background : shader Three.js remplacé par la constellation zetwal (DOM/SVG, zéro WebGL)
- Carte : graphe 3D aléatoire remplacé par un SVG 2D au layout baké au build
  (scripts/build-layout.mjs, positions déterministes), nœuds focusables, pan/zoom, filtres sans re-layout
- Timeline : 4 ères, reveal syncopé gwoka, liens événement→fiche catalogue (module software-modal),
  mois affichés, corrections factuelles (Twitter 2022, Mastodon 2016, PeerTube 2017, Bluesky 2024, 105 logiciels)
- Charte OKI : tokens + bridge, Archivo/Inter self-hébergées, flag-bar, KineticText, footer fédéré
- Dette : three retiré (JS initial ~828 Ko → 77 Ko), OG/Twitter/JSON-LD/robots/sitemap,
  licence CC BY-SA 4.0, fediverse.json mort supprimé, icônes PWA 121 Ko → 9 Ko
- Lighthouse mobile : 91/97/100/100 — tests vitest 6/6, svelte-check 0/0
This commit is contained in:
sucupira
2026-07-21 13:39:38 -04:00
parent 93c577c5d3
commit 9b574d918c
38 changed files with 2333 additions and 9297 deletions
+17
View File
@@ -0,0 +1,17 @@
import { browser } from '$app/environment';
/** Gate unique prefers-reduced-motion (playbook §6). */
export function prefersReducedMotion(): boolean {
return browser && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
}
/**
* Stagger syncopé de marque OKI (3+3+2) — charte §3.
* Délais en ms pour l'index donné (cycle de 8 éléments).
*/
const SYNCOPATED_DELAYS = [0, 120, 300, 360, 600, 660, 900, 960];
export function syncopatedDelay(index: number): number {
const cycle = Math.floor(index / 8);
return SYNCOPATED_DELAYS[index % 8] + cycle * 1200;
}