/* Shared FRAME v2 kit: theme switch, reveals, split text, toast. Colors come from each page's tokens. */
:root{--ez:cubic-bezier(.2,.7,.1,1);--spring:cubic-bezier(.32,.72,0,1)}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0}
img{max-width:100%}
button{font:inherit;color:inherit;cursor:pointer}
a{color:inherit}
:focus-visible{outline:2px solid var(--focus,#edc47c);outline-offset:3px}
[hidden]{display:none!important}
::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}
::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}

/* theme switch */
.fx-theme{border:0;background:none;padding:0;display:inline-flex;align-items:center}
.fx-theme-track{position:relative;display:inline-flex;align-items:center;justify-content:space-between;width:60px;height:30px;border-radius:99px;padding:0 7px;border:1px solid color-mix(in srgb,currentColor 35%,transparent);background:color-mix(in srgb,currentColor 6%,transparent)}
.fx-theme svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.6;position:relative;z-index:1;transition:opacity .4s}
.fx-theme .i-moon{fill:currentColor;stroke:none}
.fx-theme-knob{position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:currentColor;opacity:.18;transition:transform .55s var(--spring)}
.fx-theme[aria-checked=true] .fx-theme-knob{transform:translateX(30px)}

/* reveal */
.js .rv{opacity:0;transform:translateY(40px);filter:blur(6px);transition:opacity 1s var(--ez),transform 1.1s var(--ez),filter 1s var(--ez);transition-delay:var(--d,0s)}
.js .rv.in{opacity:1;transform:none;filter:none}
.js .rv-clip{clip-path:inset(0 0 100% 0);transition:clip-path 1.3s cubic-bezier(.7,0,.2,1);transition-delay:var(--d,0s)}
.js .rv-clip.in{clip-path:inset(0 0 0 0)}
.js .rv-scale img{transform:scale(1.25);transition:transform 1.8s var(--ez)}
.js .rv-scale.in img{transform:scale(1)}

/* split words rise */
.sw{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.06em;margin-bottom:-.06em}
.si{display:inline-block}
.js .split-up .si{transform:translateY(110%);transition:transform 1s var(--ez);transition-delay:calc(var(--i)*55ms + var(--d,0ms))}
.js .split-up.in .si{transform:none}
.sc{display:inline-block}
.js .split-ch .sc{opacity:0;transform:translateY(.4em) rotate(8deg);transition:opacity .6s var(--ez),transform .8s var(--ez);transition-delay:calc(var(--i)*35ms + var(--d,0ms))}
.js .split-ch.in .sc{opacity:1;transform:none}

/* marquee */
.mq{overflow:hidden;white-space:nowrap;display:flex}
.mq>div{display:flex;flex:0 0 auto;animation:mq var(--mq,40s) linear infinite}
@keyframes mq{to{transform:translateX(-100%)}}

/* toast */
.fx-toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom,0px));transform:translate(-50%,30px);opacity:0;z-index:120;background:var(--fg);color:var(--bg);padding:12px 18px;border-radius:99px;font-size:14px;transition:all .5s var(--spring);pointer-events:none;max-width:calc(100vw - 32px)}
.fx-toast.on{opacity:1;transform:translate(-50%,0)}
.fx-confetti{position:fixed;inset:0;pointer-events:none;z-index:130}

/* prototype nav */
.pv-nav{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(10px + env(safe-area-inset-bottom,0px));z-index:110;display:flex;gap:2px;padding:4px;border-radius:99px;background:rgba(10,8,6,.82);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.12);font:500 12px/1 Montserrat,system-ui,sans-serif;max-width:calc(100vw - 20px);overflow-x:auto;scrollbar-width:none;transition:transform .5s var(--spring),opacity .4s}
.pv-nav a{color:#f3e6cc;text-decoration:none;padding:8px 11px;border-radius:99px;white-space:nowrap;opacity:.7}
.pv-nav a:hover{opacity:1}
.pv-nav a[aria-current]{background:#f3e6cc;color:#120a02;opacity:1}
.pv-nav.away{transform:translate(-50%,80px);opacity:0}

@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}

/* chart kit tokens (charts.js) */
.cv-grid{stroke:var(--line);stroke-width:1}
.cv-tick{fill:var(--mute);font:500 11px var(--text,system-ui)}
.cv-val{fill:var(--fg);font:700 11.5px var(--text,system-ui)}
.cv-lab{fill:var(--fg);font:500 12.5px var(--text,system-ui)}
.cv-cross{stroke:var(--mute);stroke-dasharray:3 3}
.cv-mark{transition:opacity .2s}
.cv-tip{position:fixed;z-index:200;pointer-events:none;opacity:0;transition:opacity .12s;background:var(--card,#fff);color:var(--fg);border:1px solid var(--line);box-shadow:0 10px 30px rgba(0,0,0,.25);padding:8px 10px;font:500 12.5px var(--text,system-ui);border-radius:10px;min-width:110px}
.cv-tip-h{color:var(--mute);margin-bottom:4px}
.cv-tip-r{display:flex;align-items:center;gap:8px}
.cv-tip-r i{width:12px;height:2px;border-radius:1px;display:inline-block}
.cv-tip-r b{font-weight:700}
.cv-tip-r span{color:var(--mute)}
