/* ==========================================================================
   nitaimaarek UI — the shared framework for every *.nitaimaarek.com site
   https://framework.nitaimaarek.com/ui.css        reference: /  ·  /ui.md

   Two layers:
     1. CLASSLESS  — styles bare HTML. Drop the <link> in, get a themed site
                     with zero markup changes.
     2. COMPONENTS — opt-in .ui-* classes for richer widgets.

   Retheme with one line:
       <html style="--ui-hue:280">      accent hue
       <html style="--ui-tint:220">     neutral (surface/border/text) hue
       <html style="--ui-radius:0px">   square corners everywhere
       <html style="--ui-blur:0px">     turn the frosted glass off
       <html data-theme="light">        force a mode; default follows the OS
   ========================================================================== */

/* --------------------------------------------------------------------------
   TOKENS — single source of truth for the whole network.
   -------------------------------------------------------------------------- */
:root {
  /* --- colour ----------------------------------------------------------- */
  --ui-hue: 265;          /* accent hue: 265 iris · 190 cyan · 150 green · 25 amber */
  --ui-sat: 70%;          /* accent saturation                                */
  --ui-tint: 240;         /* neutral hue — 240 cool ink, 40 warm graphite      */
  --ui-tint-sat: 6%;      /* how much the greys lean; 0% = pure neutral        */

  /* --- shape ------------------------------------------------------------ */
  /* One knob. Everything is a multiple of it, so --ui-radius:0 squares the
     entire UI and a big value rounds all of it. */
  --ui-radius: 14px;
  --ui-radius-xs: calc(var(--ui-radius) * .35);
  --ui-radius-sm: calc(var(--ui-radius) * .65);
  --ui-radius-lg: calc(var(--ui-radius) * 1.35);
  --ui-radius-pill: 999px;
  --ui-density: 1;        /* 0.85 compact · 1.15 roomy                        */
  --ui-border: 1px;
  --ui-blur: 20px;        /* frosted-glass strength; 0 disables it            */
  --ui-lift: -2px;        /* how far interactive things rise on hover         */

  /* --- spacing scale ---------------------------------------------------- */
  --ui-1: calc(4px * var(--ui-density));
  --ui-2: calc(8px * var(--ui-density));
  --ui-3: calc(12px * var(--ui-density));
  --ui-4: calc(16px * var(--ui-density));
  --ui-5: calc(24px * var(--ui-density));
  --ui-6: calc(32px * var(--ui-density));
  --ui-7: calc(48px * var(--ui-density));
  --ui-8: calc(64px * var(--ui-density));

  /* --- type ------------------------------------------------------------- */
  --ui-font: Inter, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --ui-mono: ui-monospace, "SF Mono", "JetBrains Mono", "Cascadia Mono", Menlo, Consolas, monospace;
  --ui-display: var(--ui-font);   /* face for h1–h4 */
  --ui-fs: 15px;
  --ui-lh: 1.6;
  --ui-measure: 72ch;
  --ui-width: 1120px;

  /* --- motion ----------------------------------------------------------- */
  --ui-fast: 150ms;
  --ui-mid: 240ms;
  --ui-slow: 420ms;
  --ui-ease: cubic-bezier(.4, 0, .2, 1);
  --ui-spring: cubic-bezier(.34, 1.4, .5, 1);

  /* --- elevation -------------------------------------------------------- */
  --ui-shadow-1: 0 1px 2px rgb(0 0 0 / .30);
  --ui-shadow-2: 0 10px 30px -12px rgb(0 0 0 / .55), 0 2px 6px -2px rgb(0 0 0 / .30);
  --ui-shadow-3: 0 24px 80px -20px rgb(0 0 0 / .70), 0 6px 20px -8px rgb(0 0 0 / .40);
  --ui-ring: 0 0 0 3px hsl(var(--ui-hue) var(--ui-sat) 55% / .32);

  /* --- palette: dark is the default ------------------------------------- */
  --ui-bg:        hsl(var(--ui-tint) calc(var(--ui-tint-sat) + 4%) 4%);
  --ui-bg-alt:    hsl(var(--ui-tint) var(--ui-tint-sat) 7.5%);
  --ui-surface:   hsl(var(--ui-tint) var(--ui-tint-sat) 9.5%);
  --ui-surface-2: hsl(var(--ui-tint) var(--ui-tint-sat) 14%);
  --ui-line:      hsl(var(--ui-tint) var(--ui-tint-sat) 22%);
  --ui-line-soft: hsl(var(--ui-tint) var(--ui-tint-sat) 15%);
  --ui-text:      hsl(var(--ui-tint) 10% 96%);
  --ui-muted:     hsl(var(--ui-tint) 6% 66%);
  --ui-faint:     hsl(var(--ui-tint) 6% 46%);

  /* frosted panels — translucent so the background shows through */
  --ui-glass:      hsl(var(--ui-tint) var(--ui-tint-sat) 8% / .62);
  --ui-glass-2:    hsl(var(--ui-tint) var(--ui-tint-sat) 12% / .72);
  --ui-glass-line: rgb(255 255 255 / .10);
  --ui-glass-hi:   rgb(255 255 255 / .05);   /* inset top highlight */

  --ui-accent:      hsl(var(--ui-hue) var(--ui-sat) 68%);
  --ui-accent-hi:   hsl(var(--ui-hue) var(--ui-sat) 78%);
  --ui-accent-lo:   hsl(var(--ui-hue) var(--ui-sat) 56%);
  --ui-accent-ink:  hsl(var(--ui-hue) 60% 8%);
  --ui-accent-wash: hsl(var(--ui-hue) var(--ui-sat) 60% / .16);

  /* Solid fills are ink, not the accent — a coloured primary button is the
     single most template-looking thing a UI can do. */
  --ui-solid:     var(--ui-text);
  --ui-solid-ink: hsl(var(--ui-tint) 20% 6%);

  --ui-ok:   hsl(152 60% 55%);
  --ui-warn: hsl(42 90% 62%);
  --ui-bad:  hsl(352 78% 65%);
  --ui-info: hsl(205 75% 64%);
  --ui-ok-wash:   hsl(152 60% 55% / .14);
  --ui-warn-wash: hsl(42 90% 62% / .14);
  --ui-bad-wash:  hsl(352 78% 65% / .14);
  --ui-info-wash: hsl(205 75% 64% / .14);

  color-scheme: dark;
}

