/* Shared mechanics. Each story supplies its own composition and visual language. */
body[data-story]{--ex-ink:var(--ink,#182c23);--ex-paper:var(--paper,#f5f1e6);--ex-accent:var(--accent,#ed83b3)}
.experience-progress{position:fixed;z-index:200;inset:0 0 auto;height:3px;background:var(--ex-accent,#ed83b3);transform:scaleX(var(--reading-progress,0));transform-origin:left;pointer-events:none}
.story-motion-toggle{position:fixed;right:18px;bottom:18px;z-index:150;display:inline-flex;align-items:center;gap:8px;padding:10px 15px;border:1px solid currentColor;border-radius:100px;background:var(--ex-paper,#f5f1e6);color:var(--ex-ink,#182c23);font:10px/1.2 Mono,monospace;box-shadow:0 3px 18px #0001;cursor:pointer}
.story-motion-toggle::before{content:'';width:5px;height:5px;background:var(--ex-accent,currentColor);border-radius:50%}.story-motion-toggle[aria-pressed=false]::before{background:currentColor;opacity:.35}
.story-motion-toggle:focus-visible{outline:3px solid var(--ex-accent,currentColor);outline-offset:4px}
.experience-ready [data-reveal]{transition:opacity .75s ease,translate .9s cubic-bezier(.16,1,.3,1),clip-path 1.1s cubic-bezier(.16,1,.3,1),scale 1s cubic-bezier(.16,1,.3,1)}
.experience-ready [data-reveal]:not(.is-revealed){opacity:0;translate:0 32px}
.experience-ready [data-reveal=mask]:not(.is-revealed){opacity:0;translate:0 0;clip-path:inset(0 0 18% 0)}
.experience-ready [data-reveal=slide]:not(.is-revealed){translate:-32px 0}
.experience-ready [data-reveal=scale]:not(.is-revealed){scale:.93}
.experience-ready [data-type=words]{opacity:1;translate:0 0;clip-path:none}
.ex-word{display:inline-block;transition:translate .85s cubic-bezier(.16,1,.3,1),opacity .6s ease;transition-delay:calc(min(var(--word-index,0),12)*35ms)}
.experience-ready [data-type=words]:not(.is-revealed) .ex-word{opacity:0;translate:0 .8em}
html.ex-custom-cursor body,html.ex-custom-cursor body a,html.ex-custom-cursor body button,html.ex-custom-cursor body [role=button]{cursor:var(--experience-cursor),auto}
html.ex-custom-cursor body input,html.ex-custom-cursor body textarea{cursor:text}
html.ex-custom-cursor body input[type=range]{cursor:ew-resize}
.ex-cursor-trail{position:fixed;z-index:199;left:0;top:0;pointer-events:none;user-select:none;width:17px;height:17px;display:grid;place-items:center;color:var(--ex-accent);font:16px/1 Georgia,serif;will-change:transform,opacity}
.ex-cursor-trail svg{width:100%;height:100%;display:block}
.experience-ready [data-scroll]:not(.is-in-frame) *,.is-page-hidden *{animation-play-state:paused!important}
html.experience-reduced [data-reveal],html.reduce-motion [data-reveal]{opacity:1!important;translate:0 0!important;scale:1!important;clip-path:none!important;transition:none!important}
html.experience-reduced .ex-word,html.reduce-motion .ex-word{opacity:1!important;translate:0 0!important;transition:none!important}
html.experience-reduced,html.experience-reduced *{scroll-behavior:auto!important;animation:none!important;transition:none!important}
html.experience-reduced [data-parallax]{transform:none!important}
@media(max-width:760px){.story-motion-toggle{right:12px;bottom:12px;padding:9px 12px;font-size:9px}.experience-ready [data-reveal]:not(.is-revealed){translate:0 20px}.ex-cursor-trail{display:none}}
@media(prefers-reduced-motion:reduce){html:not(.motion-user-on) [data-reveal],html:not(.motion-user-on) .ex-word{opacity:1!important;translate:0 0!important;scale:1!important;clip-path:none!important;transition:none!important}}
