Commit graph

158 commits

Author SHA1 Message Date
isUnknown
7838342f96 fix(expertise): attend seeked avant de switcher la vidéo visible
All checks were successful
Deploy / Deploy to Production (push) Successful in 5m25s
Le flash venait du fait que isReverse changeait immédiatement après
le seek (synchrone), mais le navigateur n'avait pas encore décodé
le frame cible. Maintenant on attend l'événement seeked du <video>
avant de changer isReverse, garantissant que le bon frame est affiché
au moment du switch.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 14:32:27 +01:00
isUnknown
ff5b0028f1 fix(expertise): refonte logique vidéo forward/reverse sans flash
Problèmes corrigés :
- Flash au changement de direction : l'ancien code attendait un événement
  seeked avant de switcher la visibilité, montrant un mauvais frame.
  Maintenant on positionne la vidéo cible AVANT de la rendre visible.
- Reprise forward depuis mauvaise position : stopActiveVideo() + playForward()
  synchronisent correctement currentFwdTime avant le switch.
- segmentEnds[0] = 0 → currentFwdTime snappé exactement à la cible dans
  les handlers timeupdate (plus de dérive à 0.1).

Changements :
- switchToForward/switchToReverse : positionnent la cible puis changent isReverse
- playForward/playReverse simplifiés : plus de logique seeked conditionnelle
- navigate() simplifié : forward=down, reverse=up, extension de cible si déjà actif
- CSS : opacity 0/1 + transition au lieu de display none/block pour éviter les flashes
- timeupdate : snap exact à la cible au lieu d'approximation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 14:29:41 +01:00
isUnknown
dd69e54746 feat(expertise): vidéo démarre au premier scroll, pas à l'entrée du slide
- segmentEnds : i/(itemCount-1) au lieu de (i+1)/itemCount
  → item 0 = position 0 (vidéo à l'arrêt), item final = fin de vidéo
- initPlayback : supprime fwdTarget et play() immédiats, positionne juste à 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 14:23:53 +01:00
isUnknown
dee786e9e2 fix(article): section share centrée + suppression bordure articles recommandés 2026-03-20 14:08:37 +01:00
isUnknown
3ce0f939d8 revert(jeu): retour à l'état ddfcf4d — iframe directe + overlay CSS 2026-03-20 13:51:37 +01:00
isUnknown
421d39d773 debug(jeu): charge l'iframe directement pour diagnostiquer 2026-03-20 13:48:23 +01:00
isUnknown
b4dfc4480e fix(jeu): src injecté au clic (about:blank initial) + event delegation
- 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>
2026-03-20 12:14:57 +01:00
isUnknown
ddfcf4de70 fix(jeu): overlay fonctionnel — CSS complet + URL sanitizée + data-state
All checks were successful
Deploy / Deploy to Production (push) Successful in 22s
- 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>
2026-03-20 12:08:33 +01:00
isUnknown
2af4604c08 fix(jeu): positionnement overlay — retire float iframe, position absolute overlay 2026-03-20 12:03:18 +01:00
isUnknown
c26de10eac fix(jeu): type url → text pour accepter les query params complexes 2026-03-20 11:59:27 +01:00
isUnknown
5b9b190b35 feat(jeu): bloc Kirby iframe + logique click-to-play dans Article.svelte
- 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>
2026-03-20 11:57:21 +01:00
isUnknown
ef992708fc chore: réordonnancement CSS expertise, log debug router, newline backend
- Expertise : réordonne align-self avant font-size dans .expertise-title
- Router : ajout console.log pour debug des données de slide
- expertise.json.php : suppression newline final

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 11:52:37 +01:00
isUnknown
869dacd121 fix(play): ratio SVG curves et simplification état actif carousel
- SVG curves : height 100vh / width auto (conserve le ratio)
- Carousel : fusionne les règles de border sur .active picture img
- Mobile : carousel décalé d'une ligne (grid-area 15), taille active corrigée

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 11:52:28 +01:00
isUnknown
e51f3fbfce fix(portfolio): layout texte/keywords et typographie description
- Remplace flex par un affichage statique sur .portfolio-text
- h2 : ajout font-family Danzza Bold
- description : font Danzza, font-size subtitle, line-height 1.4
- keywords : grid 2 colonnes avec row-gap, margin verticale
- catchphrase : margin-bottom 1rem
- Mobile : grid-area texte décalé d'une ligne, ajustements description

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 11:52:18 +01:00
isUnknown
65e345585a fix(styles): typographie strong, grille layout, ajustements collection mobile
- fonts.css : strong { font-weight: 900 }
- layout.css : ajustement grid-template-rows (lignes 6-7 réduites à 2fr)
- collection.css : padding header mobile, tailles de police, gap carte,
  image aspect-ratio avec marges, line-height description

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 11:52:12 +01:00
isUnknown
b655a22bf6 fix(blog): lien "lire l'article" sous l'image sur mobile + champ date corrigé
- Déplace les liens read-more après l'image sur mobile (desktop-only/mobile-only)
- Corrige le champ date : article.date → article.published
- Ajuste le padding .page-container sur mobile

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 11:52:06 +01:00
isUnknown
517c701ab9 feat(footer): suppression newsletter, h3 → p.footer-label, corrections CSS mobile
- Retire la section newsletter commentée et tout son CSS associé
- Remplace les h3 par des p.footer-label (sémantique plus correcte)
- Réduit le gap des colonnes footer
- Fix divider mobile (7% width, 2px height)
- Ajoute offset margin-left pour .collection .page-scrollable-footer mobile

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 11:08:14 +01:00
isUnknown
1625ee1c44 expertise : fix title custom marks implementation
All checks were successful
Deploy / Deploy to Production (push) Successful in 26s
2026-03-20 09:53:49 +01:00
isUnknown
79019b761f Feat: écran de remerciement post-téléchargement white paper
All checks were successful
Deploy / Deploy to Production (push) Successful in 22s
- Remplace le message inline par un écran centré (smiley + heading + signature)
- Ajout clés i18n wp_success_heading / wp_success_sub
- Ajustements blueprints white-paper / white-papers / site
- Route : stockage leads sur page livres-blancs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 11:36:00 +01:00
isUnknown
1cbb843c89 Feat: ajustements UI white-paper, home, portfolio + icône download
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 11:21:05 +01:00
isUnknown
fcca068868 Fix: navigation sous-pages blog/white-papers + singleSlug
All checks were successful
Deploy / Deploy to Production (push) Successful in 25s
- App.svelte : flèches clavier bloquées sur sous-page (ArrowLeft → history.back())
- Blog/WhitePapers : reset de articleData/itemData après 1100ms (post-transition)
  pour éviter le flash pendant l'animation de changement de slide
- WhitePapers : singleSlug jamais resetté (pré-affiché à l'arrivée sur la slide)
- WhitePapers : $effect sur isActive pour replaceState + openItem si itemData null
- WhitePapers/Blog : handlePopState ignore les popstate hors de la page courante

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 07:36:43 +01:00
isUnknown
9f8854efa5 Fix: suppression du timing check (faux positifs sur desktop)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 07:15:44 +01:00
isUnknown
67d8159787 Feat: sécurisation formulaire white paper + stockage leads
- Honeypot, timing check, rate limiting IP, validation serveur
- Déduplication par email : enrichissement des champs vides si contact existant
- Blueprint white-paper : onglet "Contacts intéressés" (champ structure contactDatabase)
- Blueprint site.yml : ajout onglet "Données d'usage" pour vue globale des leads
- Route externalisée dans site/config/routes/download-white-paper.php
- isDownloadable côté client (prénom, nom, email valide, consentement)
- Cursor : pas de hover sur boutons disabled
- Buttons : hover désactivé si disabled

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 07:11:00 +01:00
isUnknown
974067d986 Refactor: WhitePaper — redesign layout + suppression préfixes wp-
- Nouveau layout desktop : flex row avec catch-area (label + titre) et form-area (formulaire)
- Mobile : height 100vh non-scrollable, overlay formulaire déclenché au clic
- Tablet : grid 2 colonnes
- Suppression des préfixes wp- sur toutes les classes (CSS scopé Svelte)
- white-paper.json.php : intro via ->inline() pour texte brut

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 18:48:50 +01:00
isUnknown
d4f05d6157 Feat: Livres blancs — nouveau template collection + livre blanc individuel
- Blueprints white-papers / white-paper (intro, cover, PDF, date)
- Templates PHP + JSON API (liste avec singleSlug, détail avec fileUrl)
- Route POST (:any)/(:any)/download pour le téléchargement gated
- Panel : entrée white-papers ajoutée au menu après blog
- collection.css : styles partagés extraits de Blog (collection-*)
- Blog.svelte : classes renommées blog-* → collection-*
- WhitePapers.svelte : vue liste, URLs dynamiques via data.uri
- WhitePaper.svelte : vue détail deux colonnes + formulaire de téléchargement
- i18n : clés white paper (label, form, consentement, statuts)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 17:37:22 +01:00
isUnknown
42ee58c18d site title format
All checks were successful
Deploy / Deploy to Production (push) Successful in 19s
2026-03-18 16:20:47 +01:00
isUnknown
474baf321b Fix/Feat: footer, newsletter, logo footerLogo, i18n, router formatting
- Footer : newsletter commentée, margin-top blog, text-align footer-col
- Blueprint site : logo → footerLogo (champ dédié au pied de page)
- Controller : logo → footerLogo
- i18n : newsletter_heading mis à jour (newsletters)
- site.svelte.js : retrait console.log debug
- router/index.js : reformatage quotes (linter)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 16:17:16 +01:00
isUnknown
c6fa61c77b Feat: footer reveal — page-scrollable-footer intégré aux vues
All checks were successful
Deploy / Deploy to Production (push) Successful in 25s
- Footer renommé page-scrollable-footer, positionné en dernier enfant
  de .page-container dans About, Blog et Article
- Marges négatives pour aligner le footer pleine largeur (about / blog)
- Retrait du footer global fixe de App.svelte

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 12:14:59 +01:00
isUnknown
4d425dd126 fix home subtitle
All checks were successful
Deploy / Deploy to Production (push) Successful in 19s
2026-03-17 10:34:29 +01:00
isUnknown
4c586a1b86 about blueprint heading -> writer
All checks were successful
Deploy / Deploy to Production (push) Successful in 20s
2026-03-17 10:30:13 +01:00
isUnknown
5b99247bb7 member blueprint : translate data
All checks were successful
Deploy / Deploy to Production (push) Successful in 20s
2026-03-17 10:27:50 +01:00
isUnknown
d9494f92dd about blueprint : add h3 in writer
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
2026-03-17 10:26:17 +01:00
isUnknown
b3b0580ab1 Feat: footer reveal + refactor page About
All checks were successful
Deploy / Deploy to Production (push) Successful in 24s
- Footer global fixé en bas (App.svelte), masqué par le contenu des slides
- margin-bottom sur .page-scrollable pour l'effet footer reveal (about, blog, article)
- About : champ intro remplacé par heading (text) + subtitle (writer), blueprint + API + vue mis à jour
- LanguageSwitcher : div → button avec hitbox élargie
- i18n : clé our_team (fr: NOTRE ÉQUIPE / en: OUR TEAM)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 10:00:53 +01:00
isUnknown
61607f8cd7 Feat: page À propos — redesign complet avec carrousel équipe
All checks were successful
Deploy / Deploy to Production (push) Successful in 5m23s
- Fix about.json.php : lecture des vrais champs Kirby (intro writer,
  body blocks, files template member) — corrige le bug [object Object]
- About.svelte : redesign fidèle à la source (intro centrée, blocs
  mission/manifeste avec bordure verte, carrousel équipe horizontal
  3/2/1 items selon breakpoint, swipe tactile, prev/next + pagination)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 10:39:24 +01:00
isUnknown
773be2840c Feat: swipe gauche/droite sur Play mobile
All checks were successful
Deploy / Deploy to Production (push) Successful in 19s
Même logique que les touches fléchées : navigation entre jeux,
aux limites passage à la slide précédente/suivante via slideTo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 09:31:43 +01:00
isUnknown
44912c1d2f Fix: Play mobile layout adjustments
All checks were successful
Deploy / Deploy to Production (push) Successful in 23s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 09:21:50 +01:00
isUnknown
4eb495c021 Refactor: header sémantique + backdrop limité à expertise/about/blog
- Header : <nav> enveloppée dans <header> (landmark sémantique)
- Backdrop navbar restreint aux slides about et blog (scroll > 100px)
- Portfolio : $effect navbar backdrop supprimé + import navigation retiré

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 09:06:14 +01:00
isUnknown
0a346040a2 Fix: portfolio mobile layout adjustments
All checks were successful
Deploy / Deploy to Production (push) Successful in 19s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 19:33:01 +01:00
isUnknown
e45380258b Feat: portfolio polish + font Danzza Light
- App.svelte : classe active sur la slide courante
- Portfolio : flèches PNG custom, <output> pour le compteur, transition gallery mobile avec délai à l'entrée seulement
- fonts.css : @font-face Danzza Light + classe .font-face-danzza-light corrigée

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 19:28:44 +01:00
isUnknown
77080c4928 Misc: ajustements i18n, menu et controller
All checks were successful
Deploy / Deploy to Production (push) Successful in 20s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 18:38:03 +01:00
isUnknown
ae86f0ce1c Feat: Portfolio mobile — background image + gallery animation + arrows/counter
- Background fixe mobile (BG GAME MOBILE.png, position bottom)
- GalleryAnimation en plein écran sur mobile (position fixed, opacité 0.8)
- Arrows + compteur 01/05 ajoutés (desktop grid-area 18/16, mobile 18/15)
- Layout mobile : mockup centré, texte par-dessus, keywords masqués, nav horizontale 75px
- Séparation desktop-only / mobile-only pour la galerie

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 18:37:58 +01:00
isUnknown
a0798e71d0 Feat: navbar frosted glass au scroll
- navigation.svelte.js : ajout isScrolled + setScrolled()
- Header : scroll listener (capture) sur .page-scrollable > 100px,
  reset au changement de slide, classe navbar--scrolled conditionnelle,
  transition 0.4s sur background-color et backdrop-filter
- Expertise : $effect notifie quand currentItem > 0
- Portfolio : $effect notifie quand currentIndex > 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 15:05:25 +01:00
isUnknown
517143fe60 Feat: intégration multilingue FR/EN (i18n)
All checks were successful
Deploy / Deploy to Production (push) Successful in 18s
- Ajout de src/i18n/index.js : dictionnaire centralisé + fonction t(key, vars)
- Ajout de LanguageSwitcher.svelte : toggle FR/EN avec persistance localStorage
- Router : normalizePath strip /en/, apiPrefix() pour les fetches, détection langue (URL > localStorage > navigator)
- Tous les composants (Header, Menu, Footer, Article, Blog, Play) migrent vers t() depuis @i18n
- Blog : navigation interne (fetch, history, getSlugFromUrl) locale-aware

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 11:57:59 +01:00
isUnknown
3bd410cc02 Fix: footer repositionné sous l'article via article-wrapper
Le footer était auto-placé par la CSS Grid golden-grid avant l'article.
Wrap article + footer dans .article-wrapper qui porte le grid-area.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 11:38:01 +01:00
isUnknown
3a2b5a2f57 Perf: optimisation vidéos page expertise
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
- Vidéos recompressées (CRF 23, faststart) : 13MB → 3.4MB et 3.7MB
- Champs Kirby dynamiques pour vidéo normale et inverse
- Sources dynamiques via data.backgroundVideo / data.backgroundVideoReverse

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 15:54:49 +01:00
isUnknown
84744cd4a3 Fix: home.yml — nettoyage blueprint vidéo
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 15:49:15 +01:00
isUnknown
0b3d2e3dbc Docs: retrait WebM VP9 — un seul champ vidéo par source dans Kirby
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 15:48:38 +01:00
isUnknown
8d6f943375 Docs: présentation FFmpeg et méthodes d'installation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 15:47:18 +01:00
isUnknown
af4d6200c6 Docs: guide de choix entre H.264 et WebM VP9
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 15:46:42 +01:00
isUnknown
5c77e4817d Docs: commandes FFmpeg pour compression vidéo
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 15:40:18 +01:00