@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) { color-scheme: light;
    --ui-bg:        hsl(var(--ui-tint) 30% 98%);
    --ui-bg-alt:    hsl(var(--ui-tint) 22% 95.5%);
    --ui-surface:   #fff;
    --ui-surface-2: hsl(var(--ui-tint) 20% 95%);
    --ui-line:      hsl(var(--ui-tint) 14% 85%);
    --ui-line-soft: hsl(var(--ui-tint) 14% 91%);
    --ui-text:      hsl(var(--ui-tint) 22% 11%);
    --ui-muted:     hsl(var(--ui-tint) 8% 38%);
    --ui-faint:     hsl(var(--ui-tint) 6% 55%);
    --ui-glass:      rgb(255 255 255 / .70);
    --ui-glass-2:    rgb(255 255 255 / .85);
    --ui-glass-line: rgb(0 0 0 / .09);
    --ui-glass-hi:   rgb(255 255 255 / .70);
    --ui-accent:      hsl(var(--ui-hue) calc(var(--ui-sat) - 8%) 45%);
    --ui-accent-hi:   hsl(var(--ui-hue) calc(var(--ui-sat) - 8%) 38%);
    --ui-accent-lo:   hsl(var(--ui-hue) calc(var(--ui-sat) - 8%) 52%);
    --ui-accent-ink:  #fff;
    --ui-accent-wash: hsl(var(--ui-hue) var(--ui-sat) 50% / .12);
    --ui-solid-ink:   hsl(var(--ui-tint) 20% 99%);
    --ui-ok:   hsl(152 62% 30%);
    --ui-warn: hsl(35 88% 38%);
    --ui-bad:  hsl(352 70% 47%);
    --ui-info: hsl(205 75% 40%);
    --ui-shadow-1: 0 1px 2px rgb(15 18 30 / .08);
    --ui-shadow-2: 0 10px 28px -12px rgb(15 18 30 / .18), 0 2px 6px -2px rgb(15 18 30 / .08);
    --ui-shadow-3: 0 24px 70px -20px rgb(15 18 30 / .26), 0 6px 18px -8px rgb(15 18 30 / .12);
  }
}
:root[data-theme="light"] { color-scheme: light;
  --ui-bg:        hsl(var(--ui-tint) 30% 98%);
  --ui-bg-alt:    hsl(var(--ui-tint) 22% 95.5%);
  --ui-surface:   #fff;
  --ui-surface-2: hsl(var(--ui-tint) 20% 95%);
  --ui-line:      hsl(var(--ui-tint) 14% 85%);
  --ui-line-soft: hsl(var(--ui-tint) 14% 91%);
  --ui-text:      hsl(var(--ui-tint) 22% 11%);
  --ui-muted:     hsl(var(--ui-tint) 8% 38%);
  --ui-faint:     hsl(var(--ui-tint) 6% 55%);
  --ui-glass:      rgb(255 255 255 / .70);
  --ui-glass-2:    rgb(255 255 255 / .85);
  --ui-glass-line: rgb(0 0 0 / .09);
  --ui-glass-hi:   rgb(255 255 255 / .70);
  --ui-accent:      hsl(var(--ui-hue) calc(var(--ui-sat) - 8%) 45%);
  --ui-accent-hi:   hsl(var(--ui-hue) calc(var(--ui-sat) - 8%) 38%);
  --ui-accent-lo:   hsl(var(--ui-hue) calc(var(--ui-sat) - 8%) 52%);
  --ui-accent-ink:  #fff;
  --ui-accent-wash: hsl(var(--ui-hue) var(--ui-sat) 50% / .12);
  --ui-solid-ink:   hsl(var(--ui-tint) 20% 99%);
  --ui-ok:   hsl(152 62% 30%);
  --ui-warn: hsl(35 88% 38%);
  --ui-bad:  hsl(352 70% 47%);
  --ui-info: hsl(205 75% 40%);
  --ui-shadow-1: 0 1px 2px rgb(15 18 30 / .08);
  --ui-shadow-2: 0 10px 28px -12px rgb(15 18 30 / .18), 0 2px 6px -2px rgb(15 18 30 / .08);
  --ui-shadow-3: 0 24px 70px -20px rgb(15 18 30 / .26), 0 6px 18px -8px rgb(15 18 30 / .12);
}

/* --------------------------------------------------------------------------
   LAYER 1 — CLASSLESS BASE
   -------------------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }

html {
  font-size: var(--ui-fs);
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scrollbar-color: var(--ui-line) transparent;
  tab-size: 2;
  background: var(--ui-bg);       /* the canvas paints on top of this */
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .01ms !important; animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
}

body {
  margin: 0;
  min-height: 100vh;
  padding: var(--ui-4) var(--ui-4) var(--ui-8);
  font-family: var(--ui-font);
  font-size: 1rem;
  line-height: var(--ui-lh);
  color: var(--ui-text);
  background: transparent;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-wrap: break-word;
}
/* Centre bare content automatically — plain <body><h1>…</h1></body> is fine. */
body > * { max-width: var(--ui-width); margin-inline: auto; }
/* Top-level paragraphs share the column so their left edge lines up with the
   headings; the readable measure still applies to nested prose. */
body > p { max-width: var(--ui-width); }
body.ui-wide > *, body[data-wide] > * { max-width: none; }

/* the interactive background lives here, behind everything */
.ui-bg-canvas {
  position: fixed; inset: 0;
  width: 100%; height: 100%;
  z-index: -1;
  pointer-events: none;
  display: block;
}

h1, h2, h3, h4 {
  font-family: var(--ui-display);
  line-height: 1.15;
  font-weight: 700;
  letter-spacing: -.03em;
  text-wrap: balance;
  margin-block: var(--ui-6) var(--ui-3);
}
h1 { font-size: clamp(1.9rem, 1.3rem + 2vw, 2.6rem); font-weight: 800; letter-spacing: -.045em; }
h2 { font-size: clamp(1.35rem, 1.1rem + .9vw, 1.7rem); letter-spacing: -.035em; }
h3 { font-size: 1.14rem; }
h4 { font-size: 1rem; }
h5, h6 {
  margin-block: var(--ui-5) var(--ui-2);
  font-family: var(--ui-mono);
  font-size: .72rem; font-weight: 600;
  text-transform: uppercase; letter-spacing: .13em;
  color: var(--ui-faint);
}
:is(h1, h2, h3, h4, h5, h6):first-child { margin-top: 0; }

/* oversized hero type, the one place the framework shouts */
.ui-display {
  font-family: var(--ui-display);
  font-size: clamp(3rem, 1rem + 9vw, 8.5rem);
  font-weight: 900;
  line-height: .86;
  letter-spacing: -.06em;
  margin-block: 0 var(--ui-4);
}
.ui-display .ui-dim { color: var(--ui-faint); }

p, ul, ol, dl, blockquote, pre, table, figure, form, details, hr { margin-block: var(--ui-4); }
p { max-width: var(--ui-measure); text-wrap: pretty; }

a {
  color: var(--ui-accent);
  text-decoration-color: color-mix(in srgb, currentColor 35%, transparent);
  text-underline-offset: .17em;
  text-decoration-thickness: 1px;
  transition: color var(--ui-fast) var(--ui-ease), text-decoration-color var(--ui-fast) var(--ui-ease);
}
a:hover { color: var(--ui-accent-hi); text-decoration-color: currentColor; }

strong, b { font-weight: 650; color: var(--ui-text); }
small { font-size: .86em; color: var(--ui-muted); }
mark { background: var(--ui-accent-wash); color: var(--ui-text); padding: .05em .3em; border-radius: var(--ui-radius-xs); }
abbr[title] { text-decoration: underline dotted; cursor: help; }
::selection { background: hsl(var(--ui-hue) var(--ui-sat) 55% / .32); }

ul, ol { padding-left: 1.3em; }
li { margin-block: 2px; }
li::marker { color: var(--ui-faint); }
dt { font-weight: 650; }
dd { margin-left: 1.2em; color: var(--ui-muted); }

hr { border: 0; height: 1px; background: var(--ui-glass-line); margin-block: var(--ui-6); }

blockquote {
  padding: var(--ui-2) var(--ui-4);
  border-left: 2px solid var(--ui-accent);
  color: var(--ui-muted);
}
blockquote > :last-child { margin-bottom: 0; }

