Commit graph

63 commits

Author SHA1 Message Date
isUnknown
5c2c015850 footer : disable pointer events when hidden #57
All checks were successful
Deploy / Deploy to Production (push) Successful in 28s
2026-04-14 09:58:23 +02:00
isUnknown
fc1fa42e67 footer : hide on white paper page
All checks were successful
Deploy / Deploy to Production (push) Successful in 23s
2026-04-04 10:27:10 +02:00
isUnknown
35b3869e97 white paper : hide footer
All checks were successful
Deploy / Deploy to Production (push) Successful in 20s
2026-04-04 10:22:40 +02:00
isUnknown
7241e75023 mobile > footer : disable pointer events
All checks were successful
Deploy / Deploy to Production (push) Successful in 23s
2026-04-04 10:19:32 +02:00
isUnknown
cc61a83139 gallery animation : reveal only once all images are loaded. related to #55
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
Preload unique image URLs via new Image(). Container stays at opacity:0
until all are ready, then reveals at once. Cached images show instantly
(no fade transition). Fixes broken progressive reveal in scrolling gallery.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 12:28:31 +02:00
isUnknown
4b946d4cf0 expertise : fix active text centering - related to #52
All checks were successful
Deploy / Deploy to Production (push) Successful in 28s
2026-04-03 10:54:40 +02:00
isUnknown
6e0b0bd551 improve carousel mobile. related to #53
All checks were successful
Deploy / Deploy to Production (push) Successful in 32s
2026-04-02 16:23:16 +02:00
isUnknown
65f6bf459b hide footer on white paper. closes #52
All checks were successful
Deploy / Deploy to Production (push) Successful in 42s
2026-04-02 15:38:47 +02:00
isUnknown
4ccbad9663 about : extract team carousel into TeamCarousel component (swiper)
Replace inline carousel logic with a dedicated TeamCarousel.svelte component.
Uses SwiperJS for mobile peek (1.4 slides), tablet (2) and desktop (4) layouts,
with touch swipe, pagination dots and prev/next buttons.

related to #53

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 14:52:15 +02:00
isUnknown
0afbcf4088 footer : fix show/hide logic, transition and scroll throttle. related to #51
All checks were successful
Deploy / Deploy to Production (push) Successful in 23s
- Fix scroll listener (cleanup, local querySelector, scrollHeight calc)
- Fix media query syntax in variables.css (missing space in `and (`)
- Use transform: translateY instead of bottom for GPU-accelerated transition
- Throttle scroll handler with requestAnimationFrame
- Move Footer to App.svelte (global), remove per-view imports

refs #51

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 19:18:02 +02:00
isUnknown
8387843da0 article : extract ShareButtons and ArticleRelated components
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 15:32:23 +02:00
isUnknown
8481dc5f90 add white-paper block type for articles
- Kirby block blueprint with page reference + editable bg/text colors
- PHP snippet renders the card with accessible markup (article, h3, button)
- WhitePaperDialog.svelte: native dialog with download form (a11y: labels, fieldset, autocomplete, focus management)
- Article.svelte: click detection on .wp-block__btn + dialog mount

refs #49

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 19:51:21 +02:00
isUnknown
d218bc47d7 fix footer position. closes #8
All checks were successful
Deploy / Deploy to Production (push) Successful in 5m25s
2026-03-30 19:13:42 +02:00
isUnknown
8375a098c9 add privacy page. closes #16
All checks were successful
Deploy / Deploy to Production (push) Successful in 22s
2026-03-30 18:48:58 +02:00
isUnknown
44af8a9b4e add privacy page as standalone SPA view outside slide navigation
- New Kirby template/blueprint/JSON for privacy page (confidentialite slug)
- Standalone page state in slides store + router handling for non-nav pages
- Privacy.svelte view with background image, text blocks, footer
- Centralize vertical lines in App.svelte as fixed elements with per-slide visibility
- Footer privacy link language-aware (FR/EN)
- Portfolio mockup fix: read from default language for consistent EN display
- menu.php: add privacy page to Kirby panel navigation

refs #44

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 18:43:35 +02:00
isUnknown
b12b839f1b header > nav item responsive font size. closes #38
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
2026-03-30 18:18:51 +02:00
isUnknown
532eb5cfa6 header : ajouter le backdrop sur la page livres blancs. closes #40
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 17:34:51 +02:00
isUnknown
a043a8c281 vertical lines : centraliser en fixed dans App.svelte
- Retirer les lignes des views (Home, Expertise, About, Portfolio)
- Centraliser dans App.svelte en position:fixed, visibilité par slide
  via transition de hauteur 0→100vh selon slides.active.template
- Positions calculées depuis la golden-grid (1/6, 1/3, 1/2, 2/3, 5/6)
- Nettoyer layout.css (garder seulement les classes pour Menu.svelte)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 14:13:41 +02:00
isUnknown
cb51e050e4 portfolio : galerie horizontale 3 rangées + mockup conditionnel
All checks were successful
Deploy / Deploy to Production (push) Successful in 25s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 18:53:27 +01:00
isUnknown
133651c35d portfolio : animation horizontale — toggle panel + composant
All checks were successful
Deploy / Deploy to Production (push) Successful in 19s
Ajout du mode horizontal dans GalleryAnimation (5 rangées, scrollLeft/scrollRight)
avec toggle vertical/horizontal dans le panel projet.

