design : accueil console seul, vrai §, curseurs animés, statuts, lecteur

- accueil : la console devient l'accueil unique (variantes B/C, sélecteur
  et ancien accueil retirés) ; curseurs qui montent de l'asservissement et
  dérivent seuls, un axe mis en avant à tour de rôle, arrêt au clic,
  immobiles en prefers-reduced-motion ; « AUTONOMIE » devant chaque axe,
  leviers mis en valeur, ligne des trois autonomies en couleurs
- logo : § de Playfair Display (SIL OFL) vectorisé, composant partagé
  UiSectionSign (en-tête, page événement) + favicon.svg
- UiStatusBadge (production / développement / gestation) sur l'accueil,
  les pages d'axe et les pages projet
- liens libreDecision / SejeteralO fixés sur la prod (plus de repli localhost)
- logiciel libre : bouton v1 dans la carte projet en tête de page
- couverture du livre : recadrage corrigé (BookSection)
- texte courant en Public Sans (zéros non barrés)
- lecteur : la pastille persistante ne masque plus la navigation du
  BookPlayer ; lecture directe du MP3 (les .ogg n'existent pas : 404)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-09-29 05:59:33 +02:00
co-authored by Claude Opus 5.5
parent 4d8fe4895d
commit 201cfbbb50
33 changed files with 416 additions and 2100 deletions
+5 -19
View File
@@ -71,11 +71,9 @@ export function useAudioPlayer() {
store.setSong(song)
firedMilestones.clear()
// Try OGG first, fall back to MP3
const oggPath = song.file.replace(/\.mp3$/, '.ogg')
const canOgg = el.canPlayType('audio/ogg; codecs=vorbis')
el.src = canOgg ? oggPath : song.file
// Only MP3 files are published (no .ogg on disk nor in production):
// asking for OGG first cost a 404 and a delay on every track.
el.src = song.file
el.volume = store.volume
try {
@@ -84,20 +82,8 @@ export function useAudioPlayer() {
startTimeUpdate()
trackAudioPlay(song.id, song.title)
}
catch {
// If OGG failed, try MP3
if (el.src !== song.file) {
el.src = song.file
try {
await el.play()
store.play()
startTimeUpdate()
trackAudioPlay(song.id, song.title)
}
catch (err) {
console.error('Playback failed:', err)
}
}
catch (err) {
console.error('Playback failed:', err)
}
}