code, kbd, samp, pre { font-family: var(--ui-mono); font-size: .875em; }
:not(pre) > code {
  background: var(--ui-glass-2);
  border: var(--ui-border) solid var(--ui-glass-line);
  padding: .08em .38em;
  border-radius: var(--ui-radius-xs);
  color: var(--ui-text);
}
pre {
  position: relative;
  background: var(--ui-glass);
  border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius);
  padding: var(--ui-4);
  overflow-x: auto;
  line-height: 1.6;
  color: var(--ui-muted);
  backdrop-filter: blur(var(--ui-blur));
  -webkit-backdrop-filter: blur(var(--ui-blur));
}
pre code { background: none; border: 0; padding: 0; color: inherit; }
kbd {
  background: var(--ui-surface-2);
  border: var(--ui-border) solid var(--ui-line);
  border-bottom-width: 2px;
  border-radius: var(--ui-radius-xs);
  padding: .05em .4em;
  font-size: .8em;
  color: var(--ui-text);
}

img, svg, video, canvas, iframe { max-width: 100%; height: auto; display: block; }
img, video { border-radius: var(--ui-radius); }
figure figcaption { color: var(--ui-muted); font-size: .88rem; margin-top: var(--ui-2); }

table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-variant-numeric: tabular-nums;
  background: var(--ui-glass);
  border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius);
  overflow: hidden;
  backdrop-filter: blur(var(--ui-blur));
  -webkit-backdrop-filter: blur(var(--ui-blur));
}
th, td { padding: var(--ui-2) var(--ui-3); text-align: left; }
thead th {
  background: var(--ui-glass-2);
  font-family: var(--ui-mono);
  font-size: .7rem; font-weight: 600;
  text-transform: uppercase; letter-spacing: .11em;
  color: var(--ui-faint);
}
thead th { border-bottom: var(--ui-border) solid var(--ui-glass-line); }
tbody tr + tr td { border-top: var(--ui-border) solid var(--ui-glass-line); }
tbody tr { transition: background var(--ui-fast) var(--ui-ease); }
tbody tr:hover { background: var(--ui-glass-hi); }
caption { color: var(--ui-muted); font-size: .88rem; padding-bottom: var(--ui-2); text-align: left; }

label { display: inline-block; font-size: .9rem; font-weight: 520; margin-bottom: var(--ui-1); }
fieldset { border: var(--ui-border) solid var(--ui-glass-line); border-radius: var(--ui-radius); padding: var(--ui-4); }
legend {
  padding-inline: var(--ui-2);
  font-family: var(--ui-mono); font-size: .7rem; font-weight: 600;
  text-transform: uppercase; letter-spacing: .11em; color: var(--ui-faint);
}

input, textarea, select, button, optgroup { font: inherit; color: inherit; }

input:is([type="text"], [type="search"], [type="email"], [type="url"], [type="password"],
         [type="number"], [type="tel"], [type="date"], [type="time"], [type="datetime-local"],
         [type="month"], [type="week"]), input:not([type]),
textarea, select, .ui-input, .ui-select, .ui-textarea {
  display: block;
  width: 100%;
  max-width: 100%;
  padding: calc(var(--ui-2) + 1px) var(--ui-3);
  background: var(--ui-glass);
  color: var(--ui-text);
  border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius-sm);
  outline: none;
  backdrop-filter: blur(calc(var(--ui-blur) * .6));
  -webkit-backdrop-filter: blur(calc(var(--ui-blur) * .6));
  transition: border-color var(--ui-fast) var(--ui-ease), box-shadow var(--ui-fast) var(--ui-ease),
              background var(--ui-fast) var(--ui-ease);
}
textarea, .ui-textarea { min-height: 6.5rem; resize: vertical; line-height: 1.55; }
:is(input, textarea, select, .ui-input, .ui-textarea, .ui-select):hover:not(:disabled) {
  border-color: color-mix(in srgb, var(--ui-glass-line) 50%, var(--ui-accent));
}
:is(input, textarea, select):focus, :is(.ui-input, .ui-textarea, .ui-select):focus-visible {
  border-color: var(--ui-accent);
  box-shadow: var(--ui-ring);
  background: var(--ui-glass-2);
}
::placeholder { color: var(--ui-faint); opacity: 1; }
:is(input, textarea, select, button):disabled { opacity: .45; cursor: not-allowed; }
input:user-invalid, textarea:user-invalid { border-color: var(--ui-bad); }

select, .ui-select {
  appearance: none;
  padding-right: var(--ui-6);
  cursor: pointer;
  background-image:
    linear-gradient(45deg, transparent 50%, currentColor 50%),
    linear-gradient(135deg, currentColor 50%, transparent 50%);
  background-position: right calc(var(--ui-4) + 4px) center, right var(--ui-4) center;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
}
select[multiple], select[size] { background-image: none; padding-right: var(--ui-3); }
option { background: var(--ui-surface); color: var(--ui-text); }

button, input[type="submit"], input[type="button"], input[type="reset"] {
  -webkit-appearance: none; appearance: none;
  display: inline-flex; align-items: center; justify-content: center; gap: var(--ui-2);
  padding: calc(var(--ui-2) + 1px) var(--ui-4);
  font-size: .93rem; font-weight: 550; line-height: 1.45;
  color: var(--ui-text);
  background: var(--ui-glass-2);
  border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius-sm);
  cursor: pointer; user-select: none;
  backdrop-filter: blur(calc(var(--ui-blur) * .6));
  -webkit-backdrop-filter: blur(calc(var(--ui-blur) * .6));
  transition: background var(--ui-fast) var(--ui-ease), border-color var(--ui-fast) var(--ui-ease),
              transform var(--ui-fast) var(--ui-ease), box-shadow var(--ui-fast) var(--ui-ease),
              color var(--ui-fast) var(--ui-ease);
}
:is(button, input[type="submit"], input[type="button"], input[type="reset"]):hover:not(:disabled) {
  border-color: color-mix(in srgb, var(--ui-glass-line) 40%, var(--ui-text));
  transform: translateY(var(--ui-lift));
  box-shadow: var(--ui-shadow-2);
}
:is(button, input[type="submit"], input[type="button"]):active:not(:disabled) {
  transform: translateY(0); box-shadow: var(--ui-shadow-1);
}

:focus-visible { outline: 2px solid var(--ui-accent); outline-offset: 2px; }

input[type="checkbox"], input[type="radio"] {
  appearance: none;
  width: 16px; height: 16px;
  display: inline-grid; place-content: center;
  vertical-align: -3px;
  background: var(--ui-glass-2);
  border: var(--ui-border) solid var(--ui-line);
  border-radius: var(--ui-radius-xs);
  cursor: pointer;
  transition: background var(--ui-fast) var(--ui-ease), border-color var(--ui-fast) var(--ui-ease),
              box-shadow var(--ui-fast) var(--ui-ease);
}
input[type="radio"] { border-radius: 50%; }
label:not(.ui-check, .ui-radio, .ui-switch) > :is(input[type="checkbox"], input[type="radio"]) { margin-right: .35em; }
label:has(> input:is([type="checkbox"], [type="radio"])) + label { margin-left: var(--ui-3); }
input[type="checkbox"]::after {
  content: ""; width: 8px; height: 4.5px;
  border: 1.9px solid var(--ui-accent-ink); border-top: 0; border-right: 0;
  transform: rotate(-45deg) scale(0); margin-top: -2px;
  transition: transform var(--ui-mid) var(--ui-spring);
}
input[type="radio"]::after {
  content: ""; width: 6px; height: 6px; border-radius: 50%;
  background: var(--ui-accent-ink); transform: scale(0);
  transition: transform var(--ui-mid) var(--ui-spring);
}
:is(input[type="checkbox"], input[type="radio"]):checked {
  background: var(--ui-accent); border-color: var(--ui-accent);
  box-shadow: 0 0 12px -2px var(--ui-accent);
}
input[type="checkbox"]:checked::after { transform: rotate(-45deg) scale(1); }
input[type="radio"]:checked::after { transform: scale(1); }
input[type="checkbox"]:indeterminate { background: var(--ui-accent); border-color: var(--ui-accent); }
input[type="checkbox"]:indeterminate::after {
  transform: none; height: 0; width: 8px; margin-top: 0;
  border-left: 0; border-bottom-width: 1.9px;
}

