/* ============================================================
   BASE — element resets, layout primitives (.wrap), shared
   typography helpers, and the keyframes used across the app.
   No component-specific rules belong in this file.
   ============================================================ */
*,*::before,*::after{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:13px;line-height:1.5}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer;background:none;border:none;padding:0}
a{color:inherit;text-decoration:none}
:focus-visible{outline:1.5px solid var(--accent-live);outline-offset:2px;border-radius:4px}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

.wrap{max-width:1120px;margin:0 auto;padding:0 22px}
.wrap.narrow{max-width:900px}
.wrap.tight{max-width:720px}
.lab{font-family:var(--sans);font-size:11px;font-weight:700;letter-spacing:.08em;color:var(--faint);text-transform:uppercase;display:block;margin:0 0 10px}
.lab b{font-weight:700;color:var(--ink)}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}

@keyframes rise{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}
.rise{animation:rise .55s cubic-bezier(0.22,1,0.36,1) both}
.rise.d1{animation-delay:.08s}.rise.d2{animation-delay:.16s}.rise.d3{animation-delay:.24s}.rise.d4{animation-delay:.32s}
@keyframes pageEnter{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
.page-enter{animation:pageEnter .32s cubic-bezier(.22,1,.36,1) both}
@keyframes tbFill{from{transform:scaleY(0)}to{transform:scaleY(1)}}
.tb-fill{animation:tbFill .8s cubic-bezier(.22,1,.36,1) both;transform-origin:bottom}
@keyframes tbPop{from{opacity:0;transform:scale(.94) translateY(6px)}to{opacity:1;transform:scale(1) translateY(0)}}
.tb-pop{animation:tbPop .35s cubic-bezier(.22,1,.36,1) both}
@keyframes tbBlink{0%,50%{opacity:1}50.01%,100%{opacity:0}}
.tb-caret{animation:tbBlink 1s steps(1) infinite;margin-left:1px}
