Calling onScroll() immediately after attaching the listener caused the
footer to appear on page load when content height exceeded clientHeight
by less than the threshold (0 >= smallOverflow - 100 = true at scrollTop=0).
Footer now starts hidden and only reveals on explicit user scroll.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- App.svelte: sync body[data-template] on every active template change.
PHP only sets it on initial load; SPA navigation left it stale (e.g.
stuck on "home"), breaking CSS selectors like [data-template="white-paper"].
- Footer.svelte: guard atBottom with an overflow check.
When scrollHeight === clientHeight (no overflow), the old formula
(0 >= 0 - threshold) was always true, showing the footer immediately
on pages with no scrollable content (e.g. white-paper detail on load).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove GalleryAnimation preloading (was downloading full-size originals
via new Image(), causing 5MB+ redundant downloads on top of WebP srcset)
- Gallery now shows immediately, images load lazily via DOM
- Force eager loading on mockup img when slide becomes active (fixes
first-project gallery never showing — lazy img off-screen on bg slide)
- Resize all direct ->url() calls to appropriate display dimensions:
gallery src 600px, mockup src 960px, backgrounds 1920px,
play lettering 500px, play preview 1000px, team photos 400px
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
Defer GalleryAnimation rendering until mockup image is fully loaded.
Ensures mockup has bandwidth priority over gallery images.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Images start at opacity:0 and fade in on load event. MutationObserver
catches cached images before first paint to show them instantly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
preloadAll caused slow loading by fetching all projects' images at once
(and 404s from srcset strings used as img src). {#key currentIndex}
destroys/recreates DOM on project switch, eliminating stale images.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Only render the active slide initially. After its critical media (videos)
fires canplaythrough, progressively render remaining slides by distance.
JSON loading is now sequential by proximity instead of all-parallel.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
Replace complex segment-based video control with a simpler model:
- Scroll down → advance one text item (650ms lock) + play video forward
- Scroll up → go back one text item + play video in reverse
- Video plays continuously in chosen direction, decoupled from text items
- Remove useScrollNav, segmentEnds, offsetY, computeOffset, fwdTarget/revTarget
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 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>
- 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>
- WhitePaper : cover en absolute bottom-left, overflow hidden sur mobile
- WhitePapers : position relative sur le conteneur
- Panel : fix couleur du tick des checkboxes/radios cochés
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Le champ mockup (translate: false) retournait null en version anglaise
car Kirby lisait le fichier de contenu EN vide. On lit maintenant
explicitement via defaultLanguage pour toutes les langues.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 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>