input[type="range"] {
  --ui-fill: 50%;
  appearance: none; -webkit-appearance: none;
  width: 100%; height: 20px;
  background: none; cursor: pointer; outline: none; display: block;
}
input[type="range"]::-webkit-slider-runnable-track {
  height: 5px; border-radius: var(--ui-radius-pill);
  background:
    linear-gradient(90deg, var(--ui-accent) var(--ui-fill), transparent var(--ui-fill)),
    var(--ui-surface-2);
}
input[type="range"]::-moz-range-track { height: 5px; border-radius: var(--ui-radius-pill); background: var(--ui-surface-2); }
input[type="range"]::-moz-range-progress { height: 5px; border-radius: var(--ui-radius-pill); background: var(--ui-accent); }
input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 14px; height: 14px; margin-top: -4.5px;
  border-radius: 50%;
  background: var(--ui-text);
  box-shadow: 0 0 0 3px var(--ui-bg), 0 0 10px -1px var(--ui-accent);
  transition: transform var(--ui-fast) var(--ui-spring);
}
input[type="range"]::-moz-range-thumb {
  width: 14px; height: 14px; border-radius: 50%; border: 0;
  background: var(--ui-text);
  box-shadow: 0 0 0 3px var(--ui-bg), 0 0 10px -1px var(--ui-accent);
  transition: transform var(--ui-fast) var(--ui-spring);
}
input[type="range"]:is(:hover, :active)::-webkit-slider-thumb { transform: scale(1.25); }
input[type="range"]:is(:hover, :active)::-moz-range-thumb { transform: scale(1.25); }

input[type="color"] {
  width: 42px; height: 32px; padding: 3px;
  background: var(--ui-glass-2); border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius-sm); cursor: pointer;
}
input[type="file"] {
  width: 100%; padding: var(--ui-1);
  background: var(--ui-glass); border: var(--ui-border) dashed var(--ui-line);
  border-radius: var(--ui-radius-sm); cursor: pointer;
}
input[type="file"]::file-selector-button {
  font: inherit; font-weight: 550; margin-right: var(--ui-3);
  padding: var(--ui-1) var(--ui-3);
  color: var(--ui-text); background: var(--ui-surface-2);
  border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius-xs); cursor: pointer;
}

progress {
  appearance: none; -webkit-appearance: none;
  width: 100%; height: 6px; border: 0;
  border-radius: var(--ui-radius-pill); background: var(--ui-surface-2); overflow: hidden;
}
progress::-webkit-progress-bar { background: var(--ui-surface-2); }
progress::-webkit-progress-value { background: var(--ui-accent); transition: width var(--ui-mid) var(--ui-ease); }
progress::-moz-progress-bar { background: var(--ui-accent); }

details {
  background: var(--ui-glass);
  border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius);
  padding: 0 var(--ui-4);
  backdrop-filter: blur(var(--ui-blur));
  -webkit-backdrop-filter: blur(var(--ui-blur));
}
summary {
  cursor: pointer; font-weight: 550;
  padding: var(--ui-3) 0;
  list-style: none;
  display: flex; align-items: center; gap: var(--ui-2);
  transition: color var(--ui-fast) var(--ui-ease);
}
summary::-webkit-details-marker { display: none; }
summary::before {
  content: ""; flex: none;
  width: 5px; height: 5px;
  border-right: 1.5px solid var(--ui-faint); border-bottom: 1.5px solid var(--ui-faint);
  transform: rotate(-45deg);
  transition: transform var(--ui-mid) var(--ui-ease), border-color var(--ui-fast) var(--ui-ease);
}
details[open] > summary::before { transform: rotate(45deg); }
summary:hover { color: var(--ui-accent); }
summary:hover::before { border-color: var(--ui-accent); }
details[open] > summary { border-bottom: var(--ui-border) solid var(--ui-glass-line); margin-bottom: var(--ui-3); }
details > :last-child { margin-bottom: var(--ui-3); }

dialog { padding: 0; border: 0; color: var(--ui-text); background: transparent; max-width: min(94vw, 560px); width: 100%; margin: auto; }
dialog::backdrop { background: rgb(0 0 0 / .55); backdrop-filter: blur(3px); }

::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--ui-line); border-radius: 99px; border: 3px solid transparent; background-clip: content-box; }
::-webkit-scrollbar-thumb:hover { background: var(--ui-faint); background-clip: content-box; }

/* --------------------------------------------------------------------------
   LAYER 2 — COMPONENTS
   -------------------------------------------------------------------------- */

/* the frosted-panel recipe, used by nav, card, menu, modal, toast */
.ui-glass, .ui-card, .ui-menu, .ui-modal__box, .ui-toast, .ui-nav {
  background: var(--ui-glass);
  border: var(--ui-border) solid var(--ui-glass-line);
  backdrop-filter: blur(var(--ui-blur)) saturate(150%);
  -webkit-backdrop-filter: blur(var(--ui-blur)) saturate(150%);
}

/* --- layout ------------------------------------------------------------- */
.ui-container { width: 100%; max-width: var(--ui-width); margin-inline: auto; padding-inline: var(--ui-4); }
.ui-container--narrow { max-width: 720px; }
.ui-container--wide { max-width: 1440px; }

.ui-row { display: flex; gap: var(--ui-3); align-items: center; flex-wrap: wrap; }
.ui-row--between { justify-content: space-between; }
.ui-row--end { justify-content: flex-end; }
.ui-row--center { justify-content: center; }
.ui-row--top { align-items: flex-start; }
.ui-row--nowrap { flex-wrap: nowrap; }
.ui-stack { display: flex; flex-direction: column; gap: var(--ui-3); align-items: stretch; }
.ui-stack--lg { gap: var(--ui-5); }
.ui-stack--sm { gap: var(--ui-2); }
.ui-grid { display: grid; gap: var(--ui-4); grid-template-columns: repeat(auto-fit, minmax(min(250px, 100%), 1fr)); }
.ui-grid--2 { grid-template-columns: repeat(auto-fit, minmax(min(330px, 100%), 1fr)); }
.ui-grid--4 { grid-template-columns: repeat(auto-fit, minmax(min(170px, 100%), 1fr)); }
.ui-spacer { flex: 1 1 auto; }
.ui-scroll-x { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.ui-divider { height: 1px; background: var(--ui-glass-line); }

/* --- topbar: a floating glass pill --------------------------------------- */
.ui-nav {
  position: sticky; top: var(--ui-3); z-index: 50;
  display: flex; align-items: center; gap: var(--ui-4);
  width: 100%; max-width: var(--ui-width);
  margin: 0 auto var(--ui-6);
  padding: var(--ui-2) var(--ui-3);
  border-radius: var(--ui-radius-lg);
  box-shadow: var(--ui-shadow-2), inset 0 1px 0 var(--ui-glass-hi);
}
.ui-nav > * { max-width: none; }
.ui-nav__inner { display: flex; align-items: center; gap: var(--ui-4); width: 100%; }
.ui-nav__brand {
  display: inline-flex; align-items: center; gap: var(--ui-2);
  font-weight: 700; font-size: 1rem; letter-spacing: -.03em;
  color: var(--ui-text); text-decoration: none;
  padding-inline: var(--ui-2);
}
.ui-nav__brand:hover { color: var(--ui-text); }
.ui-nav__dot {
  width: 9px; height: 9px; flex: none;
  background: var(--ui-accent); border-radius: var(--ui-radius-xs);
  box-shadow: 0 0 12px var(--ui-accent);
}
.ui-nav__links {
  display: flex; align-items: center; gap: 2px;
  padding: 3px;
  background: var(--ui-glass-2);
  border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius);
}
.ui-nav__links a {
  padding: var(--ui-1) var(--ui-3);
  border-radius: calc(var(--ui-radius) - 4px);
  color: var(--ui-muted); text-decoration: none; font-weight: 550; font-size: .9rem;
  white-space: nowrap;
  transition: color var(--ui-fast) var(--ui-ease), background var(--ui-fast) var(--ui-ease);
}
.ui-nav__links a:hover { color: var(--ui-text); background: var(--ui-glass-hi); }
.ui-nav__links a[aria-current] {
  color: var(--ui-text);
  background: var(--ui-surface-2);
  box-shadow: var(--ui-shadow-1), inset 0 1px 0 var(--ui-glass-hi);
}
@media (max-width: 760px) {
  .ui-nav { flex-wrap: wrap; }
  .ui-nav__links { width: 100%; overflow-x: auto; flex-wrap: nowrap; }
}

