Files
ResumeSite/docs/design/04-interaction/SCROLL_EXPERIENCE.md
T
2026-07-03 21:07:25 +02:00

46 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SCROLL_EXPERIENCE.md
## 1. Governing rule
**The scrollbar is a contract.** Native scroll physics everywhere: no hijacking, no pinned scenes, no snap-scrolling on prose, no horizontal sections. Recruiters skim with momentum-flicks; anything that interferes reads as hostile.
## 2. Homepage scroll narrative (desktop)
| Scroll position | What happens | Why |
|---|---|---|
| 0 (load) | Hero static except trace draw (A1) | Decision facts readable instantly |
| 0120px | Header compresses 72→56px, gains blur backdrop + hairline bottom border (linear-mapped to scroll, not toggled — no pop) | Reclaims space, signals "we're moving" |
| Each section at 20% entry | A2 section arrive, once | Reading rhythm |
| Proof strip enter | Chip dots light in stagger (accent pulse A4) | Draws eye across the four facts |
| Projects enter | Cards rise in 2-stagger; screenshots have 4px max parallax offset relative to card scroll | Depth without gimmick |
| Experience enter | Timeline draw (A8) | Guides top-down reading |
| Contact band enter | No animation — band is high-contrast already | Calm before conversion action |
| Any position | Header CV button + nav always available | ≤1 interaction to CV rule |
Scroll-spy updates nav underline per section. No "back to top" button on homepage (header is sticky; document is ~5 viewports); case studies (longer) get one after 3 viewports, ghost-style, bottom-right.
## 3. Case-study scroll
- Mini-TOC (≥1200px) tracks reading position with an accent tick; no progress bars (this is a document, not an article funnel — but see next point).
- Long-form sections use generous `space-9` rhythm; architecture diagram gets full-width breakout (max 1200px) beyond the 72ch prose measure.
- Images lazy-load 1 viewport ahead with aspect-locked skeletons — **zero cumulative layout shift** is a hard requirement.
- Section anchors offset by header height + 24px; anchor links in TL;DR jump correctly.
## 4. Mobile scroll
- No parallax, no scroll-linked header compression (fixed 56px slim header from the start); section reveals still fire (opacity-dominant).
- Sticky elements budget: header only. No sticky CTAs covering content (thumb-reach conversion handled by the contact band + header CV icon-button).
- Overscroll behaviour default; PWA-style rubber-banding untouched.
- Gallery swipe is the only horizontal gesture, clearly contained inside the lightbox.
## 5. Deep-link & restoration behaviour
- Anchor navigation (nav click, TOC, TL;DR links): smooth scroll 400ms max — distance-capped so cross-page-length jumps don't take seconds; reduced motion → instant.
- Back/forward restores scroll position (browser default — do not fight it).
- Language switch preserves scroll ratio where section structure matches (A7); if the target page differs structurally, land at top of the equivalent section rather than a mismatched pixel offset.
## 6. Performance constraints on scroll effects
- All scroll-linked effects (header compression, spy, reveals) via passive observers/transforms — no scroll-handler layout reads (jank = instant credibility loss with P2).
- Reveal thresholds via IntersectionObserver semantics (conceptually); everything degrades to "visible" when JS is absent — **content is never gated behind scroll animation.**