/* Shared base for every UI. Themes override the custom properties and add layout. */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:16px}
body{margin:0;min-height:100vh;overflow-wrap:anywhere}
h1,h2,h3,p,ul,ol{margin-top:0}
img,svg{max-width:100%}
a{text-underline-offset:.2em;text-decoration-thickness:1.5px}
code{font-family:var(--mono,ui-monospace,SFMono-Regular,Menlo,monospace);font-size:.92em}
time{white-space:nowrap}
.visually-hidden{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
.skip{position:absolute;left:-9999px;top:8px;z-index:1000;padding:10px 14px;background:#000;color:#fff;font:600 1rem/1.2 system-ui,sans-serif}
.skip:focus{left:8px}
:focus-visible{outline:3px solid var(--focus,currentColor);outline-offset:3px}
a,button,summary{min-height:24px}
/* Reduced motion: no smooth scroll, no looping animation, no transition above 150ms. */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none!important;transition-duration:.01ms!important;transition-delay:0s!important;scroll-behavior:auto!important}
}
.devto-list{margin:0 0 1em;padding-left:1.2em}
.experiments ul{list-style:none;margin:.3em 0 0;padding:0}.experiments li{margin:.25em 0}.exp-label{margin:1.2em 0 0;font-weight:600}.exp-group{font-weight:600}
/* Phones: section navs wrap tightly (never clipped) */
@media (max-width:600px){nav.one-line{flex-wrap:wrap!important;justify-content:flex-start!important;column-gap:14px!important;row-gap:0!important}nav.one-line a{letter-spacing:.06em!important}}
.edu-h{margin:1.4em 0 .35em}