/* --- buttons ------------------------------------------------------------ */
.ui-btn {
  -webkit-appearance: none; appearance: none;
  display: inline-flex; align-items: center; justify-content: center; gap: var(--ui-2);
  padding: calc(var(--ui-2) + 1px) var(--ui-4);
  font-size: .93rem; font-weight: 550; line-height: 1.45;
  text-decoration: none; white-space: nowrap;
  color: var(--ui-text);
  background: var(--ui-glass-2);
  border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius-sm);
  cursor: pointer; user-select: none;
  backdrop-filter: blur(calc(var(--ui-blur) * .6));
  -webkit-backdrop-filter: blur(calc(var(--ui-blur) * .6));
  box-shadow: inset 0 1px 0 var(--ui-glass-hi);
  transition: background var(--ui-fast) var(--ui-ease), border-color var(--ui-fast) var(--ui-ease),
              transform var(--ui-fast) var(--ui-ease), box-shadow var(--ui-fast) var(--ui-ease),
              color var(--ui-fast) var(--ui-ease), opacity var(--ui-fast) var(--ui-ease);
}
.ui-btn:hover {
  color: var(--ui-text);
  border-color: color-mix(in srgb, var(--ui-glass-line) 40%, var(--ui-text));
  transform: translateY(var(--ui-lift));
  box-shadow: var(--ui-shadow-2), inset 0 1px 0 var(--ui-glass-hi);
}
.ui-btn:active { transform: translateY(0); box-shadow: var(--ui-shadow-1); }
.ui-btn[disabled], .ui-btn[aria-disabled="true"] { opacity: .45; pointer-events: none; }

.ui-btn--primary {
  color: var(--ui-solid-ink); background: var(--ui-solid); border-color: transparent;
}
.ui-btn--primary:hover {
  color: var(--ui-solid-ink); background: var(--ui-solid);
  box-shadow: var(--ui-shadow-2), 0 0 0 1px var(--ui-solid);
}
.ui-btn--accent {
  color: var(--ui-accent-ink); background: var(--ui-accent); border-color: transparent;
}
.ui-btn--accent:hover {
  color: var(--ui-accent-ink); background: var(--ui-accent-hi);
  box-shadow: var(--ui-shadow-2), 0 8px 30px -10px var(--ui-accent);
}
.ui-btn--outline { background: transparent; border-color: var(--ui-line); color: var(--ui-text); }
.ui-btn--outline:hover { background: var(--ui-accent-wash); border-color: var(--ui-accent); color: var(--ui-accent); }
.ui-btn--ghost { background: transparent; border-color: transparent; color: var(--ui-muted); box-shadow: none; }
.ui-btn--ghost:hover { background: var(--ui-glass-2); color: var(--ui-text); border-color: var(--ui-glass-line); }
.ui-btn--danger { color: #fff; background: var(--ui-bad); border-color: transparent; }
.ui-btn--danger:hover { color: #fff; background: var(--ui-bad); filter: brightness(1.08); box-shadow: var(--ui-shadow-2), 0 8px 30px -10px var(--ui-bad); }
.ui-btn--success { color: var(--ui-solid-ink); background: var(--ui-ok); border-color: transparent; }
.ui-btn--success:hover { color: var(--ui-solid-ink); background: var(--ui-ok); filter: brightness(1.08); }
.ui-btn--link { background: none; border-color: transparent; color: var(--ui-accent); padding-inline: var(--ui-1); box-shadow: none; }
.ui-btn--link:hover { background: none; text-decoration: underline; color: var(--ui-accent-hi); box-shadow: none; transform: none; }

.ui-btn--sm { padding: var(--ui-1) var(--ui-3); font-size: .84rem; }
.ui-btn--lg { padding: var(--ui-3) var(--ui-5); font-size: 1.02rem; border-radius: var(--ui-radius); }
.ui-btn--block { display: flex; width: 100%; }
.ui-btn--pill { border-radius: var(--ui-radius-pill); }
.ui-btn--icon { padding: var(--ui-2); aspect-ratio: 1; }

.ui-btn[aria-busy="true"] { position: relative; color: transparent !important; pointer-events: none; }
.ui-btn[aria-busy="true"]::after {
  content: ""; position: absolute; inset: 0; margin: auto;
  width: 1em; height: 1em; border-radius: 50%;
  border: 1.5px solid var(--ui-text); border-top-color: transparent;
  animation: ui-spin .65s linear infinite;
}
.ui-btn--primary[aria-busy="true"]::after { border-color: var(--ui-solid-ink); border-top-color: transparent; }
@keyframes ui-spin { to { transform: rotate(360deg); } }

.ui-btn-group { display: inline-flex; }
.ui-btn-group > .ui-btn { border-radius: 0; margin-left: calc(var(--ui-border) * -1); }
.ui-btn-group > .ui-btn:first-child { border-radius: var(--ui-radius-sm) 0 0 var(--ui-radius-sm); margin-left: 0; }
.ui-btn-group > .ui-btn:last-child { border-radius: 0 var(--ui-radius-sm) var(--ui-radius-sm) 0; }
.ui-btn-group > .ui-btn:hover { z-index: 1; transform: none; }

/* --- segmented control -------------------------------------------------- */
.ui-segmented {
  display: inline-flex; gap: 2px; padding: 3px;
  background: var(--ui-glass-2);
  border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius);
}
.ui-segmented > * {
  appearance: none; border: 0; background: none; box-shadow: none;
  padding: var(--ui-1) var(--ui-3);
  border-radius: calc(var(--ui-radius) - 4px);
  color: var(--ui-muted); font-weight: 550; font-size: .87rem; cursor: pointer;
  transition: background var(--ui-fast) var(--ui-ease), color var(--ui-fast) var(--ui-ease);
}
.ui-segmented > *:hover { color: var(--ui-text); background: var(--ui-glass-hi); transform: none; box-shadow: none; }
.ui-segmented > [aria-pressed="true"], .ui-segmented > .is-active {
  background: var(--ui-surface-2); color: var(--ui-text);
  box-shadow: var(--ui-shadow-1), inset 0 1px 0 var(--ui-glass-hi);
}

/* --- cards -------------------------------------------------------------- */
.ui-card {
  border-radius: var(--ui-radius);
  padding: var(--ui-4);
  box-shadow: var(--ui-shadow-2), inset 0 1px 0 var(--ui-glass-hi);
  transition: transform var(--ui-mid) var(--ui-ease), box-shadow var(--ui-mid) var(--ui-ease),
              border-color var(--ui-mid) var(--ui-ease), background var(--ui-mid) var(--ui-ease);
}
.ui-card > :first-child { margin-top: 0; }
.ui-card > :last-child { margin-bottom: 0; }
.ui-card--hover:hover, a.ui-card:hover {
  transform: translateY(var(--ui-lift));
  border-color: color-mix(in srgb, var(--ui-glass-line) 30%, var(--ui-accent));
  box-shadow: var(--ui-shadow-3), inset 0 1px 0 var(--ui-glass-hi);
}
a.ui-card { display: block; text-decoration: none; color: inherit; }
.ui-card--flat { background: var(--ui-glass); box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none; }
.ui-card--accent, .ui-card--glow { border-left: 2px solid var(--ui-accent); }
.ui-card__title { font-size: 1rem; font-weight: 650; letter-spacing: -.02em; margin: 0 0 2px; }
.ui-card__sub { color: var(--ui-muted); font-size: .9rem; margin: 0; }
.ui-card__foot { margin-top: var(--ui-4); padding-top: var(--ui-3); border-top: var(--ui-border) solid var(--ui-glass-line); }

/* --- form field --------------------------------------------------------- */
.ui-field { display: flex; flex-direction: column; gap: var(--ui-1); margin-block: var(--ui-3); }
.ui-field > label { margin: 0; }
.ui-field__hint { font-size: .82rem; color: var(--ui-faint); }
.ui-field__error { font-size: .82rem; color: var(--ui-bad); }
.ui-field--invalid :is(input, textarea, select) { border-color: var(--ui-bad); }
.ui-input-group { display: flex; align-items: stretch; }
.ui-input-group > :is(input, .ui-input) { border-radius: var(--ui-radius-sm) 0 0 var(--ui-radius-sm); }
.ui-input-group > :is(.ui-btn, button):last-child {
  border-radius: 0 var(--ui-radius-sm) var(--ui-radius-sm) 0; margin-left: -1px;
}
.ui-input-group > :is(.ui-btn, button):last-child:hover { transform: none; }
.ui-input--sm { padding: var(--ui-1) var(--ui-2) !important; font-size: .86rem; }

/* --- switch ------------------------------------------------------------- */
.ui-switch { display: inline-flex; align-items: center; gap: var(--ui-2); cursor: pointer; user-select: none; font-size: .92rem; }
.ui-switch input {
  appearance: none; -webkit-appearance: none;
  position: relative; flex: none;
  width: 34px; height: 19px; margin: 0;
  background: var(--ui-surface-2); border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius-pill);
  cursor: pointer; box-shadow: none;
  transition: background var(--ui-mid) var(--ui-ease), border-color var(--ui-mid) var(--ui-ease);
}
.ui-switch input::after {
  content: ""; position: absolute; top: 2px; left: 2px;
  width: 13px; height: 13px;
  background: var(--ui-text); border-radius: 50%;
  transition: transform var(--ui-mid) var(--ui-spring), background var(--ui-mid) var(--ui-ease);
}
.ui-switch input:checked {
  background: var(--ui-accent); border-color: transparent;
  box-shadow: 0 0 16px -3px var(--ui-accent);
}
.ui-switch input:checked::after { transform: translateX(15px); background: var(--ui-accent-ink); }
.ui-switch input:focus-visible { box-shadow: var(--ui-ring); }

