*,*::before,*::after{box-sizing:border-box}
html{-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
body{margin:0;background:var(--bg-page);color:var(--text-primary);font-family:var(--font-body);font-size:var(--type-body);line-height:var(--leading-body);letter-spacing:var(--track-body)}
h1,h2,h3,h4{font-family:var(--font-display);font-weight:var(--weight-bold);margin:0;text-wrap:balance}
p{text-wrap:pretty}
a{color:var(--text-primary);text-decoration:none;transition:color var(--dur-fast) var(--ease-standard)}
a:hover{color:var(--accent)}
::selection{background:var(--acid);color:var(--obsidian)}
:focus-visible{outline:1px solid var(--focus-ring);outline-offset:3px}
.vs-grain{position:fixed;inset:0;pointer-events:none;z-index:9999;background-image:var(--grain-url);opacity:var(--grain-opacity);mix-blend-mode:overlay}
.vs-label{font-family:var(--font-mono);font-size:var(--type-nano);letter-spacing:var(--track-label);text-transform:uppercase;color:var(--text-secondary)}
.vs-grid{display:grid;grid-template-columns:repeat(var(--grid-columns),minmax(0,1fr));gap:var(--grid-gutter)}
@keyframes vsLineReveal{from{transform:translateY(105%)}to{transform:translateY(0)}}
@keyframes vsLensDrift{from{filter:hue-rotate(0deg)}50%{filter:brightness(1.08)}to{filter:hue-rotate(0deg)}}
@keyframes vsSheen{0%{opacity:0;transform:translateX(-30%)}40%{opacity:0.9}100%{opacity:0;transform:translateX(30%)}}
@media (prefers-reduced-motion:reduce){*{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important}}
