*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
body{margin:0;background:var(--color-background);color:var(--color-text-primary);font-family:var(--font-sans);font-size:var(--text-body);line-height:var(--leading-body);letter-spacing:var(--tracking-body);overflow-x:hidden}
img,video,canvas{display:block;max-width:100%}
h1,h2,h3,h4,p{margin:0}
h1,h2,h3{font-weight:var(--weight-semibold);letter-spacing:var(--tracking-heading);line-height:var(--leading-heading);text-wrap:balance}
p{text-wrap:pretty}
a{color:var(--color-text-primary);text-decoration:none;transition:color var(--duration-micro) var(--ease-out),opacity var(--duration-micro) var(--ease-out)}
a:hover{color:var(--color-accent)}
button{font:inherit;color:inherit}
::selection{background:var(--color-accent-soft);color:var(--color-text-primary)}
:focus-visible{outline:2px solid var(--color-focus);outline-offset:3px;border-radius:6px}
/* theme transition: applied briefly by ThemeToggle so switching never flashes */
html.nh-theme-transition,html.nh-theme-transition *,html.nh-theme-transition *::before,html.nh-theme-transition *::after{transition:background-color var(--duration-theme) var(--ease-out),border-color var(--duration-theme) var(--ease-out),color var(--duration-theme) var(--ease-out),fill var(--duration-theme) var(--ease-out),box-shadow var(--duration-theme) var(--ease-out)!important}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important;scroll-behavior:auto!important}}