/* --- check / radio rows ------------------------------------------------- */
.ui-check, .ui-radio { display: inline-flex; align-items: center; gap: var(--ui-2); cursor: pointer; user-select: none; font-weight: 450; font-size: .92rem; }
.ui-check input, .ui-radio input { margin: 0; flex: none; }

/* --- slider ------------------------------------------------------------- */
.ui-slider { display: flex; flex-direction: column; gap: 2px; }
.ui-slider__head { display: flex; justify-content: space-between; align-items: baseline; gap: var(--ui-3); }
.ui-slider__head label { margin: 0; }
.ui-slider__value { font-family: var(--ui-mono); font-size: .8rem; color: var(--ui-muted); font-variant-numeric: tabular-nums; }
.ui-slider__ticks { display: flex; justify-content: space-between; font-family: var(--ui-mono); font-size: .72rem; color: var(--ui-faint); }

/* --- dropdown / menu ---------------------------------------------------- */
.ui-dropdown { position: relative; display: inline-block; }
.ui-menu {
  position: absolute; z-index: 60;
  top: calc(100% + 6px); left: 0;
  min-width: max(100%, 190px);
  padding: var(--ui-1);
  border-radius: var(--ui-radius);
  box-shadow: var(--ui-shadow-3), inset 0 1px 0 var(--ui-glass-hi);
  list-style: none; margin: 0;
  opacity: 0; transform: translateY(-6px) scale(.98);
  transform-origin: top left;
  pointer-events: none; visibility: hidden;
  transition: opacity var(--ui-fast) var(--ui-ease), transform var(--ui-fast) var(--ui-spring), visibility var(--ui-fast);
  max-height: min(60vh, 380px); overflow-y: auto;
}
.ui-menu--right { left: auto; right: 0; transform-origin: top right; }
.ui-dropdown.is-open > .ui-menu, .ui-menu.is-open { opacity: 1; transform: none; pointer-events: auto; visibility: visible; }
.ui-menu li { margin: 0; }
.ui-menu-item, .ui-menu a, .ui-menu button {
  display: flex; align-items: center; gap: var(--ui-2);
  width: 100%; text-align: left;
  padding: var(--ui-2) var(--ui-3);
  border: 0; background: none; box-shadow: none;
  border-radius: var(--ui-radius-sm);
  color: var(--ui-text); text-decoration: none; font-weight: 450; font-size: .9rem;
  cursor: pointer;
  backdrop-filter: none; -webkit-backdrop-filter: none;
  transition: background var(--ui-fast) var(--ui-ease), color var(--ui-fast) var(--ui-ease);
}
.ui-menu :is(.ui-menu-item, a, button):hover,
.ui-menu :is(.ui-menu-item, a, button):focus-visible,
.ui-menu .is-active {
  background: var(--ui-glass-hi); color: var(--ui-text); outline: none;
  transform: none; box-shadow: none; border-color: transparent;
}
.ui-menu-item[aria-selected="true"]::after { content: "·"; margin-left: auto; color: var(--ui-accent); font-weight: 700; }
.ui-menu-sep { height: 1px; background: var(--ui-glass-line); margin: var(--ui-1) 0; }
.ui-menu-label {
  padding: var(--ui-1) var(--ui-3);
  font-family: var(--ui-mono); font-size: .68rem; font-weight: 600;
  text-transform: uppercase; letter-spacing: .12em; color: var(--ui-faint);
}
.ui-menu__search { position: sticky; top: 0; background: var(--ui-glass-2); padding: var(--ui-1); z-index: 1; }

/* --- tabs --------------------------------------------------------------- */
.ui-tabs { display: flex; gap: var(--ui-4); border-bottom: var(--ui-border) solid var(--ui-glass-line); overflow-x: auto; }
.ui-tab {
  appearance: none; border: 0; background: none; box-shadow: none;
  padding: var(--ui-2) 0;
  margin-bottom: -1px;
  border-bottom: 2px solid transparent;
  color: var(--ui-muted); font-weight: 550; font-size: .93rem; white-space: nowrap;
  cursor: pointer;
  backdrop-filter: none; -webkit-backdrop-filter: none;
  transition: color var(--ui-fast) var(--ui-ease), border-color var(--ui-mid) var(--ui-ease);
}
.ui-tab:hover { color: var(--ui-text); background: none; transform: none; box-shadow: none; }
.ui-tab[aria-selected="true"] { color: var(--ui-text); border-bottom-color: var(--ui-accent); }
.ui-tabpanel { padding-top: var(--ui-4); }
.ui-tabpanel[hidden] { display: none; }