refs #21

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 14:37:05 +01:00
isUnknown
2cefdd8867 little style adjustments
All checks were successful
Deploy / Deploy to Production (push) Successful in 21s
2026-03-21 13:41:18 +01:00
isUnknown
6f26c94308 article style
All checks were successful
Deploy / Deploy to Production (push) Successful in 19s
2026-03-21 13:38:42 +01:00
isUnknown
1f8abcd305 closes #7
All checks were successful
Deploy / Deploy to Production (push) Successful in 19s
2026-03-21 13:24:25 +01:00
isUnknown
4538392003 finish portfolio animation without box shadow - related #20
All checks were successful
Deploy / Deploy to Production (push) Successful in 18s
2026-03-21 12:54:33 +01:00
isUnknown
436772502b portfolio gallery animation : decrease opacity - related to #20 2026-03-21 12:42:32 +01:00
isUnknown
deb5f59d5e portfolio > gallery animation : invert col animations directions
All checks were successful
Deploy / Deploy to Production (push) Successful in 18s
related to #20
2026-03-21 12:36:05 +01:00
isUnknown
8829817e48 feat(portfolio): image d'arrière-plan pour la galerie animée
All checks were successful
Deploy / Deploy to Production (push) Successful in 18s
related to #20

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 12:34:46 +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
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
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
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
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
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
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
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
0233a6a4a4 Feat: footer sémantique dans Blog, About et Article
All checks were successful
Deploy / Deploy to Production (push) Successful in 19s
Refonte complète du Footer (sémantique propre, données dynamiques depuis
le store site, bouton subscribe avec l'animation .button partagée).
Intégré dans About, Blog et Article. Scroll-to-top au départ de About et Blog.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 10:57:52 +01:00
isUnknown
b9631b8c53 Fix: remplacer custom media queries par valeurs en dur, retirer postcss-custom-media
All checks were successful
Deploy / Deploy to Production (push) Successful in 5m23s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 18:55:37 +01:00
isUnknown
66767f0136 Feat: breakpoints CSS en @custom-media via postcss-custom-media
- postcss.config.js: plugin postcss-custom-media
- variables.css: @custom-media --mobile / --tablet / --tablet-only
- Remplacement de tous les max-width: 700px et 912px hardcodés
  par @media (--mobile), (--tablet), (--tablet-only)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 08:34:37 +01:00
isUnknown
11a2c623cb Feat: images responsives vignettes Play + composant ResponsivePicture
- Config: presets thumbnail + thumbnail-webp (170/255/355/510/710w)
- play.json.php: expose thumbnailSrcset + thumbnailWebp
- Nouveau composant ResponsivePicture.svelte (src, srcset, webp, sizes, alt, cls)
- Play.svelte: utilise ResponsivePicture dans le carousel
  sizes="clamp(170px, 18.41vw, 355px)"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 08:08:34 +01:00
isUnknown
3cafcf3167 Feat: lignes courbes SVG sur Play + refonte blueprint game
- Play.svelte : ajout overlay SVG (background-play), suppression des vertical-line
- game.yml : restructuration du blueprint
- Header.svelte : modifications mineures

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 14:18:38 +01:00
isUnknown
d8a0fde34c Upgrade Svelte 5.0.0 → 5.53.7 + fix Cursor class syntax
All checks were successful
Deploy / Deploy to Production (push) Successful in 18s
- Mise à jour de Svelte vers 5.53.7 pour supporter la syntaxe tableau/objet sur l'attribut class
- Cursor.svelte : class={[...]} avec états onTarget et onClick
- blueprints : catchphrase → catchPhrase
- buttons.css : suppression cursor: pointer
- Portfolio.svelte : scale hover nav item

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 13:20:28 +01:00
isUnknown
802a3ed5bf Feat: couleur d'arrière-plan dynamique sur GalleryAnimation (galleryBackgroundColor)
All checks were successful
Deploy / Deploy to Production (push) Successful in 19s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-06 18:22:50 +01:00
isUnknown
47be2b4662 Refactor: styles GalleryAnimation migrés dans le composant
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-06 18:11:31 +01:00
isUnknown
88a5c78d7a Opti: images galerie portfolio en srcset webp
Kirby: preset 'gallery' + 'gallery-webp' (200→800px, qualité 80)
API: images_gallery retourne {src, srcset, webp} au lieu d'une simple URL
GalleryAnimation: <picture> + srcset, sizes 15vw desktop / 33vw mobile
decoding="async" ajouté

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-06 16:41:50 +01:00
isUnknown
0b563b4697 Feat: page Portfolio avec galerie animée, navigation par scroll/touch/clavier
All checks were successful
Deploy / Deploy to Production (push) Successful in 18s
- Composable useScrollNav partagé entre Expertise et Portfolio (wheel/touch/clavier)
- GalleryAnimation : 3 colonnes CSS défilantes infinies avec décalage et delay
- Portfolio : golden grid, mockup centré, infos projet, sidebar vignettes navigables
- API portfolio.json.php alignée sur blueprint project.yml (catchphrase, images_gallery, mockup, keywords, external_links)
- Variable --ease-standard partagée dans variables.css
- Alias @composables ajouté dans vite.config.js
- Refactor Expertise pour utiliser le composable (comportement identique)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 17:13:50 +01:00
isUnknown
a737fea100 Feat: navbar mobile padding et hauteur minimale
All checks were successful
Deploy / Deploy to Production (push) Successful in 13s
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-19 14:40:37 +01:00
isUnknown
d44c886e8c Feat: responsive header mobile + variables breakpoints
- variables.css : --breakpoint-mobile (700px) et --breakpoint-tablet (912px)
- Header : .navbar-item { display: none } en dessous de 700px
- Header/Menu : annotation des media queries avec les variables de référence

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-19 14:38:06 +01:00