/* --- badges / chips ----------------------------------------------------- */
.ui-badge {
  display: inline-flex; align-items: center; gap: var(--ui-1);
  padding: 2px 7px;
  font-family: var(--ui-mono); font-size: .72rem; font-weight: 550; line-height: 1.6;
  letter-spacing: .02em;
  border-radius: var(--ui-radius-xs);
  background: var(--ui-glass-2); color: var(--ui-muted);
  border: var(--ui-border) solid var(--ui-glass-line);
}
.ui-badge--pill { border-radius: var(--ui-radius-pill); padding-inline: 9px; }
.ui-badge--accent { background: var(--ui-accent-wash); color: var(--ui-accent); border-color: transparent; }
.ui-badge--ok   { background: var(--ui-ok-wash);   color: var(--ui-ok);   border-color: transparent; }
.ui-badge--warn { background: var(--ui-warn-wash); color: var(--ui-warn); border-color: transparent; }
.ui-badge--bad  { background: var(--ui-bad-wash);  color: var(--ui-bad);  border-color: transparent; }
.ui-badge--info { background: var(--ui-info-wash); color: var(--ui-info); border-color: transparent; }
.ui-badge--solid { background: var(--ui-solid); color: var(--ui-solid-ink); border-color: transparent; }
.ui-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; display: inline-block; flex: none;
          box-shadow: 0 0 8px currentColor; }
.ui-dot--pulse { animation: ui-pulse 2s var(--ui-ease) infinite; }
@keyframes ui-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }

.ui-chip {
  display: inline-flex; align-items: center; gap: var(--ui-2);
  padding: var(--ui-1) var(--ui-3);
  background: var(--ui-glass-2); border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius-sm); font-size: .86rem;
  transition: border-color var(--ui-fast) var(--ui-ease);
}
.ui-chip--pill { border-radius: var(--ui-radius-pill); }
.ui-chip__x {
  cursor: pointer; opacity: .55; line-height: 1; border: 0; background: none;
  padding: 0; color: inherit; font-size: 1.05em; box-shadow: none; backdrop-filter: none;
}
.ui-chip__x:hover { opacity: 1; color: var(--ui-bad); background: none; transform: none; box-shadow: none; }

/* --- alerts ------------------------------------------------------------- */
.ui-alert {
  display: flex; gap: var(--ui-3); align-items: flex-start;
  padding: var(--ui-3) var(--ui-4);
  border: var(--ui-border) solid var(--ui-glass-line);
  border-left: 2px solid var(--ui-faint);
  border-radius: var(--ui-radius-sm);
  background: var(--ui-glass);
  font-size: .94rem;
}
.ui-alert > :last-child { margin-bottom: 0; }
.ui-alert--ok   { border-left-color: var(--ui-ok);   background: var(--ui-ok-wash); }
.ui-alert--warn { border-left-color: var(--ui-warn); background: var(--ui-warn-wash); }
.ui-alert--bad  { border-left-color: var(--ui-bad);  background: var(--ui-bad-wash); }
.ui-alert--info { border-left-color: var(--ui-info); background: var(--ui-info-wash); }
.ui-alert__title { font-weight: 650; }

/* --- toasts ------------------------------------------------------------- */
.ui-toasts {
  position: fixed; z-index: 200;
  right: var(--ui-4); bottom: var(--ui-4);
  display: flex; flex-direction: column; gap: var(--ui-2);
  max-width: min(92vw, 370px); pointer-events: none;
}
.ui-toast {
  display: flex; align-items: flex-start; gap: var(--ui-3);
  padding: var(--ui-3) var(--ui-4);
  border-left: 2px solid var(--ui-accent);
  border-radius: var(--ui-radius);
  box-shadow: var(--ui-shadow-3), inset 0 1px 0 var(--ui-glass-hi);
  pointer-events: auto;
  animation: ui-toast-in var(--ui-mid) var(--ui-spring);
  font-size: .91rem;
}
.ui-toast.is-out { animation: ui-toast-out var(--ui-fast) var(--ui-ease) forwards; }
.ui-toast--ok   { border-left-color: var(--ui-ok); }
.ui-toast--warn { border-left-color: var(--ui-warn); }
.ui-toast--bad  { border-left-color: var(--ui-bad); }
.ui-toast__x {
  margin-left: auto; background: none; border: 0; color: var(--ui-faint);
  cursor: pointer; padding: 0 2px; line-height: 1; box-shadow: none; backdrop-filter: none;
}
.ui-toast__x:hover { color: var(--ui-text); background: none; transform: none; box-shadow: none; }
@keyframes ui-toast-in  { from { opacity: 0; transform: translateY(14px) scale(.97); } }
@keyframes ui-toast-out { to   { opacity: 0; transform: translateX(20px) scale(.97); } }

/* --- modal -------------------------------------------------------------- */
.ui-modal { padding: 0; border: 0; background: transparent; max-width: min(94vw, 560px); width: 100%; }
.ui-modal__box {
  border-radius: var(--ui-radius-lg);
  box-shadow: var(--ui-shadow-3), inset 0 1px 0 var(--ui-glass-hi);
  padding: var(--ui-5);
  animation: ui-modal-in var(--ui-mid) var(--ui-spring);
}
.ui-modal[open] { display: block; }
@keyframes ui-modal-in { from { opacity: 0; transform: translateY(14px) scale(.96); } }
.ui-modal__head { display: flex; align-items: center; gap: var(--ui-3); margin-bottom: var(--ui-3); }
.ui-modal__title { font-size: 1.1rem; font-weight: 700; letter-spacing: -.03em; margin: 0; }
.ui-modal__x {
  margin-left: auto; background: none; border: 0; color: var(--ui-faint);
  font-size: 1.2rem; cursor: pointer; padding: 0 4px; line-height: 1;
  box-shadow: none; backdrop-filter: none;
}
.ui-modal__x:hover { color: var(--ui-text); background: none; transform: none; box-shadow: none; }
.ui-modal__foot { display: flex; gap: var(--ui-2); justify-content: flex-end; margin-top: var(--ui-5); }
.ui-modal--lg { max-width: min(94vw, 860px); }
.ui-modal--sm { max-width: min(94vw, 400px); }

/* --- tooltip (pure CSS) ------------------------------------------------- */
[data-ui-tip] { position: relative; }
[data-ui-tip]::after {
  content: attr(data-ui-tip);
  position: absolute; z-index: 90;
  bottom: calc(100% + 8px); left: 50%;
  transform: translate(-50%, 4px);
  padding: 3px var(--ui-2);
  background: var(--ui-solid); color: var(--ui-solid-ink);
  border-radius: var(--ui-radius-xs);
  font-size: .78rem; font-weight: 550; line-height: 1.5;
  white-space: nowrap;
  opacity: 0; pointer-events: none;
  box-shadow: var(--ui-shadow-2);
  transition: opacity var(--ui-fast) var(--ui-ease), transform var(--ui-fast) var(--ui-ease);
}
[data-ui-tip]:is(:hover, :focus-visible)::after { opacity: 1; transform: translate(-50%, 0); }
[data-ui-tip][data-ui-tip-pos="right"]::after { bottom: auto; top: 50%; left: calc(100% + 8px); transform: translate(-4px, -50%); }
[data-ui-tip][data-ui-tip-pos="right"]:hover::after { transform: translate(0, -50%); }
[data-ui-tip][data-ui-tip-pos="bottom"]::after { bottom: auto; top: calc(100% + 8px); transform: translate(-50%, -4px); }
[data-ui-tip][data-ui-tip-pos="bottom"]:hover::after { transform: translate(-50%, 0); }

/* --- progress / spinner / skeleton -------------------------------------- */
.ui-progress { width: 100%; height: 6px; background: var(--ui-surface-2); border-radius: var(--ui-radius-pill); overflow: hidden; }
.ui-progress__bar {
  height: 100%; width: 0;
  background: linear-gradient(90deg, var(--ui-accent-lo), var(--ui-accent-hi));
  border-radius: inherit;
  transition: width var(--ui-slow) var(--ui-ease);
}
.ui-progress--indeterminate .ui-progress__bar { width: 32%; animation: ui-indet 1.2s var(--ui-ease) infinite; }
@keyframes ui-indet { 0% { margin-left: -32%; } 100% { margin-left: 100%; } }

.ui-spinner {
  display: inline-block; width: 1.05em; height: 1.05em;
  border: 1.6px solid var(--ui-line); border-top-color: var(--ui-accent);
  border-radius: 50%; animation: ui-spin .65s linear infinite;
  vertical-align: -.15em;
}
.ui-spinner--lg { width: 2em; height: 2em; border-width: 2px; }

.ui-skeleton {
  background: linear-gradient(90deg, var(--ui-surface) 25%, var(--ui-surface-2) 37%, var(--ui-surface) 63%);
  background-size: 400% 100%;
  animation: ui-shimmer 1.5s linear infinite;
  border-radius: var(--ui-radius-xs); height: 1em; width: 100%;
}
@keyframes ui-shimmer { 0% { background-position: 100% 0; } 100% { background-position: 0 0; } }

/* --- avatar / stat / pagination / breadcrumb ---------------------------- */
.ui-avatar {
  width: 32px; height: 32px; flex: none;
  border-radius: var(--ui-radius-sm); object-fit: cover;
  display: inline-grid; place-content: center;
  background: var(--ui-surface-2); color: var(--ui-muted);
  border: var(--ui-border) solid var(--ui-glass-line);
  font-family: var(--ui-mono); font-weight: 600; font-size: .78rem;
}
.ui-avatar--round { border-radius: 50%; }
.ui-avatar--lg { width: 46px; height: 46px; font-size: .95rem; }

.ui-stat { display: flex; flex-direction: column; gap: 1px; }
.ui-stat__value { font-size: 1.75rem; font-weight: 750; letter-spacing: -.04em; line-height: 1.1; font-variant-numeric: tabular-nums; }
.ui-stat__label { font-family: var(--ui-mono); font-size: .7rem; text-transform: uppercase; letter-spacing: .12em; color: var(--ui-faint); }

.ui-pagination { display: flex; gap: 2px; align-items: center; flex-wrap: wrap; }
.ui-pagination a, .ui-pagination span {
  min-width: 28px; text-align: center;
  padding: var(--ui-1) var(--ui-2);
  border-radius: var(--ui-radius-xs);
  text-decoration: none; color: var(--ui-muted); font-size: .88rem; font-variant-numeric: tabular-nums;
  transition: background var(--ui-fast) var(--ui-ease), color var(--ui-fast) var(--ui-ease);
}
.ui-pagination a:hover { background: var(--ui-glass-2); color: var(--ui-text); }
.ui-pagination [aria-current] { background: var(--ui-surface-2); color: var(--ui-text); font-weight: 650; }

.ui-breadcrumb { display: flex; gap: var(--ui-2); align-items: center; font-size: .88rem; color: var(--ui-muted); flex-wrap: wrap; list-style: none; padding: 0; }
.ui-breadcrumb a { color: var(--ui-muted); text-decoration: none; }
.ui-breadcrumb a:hover { color: var(--ui-accent); }
.ui-breadcrumb li { display: flex; align-items: center; margin: 0; }
.ui-breadcrumb li + li::before { content: "/"; margin-right: var(--ui-2); color: var(--ui-faint); }

/* --- sound control ------------------------------------------------------ */
.ui-sound {
  display: inline-flex; align-items: center; gap: var(--ui-2);
  padding: 3px var(--ui-2) 3px 3px;
  background: var(--ui-glass-2);
  border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius-pill);
}
.ui-sound input[type="range"] { width: 64px; height: 16px; }
.ui-sound .ui-btn { box-shadow: none; }
[data-ui-sound-toggle].is-muted { color: var(--ui-faint); }

/* --- code block copy button (added by ui.js) ---------------------------- */
.ui-copy-btn {
  position: absolute; top: 6px; right: 6px;
  padding: 2px 7px;
  font-family: var(--ui-mono); font-size: .7rem;
  background: var(--ui-surface-2); color: var(--ui-faint);
  border: var(--ui-border) solid var(--ui-glass-line);
  border-radius: var(--ui-radius-xs);
  opacity: 0; cursor: pointer;
  box-shadow: none; backdrop-filter: none;
  transition: opacity var(--ui-fast) var(--ui-ease), color var(--ui-fast) var(--ui-ease);
}
pre:hover .ui-copy-btn, .ui-copy-btn:focus-visible { opacity: 1; }
.ui-copy-btn:hover { color: var(--ui-text); background: var(--ui-surface-2); transform: none; box-shadow: none; }

/* --- page header -------------------------------------------------------- */
.ui-hero { padding: var(--ui-7) 0 var(--ui-6); }
.ui-hero h1 { margin-bottom: var(--ui-3); }
.ui-hero p { color: var(--ui-muted); font-size: 1.05rem; }

/* --- utilities ---------------------------------------------------------- */
.ui-muted { color: var(--ui-muted); }
.ui-faint { color: var(--ui-faint); }
.ui-accent { color: var(--ui-accent); }
.ui-mono { font-family: var(--ui-mono); }
.ui-center { text-align: center; }
.ui-right { text-align: right; }
.ui-small { font-size: .86rem; }
.ui-big { font-size: 1.1rem; }
.ui-bold { font-weight: 650; }
.ui-nowrap { white-space: nowrap; }
.ui-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ui-hide { display: none !important; }
.ui-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.ui-mt-0 { margin-top: 0 !important; }  .ui-mb-0 { margin-bottom: 0 !important; }
.ui-mt-1 { margin-top: var(--ui-2); }   .ui-mb-1 { margin-bottom: var(--ui-2); }
.ui-mt-2 { margin-top: var(--ui-4); }   .ui-mb-2 { margin-bottom: var(--ui-4); }
.ui-mt-3 { margin-top: var(--ui-6); }   .ui-mb-3 { margin-bottom: var(--ui-6); }
.ui-full { width: 100%; }
@media (max-width: 640px) { .ui-hide-sm { display: none !important; } }

.ui-reveal { opacity: 0; transform: translateY(14px); transition: opacity var(--ui-slow) var(--ui-ease), transform var(--ui-slow) var(--ui-ease); }
.ui-reveal.ui-in { opacity: 1; transform: none; }

/* Browsers without backdrop-filter get solid panels instead of see-through
   ones, which would otherwise be unreadable over the background. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  :root { --ui-glass: var(--ui-surface); --ui-glass-2: var(--ui-surface-2); }
}

@media print {
  body { background: #fff; color: #000; padding: 0; }
  .ui-nav, .ui-toasts, .ui-copy-btn, .ui-bg-canvas { display: none !important; }
}
