@layer colors, tokens, ui;

/* ================================================================
   nonoun-css Design Tokens — Color System

   Naming convention:
     --{family}-*     color primitives (elevation, ramp steps, scrims)
     --n-C-*, --n-L-* intermediate color math (chroma, lightness)

   11-step scale: 050 100 200 300 400 500 600 700 800 900 950
   Anchor at 500 (peak chroma). Symmetric about anchor.
   Lightness uses an internal 13-step ramp, skipping steps 1 and 13,
   so 050 never reaches pure white and 950 never reaches pure black.
   ================================================================ */

@layer colors {
  :root {
    color-scheme: light dark;

    /* ── Environment parameters (9 knobs) ──
       Global tuning for the OKLCH color engine. These control the lightness
       range of the 11-step ramp, the chroma ceiling and its muted/vivid/edge
       multipliers, and the base alpha + delta used for scrim overlays.
       Changing these reshapes every derived color in the system. */

    --n-env-lightness-min:    0.1500;
    --n-env-lightness-max:    1.0000;
    --n-env-lightness-delta:  0.0150;

    --n-env-chroma:           0.2000;
    --n-env-chroma-k-muted:   0.1250;
    --n-env-chroma-k-vivid:   1.0000;
    --n-env-chroma-k-edge:    0.0500;

    --n-env-alpha:            0.2500;
    --n-env-alpha-delta:      0.0025;

    /* ── Family definitions ──
       Each color family (neutral, accent, info, success, warning, danger)
       is defined by three values: hue (OKLCH angle), chroma multiplier
       (0–1 scaling env-chroma), and lightness anchor (where step 500 sits).
       The 11-step ramp + scrims are computed per-family from these. */

    --n-env-hue-neutral:        230;
    --n-env-chroma-neutral:     0.125;
    --n-env-lightness-neutral:  0.50;

    --n-env-hue-accent:         230;
    --n-env-chroma-accent:      1.0;
    --n-env-lightness-accent:   0.60;

    --n-env-hue-info:           250;
    --n-env-chroma-info:        0.60;
    --n-env-lightness-info:     0.60;

    --n-env-hue-success:        150;
    --n-env-chroma-success:     0.75;
    --n-env-lightness-success:  0.55;

    --n-env-hue-warning:        80;
    --n-env-chroma-warning:     0.95;
    --n-env-lightness-warning:  0.75;

    --n-env-hue-danger:         20;
    --n-env-chroma-danger:      0.85;
    --n-env-lightness-danger:   0.50;

    /* ── Chroma interpolation coefficients (env-C baked in) ──
       6 coefficients: t-0 (edge) → t-5 (vivid), linear lerp.
       Symmetric mapping:
         050,950 = t-0    100,900 = t-1    200,800 = t-2
         300,700 = t-3    400,600 = t-4    500 = t-5
    */

    --n-C-t-0: calc(var(--n-env-chroma) * var(--n-env-chroma-k-edge));
    --n-C-t-1: calc(var(--n-env-chroma) * (4 / 5 * var(--n-env-chroma-k-edge) + 1 / 5 * var(--n-env-chroma-k-vivid)));
    --n-C-t-2: calc(var(--n-env-chroma) * (3 / 5 * var(--n-env-chroma-k-edge) + 2 / 5 * var(--n-env-chroma-k-vivid)));
    --n-C-t-3: calc(var(--n-env-chroma) * (2 / 5 * var(--n-env-chroma-k-edge) + 3 / 5 * var(--n-env-chroma-k-vivid)));
    --n-C-t-4: calc(var(--n-env-chroma) * (1 / 5 * var(--n-env-chroma-k-edge) + 4 / 5 * var(--n-env-chroma-k-vivid)));
    --n-C-t-5: calc(var(--n-env-chroma) * var(--n-env-chroma-k-vivid));

    /* ── Computed chroma: muted (flat, for backgrounds) ── */

    --n-C-muted: calc(var(--n-env-chroma) * var(--n-env-chroma-k-muted));

    --n-C-neutral-muted: calc(var(--n-C-muted) * var(--n-env-chroma-neutral));
    --n-C-accent-muted:  calc(var(--n-C-muted) * var(--n-env-chroma-accent));
    --n-C-info-muted:    calc(var(--n-C-muted) * var(--n-env-chroma-info));
    --n-C-success-muted: calc(var(--n-C-muted) * var(--n-env-chroma-success));
    --n-C-warning-muted: calc(var(--n-C-muted) * var(--n-env-chroma-warning));
    --n-C-danger-muted:  calc(var(--n-C-muted) * var(--n-env-chroma-danger));

    /* ── Per-step chroma for solids (11 steps per family) ──
       C(n) = C-t-{i} × {family}-chroma
       Symmetric: 050,950=t-0  100,900=t-1  200,800=t-2  300,700=t-3  400,600=t-4  500=t-5
    */

    --n-C-neutral-1: calc(var(--n-C-t-0) * var(--n-env-chroma-neutral));
    --n-C-neutral-2: calc(var(--n-C-t-1) * var(--n-env-chroma-neutral));
    --n-C-neutral-3: calc(var(--n-C-t-2) * var(--n-env-chroma-neutral));
    --n-C-neutral-4: calc(var(--n-C-t-3) * var(--n-env-chroma-neutral));
    --n-C-neutral-5: calc(var(--n-C-t-4) * var(--n-env-chroma-neutral));
    --n-C-neutral-6: calc(var(--n-C-t-5) * var(--n-env-chroma-neutral));
    --n-C-neutral-7: calc(var(--n-C-t-4) * var(--n-env-chroma-neutral));
    --n-C-neutral-8: calc(var(--n-C-t-3) * var(--n-env-chroma-neutral));
    --n-C-neutral-9: calc(var(--n-C-t-2) * var(--n-env-chroma-neutral));
    --n-C-neutral-10: calc(var(--n-C-t-1) * var(--n-env-chroma-neutral));
    --n-C-neutral-11: calc(var(--n-C-t-0) * var(--n-env-chroma-neutral));

    --n-C-accent-1: calc(var(--n-C-t-0) * var(--n-env-chroma-accent));
    --n-C-accent-2: calc(var(--n-C-t-1) * var(--n-env-chroma-accent));
    --n-C-accent-3: calc(var(--n-C-t-2) * var(--n-env-chroma-accent));
    --n-C-accent-4: calc(var(--n-C-t-3) * var(--n-env-chroma-accent));
    --n-C-accent-5: calc(var(--n-C-t-4) * var(--n-env-chroma-accent));
    --n-C-accent-6: calc(var(--n-C-t-5) * var(--n-env-chroma-accent));
    --n-C-accent-7: calc(var(--n-C-t-4) * var(--n-env-chroma-accent));
    --n-C-accent-8: calc(var(--n-C-t-3) * var(--n-env-chroma-accent));
    --n-C-accent-9: calc(var(--n-C-t-2) * var(--n-env-chroma-accent));
    --n-C-accent-10: calc(var(--n-C-t-1) * var(--n-env-chroma-accent));
    --n-C-accent-11: calc(var(--n-C-t-0) * var(--n-env-chroma-accent));

    --n-C-info-1: calc(var(--n-C-t-0) * var(--n-env-chroma-info));
    --n-C-info-2: calc(var(--n-C-t-1) * var(--n-env-chroma-info));
    --n-C-info-3: calc(var(--n-C-t-2) * var(--n-env-chroma-info));
    --n-C-info-4: calc(var(--n-C-t-3) * var(--n-env-chroma-info));
    --n-C-info-5: calc(var(--n-C-t-4) * var(--n-env-chroma-info));
    --n-C-info-6: calc(var(--n-C-t-5) * var(--n-env-chroma-info));
    --n-C-info-7: calc(var(--n-C-t-4) * var(--n-env-chroma-info));
    --n-C-info-8: calc(var(--n-C-t-3) * var(--n-env-chroma-info));
    --n-C-info-9: calc(var(--n-C-t-2) * var(--n-env-chroma-info));
    --n-C-info-10: calc(var(--n-C-t-1) * var(--n-env-chroma-info));
    --n-C-info-11: calc(var(--n-C-t-0) * var(--n-env-chroma-info));

    --n-C-success-1: calc(var(--n-C-t-0) * var(--n-env-chroma-success));
    --n-C-success-2: calc(var(--n-C-t-1) * var(--n-env-chroma-success));
    --n-C-success-3: calc(var(--n-C-t-2) * var(--n-env-chroma-success));
    --n-C-success-4: calc(var(--n-C-t-3) * var(--n-env-chroma-success));
    --n-C-success-5: calc(var(--n-C-t-4) * var(--n-env-chroma-success));
    --n-C-success-6: calc(var(--n-C-t-5) * var(--n-env-chroma-success));
    --n-C-success-7: calc(var(--n-C-t-4) * var(--n-env-chroma-success));
    --n-C-success-8: calc(var(--n-C-t-3) * var(--n-env-chroma-success));
    --n-C-success-9: calc(var(--n-C-t-2) * var(--n-env-chroma-success));
    --n-C-success-10: calc(var(--n-C-t-1) * var(--n-env-chroma-success));
    --n-C-success-11: calc(var(--n-C-t-0) * var(--n-env-chroma-success));

    --n-C-warning-1: calc(var(--n-C-t-0) * var(--n-env-chroma-warning));
    --n-C-warning-2: calc(var(--n-C-t-1) * var(--n-env-chroma-warning));
    --n-C-warning-3: calc(var(--n-C-t-2) * var(--n-env-chroma-warning));
    --n-C-warning-4: calc(var(--n-C-t-3) * var(--n-env-chroma-warning));
    --n-C-warning-5: calc(var(--n-C-t-4) * var(--n-env-chroma-warning));
    --n-C-warning-6: calc(var(--n-C-t-5) * var(--n-env-chroma-warning));
    --n-C-warning-7: calc(var(--n-C-t-4) * var(--n-env-chroma-warning));
    --n-C-warning-8: calc(var(--n-C-t-3) * var(--n-env-chroma-warning));
    --n-C-warning-9: calc(var(--n-C-t-2) * var(--n-env-chroma-warning));
    --n-C-warning-10: calc(var(--n-C-t-1) * var(--n-env-chroma-warning));
    --n-C-warning-11: calc(var(--n-C-t-0) * var(--n-env-chroma-warning));

    --n-C-danger-1: calc(var(--n-C-t-0) * var(--n-env-chroma-danger));
    --n-C-danger-2: calc(var(--n-C-t-1) * var(--n-env-chroma-danger));
    --n-C-danger-3: calc(var(--n-C-t-2) * var(--n-env-chroma-danger));
    --n-C-danger-4: calc(var(--n-C-t-3) * var(--n-env-chroma-danger));
    --n-C-danger-5: calc(var(--n-C-t-4) * var(--n-env-chroma-danger));
    --n-C-danger-6: calc(var(--n-C-t-5) * var(--n-env-chroma-danger));
    --n-C-danger-7: calc(var(--n-C-t-4) * var(--n-env-chroma-danger));
    --n-C-danger-8: calc(var(--n-C-t-3) * var(--n-env-chroma-danger));
    --n-C-danger-9: calc(var(--n-C-t-2) * var(--n-env-chroma-danger));
    --n-C-danger-10: calc(var(--n-C-t-1) * var(--n-env-chroma-danger));
    --n-C-danger-11: calc(var(--n-C-t-0) * var(--n-env-chroma-danger));

    /* ── Solid lightness ramps (11 steps per family) ──
       Internal 13-step ramp from L-max → lightness → L-min in 6 intervals per half.
       11 public steps map to internal steps 2–12 (skipping 1 and 13),
       so 050 never reaches pure white and 950 never reaches pure black.
       050=step2  100=step3  200=step4  300=step5  400=step6  500=step7(anchor)
       600=step8  700=step9  800=step10  900=step11  950=step12
    */

    --n-L-neutral-1: calc(var(--n-env-lightness-max) - 1 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-neutral)));
    --n-L-neutral-2: calc(var(--n-env-lightness-max) - 2 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-neutral)));
    --n-L-neutral-3: calc(var(--n-env-lightness-max) - 3 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-neutral)));
    --n-L-neutral-4: calc(var(--n-env-lightness-max) - 4 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-neutral)));
    --n-L-neutral-5: calc(var(--n-env-lightness-max) - 5 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-neutral)));
    --n-L-neutral-6: var(--n-env-lightness-neutral);
    --n-L-neutral-7: calc(var(--n-env-lightness-neutral) - 1 / 6 * (var(--n-env-lightness-neutral) - var(--n-env-lightness-min)));
    --n-L-neutral-8: calc(var(--n-env-lightness-neutral) - 2 / 6 * (var(--n-env-lightness-neutral) - var(--n-env-lightness-min)));
    --n-L-neutral-9: calc(var(--n-env-lightness-neutral) - 3 / 6 * (var(--n-env-lightness-neutral) - var(--n-env-lightness-min)));
    --n-L-neutral-10: calc(var(--n-env-lightness-neutral) - 4 / 6 * (var(--n-env-lightness-neutral) - var(--n-env-lightness-min)));
    --n-L-neutral-11: calc(var(--n-env-lightness-neutral) - 5 / 6 * (var(--n-env-lightness-neutral) - var(--n-env-lightness-min)));

    --n-L-accent-1: calc(var(--n-env-lightness-max) - 1 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-accent)));
    --n-L-accent-2: calc(var(--n-env-lightness-max) - 2 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-accent)));
    --n-L-accent-3: calc(var(--n-env-lightness-max) - 3 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-accent)));
    --n-L-accent-4: calc(var(--n-env-lightness-max) - 4 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-accent)));
    --n-L-accent-5: calc(var(--n-env-lightness-max) - 5 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-accent)));
    --n-L-accent-6: var(--n-env-lightness-accent);
    --n-L-accent-7: calc(var(--n-env-lightness-accent) - 1 / 6 * (var(--n-env-lightness-accent) - var(--n-env-lightness-min)));
    --n-L-accent-8: calc(var(--n-env-lightness-accent) - 2 / 6 * (var(--n-env-lightness-accent) - var(--n-env-lightness-min)));
    --n-L-accent-9: calc(var(--n-env-lightness-accent) - 3 / 6 * (var(--n-env-lightness-accent) - var(--n-env-lightness-min)));
    --n-L-accent-10: calc(var(--n-env-lightness-accent) - 4 / 6 * (var(--n-env-lightness-accent) - var(--n-env-lightness-min)));
    --n-L-accent-11: calc(var(--n-env-lightness-accent) - 5 / 6 * (var(--n-env-lightness-accent) - var(--n-env-lightness-min)));

    --n-L-info-1: calc(var(--n-env-lightness-max) - 1 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-info)));
    --n-L-info-2: calc(var(--n-env-lightness-max) - 2 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-info)));
    --n-L-info-3: calc(var(--n-env-lightness-max) - 3 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-info)));
    --n-L-info-4: calc(var(--n-env-lightness-max) - 4 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-info)));
    --n-L-info-5: calc(var(--n-env-lightness-max) - 5 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-info)));
    --n-L-info-6: var(--n-env-lightness-info);
    --n-L-info-7: calc(var(--n-env-lightness-info) - 1 / 6 * (var(--n-env-lightness-info) - var(--n-env-lightness-min)));
    --n-L-info-8: calc(var(--n-env-lightness-info) - 2 / 6 * (var(--n-env-lightness-info) - var(--n-env-lightness-min)));
    --n-L-info-9: calc(var(--n-env-lightness-info) - 3 / 6 * (var(--n-env-lightness-info) - var(--n-env-lightness-min)));
    --n-L-info-10: calc(var(--n-env-lightness-info) - 4 / 6 * (var(--n-env-lightness-info) - var(--n-env-lightness-min)));
    --n-L-info-11: calc(var(--n-env-lightness-info) - 5 / 6 * (var(--n-env-lightness-info) - var(--n-env-lightness-min)));

    --n-L-success-1: calc(var(--n-env-lightness-max) - 1 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-success)));
    --n-L-success-2: calc(var(--n-env-lightness-max) - 2 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-success)));
    --n-L-success-3: calc(var(--n-env-lightness-max) - 3 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-success)));
    --n-L-success-4: calc(var(--n-env-lightness-max) - 4 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-success)));
    --n-L-success-5: calc(var(--n-env-lightness-max) - 5 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-success)));
    --n-L-success-6: var(--n-env-lightness-success);
    --n-L-success-7: calc(var(--n-env-lightness-success) - 1 / 6 * (var(--n-env-lightness-success) - var(--n-env-lightness-min)));
    --n-L-success-8: calc(var(--n-env-lightness-success) - 2 / 6 * (var(--n-env-lightness-success) - var(--n-env-lightness-min)));
    --n-L-success-9: calc(var(--n-env-lightness-success) - 3 / 6 * (var(--n-env-lightness-success) - var(--n-env-lightness-min)));
    --n-L-success-10: calc(var(--n-env-lightness-success) - 4 / 6 * (var(--n-env-lightness-success) - var(--n-env-lightness-min)));
    --n-L-success-11: calc(var(--n-env-lightness-success) - 5 / 6 * (var(--n-env-lightness-success) - var(--n-env-lightness-min)));

    --n-L-warning-1: calc(var(--n-env-lightness-max) - 1 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-warning)));
    --n-L-warning-2: calc(var(--n-env-lightness-max) - 2 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-warning)));
    --n-L-warning-3: calc(var(--n-env-lightness-max) - 3 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-warning)));
    --n-L-warning-4: calc(var(--n-env-lightness-max) - 4 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-warning)));
    --n-L-warning-5: calc(var(--n-env-lightness-max) - 5 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-warning)));
    --n-L-warning-6: var(--n-env-lightness-warning);
    --n-L-warning-7: calc(var(--n-env-lightness-warning) - 1 / 6 * (var(--n-env-lightness-warning) - var(--n-env-lightness-min)));
    --n-L-warning-8: calc(var(--n-env-lightness-warning) - 2 / 6 * (var(--n-env-lightness-warning) - var(--n-env-lightness-min)));
    --n-L-warning-9: calc(var(--n-env-lightness-warning) - 3 / 6 * (var(--n-env-lightness-warning) - var(--n-env-lightness-min)));
    --n-L-warning-10: calc(var(--n-env-lightness-warning) - 4 / 6 * (var(--n-env-lightness-warning) - var(--n-env-lightness-min)));
    --n-L-warning-11: calc(var(--n-env-lightness-warning) - 5 / 6 * (var(--n-env-lightness-warning) - var(--n-env-lightness-min)));

    --n-L-danger-1: calc(var(--n-env-lightness-max) - 1 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-danger)));
    --n-L-danger-2: calc(var(--n-env-lightness-max) - 2 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-danger)));
    --n-L-danger-3: calc(var(--n-env-lightness-max) - 3 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-danger)));
    --n-L-danger-4: calc(var(--n-env-lightness-max) - 4 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-danger)));
    --n-L-danger-5: calc(var(--n-env-lightness-max) - 5 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-danger)));
    --n-L-danger-6: var(--n-env-lightness-danger);
    --n-L-danger-7: calc(var(--n-env-lightness-danger) - 1 / 6 * (var(--n-env-lightness-danger) - var(--n-env-lightness-min)));
    --n-L-danger-8: calc(var(--n-env-lightness-danger) - 2 / 6 * (var(--n-env-lightness-danger) - var(--n-env-lightness-min)));
    --n-L-danger-9: calc(var(--n-env-lightness-danger) - 3 / 6 * (var(--n-env-lightness-danger) - var(--n-env-lightness-min)));
    --n-L-danger-10: calc(var(--n-env-lightness-danger) - 4 / 6 * (var(--n-env-lightness-danger) - var(--n-env-lightness-min)));
    --n-L-danger-11: calc(var(--n-env-lightness-danger) - 5 / 6 * (var(--n-env-lightness-danger) - var(--n-env-lightness-min)));

    /* ── Background lightness ramps (shared across families) ── */

    --n-L-light-1: var(--n-env-lightness-max);
    --n-L-light-2: calc(var(--n-env-lightness-max) - 1 * var(--n-env-lightness-delta));
    --n-L-light-3: calc(var(--n-env-lightness-max) - 2 * var(--n-env-lightness-delta));
    --n-L-light-4: calc(var(--n-env-lightness-max) - 3 * var(--n-env-lightness-delta));
    --n-L-light-5: calc(var(--n-env-lightness-max) - 4 * var(--n-env-lightness-delta));
    --n-L-light-6: calc(var(--n-env-lightness-max) - 5 * var(--n-env-lightness-delta));
    --n-L-light-7: calc(var(--n-env-lightness-max) - 6 * var(--n-env-lightness-delta));

    --n-L-dark-1: var(--n-env-lightness-min);
    --n-L-dark-2: calc(var(--n-env-lightness-min) + 1 * var(--n-env-lightness-delta));
    --n-L-dark-3: calc(var(--n-env-lightness-min) + 2 * var(--n-env-lightness-delta));
    --n-L-dark-4: calc(var(--n-env-lightness-min) + 3 * var(--n-env-lightness-delta));
    --n-L-dark-5: calc(var(--n-env-lightness-min) + 4 * var(--n-env-lightness-delta));
    --n-L-dark-6: calc(var(--n-env-lightness-min) + 5 * var(--n-env-lightness-delta));
    --n-L-dark-7: calc(var(--n-env-lightness-min) + 6 * var(--n-env-lightness-delta));

    /* ── Color ramp — Raw (1–11, mode-independent) ──
       1 = L-max (lightest), 6 = anchor (peak chroma), 11 = L-min (darkest).
       Chroma lerps C-k-edge → C-k-vivid → C-k-edge (peak at anchor).
       These are the raw oklch values; use the semantic 050–950 tokens below for light-dark awareness.
    */

    --n-color-neutral-1: oklch(var(--n-L-neutral-1) var(--n-C-neutral-1) var(--n-env-hue-neutral));
    --n-color-neutral-2: oklch(var(--n-L-neutral-2) var(--n-C-neutral-2) var(--n-env-hue-neutral));
    --n-color-neutral-3: oklch(var(--n-L-neutral-3) var(--n-C-neutral-3) var(--n-env-hue-neutral));
    --n-color-neutral-4: oklch(var(--n-L-neutral-4) var(--n-C-neutral-4) var(--n-env-hue-neutral));
    --n-color-neutral-5: oklch(var(--n-L-neutral-5) var(--n-C-neutral-5) var(--n-env-hue-neutral));
    --n-color-neutral-6: oklch(var(--n-L-neutral-6) var(--n-C-neutral-6) var(--n-env-hue-neutral));
    --n-color-neutral-7: oklch(var(--n-L-neutral-7) var(--n-C-neutral-7) var(--n-env-hue-neutral));
    --n-color-neutral-8: oklch(var(--n-L-neutral-8) var(--n-C-neutral-8) var(--n-env-hue-neutral));
    --n-color-neutral-9: oklch(var(--n-L-neutral-9) var(--n-C-neutral-9) var(--n-env-hue-neutral));
    --n-color-neutral-10: oklch(var(--n-L-neutral-10) var(--n-C-neutral-10) var(--n-env-hue-neutral));
    --n-color-neutral-11: oklch(var(--n-L-neutral-11) var(--n-C-neutral-11) var(--n-env-hue-neutral));

    --n-color-accent-1: oklch(var(--n-L-accent-1) var(--n-C-accent-1) var(--n-env-hue-accent));
    --n-color-accent-2: oklch(var(--n-L-accent-2) var(--n-C-accent-2) var(--n-env-hue-accent));
    --n-color-accent-3: oklch(var(--n-L-accent-3) var(--n-C-accent-3) var(--n-env-hue-accent));
    --n-color-accent-4: oklch(var(--n-L-accent-4) var(--n-C-accent-4) var(--n-env-hue-accent));
    --n-color-accent-5: oklch(var(--n-L-accent-5) var(--n-C-accent-5) var(--n-env-hue-accent));
    --n-color-accent-6: oklch(var(--n-L-accent-6) var(--n-C-accent-6) var(--n-env-hue-accent));
    --n-color-accent-7: oklch(var(--n-L-accent-7) var(--n-C-accent-7) var(--n-env-hue-accent));
    --n-color-accent-8: oklch(var(--n-L-accent-8) var(--n-C-accent-8) var(--n-env-hue-accent));
    --n-color-accent-9: oklch(var(--n-L-accent-9) var(--n-C-accent-9) var(--n-env-hue-accent));
    --n-color-accent-10: oklch(var(--n-L-accent-10) var(--n-C-accent-10) var(--n-env-hue-accent));
    --n-color-accent-11: oklch(var(--n-L-accent-11) var(--n-C-accent-11) var(--n-env-hue-accent));

    --n-color-info-1: oklch(var(--n-L-info-1) var(--n-C-info-1) var(--n-env-hue-info));
    --n-color-info-2: oklch(var(--n-L-info-2) var(--n-C-info-2) var(--n-env-hue-info));
    --n-color-info-3: oklch(var(--n-L-info-3) var(--n-C-info-3) var(--n-env-hue-info));
    --n-color-info-4: oklch(var(--n-L-info-4) var(--n-C-info-4) var(--n-env-hue-info));
    --n-color-info-5: oklch(var(--n-L-info-5) var(--n-C-info-5) var(--n-env-hue-info));
    --n-color-info-6: oklch(var(--n-L-info-6) var(--n-C-info-6) var(--n-env-hue-info));
    --n-color-info-7: oklch(var(--n-L-info-7) var(--n-C-info-7) var(--n-env-hue-info));
    --n-color-info-8: oklch(var(--n-L-info-8) var(--n-C-info-8) var(--n-env-hue-info));
    --n-color-info-9: oklch(var(--n-L-info-9) var(--n-C-info-9) var(--n-env-hue-info));
    --n-color-info-10: oklch(var(--n-L-info-10) var(--n-C-info-10) var(--n-env-hue-info));
    --n-color-info-11: oklch(var(--n-L-info-11) var(--n-C-info-11) var(--n-env-hue-info));

    --n-color-success-1: oklch(var(--n-L-success-1) var(--n-C-success-1) var(--n-env-hue-success));
    --n-color-success-2: oklch(var(--n-L-success-2) var(--n-C-success-2) var(--n-env-hue-success));
    --n-color-success-3: oklch(var(--n-L-success-3) var(--n-C-success-3) var(--n-env-hue-success));
    --n-color-success-4: oklch(var(--n-L-success-4) var(--n-C-success-4) var(--n-env-hue-success));
    --n-color-success-5: oklch(var(--n-L-success-5) var(--n-C-success-5) var(--n-env-hue-success));
    --n-color-success-6: oklch(var(--n-L-success-6) var(--n-C-success-6) var(--n-env-hue-success));
    --n-color-success-7: oklch(var(--n-L-success-7) var(--n-C-success-7) var(--n-env-hue-success));
    --n-color-success-8: oklch(var(--n-L-success-8) var(--n-C-success-8) var(--n-env-hue-success));
    --n-color-success-9: oklch(var(--n-L-success-9) var(--n-C-success-9) var(--n-env-hue-success));
    --n-color-success-10: oklch(var(--n-L-success-10) var(--n-C-success-10) var(--n-env-hue-success));
    --n-color-success-11: oklch(var(--n-L-success-11) var(--n-C-success-11) var(--n-env-hue-success));

    --n-color-warning-1: oklch(var(--n-L-warning-1) var(--n-C-warning-1) var(--n-env-hue-warning));
    --n-color-warning-2: oklch(var(--n-L-warning-2) var(--n-C-warning-2) var(--n-env-hue-warning));
    --n-color-warning-3: oklch(var(--n-L-warning-3) var(--n-C-warning-3) var(--n-env-hue-warning));
    --n-color-warning-4: oklch(var(--n-L-warning-4) var(--n-C-warning-4) var(--n-env-hue-warning));
    --n-color-warning-5: oklch(var(--n-L-warning-5) var(--n-C-warning-5) var(--n-env-hue-warning));
    --n-color-warning-6: oklch(var(--n-L-warning-6) var(--n-C-warning-6) var(--n-env-hue-warning));
    --n-color-warning-7: oklch(var(--n-L-warning-7) var(--n-C-warning-7) var(--n-env-hue-warning));
    --n-color-warning-8: oklch(var(--n-L-warning-8) var(--n-C-warning-8) var(--n-env-hue-warning));
    --n-color-warning-9: oklch(var(--n-L-warning-9) var(--n-C-warning-9) var(--n-env-hue-warning));
    --n-color-warning-10: oklch(var(--n-L-warning-10) var(--n-C-warning-10) var(--n-env-hue-warning));
    --n-color-warning-11: oklch(var(--n-L-warning-11) var(--n-C-warning-11) var(--n-env-hue-warning));

    --n-color-danger-1: oklch(var(--n-L-danger-1) var(--n-C-danger-1) var(--n-env-hue-danger));
    --n-color-danger-2: oklch(var(--n-L-danger-2) var(--n-C-danger-2) var(--n-env-hue-danger));
    --n-color-danger-3: oklch(var(--n-L-danger-3) var(--n-C-danger-3) var(--n-env-hue-danger));
    --n-color-danger-4: oklch(var(--n-L-danger-4) var(--n-C-danger-4) var(--n-env-hue-danger));
    --n-color-danger-5: oklch(var(--n-L-danger-5) var(--n-C-danger-5) var(--n-env-hue-danger));
    --n-color-danger-6: oklch(var(--n-L-danger-6) var(--n-C-danger-6) var(--n-env-hue-danger));
    --n-color-danger-7: oklch(var(--n-L-danger-7) var(--n-C-danger-7) var(--n-env-hue-danger));
    --n-color-danger-8: oklch(var(--n-L-danger-8) var(--n-C-danger-8) var(--n-env-hue-danger));
    --n-color-danger-9: oklch(var(--n-L-danger-9) var(--n-C-danger-9) var(--n-env-hue-danger));
    --n-color-danger-10: oklch(var(--n-L-danger-10) var(--n-C-danger-10) var(--n-env-hue-danger));
    --n-color-danger-11: oklch(var(--n-L-danger-11) var(--n-C-danger-11) var(--n-env-hue-danger));

    /* ── Color ramp — Semantic (light-dark aware) ──
       050 = lightest in light mode / darkest in dark mode.
       950 = darkest in light mode / lightest in dark mode.
       500 = anchor (same raw tone in both modes).
    */

    --n-color-neutral-050: light-dark(var(--n-color-neutral-1),  var(--n-color-neutral-11));
    --n-color-neutral-100: light-dark(var(--n-color-neutral-2),  var(--n-color-neutral-10));
    --n-color-neutral-200: light-dark(var(--n-color-neutral-3),  var(--n-color-neutral-9));
    --n-color-neutral-300: light-dark(var(--n-color-neutral-4),  var(--n-color-neutral-8));
    --n-color-neutral-400: light-dark(var(--n-color-neutral-5),  var(--n-color-neutral-7));
    --n-color-neutral-500: light-dark(var(--n-color-neutral-6),  var(--n-color-neutral-6));
    --n-color-neutral-600: light-dark(var(--n-color-neutral-7),  var(--n-color-neutral-5));
    --n-color-neutral-700: light-dark(var(--n-color-neutral-8),  var(--n-color-neutral-4));
    --n-color-neutral-800: light-dark(var(--n-color-neutral-9),  var(--n-color-neutral-3));
    --n-color-neutral-900: light-dark(var(--n-color-neutral-10), var(--n-color-neutral-2));
    --n-color-neutral-950: light-dark(var(--n-color-neutral-11), var(--n-color-neutral-1));

    --n-color-accent-050: light-dark(var(--n-color-accent-1),  var(--n-color-accent-11));
    --n-color-accent-100: light-dark(var(--n-color-accent-2),  var(--n-color-accent-10));
    --n-color-accent-200: light-dark(var(--n-color-accent-3),  var(--n-color-accent-9));
    --n-color-accent-300: light-dark(var(--n-color-accent-4),  var(--n-color-accent-8));
    --n-color-accent-400: light-dark(var(--n-color-accent-5),  var(--n-color-accent-7));
    --n-color-accent-500: light-dark(var(--n-color-accent-6),  var(--n-color-accent-6));
    --n-color-accent-600: light-dark(var(--n-color-accent-7),  var(--n-color-accent-5));
    --n-color-accent-700: light-dark(var(--n-color-accent-8),  var(--n-color-accent-4));
    --n-color-accent-800: light-dark(var(--n-color-accent-9),  var(--n-color-accent-3));
    --n-color-accent-900: light-dark(var(--n-color-accent-10), var(--n-color-accent-2));
    --n-color-accent-950: light-dark(var(--n-color-accent-11), var(--n-color-accent-1));

    --n-color-info-050: light-dark(var(--n-color-info-1),  var(--n-color-info-11));
    --n-color-info-100: light-dark(var(--n-color-info-2),  var(--n-color-info-10));
    --n-color-info-200: light-dark(var(--n-color-info-3),  var(--n-color-info-9));
    --n-color-info-300: light-dark(var(--n-color-info-4),  var(--n-color-info-8));
    --n-color-info-400: light-dark(var(--n-color-info-5),  var(--n-color-info-7));
    --n-color-info-500: light-dark(var(--n-color-info-6),  var(--n-color-info-6));
    --n-color-info-600: light-dark(var(--n-color-info-7),  var(--n-color-info-5));
    --n-color-info-700: light-dark(var(--n-color-info-8),  var(--n-color-info-4));
    --n-color-info-800: light-dark(var(--n-color-info-9),  var(--n-color-info-3));
    --n-color-info-900: light-dark(var(--n-color-info-10), var(--n-color-info-2));
    --n-color-info-950: light-dark(var(--n-color-info-11), var(--n-color-info-1));

    --n-color-success-050: light-dark(var(--n-color-success-1),  var(--n-color-success-11));
    --n-color-success-100: light-dark(var(--n-color-success-2),  var(--n-color-success-10));
    --n-color-success-200: light-dark(var(--n-color-success-3),  var(--n-color-success-9));
    --n-color-success-300: light-dark(var(--n-color-success-4),  var(--n-color-success-8));
    --n-color-success-400: light-dark(var(--n-color-success-5),  var(--n-color-success-7));
    --n-color-success-500: light-dark(var(--n-color-success-6),  var(--n-color-success-6));
    --n-color-success-600: light-dark(var(--n-color-success-7),  var(--n-color-success-5));
    --n-color-success-700: light-dark(var(--n-color-success-8),  var(--n-color-success-4));
    --n-color-success-800: light-dark(var(--n-color-success-9),  var(--n-color-success-3));
    --n-color-success-900: light-dark(var(--n-color-success-10), var(--n-color-success-2));
    --n-color-success-950: light-dark(var(--n-color-success-11), var(--n-color-success-1));

    --n-color-warning-050: light-dark(var(--n-color-warning-1),  var(--n-color-warning-11));
    --n-color-warning-100: light-dark(var(--n-color-warning-2),  var(--n-color-warning-10));
    --n-color-warning-200: light-dark(var(--n-color-warning-3),  var(--n-color-warning-9));
    --n-color-warning-300: light-dark(var(--n-color-warning-4),  var(--n-color-warning-8));
    --n-color-warning-400: light-dark(var(--n-color-warning-5),  var(--n-color-warning-7));
    --n-color-warning-500: light-dark(var(--n-color-warning-6),  var(--n-color-warning-6));
    --n-color-warning-600: light-dark(var(--n-color-warning-7),  var(--n-color-warning-5));
    --n-color-warning-700: light-dark(var(--n-color-warning-8),  var(--n-color-warning-4));
    --n-color-warning-800: light-dark(var(--n-color-warning-9),  var(--n-color-warning-3));
    --n-color-warning-900: light-dark(var(--n-color-warning-10), var(--n-color-warning-2));
    --n-color-warning-950: light-dark(var(--n-color-warning-11), var(--n-color-warning-1));

    --n-color-danger-050: light-dark(var(--n-color-danger-1),  var(--n-color-danger-11));
    --n-color-danger-100: light-dark(var(--n-color-danger-2),  var(--n-color-danger-10));
    --n-color-danger-200: light-dark(var(--n-color-danger-3),  var(--n-color-danger-9));
    --n-color-danger-300: light-dark(var(--n-color-danger-4),  var(--n-color-danger-8));
    --n-color-danger-400: light-dark(var(--n-color-danger-5),  var(--n-color-danger-7));
    --n-color-danger-500: light-dark(var(--n-color-danger-6),  var(--n-color-danger-6));
    --n-color-danger-600: light-dark(var(--n-color-danger-7),  var(--n-color-danger-5));
    --n-color-danger-700: light-dark(var(--n-color-danger-8),  var(--n-color-danger-4));
    --n-color-danger-800: light-dark(var(--n-color-danger-9),  var(--n-color-danger-3));
    --n-color-danger-900: light-dark(var(--n-color-danger-10), var(--n-color-danger-2));
    --n-color-danger-950: light-dark(var(--n-color-danger-11), var(--n-color-danger-1));

    /* ── Anchor aliases (bare name = step 500) ── */

    --n-color-neutral: var(--n-color-neutral-500);
    --n-color-accent:  var(--n-color-accent-500);
    --n-color-info:    var(--n-color-info-500);
    --n-color-success: var(--n-color-success-500);
    --n-color-warning: var(--n-color-warning-500);
    --n-color-danger:  var(--n-color-danger-500);

    /* ── Scrim ramp — Raw (1–11, mode-independent, alpha = env-A) ──
       Same L/C/H as solid raw ramp, at env-A opacity.
    */

    --n-color-neutral-1-scrim: oklch(var(--n-L-neutral-1) var(--n-C-neutral-1) var(--n-env-hue-neutral) / var(--n-env-alpha));
    --n-color-neutral-2-scrim: oklch(var(--n-L-neutral-2) var(--n-C-neutral-2) var(--n-env-hue-neutral) / var(--n-env-alpha));
    --n-color-neutral-3-scrim: oklch(var(--n-L-neutral-3) var(--n-C-neutral-3) var(--n-env-hue-neutral) / var(--n-env-alpha));
    --n-color-neutral-4-scrim: oklch(var(--n-L-neutral-4) var(--n-C-neutral-4) var(--n-env-hue-neutral) / var(--n-env-alpha));
    --n-color-neutral-5-scrim: oklch(var(--n-L-neutral-5) var(--n-C-neutral-5) var(--n-env-hue-neutral) / var(--n-env-alpha));
    --n-color-neutral-6-scrim: oklch(var(--n-L-neutral-6) var(--n-C-neutral-6) var(--n-env-hue-neutral) / var(--n-env-alpha));
    --n-color-neutral-7-scrim: oklch(var(--n-L-neutral-7) var(--n-C-neutral-7) var(--n-env-hue-neutral) / var(--n-env-alpha));
    --n-color-neutral-8-scrim: oklch(var(--n-L-neutral-8) var(--n-C-neutral-8) var(--n-env-hue-neutral) / var(--n-env-alpha));
    --n-color-neutral-9-scrim: oklch(var(--n-L-neutral-9) var(--n-C-neutral-9) var(--n-env-hue-neutral) / var(--n-env-alpha));
    --n-color-neutral-10-scrim: oklch(var(--n-L-neutral-10) var(--n-C-neutral-10) var(--n-env-hue-neutral) / var(--n-env-alpha));
    --n-color-neutral-11-scrim: oklch(var(--n-L-neutral-11) var(--n-C-neutral-11) var(--n-env-hue-neutral) / var(--n-env-alpha));

    --n-color-accent-1-scrim: oklch(var(--n-L-accent-1) var(--n-C-accent-1) var(--n-env-hue-accent) / var(--n-env-alpha));
    --n-color-accent-2-scrim: oklch(var(--n-L-accent-2) var(--n-C-accent-2) var(--n-env-hue-accent) / var(--n-env-alpha));
    --n-color-accent-3-scrim: oklch(var(--n-L-accent-3) var(--n-C-accent-3) var(--n-env-hue-accent) / var(--n-env-alpha));
    --n-color-accent-4-scrim: oklch(var(--n-L-accent-4) var(--n-C-accent-4) var(--n-env-hue-accent) / var(--n-env-alpha));
    --n-color-accent-5-scrim: oklch(var(--n-L-accent-5) var(--n-C-accent-5) var(--n-env-hue-accent) / var(--n-env-alpha));
    --n-color-accent-6-scrim: oklch(var(--n-L-accent-6) var(--n-C-accent-6) var(--n-env-hue-accent) / var(--n-env-alpha));
    --n-color-accent-7-scrim: oklch(var(--n-L-accent-7) var(--n-C-accent-7) var(--n-env-hue-accent) / var(--n-env-alpha));
    --n-color-accent-8-scrim: oklch(var(--n-L-accent-8) var(--n-C-accent-8) var(--n-env-hue-accent) / var(--n-env-alpha));
    --n-color-accent-9-scrim: oklch(var(--n-L-accent-9) var(--n-C-accent-9) var(--n-env-hue-accent) / var(--n-env-alpha));
    --n-color-accent-10-scrim: oklch(var(--n-L-accent-10) var(--n-C-accent-10) var(--n-env-hue-accent) / var(--n-env-alpha));
    --n-color-accent-11-scrim: oklch(var(--n-L-accent-11) var(--n-C-accent-11) var(--n-env-hue-accent) / var(--n-env-alpha));

    --n-color-info-1-scrim: oklch(var(--n-L-info-1) var(--n-C-info-1) var(--n-env-hue-info) / var(--n-env-alpha));
    --n-color-info-2-scrim: oklch(var(--n-L-info-2) var(--n-C-info-2) var(--n-env-hue-info) / var(--n-env-alpha));
    --n-color-info-3-scrim: oklch(var(--n-L-info-3) var(--n-C-info-3) var(--n-env-hue-info) / var(--n-env-alpha));
    --n-color-info-4-scrim: oklch(var(--n-L-info-4) var(--n-C-info-4) var(--n-env-hue-info) / var(--n-env-alpha));
    --n-color-info-5-scrim: oklch(var(--n-L-info-5) var(--n-C-info-5) var(--n-env-hue-info) / var(--n-env-alpha));
    --n-color-info-6-scrim: oklch(var(--n-L-info-6) var(--n-C-info-6) var(--n-env-hue-info) / var(--n-env-alpha));
    --n-color-info-7-scrim: oklch(var(--n-L-info-7) var(--n-C-info-7) var(--n-env-hue-info) / var(--n-env-alpha));
    --n-color-info-8-scrim: oklch(var(--n-L-info-8) var(--n-C-info-8) var(--n-env-hue-info) / var(--n-env-alpha));
    --n-color-info-9-scrim: oklch(var(--n-L-info-9) var(--n-C-info-9) var(--n-env-hue-info) / var(--n-env-alpha));
    --n-color-info-10-scrim: oklch(var(--n-L-info-10) var(--n-C-info-10) var(--n-env-hue-info) / var(--n-env-alpha));
    --n-color-info-11-scrim: oklch(var(--n-L-info-11) var(--n-C-info-11) var(--n-env-hue-info) / var(--n-env-alpha));

    --n-color-success-1-scrim: oklch(var(--n-L-success-1) var(--n-C-success-1) var(--n-env-hue-success) / var(--n-env-alpha));
    --n-color-success-2-scrim: oklch(var(--n-L-success-2) var(--n-C-success-2) var(--n-env-hue-success) / var(--n-env-alpha));
    --n-color-success-3-scrim: oklch(var(--n-L-success-3) var(--n-C-success-3) var(--n-env-hue-success) / var(--n-env-alpha));
    --n-color-success-4-scrim: oklch(var(--n-L-success-4) var(--n-C-success-4) var(--n-env-hue-success) / var(--n-env-alpha));
    --n-color-success-5-scrim: oklch(var(--n-L-success-5) var(--n-C-success-5) var(--n-env-hue-success) / var(--n-env-alpha));
    --n-color-success-6-scrim: oklch(var(--n-L-success-6) var(--n-C-success-6) var(--n-env-hue-success) / var(--n-env-alpha));
    --n-color-success-7-scrim: oklch(var(--n-L-success-7) var(--n-C-success-7) var(--n-env-hue-success) / var(--n-env-alpha));
    --n-color-success-8-scrim: oklch(var(--n-L-success-8) var(--n-C-success-8) var(--n-env-hue-success) / var(--n-env-alpha));
    --n-color-success-9-scrim: oklch(var(--n-L-success-9) var(--n-C-success-9) var(--n-env-hue-success) / var(--n-env-alpha));
    --n-color-success-10-scrim: oklch(var(--n-L-success-10) var(--n-C-success-10) var(--n-env-hue-success) / var(--n-env-alpha));
    --n-color-success-11-scrim: oklch(var(--n-L-success-11) var(--n-C-success-11) var(--n-env-hue-success) / var(--n-env-alpha));

    --n-color-warning-1-scrim: oklch(var(--n-L-warning-1) var(--n-C-warning-1) var(--n-env-hue-warning) / var(--n-env-alpha));
    --n-color-warning-2-scrim: oklch(var(--n-L-warning-2) var(--n-C-warning-2) var(--n-env-hue-warning) / var(--n-env-alpha));
    --n-color-warning-3-scrim: oklch(var(--n-L-warning-3) var(--n-C-warning-3) var(--n-env-hue-warning) / var(--n-env-alpha));
    --n-color-warning-4-scrim: oklch(var(--n-L-warning-4) var(--n-C-warning-4) var(--n-env-hue-warning) / var(--n-env-alpha));
    --n-color-warning-5-scrim: oklch(var(--n-L-warning-5) var(--n-C-warning-5) var(--n-env-hue-warning) / var(--n-env-alpha));
    --n-color-warning-6-scrim: oklch(var(--n-L-warning-6) var(--n-C-warning-6) var(--n-env-hue-warning) / var(--n-env-alpha));
    --n-color-warning-7-scrim: oklch(var(--n-L-warning-7) var(--n-C-warning-7) var(--n-env-hue-warning) / var(--n-env-alpha));
    --n-color-warning-8-scrim: oklch(var(--n-L-warning-8) var(--n-C-warning-8) var(--n-env-hue-warning) / var(--n-env-alpha));
    --n-color-warning-9-scrim: oklch(var(--n-L-warning-9) var(--n-C-warning-9) var(--n-env-hue-warning) / var(--n-env-alpha));
    --n-color-warning-10-scrim: oklch(var(--n-L-warning-10) var(--n-C-warning-10) var(--n-env-hue-warning) / var(--n-env-alpha));
    --n-color-warning-11-scrim: oklch(var(--n-L-warning-11) var(--n-C-warning-11) var(--n-env-hue-warning) / var(--n-env-alpha));

    --n-color-danger-1-scrim: oklch(var(--n-L-danger-1) var(--n-C-danger-1) var(--n-env-hue-danger) / var(--n-env-alpha));
    --n-color-danger-2-scrim: oklch(var(--n-L-danger-2) var(--n-C-danger-2) var(--n-env-hue-danger) / var(--n-env-alpha));
    --n-color-danger-3-scrim: oklch(var(--n-L-danger-3) var(--n-C-danger-3) var(--n-env-hue-danger) / var(--n-env-alpha));
    --n-color-danger-4-scrim: oklch(var(--n-L-danger-4) var(--n-C-danger-4) var(--n-env-hue-danger) / var(--n-env-alpha));
    --n-color-danger-5-scrim: oklch(var(--n-L-danger-5) var(--n-C-danger-5) var(--n-env-hue-danger) / var(--n-env-alpha));
    --n-color-danger-6-scrim: oklch(var(--n-L-danger-6) var(--n-C-danger-6) var(--n-env-hue-danger) / var(--n-env-alpha));
    --n-color-danger-7-scrim: oklch(var(--n-L-danger-7) var(--n-C-danger-7) var(--n-env-hue-danger) / var(--n-env-alpha));
    --n-color-danger-8-scrim: oklch(var(--n-L-danger-8) var(--n-C-danger-8) var(--n-env-hue-danger) / var(--n-env-alpha));
    --n-color-danger-9-scrim: oklch(var(--n-L-danger-9) var(--n-C-danger-9) var(--n-env-hue-danger) / var(--n-env-alpha));
    --n-color-danger-10-scrim: oklch(var(--n-L-danger-10) var(--n-C-danger-10) var(--n-env-hue-danger) / var(--n-env-alpha));
    --n-color-danger-11-scrim: oklch(var(--n-L-danger-11) var(--n-C-danger-11) var(--n-env-hue-danger) / var(--n-env-alpha));

    /* ── Scrim ramp — Semantic (light-dark aware) ── */

    --n-color-neutral-050-scrim: light-dark(var(--n-color-neutral-1-scrim),  var(--n-color-neutral-11-scrim));
    --n-color-neutral-100-scrim: light-dark(var(--n-color-neutral-2-scrim),  var(--n-color-neutral-10-scrim));
    --n-color-neutral-200-scrim: light-dark(var(--n-color-neutral-3-scrim),  var(--n-color-neutral-9-scrim));
    --n-color-neutral-300-scrim: light-dark(var(--n-color-neutral-4-scrim),  var(--n-color-neutral-8-scrim));
    --n-color-neutral-400-scrim: light-dark(var(--n-color-neutral-5-scrim),  var(--n-color-neutral-7-scrim));
    --n-color-neutral-500-scrim: light-dark(var(--n-color-neutral-6-scrim),  var(--n-color-neutral-6-scrim));
    --n-color-neutral-600-scrim: light-dark(var(--n-color-neutral-7-scrim),  var(--n-color-neutral-5-scrim));
    --n-color-neutral-700-scrim: light-dark(var(--n-color-neutral-8-scrim),  var(--n-color-neutral-4-scrim));
    --n-color-neutral-800-scrim: light-dark(var(--n-color-neutral-9-scrim),  var(--n-color-neutral-3-scrim));
    --n-color-neutral-900-scrim: light-dark(var(--n-color-neutral-10-scrim), var(--n-color-neutral-2-scrim));
    --n-color-neutral-950-scrim: light-dark(var(--n-color-neutral-11-scrim), var(--n-color-neutral-1-scrim));

    --n-color-accent-050-scrim: light-dark(var(--n-color-accent-1-scrim),  var(--n-color-accent-11-scrim));
    --n-color-accent-100-scrim: light-dark(var(--n-color-accent-2-scrim),  var(--n-color-accent-10-scrim));
    --n-color-accent-200-scrim: light-dark(var(--n-color-accent-3-scrim),  var(--n-color-accent-9-scrim));
    --n-color-accent-300-scrim: light-dark(var(--n-color-accent-4-scrim),  var(--n-color-accent-8-scrim));
    --n-color-accent-400-scrim: light-dark(var(--n-color-accent-5-scrim),  var(--n-color-accent-7-scrim));
    --n-color-accent-500-scrim: light-dark(var(--n-color-accent-6-scrim),  var(--n-color-accent-6-scrim));
    --n-color-accent-600-scrim: light-dark(var(--n-color-accent-7-scrim),  var(--n-color-accent-5-scrim));
    --n-color-accent-700-scrim: light-dark(var(--n-color-accent-8-scrim),  var(--n-color-accent-4-scrim));
    --n-color-accent-800-scrim: light-dark(var(--n-color-accent-9-scrim),  var(--n-color-accent-3-scrim));
    --n-color-accent-900-scrim: light-dark(var(--n-color-accent-10-scrim), var(--n-color-accent-2-scrim));
    --n-color-accent-950-scrim: light-dark(var(--n-color-accent-11-scrim), var(--n-color-accent-1-scrim));

    --n-color-info-050-scrim: light-dark(var(--n-color-info-1-scrim),  var(--n-color-info-11-scrim));
    --n-color-info-100-scrim: light-dark(var(--n-color-info-2-scrim),  var(--n-color-info-10-scrim));
    --n-color-info-200-scrim: light-dark(var(--n-color-info-3-scrim),  var(--n-color-info-9-scrim));
    --n-color-info-300-scrim: light-dark(var(--n-color-info-4-scrim),  var(--n-color-info-8-scrim));
    --n-color-info-400-scrim: light-dark(var(--n-color-info-5-scrim),  var(--n-color-info-7-scrim));
    --n-color-info-500-scrim: light-dark(var(--n-color-info-6-scrim),  var(--n-color-info-6-scrim));
    --n-color-info-600-scrim: light-dark(var(--n-color-info-7-scrim),  var(--n-color-info-5-scrim));
    --n-color-info-700-scrim: light-dark(var(--n-color-info-8-scrim),  var(--n-color-info-4-scrim));
    --n-color-info-800-scrim: light-dark(var(--n-color-info-9-scrim),  var(--n-color-info-3-scrim));
    --n-color-info-900-scrim: light-dark(var(--n-color-info-10-scrim), var(--n-color-info-2-scrim));
    --n-color-info-950-scrim: light-dark(var(--n-color-info-11-scrim), var(--n-color-info-1-scrim));

    --n-color-success-050-scrim: light-dark(var(--n-color-success-1-scrim),  var(--n-color-success-11-scrim));
    --n-color-success-100-scrim: light-dark(var(--n-color-success-2-scrim),  var(--n-color-success-10-scrim));
    --n-color-success-200-scrim: light-dark(var(--n-color-success-3-scrim),  var(--n-color-success-9-scrim));
    --n-color-success-300-scrim: light-dark(var(--n-color-success-4-scrim),  var(--n-color-success-8-scrim));
    --n-color-success-400-scrim: light-dark(var(--n-color-success-5-scrim),  var(--n-color-success-7-scrim));
    --n-color-success-500-scrim: light-dark(var(--n-color-success-6-scrim),  var(--n-color-success-6-scrim));
    --n-color-success-600-scrim: light-dark(var(--n-color-success-7-scrim),  var(--n-color-success-5-scrim));
    --n-color-success-700-scrim: light-dark(var(--n-color-success-8-scrim),  var(--n-color-success-4-scrim));
    --n-color-success-800-scrim: light-dark(var(--n-color-success-9-scrim),  var(--n-color-success-3-scrim));
    --n-color-success-900-scrim: light-dark(var(--n-color-success-10-scrim), var(--n-color-success-2-scrim));
    --n-color-success-950-scrim: light-dark(var(--n-color-success-11-scrim), var(--n-color-success-1-scrim));

    --n-color-warning-050-scrim: light-dark(var(--n-color-warning-1-scrim),  var(--n-color-warning-11-scrim));
    --n-color-warning-100-scrim: light-dark(var(--n-color-warning-2-scrim),  var(--n-color-warning-10-scrim));
    --n-color-warning-200-scrim: light-dark(var(--n-color-warning-3-scrim),  var(--n-color-warning-9-scrim));
    --n-color-warning-300-scrim: light-dark(var(--n-color-warning-4-scrim),  var(--n-color-warning-8-scrim));
    --n-color-warning-400-scrim: light-dark(var(--n-color-warning-5-scrim),  var(--n-color-warning-7-scrim));
    --n-color-warning-500-scrim: light-dark(var(--n-color-warning-6-scrim),  var(--n-color-warning-6-scrim));
    --n-color-warning-600-scrim: light-dark(var(--n-color-warning-7-scrim),  var(--n-color-warning-5-scrim));
    --n-color-warning-700-scrim: light-dark(var(--n-color-warning-8-scrim),  var(--n-color-warning-4-scrim));
    --n-color-warning-800-scrim: light-dark(var(--n-color-warning-9-scrim),  var(--n-color-warning-3-scrim));
    --n-color-warning-900-scrim: light-dark(var(--n-color-warning-10-scrim), var(--n-color-warning-2-scrim));
    --n-color-warning-950-scrim: light-dark(var(--n-color-warning-11-scrim), var(--n-color-warning-1-scrim));

    --n-color-danger-050-scrim: light-dark(var(--n-color-danger-1-scrim),  var(--n-color-danger-11-scrim));
    --n-color-danger-100-scrim: light-dark(var(--n-color-danger-2-scrim),  var(--n-color-danger-10-scrim));
    --n-color-danger-200-scrim: light-dark(var(--n-color-danger-3-scrim),  var(--n-color-danger-9-scrim));
    --n-color-danger-300-scrim: light-dark(var(--n-color-danger-4-scrim),  var(--n-color-danger-8-scrim));
    --n-color-danger-400-scrim: light-dark(var(--n-color-danger-5-scrim),  var(--n-color-danger-7-scrim));
    --n-color-danger-500-scrim: light-dark(var(--n-color-danger-6-scrim),  var(--n-color-danger-6-scrim));
    --n-color-danger-600-scrim: light-dark(var(--n-color-danger-7-scrim),  var(--n-color-danger-5-scrim));
    --n-color-danger-700-scrim: light-dark(var(--n-color-danger-8-scrim),  var(--n-color-danger-4-scrim));
    --n-color-danger-800-scrim: light-dark(var(--n-color-danger-9-scrim),  var(--n-color-danger-3-scrim));
    --n-color-danger-900-scrim: light-dark(var(--n-color-danger-10-scrim), var(--n-color-danger-2-scrim));
    --n-color-danger-950-scrim: light-dark(var(--n-color-danger-11-scrim), var(--n-color-danger-1-scrim));

    /* ── Scrim palette — Tint & Shade (L + alpha stepped, mode-independent) ──
       Both start from the family anchor (step-500 L/C/H).
       Strongest = anchor color at full alpha.  Weakest = L-extreme at minimal alpha.
       L: strongest = anchor, weakest = L-max (tint) or L-min (shade), 6 intervals.
       Alpha: strongest = 7/7, weakest = 1/7 of n-env-alpha.
       Chroma = anchor chroma (--n-C-{fam}-6) throughout.
    */

    --n-color-neutral-scrim-tint-strongest: oklch(var(--n-env-lightness-neutral) var(--n-C-neutral-6) var(--n-env-hue-neutral) / var(--n-env-alpha));
    --n-color-neutral-scrim-tint-stronger:  oklch(calc(var(--n-env-lightness-neutral) + 1 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-neutral))) var(--n-C-neutral-6) var(--n-env-hue-neutral) / calc(6 / 7 * var(--n-env-alpha)));
    --n-color-neutral-scrim-tint-strong:    oklch(calc(var(--n-env-lightness-neutral) + 2 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-neutral))) var(--n-C-neutral-6) var(--n-env-hue-neutral) / calc(5 / 7 * var(--n-env-alpha)));
    --n-color-neutral-scrim-tint-base:      oklch(calc(var(--n-env-lightness-neutral) + 3 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-neutral))) var(--n-C-neutral-6) var(--n-env-hue-neutral) / calc(4 / 7 * var(--n-env-alpha)));
    --n-color-neutral-scrim-tint-weak:      oklch(calc(var(--n-env-lightness-neutral) + 4 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-neutral))) var(--n-C-neutral-6) var(--n-env-hue-neutral) / calc(3 / 7 * var(--n-env-alpha)));
    --n-color-neutral-scrim-tint-weaker:    oklch(calc(var(--n-env-lightness-neutral) + 5 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-neutral))) var(--n-C-neutral-6) var(--n-env-hue-neutral) / calc(2 / 7 * var(--n-env-alpha)));
    --n-color-neutral-scrim-tint-weakest:   oklch(var(--n-env-lightness-max) var(--n-C-neutral-6) var(--n-env-hue-neutral) / calc(1 / 7 * var(--n-env-alpha)));

    --n-color-neutral-scrim-shade-strongest: oklch(var(--n-env-lightness-neutral) var(--n-C-neutral-6) var(--n-env-hue-neutral) / var(--n-env-alpha));
    --n-color-neutral-scrim-shade-stronger:  oklch(calc(var(--n-env-lightness-neutral) - 1 / 6 * (var(--n-env-lightness-neutral) - var(--n-env-lightness-min))) var(--n-C-neutral-6) var(--n-env-hue-neutral) / calc(6 / 7 * var(--n-env-alpha)));
    --n-color-neutral-scrim-shade-strong:    oklch(calc(var(--n-env-lightness-neutral) - 2 / 6 * (var(--n-env-lightness-neutral) - var(--n-env-lightness-min))) var(--n-C-neutral-6) var(--n-env-hue-neutral) / calc(5 / 7 * var(--n-env-alpha)));
    --n-color-neutral-scrim-shade-base:      oklch(calc(var(--n-env-lightness-neutral) - 3 / 6 * (var(--n-env-lightness-neutral) - var(--n-env-lightness-min))) var(--n-C-neutral-6) var(--n-env-hue-neutral) / calc(4 / 7 * var(--n-env-alpha)));
    --n-color-neutral-scrim-shade-weak:      oklch(calc(var(--n-env-lightness-neutral) - 4 / 6 * (var(--n-env-lightness-neutral) - var(--n-env-lightness-min))) var(--n-C-neutral-6) var(--n-env-hue-neutral) / calc(3 / 7 * var(--n-env-alpha)));
    --n-color-neutral-scrim-shade-weaker:    oklch(calc(var(--n-env-lightness-neutral) - 5 / 6 * (var(--n-env-lightness-neutral) - var(--n-env-lightness-min))) var(--n-C-neutral-6) var(--n-env-hue-neutral) / calc(2 / 7 * var(--n-env-alpha)));
    --n-color-neutral-scrim-shade-weakest:   oklch(var(--n-env-lightness-min) var(--n-C-neutral-6) var(--n-env-hue-neutral) / calc(1 / 7 * var(--n-env-alpha)));

    --n-color-accent-scrim-tint-strongest: oklch(var(--n-env-lightness-accent) var(--n-C-accent-6) var(--n-env-hue-accent) / var(--n-env-alpha));
    --n-color-accent-scrim-tint-stronger:  oklch(calc(var(--n-env-lightness-accent) + 1 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-accent))) var(--n-C-accent-6) var(--n-env-hue-accent) / calc(6 / 7 * var(--n-env-alpha)));
    --n-color-accent-scrim-tint-strong:    oklch(calc(var(--n-env-lightness-accent) + 2 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-accent))) var(--n-C-accent-6) var(--n-env-hue-accent) / calc(5 / 7 * var(--n-env-alpha)));
    --n-color-accent-scrim-tint-base:      oklch(calc(var(--n-env-lightness-accent) + 3 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-accent))) var(--n-C-accent-6) var(--n-env-hue-accent) / calc(4 / 7 * var(--n-env-alpha)));
    --n-color-accent-scrim-tint-weak:      oklch(calc(var(--n-env-lightness-accent) + 4 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-accent))) var(--n-C-accent-6) var(--n-env-hue-accent) / calc(3 / 7 * var(--n-env-alpha)));
    --n-color-accent-scrim-tint-weaker:    oklch(calc(var(--n-env-lightness-accent) + 5 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-accent))) var(--n-C-accent-6) var(--n-env-hue-accent) / calc(2 / 7 * var(--n-env-alpha)));
    --n-color-accent-scrim-tint-weakest:   oklch(var(--n-env-lightness-max) var(--n-C-accent-6) var(--n-env-hue-accent) / calc(1 / 7 * var(--n-env-alpha)));

    --n-color-accent-scrim-shade-strongest: oklch(var(--n-env-lightness-accent) var(--n-C-accent-6) var(--n-env-hue-accent) / var(--n-env-alpha));
    --n-color-accent-scrim-shade-stronger:  oklch(calc(var(--n-env-lightness-accent) - 1 / 6 * (var(--n-env-lightness-accent) - var(--n-env-lightness-min))) var(--n-C-accent-6) var(--n-env-hue-accent) / calc(6 / 7 * var(--n-env-alpha)));
    --n-color-accent-scrim-shade-strong:    oklch(calc(var(--n-env-lightness-accent) - 2 / 6 * (var(--n-env-lightness-accent) - var(--n-env-lightness-min))) var(--n-C-accent-6) var(--n-env-hue-accent) / calc(5 / 7 * var(--n-env-alpha)));
    --n-color-accent-scrim-shade-base:      oklch(calc(var(--n-env-lightness-accent) - 3 / 6 * (var(--n-env-lightness-accent) - var(--n-env-lightness-min))) var(--n-C-accent-6) var(--n-env-hue-accent) / calc(4 / 7 * var(--n-env-alpha)));
    --n-color-accent-scrim-shade-weak:      oklch(calc(var(--n-env-lightness-accent) - 4 / 6 * (var(--n-env-lightness-accent) - var(--n-env-lightness-min))) var(--n-C-accent-6) var(--n-env-hue-accent) / calc(3 / 7 * var(--n-env-alpha)));
    --n-color-accent-scrim-shade-weaker:    oklch(calc(var(--n-env-lightness-accent) - 5 / 6 * (var(--n-env-lightness-accent) - var(--n-env-lightness-min))) var(--n-C-accent-6) var(--n-env-hue-accent) / calc(2 / 7 * var(--n-env-alpha)));
    --n-color-accent-scrim-shade-weakest:   oklch(var(--n-env-lightness-min) var(--n-C-accent-6) var(--n-env-hue-accent) / calc(1 / 7 * var(--n-env-alpha)));

    --n-color-info-scrim-tint-strongest: oklch(var(--n-env-lightness-info) var(--n-C-info-6) var(--n-env-hue-info) / var(--n-env-alpha));
    --n-color-info-scrim-tint-stronger:  oklch(calc(var(--n-env-lightness-info) + 1 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-info))) var(--n-C-info-6) var(--n-env-hue-info) / calc(6 / 7 * var(--n-env-alpha)));
    --n-color-info-scrim-tint-strong:    oklch(calc(var(--n-env-lightness-info) + 2 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-info))) var(--n-C-info-6) var(--n-env-hue-info) / calc(5 / 7 * var(--n-env-alpha)));
    --n-color-info-scrim-tint-base:      oklch(calc(var(--n-env-lightness-info) + 3 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-info))) var(--n-C-info-6) var(--n-env-hue-info) / calc(4 / 7 * var(--n-env-alpha)));
    --n-color-info-scrim-tint-weak:      oklch(calc(var(--n-env-lightness-info) + 4 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-info))) var(--n-C-info-6) var(--n-env-hue-info) / calc(3 / 7 * var(--n-env-alpha)));
    --n-color-info-scrim-tint-weaker:    oklch(calc(var(--n-env-lightness-info) + 5 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-info))) var(--n-C-info-6) var(--n-env-hue-info) / calc(2 / 7 * var(--n-env-alpha)));
    --n-color-info-scrim-tint-weakest:   oklch(var(--n-env-lightness-max) var(--n-C-info-6) var(--n-env-hue-info) / calc(1 / 7 * var(--n-env-alpha)));

    --n-color-info-scrim-shade-strongest: oklch(var(--n-env-lightness-info) var(--n-C-info-6) var(--n-env-hue-info) / var(--n-env-alpha));
    --n-color-info-scrim-shade-stronger:  oklch(calc(var(--n-env-lightness-info) - 1 / 6 * (var(--n-env-lightness-info) - var(--n-env-lightness-min))) var(--n-C-info-6) var(--n-env-hue-info) / calc(6 / 7 * var(--n-env-alpha)));
    --n-color-info-scrim-shade-strong:    oklch(calc(var(--n-env-lightness-info) - 2 / 6 * (var(--n-env-lightness-info) - var(--n-env-lightness-min))) var(--n-C-info-6) var(--n-env-hue-info) / calc(5 / 7 * var(--n-env-alpha)));
    --n-color-info-scrim-shade-base:      oklch(calc(var(--n-env-lightness-info) - 3 / 6 * (var(--n-env-lightness-info) - var(--n-env-lightness-min))) var(--n-C-info-6) var(--n-env-hue-info) / calc(4 / 7 * var(--n-env-alpha)));
    --n-color-info-scrim-shade-weak:      oklch(calc(var(--n-env-lightness-info) - 4 / 6 * (var(--n-env-lightness-info) - var(--n-env-lightness-min))) var(--n-C-info-6) var(--n-env-hue-info) / calc(3 / 7 * var(--n-env-alpha)));
    --n-color-info-scrim-shade-weaker:    oklch(calc(var(--n-env-lightness-info) - 5 / 6 * (var(--n-env-lightness-info) - var(--n-env-lightness-min))) var(--n-C-info-6) var(--n-env-hue-info) / calc(2 / 7 * var(--n-env-alpha)));
    --n-color-info-scrim-shade-weakest:   oklch(var(--n-env-lightness-min) var(--n-C-info-6) var(--n-env-hue-info) / calc(1 / 7 * var(--n-env-alpha)));

    --n-color-success-scrim-tint-strongest: oklch(var(--n-env-lightness-success) var(--n-C-success-6) var(--n-env-hue-success) / var(--n-env-alpha));
    --n-color-success-scrim-tint-stronger:  oklch(calc(var(--n-env-lightness-success) + 1 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-success))) var(--n-C-success-6) var(--n-env-hue-success) / calc(6 / 7 * var(--n-env-alpha)));
    --n-color-success-scrim-tint-strong:    oklch(calc(var(--n-env-lightness-success) + 2 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-success))) var(--n-C-success-6) var(--n-env-hue-success) / calc(5 / 7 * var(--n-env-alpha)));
    --n-color-success-scrim-tint-base:      oklch(calc(var(--n-env-lightness-success) + 3 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-success))) var(--n-C-success-6) var(--n-env-hue-success) / calc(4 / 7 * var(--n-env-alpha)));
    --n-color-success-scrim-tint-weak:      oklch(calc(var(--n-env-lightness-success) + 4 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-success))) var(--n-C-success-6) var(--n-env-hue-success) / calc(3 / 7 * var(--n-env-alpha)));
    --n-color-success-scrim-tint-weaker:    oklch(calc(var(--n-env-lightness-success) + 5 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-success))) var(--n-C-success-6) var(--n-env-hue-success) / calc(2 / 7 * var(--n-env-alpha)));
    --n-color-success-scrim-tint-weakest:   oklch(var(--n-env-lightness-max) var(--n-C-success-6) var(--n-env-hue-success) / calc(1 / 7 * var(--n-env-alpha)));

    --n-color-success-scrim-shade-strongest: oklch(var(--n-env-lightness-success) var(--n-C-success-6) var(--n-env-hue-success) / var(--n-env-alpha));
    --n-color-success-scrim-shade-stronger:  oklch(calc(var(--n-env-lightness-success) - 1 / 6 * (var(--n-env-lightness-success) - var(--n-env-lightness-min))) var(--n-C-success-6) var(--n-env-hue-success) / calc(6 / 7 * var(--n-env-alpha)));
    --n-color-success-scrim-shade-strong:    oklch(calc(var(--n-env-lightness-success) - 2 / 6 * (var(--n-env-lightness-success) - var(--n-env-lightness-min))) var(--n-C-success-6) var(--n-env-hue-success) / calc(5 / 7 * var(--n-env-alpha)));
    --n-color-success-scrim-shade-base:      oklch(calc(var(--n-env-lightness-success) - 3 / 6 * (var(--n-env-lightness-success) - var(--n-env-lightness-min))) var(--n-C-success-6) var(--n-env-hue-success) / calc(4 / 7 * var(--n-env-alpha)));
    --n-color-success-scrim-shade-weak:      oklch(calc(var(--n-env-lightness-success) - 4 / 6 * (var(--n-env-lightness-success) - var(--n-env-lightness-min))) var(--n-C-success-6) var(--n-env-hue-success) / calc(3 / 7 * var(--n-env-alpha)));
    --n-color-success-scrim-shade-weaker:    oklch(calc(var(--n-env-lightness-success) - 5 / 6 * (var(--n-env-lightness-success) - var(--n-env-lightness-min))) var(--n-C-success-6) var(--n-env-hue-success) / calc(2 / 7 * var(--n-env-alpha)));
    --n-color-success-scrim-shade-weakest:   oklch(var(--n-env-lightness-min) var(--n-C-success-6) var(--n-env-hue-success) / calc(1 / 7 * var(--n-env-alpha)));

    --n-color-warning-scrim-tint-strongest: oklch(var(--n-env-lightness-warning) var(--n-C-warning-6) var(--n-env-hue-warning) / var(--n-env-alpha));
    --n-color-warning-scrim-tint-stronger:  oklch(calc(var(--n-env-lightness-warning) + 1 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-warning))) var(--n-C-warning-6) var(--n-env-hue-warning) / calc(6 / 7 * var(--n-env-alpha)));
    --n-color-warning-scrim-tint-strong:    oklch(calc(var(--n-env-lightness-warning) + 2 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-warning))) var(--n-C-warning-6) var(--n-env-hue-warning) / calc(5 / 7 * var(--n-env-alpha)));
    --n-color-warning-scrim-tint-base:      oklch(calc(var(--n-env-lightness-warning) + 3 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-warning))) var(--n-C-warning-6) var(--n-env-hue-warning) / calc(4 / 7 * var(--n-env-alpha)));
    --n-color-warning-scrim-tint-weak:      oklch(calc(var(--n-env-lightness-warning) + 4 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-warning))) var(--n-C-warning-6) var(--n-env-hue-warning) / calc(3 / 7 * var(--n-env-alpha)));
    --n-color-warning-scrim-tint-weaker:    oklch(calc(var(--n-env-lightness-warning) + 5 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-warning))) var(--n-C-warning-6) var(--n-env-hue-warning) / calc(2 / 7 * var(--n-env-alpha)));
    --n-color-warning-scrim-tint-weakest:   oklch(var(--n-env-lightness-max) var(--n-C-warning-6) var(--n-env-hue-warning) / calc(1 / 7 * var(--n-env-alpha)));

    --n-color-warning-scrim-shade-strongest: oklch(var(--n-env-lightness-warning) var(--n-C-warning-6) var(--n-env-hue-warning) / var(--n-env-alpha));
    --n-color-warning-scrim-shade-stronger:  oklch(calc(var(--n-env-lightness-warning) - 1 / 6 * (var(--n-env-lightness-warning) - var(--n-env-lightness-min))) var(--n-C-warning-6) var(--n-env-hue-warning) / calc(6 / 7 * var(--n-env-alpha)));
    --n-color-warning-scrim-shade-strong:    oklch(calc(var(--n-env-lightness-warning) - 2 / 6 * (var(--n-env-lightness-warning) - var(--n-env-lightness-min))) var(--n-C-warning-6) var(--n-env-hue-warning) / calc(5 / 7 * var(--n-env-alpha)));
    --n-color-warning-scrim-shade-base:      oklch(calc(var(--n-env-lightness-warning) - 3 / 6 * (var(--n-env-lightness-warning) - var(--n-env-lightness-min))) var(--n-C-warning-6) var(--n-env-hue-warning) / calc(4 / 7 * var(--n-env-alpha)));
    --n-color-warning-scrim-shade-weak:      oklch(calc(var(--n-env-lightness-warning) - 4 / 6 * (var(--n-env-lightness-warning) - var(--n-env-lightness-min))) var(--n-C-warning-6) var(--n-env-hue-warning) / calc(3 / 7 * var(--n-env-alpha)));
    --n-color-warning-scrim-shade-weaker:    oklch(calc(var(--n-env-lightness-warning) - 5 / 6 * (var(--n-env-lightness-warning) - var(--n-env-lightness-min))) var(--n-C-warning-6) var(--n-env-hue-warning) / calc(2 / 7 * var(--n-env-alpha)));
    --n-color-warning-scrim-shade-weakest:   oklch(var(--n-env-lightness-min) var(--n-C-warning-6) var(--n-env-hue-warning) / calc(1 / 7 * var(--n-env-alpha)));

    --n-color-danger-scrim-tint-strongest: oklch(var(--n-env-lightness-danger) var(--n-C-danger-6) var(--n-env-hue-danger) / var(--n-env-alpha));
    --n-color-danger-scrim-tint-stronger:  oklch(calc(var(--n-env-lightness-danger) + 1 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-danger))) var(--n-C-danger-6) var(--n-env-hue-danger) / calc(6 / 7 * var(--n-env-alpha)));
    --n-color-danger-scrim-tint-strong:    oklch(calc(var(--n-env-lightness-danger) + 2 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-danger))) var(--n-C-danger-6) var(--n-env-hue-danger) / calc(5 / 7 * var(--n-env-alpha)));
    --n-color-danger-scrim-tint-base:      oklch(calc(var(--n-env-lightness-danger) + 3 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-danger))) var(--n-C-danger-6) var(--n-env-hue-danger) / calc(4 / 7 * var(--n-env-alpha)));
    --n-color-danger-scrim-tint-weak:      oklch(calc(var(--n-env-lightness-danger) + 4 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-danger))) var(--n-C-danger-6) var(--n-env-hue-danger) / calc(3 / 7 * var(--n-env-alpha)));
    --n-color-danger-scrim-tint-weaker:    oklch(calc(var(--n-env-lightness-danger) + 5 / 6 * (var(--n-env-lightness-max) - var(--n-env-lightness-danger))) var(--n-C-danger-6) var(--n-env-hue-danger) / calc(2 / 7 * var(--n-env-alpha)));
    --n-color-danger-scrim-tint-weakest:   oklch(var(--n-env-lightness-max) var(--n-C-danger-6) var(--n-env-hue-danger) / calc(1 / 7 * var(--n-env-alpha)));

    --n-color-danger-scrim-shade-strongest: oklch(var(--n-env-lightness-danger) var(--n-C-danger-6) var(--n-env-hue-danger) / var(--n-env-alpha));
    --n-color-danger-scrim-shade-stronger:  oklch(calc(var(--n-env-lightness-danger) - 1 / 6 * (var(--n-env-lightness-danger) - var(--n-env-lightness-min))) var(--n-C-danger-6) var(--n-env-hue-danger) / calc(6 / 7 * var(--n-env-alpha)));
    --n-color-danger-scrim-shade-strong:    oklch(calc(var(--n-env-lightness-danger) - 2 / 6 * (var(--n-env-lightness-danger) - var(--n-env-lightness-min))) var(--n-C-danger-6) var(--n-env-hue-danger) / calc(5 / 7 * var(--n-env-alpha)));
    --n-color-danger-scrim-shade-base:      oklch(calc(var(--n-env-lightness-danger) - 3 / 6 * (var(--n-env-lightness-danger) - var(--n-env-lightness-min))) var(--n-C-danger-6) var(--n-env-hue-danger) / calc(4 / 7 * var(--n-env-alpha)));
    --n-color-danger-scrim-shade-weak:      oklch(calc(var(--n-env-lightness-danger) - 4 / 6 * (var(--n-env-lightness-danger) - var(--n-env-lightness-min))) var(--n-C-danger-6) var(--n-env-hue-danger) / calc(3 / 7 * var(--n-env-alpha)));
    --n-color-danger-scrim-shade-weaker:    oklch(calc(var(--n-env-lightness-danger) - 5 / 6 * (var(--n-env-lightness-danger) - var(--n-env-lightness-min))) var(--n-C-danger-6) var(--n-env-hue-danger) / calc(2 / 7 * var(--n-env-alpha)));
    --n-color-danger-scrim-shade-weakest:   oklch(var(--n-env-lightness-min) var(--n-C-danger-6) var(--n-env-hue-danger) / calc(1 / 7 * var(--n-env-alpha)));

    /* ── Scrim anchor aliases (bare name = step 500) ── */

    --n-color-neutral-scrim: var(--n-color-neutral-500-scrim);
    --n-color-accent-scrim:  var(--n-color-accent-500-scrim);
    --n-color-info-scrim:    var(--n-color-info-500-scrim);
    --n-color-success-scrim: var(--n-color-success-500-scrim);
    --n-color-warning-scrim: var(--n-color-warning-500-scrim);
    --n-color-danger-scrim:  var(--n-color-danger-500-scrim);

    /* ── Adaptive scrims (light-dark) ──
       light-dark(shade, tint) — shade darkens in light mode, tint lightens in dark mode.
       Use these for controls, buttons, and any surface that needs to "deepen" relative
       to its parent ground regardless of color scheme.
    */

    --n-color-neutral-scrim-strongest: light-dark(var(--n-color-neutral-scrim-shade-strongest), var(--n-color-neutral-scrim-tint-strongest));
    --n-color-neutral-scrim-stronger:  light-dark(var(--n-color-neutral-scrim-shade-stronger),  var(--n-color-neutral-scrim-tint-stronger));
    --n-color-neutral-scrim-strong:    light-dark(var(--n-color-neutral-scrim-shade-strong),    var(--n-color-neutral-scrim-tint-strong));
    --n-color-neutral-scrim-base:      light-dark(var(--n-color-neutral-scrim-shade-base),      var(--n-color-neutral-scrim-tint-base));
    --n-color-neutral-scrim-weak:      light-dark(var(--n-color-neutral-scrim-shade-weak),      var(--n-color-neutral-scrim-tint-weak));
    --n-color-neutral-scrim-weaker:    light-dark(var(--n-color-neutral-scrim-shade-weaker),    var(--n-color-neutral-scrim-tint-weaker));
    --n-color-neutral-scrim-weakest:   light-dark(var(--n-color-neutral-scrim-shade-weakest),   var(--n-color-neutral-scrim-tint-weakest));

    --n-color-accent-scrim-strongest: light-dark(var(--n-color-accent-scrim-shade-strongest), var(--n-color-accent-scrim-tint-strongest));
    --n-color-accent-scrim-stronger:  light-dark(var(--n-color-accent-scrim-shade-stronger),  var(--n-color-accent-scrim-tint-stronger));
    --n-color-accent-scrim-strong:    light-dark(var(--n-color-accent-scrim-shade-strong),    var(--n-color-accent-scrim-tint-strong));
    --n-color-accent-scrim-base:      light-dark(var(--n-color-accent-scrim-shade-base),      var(--n-color-accent-scrim-tint-base));
    --n-color-accent-scrim-weak:      light-dark(var(--n-color-accent-scrim-shade-weak),      var(--n-color-accent-scrim-tint-weak));
    --n-color-accent-scrim-weaker:    light-dark(var(--n-color-accent-scrim-shade-weaker),    var(--n-color-accent-scrim-tint-weaker));
    --n-color-accent-scrim-weakest:   light-dark(var(--n-color-accent-scrim-shade-weakest),   var(--n-color-accent-scrim-tint-weakest));

    --n-color-info-scrim-strongest: light-dark(var(--n-color-info-scrim-shade-strongest), var(--n-color-info-scrim-tint-strongest));
    --n-color-info-scrim-stronger:  light-dark(var(--n-color-info-scrim-shade-stronger),  var(--n-color-info-scrim-tint-stronger));
    --n-color-info-scrim-strong:    light-dark(var(--n-color-info-scrim-shade-strong),    var(--n-color-info-scrim-tint-strong));
    --n-color-info-scrim-base:      light-dark(var(--n-color-info-scrim-shade-base),      var(--n-color-info-scrim-tint-base));
    --n-color-info-scrim-weak:      light-dark(var(--n-color-info-scrim-shade-weak),      var(--n-color-info-scrim-tint-weak));
    --n-color-info-scrim-weaker:    light-dark(var(--n-color-info-scrim-shade-weaker),    var(--n-color-info-scrim-tint-weaker));
    --n-color-info-scrim-weakest:   light-dark(var(--n-color-info-scrim-shade-weakest),   var(--n-color-info-scrim-tint-weakest));

    --n-color-success-scrim-strongest: light-dark(var(--n-color-success-scrim-shade-strongest), var(--n-color-success-scrim-tint-strongest));
    --n-color-success-scrim-stronger:  light-dark(var(--n-color-success-scrim-shade-stronger),  var(--n-color-success-scrim-tint-stronger));
    --n-color-success-scrim-strong:    light-dark(var(--n-color-success-scrim-shade-strong),    var(--n-color-success-scrim-tint-strong));
    --n-color-success-scrim-base:      light-dark(var(--n-color-success-scrim-shade-base),      var(--n-color-success-scrim-tint-base));
    --n-color-success-scrim-weak:      light-dark(var(--n-color-success-scrim-shade-weak),      var(--n-color-success-scrim-tint-weak));
    --n-color-success-scrim-weaker:    light-dark(var(--n-color-success-scrim-shade-weaker),    var(--n-color-success-scrim-tint-weaker));
    --n-color-success-scrim-weakest:   light-dark(var(--n-color-success-scrim-shade-weakest),   var(--n-color-success-scrim-tint-weakest));

    --n-color-warning-scrim-strongest: light-dark(var(--n-color-warning-scrim-shade-strongest), var(--n-color-warning-scrim-tint-strongest));
    --n-color-warning-scrim-stronger:  light-dark(var(--n-color-warning-scrim-shade-stronger),  var(--n-color-warning-scrim-tint-stronger));
    --n-color-warning-scrim-strong:    light-dark(var(--n-color-warning-scrim-shade-strong),    var(--n-color-warning-scrim-tint-strong));
    --n-color-warning-scrim-base:      light-dark(var(--n-color-warning-scrim-shade-base),      var(--n-color-warning-scrim-tint-base));
    --n-color-warning-scrim-weak:      light-dark(var(--n-color-warning-scrim-shade-weak),      var(--n-color-warning-scrim-tint-weak));
    --n-color-warning-scrim-weaker:    light-dark(var(--n-color-warning-scrim-shade-weaker),    var(--n-color-warning-scrim-tint-weaker));
    --n-color-warning-scrim-weakest:   light-dark(var(--n-color-warning-scrim-shade-weakest),   var(--n-color-warning-scrim-tint-weakest));

    --n-color-danger-scrim-strongest: light-dark(var(--n-color-danger-scrim-shade-strongest), var(--n-color-danger-scrim-tint-strongest));
    --n-color-danger-scrim-stronger:  light-dark(var(--n-color-danger-scrim-shade-stronger),  var(--n-color-danger-scrim-tint-stronger));
    --n-color-danger-scrim-strong:    light-dark(var(--n-color-danger-scrim-shade-strong),    var(--n-color-danger-scrim-tint-strong));
    --n-color-danger-scrim-base:      light-dark(var(--n-color-danger-scrim-shade-base),      var(--n-color-danger-scrim-tint-base));
    --n-color-danger-scrim-weak:      light-dark(var(--n-color-danger-scrim-shade-weak),      var(--n-color-danger-scrim-tint-weak));
    --n-color-danger-scrim-weaker:    light-dark(var(--n-color-danger-scrim-shade-weaker),    var(--n-color-danger-scrim-tint-weaker));
    --n-color-danger-scrim-weakest:   light-dark(var(--n-color-danger-scrim-shade-weakest),   var(--n-color-danger-scrim-tint-weakest));

    /* ── Background — Elevation aliases ──
       Same step in both modes → visual layer stays consistent.
    */

    --n-color-neutral-lowest:  light-dark(oklch(var(--n-L-light-1) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-1) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));
    --n-color-neutral-lower:   light-dark(oklch(var(--n-L-light-2) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-2) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));
    --n-color-neutral-low:     light-dark(oklch(var(--n-L-light-3) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-3) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));
    --n-color-neutral-base:    light-dark(oklch(var(--n-L-light-4) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-4) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));
    --n-color-neutral-high:    light-dark(oklch(var(--n-L-light-5) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-5) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));
    --n-color-neutral-higher:  light-dark(oklch(var(--n-L-light-6) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-6) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));
    --n-color-neutral-highest: light-dark(oklch(var(--n-L-light-7) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-7) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));

    --n-color-accent-lowest:  light-dark(oklch(var(--n-L-light-1) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-1) var(--n-C-accent-muted) var(--n-env-hue-accent)));
    --n-color-accent-lower:   light-dark(oklch(var(--n-L-light-2) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-2) var(--n-C-accent-muted) var(--n-env-hue-accent)));
    --n-color-accent-low:     light-dark(oklch(var(--n-L-light-3) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-3) var(--n-C-accent-muted) var(--n-env-hue-accent)));
    --n-color-accent-base:    light-dark(oklch(var(--n-L-light-4) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-4) var(--n-C-accent-muted) var(--n-env-hue-accent)));
    --n-color-accent-high:    light-dark(oklch(var(--n-L-light-5) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-5) var(--n-C-accent-muted) var(--n-env-hue-accent)));
    --n-color-accent-higher:  light-dark(oklch(var(--n-L-light-6) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-6) var(--n-C-accent-muted) var(--n-env-hue-accent)));
    --n-color-accent-highest: light-dark(oklch(var(--n-L-light-7) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-7) var(--n-C-accent-muted) var(--n-env-hue-accent)));

    --n-color-info-lowest:  light-dark(oklch(var(--n-L-light-1) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-1) var(--n-C-info-muted) var(--n-env-hue-info)));
    --n-color-info-lower:   light-dark(oklch(var(--n-L-light-2) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-2) var(--n-C-info-muted) var(--n-env-hue-info)));
    --n-color-info-low:     light-dark(oklch(var(--n-L-light-3) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-3) var(--n-C-info-muted) var(--n-env-hue-info)));
    --n-color-info-base:    light-dark(oklch(var(--n-L-light-4) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-4) var(--n-C-info-muted) var(--n-env-hue-info)));
    --n-color-info-high:    light-dark(oklch(var(--n-L-light-5) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-5) var(--n-C-info-muted) var(--n-env-hue-info)));
    --n-color-info-higher:  light-dark(oklch(var(--n-L-light-6) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-6) var(--n-C-info-muted) var(--n-env-hue-info)));
    --n-color-info-highest: light-dark(oklch(var(--n-L-light-7) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-7) var(--n-C-info-muted) var(--n-env-hue-info)));

    --n-color-success-lowest:  light-dark(oklch(var(--n-L-light-1) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-1) var(--n-C-success-muted) var(--n-env-hue-success)));
    --n-color-success-lower:   light-dark(oklch(var(--n-L-light-2) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-2) var(--n-C-success-muted) var(--n-env-hue-success)));
    --n-color-success-low:     light-dark(oklch(var(--n-L-light-3) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-3) var(--n-C-success-muted) var(--n-env-hue-success)));
    --n-color-success-base:    light-dark(oklch(var(--n-L-light-4) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-4) var(--n-C-success-muted) var(--n-env-hue-success)));
    --n-color-success-high:    light-dark(oklch(var(--n-L-light-5) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-5) var(--n-C-success-muted) var(--n-env-hue-success)));
    --n-color-success-higher:  light-dark(oklch(var(--n-L-light-6) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-6) var(--n-C-success-muted) var(--n-env-hue-success)));
    --n-color-success-highest: light-dark(oklch(var(--n-L-light-7) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-7) var(--n-C-success-muted) var(--n-env-hue-success)));

    --n-color-warning-lowest:  light-dark(oklch(var(--n-L-light-1) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-1) var(--n-C-warning-muted) var(--n-env-hue-warning)));
    --n-color-warning-lower:   light-dark(oklch(var(--n-L-light-2) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-2) var(--n-C-warning-muted) var(--n-env-hue-warning)));
    --n-color-warning-low:     light-dark(oklch(var(--n-L-light-3) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-3) var(--n-C-warning-muted) var(--n-env-hue-warning)));
    --n-color-warning-base:    light-dark(oklch(var(--n-L-light-4) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-4) var(--n-C-warning-muted) var(--n-env-hue-warning)));
    --n-color-warning-high:    light-dark(oklch(var(--n-L-light-5) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-5) var(--n-C-warning-muted) var(--n-env-hue-warning)));
    --n-color-warning-higher:  light-dark(oklch(var(--n-L-light-6) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-6) var(--n-C-warning-muted) var(--n-env-hue-warning)));
    --n-color-warning-highest: light-dark(oklch(var(--n-L-light-7) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-7) var(--n-C-warning-muted) var(--n-env-hue-warning)));

    --n-color-danger-lowest:  light-dark(oklch(var(--n-L-light-1) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-1) var(--n-C-danger-muted) var(--n-env-hue-danger)));
    --n-color-danger-lower:   light-dark(oklch(var(--n-L-light-2) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-2) var(--n-C-danger-muted) var(--n-env-hue-danger)));
    --n-color-danger-low:     light-dark(oklch(var(--n-L-light-3) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-3) var(--n-C-danger-muted) var(--n-env-hue-danger)));
    --n-color-danger-base:    light-dark(oklch(var(--n-L-light-4) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-4) var(--n-C-danger-muted) var(--n-env-hue-danger)));
    --n-color-danger-high:    light-dark(oklch(var(--n-L-light-5) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-5) var(--n-C-danger-muted) var(--n-env-hue-danger)));
    --n-color-danger-higher:  light-dark(oklch(var(--n-L-light-6) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-6) var(--n-C-danger-muted) var(--n-env-hue-danger)));
    --n-color-danger-highest: light-dark(oklch(var(--n-L-light-7) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-7) var(--n-C-danger-muted) var(--n-env-hue-danger)));

    /* ── Background — Brightness aliases ──
       Flipped step mapping across modes → "brightest" is always brightest.
    */

    --n-color-neutral-brightest: light-dark(oklch(var(--n-L-light-1) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-7) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));
    --n-color-neutral-brighter:  light-dark(oklch(var(--n-L-light-2) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-6) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));
    --n-color-neutral-bright:    light-dark(oklch(var(--n-L-light-3) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-5) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));
    --n-color-neutral-dim:       light-dark(oklch(var(--n-L-light-5) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-3) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));
    --n-color-neutral-dimmer:    light-dark(oklch(var(--n-L-light-6) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-2) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));
    --n-color-neutral-dimmest:   light-dark(oklch(var(--n-L-light-7) var(--n-C-neutral-muted) var(--n-env-hue-neutral)), oklch(var(--n-L-dark-1) var(--n-C-neutral-muted) var(--n-env-hue-neutral)));

    --n-color-accent-brightest: light-dark(oklch(var(--n-L-light-1) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-7) var(--n-C-accent-muted) var(--n-env-hue-accent)));
    --n-color-accent-brighter:  light-dark(oklch(var(--n-L-light-2) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-6) var(--n-C-accent-muted) var(--n-env-hue-accent)));
    --n-color-accent-bright:    light-dark(oklch(var(--n-L-light-3) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-5) var(--n-C-accent-muted) var(--n-env-hue-accent)));
    --n-color-accent-dim:       light-dark(oklch(var(--n-L-light-5) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-3) var(--n-C-accent-muted) var(--n-env-hue-accent)));
    --n-color-accent-dimmer:    light-dark(oklch(var(--n-L-light-6) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-2) var(--n-C-accent-muted) var(--n-env-hue-accent)));
    --n-color-accent-dimmest:   light-dark(oklch(var(--n-L-light-7) var(--n-C-accent-muted) var(--n-env-hue-accent)), oklch(var(--n-L-dark-1) var(--n-C-accent-muted) var(--n-env-hue-accent)));

    --n-color-info-brightest: light-dark(oklch(var(--n-L-light-1) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-7) var(--n-C-info-muted) var(--n-env-hue-info)));
    --n-color-info-brighter:  light-dark(oklch(var(--n-L-light-2) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-6) var(--n-C-info-muted) var(--n-env-hue-info)));
    --n-color-info-bright:    light-dark(oklch(var(--n-L-light-3) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-5) var(--n-C-info-muted) var(--n-env-hue-info)));
    --n-color-info-dim:       light-dark(oklch(var(--n-L-light-5) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-3) var(--n-C-info-muted) var(--n-env-hue-info)));
    --n-color-info-dimmer:    light-dark(oklch(var(--n-L-light-6) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-2) var(--n-C-info-muted) var(--n-env-hue-info)));
    --n-color-info-dimmest:   light-dark(oklch(var(--n-L-light-7) var(--n-C-info-muted) var(--n-env-hue-info)), oklch(var(--n-L-dark-1) var(--n-C-info-muted) var(--n-env-hue-info)));

    --n-color-success-brightest: light-dark(oklch(var(--n-L-light-1) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-7) var(--n-C-success-muted) var(--n-env-hue-success)));
    --n-color-success-brighter:  light-dark(oklch(var(--n-L-light-2) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-6) var(--n-C-success-muted) var(--n-env-hue-success)));
    --n-color-success-bright:    light-dark(oklch(var(--n-L-light-3) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-5) var(--n-C-success-muted) var(--n-env-hue-success)));
    --n-color-success-dim:       light-dark(oklch(var(--n-L-light-5) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-3) var(--n-C-success-muted) var(--n-env-hue-success)));
    --n-color-success-dimmer:    light-dark(oklch(var(--n-L-light-6) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-2) var(--n-C-success-muted) var(--n-env-hue-success)));
    --n-color-success-dimmest:   light-dark(oklch(var(--n-L-light-7) var(--n-C-success-muted) var(--n-env-hue-success)), oklch(var(--n-L-dark-1) var(--n-C-success-muted) var(--n-env-hue-success)));

    --n-color-warning-brightest: light-dark(oklch(var(--n-L-light-1) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-7) var(--n-C-warning-muted) var(--n-env-hue-warning)));
    --n-color-warning-brighter:  light-dark(oklch(var(--n-L-light-2) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-6) var(--n-C-warning-muted) var(--n-env-hue-warning)));
    --n-color-warning-bright:    light-dark(oklch(var(--n-L-light-3) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-5) var(--n-C-warning-muted) var(--n-env-hue-warning)));
    --n-color-warning-dim:       light-dark(oklch(var(--n-L-light-5) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-3) var(--n-C-warning-muted) var(--n-env-hue-warning)));
    --n-color-warning-dimmer:    light-dark(oklch(var(--n-L-light-6) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-2) var(--n-C-warning-muted) var(--n-env-hue-warning)));
    --n-color-warning-dimmest:   light-dark(oklch(var(--n-L-light-7) var(--n-C-warning-muted) var(--n-env-hue-warning)), oklch(var(--n-L-dark-1) var(--n-C-warning-muted) var(--n-env-hue-warning)));

    --n-color-danger-brightest: light-dark(oklch(var(--n-L-light-1) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-7) var(--n-C-danger-muted) var(--n-env-hue-danger)));
    --n-color-danger-brighter:  light-dark(oklch(var(--n-L-light-2) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-6) var(--n-C-danger-muted) var(--n-env-hue-danger)));
    --n-color-danger-bright:    light-dark(oklch(var(--n-L-light-3) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-5) var(--n-C-danger-muted) var(--n-env-hue-danger)));
    --n-color-danger-dim:       light-dark(oklch(var(--n-L-light-5) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-3) var(--n-C-danger-muted) var(--n-env-hue-danger)));
    --n-color-danger-dimmer:    light-dark(oklch(var(--n-L-light-6) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-2) var(--n-C-danger-muted) var(--n-env-hue-danger)));
    --n-color-danger-dimmest:   light-dark(oklch(var(--n-L-light-7) var(--n-C-danger-muted) var(--n-env-hue-danger)), oklch(var(--n-L-dark-1) var(--n-C-danger-muted) var(--n-env-hue-danger)));

  }
}

/* ================================================================
   nonoun-css Semantic Color Tokens

   Maps color primitives to UI roles:
     Grounds      — backgrounds by elevation (doc → body → panel → control → card → modal)
     Ink          — text/icons on grounds
     Stroke       — borders/dividers on grounds (muted scrims)
     Surface      — interactive element fills (buttons, badges)
     Surface Ink  — text/icons on surfaces
     Outline      — borders on surfaces (higher contrast scrims)
   ================================================================ */

@layer tokens {
  :root {
    /* ── Neutral ── */

    /* Grounds */
    --n-doc-neutral: var(--n-color-neutral-dimmer);
    --n-doc-hover-neutral: var(--n-color-neutral-lower);
    --n-doc-active-neutral: var(--n-color-neutral-low);
    --n-doc-disabled-neutral: var(--n-color-neutral-base);

    --n-body-neutral: var(--n-color-neutral-low);
    --n-body-hover-neutral: var(--n-color-neutral-bright);
    --n-body-active-neutral: var(--n-color-neutral-brighter);
    --n-body-disabled-neutral: var(--n-color-neutral-base);

    --n-panel-neutral: var(--n-color-neutral-base);
    --n-panel-hover-neutral: var(--n-color-neutral-brighter);
    --n-panel-active-neutral: var(--n-color-neutral-bright);
    --n-panel-disabled-neutral: var(--n-color-neutral-low);

    --n-control-neutral: var(--n-color-neutral-scrim-weakest);
    --n-control-hover-neutral: var(--n-color-neutral-scrim-weaker);
    --n-control-active-neutral: var(--n-color-neutral-scrim-weak);
    --n-control-disabled-neutral: var(--n-color-neutral-scrim-weakest);

    --n-button-neutral: var(--n-color-neutral-scrim-weakest);
    --n-button-hover-neutral: var(--n-color-neutral-scrim-weaker);
    --n-button-active-neutral: var(--n-color-neutral-scrim-weak);
    --n-button-disabled-neutral: var(--n-color-neutral-scrim-weakest);

    --n-popover-neutral: var(--n-color-neutral-brightest);
    --n-popover-hover-neutral: var(--n-color-neutral-brightest);
    --n-popover-active-neutral: var(--n-color-neutral-brightest);
    --n-popover-disabled-neutral: var(--n-color-neutral-base);

    --n-card-neutral: var(--n-color-neutral-higher);
    --n-card-hover-neutral: var(--n-color-neutral-brightest);
    --n-card-active-neutral: var(--n-color-neutral-brighter);
    --n-card-disabled-neutral: var(--n-color-neutral-base);

    --n-modal-neutral: var(--n-color-neutral-brightest);
    --n-modal-hover-neutral: var(--n-color-neutral-brightest);
    --n-modal-active-neutral: var(--n-color-neutral-brightest);
    --n-modal-disabled-neutral: var(--n-color-neutral-base);

    /* Ink */
    --n-ink-neutral: var(--n-color-neutral-800);
    --n-ink-strong-neutral: var(--n-color-neutral-950);
    --n-ink-inverse-neutral: var(--n-color-neutral-11);
    --n-ink-muted-neutral: var(--n-color-neutral-600);
    --n-ink-placeholder-neutral: var(--n-color-neutral-400);
    --n-ink-hover-neutral: var(--n-color-neutral-950);
    --n-ink-active-neutral: var(--n-color-neutral-500);
    --n-ink-disabled-neutral: var(--n-color-neutral-400);

    /* Border */
    --n-border-neutral: var(--n-color-neutral-200-scrim);
    --n-border-muted-neutral: var(--n-color-neutral-100-scrim);
    --n-border-hover-neutral: var(--n-color-neutral-300-scrim);
    --n-border-active-neutral: var(--n-color-neutral-400-scrim);
    --n-border-disabled-neutral: var(--n-color-neutral-200-scrim);

    /* Surface */
    --n-surface-neutral: var(--n-color-neutral-500);
    --n-surface-hover-neutral: var(--n-color-neutral-400);
    --n-surface-active-neutral: var(--n-color-neutral-600);
    --n-surface-disabled-neutral: var(--n-color-neutral-200);

    /* Surface Ink */
    --n-surface-ink-neutral: white;
    --n-surface-ink-hover-neutral: white;
    --n-surface-ink-active-neutral: var(--n-color-neutral-950);
    --n-surface-ink-disabled-neutral: oklch(1 0 0 / 0.5);

    /* ── Accent ── */

    /* Grounds */
    --n-doc-accent: var(--n-color-accent-lowest);
    --n-doc-hover-accent: var(--n-color-accent-lower);
    --n-doc-active-accent: var(--n-color-accent-low);
    --n-doc-disabled-accent: var(--n-color-accent-base);

    --n-body-accent: var(--n-color-accent-low);
    --n-body-hover-accent: var(--n-color-accent-bright);
    --n-body-active-accent: var(--n-color-accent-brighter);
    --n-body-disabled-accent: var(--n-color-accent-base);

    --n-panel-accent: var(--n-color-accent-bright);
    --n-panel-hover-accent: var(--n-color-accent-brighter);
    --n-panel-active-accent: var(--n-color-accent-brightest);
    --n-panel-disabled-accent: var(--n-color-accent-base);

    --n-control-accent: var(--n-color-accent-scrim-weakest);
    --n-control-hover-accent: var(--n-color-accent-scrim-weaker);
    --n-control-active-accent: var(--n-color-accent-scrim-weak);
    --n-control-disabled-accent: var(--n-color-accent-scrim-weakest);

    --n-button-accent: var(--n-color-accent-scrim-weakest);
    --n-button-hover-accent: var(--n-color-accent-scrim-weaker);
    --n-button-active-accent: var(--n-color-accent-scrim-weak);
    --n-button-disabled-accent: var(--n-color-accent-scrim-weakest);

    --n-popover-accent: var(--n-color-accent-brightest);
    --n-popover-hover-accent: var(--n-color-accent-brightest);
    --n-popover-active-accent: var(--n-color-accent-brightest);
    --n-popover-disabled-accent: var(--n-color-accent-base);

    --n-card-accent: var(--n-color-accent-brighter);
    --n-card-hover-accent: var(--n-color-accent-brightest);
    --n-card-active-accent: var(--n-color-accent-brightest);
    --n-card-disabled-accent: var(--n-color-accent-base);

    --n-modal-accent: var(--n-color-accent-brightest);
    --n-modal-hover-accent: var(--n-color-accent-brightest);
    --n-modal-active-accent: var(--n-color-accent-brightest);
    --n-modal-disabled-accent: var(--n-color-accent-base);

    /* Ink */
    --n-ink-accent: var(--n-color-accent-800);
    --n-ink-strong-accent: var(--n-color-accent-950);
    --n-ink-inverse-accent: var(--n-color-accent-11);
    --n-ink-muted-accent: var(--n-color-accent-600);
    --n-ink-placeholder-accent: var(--n-color-accent-400);
    --n-ink-hover-accent: var(--n-color-accent-950);
    --n-ink-active-accent: var(--n-color-accent-500);
    --n-ink-disabled-accent: var(--n-color-accent-400);

    /* Border */
    --n-border-accent: var(--n-color-accent-200-scrim);
    --n-border-muted-accent: var(--n-color-accent-100-scrim);
    --n-border-hover-accent: var(--n-color-accent-300-scrim);
    --n-border-active-accent: var(--n-color-accent-400-scrim);
    --n-border-disabled-accent: var(--n-color-accent-200-scrim);

    /* Surface */
    --n-surface-accent: var(--n-color-accent-500);
    --n-surface-hover-accent: var(--n-color-accent-400);
    --n-surface-active-accent: var(--n-color-accent-600);
    --n-surface-disabled-accent: var(--n-color-accent-200);

    /* Surface Ink */
    --n-surface-ink-accent: white;
    --n-surface-ink-hover-accent: white;
    --n-surface-ink-active-accent: var(--n-color-accent-950);
    --n-surface-ink-disabled-accent: oklch(1 0 0 / 0.5);

    /* ── Info ── */

    /* Grounds */
    --n-doc-info: var(--n-color-info-lowest);
    --n-doc-hover-info: var(--n-color-info-lower);
    --n-doc-active-info: var(--n-color-info-low);
    --n-doc-disabled-info: var(--n-color-info-base);

    --n-body-info: var(--n-color-info-low);
    --n-body-hover-info: var(--n-color-info-bright);
    --n-body-active-info: var(--n-color-info-brighter);
    --n-body-disabled-info: var(--n-color-info-base);

    --n-panel-info: var(--n-color-info-bright);
    --n-panel-hover-info: var(--n-color-info-brighter);
    --n-panel-active-info: var(--n-color-info-brightest);
    --n-panel-disabled-info: var(--n-color-info-base);

    --n-control-info: var(--n-color-info-scrim-weakest);
    --n-control-hover-info: var(--n-color-info-scrim-weaker);
    --n-control-active-info: var(--n-color-info-scrim-weak);
    --n-control-disabled-info: var(--n-color-info-scrim-weakest);

    --n-button-info: var(--n-color-info-scrim-weakest);
    --n-button-hover-info: var(--n-color-info-scrim-weaker);
    --n-button-active-info: var(--n-color-info-scrim-weak);
    --n-button-disabled-info: var(--n-color-info-scrim-weakest);

    --n-popover-info: var(--n-color-info-brightest);
    --n-popover-hover-info: var(--n-color-info-brightest);
    --n-popover-active-info: var(--n-color-info-brightest);
    --n-popover-disabled-info: var(--n-color-info-base);

    --n-card-info: var(--n-color-info-brighter);
    --n-card-hover-info: var(--n-color-info-brightest);
    --n-card-active-info: var(--n-color-info-brightest);
    --n-card-disabled-info: var(--n-color-info-base);

    --n-modal-info: var(--n-color-info-brightest);
    --n-modal-hover-info: var(--n-color-info-brightest);
    --n-modal-active-info: var(--n-color-info-brightest);
    --n-modal-disabled-info: var(--n-color-info-base);

    /* Ink */
    --n-ink-info: var(--n-color-info-800);
    --n-ink-strong-info: var(--n-color-info-950);
    --n-ink-inverse-info: var(--n-color-info-11);
    --n-ink-muted-info: var(--n-color-info-600);
    --n-ink-placeholder-info: var(--n-color-info-400);
    --n-ink-hover-info: var(--n-color-info-950);
    --n-ink-active-info: var(--n-color-info-500);
    --n-ink-disabled-info: var(--n-color-info-400);

    /* Border */
    --n-border-info: var(--n-color-info-200-scrim);
    --n-border-muted-info: var(--n-color-info-100-scrim);
    --n-border-hover-info: var(--n-color-info-300-scrim);
    --n-border-active-info: var(--n-color-info-400-scrim);
    --n-border-disabled-info: var(--n-color-info-200-scrim);

    /* Surface */
    --n-surface-info: var(--n-color-info-500);
    --n-surface-hover-info: var(--n-color-info-400);
    --n-surface-active-info: var(--n-color-info-600);
    --n-surface-disabled-info: var(--n-color-info-200);

    /* Surface Ink */
    --n-surface-ink-info: white;
    --n-surface-ink-hover-info: white;
    --n-surface-ink-active-info: var(--n-color-info-950);
    --n-surface-ink-disabled-info: oklch(1 0 0 / 0.5);

    /* ── Success ── */

    /* Grounds */
    --n-doc-success: var(--n-color-success-lowest);
    --n-doc-hover-success: var(--n-color-success-lower);
    --n-doc-active-success: var(--n-color-success-low);
    --n-doc-disabled-success: var(--n-color-success-base);

    --n-body-success: var(--n-color-success-low);
    --n-body-hover-success: var(--n-color-success-bright);
    --n-body-active-success: var(--n-color-success-brighter);
    --n-body-disabled-success: var(--n-color-success-base);

    --n-panel-success: var(--n-color-success-bright);
    --n-panel-hover-success: var(--n-color-success-brighter);
    --n-panel-active-success: var(--n-color-success-brightest);
    --n-panel-disabled-success: var(--n-color-success-base);

    --n-control-success: var(--n-color-success-scrim-weakest);
    --n-control-hover-success: var(--n-color-success-scrim-weaker);
    --n-control-active-success: var(--n-color-success-scrim-weak);
    --n-control-disabled-success: var(--n-color-success-scrim-weakest);

    --n-button-success: var(--n-color-success-scrim-weakest);
    --n-button-hover-success: var(--n-color-success-scrim-weaker);
    --n-button-active-success: var(--n-color-success-scrim-weak);
    --n-button-disabled-success: var(--n-color-success-scrim-weakest);

    --n-popover-success: var(--n-color-success-brightest);
    --n-popover-hover-success: var(--n-color-success-brightest);
    --n-popover-active-success: var(--n-color-success-brightest);
    --n-popover-disabled-success: var(--n-color-success-base);

    --n-card-success: var(--n-color-success-brighter);
    --n-card-hover-success: var(--n-color-success-brightest);
    --n-card-active-success: var(--n-color-success-brightest);
    --n-card-disabled-success: var(--n-color-success-base);

    --n-modal-success: var(--n-color-success-brightest);
    --n-modal-hover-success: var(--n-color-success-brightest);
    --n-modal-active-success: var(--n-color-success-brightest);
    --n-modal-disabled-success: var(--n-color-success-base);

    /* Ink */
    --n-ink-success: var(--n-color-success-800);
    --n-ink-strong-success: var(--n-color-success-950);
    --n-ink-inverse-success: var(--n-color-success-11);
    --n-ink-muted-success: var(--n-color-success-600);
    --n-ink-placeholder-success: var(--n-color-success-400);
    --n-ink-hover-success: var(--n-color-success-950);
    --n-ink-active-success: var(--n-color-success-500);
    --n-ink-disabled-success: var(--n-color-success-400);

    /* Border */
    --n-border-success: var(--n-color-success-200-scrim);
    --n-border-muted-success: var(--n-color-success-100-scrim);
    --n-border-hover-success: var(--n-color-success-300-scrim);
    --n-border-active-success: var(--n-color-success-400-scrim);
    --n-border-disabled-success: var(--n-color-success-200-scrim);

    /* Surface */
    --n-surface-success: var(--n-color-success-500);
    --n-surface-hover-success: var(--n-color-success-400);
    --n-surface-active-success: var(--n-color-success-600);
    --n-surface-disabled-success: var(--n-color-success-200);

    /* Surface Ink */
    --n-surface-ink-success: white;
    --n-surface-ink-hover-success: white;
    --n-surface-ink-active-success: var(--n-color-success-950);
    --n-surface-ink-disabled-success: oklch(1 0 0 / 0.5);

    /* ── Warning ── */

    /* Grounds */
    --n-doc-warning: var(--n-color-warning-lowest);
    --n-doc-hover-warning: var(--n-color-warning-lower);
    --n-doc-active-warning: var(--n-color-warning-low);
    --n-doc-disabled-warning: var(--n-color-warning-base);

    --n-body-warning: var(--n-color-warning-low);
    --n-body-hover-warning: var(--n-color-warning-bright);
    --n-body-active-warning: var(--n-color-warning-brighter);
    --n-body-disabled-warning: var(--n-color-warning-base);

    --n-panel-warning: var(--n-color-warning-bright);
    --n-panel-hover-warning: var(--n-color-warning-brighter);
    --n-panel-active-warning: var(--n-color-warning-brightest);
    --n-panel-disabled-warning: var(--n-color-warning-base);

    --n-control-warning: var(--n-color-warning-scrim-weakest);
    --n-control-hover-warning: var(--n-color-warning-scrim-weaker);
    --n-control-active-warning: var(--n-color-warning-scrim-weak);
    --n-control-disabled-warning: var(--n-color-warning-scrim-weakest);

    --n-button-warning: var(--n-color-warning-scrim-weakest);
    --n-button-hover-warning: var(--n-color-warning-scrim-weaker);
    --n-button-active-warning: var(--n-color-warning-scrim-weak);
    --n-button-disabled-warning: var(--n-color-warning-scrim-weakest);

    --n-popover-warning: var(--n-color-warning-brightest);
    --n-popover-hover-warning: var(--n-color-warning-brightest);
    --n-popover-active-warning: var(--n-color-warning-brightest);
    --n-popover-disabled-warning: var(--n-color-warning-base);

    --n-card-warning: var(--n-color-warning-brighter);
    --n-card-hover-warning: var(--n-color-warning-brightest);
    --n-card-active-warning: var(--n-color-warning-brightest);
    --n-card-disabled-warning: var(--n-color-warning-base);

    --n-modal-warning: var(--n-color-warning-brightest);
    --n-modal-hover-warning: var(--n-color-warning-brightest);
    --n-modal-active-warning: var(--n-color-warning-brightest);
    --n-modal-disabled-warning: var(--n-color-warning-base);

    /* Ink */
    --n-ink-warning: var(--n-color-warning-800);
    --n-ink-strong-warning: var(--n-color-warning-950);
    --n-ink-inverse-warning: var(--n-color-warning-11);
    --n-ink-muted-warning: var(--n-color-warning-600);
    --n-ink-placeholder-warning: var(--n-color-warning-400);
    --n-ink-hover-warning: var(--n-color-warning-950);
    --n-ink-active-warning: var(--n-color-warning-500);
    --n-ink-disabled-warning: var(--n-color-warning-400);

    /* Border */
    --n-border-warning: var(--n-color-warning-200-scrim);
    --n-border-muted-warning: var(--n-color-warning-100-scrim);
    --n-border-hover-warning: var(--n-color-warning-300-scrim);
    --n-border-active-warning: var(--n-color-warning-400-scrim);
    --n-border-disabled-warning: var(--n-color-warning-200-scrim);

    /* Surface */
    --n-surface-warning: var(--n-color-warning-500);
    --n-surface-hover-warning: var(--n-color-warning-400);
    --n-surface-active-warning: var(--n-color-warning-600);
    --n-surface-disabled-warning: var(--n-color-warning-200);

    /* Surface Ink */
    --n-surface-ink-warning: white;
    --n-surface-ink-hover-warning: white;
    --n-surface-ink-active-warning: var(--n-color-warning-950);
    --n-surface-ink-disabled-warning: oklch(1 0 0 / 0.5);

    /* ── Danger ── */

    /* Grounds */
    --n-doc-danger: var(--n-color-danger-lowest);
    --n-doc-hover-danger: var(--n-color-danger-lower);
    --n-doc-active-danger: var(--n-color-danger-low);
    --n-doc-disabled-danger: var(--n-color-danger-base);

    --n-body-danger: var(--n-color-danger-low);
    --n-body-hover-danger: var(--n-color-danger-bright);
    --n-body-active-danger: var(--n-color-danger-brighter);
    --n-body-disabled-danger: var(--n-color-danger-base);

    --n-panel-danger: var(--n-color-danger-bright);
    --n-panel-hover-danger: var(--n-color-danger-brighter);
    --n-panel-active-danger: var(--n-color-danger-brightest);
    --n-panel-disabled-danger: var(--n-color-danger-base);

    --n-control-danger: var(--n-color-danger-scrim-weakest);
    --n-control-hover-danger: var(--n-color-danger-scrim-weaker);
    --n-control-active-danger: var(--n-color-danger-scrim-weak);
    --n-control-disabled-danger: var(--n-color-danger-scrim-weakest);

    --n-button-danger: var(--n-color-danger-scrim-weakest);
    --n-button-hover-danger: var(--n-color-danger-scrim-weaker);
    --n-button-active-danger: var(--n-color-danger-scrim-weak);
    --n-button-disabled-danger: var(--n-color-danger-scrim-weakest);

    --n-popover-danger: var(--n-color-danger-brightest);
    --n-popover-hover-danger: var(--n-color-danger-brightest);
    --n-popover-active-danger: var(--n-color-danger-brightest);
    --n-popover-disabled-danger: var(--n-color-danger-base);

    --n-card-danger: var(--n-color-danger-brighter);
    --n-card-hover-danger: var(--n-color-danger-brightest);
    --n-card-active-danger: var(--n-color-danger-brightest);
    --n-card-disabled-danger: var(--n-color-danger-base);

    --n-modal-danger: var(--n-color-danger-brightest);
    --n-modal-hover-danger: var(--n-color-danger-brightest);
    --n-modal-active-danger: var(--n-color-danger-brightest);
    --n-modal-disabled-danger: var(--n-color-danger-base);

    /* Ink */
    --n-ink-danger: var(--n-color-danger-800);
    --n-ink-strong-danger: var(--n-color-danger-950);
    --n-ink-inverse-danger: var(--n-color-danger-11);
    --n-ink-muted-danger: var(--n-color-danger-600);
    --n-ink-placeholder-danger: var(--n-color-danger-400);
    --n-ink-hover-danger: var(--n-color-danger-950);
    --n-ink-active-danger: var(--n-color-danger-500);
    --n-ink-disabled-danger: var(--n-color-danger-400);

    /* Border */
    --n-border-danger: var(--n-color-danger-200-scrim);
    --n-border-muted-danger: var(--n-color-danger-100-scrim);
    --n-border-hover-danger: var(--n-color-danger-300-scrim);
    --n-border-active-danger: var(--n-color-danger-400-scrim);
    --n-border-disabled-danger: var(--n-color-danger-200-scrim);

    /* Surface */
    --n-surface-danger: var(--n-color-danger-500);
    --n-surface-hover-danger: var(--n-color-danger-400);
    --n-surface-active-danger: var(--n-color-danger-600);
    --n-surface-disabled-danger: var(--n-color-danger-200);

    /* Surface Ink */
    --n-surface-ink-danger: white;
    --n-surface-ink-hover-danger: white;
    --n-surface-ink-active-danger: var(--n-color-danger-950);
    --n-surface-ink-disabled-danger: oklch(1 0 0 / 0.5);
  }
}

/* ================================================================
   nonoun-css Theme Presets

   Override family params and env params per theme.
   Apply via attribute: <html theme="forest">
   Uses :where() for zero specificity — easy to override.

   Requires colors.css to be loaded first.
   ================================================================ */

:where([theme="forest"]) {
  --n-env-hue-neutral: 155;
  --n-env-chroma-neutral: 0.25;
  --n-env-hue-accent: 155;
  --n-env-chroma-accent: 1.0;
}

:where([theme="rose"]) {
  --n-env-hue-neutral: 350;
  --n-env-chroma-neutral: 0.35;
  --n-env-hue-accent: 350;
  --n-env-chroma-accent: 1.0;
}

:where([theme="zinc"]) {
  --n-env-hue-neutral: 240;
  --n-env-chroma-neutral: 0.15;
  --n-env-hue-accent: 240;
  --n-env-chroma-accent: 1.0;
  --n-env-chroma: 0.18;
}

/* ================================================================
   nonoun-css Base Reset & Document Defaults

   Universal reset uses real specificity to override UA defaults.
   Document defaults use :where() for zero specificity so consumers
   can override font-family, background, etc. without fighting.
   ================================================================ */

@layer ui {

  /* ── Universal Reset ── */

  *,
  *::before,
  *::after {
    box-sizing: border-box;
  }

  :where(body) {
    font-family: var(--n-font-family);
    margin: 0;
  }

  /* WHY: UA [hidden]{display:none} loses to author-layer :where() display values.
     Real specificity (0,1,0) ensures [hidden] always wins over :where() components. */
  [hidden] {
    display: none;
  }

  /* ── Control Text Selection ── */
  /* WHY: Interactive and display components should not have selectable text.
     Real specificity (0,0,1+) ensures this beats :where() component defaults.
     Opt in with [user-selectable] on any element that needs text selection. */

  :where(
    n-button, n-select, n-combobox, n-command,
    n-checkbox, n-radio, n-switch, n-range,
    n-segmented-control, n-tabs, n-tab,
    n-listbox, n-option, n-option-group, n-option-group-header,
    n-badge, n-kbd, n-avatar,
    n-breadcrumb, n-pagination, n-pagination-dots,
    n-accordion, n-calendar, n-tree,
    n-icon, n-tooltip,
    n-field, n-input-otp,
    n-sidebar-nav, n-sidebar-nav-item, n-sidebar-item, n-sidebar-group-header,
    n-header, n-footer, n-toolbar,
    n-container > n-header, n-container > n-footer
  ) {
    user-select: none;
  }

  [user-selectable] {
    user-select: text;
  }

  /* ── Document Defaults ── */

  :where(native-dashboard-spa),
  :where(native-app) {
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-rendering: optimizeLegibility;

    font-family: var(--n-font-family);
    line-height: var(--n-text-line-height);
    background: var(--n-doc-neutral);
    color: var(--n-ink-neutral);
    min-height: 100dvh;
  }

  /* ── Container Headings ── */
  /* WHY: Reset h1–h3 inside containers so page-level heading styles
     (large sizes, margins, text-transform) don't bleed in.
     Uses the container's --n-font-* scale for sizing. */

  :where(n-container) :where(h1, h2, h3) {
    margin: 0;
    font-weight: var(--n-button-font-weight);
    line-height: var(--n-control-line-height-relaxed);
    letter-spacing: 0;
    text-transform: none;
    color: var(--n-ink-strong);
  }

  :where(n-container) :where(h1) { font-size: var(--n-font-xl); }
  :where(n-container) :where(h2) { font-size: var(--n-font-lg); }
  :where(n-container) :where(h3) { font-size: var(--n-font-md); }

  /* ── Reduced Motion ── */

  @media (prefers-reduced-motion: reduce) {
    :root {
      --n-duration: 0s;
    }
  }
}

/* ══════════════════════════════════════════════════════════════════
   Layout Utilities — n-stack, n-inset, n-grid
   CSS-only layout containers. No custom element registration.
   ══════════════════════════════════════════════════════════════════ */

@layer ui {

  /* ── Stack ── */

  :where(n-stack) {
    --n-padding-block: 0;
    --n-padding-inline: 0;

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    min-height: inherit;
    flex-direction: column;
    gap: calc(var(--n-space) * var(--n-space-k));
    padding-block: var(--n-padding-block);
    padding-inline: var(--n-padding-inline);
  }

  /* ── Adaptive Grid ── */
  /* WHY: When <nav> and/or <aside> children are present, n-stack
     auto-switches from flex to grid with leading/label/trailing columns. */

  /* Both leading + trailing → three columns */
  :where(n-stack):has(> nav):has(> aside) {
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
  }

  /* Leading only → two columns */
  :where(n-stack):has(> nav):not(:has(> aside)) {
    display: grid;
    grid-template-columns: auto 1fr;
    align-items: center;
  }

  /* Trailing only → two columns */
  :where(n-stack):not(:has(> nav)):has(> aside) {
    display: grid;
    grid-template-columns: 1fr auto;
    align-items: center;
  }

  /* Nav (leading) — flex row for grouped icons/buttons */
  :where(n-stack) > :where(nav) {
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    min-width: 0;
  }

  /* Aside (trailing) — flex row, pushed to end */
  :where(n-stack) > :where(aside) {
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    min-width: 0;
    overflow: hidden;
  }

}

/* ── Attribute API (unlayered) ── */

/* Direction */
:where(n-stack)[direction="row"] { flex-direction: row; }
:where(n-stack)[direction="column-reverse"] { flex-direction: column-reverse; }
:where(n-stack)[direction="row-reverse"] { flex-direction: row-reverse; }

/* Wrap */
:where(n-stack)[wrap] { flex-wrap: wrap; }

/* Sticky */
:where(n-stack)[sticky="top"] {
  position: sticky;
  top: 0;
  z-index: 1;
  background: inherit;
}

:where(n-stack)[sticky="bottom"] {
  position: sticky;
  bottom: 0;
  z-index: 1;
  background: inherit;
}

/* Truncate */
[truncate]:where(n-stack) > :where(:not(nav):not(aside)) {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}

/* Dividers */
:where(n-stack)[dividers] > :where(:not(:first-child)) {
  border-block-start: 1px solid var(--n-border-muted);
}

@layer ui {

  /* ── Grid ── */

  :where(n-grid) {
    --n-padding-block: 0;
    --n-padding-inline: 0;

    display: grid;
    flex: 1 1 0%;
    min-width: 0;
    min-height: 0;
    grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
    gap: calc(var(--n-space) * 2);
    padding-block: var(--n-padding-block);
    padding-inline: var(--n-padding-inline);
  }

}

/* ── Attribute API (unlayered) ── */

/* Fixed columns */
:where(n-grid)[cols="1"] { grid-template-columns: 1fr; }
:where(n-grid)[cols="2"] { grid-template-columns: repeat(2, 1fr); }
:where(n-grid)[cols="3"] { grid-template-columns: repeat(3, 1fr); }
:where(n-grid)[cols="4"] { grid-template-columns: repeat(4, 1fr); }
:where(n-grid)[cols="5"] { grid-template-columns: repeat(5, 1fr); }
:where(n-grid)[cols="6"] { grid-template-columns: repeat(6, 1fr); }

/* Min column width (auto-fill) */
:where(n-grid)[min="8rem"] { grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); }
:where(n-grid)[min="10rem"] { grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr)); }
:where(n-grid)[min="12rem"] { grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr)); }
:where(n-grid)[min="14rem"] { grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); }
:where(n-grid)[min="16rem"] { grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); }
:where(n-grid)[min="20rem"] { grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); }
:where(n-grid)[min="24rem"] { grid-template-columns: repeat(auto-fill, minmax(24rem, 1fr)); }

@layer ui {

  /* ── Inset ── */

  :where(n-inset) {
    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    flex-direction: column;
    gap: calc(var(--n-space) * 2);
    padding-inline-start: calc(var(--n-space-k) * var(--n-space));
  }

}


/* ══════════════════════════════════════════════════════════════════
   Containers — sub-containers + container component CSS.
   <n-header>, <n-footer>, <n-aside> are defined inline.
   Container components are @imported from src/containers/.
   ══════════════════════════════════════════════════════════════════ */

/* Container components */
@layer ui {

  /* ══════════════════════════════════════════════════════════════════
     <n-container> — Unified surface container (card + panel)
     Default = card elevation, density-scaled padding + gap
     [data-kind="panel"] = panel elevation
     ══════════════════════════════════════════════════════════════════ */

  :where(n-container):not(:defined) { visibility: hidden; }

  /* ── Base (card mode) ── */

  :where(n-container) {
    --n-ground: var(--n-card);
    --n-ground-hover: var(--n-card-hover);

    /* Default size context — children inherit md */
    --n-size: var(--n-size-md);
    --n-font-size: var(--n-font-md);
    --n-letter-spacing: var(--n-tracking-md);
    --n-space: var(--n-space-md);
    --n-icon-size: var(--n-icon-md);
    --n-widget-size: var(--n-widget-md);
    --n-widget-font: var(--n-widget-font-md);

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    flex-direction: column;
    /* WHY: Container uses symmetric padding (all sides = inline).
       Uses --n-pad-inline directly — must NOT redefine --n-pad-block/gap
       because those cascade to child components (buttons, inputs). */
    gap: var(--n-pad-inline);
    padding-block: var(--n-pad-inline);
    padding-inline: var(--n-pad-inline);
    background: var(--n-ground);
    border-radius: var(--n-radius);

    font-size: var(--n-font-size);
    line-height: var(--n-line-height);

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      box-shadow var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Panel mode ── */

  :where(n-container[data-kind="panel"]) {
    --n-ground: var(--n-panel);
    overflow: visible;
    scrollbar-width: none;
  }

  /* ── Media slot ── */

  :where(n-container) > :where([slot="media"]) {
    display: block;
    width: 100%;
    object-fit: cover;
  }

  /* ── Sub-container integration ── */
  /* WHY: Sub-container elements (<n-header>, <n-body>, <n-footer>) work as
     direct children of n-container. Structured mode activates when <n-header>
     or <n-footer> is present — overflow delegates to <n-body>. */

  :where(n-container):has(> n-header, > n-footer) {
    overflow: hidden;
    padding: 0;
    min-height: 0;
  }

  :where(n-container):has(> n-header, > n-footer) > :where(n-body) {
    flex: 1 1 0%;
    min-height: 0;
    overflow-y: auto;
    scrollbar-width: none;
  }

  /* ── Container n-header grid columns — nav (leading) + aside (trailing) ──
     WHY: Containers use <nav>/<aside> children for leading/trailing slots
     instead of the generic n-header [slot="leading"]/[slot="trailing"]. */

  :where(n-container) > :where(n-header):has(> nav):has(> aside) {
    grid-template-columns: auto 1fr minmax(0, auto);
  }
  :where(n-container) > :where(n-header):has(> nav):not(:has(> aside)) {
    grid-template-columns: auto 1fr;
  }
  :where(n-container) > :where(n-header):not(:has(> nav)):has(> aside) {
    grid-template-columns: 1fr minmax(0, auto);
  }
  :where(n-container) > :where(n-header) > :where(nav) {
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
  }
  :where(n-container) > :where(n-header) > :where(aside) {
    grid-column: -1;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    min-width: 0;
    overflow: hidden;
  }

  /* Panel-mode section defaults */
  :where(n-container[data-kind="panel"]) > :where(n-body) {
    display: flex;
    flex-direction: column;
    gap: var(--n-pad-inline);
    padding-block: var(--n-pad-inline);
    padding-inline: var(--n-pad-inline);
    box-sizing: border-box;
  }

}

/* ══════════════════════════════════════════════════════════════════
   Attribute API (unlayered)
   Selectors at (0,1,0) — beat layered component defaults.
   ══════════════════════════════════════════════════════════════════ */

:where(n-container)[inline] {
  flex: 0 0 auto;
}

:where(n-container)[dividers] > :where(:not(:first-child)) {
  border-block-start: 1px solid var(--n-border-muted);
}

:where(n-container)[interactive] {
  cursor: pointer;
}

:where(n-container)[interactive]:hover,
:where(n-container)[interactive][force-hover] {
  background: var(--n-ground-hover);
  border-color: var(--n-border-hover);
}

:where(n-container)[interactive]:focus-visible,
:where(n-container)[interactive][force-focus-visible] {
  outline: 2px solid var(--n-focus-ring);
  outline-offset: 2px;
}

:where(n-container)[bordered] {
  border: 1px solid var(--n-border-muted);
}

:where(n-container[data-kind="panel"])[show-scrollbar] {
  scrollbar-width: thin;
}

[padding="0"]:where(n-container),
[padding="none"]:where(n-container) {
  padding: 0;
}

[scrollable]:where(n-container[data-kind="panel"]) {
  overflow-y: auto;
}

[fade]:where(n-container[data-kind="panel"]) {
  --n-fade-top: calc((var(--n-size) + var(--n-space) * var(--n-space-k)) * 1.25);
  --n-fade-bottom: calc((var(--n-size) + var(--n-space) * var(--n-space-k)) * 1.25);
}

/* Fade masks — header/footer present → mask the section */
[fade]:where(n-container[data-kind="panel"]):has(> n-header) > :where(n-body) {
  mask-image: linear-gradient(
    to bottom,
    transparent 0,
    black var(--n-fade-top),
    black 100%
  );
}

[fade]:where(n-container[data-kind="panel"]):has(> n-footer) > :where(n-body) {
  mask-image: linear-gradient(
    to bottom,
    black 0,
    black calc(100% - var(--n-fade-bottom)),
    transparent 100%
  );
}

[fade]:where(n-container[data-kind="panel"]):has(> n-header):has(> n-footer) > :where(n-body) {
  mask-image: linear-gradient(
    to bottom,
    transparent 0,
    black var(--n-fade-top),
    black calc(100% - var(--n-fade-bottom)),
    transparent 100%
  );
}

@layer ui {

  /* ── Body ── */
  /* Generic content region. Fills remaining flex space.
     Does NOT declare overflow by default — scrolling is
     inherited from the parent height constraint. */

  :where(n-body) {
    --n-background: var(--n-panel);
    --n-font-family: inherit;

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    min-height: calc(var(--n-size) + var(--n-pad-inline) * 2);
    flex-direction: column;
    /* WHY: Body uses symmetric padding (same as container).
       Uses --n-pad-inline directly — must NOT redefine --n-pad-block/gap. */
    gap: var(--n-pad-inline);
    padding-block: var(--n-pad-inline);
    padding-inline: var(--n-pad-inline);
    background: var(--n-background);

    font-family: var(--n-font-family);
    font-size: var(--n-font-size);
    line-height: var(--n-line-height);
    box-sizing: border-box;
  }

}

/* ── Attribute API (unlayered) ── */

:where(n-body)[show-scrollbar],
:where(n-body)[scrollbar="thin"] {
  scrollbar-width: thin;
}

:where(n-body)[scrollbar="none"] {
  scrollbar-width: none;
}

:where(n-body)[overflow="hidden"] {
  overflow: hidden;
}

:where(n-body)[overflow="auto"] {
  overflow: auto;
}

:where(n-body)[overflow="scroll"] {
  overflow: scroll;
}

:where(n-body)[relative] {
  position: relative;
}

[padding="0"]:where(n-body),
[padding="none"]:where(n-body) {
  padding: 0;
}

@layer ui {

  :where(n-divider) {
    display: flex;
    flex: none;
    min-width: 0;
    align-items: center;
    gap: calc(var(--n-space) * var(--n-space-k));
    border: 0;
    color: var(--n-ink-muted);
    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
  }

  /* Horizontal with text content */
  :where(n-divider):not([orientation="vertical"]) {
    flex-direction: row;
  }

  :where(n-divider):not([orientation="vertical"]):empty {
    border-block-start: 1px solid var(--n-border-muted);
  }

  :where(n-divider):not([orientation="vertical"]):not(:empty)::before,
  :where(n-divider):not([orientation="vertical"]):not(:empty)::after {
    content: '';
    flex: 1;
    border-block-start: 1px solid var(--n-border-muted);
  }

  /* ── Attribute API ── */

  :where(n-divider)[orientation="vertical"] {
    align-self: stretch;
    flex-direction: column;
    justify-content: center;
    width: auto;
    height: var(--n-divider-size);
  }

  :where(n-divider)[orientation="vertical"]:empty::after {
    content: '';
    align-self: center;
    block-size: 100%;
    border-inline-start: 1px solid var(--n-border-muted);
  }

  :where(n-divider)[orientation="vertical"]:not(:empty)::before,
  :where(n-divider)[orientation="vertical"]:not(:empty)::after {
    content: '';
    flex: 1;
    border-inline-start: 1px solid var(--n-border-muted);
  }

}

@layer ui {

  /* ══════════════════════════════════════════════════════════════════
     <n-panes> — Coordinated pane group container
     Flex layout with pointer-proximity resize between children.
     Default orientation: horizontal (side-by-side).
     ══════════════════════════════════════════════════════════════════ */

  :where(n-panes):not(:defined) { visibility: hidden; }
  :where(n-pane):not(:defined) { visibility: hidden; }

  :where(n-panes) {
    display: flex;
    flex-direction: row;
    flex: 1 1 0%;
    min-width: 0;
    min-height: 0;
    overflow: hidden;
  }

  /* ══════════════════════════════════════════════════════════════════
     <n-pane> — Individual pane with optional header, close, minimize
     ══════════════════════════════════════════════════════════════════ */

  :where(n-pane) {
    --n-pane-handle-accent: var(--n-ink-accent);
    --n-pane-border-color: var(--n-border-muted);

    display: flex;
    flex-direction: column;
    flex: 1 1 0%;
    min-width: 0;
    min-height: 0;
    overflow: hidden;
    position: relative;
  }

  /* ── Slot placement (order-based pinning) ── */

  /* Leading / header pins to top */
  :where(n-pane) > :where(n-header),
  :where(n-pane) > :where([slot="leading"]) {
    order: -1;
    flex: none;
  }

  /* Content / body stretches to fill */
  :where(n-pane) > :where(n-body),
  :where(n-pane) > :where([slot="content"]) {
    flex: 1 1 0%;
    min-height: 0;
    overflow-y: auto;
    scrollbar-width: none;
  }

  /* Trailing / footer pins to bottom */
  :where(n-pane) > :where(n-footer),
  :where(n-pane) > :where([slot="trailing"]) {
    order: 999;
    flex: none;
  }

  /* Canvas: covers entire pane, behind content */
  :where(n-pane) > :where([slot="canvas"]) {
    position: absolute;
    inset: 0;
    z-index: 0;
    overflow: hidden;
  }

  :where(n-pane) > :where(:not([slot="canvas"])) {
    z-index: 1;
    position: relative;
  }

  /* ── Compact header inside pane ── */

  :where(n-pane) > :where(n-header) {
    --n-pad-block: 0.125rem;
    --n-pad-inline: 0.375rem;
    min-height: var(--n-pane-header-height, 1.75rem);
    font-size: var(--n-pane-header-font-size, 0.6875rem);
    font-weight: var(--n-button-font-weight);
    gap: calc(var(--n-space) * 1);
  }

  /* ── Minimized state ── */

  :where(n-pane[minimized]) {
    flex: none;
  }

  :where(n-pane[minimized]) > :where(:not(n-header):not([slot="leading"])) {
    display: none;
  }

  /* ── Edge resize handles (stamped by n-pane per resize attr) ── */

  :where(n-pane) > :where(.pane-edge) {
    position: absolute;
    z-index: 3;
    touch-action: none;
  }

  :where(n-pane) > :where(.pane-edge[data-edge="right"]) {
    top: 0; bottom: 0; right: -8px; width: 16px;
    cursor: col-resize;
  }

  :where(n-pane) > :where(.pane-edge[data-edge="left"]) {
    top: 0; bottom: 0; left: -8px; width: 16px;
    cursor: col-resize;
  }

  :where(n-pane) > :where(.pane-edge[data-edge="top"]) {
    left: 0; right: 0; top: -8px; height: 16px;
    cursor: row-resize;
  }

  :where(n-pane) > :where(.pane-edge[data-edge="bottom"]) {
    left: 0; right: 0; bottom: -8px; height: 16px;
    cursor: row-resize;
  }

  :where(n-pane) > :where(.pane-edge)::after {
    content: '';
    position: absolute;
    background: var(--n-pane-handle-accent);
    opacity: 0;
    transition: opacity var(--n-duration, 150ms) var(--n-easing, ease);
    border-radius: 2px;
  }

  /* Inline edges: vertical accent bar */
  :where(n-pane) > :where(.pane-edge[data-edge="left"])::after,
  :where(n-pane) > :where(.pane-edge[data-edge="right"])::after {
    top: 0; bottom: 0; left: 50%; width: 3px;
    transform: translateX(-50%);
  }

  /* Block edges: horizontal accent bar */
  :where(n-pane) > :where(.pane-edge[data-edge="top"])::after,
  :where(n-pane) > :where(.pane-edge[data-edge="bottom"])::after {
    left: 0; right: 0; top: 50%; height: 3px;
    transform: translateY(-50%);
  }

  :where(n-pane) > :where(.pane-edge):hover::after,
  :where(n-pane[data-resizing]) > :where(.pane-edge)::after {
    opacity: 1;
  }

  /* ── Between-pane accent bar (::after on pane, driven by n-panes hit-testing) ── */

  :where(n-pane[data-edge-near])::after,
  :where(n-pane[data-edge-active])::after {
    content: '';
    position: absolute;
    z-index: 4;
    background: var(--n-pane-handle-accent);
    border-radius: 2px;
    pointer-events: none;
  }

  :where(n-pane[data-edge-near="right"])::after,
  :where(n-pane[data-edge-active="right"])::after {
    top: 0; bottom: 0; right: 0; width: 3px;
  }

  :where(n-pane[data-edge-near="bottom"])::after,
  :where(n-pane[data-edge-active="bottom"])::after {
    left: 0; right: 0; bottom: 0; height: 3px;
  }

  /* ── Border between adjacent panes ── */

  :where(n-panes) > :where(n-pane) + :where(n-pane) {
    border-inline-start: 1px solid var(--n-pane-border-color);
  }

}

/* ══════════════════════════════════════════════════════════════════
   Attribute API (unlayered)
   Selectors at (0,1,0) — beat layered component defaults.
   ══════════════════════════════════════════════════════════════════ */

/* ── Vertical orientation ── */

:where(n-panes)[orientation="vertical"] {
  flex-direction: column;
}

:where(n-panes)[orientation="vertical"] > :where(n-pane) + :where(n-pane) {
  border-inline-start: none;
  border-block-start: 1px solid var(--n-pane-border-color);
}

/* ── Border ── */

:where(n-pane)[border] {
  border: 1px solid var(--n-pane-border-color);
}

:where(n-pane)[border="block"] {
  border-block: 1px solid var(--n-pane-border-color);
}

:where(n-pane)[border="inline"] {
  border-inline: 1px solid var(--n-pane-border-color);
}

/* ── Scrollable pane ── */

:where(n-pane)[scrollable] {
  overflow-y: auto;
  scrollbar-width: none;
}

:where(n-pane)[scrollable="x"] {
  overflow-x: auto;
  overflow-y: hidden;
  scrollbar-width: none;
}

:where(n-pane)[scrollable="y"] {
  overflow-y: auto;
  overflow-x: hidden;
  scrollbar-width: none;
}

:where(n-pane)[scrollable="both"] {
  overflow: auto;
  scrollbar-width: none;
}

/* ── Hover-reveal mode: hide pane border — accent bar replaces it ── */

:where(n-panes)[handle="hover"] > :where(n-pane) + :where(n-pane) {
  border-inline-start: none;
}

:where(n-panes)[handle="hover"][orientation="vertical"] > :where(n-pane) + :where(n-pane) {
  border-block-start: none;
}


@layer ui {

  /* ╭──────────────────────────────────────────────────────────╮
     │  <n-header>                                              │
     │  Generic sub-container header with leading / label /     │
     │  trailing slots + optional content row below.            │
     │  Grid adapts columns to which slots are present.         │
     │  Parent containers (article, n-drawer) provide           │
     │  context-specific overrides.                             │
     ╰──────────────────────────────────────────────────────────╯ */

  :where(n-header) {
    --n-pad-block: var(--n-space);
    --n-background: var(--n-panel);
    --n-font-weight: var(--n-button-font-weight);
    --n-text-transform: none;
    --n-letter-spacing: normal;

    display: grid;
    grid-template-columns: 1fr;
    align-items: center;
    gap: var(--n-pad-gap);
    min-height: calc(var(--n-size) + var(--n-pad-block) * 2);
    padding-block: var(--n-pad-block);
    padding-inline: var(--n-pad-inline);
    font-weight: var(--n-font-weight);
    color: var(--n-ink-strong);
    min-width: 0;
    background: var(--n-background);

    font-size: var(--n-font-size);
    line-height: var(--n-line-height);
    text-transform: var(--n-text-transform);
    letter-spacing: var(--n-letter-spacing);
    box-sizing: border-box;
  }

  /* WHY: Custom elements with display:flex/block don't stretch in grid cells
     without explicit width. This ensures all direct children fill their column. */
  :where(n-header) > :where(*) {
    min-width: 0;
    box-sizing: border-box;
  }

  /* ── Slots ── */

  :where(n-header):has(> [slot="leading"]):has(> [slot="trailing"]) {
    grid-template-columns: auto 1fr minmax(0, auto);
  }

  :where(n-header):has(> [slot="leading"]):not(:has(> [slot="trailing"])) {
    grid-template-columns: auto 1fr;
  }

  :where(n-header):not(:has(> [slot="leading"])):has(> [slot="trailing"]) {
    grid-template-columns: 1fr minmax(0, auto);
  }

  :where(n-header) > :where([slot="leading"]) {
    grid-column: 1;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
  }

  :where(n-header) > :where([slot="label"]),
  :where(n-header) > :where(:not([slot])) {
    min-width: 0;
  }

  :where(n-header) > :where([slot="trailing"]) {
    grid-column: -1;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    min-width: 0;
    overflow: hidden;
  }

  :where(n-header) > :where([slot="content"]) {
    grid-column: 1 / -1;
    width: 100%;
    min-width: 0;
    box-sizing: border-box;
  }

  /* ── Auto-slot (no children declare slot) ── */

  :where(n-header):not(:has(> [slot])):has(> :nth-child(2)):not(:has(> :nth-child(3))) {
    grid-template-columns: 1fr auto;
  }

  :where(n-header):not(:has(> [slot])):has(> :nth-child(3)) {
    grid-template-columns: auto 1fr auto;
  }

  :where(n-header):not(:has(> [slot])):has(> :nth-child(2)) > :last-child {
    justify-self: end;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
  }

  /* ╭──────────────────────────────────────────────────────────╮
     │  <n-footer>                                              │
     │  Generic sub-container footer with grid layout.          │
     │  Mirrors n-header slot structure (leading / trailing).   │
     │  Children stretch by default (matches n-header).         │
     ╰──────────────────────────────────────────────────────────╯ */

  :where(n-footer) {
    --n-pad-block: var(--n-space);
    --n-background: var(--n-panel);

    display: grid;
    grid-template-columns: 1fr;
    align-items: center;
    gap: var(--n-pad-gap);
    min-height: calc(var(--n-size) + var(--n-pad-block) * 2);
    padding-block: var(--n-pad-block);
    padding-inline: var(--n-pad-inline);
    min-width: 0;
    background: var(--n-background);

    font-size: var(--n-font-size);
    line-height: var(--n-line-height);
    box-sizing: border-box;
  }

  :where(n-footer) > :where(*) {
    min-width: 0;
    box-sizing: border-box;
  }

  /* ── Slots ── */

  :where(n-footer):has(> [slot="leading"]):has(> [slot="trailing"]) {
    grid-template-columns: auto 1fr minmax(0, auto);
  }

  :where(n-footer):has(> [slot="leading"]):not(:has(> [slot="trailing"])) {
    grid-template-columns: auto 1fr;
  }

  :where(n-footer):not(:has(> [slot="leading"])):has(> [slot="trailing"]) {
    grid-template-columns: 1fr minmax(0, auto);
  }

  :where(n-footer) > :where([slot="leading"]) {
    grid-column: 1;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
  }

  :where(n-footer) > :where([slot="trailing"]) {
    grid-column: -1;
    justify-self: end;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    min-width: 0;
    overflow: hidden;
  }

  :where(n-footer) > :where([slot="content"]) {
    grid-column: 1 / -1;
    width: 100%;
    min-width: 0;
    box-sizing: border-box;
  }

  /* ── Auto-slot (no children declare slot) ── */

  :where(n-footer):not(:has(> [slot])):has(> :nth-child(2)):not(:has(> :nth-child(3))) {
    grid-template-columns: 1fr auto;
  }

  :where(n-footer):not(:has(> [slot])):has(> :nth-child(3)) {
    grid-template-columns: auto 1fr auto;
  }

  :where(n-footer):not(:has(> [slot])):has(> :nth-child(2)) > :last-child {
    justify-self: end;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
  }

  /* ╭──────────────────────────────────────────────────────────╮
     │  <n-aside>                                               │
     │  Collapsible side panel. Animates width on [open].       │
     │  Used by dashboard layout for chat + inspector panels.   │
     ╰──────────────────────────────────────────────────────────╯ */

  :where(n-aside) {
    --n-aside-width: 360px;
    --n-aside-min-width: 280px;

    flex: none;
    position: relative;
    display: none;
    width: 0;
    min-width: 0;
    max-width: 480px;
    overflow: clip;
    padding: 0;
    transition:
      display var(--n-duration) var(--n-easing) allow-discrete,
      width var(--n-duration) var(--n-easing),
      min-width var(--n-duration) var(--n-easing);
  }

  :where(n-aside[open]) {
    display: flex;
    flex-direction: column;
    width: var(--n-aside-width);
    min-width: var(--n-aside-min-width);
  }

  :where(n-aside[resizing]) {
    transition: none;
  }

  /* ── Resize handle ── */

  :where(n-aside) :where(.layout-resize-handle) {
    position: absolute;
    top: 0;
    left: 0;
    width: 4px;
    height: 100%;
    cursor: col-resize;
    z-index: 2;
  }

  :where(n-aside) :where(.layout-resize-handle):hover,
  :where(n-aside[resizing]) :where(.layout-resize-handle) {
    background: var(--n-border-muted);
  }

  :where(.layout-resize-handle[popover]) {
    position: fixed;
    inset: unset;
    width: 4px;
    margin: 0;
    padding: 0;
    border: none;
    background: transparent;
    cursor: col-resize;
  }

  :where(.layout-resize-handle[popover]):hover,
  :where(n-aside[resizing]) :where(.layout-resize-handle[popover]) {
    background: var(--n-border-muted);
  }

  :where(.layout-resize-handle[popover]):not(:popover-open) {
    display: none;
  }

  @starting-style {
    :where(n-aside[open]) {
      width: 0;
      min-width: 0;
    }
  }

}

/* ══════════════════════════════════════════════════════════════════
   Attribute API (unlayered)
   Selectors at (0,1,0) — beat layered component defaults.
   ══════════════════════════════════════════════════════════════════ */

/* ── Header ── */

[truncate]:where(n-header) > :where([slot="label"]),
[truncate]:where(n-header) > :where(:not([slot])) {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

:where(n-header)[align="center"] > :where([slot="label"]),
:where(n-header)[align="center"] > :where(:not([slot])) {
  text-align: center;
}

:where(n-header)[align="end"] > :where([slot="label"]),
:where(n-header)[align="end"] > :where(:not([slot])) {
  text-align: end;
}

:where(n-header)[dividers] {
  position: relative;
}

:where(n-header)[dividers]::after {
  content: '';
  position: absolute;
  inset-inline: 0;
  bottom: 0;
  height: 1px;
  background: var(--n-border-muted);
}

:where(n-header)[sticky] {
  position: sticky;
  top: 0;
  z-index: 1;
  background: inherit;
}

/* ── Footer ── */

:where(n-footer)[dividers] {
  position: relative;
}

:where(n-footer)[dividers]::before {
  content: '';
  position: absolute;
  inset-inline: 0;
  top: 0;
  height: 1px;
  background: var(--n-border-muted);
}

:where(n-footer)[sticky] {
  position: sticky;
  bottom: 0;
  z-index: 1;
  background: inherit;
}

/* ── Padding ── */

[padding="none"] { --n-pad-block: 0; --n-pad-inline: 0; }
[padding="tight"] { --n-pad-block: calc(var(--n-space) * 4); --n-pad-inline: calc(var(--n-space) * 4); }
[padding="regular"] { --n-pad-block: calc(var(--n-space) * 6); --n-pad-inline: calc(var(--n-space) * 6); }
[padding="relaxed"] { --n-pad-block: calc(var(--n-space) * 8); --n-pad-inline: calc(var(--n-space) * 8); }

/* ── Justify ── */

[justify="start"]   { justify-content: flex-start; }
[justify="center"]  { justify-content: center; }
[justify="end"]     { justify-content: flex-end; }
[justify="spread"]  { justify-content: space-between; }
[justify="around"]  { justify-content: space-around; }
[justify="evenly"]  { justify-content: space-evenly; }

/* ── Gap ── */

[gap="0"] { gap: 0; }
[gap="1"] { gap: calc(var(--n-space) * 1); }
[gap="2"] { gap: calc(var(--n-space) * 2); }
[gap="3"] { gap: calc(var(--n-space) * 3); }
[gap="4"] { gap: calc(var(--n-space) * 4); }
[gap="6"] { gap: calc(var(--n-space) * 6); }
[gap="8"] { gap: calc(var(--n-space) * 8); }

/* ── Align ── */

[align="start"]    { align-items: flex-start; }
[align="center"]   { align-items: center; }
[align="end"]      { align-items: flex-end; }
[align="stretch"]  { align-items: stretch; }
[align="baseline"] { align-items: baseline; }

/* ─── Density ─── */
/* WHY: Outside @layer ui so attribute selectors at (0,1,0) beat
   layered component defaults. Matches the pattern used by [size],
   [radius], [intent] in components.tokens.css. */

[density="compact"] {
  --n-space-k: 2;
  --n-pad-gap: var(--n-space);
}
[density="default"] {
  --n-space-k: 4;
}
[density="loose"] {
  --n-space-k: 6;
  --n-pad-gap: calc(var(--n-space) * 3);
}

/* Numeric density — direct --n-space-k multiplier */
[density="0"] {
  --n-space-k: 0;
}
[density="1"] {
  --n-space-k: 1;
}
[density="2"] {
  --n-space-k: 2;
}
[density="3"] {
  --n-space-k: 3;
}
[density="4"] {
  --n-space-k: 4;
}
[density="6"] {
  --n-space-k: 6;
}
[density="8"] {
  --n-space-k: 8;
}
[density="12"] {
  --n-space-k: 12;
}

/* ─── Inline density ─── */
/* Constrains --n-size to very compact heights while preserving
   font-size, icon-size, and spacing from the [size] attribute.
   xs/sm/md all collapse to 24px; lg → 28px; xl → 32px. */

[density="inline"] {
  --n-space-k: 1;
  --n-pad-block: 0;
  --n-pad-gap: var(--n-space);
  --n-size: var(--n-size-xs);  /* 1.5rem (24px) */
}

[density="inline"][size="lg"] {
  --n-size: var(--n-size-sm);  /* 1.75rem (28px) */
}

[density="inline"][size="xl"] {
  --n-size: 2rem;  /* 32px */
}

/* ================================================================
   nonoun-css UI Primitives

   Two-tier token architecture:
   1. Definitions (--n-*-{scale})  — scale tables, constants, named tokens on :root
   2. Resolved   (--n-*)           — intent/variant resolved, public API

   Specificity hierarchy:
   - Component CSS: :where(n-*) at (0,0,0) — zero specificity
   - Attribute selectors: [attr="val"] at (0,1,0) — beats component defaults

   All tokens use the --n-* namespace (no --_* prefix).
   ================================================================ */

@layer ui {
  :root {
    --n-font-family: system-ui, -apple-system, sans-serif;
    --n-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace;

    /* ═══════════════════════════════════════════
       SCALES
       Definition + resolved default per family
       ═══════════════════════════════════════════ */

    /* ─── Size (min-height) ─── */

    --n-size-xs: 1.5rem;
    --n-size-sm: 1.75rem;
    --n-size-md: 2.25rem;
    --n-size-lg: 2.75rem;
    --n-size-xl: 3.25rem;
    --n-size: var(--n-size-md);

    /* ─── Font Size ─── */

    --n-font-xs: 0.75rem;
    --n-font-sm: 0.8125rem;
    --n-font-md: 0.875rem;
    --n-font-lg: 0.9375rem;
    --n-font-xl: 1rem;
    --n-font-size: var(--n-font-md);

    /* ─── Letter Spacing ─── */

    --n-tracking-xs: 0.01em;
    --n-tracking-sm: 0.005em;
    --n-tracking-md: 0em;
    --n-tracking-lg: -0.005em;
    --n-tracking-xl: -0.01em;
    --n-letter-spacing: var(--n-tracking-md);

    /* ─── Space ─── */

    --n-space-xs: 0.125rem;
    --n-space-sm: 0.1875rem;
    --n-space-md: 0.25rem;
    --n-space-lg: 0.25rem;
    --n-space-xl: 0.25rem;
    --n-space: var(--n-space-md);
    --n-space-k: 4;

    /* ─── Compound Padding (derived from space + space-k) ─── */

    --n-pad-block: var(--n-space);
    --n-pad-inline: calc(var(--n-space-k) * var(--n-space));
    --n-pad-gap: calc(var(--n-space) * 2);
    --n-pad-inline-icon: calc(var(--n-pad-inline) / 2);

    /* ─── Icon ─── */

    --n-icon-xs: 0.75rem;
    --n-icon-sm: 0.875rem;
    --n-icon-md: 1rem;
    --n-icon-lg: 1.125rem;
    --n-icon-xl: 1.25rem;
    --n-icon-size: var(--n-icon-md);

    /* ─── Widget (checkbox, radio, switch, range, badge, kbd) ─── */

    --n-widget-xs: 0.75rem;
    --n-widget-sm: 1rem;
    --n-widget-md: 1.25rem;
    --n-widget-lg: 1.5rem;
    --n-widget-xl: 1.75rem;
    --n-widget-size: var(--n-widget-md);

    --n-widget-font-xs: 0.5625rem;
    --n-widget-font-sm: 0.625rem;
    --n-widget-font-md: 0.625rem;
    --n-widget-font-lg: 0.625rem;
    --n-widget-font-xl: 0.75rem;
    --n-widget-font: var(--n-widget-font-md);

    /* ─── Radius ─── */

    --n-radius-sharp: 0.125rem;
    --n-radius-md: 0.75rem;
    --n-radius-round: 1.125rem;
    --n-radius: min(calc(var(--n-size) / 2), var(--n-radius-round));

    /* ─── Shadow ─── */

    --n-shadow-xs: 0 1px 2px oklch(0% 0 0 / 0.06), 0 1px 3px oklch(0% 0 0 / 0.1);
    --n-shadow-sm: 0 1px 3px oklch(0% 0 0 / 0.12);
    --n-shadow-md: 0 2px 4px oklch(0% 0 0 / 0.08), 0 4px 12px oklch(0% 0 0 / 0.12);
    --n-shadow-lg: 0 8px 32px oklch(0% 0 0 / 0.15);
    --n-shadow-xl: 0 16px 48px oklch(0% 0 0 / 0.15);

    /* ═══════════════════════════════════════════
       TYPOGRAPHY
       ═══════════════════════════════════════════ */

    --n-button-font-weight: 500;
    --n-input-font-weight: 400;
    --n-text-font-weight: 400;
    --n-font-weight: var(--n-text-font-weight);

    --n-control-line-height: 1;
    --n-control-line-height-dense: 1.25;
    --n-control-line-height-relaxed: 1.5;
    --n-control-line-height-spacious: 1.75;
    --n-text-line-height: 1.5;
    --n-line-height: var(--n-text-line-height);

    /* ═══════════════════════════════════════════
       ANIMATION
       ═══════════════════════════════════════════ */

    --n-duration: 0.225s;
    --n-easing: cubic-bezier(0.2, 0, 0, 1);

    /* ═══════════════════════════════════════════
       FOCUS & BACKDROP
       ═══════════════════════════════════════════ */

    --n-focus-ring: var(--n-color-accent-600-scrim);
    --n-backdrop-color: oklch(0% 0 0);
    --n-backdrop-opacity: 0.3;

    /* ═══════════════════════════════════════════
       COMPONENT CONSTANTS
       ═══════════════════════════════════════════ */

    /* ─── Tooltip ─── */
    --n-tooltip-max-width: 20rem;

    /* ─── Popover ─── */
    --n-popover-max-height: calc(100dvh - 2rem);
    --n-popover-gap: 0.25rem;
    --n-popover-viewport-margin: 0.5rem;

    /* ─── Drawer ─── */
    --n-drawer-width: 24rem;
    --n-drawer-height: 24rem;

    /* ─── Layout ─── */
    --n-sidebar-width: 240px;
    --n-sidebar-item-height: 3.5rem;

    /* ─── Badge ─── */
    --n-badge-dot: 0.5rem;

    /* ─── Group Header ─── */
    --n-group-header-font: 0.625rem;

    /* ─── Tabs ─── */
    --n-tabs-indicator: 2px;

    /* ─── Color → neutral ─── */

    --n-body: var(--n-body-neutral);
    --n-ground: var(--n-body);

    --n-card: var(--n-card-neutral);
    --n-card-hover: var(--n-card-hover-neutral);

    --n-panel: var(--n-panel-neutral);
    --n-panel-hover: var(--n-panel-hover-neutral);
    --n-panel-active: var(--n-panel-active-neutral);
    --n-panel-disabled: var(--n-panel-disabled-neutral);

    --n-button: var(--n-button-neutral);
    --n-button-hover: var(--n-button-hover-neutral);
    --n-button-active: var(--n-button-active-neutral);
    --n-button-disabled: var(--n-button-disabled-neutral);

    --n-popover: var(--n-popover-neutral);
    --n-popover-hover: var(--n-popover-hover-neutral);
    --n-popover-active: var(--n-popover-active-neutral);
    --n-popover-disabled: var(--n-popover-disabled-neutral);

    --n-control: var(--n-control-neutral);
    --n-control-hover: var(--n-control-hover-neutral);
    --n-control-active: var(--n-control-active-neutral);
    --n-control-disabled: var(--n-control-disabled-neutral);

    --n-widget: var(--n-color-neutral-base);
    --n-widget-hover: var(--n-control-hover-higher);
    --n-widget-active: var(--n-control-active-neutral);
    --n-widget-disabled: var(--n-control-disabled-neutral);

    --n-surface: var(--n-surface-neutral);
    --n-surface-hover: var(--n-surface-hover-neutral);
    --n-surface-active: var(--n-surface-active-neutral);
    --n-surface-disabled: var(--n-surface-disabled-neutral);

    --n-surface-ink: var(--n-surface-ink-neutral);
    --n-surface-ink-hover: var(--n-surface-ink-hover-neutral);
    --n-surface-ink-active: var(--n-surface-ink-active-neutral);
    --n-surface-ink-disabled: var(--n-surface-ink-disabled-neutral);

    --n-border: var(--n-border-neutral);
    --n-border-hover: var(--n-border-hover-neutral);
    --n-border-active: var(--n-border-active-neutral);
    --n-border-disabled: var(--n-color-neutral-highest);
    --n-border-muted: var(--n-border-muted-neutral);
    --n-border-rest: var(--n-color-neutral-highest);

    --n-ink: var(--n-ink-neutral);
    --n-ink-strong: var(--n-ink-strong-neutral);
    --n-ink-inverse: var(--n-ink-inverse-neutral);
    --n-ink-muted: var(--n-ink-muted-neutral);
    --n-ink-placeholder: var(--n-ink-placeholder-neutral);
    --n-ink-hover: var(--n-ink-hover-neutral);
    --n-ink-active: var(--n-ink-active-neutral);
    --n-ink-disabled: var(--n-ink-disabled-neutral);
  }

  /* ─── Toggle Control Defaults ─── */
  /* Checkboxes, radios, switches, range sliders, and calendars use
     accent-colored surface fills for their checked/active states.
     [intent] selectors below override --n-surface when explicit. */

  :where(n-checkbox, n-radio, n-switch, n-range, n-calendar) {
    --n-surface: var(--n-surface-accent);
    --n-surface-hover: var(--n-surface-hover-accent);
    --n-surface-active: var(--n-surface-active-accent);
    --n-surface-disabled: var(--n-surface-disabled-accent);
    --n-surface-ink: var(--n-surface-ink-accent);
    --n-surface-ink-hover: var(--n-surface-ink-hover-accent);
    --n-surface-ink-active: var(--n-surface-ink-active-accent);
    --n-surface-ink-disabled: var(--n-surface-ink-disabled-accent);
  }
}

/* ═══════════════════════════════════════════════════════════════════
   Attribute API (unlayered)
   Selectors at (0,1,0) — beat layered component defaults and
   unlayered `:where()` consumer CSS. Matches toolbar.css pattern.
   ═══════════════════════════════════════════════════════════════════ */

/* ─── Size ─── */

[size="xs"] {
  --n-size: var(--n-size-xs);
  --n-font-size: var(--n-font-xs);
  --n-letter-spacing: var(--n-tracking-xs);
  --n-space: var(--n-space-xs);
  --n-icon-size: var(--n-icon-xs);
  --n-widget-size: var(--n-widget-xs);
  --n-widget-font: var(--n-widget-font-xs);
}

[size="sm"] {
  --n-size: var(--n-size-sm);
  --n-font-size: var(--n-font-sm);
  --n-letter-spacing: var(--n-tracking-sm);
  --n-space: var(--n-space-sm);
  --n-icon-size: var(--n-icon-sm);
  --n-widget-size: var(--n-widget-sm);
  --n-widget-font: var(--n-widget-font-sm);
}

[size="md"] {
  --n-size: var(--n-size-md);
  --n-font-size: var(--n-font-md);
  --n-letter-spacing: var(--n-tracking-md);
  --n-space: var(--n-space-md);
  --n-icon-size: var(--n-icon-md);
  --n-widget-size: var(--n-widget-md);
  --n-widget-font: var(--n-widget-font-md);
}

[size="lg"] {
  --n-size: var(--n-size-lg);
  --n-font-size: var(--n-font-lg);
  --n-letter-spacing: var(--n-tracking-lg);
  --n-space: var(--n-space-lg);
  --n-icon-size: var(--n-icon-lg);
  --n-widget-size: var(--n-widget-lg);
  --n-widget-font: var(--n-widget-font-lg);
}

[size="xl"] {
  --n-size: var(--n-size-xl);
  --n-font-size: var(--n-font-xl);
  --n-letter-spacing: var(--n-tracking-xl);
  --n-space: var(--n-space-xl);
  --n-icon-size: var(--n-icon-xl);
  --n-widget-size: var(--n-widget-xl);
  --n-widget-font: var(--n-widget-font-xl);
}

/* ─── Radius ─── */

[radius="round"] {
  --n-radius: min(calc(var(--n-size) / 2), var(--n-radius-round));
}
[radius="rounded"] {
  --n-radius: calc(var(--n-space) * 2);
}
[radius="sharp"] {
  --n-radius: var(--n-radius-sharp);
}

/* ─── Intent ─── */

[intent="neutral"] {
  --n-card: var(--n-card-neutral);
  --n-card-hover: var(--n-card-hover-neutral);
  --n-panel: var(--n-panel-neutral);
  --n-panel-hover: var(--n-panel-hover-neutral);
  --n-panel-active: var(--n-panel-active-neutral);
  --n-panel-disabled: var(--n-panel-disabled-neutral);
  --n-button: var(--n-button-neutral);
  --n-button-hover: var(--n-button-hover-neutral);
  --n-button-active: var(--n-button-active-neutral);
  --n-button-disabled: var(--n-button-disabled-neutral);
  --n-popover: var(--n-popover-neutral);
  --n-popover-hover: var(--n-popover-hover-neutral);
  --n-popover-active: var(--n-popover-active-neutral);
  --n-popover-disabled: var(--n-popover-disabled-neutral);
  --n-control: var(--n-control-neutral);
  --n-control-hover: var(--n-control-hover-neutral);
  --n-control-active: var(--n-control-active-neutral);
  --n-control-disabled: var(--n-control-disabled-neutral);
  --n-widget: var(--n-color-neutral-higher);
  --n-widget-hover: var(--n-control-hover-neutral);
  --n-widget-active: var(--n-control-active-neutral);
  --n-widget-disabled: var(--n-control-disabled-neutral);
  --n-surface: var(--n-surface-neutral);
  --n-surface-hover: var(--n-surface-hover-neutral);
  --n-surface-active: var(--n-surface-active-neutral);
  --n-surface-disabled: var(--n-surface-disabled-neutral);
  --n-surface-ink: var(--n-surface-ink-neutral);
  --n-surface-ink-hover: var(--n-surface-ink-hover-neutral);
  --n-surface-ink-active: var(--n-surface-ink-active-neutral);
  --n-surface-ink-disabled: var(--n-surface-ink-disabled-neutral);
  --n-border: var(--n-border-neutral);
  --n-border-hover: var(--n-border-hover-neutral);
  --n-border-active: var(--n-border-active-neutral);
  --n-border-disabled: var(--n-color-neutral-highest);
  --n-border-muted: var(--n-border-muted-neutral);
  --n-ink: var(--n-ink-neutral);
  --n-ink-strong: var(--n-ink-strong-neutral);
  --n-ink-inverse: var(--n-ink-inverse-neutral);
  --n-ink-muted: var(--n-ink-muted-neutral);
  --n-ink-placeholder: var(--n-ink-placeholder-neutral);
  --n-ink-hover: var(--n-ink-hover-neutral);
  --n-ink-active: var(--n-ink-active-neutral);
  --n-ink-disabled: var(--n-ink-disabled-neutral);
}

[intent="accent"] {
  --n-card: var(--n-card-accent);
  --n-card-hover: var(--n-card-hover-accent);
  --n-panel: var(--n-panel-accent);
  --n-panel-hover: var(--n-panel-hover-accent);
  --n-panel-active: var(--n-panel-active-accent);
  --n-panel-disabled: var(--n-panel-disabled-accent);
  --n-button: var(--n-button-accent);
  --n-button-hover: var(--n-button-hover-accent);
  --n-button-active: var(--n-button-active-accent);
  --n-button-disabled: var(--n-button-disabled-accent);
  --n-popover: var(--n-popover-accent);
  --n-popover-hover: var(--n-popover-hover-accent);
  --n-popover-active: var(--n-popover-active-accent);
  --n-popover-disabled: var(--n-popover-disabled-accent);
  --n-control: var(--n-control-accent);
  --n-control-hover: var(--n-control-hover-accent);
  --n-control-active: var(--n-control-active-accent);
  --n-control-disabled: var(--n-control-disabled-accent);
  --n-widget: var(--n-color-accent-higher);
  --n-widget-hover: var(--n-control-hover-accent);
  --n-widget-active: var(--n-control-active-accent);
  --n-widget-disabled: var(--n-control-disabled-accent);
  --n-surface: var(--n-surface-accent);
  --n-surface-hover: var(--n-surface-hover-accent);
  --n-surface-active: var(--n-surface-active-accent);
  --n-surface-disabled: var(--n-surface-disabled-accent);
  --n-surface-ink: var(--n-surface-ink-accent);
  --n-surface-ink-hover: var(--n-surface-ink-hover-accent);
  --n-surface-ink-active: var(--n-surface-ink-active-accent);
  --n-surface-ink-disabled: var(--n-surface-ink-disabled-accent);
  --n-border: var(--n-border-accent);
  --n-border-hover: var(--n-border-hover-accent);
  --n-border-active: var(--n-border-active-accent);
  --n-border-disabled: var(--n-color-neutral-highest);
  --n-border-muted: var(--n-border-muted-accent);
  --n-ink: var(--n-ink-accent);
  --n-ink-strong: var(--n-ink-strong-accent);
  --n-ink-inverse: var(--n-ink-inverse-accent);
  --n-ink-muted: var(--n-ink-muted-accent);
  --n-ink-placeholder: var(--n-ink-placeholder-accent);
  --n-ink-hover: var(--n-ink-hover-accent);
  --n-ink-active: var(--n-ink-active-accent);
  --n-ink-disabled: var(--n-ink-disabled-accent);
}

[intent="info"] {
  --n-card: var(--n-card-info);
  --n-card-hover: var(--n-card-hover-info);
  --n-panel: var(--n-panel-info);
  --n-panel-hover: var(--n-panel-hover-info);
  --n-panel-active: var(--n-panel-active-info);
  --n-panel-disabled: var(--n-panel-disabled-info);
  --n-button: var(--n-button-info);
  --n-button-hover: var(--n-button-hover-info);
  --n-button-active: var(--n-button-active-info);
  --n-button-disabled: var(--n-button-disabled-info);
  --n-popover: var(--n-popover-info);
  --n-popover-hover: var(--n-popover-hover-info);
  --n-popover-active: var(--n-popover-active-info);
  --n-popover-disabled: var(--n-popover-disabled-info);
  --n-control: var(--n-control-info);
  --n-control-hover: var(--n-control-hover-info);
  --n-control-active: var(--n-control-active-info);
  --n-control-disabled: var(--n-control-disabled-info);
  --n-widget: var(--n-color-info-higher);
  --n-widget-hover: var(--n-control-hover-info);
  --n-widget-active: var(--n-control-active-info);
  --n-widget-disabled: var(--n-control-disabled-info);
  --n-surface: var(--n-surface-info);
  --n-surface-hover: var(--n-surface-hover-info);
  --n-surface-active: var(--n-surface-active-info);
  --n-surface-disabled: var(--n-surface-disabled-info);
  --n-surface-ink: var(--n-surface-ink-info);
  --n-surface-ink-hover: var(--n-surface-ink-hover-info);
  --n-surface-ink-active: var(--n-surface-ink-active-info);
  --n-surface-ink-disabled: var(--n-surface-ink-disabled-info);
  --n-border: var(--n-border-info);
  --n-border-hover: var(--n-border-hover-info);
  --n-border-active: var(--n-border-active-info);
  --n-border-disabled: var(--n-color-neutral-highest);
  --n-border-muted: var(--n-border-muted-info);
  --n-ink: var(--n-ink-info);
  --n-ink-strong: var(--n-ink-strong-info);
  --n-ink-inverse: var(--n-ink-inverse-info);
  --n-ink-muted: var(--n-ink-muted-info);
  --n-ink-placeholder: var(--n-ink-placeholder-info);
  --n-ink-hover: var(--n-ink-hover-info);
  --n-ink-active: var(--n-ink-active-info);
  --n-ink-disabled: var(--n-ink-disabled-info);
}

[intent="success"] {
  --n-card: var(--n-card-success);
  --n-card-hover: var(--n-card-hover-success);
  --n-panel: var(--n-panel-success);
  --n-panel-hover: var(--n-panel-hover-success);
  --n-panel-active: var(--n-panel-active-success);
  --n-panel-disabled: var(--n-panel-disabled-success);
  --n-button: var(--n-button-success);
  --n-button-hover: var(--n-button-hover-success);
  --n-button-active: var(--n-button-active-success);
  --n-button-disabled: var(--n-button-disabled-success);
  --n-popover: var(--n-popover-success);
  --n-popover-hover: var(--n-popover-hover-success);
  --n-popover-active: var(--n-popover-active-success);
  --n-popover-disabled: var(--n-popover-disabled-success);
  --n-control: var(--n-control-success);
  --n-control-hover: var(--n-control-hover-success);
  --n-control-active: var(--n-control-active-success);
  --n-control-disabled: var(--n-control-disabled-success);
  --n-widget: var(--n-color-success-higher);
  --n-widget-hover: var(--n-control-hover-success);
  --n-widget-active: var(--n-control-active-success);
  --n-widget-disabled: var(--n-control-disabled-success);
  --n-surface: var(--n-surface-success);
  --n-surface-hover: var(--n-surface-hover-success);
  --n-surface-active: var(--n-surface-active-success);
  --n-surface-disabled: var(--n-surface-disabled-success);
  --n-surface-ink: var(--n-surface-ink-success);
  --n-surface-ink-hover: var(--n-surface-ink-hover-success);
  --n-surface-ink-active: var(--n-surface-ink-active-success);
  --n-surface-ink-disabled: var(--n-surface-ink-disabled-success);
  --n-border: var(--n-border-success);
  --n-border-hover: var(--n-border-hover-success);
  --n-border-active: var(--n-border-active-success);
  --n-border-disabled: var(--n-color-neutral-highest);
  --n-border-muted: var(--n-border-muted-success);
  --n-ink: var(--n-ink-success);
  --n-ink-strong: var(--n-ink-strong-success);
  --n-ink-inverse: var(--n-ink-inverse-success);
  --n-ink-muted: var(--n-ink-muted-success);
  --n-ink-placeholder: var(--n-ink-placeholder-success);
  --n-ink-hover: var(--n-ink-hover-success);
  --n-ink-active: var(--n-ink-active-success);
  --n-ink-disabled: var(--n-ink-disabled-success);
}

[intent="warning"] {
  --n-card: var(--n-card-warning);
  --n-card-hover: var(--n-card-hover-warning);
  --n-panel: var(--n-panel-warning);
  --n-panel-hover: var(--n-panel-hover-warning);
  --n-panel-active: var(--n-panel-active-warning);
  --n-panel-disabled: var(--n-panel-disabled-warning);
  --n-button: var(--n-button-warning);
  --n-button-hover: var(--n-button-hover-warning);
  --n-button-active: var(--n-button-active-warning);
  --n-button-disabled: var(--n-button-disabled-warning);
  --n-popover: var(--n-popover-warning);
  --n-popover-hover: var(--n-popover-hover-warning);
  --n-popover-active: var(--n-popover-active-warning);
  --n-popover-disabled: var(--n-popover-disabled-warning);
  --n-control: var(--n-control-warning);
  --n-control-hover: var(--n-control-hover-warning);
  --n-control-active: var(--n-control-active-warning);
  --n-control-disabled: var(--n-control-disabled-warning);
  --n-widget: var(--n-color-warning-higher);
  --n-widget-hover: var(--n-control-hover-warning);
  --n-widget-active: var(--n-control-active-warning);
  --n-widget-disabled: var(--n-control-disabled-warning);
  --n-surface: var(--n-surface-warning);
  --n-surface-hover: var(--n-surface-hover-warning);
  --n-surface-active: var(--n-surface-active-warning);
  --n-surface-disabled: var(--n-surface-disabled-warning);
  --n-surface-ink: var(--n-surface-ink-warning);
  --n-surface-ink-hover: var(--n-surface-ink-hover-warning);
  --n-surface-ink-active: var(--n-surface-ink-active-warning);
  --n-surface-ink-disabled: var(--n-surface-ink-disabled-warning);
  --n-border: var(--n-border-warning);
  --n-border-hover: var(--n-border-hover-warning);
  --n-border-active: var(--n-border-active-warning);
  --n-border-disabled: var(--n-color-neutral-highest);
  --n-border-muted: var(--n-border-muted-warning);
  --n-ink: var(--n-ink-warning);
  --n-ink-strong: var(--n-ink-strong-warning);
  --n-ink-inverse: var(--n-ink-inverse-warning);
  --n-ink-muted: var(--n-ink-muted-warning);
  --n-ink-placeholder: var(--n-ink-placeholder-warning);
  --n-ink-hover: var(--n-ink-hover-warning);
  --n-ink-active: var(--n-ink-active-warning);
  --n-ink-disabled: var(--n-ink-disabled-warning);
}

[intent="danger"] {
  --n-card: var(--n-card-danger);
  --n-card-hover: var(--n-card-hover-danger);
  --n-panel: var(--n-panel-danger);
  --n-panel-hover: var(--n-panel-hover-danger);
  --n-panel-active: var(--n-panel-active-danger);
  --n-panel-disabled: var(--n-panel-disabled-danger);
  --n-button: var(--n-button-danger);
  --n-button-hover: var(--n-button-hover-danger);
  --n-button-active: var(--n-button-active-danger);
  --n-button-disabled: var(--n-button-disabled-danger);
  --n-popover: var(--n-popover-danger);
  --n-popover-hover: var(--n-popover-hover-danger);
  --n-popover-active: var(--n-popover-active-danger);
  --n-popover-disabled: var(--n-popover-disabled-danger);
  --n-control: var(--n-control-danger);
  --n-control-hover: var(--n-control-hover-danger);
  --n-control-active: var(--n-control-active-danger);
  --n-control-disabled: var(--n-control-disabled-danger);
  --n-widget: var(--n-color-danger-higher);
  --n-widget-hover: var(--n-control-hover-danger);
  --n-widget-active: var(--n-control-active-danger);
  --n-widget-disabled: var(--n-control-disabled-danger);
  --n-surface: var(--n-surface-danger);
  --n-surface-hover: var(--n-surface-hover-danger);
  --n-surface-active: var(--n-surface-active-danger);
  --n-surface-disabled: var(--n-surface-disabled-danger);
  --n-surface-ink: var(--n-surface-ink-danger);
  --n-surface-ink-hover: var(--n-surface-ink-hover-danger);
  --n-surface-ink-active: var(--n-surface-ink-active-danger);
  --n-surface-ink-disabled: var(--n-surface-ink-disabled-danger);
  --n-border: var(--n-border-danger);
  --n-border-hover: var(--n-border-hover-danger);
  --n-border-active: var(--n-border-active-danger);
  --n-border-disabled: var(--n-color-neutral-highest);
  --n-border-muted: var(--n-border-muted-danger);
  --n-ink: var(--n-ink-danger);
  --n-ink-strong: var(--n-ink-strong-danger);
  --n-ink-inverse: var(--n-ink-inverse-danger);
  --n-ink-muted: var(--n-ink-muted-danger);
  --n-ink-placeholder: var(--n-ink-placeholder-danger);
  --n-ink-hover: var(--n-ink-hover-danger);
  --n-ink-active: var(--n-ink-active-danger);
  --n-ink-disabled: var(--n-ink-disabled-danger);
}

/* ─── Disabled intent override ─── */
/* WHY: Disabled components should look neutral regardless of intent.
   Same (0,1,0) specificity as intent selectors — wins by source order. */

[aria-disabled="true"] {
  --n-panel-disabled: var(--n-panel-disabled-neutral);
  --n-button-disabled: var(--n-button-disabled-neutral);
  --n-popover-disabled: var(--n-popover-disabled-neutral);
  --n-control-disabled: var(--n-control-disabled-neutral);
  --n-widget-disabled: var(--n-control-disabled-neutral);
  --n-surface-disabled: var(--n-surface-disabled-neutral);
  --n-surface-ink-disabled: var(--n-surface-ink-disabled-neutral);
  --n-border-disabled: var(--n-color-neutral-highest);
  --n-ink-disabled: var(--n-ink-disabled-neutral);
}

/* ─── Variant ─── */

[variant="primary"] {
  --n-background: var(--n-surface);
  --n-background-hover: var(--n-surface-hover);
  --n-background-active: var(--n-surface-active);
  --n-background-disabled: var(--n-surface-disabled);
  --n-color: var(--n-surface-ink);
  --n-color-hover: var(--n-surface-ink-hover);
  --n-color-active: var(--n-surface-ink-active);
  --n-color-disabled: var(--n-surface-ink-disabled);
  --n-border-color: transparent;
  --n-border-color-hover: transparent;
  --n-border-color-active: transparent;
  --n-border-color-disabled: transparent;
}

[variant="secondary"] {
  --n-background: var(--n-button);
  --n-background-hover: var(--n-button-hover);
  --n-background-active: var(--n-button-active);
  --n-background-disabled: var(--n-button-disabled);
  --n-color: var(--n-ink-strong);
  --n-color-hover: var(--n-ink-hover);
  --n-color-active: var(--n-ink-active);
  --n-color-disabled: var(--n-ink-disabled);
  --n-border-color: var(--n-border-muted);
  --n-border-color-hover: var(--n-border-hover);
  --n-border-color-active: var(--n-border-active);
  --n-border-color-disabled: transparent;
}

/* Controls use weaker scrim (one step below buttons) */
:is(n-input, n-textarea, n-segmented-control)[variant="secondary"] {
  --n-background: var(--n-control);
  --n-background-hover: var(--n-control-hover);
  --n-background-active: var(--n-control-active);
  --n-background-disabled: var(--n-control-disabled);
}

[variant="default"] {
  --n-background: var(--n-button-neutral);
  --n-background-hover: var(--n-button-hover-neutral);
  --n-background-active: var(--n-button-active-neutral);
  --n-background-disabled: var(--n-button-disabled-neutral);
  --n-color: var(--n-ink);
  --n-color-hover: var(--n-ink-hover);
  --n-color-active: var(--n-ink-active);
  --n-color-disabled: var(--n-ink-disabled);
  --n-border-color: var(--n-border-muted-neutral);
  --n-border-color-hover: var(--n-border-hover-neutral);
  --n-border-color-active: var(--n-border-active-neutral);
  --n-border-color-disabled: transparent;
}

/* Controls use weaker scrim (one step below buttons) */
:is(n-input, n-textarea, n-segmented-control)[variant="default"] {
  --n-background: var(--n-control-neutral);
  --n-background-hover: var(--n-control-hover-neutral);
  --n-background-active: var(--n-control-active-neutral);
  --n-background-disabled: var(--n-control-disabled-neutral);
}

[variant="ghost"] {
  --n-background: transparent;
  --n-background-hover: var(--n-control-hover-neutral);
  --n-background-active: var(--n-control-active-neutral);
  --n-background-disabled: transparent;
  --n-color: var(--n-ink);
  --n-color-hover: var(--n-ink-strong);
  --n-color-active: var(--n-ink-active);
  --n-color-disabled: var(--n-ink-disabled);
  --n-border-color: transparent;
  --n-border-color-hover: transparent;
  --n-border-color-active: transparent;
  --n-border-color-disabled: transparent;
}

[variant="outline"] {
  --n-background: transparent;
  --n-background-hover: var(--n-panel-hover);
  --n-background-active: var(--n-panel-active);
  --n-background-disabled: transparent;
  --n-color: var(--n-ink);
  --n-color-hover: var(--n-ink-hover);
  --n-color-active: var(--n-ink-active);
  --n-color-disabled: var(--n-ink-disabled);
  --n-border-color: var(--n-border);
  --n-border-color-hover: var(--n-border-hover);
  --n-border-color-active: var(--n-border-active);
  --n-border-color-disabled: transparent;
}

[variant="selected"],
[aria-pressed="true"] {
  --n-background: white;
  --n-background-hover: var(--n-panel-hover);
  --n-background-active: var(--n-panel-active);
  --n-background-disabled: var(--n-panel-disabled);
  --n-color: var(--n-ink-inverse);
  --n-color-hover: var(--n-ink-hover);
  --n-color-active: var(--n-ink-active);
  --n-color-disabled: var(--n-ink-disabled);
  --n-border-color: transparent;
  --n-border-color-hover: var(--n-border-hover);
  --n-border-color-active: var(--n-border-active);
  --n-border-color-disabled: transparent;
}

[variant="plain"] {
  --n-background: transparent;
  --n-background-hover: transparent;
  --n-background-active: transparent;
  --n-background-disabled: transparent;
  --n-color: var(--n-ink);
  --n-color-hover: var(--n-ink-hover);
  --n-color-active: var(--n-ink-active);
  --n-color-disabled: var(--n-ink-disabled);
  --n-border-color: transparent;
  --n-border-color-hover: transparent;
  --n-border-color-active: transparent;
  --n-border-color-disabled: transparent;
  --n-radius: 0;
}

/* ══════════════════════════════════════════════════════════════════
   Utilities — opt-in CSS utilities.
   ══════════════════════════════════════════════════════════════════ */

@layer ui {

  /* ── Prose content reset ──
     Reusable scoped reset for rich text / markdown output regions.
     Zeroes browser-default margins, sets vertical rhythm via gap on
     the container. Consumers apply via [markdown-html] or .markdown-html. */

  :where([markdown-html]),
  :where(.markdown-html) {
    display: flex;
    flex-direction: column;
    gap: calc(var(--n-space) * 2);
  }

  :where([markdown-html]) :where(
    p, h1, h2, h3, h4, h5, h6,
    ul, ol, li,
    blockquote, pre, hr,
    div, figure, figcaption,
    dl, dt, dd, details, summary
  ),
  :where(.markdown-html) :where(
    p, h1, h2, h3, h4, h5, h6,
    ul, ol, li,
    blockquote, pre, hr,
    div, figure, figcaption,
    dl, dt, dd, details, summary
  ) {
    margin: 0;
  }

  :where([markdown-html]) :where(h1, h2, h3, h4, h5, h6),
  :where(.markdown-html) :where(h1, h2, h3, h4, h5, h6) {
    font-weight: var(--n-button-font-weight);
    color: var(--n-ink-strong);
    line-height: 1.3;
  }

  :where([markdown-html]) :where(h1),
  :where(.markdown-html) :where(h1) { font-size: 1.5em; }
  :where([markdown-html]) :where(h2),
  :where(.markdown-html) :where(h2) { font-size: 1.25em; }
  :where([markdown-html]) :where(h3),
  :where(.markdown-html) :where(h3) { font-size: 1.125em; }

  :where([markdown-html]) :where(code),
  :where(.markdown-html) :where(code) {
    font-family: var(--n-font-mono);
    font-size: 0.875em;
  }

  :where([markdown-html]) :where(pre),
  :where(.markdown-html) :where(pre) {
    padding: calc(var(--n-space) * 2);
    background: var(--n-control);
    border-radius: var(--n-radius);
    overflow-x: auto;
    white-space: pre;
  }

  :where([markdown-html]) :where(pre) :where(code),
  :where(.markdown-html) :where(pre) :where(code) {
    font-size: inherit;
  }

  :where([markdown-html]) :where(blockquote),
  :where(.markdown-html) :where(blockquote) {
    border-inline-start: 3px solid var(--n-border-muted);
    padding-inline-start: calc(var(--n-space) * 3);
    color: var(--n-ink-muted);
  }

  :where([markdown-html]) :where(a),
  :where(.markdown-html) :where(a) {
    color: var(--n-ink);
    text-decoration: underline;
    text-underline-offset: 0.15em;
  }

  :where([markdown-html]) :where(ul, ol),
  :where(.markdown-html) :where(ul, ol) {
    padding-inline-start: 1.5em;
  }

  :where([markdown-html]) :where(li + li),
  :where(.markdown-html) :where(li + li) {
    margin-block-start: calc(var(--n-space) * 0.5);
  }

  :where([markdown-html]) :where(hr),
  :where(.markdown-html) :where(hr) {
    border: none;
    height: 1px;
    background: var(--n-border-muted);
  }

}

/* ══════════════════════════════════════════════════════════════════
   Layout Utilities — n-stack, n-inset, n-grid
   CSS-only layout containers. No custom element registration.
   ══════════════════════════════════════════════════════════════════ */

@layer ui {

  /* ── Stack ── */

  :where(n-stack) {
    --n-padding-block: 0;
    --n-padding-inline: 0;

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    min-height: inherit;
    flex-direction: column;
    gap: calc(var(--n-space) * var(--n-space-k));
    padding-block: var(--n-padding-block);
    padding-inline: var(--n-padding-inline);
  }

  /* ── Adaptive Grid ── */
  /* WHY: When <nav> and/or <aside> children are present, n-stack
     auto-switches from flex to grid with leading/label/trailing columns. */

  /* Both leading + trailing → three columns */
  :where(n-stack):has(> nav):has(> aside) {
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
  }

  /* Leading only → two columns */
  :where(n-stack):has(> nav):not(:has(> aside)) {
    display: grid;
    grid-template-columns: auto 1fr;
    align-items: center;
  }

  /* Trailing only → two columns */
  :where(n-stack):not(:has(> nav)):has(> aside) {
    display: grid;
    grid-template-columns: 1fr auto;
    align-items: center;
  }

  /* Nav (leading) — flex row for grouped icons/buttons */
  :where(n-stack) > :where(nav) {
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    min-width: 0;
  }

  /* Aside (trailing) — flex row, pushed to end */
  :where(n-stack) > :where(aside) {
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    min-width: 0;
    overflow: hidden;
  }

}

/* ── Attribute API (unlayered) ── */

/* Direction */
:where(n-stack)[direction="row"] { flex-direction: row; }
:where(n-stack)[direction="column-reverse"] { flex-direction: column-reverse; }
:where(n-stack)[direction="row-reverse"] { flex-direction: row-reverse; }

/* Wrap */
:where(n-stack)[wrap] { flex-wrap: wrap; }

/* Sticky */
:where(n-stack)[sticky="top"] {
  position: sticky;
  top: 0;
  z-index: 1;
  background: inherit;
}

:where(n-stack)[sticky="bottom"] {
  position: sticky;
  bottom: 0;
  z-index: 1;
  background: inherit;
}

/* Truncate */
[truncate]:where(n-stack) > :where(:not(nav):not(aside)) {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}

/* Dividers */
:where(n-stack)[dividers] > :where(:not(:first-child)) {
  border-block-start: 1px solid var(--n-border-muted);
}

@layer ui {

  /* ── Grid ── */

  :where(n-grid) {
    --n-padding-block: 0;
    --n-padding-inline: 0;

    display: grid;
    flex: 1 1 0%;
    min-width: 0;
    min-height: 0;
    grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
    gap: calc(var(--n-space) * 2);
    padding-block: var(--n-padding-block);
    padding-inline: var(--n-padding-inline);
  }

}

/* ── Attribute API (unlayered) ── */

/* Fixed columns */
:where(n-grid)[cols="1"] { grid-template-columns: 1fr; }
:where(n-grid)[cols="2"] { grid-template-columns: repeat(2, 1fr); }
:where(n-grid)[cols="3"] { grid-template-columns: repeat(3, 1fr); }
:where(n-grid)[cols="4"] { grid-template-columns: repeat(4, 1fr); }
:where(n-grid)[cols="5"] { grid-template-columns: repeat(5, 1fr); }
:where(n-grid)[cols="6"] { grid-template-columns: repeat(6, 1fr); }

/* Min column width (auto-fill) */
:where(n-grid)[min="8rem"] { grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); }
:where(n-grid)[min="10rem"] { grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr)); }
:where(n-grid)[min="12rem"] { grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr)); }
:where(n-grid)[min="14rem"] { grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); }
:where(n-grid)[min="16rem"] { grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); }
:where(n-grid)[min="20rem"] { grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); }
:where(n-grid)[min="24rem"] { grid-template-columns: repeat(auto-fill, minmax(24rem, 1fr)); }

@layer ui {

  /* ── Inset ── */

  :where(n-inset) {
    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    flex-direction: column;
    gap: calc(var(--n-space) * 2);
    padding-inline-start: calc(var(--n-space-k) * var(--n-space));
  }

}


/* ══════════════════════════════════════════════════════════════════
   Containers — sub-containers + container component CSS.
   <n-header>, <n-footer>, <n-aside> are defined inline.
   Container components are @imported from src/containers/.
   ══════════════════════════════════════════════════════════════════ */

/* Container components */
@layer ui {

  /* ══════════════════════════════════════════════════════════════════
     <n-container> — Unified surface container (card + panel)
     Default = card elevation, density-scaled padding + gap
     [data-kind="panel"] = panel elevation
     ══════════════════════════════════════════════════════════════════ */

  :where(n-container):not(:defined) { visibility: hidden; }

  /* ── Base (card mode) ── */

  :where(n-container) {
    --n-ground: var(--n-card);
    --n-ground-hover: var(--n-card-hover);

    /* Default size context — children inherit md */
    --n-size: var(--n-size-md);
    --n-font-size: var(--n-font-md);
    --n-letter-spacing: var(--n-tracking-md);
    --n-space: var(--n-space-md);
    --n-icon-size: var(--n-icon-md);
    --n-widget-size: var(--n-widget-md);
    --n-widget-font: var(--n-widget-font-md);

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    flex-direction: column;
    /* WHY: Container uses symmetric padding (all sides = inline).
       Uses --n-pad-inline directly — must NOT redefine --n-pad-block/gap
       because those cascade to child components (buttons, inputs). */
    gap: var(--n-pad-inline);
    padding-block: var(--n-pad-inline);
    padding-inline: var(--n-pad-inline);
    background: var(--n-ground);
    border-radius: var(--n-radius);

    font-size: var(--n-font-size);
    line-height: var(--n-line-height);

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      box-shadow var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Panel mode ── */

  :where(n-container[data-kind="panel"]) {
    --n-ground: var(--n-panel);
    overflow: visible;
    scrollbar-width: none;
  }

  /* ── Media slot ── */

  :where(n-container) > :where([slot="media"]) {
    display: block;
    width: 100%;
    object-fit: cover;
  }

  /* ── Sub-container integration ── */
  /* WHY: Sub-container elements (<n-header>, <n-body>, <n-footer>) work as
     direct children of n-container. Structured mode activates when <n-header>
     or <n-footer> is present — overflow delegates to <n-body>. */

  :where(n-container):has(> n-header, > n-footer) {
    overflow: hidden;
    padding: 0;
    min-height: 0;
  }

  :where(n-container):has(> n-header, > n-footer) > :where(n-body) {
    flex: 1 1 0%;
    min-height: 0;
    overflow-y: auto;
    scrollbar-width: none;
  }

  /* ── Container n-header grid columns — nav (leading) + aside (trailing) ──
     WHY: Containers use <nav>/<aside> children for leading/trailing slots
     instead of the generic n-header [slot="leading"]/[slot="trailing"]. */

  :where(n-container) > :where(n-header):has(> nav):has(> aside) {
    grid-template-columns: auto 1fr minmax(0, auto);
  }
  :where(n-container) > :where(n-header):has(> nav):not(:has(> aside)) {
    grid-template-columns: auto 1fr;
  }
  :where(n-container) > :where(n-header):not(:has(> nav)):has(> aside) {
    grid-template-columns: 1fr minmax(0, auto);
  }
  :where(n-container) > :where(n-header) > :where(nav) {
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
  }
  :where(n-container) > :where(n-header) > :where(aside) {
    grid-column: -1;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    min-width: 0;
    overflow: hidden;
  }

  /* Panel-mode section defaults */
  :where(n-container[data-kind="panel"]) > :where(n-body) {
    display: flex;
    flex-direction: column;
    gap: var(--n-pad-inline);
    padding-block: var(--n-pad-inline);
    padding-inline: var(--n-pad-inline);
    box-sizing: border-box;
  }

}

/* ══════════════════════════════════════════════════════════════════
   Attribute API (unlayered)
   Selectors at (0,1,0) — beat layered component defaults.
   ══════════════════════════════════════════════════════════════════ */

:where(n-container)[inline] {
  flex: 0 0 auto;
}

:where(n-container)[dividers] > :where(:not(:first-child)) {
  border-block-start: 1px solid var(--n-border-muted);
}

:where(n-container)[interactive] {
  cursor: pointer;
}

:where(n-container)[interactive]:hover,
:where(n-container)[interactive][force-hover] {
  background: var(--n-ground-hover);
  border-color: var(--n-border-hover);
}

:where(n-container)[interactive]:focus-visible,
:where(n-container)[interactive][force-focus-visible] {
  outline: 2px solid var(--n-focus-ring);
  outline-offset: 2px;
}

:where(n-container)[bordered] {
  border: 1px solid var(--n-border-muted);
}

:where(n-container[data-kind="panel"])[show-scrollbar] {
  scrollbar-width: thin;
}

[padding="0"]:where(n-container),
[padding="none"]:where(n-container) {
  padding: 0;
}

[scrollable]:where(n-container[data-kind="panel"]) {
  overflow-y: auto;
}

[fade]:where(n-container[data-kind="panel"]) {
  --n-fade-top: calc((var(--n-size) + var(--n-space) * var(--n-space-k)) * 1.25);
  --n-fade-bottom: calc((var(--n-size) + var(--n-space) * var(--n-space-k)) * 1.25);
}

/* Fade masks — header/footer present → mask the section */
[fade]:where(n-container[data-kind="panel"]):has(> n-header) > :where(n-body) {
  mask-image: linear-gradient(
    to bottom,
    transparent 0,
    black var(--n-fade-top),
    black 100%
  );
}

[fade]:where(n-container[data-kind="panel"]):has(> n-footer) > :where(n-body) {
  mask-image: linear-gradient(
    to bottom,
    black 0,
    black calc(100% - var(--n-fade-bottom)),
    transparent 100%
  );
}

[fade]:where(n-container[data-kind="panel"]):has(> n-header):has(> n-footer) > :where(n-body) {
  mask-image: linear-gradient(
    to bottom,
    transparent 0,
    black var(--n-fade-top),
    black calc(100% - var(--n-fade-bottom)),
    transparent 100%
  );
}

@layer ui {

  /* ── Body ── */
  /* Generic content region. Fills remaining flex space.
     Does NOT declare overflow by default — scrolling is
     inherited from the parent height constraint. */

  :where(n-body) {
    --n-background: var(--n-panel);
    --n-font-family: inherit;

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    min-height: calc(var(--n-size) + var(--n-pad-inline) * 2);
    flex-direction: column;
    /* WHY: Body uses symmetric padding (same as container).
       Uses --n-pad-inline directly — must NOT redefine --n-pad-block/gap. */
    gap: var(--n-pad-inline);
    padding-block: var(--n-pad-inline);
    padding-inline: var(--n-pad-inline);
    background: var(--n-background);

    font-family: var(--n-font-family);
    font-size: var(--n-font-size);
    line-height: var(--n-line-height);
    box-sizing: border-box;
  }

}

/* ── Attribute API (unlayered) ── */

:where(n-body)[show-scrollbar],
:where(n-body)[scrollbar="thin"] {
  scrollbar-width: thin;
}

:where(n-body)[scrollbar="none"] {
  scrollbar-width: none;
}

:where(n-body)[overflow="hidden"] {
  overflow: hidden;
}

:where(n-body)[overflow="auto"] {
  overflow: auto;
}

:where(n-body)[overflow="scroll"] {
  overflow: scroll;
}

:where(n-body)[relative] {
  position: relative;
}

[padding="0"]:where(n-body),
[padding="none"]:where(n-body) {
  padding: 0;
}

@layer ui {

  :where(n-divider) {
    display: flex;
    flex: none;
    min-width: 0;
    align-items: center;
    gap: calc(var(--n-space) * var(--n-space-k));
    border: 0;
    color: var(--n-ink-muted);
    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
  }

  /* Horizontal with text content */
  :where(n-divider):not([orientation="vertical"]) {
    flex-direction: row;
  }

  :where(n-divider):not([orientation="vertical"]):empty {
    border-block-start: 1px solid var(--n-border-muted);
  }

  :where(n-divider):not([orientation="vertical"]):not(:empty)::before,
  :where(n-divider):not([orientation="vertical"]):not(:empty)::after {
    content: '';
    flex: 1;
    border-block-start: 1px solid var(--n-border-muted);
  }

  /* ── Attribute API ── */

  :where(n-divider)[orientation="vertical"] {
    align-self: stretch;
    flex-direction: column;
    justify-content: center;
    width: auto;
    height: var(--n-divider-size);
  }

  :where(n-divider)[orientation="vertical"]:empty::after {
    content: '';
    align-self: center;
    block-size: 100%;
    border-inline-start: 1px solid var(--n-border-muted);
  }

  :where(n-divider)[orientation="vertical"]:not(:empty)::before,
  :where(n-divider)[orientation="vertical"]:not(:empty)::after {
    content: '';
    flex: 1;
    border-inline-start: 1px solid var(--n-border-muted);
  }

}

@layer ui {

  /* ══════════════════════════════════════════════════════════════════
     <n-panes> — Coordinated pane group container
     Flex layout with pointer-proximity resize between children.
     Default orientation: horizontal (side-by-side).
     ══════════════════════════════════════════════════════════════════ */

  :where(n-panes):not(:defined) { visibility: hidden; }
  :where(n-pane):not(:defined) { visibility: hidden; }

  :where(n-panes) {
    display: flex;
    flex-direction: row;
    flex: 1 1 0%;
    min-width: 0;
    min-height: 0;
    overflow: hidden;
  }

  /* ══════════════════════════════════════════════════════════════════
     <n-pane> — Individual pane with optional header, close, minimize
     ══════════════════════════════════════════════════════════════════ */

  :where(n-pane) {
    --n-pane-handle-accent: var(--n-ink-accent);
    --n-pane-border-color: var(--n-border-muted);

    display: flex;
    flex-direction: column;
    flex: 1 1 0%;
    min-width: 0;
    min-height: 0;
    overflow: hidden;
    position: relative;
  }

  /* ── Slot placement (order-based pinning) ── */

  /* Leading / header pins to top */
  :where(n-pane) > :where(n-header),
  :where(n-pane) > :where([slot="leading"]) {
    order: -1;
    flex: none;
  }

  /* Content / body stretches to fill */
  :where(n-pane) > :where(n-body),
  :where(n-pane) > :where([slot="content"]) {
    flex: 1 1 0%;
    min-height: 0;
    overflow-y: auto;
    scrollbar-width: none;
  }

  /* Trailing / footer pins to bottom */
  :where(n-pane) > :where(n-footer),
  :where(n-pane) > :where([slot="trailing"]) {
    order: 999;
    flex: none;
  }

  /* Canvas: covers entire pane, behind content */
  :where(n-pane) > :where([slot="canvas"]) {
    position: absolute;
    inset: 0;
    z-index: 0;
    overflow: hidden;
  }

  :where(n-pane) > :where(:not([slot="canvas"])) {
    z-index: 1;
    position: relative;
  }

  /* ── Compact header inside pane ── */

  :where(n-pane) > :where(n-header) {
    --n-pad-block: 0.125rem;
    --n-pad-inline: 0.375rem;
    min-height: var(--n-pane-header-height, 1.75rem);
    font-size: var(--n-pane-header-font-size, 0.6875rem);
    font-weight: var(--n-button-font-weight);
    gap: calc(var(--n-space) * 1);
  }

  /* ── Minimized state ── */

  :where(n-pane[minimized]) {
    flex: none;
  }

  :where(n-pane[minimized]) > :where(:not(n-header):not([slot="leading"])) {
    display: none;
  }

  /* ── Edge resize handles (stamped by n-pane per resize attr) ── */

  :where(n-pane) > :where(.pane-edge) {
    position: absolute;
    z-index: 3;
    touch-action: none;
  }

  :where(n-pane) > :where(.pane-edge[data-edge="right"]) {
    top: 0; bottom: 0; right: -8px; width: 16px;
    cursor: col-resize;
  }

  :where(n-pane) > :where(.pane-edge[data-edge="left"]) {
    top: 0; bottom: 0; left: -8px; width: 16px;
    cursor: col-resize;
  }

  :where(n-pane) > :where(.pane-edge[data-edge="top"]) {
    left: 0; right: 0; top: -8px; height: 16px;
    cursor: row-resize;
  }

  :where(n-pane) > :where(.pane-edge[data-edge="bottom"]) {
    left: 0; right: 0; bottom: -8px; height: 16px;
    cursor: row-resize;
  }

  :where(n-pane) > :where(.pane-edge)::after {
    content: '';
    position: absolute;
    background: var(--n-pane-handle-accent);
    opacity: 0;
    transition: opacity var(--n-duration, 150ms) var(--n-easing, ease);
    border-radius: 2px;
  }

  /* Inline edges: vertical accent bar */
  :where(n-pane) > :where(.pane-edge[data-edge="left"])::after,
  :where(n-pane) > :where(.pane-edge[data-edge="right"])::after {
    top: 0; bottom: 0; left: 50%; width: 3px;
    transform: translateX(-50%);
  }

  /* Block edges: horizontal accent bar */
  :where(n-pane) > :where(.pane-edge[data-edge="top"])::after,
  :where(n-pane) > :where(.pane-edge[data-edge="bottom"])::after {
    left: 0; right: 0; top: 50%; height: 3px;
    transform: translateY(-50%);
  }

  :where(n-pane) > :where(.pane-edge):hover::after,
  :where(n-pane[data-resizing]) > :where(.pane-edge)::after {
    opacity: 1;
  }

  /* ── Between-pane accent bar (::after on pane, driven by n-panes hit-testing) ── */

  :where(n-pane[data-edge-near])::after,
  :where(n-pane[data-edge-active])::after {
    content: '';
    position: absolute;
    z-index: 4;
    background: var(--n-pane-handle-accent);
    border-radius: 2px;
    pointer-events: none;
  }

  :where(n-pane[data-edge-near="right"])::after,
  :where(n-pane[data-edge-active="right"])::after {
    top: 0; bottom: 0; right: 0; width: 3px;
  }

  :where(n-pane[data-edge-near="bottom"])::after,
  :where(n-pane[data-edge-active="bottom"])::after {
    left: 0; right: 0; bottom: 0; height: 3px;
  }

  /* ── Border between adjacent panes ── */

  :where(n-panes) > :where(n-pane) + :where(n-pane) {
    border-inline-start: 1px solid var(--n-pane-border-color);
  }

}

/* ══════════════════════════════════════════════════════════════════
   Attribute API (unlayered)
   Selectors at (0,1,0) — beat layered component defaults.
   ══════════════════════════════════════════════════════════════════ */

/* ── Vertical orientation ── */

:where(n-panes)[orientation="vertical"] {
  flex-direction: column;
}

:where(n-panes)[orientation="vertical"] > :where(n-pane) + :where(n-pane) {
  border-inline-start: none;
  border-block-start: 1px solid var(--n-pane-border-color);
}

/* ── Border ── */

:where(n-pane)[border] {
  border: 1px solid var(--n-pane-border-color);
}

:where(n-pane)[border="block"] {
  border-block: 1px solid var(--n-pane-border-color);
}

:where(n-pane)[border="inline"] {
  border-inline: 1px solid var(--n-pane-border-color);
}

/* ── Scrollable pane ── */

:where(n-pane)[scrollable] {
  overflow-y: auto;
  scrollbar-width: none;
}

:where(n-pane)[scrollable="x"] {
  overflow-x: auto;
  overflow-y: hidden;
  scrollbar-width: none;
}

:where(n-pane)[scrollable="y"] {
  overflow-y: auto;
  overflow-x: hidden;
  scrollbar-width: none;
}

:where(n-pane)[scrollable="both"] {
  overflow: auto;
  scrollbar-width: none;
}

/* ── Hover-reveal mode: hide pane border — accent bar replaces it ── */

:where(n-panes)[handle="hover"] > :where(n-pane) + :where(n-pane) {
  border-inline-start: none;
}

:where(n-panes)[handle="hover"][orientation="vertical"] > :where(n-pane) + :where(n-pane) {
  border-block-start: none;
}


@layer ui {

  /* ╭──────────────────────────────────────────────────────────╮
     │  <n-header>                                              │
     │  Generic sub-container header with leading / label /     │
     │  trailing slots + optional content row below.            │
     │  Grid adapts columns to which slots are present.         │
     │  Parent containers (article, n-drawer) provide           │
     │  context-specific overrides.                             │
     ╰──────────────────────────────────────────────────────────╯ */

  :where(n-header) {
    --n-pad-block: var(--n-space);
    --n-background: var(--n-panel);
    --n-font-weight: var(--n-button-font-weight);
    --n-text-transform: none;
    --n-letter-spacing: normal;

    display: grid;
    grid-template-columns: 1fr;
    align-items: center;
    gap: var(--n-pad-gap);
    min-height: calc(var(--n-size) + var(--n-pad-block) * 2);
    padding-block: var(--n-pad-block);
    padding-inline: var(--n-pad-inline);
    font-weight: var(--n-font-weight);
    color: var(--n-ink-strong);
    min-width: 0;
    background: var(--n-background);

    font-size: var(--n-font-size);
    line-height: var(--n-line-height);
    text-transform: var(--n-text-transform);
    letter-spacing: var(--n-letter-spacing);
    box-sizing: border-box;
  }

  /* WHY: Custom elements with display:flex/block don't stretch in grid cells
     without explicit width. This ensures all direct children fill their column. */
  :where(n-header) > :where(*) {
    min-width: 0;
    box-sizing: border-box;
  }

  /* ── Slots ── */

  :where(n-header):has(> [slot="leading"]):has(> [slot="trailing"]) {
    grid-template-columns: auto 1fr minmax(0, auto);
  }

  :where(n-header):has(> [slot="leading"]):not(:has(> [slot="trailing"])) {
    grid-template-columns: auto 1fr;
  }

  :where(n-header):not(:has(> [slot="leading"])):has(> [slot="trailing"]) {
    grid-template-columns: 1fr minmax(0, auto);
  }

  :where(n-header) > :where([slot="leading"]) {
    grid-column: 1;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
  }

  :where(n-header) > :where([slot="label"]),
  :where(n-header) > :where(:not([slot])) {
    min-width: 0;
  }

  :where(n-header) > :where([slot="trailing"]) {
    grid-column: -1;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    min-width: 0;
    overflow: hidden;
  }

  :where(n-header) > :where([slot="content"]) {
    grid-column: 1 / -1;
    width: 100%;
    min-width: 0;
    box-sizing: border-box;
  }

  /* ── Auto-slot (no children declare slot) ── */

  :where(n-header):not(:has(> [slot])):has(> :nth-child(2)):not(:has(> :nth-child(3))) {
    grid-template-columns: 1fr auto;
  }

  :where(n-header):not(:has(> [slot])):has(> :nth-child(3)) {
    grid-template-columns: auto 1fr auto;
  }

  :where(n-header):not(:has(> [slot])):has(> :nth-child(2)) > :last-child {
    justify-self: end;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
  }

  /* ╭──────────────────────────────────────────────────────────╮
     │  <n-footer>                                              │
     │  Generic sub-container footer with grid layout.          │
     │  Mirrors n-header slot structure (leading / trailing).   │
     │  Children stretch by default (matches n-header).         │
     ╰──────────────────────────────────────────────────────────╯ */

  :where(n-footer) {
    --n-pad-block: var(--n-space);
    --n-background: var(--n-panel);

    display: grid;
    grid-template-columns: 1fr;
    align-items: center;
    gap: var(--n-pad-gap);
    min-height: calc(var(--n-size) + var(--n-pad-block) * 2);
    padding-block: var(--n-pad-block);
    padding-inline: var(--n-pad-inline);
    min-width: 0;
    background: var(--n-background);

    font-size: var(--n-font-size);
    line-height: var(--n-line-height);
    box-sizing: border-box;
  }

  :where(n-footer) > :where(*) {
    min-width: 0;
    box-sizing: border-box;
  }

  /* ── Slots ── */

  :where(n-footer):has(> [slot="leading"]):has(> [slot="trailing"]) {
    grid-template-columns: auto 1fr minmax(0, auto);
  }

  :where(n-footer):has(> [slot="leading"]):not(:has(> [slot="trailing"])) {
    grid-template-columns: auto 1fr;
  }

  :where(n-footer):not(:has(> [slot="leading"])):has(> [slot="trailing"]) {
    grid-template-columns: 1fr minmax(0, auto);
  }

  :where(n-footer) > :where([slot="leading"]) {
    grid-column: 1;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
  }

  :where(n-footer) > :where([slot="trailing"]) {
    grid-column: -1;
    justify-self: end;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    min-width: 0;
    overflow: hidden;
  }

  :where(n-footer) > :where([slot="content"]) {
    grid-column: 1 / -1;
    width: 100%;
    min-width: 0;
    box-sizing: border-box;
  }

  /* ── Auto-slot (no children declare slot) ── */

  :where(n-footer):not(:has(> [slot])):has(> :nth-child(2)):not(:has(> :nth-child(3))) {
    grid-template-columns: 1fr auto;
  }

  :where(n-footer):not(:has(> [slot])):has(> :nth-child(3)) {
    grid-template-columns: auto 1fr auto;
  }

  :where(n-footer):not(:has(> [slot])):has(> :nth-child(2)) > :last-child {
    justify-self: end;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
  }

  /* ╭──────────────────────────────────────────────────────────╮
     │  <n-aside>                                               │
     │  Collapsible side panel. Animates width on [open].       │
     │  Used by dashboard layout for chat + inspector panels.   │
     ╰──────────────────────────────────────────────────────────╯ */

  :where(n-aside) {
    --n-aside-width: 360px;
    --n-aside-min-width: 280px;

    flex: none;
    position: relative;
    display: none;
    width: 0;
    min-width: 0;
    max-width: 480px;
    overflow: clip;
    padding: 0;
    transition:
      display var(--n-duration) var(--n-easing) allow-discrete,
      width var(--n-duration) var(--n-easing),
      min-width var(--n-duration) var(--n-easing);
  }

  :where(n-aside[open]) {
    display: flex;
    flex-direction: column;
    width: var(--n-aside-width);
    min-width: var(--n-aside-min-width);
  }

  :where(n-aside[resizing]) {
    transition: none;
  }

  /* ── Resize handle ── */

  :where(n-aside) :where(.layout-resize-handle) {
    position: absolute;
    top: 0;
    left: 0;
    width: 4px;
    height: 100%;
    cursor: col-resize;
    z-index: 2;
  }

  :where(n-aside) :where(.layout-resize-handle):hover,
  :where(n-aside[resizing]) :where(.layout-resize-handle) {
    background: var(--n-border-muted);
  }

  :where(.layout-resize-handle[popover]) {
    position: fixed;
    inset: unset;
    width: 4px;
    margin: 0;
    padding: 0;
    border: none;
    background: transparent;
    cursor: col-resize;
  }

  :where(.layout-resize-handle[popover]):hover,
  :where(n-aside[resizing]) :where(.layout-resize-handle[popover]) {
    background: var(--n-border-muted);
  }

  :where(.layout-resize-handle[popover]):not(:popover-open) {
    display: none;
  }

  @starting-style {
    :where(n-aside[open]) {
      width: 0;
      min-width: 0;
    }
  }

}

/* ══════════════════════════════════════════════════════════════════
   Attribute API (unlayered)
   Selectors at (0,1,0) — beat layered component defaults.
   ══════════════════════════════════════════════════════════════════ */

/* ── Header ── */

[truncate]:where(n-header) > :where([slot="label"]),
[truncate]:where(n-header) > :where(:not([slot])) {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

:where(n-header)[align="center"] > :where([slot="label"]),
:where(n-header)[align="center"] > :where(:not([slot])) {
  text-align: center;
}

:where(n-header)[align="end"] > :where([slot="label"]),
:where(n-header)[align="end"] > :where(:not([slot])) {
  text-align: end;
}

:where(n-header)[dividers] {
  position: relative;
}

:where(n-header)[dividers]::after {
  content: '';
  position: absolute;
  inset-inline: 0;
  bottom: 0;
  height: 1px;
  background: var(--n-border-muted);
}

:where(n-header)[sticky] {
  position: sticky;
  top: 0;
  z-index: 1;
  background: inherit;
}

/* ── Footer ── */

:where(n-footer)[dividers] {
  position: relative;
}

:where(n-footer)[dividers]::before {
  content: '';
  position: absolute;
  inset-inline: 0;
  top: 0;
  height: 1px;
  background: var(--n-border-muted);
}

:where(n-footer)[sticky] {
  position: sticky;
  bottom: 0;
  z-index: 1;
  background: inherit;
}

/* ── Padding ── */

[padding="none"] { --n-pad-block: 0; --n-pad-inline: 0; }
[padding="tight"] { --n-pad-block: calc(var(--n-space) * 4); --n-pad-inline: calc(var(--n-space) * 4); }
[padding="regular"] { --n-pad-block: calc(var(--n-space) * 6); --n-pad-inline: calc(var(--n-space) * 6); }
[padding="relaxed"] { --n-pad-block: calc(var(--n-space) * 8); --n-pad-inline: calc(var(--n-space) * 8); }

/* ── Justify ── */

[justify="start"]   { justify-content: flex-start; }
[justify="center"]  { justify-content: center; }
[justify="end"]     { justify-content: flex-end; }
[justify="spread"]  { justify-content: space-between; }
[justify="around"]  { justify-content: space-around; }
[justify="evenly"]  { justify-content: space-evenly; }

/* ── Gap ── */

[gap="0"] { gap: 0; }
[gap="1"] { gap: calc(var(--n-space) * 1); }
[gap="2"] { gap: calc(var(--n-space) * 2); }
[gap="3"] { gap: calc(var(--n-space) * 3); }
[gap="4"] { gap: calc(var(--n-space) * 4); }
[gap="6"] { gap: calc(var(--n-space) * 6); }
[gap="8"] { gap: calc(var(--n-space) * 8); }

/* ── Align ── */

[align="start"]    { align-items: flex-start; }
[align="center"]   { align-items: center; }
[align="end"]      { align-items: flex-end; }
[align="stretch"]  { align-items: stretch; }
[align="baseline"] { align-items: baseline; }

@layer ui {

  :where(n-icon):not(:defined) { visibility: hidden; }

  /* ── Icon Base ── */

  :where(n-icon) {
    --n-icon-color: currentColor;

    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--n-icon-size);
    height: var(--n-icon-size);
    min-width: var(--n-icon-size);
    min-height: var(--n-icon-size);
    color: var(--n-icon-color);
    flex-shrink: 0;
    overflow: hidden;
    vertical-align: middle;
    line-height: 0;
  }

  :where(n-icon) > :where(svg) {
    width: 100%;
    height: 100%;
  }

  /* WHY: Unregistered icons (no SVG content) should collapse to zero size
     so surrounding buttons/slots don't render with phantom dimensions */
  :where(n-icon:empty) {
    width: 0;
    height: 0;
    overflow: hidden;
  }

  /* ── Intent (declarative color) ── */

  :where(n-icon[intent="accent"])  { --n-icon-color: var(--n-ink-accent); }
  :where(n-icon[intent="success"]) { --n-icon-color: var(--n-ink-success); }
  :where(n-icon[intent="warning"]) { --n-icon-color: var(--n-ink-warning); }
  :where(n-icon[intent="danger"])  { --n-icon-color: var(--n-ink-danger); }
  :where(n-icon[intent="info"])    { --n-icon-color: var(--n-ink-info); }
  :where(n-icon[intent="muted"])   { --n-icon-color: var(--n-ink-muted-neutral); }

  /* ── Forced Colors ── */

  @media (forced-colors: active) {
    :where(n-icon) {
      --n-icon-color: ButtonText;
    }
  }

}

@layer ui {

  :where(n-accordion, n-accordion-item):not(:defined) { visibility: hidden; }

  /* ── Accordion Container ── */

  :where(n-accordion) {
    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    flex-direction: column;
    border: 1px solid var(--n-border-muted);
    border-radius: var(--n-radius);
    overflow: hidden;
  }

  :where(n-accordion)[aria-disabled="true"] {
    color: var(--n-ink-disabled);
    pointer-events: none;
  }

  /* ── Accordion Item ── */

  :where(n-accordion-item) {
    display: block;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* WHY: Shared borders between items — only top border on non-first items */
  :where(n-accordion-item) + :where(n-accordion-item) {
    border-top: 1px solid var(--n-border-muted);
  }

  /* ── Details (native disclosure) ── */

  :where(n-accordion-item) > :where(details) {
    /* WHY: Allow height animation on native <details> */
    interpolate-size: allow-keywords;
  }

  /* ── Summary (clickable header row) ── */

  :where(n-accordion-item) > :where(details) > :where(summary) {
    display: flex;
    align-items: center;
    gap: var(--n-pad-gap);

    min-height: var(--n-size);
    padding-block: var(--n-pad-block);
    padding-inline: var(--n-pad-inline);

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: var(--n-control-line-height);
    font-weight: var(--n-button-font-weight);
    color: var(--n-ink-strong);

    cursor: pointer;
    list-style: none;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* WHY: Remove default marker in WebKit */
  :where(n-accordion-item) > :where(details) > :where(summary)::-webkit-details-marker {
    display: none;
  }

  :where(n-accordion-item) > :where(details) > :where(summary)::marker {
    display: none;
    content: '';
  }

  /* ── Chevron icon (right side) ── */

  :where(n-accordion-item) > :where(details) > :where(summary)::after {
    content: '';
    flex-shrink: 0;
    margin-inline-start: auto;
    width: var(--n-icon-size);
    height: var(--n-icon-size);

    mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z' fill='currentColor'/%3E%3C/svg%3E");
    mask-size: contain;
    mask-repeat: no-repeat;
    mask-position: center;
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z' fill='currentColor'/%3E%3C/svg%3E");
    -webkit-mask-size: contain;
    -webkit-mask-repeat: no-repeat;
    -webkit-mask-position: center;

    background: var(--n-ink-muted);

    transition:
      transform var(--n-duration) var(--n-easing);
  }

  /* Chevron rotates when open */
  :where(n-accordion-item) > :where(details[open]) > :where(summary)::after {
    transform: rotate(180deg);
  }

  /* ── Summary Hover ── */

  :where(n-accordion-item) > :where(details) > :where(summary):hover,
  :where(n-accordion-item[force-hover]) > :where(details) > :where(summary) {
    background: var(--n-panel-hover);
    color: var(--n-ink-hover);
  }

  /* ── Summary Focus ── */

  :where(n-accordion-item) > :where(details) > :where(summary):focus-visible,
  :where(n-accordion-item[force-focus-visible]) > :where(details) > :where(summary) {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: -2px;
  }

  /* ── Content Panel ── */

  :where(n-accordion-item) > :where(details) > :where([part="content"]) {
    padding-block: calc(var(--n-space) * 2);
    padding-inline: var(--n-pad-inline);

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: var(--n-text-line-height);
    font-weight: var(--n-text-font-weight);
    color: var(--n-ink-muted);
  }

  /* ── Disabled ── */

  :where(n-accordion-item)[aria-disabled="true"] > :where(details) > :where(summary) {
    color: var(--n-ink-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  :where(n-accordion-item)[aria-disabled="true"] > :where(details) > :where(summary)::after {
    background: var(--n-ink-disabled);
  }

  :where(n-accordion[hidden]) { display: none; }

}

.log {
        font-family: monospace;
        font-size: 0.75rem;
        background: var(--n-panel-neutral);
        border-radius: 0.375rem;
        padding: 0.75rem;
        max-height: 10rem;
        overflow-y: auto;
        margin-top: 0.5rem;
      }

@layer ui {

  /* ╭──────────────────────────────────────────────────────────╮
     │  n-audio                                                 │
     │  Audio container. CSS-only — no JS.                      │
     ╰──────────────────────────────────────────────────────────╯ */

  /* ── Base ── */

  :where(n-audio) {
    display: block;
    min-width: 0;
    max-width: 100%;
    overflow: hidden;
    border-radius: var(--n-radius);
  }

  :where(n-audio) > :where(audio) {
    display: block;
    width: 100%;
  }

}

@layer ui {

  /* ╭──────────────────────────────────────────────────────────╮
     │  n-avatar-group                                          │
     │  Overlapping row of avatars. Reverse flex order so       │
     │  DOM-first avatar renders on top (highest z).            │
     ╰──────────────────────────────────────────────────────────╯ */

  /* ── Base ── */

  :where(n-avatar-group) {
    display: flex;
    flex-direction: row-reverse;
    justify-content: flex-end;
    align-items: center;
  }

  :where(n-avatar-group) > :where(n-avatar) {
    margin-inline-start: -0.5rem;
    outline: 2px solid var(--n-ground);
    outline-offset: -1px;
  }

  :where(n-avatar-group) > :where(n-avatar):last-child {
    margin-inline-start: 0;
  }

}

@layer ui {

  /* ── Avatar Base ── */

  :where(n-avatar) {
    --n-font-weight: var(--n-button-font-weight);

    display: inline-flex;
    align-items: center;
    justify-content: center;

    width: var(--n-size);
    height: var(--n-size);

    font-size: calc(var(--n-font-size) * 0.875);
    font-weight: var(--n-font-weight);
    line-height: 1;
    letter-spacing: var(--n-letter-spacing);

    border-radius: var(--n-radius);
    overflow: hidden;

    background: var(--n-surface);
    color: var(--n-surface-ink);

    flex-shrink: 0;
  }

  /* ── Image ── */

  :where(n-avatar) > :where(img) {
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: inherit;
  }

  /* ── Fallback icon ── */

  :where(n-avatar) > :where(n-icon) {
    font-size: calc(var(--n-font-size) * 1.125);
  }

  :where(n-avatar[hidden]) { display: none; }

}

@layer ui {

  /* ── Badge Base ── */

  :where(n-badge) {
    white-space: nowrap;
    --n-font-weight: var(--n-button-font-weight);
    --n-radius: 9999px;

    display: inline-flex;
    align-items: center;
    justify-content: center;

    min-width: calc(var(--n-widget-xs) + var(--n-space));
    min-height: calc(var(--n-widget-xs) + var(--n-space));
    padding-inline: 0.375em;

    font-size: var(--n-widget-font);
    font-weight: var(--n-font-weight);
    line-height: 1;
    letter-spacing: var(--n-letter-spacing);

    border-radius: var(--n-radius);

    background: var(--n-surface);
    color: var(--n-surface-ink);

    flex-shrink: 0;
  }

  /* ── Floating ── */

  :where(n-badge[floating]) {
    position: absolute;
    top: 0;
    right: 0;
    translate: 50% -50%;
    z-index: 1;
  }

  /* ── Dot ── */

  :where(n-badge[dot]) {
    width: var(--n-badge-dot);
    height: var(--n-badge-dot);
    min-width: 0;
    min-height: 0;
    padding: 0;
    font-size: 0;
    background: var(--n-ink);
  }

  :where(n-badge[hidden]) { display: none; }

}

.icon-badge-wrapper {
        position: relative;
        display: inline-flex;
      }

@layer ui {

  :where(n-breadcrumb):not(:defined),
  :where(n-breadcrumb-item):not(:defined) { visibility: hidden; }

  /* ── Breadcrumb Container ── */

  :where(n-breadcrumb) {
    --n-font-weight: var(--n-button-font-weight);
    --n-line-height: var(--n-control-line-height);

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    align-items: center;
    flex-wrap: wrap;
    gap: calc(var(--n-space) * 1);
    font-size: var(--n-font-size);
    line-height: var(--n-line-height);
  }

  /* ── Breadcrumb Item ── */

  :where(n-breadcrumb-item) {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--n-space) * 1);
    color: var(--n-ink-muted);
    text-decoration: none;
    cursor: pointer;

    transition: color var(--n-duration) var(--n-easing);
  }

  :where(n-breadcrumb-item):hover,
  :where(n-breadcrumb-item)[force-hover] {
    color: var(--n-ink);
    text-decoration: underline;
  }

  :where(n-breadcrumb-item):focus-visible,
  :where(n-breadcrumb-item)[force-focus-visible] {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: 2px;
    border-radius: calc(var(--n-radius) * 0.25);
  }

  /* ── Current item ── */

  :where(n-breadcrumb-item[current]) {
    color: var(--n-ink-strong);
    font-weight: var(--n-font-weight);
    cursor: default;
    text-decoration: none;
    pointer-events: none;
  }

  /* ── Separator ── */

  :where(n-breadcrumb-item):not(:last-child)::after {
    content: var(--n-breadcrumb-separator, '/');
    color: var(--n-ink-muted);
    pointer-events: none;
    opacity: 0.5;
  }

  :where(n-breadcrumb[hidden]) { display: none; }

}

@layer ui {

  :where(n-button, n-select):not(:defined) { visibility: hidden; }

  /* ── Base ── */

  :where(n-button, n-select) {
    white-space: nowrap;
    --n-font-weight: var(--n-button-font-weight);
    --n-line-height: var(--n-control-line-height);

    --n-background: var(--n-button);
    --n-background-hover: var(--n-button-hover);
    --n-background-active: var(--n-button-active);
    --n-background-disabled: var(--n-button-disabled);
    --n-color: var(--n-ink);
    --n-color-hover: var(--n-ink-hover);
    --n-color-active: var(--n-ink-active);
    --n-color-disabled: var(--n-ink-disabled);
    --n-border-color: var(--n-border-muted);
    --n-border-color-hover: var(--n-border-hover);
    --n-border-color-active: var(--n-border-active);
    --n-border-color-disabled: transparent;

    appearance: none;
    font: inherit;
    cursor: pointer;
    box-sizing: border-box;

    display: inline-grid;
    vertical-align: middle;
    min-width: 0;
    grid-template-columns: auto;
    grid-auto-flow: column;
    align-items: center;
    justify-content: center;
    justify-items: center;
    gap: var(--n-pad-gap);

    min-height: var(--n-size);
    max-height: var(--n-size);
    padding-block: var(--n-pad-block);
    padding-inline: var(--n-pad-inline);

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: var(--n-line-height);
    font-weight: var(--n-font-weight);

    border-radius: var(--n-radius);
    border: 1px solid var(--n-border-color);

    background: var(--n-background);
    color: var(--n-color);
    overflow: hidden;
    text-overflow: ellipsis;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── States ── */

  :where(n-button, n-select):hover,
  :where(n-button, n-select)[force-hover] {
    background: var(--n-background-hover);
    color: var(--n-color-hover);
    border-color: var(--n-border-color-hover);
  }

  :where(n-button, n-select):active,
  :where(n-button, n-select)[pressed],
  :where(n-button, n-select)[force-active] {
    background: var(--n-background-active);
    color: var(--n-color-active);
    border-color: var(--n-border-color-active);
  }

  :where(n-button, n-select):focus-visible,
  :where(n-button, n-select)[force-focus-visible] {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: 2px;
  }

  :where(n-button, n-select)[aria-disabled="true"] {
    background: var(--n-background-disabled);
    color: var(--n-color-disabled);
    border-color: var(--n-border-color-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  /* ── Slots ── */

  /* WHY: Adaptive grid columns based on which slots are present.
     Empty grid tracks still receive gap, so a 3-column template with
     an unpopulated column creates a phantom gap. Match the template
     to the actual slot combination to avoid this. */

  /* Leading + label (no trailing) — e.g. button with leading icon */
  :where(n-button, n-select):has(> [slot="leading"]):not(:has(> [slot="trailing"])) {
    grid-template-columns: auto 1fr;
  }

  :where(n-button, n-select):has(> [slot="leading"]):not(:has(> [slot="trailing"])) > :where([slot="leading"]) { grid-column: 1; }
  :where(n-button, n-select):has(> [slot="leading"]):not(:has(> [slot="trailing"])) > :where([slot="label"])   { grid-column: 2; }

  /* Label + trailing (no leading) — e.g. n-select with caret */
  :where(n-button, n-select):has(> [slot="trailing"]):not(:has(> [slot="leading"])) {
    grid-template-columns: 1fr auto;
  }

  :where(n-button, n-select):has(> [slot="trailing"]):not(:has(> [slot="leading"])) > :where([slot="label"])    { grid-column: 1; }
  :where(n-button, n-select):has(> [slot="trailing"]):not(:has(> [slot="leading"])) > :where([slot="trailing"]) { grid-column: 2; }

  /* All three: leading + label + trailing */
  :where(n-button, n-select):has(> [slot="leading"]):has(> [slot="trailing"]) {
    grid-template-columns: auto 1fr auto;
  }

  :where(n-button, n-select):has(> [slot="leading"]):has(> [slot="trailing"]) > :where([slot="leading"])  { grid-column: 1; }
  :where(n-button, n-select):has(> [slot="leading"]):has(> [slot="trailing"]) > :where([slot="label"])    { grid-column: 2; }
  :where(n-button, n-select):has(> [slot="leading"]):has(> [slot="trailing"]) > :where([slot="trailing"]) { grid-column: 3; }

  /* ── Justify: spread — label fills, text left-aligned ── */

  /* WHY: Spread mode (dropdown triggers) — label fills available space,
     truncates with ellipsis when width-constrained. */
  :where(n-button, n-select):where([justify="spread"]) > :where([slot="label"]) {
    justify-self: stretch;
    text-align: start;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* ── Icon-side padding compensation ── */
  /* WHY: Icons have built-in whitespace in their bounding box.
     Reduce padding on the icon side so: icon-pad + gap ≈ text-pad. */

  :where(n-button, n-select):has(> [slot="leading"]) {
    padding-inline: var(--n-pad-inline-icon) var(--n-pad-inline);
  }

  :where(n-button, n-select):has(> [slot="trailing"]) {
    padding-inline: var(--n-pad-inline) var(--n-pad-inline-icon);
  }

  :where(n-button, n-select):has(> [slot="leading"]):has(> [slot="trailing"]) {
    padding-inline: var(--n-pad-inline-icon);
  }

  /* ── Icon-only mode ── */

  :where(n-button):where(:has(> n-icon:only-child)) {
    grid-template-columns: auto;
    min-width: var(--n-size);
    padding-inline: var(--n-space);
  }

}

/* ── Attribute API (unlayered) ── */


@layer ui {

  :where(n-calendar):not(:defined) { visibility: hidden; }

  /* ── Calendar Container ── */

  :where(n-calendar) {
    --n-font-weight: var(--n-text-font-weight);
    --n-line-height: var(--n-text-line-height);

    --n-background: var(--n-panel);
    --n-border-color: var(--n-border-muted);
    --n-color: var(--n-ink);

    display: inline-flex;
    flex-direction: column;
    gap: calc(var(--n-space));
    padding-block: calc(var(--n-space) * 2);
    padding-inline: calc(var(--n-space) * 2);
    border: 1px solid var(--n-border-color);
    border-radius: var(--n-radius);
    background: var(--n-background);
    color: var(--n-color);
    font-size: var(--n-font-size);
    outline: none;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  :where(n-calendar)[aria-disabled="true"] {
    color: var(--n-ink-disabled);
    pointer-events: none;
  }

  :where(n-calendar):focus-visible,
  :where(n-calendar)[force-focus-visible] {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: 2px;
  }

  /* ── Header ── */

  :where(n-calendar) :where(.cal-header) {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: calc(var(--n-space));
  }

  /* ── n-button overrides ──
     WHY: Calendar uses n-button for cells and header controls. Override
     n-button defaults for compact, borderless cells with calendar-specific
     state colors. No variant attribute — avoids (0,1,0) primitive specificity. */

  :where(n-calendar) :where(n-button) {
    --n-background: transparent;
    --n-background-hover: var(--n-panel-hover);
    --n-background-active: var(--n-panel-active);
    --n-color: var(--n-ink);
    --n-color-hover: var(--n-ink-hover);
    --n-color-active: var(--n-ink-active);
    --n-border-color: transparent;
    --n-border-color-hover: transparent;
    --n-border-color-active: transparent;
    min-height: 0;
    min-width: 0;
    padding: 0;
    border-radius: calc(var(--n-radius) - var(--n-space));
  }

  /* WHY: force-hover on calendar → trigger n-button hover appearance.
     Custom properties per state already encode correct hover values. */
  :where(n-calendar[force-hover]) :where(n-button):not([aria-disabled="true"]) {
    background: var(--n-background-hover);
    color: var(--n-color-hover);
  }

  /* ── Header: prev/next ── */

  :where(n-calendar) :where(n-button[data-role="prev"], n-button[data-role="next"]) {
    width: calc(var(--n-size) * 0.7);
    height: calc(var(--n-size) * 0.7);
  }

  /* ── Header: title ── */

  :where(n-calendar) :where(n-button[data-role="title"]) {
    flex: 1;
    padding: calc(var(--n-space)) calc(var(--n-space) * 2);
    font-size: var(--n-font-size);
    font-weight: var(--n-button-font-weight);
    letter-spacing: var(--n-letter-spacing);
    --n-color: var(--n-ink-strong);
    text-align: center;
  }

  /* ── Weekday Labels ── */

  :where(n-calendar) :where(.cal-weekdays) {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
  }

  :where(n-calendar) :where(.cal-weekday) {
    display: flex;
    align-items: center;
    justify-content: center;
    height: calc(var(--n-size) * 0.6);
    font-size: calc(var(--n-font-size) * 0.85);
    font-weight: var(--n-button-font-weight);
    color: var(--n-ink-muted);
  }

  /* ── Grid ── */

  :where(n-calendar) :where(.cal-grid) {
    display: grid;
    gap: 1px;
  }

  /* Day view: 7 columns */
  :where(n-calendar[view="day"]) :where(.cal-grid) {
    grid-template-columns: repeat(7, 1fr);
  }

  /* Month view: 4 columns */
  :where(n-calendar[view="month"]) :where(.cal-grid) {
    grid-template-columns: repeat(4, 1fr);
  }

  /* Year view: 4 columns */
  :where(n-calendar[view="year"]) :where(.cal-grid) {
    grid-template-columns: repeat(4, 1fr);
  }

  /* ── Cell Sizing ── */

  /* Day cells: aspect-ratio 1 for square shape */
  :where(n-calendar) :where(n-button[data-date]) {
    aspect-ratio: 1;
    min-width: calc(var(--n-size) * 0.7);
  }

  /* Month/Year cells: wider rectangle */
  :where(n-calendar) :where(n-button[data-month], n-button[data-year]) {
    min-height: calc(var(--n-size) * 0.8);
    padding: calc(var(--n-space)) calc(var(--n-space) * 2);
  }

  /* ── Cell States ── */

  /* Outside month — muted */
  :where(n-calendar) :where(n-button[data-outside]) {
    --n-color: var(--n-ink-muted);
  }

  /* Today — white bg + ink-inverse */
  :where(n-calendar) :where(n-button[data-today]) {
    --n-background: white;
    --n-background-hover: var(--n-panel-hover);
    --n-color: var(--n-ink-inverse);
    --n-color-hover: var(--n-ink-hover);
    font-weight: var(--n-button-font-weight);
    box-shadow: inset 0 0 0 1px var(--n-border-muted);
  }

  /* Selected — accent surface */
  :where(n-calendar) :where(n-button[data-selected]) {
    --n-background: var(--n-surface);
    --n-background-hover: var(--n-surface-hover);
    --n-color: var(--n-surface-ink);
    --n-color-hover: var(--n-surface-ink-hover);
    font-weight: var(--n-button-font-weight);
  }

  /* Disabled */
  :where(n-calendar) :where(n-button[aria-disabled="true"]) {
    --n-color: var(--n-ink-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  /* ── Range States ── */

  :where(n-calendar) :where(n-button[data-in-range]) {
    --n-background: var(--n-surface);
    --n-background-hover: var(--n-surface-hover);
    --n-color: var(--n-surface-ink);
    --n-color-hover: var(--n-surface-ink-hover);
    border-radius: 0;
  }

  :where(n-calendar) :where(n-button[data-range-start]) {
    border-start-start-radius: calc(var(--n-radius) - var(--n-space));
    border-end-start-radius: calc(var(--n-radius) - var(--n-space));
    border-start-end-radius: 0;
    border-end-end-radius: 0;
  }

  :where(n-calendar) :where(n-button[data-range-end]) {
    border-start-start-radius: 0;
    border-end-start-radius: 0;
    border-start-end-radius: calc(var(--n-radius) - var(--n-space));
    border-end-end-radius: calc(var(--n-radius) - var(--n-space));
  }

  :where(n-calendar) :where(n-button[data-range-start][data-range-end]) {
    border-radius: calc(var(--n-radius) - var(--n-space));
  }

}

.output {
        font-family: monospace;
        font-size: 0.75rem;
        color: var(--n-ink-muted-neutral);
        margin-top: 0.75rem;
        padding: 0.5rem;
        background: var(--n-panel-neutral);
        border-radius: 0.25rem;
        min-height: 1.5rem;
      }

@layer ui {

  :where(n-checkbox):not(:defined) { visibility: hidden; }

  /* ── Checkbox Base ── */

  :where(n-checkbox) {
    white-space: nowrap;
    --n-font-weight: var(--n-text-font-weight);
    --n-line-height: var(--n-control-line-height);
    --n-radius: calc(var(--n-space) * 2);

    /* Box size: shared widget scale for toggle controls */
    --n-box-size: var(--n-widget-size);

    --n-background: var(--n-widget);
    --n-background-hover: var(--n-widget-hover);
    --n-background-active: var(--n-widget-active);
    --n-background-disabled: var(--n-widget-disabled);
    --n-color: var(--n-ink);
    --n-color-hover: var(--n-ink-hover);
    --n-color-disabled: var(--n-ink-disabled);
    --n-border-color: var(--n-border-muted);
    --n-border-color-hover: var(--n-border-hover);
    --n-border-color-active: var(--n-border-active);
    --n-border-color-disabled: transparent;

    position: relative;
    display: inline-flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    /* WHY: padding reserves space for the absolutely-positioned box + icon */
    padding-inline-start: calc(var(--n-box-size) + var(--n-space) * 2);
    min-height: var(--n-box-size);

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: var(--n-line-height);
    font-weight: var(--n-font-weight);
    color: var(--n-color);

    cursor: pointer;

    transition:
      color var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing);
  }

  /* ── Checkbox Box (the visual square) ── */
  /* WHY: Absolutely positioned so the text content flows naturally
     after the padding-inline-start gap */

  :where(n-checkbox)::before {
    content: '';
    position: absolute;
    inset-inline-start: 0;
    top: 50%;
    transform: translateY(-50%);
    width: var(--n-box-size);
    height: var(--n-box-size);
    border-radius: var(--n-radius);
    border: 1px solid var(--n-border-color);
    background: var(--n-background);

    transition:
      background var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Check / Dash Icon ── */
  /* WHY: Overlays the box exactly, using mask-image for the icon shape.
     Uses Phosphor Bold weight for better visibility at small sizes. */

  :where(n-checkbox)::after {
    content: '';
    position: absolute;
    inset-inline-start: 0;
    top: 50%;
    transform: translateY(-50%) scale(0);
    width: var(--n-box-size);
    height: var(--n-box-size);

    /* Check mark via mask (Phosphor Bold) */
    mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' fill='currentColor' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z'/%3E%3C/svg%3E");
    mask-size: 75%;
    mask-repeat: no-repeat;
    mask-position: center;
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' fill='currentColor' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z'/%3E%3C/svg%3E");
    -webkit-mask-size: 75%;
    -webkit-mask-repeat: no-repeat;
    -webkit-mask-position: center;

    background: transparent;
    transition:
      background var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Checked State ── */
  /* WHY: Default checked fill uses --n-surface (accent by default via
     intent="accent" being the implicit default for toggle controls).
     When an explicit [intent] is set, the intent selector's --n-surface wins. */

  :where(n-checkbox)[aria-checked="true"]::before {
    background: var(--n-surface);
    border-color: var(--n-surface);
  }

  :where(n-checkbox)[aria-checked="true"]::after {
    background: var(--n-surface-ink);
    transform: translateY(-50%) scale(1);
  }

  /* ── Indeterminate State ── */

  :where(n-checkbox)[aria-checked="mixed"]::before {
    background: var(--n-surface);
    border-color: var(--n-surface);
  }

  :where(n-checkbox)[aria-checked="mixed"]::after {
    mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' fill='currentColor' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M228,128a12,12,0,0,1-12,12H40a12,12,0,0,1,0-24H216A12,12,0,0,1,228,128Z'/%3E%3C/svg%3E");
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' fill='currentColor' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M228,128a12,12,0,0,1-12,12H40a12,12,0,0,1,0-24H216A12,12,0,0,1,228,128Z'/%3E%3C/svg%3E");
    mask-size: 75%;
    -webkit-mask-size: 75%;
    background: var(--n-surface-ink);
    transform: translateY(-50%) scale(1);
  }

  /* ── Hover ── */

  :where(n-checkbox):hover,
  :where(n-checkbox)[force-hover] {
    color: var(--n-color-hover);
  }

  :where(n-checkbox):hover::before,
  :where(n-checkbox)[force-hover]::before {
    background: var(--n-background-hover);
    border-color: var(--n-border-color-hover);
  }

  :where(n-checkbox)[aria-checked="true"]:hover::before,
  :where(n-checkbox)[aria-checked="mixed"]:hover::before,
  :where(n-checkbox)[aria-checked="true"][force-hover]::before,
  :where(n-checkbox)[aria-checked="mixed"][force-hover]::before {
    background: var(--n-surface-hover);
    border-color: var(--n-surface-hover);
  }

  /* ── Active (pressed) ── */

  :where(n-checkbox)[pressed]::before,
  :where(n-checkbox)[force-active]::before {
    background: var(--n-background-active);
    border-color: var(--n-border-color-active);
  }

  :where(n-checkbox)[aria-checked="true"][pressed]::before,
  :where(n-checkbox)[aria-checked="mixed"][pressed]::before,
  :where(n-checkbox)[aria-checked="true"][force-active]::before,
  :where(n-checkbox)[aria-checked="mixed"][force-active]::before {
    background: var(--n-surface-active);
    border-color: var(--n-surface-active);
  }

  /* ── Focus ── */

  :where(n-checkbox):focus-visible::before,
  :where(n-checkbox)[force-focus-visible]::before {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: 2px;
  }

  /* ── Disabled ── */

  :where(n-checkbox)[aria-disabled="true"] {
    color: var(--n-color-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  :where(n-checkbox)[aria-disabled="true"]::before {
    background: var(--n-background-disabled);
    border-color: var(--n-border-color-disabled);
  }

  :where(n-checkbox)[aria-disabled="true"][aria-checked="true"]::before,
  :where(n-checkbox)[aria-disabled="true"][aria-checked="mixed"]::before {
    background: var(--n-surface-disabled);
    border-color: var(--n-surface-disabled);
  }

  :where(n-checkbox)[aria-disabled="true"]::after {
    background: var(--n-surface-ink-disabled);
  }

}

.demo-col {
        display: flex;
        flex-direction: column;
        gap: 0.75rem;
      }

@layer ui {

  :where(n-combobox):not(:defined) { visibility: hidden; }

  /* ── Coordinator — no visual presence ── */

  :where(n-combobox) {
    white-space: nowrap;
    display: contents;
  }

  /* Hide listbox until JS upgrades it with [popover] */
  :where(n-combobox) > :where(n-listbox:not([popover])) {
    display: none;
  }

  /* WHY: The input acts as a dropdown trigger — default cursor at rest,
     text cursor once focused (typing to filter). */

  :where(n-combobox) > :where(n-input) {
    cursor: default;
  }

  :where(n-combobox) > :where(n-input):focus-within {
    cursor: text;
  }

  /* ── Popover Listbox Positioning ──
     WHY: Must come after n-listbox.css base rule (which sets min-width: 0
     for flex-child shrinking) so min-width: anchor-size(inline) wins by
     source order — both are zero-specificity via :where(). */

  :where(n-combobox) > :where(n-listbox[popover]) {
    position: fixed;
    position-area: block-end span-inline-end;
    position-try-fallbacks: flip-block;
    margin-block: var(--n-popover-viewport-margin);
    margin-inline: 0;
    margin-block-start: var(--n-popover-gap);
    min-width: anchor-size(inline);
    max-height: var(--n-popover-max-height);
    overflow-y: auto;
  }

}

@layer ui {

  :where(n-command, n-command-empty, n-command-group, n-command-input, n-command-item, n-command-list):not(:defined) { visibility: hidden; }

  /* ── Command Container ── */

  :where(n-command) {
    --n-background: var(--n-popover);
    --n-color: var(--n-ink);
    --n-border-color: var(--n-border-rest);

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    flex-direction: column;
    border-radius: var(--n-radius);
    border: 1px solid var(--n-border-color);
    background: var(--n-background);
    color: var(--n-color);
    overflow: hidden;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  :where(n-command)[aria-disabled="true"] {
    color: var(--n-ink-disabled);
    pointer-events: none;
  }

  /* ── Command Input ── */

  :where(n-command-input) {
    display: flex;
    align-items: center;
    gap: var(--n-pad-gap);
    min-height: var(--n-size);
    padding-inline: var(--n-pad-inline);
    border-bottom: 1px solid var(--n-border-color);
  }

  :where(n-command-input) :where(input) {
    flex: 1;
    appearance: none;
    border: none;
    background: transparent;
    color: inherit;
    font-size: var(--n-font-size);
    font-weight: var(--n-font-weight);
    line-height: var(--n-line-height);
    letter-spacing: var(--n-letter-spacing);
    outline: none;
    min-width: 0;
  }

  :where(n-command-input) :where(input)::placeholder {
    color: var(--n-ink-placeholder);
  }

  /* ── Command List ── */

  :where(n-command-list) {
    overflow-y: auto;
    max-height: var(--n-popover-max-height);
    padding-block: var(--n-space);
    padding-inline: var(--n-space);
    scrollbar-width: thin;
    scrollbar-color: var(--n-border-muted-neutral) transparent;
  }

  /* ── Command Group ── */

  :where(n-command-group) {
    display: flex;
    flex-direction: column;
  }

  :where(n-command-group) + :where(n-command-group) {
    margin-block-start: calc(var(--n-space) * 2);
  }

  :where(n-command-group) > :where([slot="heading"]) {
    display: flex;
    align-items: center;
    min-height: var(--n-size);
    padding-inline: var(--n-pad-inline);
    font-size: var(--n-group-header-font);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    line-height: var(--n-control-line-height);
    color: var(--n-ink-muted);
    cursor: default;
  }

  /* ── Command Empty ── */

  :where(n-command-empty) {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: calc(var(--n-size) * 2);
    color: var(--n-ink-muted);
    font-size: var(--n-font-size);
  }

  /* ── Popover hidden guard ── */
  /* WHY: author display: flex overrides UA display: none on [popover] */

  :where(n-command[popover]):not(:popover-open) {
    display: none;
  }

  /* ── Hidden ── */

  :where(n-command)[hidden] {
    display: none;
  }

  /* ── Auto-hide logic ── */

  :where(n-command-group):where(:not(:has(n-command-item:not([hidden])))) {
    display: none;
  }

}

.demo-grid {
        display: grid;
        grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
        gap: 1.5rem;
        align-items: start;
      }

      .demo-col {
        display: flex;
        flex-direction: column;
        gap: 0.5rem;
      }

      .demo-col-label {
        font-size: 0.625rem;
        font-weight: 600;
        text-transform: uppercase;
        letter-spacing: 0.04em;
        color: var(--n-ink-muted-neutral);
      }
.shortcut {
        font-family: ui-monospace, monospace;
        font-size: 0.625rem;
        background: var(--n-panel-neutral);
        border: 1px solid var(--n-border-muted-neutral);
        border-radius: 0.25rem;
        padding: 0.125rem 0.375rem;
        margin-left: auto;
        color: var(--n-ink-muted-neutral);
      }

/* ─────────────────────────────────────────────────────────
   n-controller
   Structural trait provider — no visual footprint
   ───────────────────────────────────────────────────────── */

@layer ui {

  :where(n-controller):not(:defined) { visibility: hidden; }

  :where(n-controller) {
    display: contents;
  }
}

/* ── Pattern Badges ── */

.pattern-badge {
  display: inline-block;
  font-size: 0.625rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding: 0.125rem 0.5rem;
  border-radius: 9999px;
  margin-left: 0.5rem;
  vertical-align: middle;
}

.pattern-badge.injection {
  background: var(--n-surface-accent);
  color: var(--n-surface-ink-accent);
}

.pattern-badge.provider {
  background: var(--n-surface-info);
  color: var(--n-surface-ink-info);
}

/* ── Hover/Press demo items ── */

.demo-card {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.25rem 1rem;
  background: var(--n-panel-neutral);
  border: 1px solid var(--n-border-muted-neutral);
  border-radius: 0.375rem;
  font-size: 0.875rem;
  color: var(--n-ink-neutral);
  transition: background 200ms ease, border-color 200ms ease, color 200ms ease, box-shadow 200ms ease, transform 100ms ease;
  user-select: none;
  cursor: default;
}

.demo-card[hovered] {
  background: var(--n-surface-accent);
  border-color: var(--n-border-accent);
  color: var(--n-surface-ink-accent);
  box-shadow: 0 0 0 3px var(--n-surface-accent);
}

.demo-card[pressed] {
  background: var(--n-surface-accent);
  border-color: var(--n-border-accent);
  color: var(--n-surface-ink-accent);
  transform: scale(0.97);
}

/* ── Drag items ── */

.drag-item {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.625rem 0.75rem;
  background: var(--n-panel-neutral);
  border: 1px solid var(--n-border-muted-neutral);
  border-radius: 0.375rem;
  cursor: grab;
  user-select: none;
  transition: opacity 150ms ease;
}

.drag-item[dragging] {
  opacity: 0.3;
}

.drag-item .handle {
  color: var(--n-ink-muted-neutral);
  font-size: 0.875rem;
}

.drag-item .label {
  flex: 1;
}

.drag-placeholder {
  height: 3px;
  background: var(--n-surface-accent);
  border-radius: 2px;
  margin: 0.125rem 0;
}

/* ── Drag horizontal cards ── */

.drag-card {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 5rem;
  height: 5rem;
  background: var(--n-surface-accent);
  color: var(--n-surface-ink-accent);
  border-radius: 0.5rem;
  font-weight: 700;
  cursor: grab;
  user-select: none;
  transition: opacity 150ms ease;
}

.drag-card[dragging] {
  opacity: 0.3;
}

#drag-horiz-list > .drag-placeholder {
  width: 3px;
  height: 5rem;
  margin: 0 0.125rem;
}

/* ── Resizable ── */

.resize-box {
  position: relative;
  width: 240px;
  min-height: 120px;
  padding: 1rem;
  padding-right: 1.5rem;
  background: var(--n-panel-neutral);
  border: 1px solid var(--n-border-muted-neutral);
  border-radius: 0.375rem;
  font-size: 0.8125rem;
  color: var(--n-ink-neutral);
  overflow: hidden;
}

.resize-handle {
  position: absolute;
  right: 0;
  top: 0;
  width: 8px;
  height: 100%;
  cursor: col-resize;
  background: transparent;
  transition: background 150ms ease;
}

.resize-handle:hover,
.resize-box[resizing] .resize-handle {
  background: var(--n-surface-accent);
}

.resize-box-v {
  position: relative;
  width: 100%;
  height: 120px;
  padding: 1rem;
  padding-bottom: 1.5rem;
  background: var(--n-panel-neutral);
  border: 1px solid var(--n-border-muted-neutral);
  border-radius: 0.375rem;
  font-size: 0.8125rem;
  color: var(--n-ink-neutral);
  overflow: hidden;
}

.resize-handle-v {
  position: absolute;
  bottom: 0;
  left: 0;
  height: 8px;
  width: 100%;
  cursor: row-resize;
  background: transparent;
  transition: background 150ms ease;
}

.resize-handle-v:hover,
.resize-box-v[resizing] .resize-handle-v {
  background: var(--n-surface-accent);
}

/* ── Selectable ── */

.select-item {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.5rem 0.75rem;
  background: var(--n-panel-neutral);
  border: 1px solid var(--n-border-muted-neutral);
  border-radius: 0.375rem;
  font-size: 0.8125rem;
  cursor: pointer;
  user-select: none;
  transition: background 150ms ease, border-color 150ms ease;
}

.select-item[aria-selected="true"] {
  background: var(--n-surface-accent);
  border-color: var(--n-border-accent);
  color: var(--n-surface-ink-accent);
}

.select-item::before {
  content: '';
  width: 1rem;
  height: 1rem;
  border: 2px solid var(--n-border-neutral);
  border-radius: 0.25rem;
  flex-shrink: 0;
  transition: background 150ms ease, border-color 150ms ease;
}

.select-item[aria-selected="true"]::before {
  background: var(--n-ink-accent);
  border-color: var(--n-ink-accent);
}

/* ── Editable ── */

.edit-item {
  padding: 0.5rem 0.75rem;
  background: var(--n-panel-neutral);
  border: 1px solid var(--n-border-muted-neutral);
  border-radius: 0.375rem;
  font-size: 0.875rem;
  cursor: text;
  transition: border-color 150ms ease, box-shadow 150ms ease;
}

.edit-item[editing] {
  border-color: var(--n-border-accent);
  box-shadow: 0 0 0 3px var(--n-surface-accent);
  outline: none;
}

/* ── Copyable ── */

.copy-item {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.625rem 0.75rem;
  background: var(--n-panel-neutral);
  border: 1px solid var(--n-border-muted-neutral);
  border-radius: 0.375rem;
  font-family: ui-monospace, monospace;
  font-size: 0.8125rem;
  cursor: pointer;
  user-select: all;
  transition: border-color 200ms ease;
}

.copy-item[copied] {
  border-color: var(--n-border-success);
}

.copy-item .copy-label {
  flex: 1;
}

.copy-item .copy-feedback {
  font-size: 0.6875rem;
  font-weight: 600;
  color: var(--n-ink-success);
  opacity: 0;
  transition: opacity 200ms ease;
}

.copy-item[copied] .copy-feedback {
  opacity: 1;
}

/* ── Sortable table ── */

.sort-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.8125rem;
}

.sort-table th {
  text-align: left;
  font-weight: 600;
  padding: 0.5rem 0.75rem;
  border-bottom: 2px solid var(--n-border-muted-neutral);
  color: var(--n-ink-strong-neutral);
  cursor: pointer;
  user-select: none;
  transition: color 150ms ease;
}

.sort-table th:hover {
  color: var(--n-ink-accent);
}

.sort-table th[aria-sort]::after {
  margin-left: 0.25rem;
  font-size: 0.625rem;
}

.sort-table th[aria-sort="ascending"]::after {
  content: ' \u25B2';
}

.sort-table th[aria-sort="descending"]::after {
  content: ' \u25BC';
}

.sort-table td {
  padding: 0.5rem 0.75rem;
  border-bottom: 1px solid var(--n-border-muted-neutral);
}

/* ── Collapsible ── */

.collapse-trigger {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  padding: 0.75rem;
  background: var(--n-panel-neutral);
  border: 1px solid var(--n-border-muted-neutral);
  border-radius: 0.375rem 0.375rem 0 0;
  cursor: pointer;
  user-select: none;
  font-weight: 600;
  font-size: 0.875rem;
}

.collapse-trigger .arrow {
  transition: transform 200ms ease;
}

.collapse-trigger[collapsed] .arrow {
  transform: rotate(-90deg);
}

.collapse-content {
  padding: 0.75rem;
  background: var(--n-body-neutral);
  border: 1px solid var(--n-border-muted-neutral);
  border-top: none;
  border-radius: 0 0 0.375rem 0.375rem;
  font-size: 0.8125rem;
  color: var(--n-ink-muted-neutral);
  overflow: hidden;
}

/* ── Swipeable ── */

.swipe-card {
  position: relative;
  padding: 1.5rem 1rem;
  background: var(--n-panel-neutral);
  border: 1px solid var(--n-border-muted-neutral);
  border-radius: 0.375rem;
  font-size: 0.875rem;
  text-align: center;
  user-select: none;
  touch-action: pan-y;
  overflow: hidden;
}

.swipe-indicator {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  margin-top: 0.75rem;
  font-size: 0.75rem;
  color: var(--n-ink-muted-neutral);
}

.swipe-dot {
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 50%;
  background: var(--n-border-muted-neutral);
  transition: background 200ms ease;
}

.swipe-dot.active {
  background: var(--n-ink-accent);
}

/* ── Flex containers ── */

.flex-col {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.flex-row {
  display: flex;
  gap: 0.5rem;
  flex-wrap: wrap;
}

/* ── Output log ── */

.output {
  font-family: monospace;
  font-size: 0.75rem;
  color: var(--n-ink-muted-neutral);
  max-height: 6rem;
  overflow-y: auto;
  margin-top: 0.75rem;
  padding: 0.5rem;
  background: var(--n-panel-neutral);
  border-radius: 0.25rem;
}

/* ── Dynamic children demo ── */

#dynamic-list .demo-card {
  padding: 0.625rem 0.75rem;
}

.demo-hint {
  font-size: 0.75rem;
  color: var(--n-ink-muted-neutral);
  margin-bottom: 0.75rem;
}
.demo-output {
  font-family: var(--n-font-mono);
  font-size: 0.8125rem;
  padding: 0.75rem 1rem;
  background: var(--n-panel-neutral);
  border: 1px solid var(--n-border-muted-neutral);
  border-radius: 0.375rem;
  min-height: 2rem;
}
.demo-log {
  font-family: var(--n-font-mono);
  font-size: 0.75rem;
  padding: 0.5rem 0.75rem;
  background: var(--n-control-neutral);
  border: 1px solid var(--n-border-muted-neutral);
  border-radius: 0.375rem;
  max-height: 8rem;
  overflow-y: auto;
  color: var(--n-ink-muted-neutral);
}

@layer ui {

  :where(n-dialog):not(:defined) { visibility: hidden; }

  :where(n-dialog) {
    display: contents;
  }

  /* ── Dialog (native <dialog> reset) ──
     WHY: Override UA <dialog> styles (border, padding, dimensions).
     CSS custom properties inherit from :root through the DOM tree normally —
     top-layer rendering promotion does NOT break inheritance. */

  :where(n-dialog) > :where(dialog) {
    border: none;
    border-radius: 0;
    background: transparent;
    color: var(--n-ink);
    padding: 0;
    width: 100vw;
    max-width: 100vw;
    height: 100vh;
    max-height: 100vh;
    overflow: hidden;
    overscroll-behavior: contain;
    display: grid;
    place-items: center;
  }

  /* WHY: Author-layer display:grid overrides UA dialog:not([open]) display:none */
  :where(n-dialog) > :where(dialog):not([open]) {
    display: none;
  }

  :where(n-dialog) > :where(dialog)::backdrop {
    background: var(--n-backdrop-color);
    opacity: var(--n-backdrop-opacity);
  }

  /* ── Sizing API ──
     WHY: Host pages set width and box-shadow directly on article/n-container inside n-dialog.
     Expose custom properties so consumers can set these declaratively on n-dialog
     without reaching into children. */

  :where(n-dialog) > :where(dialog) > :where(*) {
    width: var(--n-dialog-width, auto);
    box-shadow: var(--n-dialog-shadow, none);
  }

  /* ── Command Dialog ──
     WHY: Align to top so n-command stays at a fixed y-position
     and doesn't shift as the list filters/shrinks. */

  :where(n-dialog:has(n-command)) > :where(dialog) {
    place-items: start center;
  }

}

n-dialog > article {
        width: min(28rem, calc(100vw - 2rem));
        box-shadow:
          0 8px 30px oklch(0% 0 0 / 0.12),
          0 2px 8px oklch(0% 0 0 / 0.06);
      }

@layer ui {

  :where(n-drawer):not(:defined) { visibility: hidden; }

  :where(n-drawer) {
    display: contents;
  }

  /* ── Dialog (native <dialog> reset) ──
     WHY: Override UA <dialog> styles (border, padding, dimensions).
     CSS custom properties inherit from :root through the DOM tree normally —
     top-layer rendering promotion does NOT break inheritance. */

  :where(n-drawer) > :where(dialog) {
    border: none;
    border-radius: 0;
    background: transparent;
    color: var(--n-ink);
    padding: 0;
    width: 100vw;
    max-width: 100vw;
    height: 100vh;
    max-height: 100vh;
    overflow: hidden;
    overscroll-behavior: contain;
    display: grid;
    place-items: stretch end;
  }

  /* WHY: Author-layer display:grid overrides UA dialog:not([open]) display:none */
  :where(n-drawer) > :where(dialog):not([open]) {
    display: none;
  }

  /* ── Backdrop ── */
  /* WHY: Animate backdrop opacity on open for a smooth reveal. */

  :where(n-drawer) > :where(dialog)::backdrop {
    background: var(--n-backdrop-color);
    opacity: var(--n-backdrop-opacity);
    animation: drawer-backdrop-in var(--n-duration) ease-out;
  }

  @keyframes drawer-backdrop-in {
    from { opacity: 0; }
    to   { opacity: 1; }
  }

  /* ── Drawer panel (child of dialog) ── */

  :where(n-drawer) > :where(dialog) > :where(n-drawer-panel) {
    display: flex;
    flex-direction: column;
    min-height: 0;
    background: var(--n-panel);
    overflow: hidden;
    box-shadow: var(--n-shadow-lg);
  }

  /* ── Sub-containers ── */
  /* WHY: When n-body is used inside a drawer, the panel delegates
     overflow to the body and adds contextual dividers. */

  :where(n-drawer) :where(n-drawer-panel):has(> n-body) {
    overflow: hidden;
  }
  :where(n-drawer) :where(n-drawer-panel) > :where(n-body) {
    overflow-y: auto;
    scrollbar-width: none;
  }

  :where(n-drawer) :where(n-drawer-panel) > :where(n-header) {
    border-block-end: 1px solid var(--n-border-muted);
  }

  :where(n-drawer) :where(n-drawer-panel) > :where(n-footer) {
    border-block-start: 1px solid var(--n-border-muted);
  }

  /* ── Sub-containers (n-header / n-body / n-footer) ── */
  /* WHY: Sub-container elements work inside drawer panels.
     Structured mode activates when n-header or n-footer is present. */

  :where(n-drawer) :where(n-drawer-panel):has(> n-header, > n-footer) {
    overflow: hidden;
  }

  :where(n-drawer) :where(n-drawer-panel):has(> n-header, > n-footer) > :where(n-body) {
    flex: 1 1 0%;
    overflow-y: auto;
    scrollbar-width: none;
  }

  :where(n-drawer) :where(n-drawer-panel) > :where(n-header) {
    display: grid;
    grid-template-columns: 1fr;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    min-height: calc(var(--n-size) + var(--n-space) * 2);
    padding-block: var(--n-space);
    padding-inline: calc(var(--n-space) * 4);
    font-weight: var(--n-button-font-weight);
    color: var(--n-ink-strong);
    border-block-end: 1px solid var(--n-border-muted);
    min-width: 0;
    box-sizing: border-box;
  }

  /* Adaptive grid on header — nav/aside */
  :where(n-drawer) :where(n-drawer-panel) > :where(n-header):has(> nav):has(> aside) {
    grid-template-columns: auto 1fr minmax(0, auto);
  }
  :where(n-drawer) :where(n-drawer-panel) > :where(n-header):has(> nav):not(:has(> aside)) {
    grid-template-columns: auto 1fr;
  }
  :where(n-drawer) :where(n-drawer-panel) > :where(n-header):not(:has(> nav)):has(> aside) {
    grid-template-columns: 1fr minmax(0, auto);
  }
  :where(n-drawer) :where(n-drawer-panel) > :where(n-header) > :where(nav) {
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
  }
  :where(n-drawer) :where(n-drawer-panel) > :where(n-header) > :where(aside) {
    grid-column: -1;
    display: flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    min-width: 0;
    overflow: hidden;
  }

  :where(n-drawer) :where(n-drawer-panel) > :where(n-footer) {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: calc(var(--n-space) * 2);
    min-height: calc(var(--n-size) + var(--n-space) * 2);
    padding-block: var(--n-space);
    padding-inline: calc(var(--n-space) * 4);
    min-width: 0;
    box-sizing: border-box;
    border-block-start: 1px solid var(--n-border-muted);
  }

  /* ── Side: right (default) ── */

  :where(n-drawer) > :where(dialog) > :where(n-drawer-panel) {
    width: min(var(--n-drawer-width), 90vw);
    height: 100%;
    animation: drawer-slide-right var(--n-duration) ease-out;
  }

  /* ── Side: left ── */

  :where(n-drawer[side="left"]) > :where(dialog) {
    place-items: stretch start;
  }

  :where(n-drawer[side="left"]) > :where(dialog) > :where(n-drawer-panel) {
    animation-name: drawer-slide-left;
  }

  /* ── Side: top ── */

  :where(n-drawer[side="top"]) > :where(dialog) {
    place-items: start stretch;
  }

  :where(n-drawer[side="top"]) > :where(dialog) > :where(n-drawer-panel) {
    animation-name: drawer-slide-top;
  }

  :where(n-drawer[side="top"]) > :where(dialog) > :where(n-drawer-panel),
  :where(n-drawer[side="bottom"]) > :where(dialog) > :where(n-drawer-panel) {
    width: 100%;
    height: min(var(--n-drawer-height), 90vh);
  }

  /* ── Side: bottom ── */

  :where(n-drawer[side="bottom"]) > :where(dialog) {
    place-items: end stretch;
  }

  :where(n-drawer[side="bottom"]) > :where(dialog) > :where(n-drawer-panel) {
    animation-name: drawer-slide-bottom;
  }

  /* ── Slide animations ──
     WHY: Each side animates from its edge direction using transform.
     Transform is GPU-composited — no layout thrash. */

  @keyframes drawer-slide-right {
    from { transform: translateX(100%); }
    to   { transform: translateX(0); }
  }

  @keyframes drawer-slide-left {
    from { transform: translateX(-100%); }
    to   { transform: translateX(0); }
  }

  @keyframes drawer-slide-top {
    from { transform: translateY(-100%); }
    to   { transform: translateY(0); }
  }

  @keyframes drawer-slide-bottom {
    from { transform: translateY(100%); }
    to   { transform: translateY(0); }
  }

  /* ── Reduced motion ── */

  @media (prefers-reduced-motion: reduce) {
    :where(n-drawer) > :where(dialog)::backdrop,
    :where(n-drawer) > :where(dialog) > :where(n-drawer-panel) {
      animation-duration: 0.01ms;
    }
  }

}

.feed-demo {
  height: 300px;
  border: 1px solid var(--n-border);
  border-radius: var(--n-radius);
  display: flex;
  flex-direction: column;
}

.feed-item {
  padding: 0.75rem 1rem;
  background: var(--n-surface);
  border-radius: var(--n-radius);
  font-size: var(--n-font-size);
}

.feed-item:nth-child(odd) {
  background: var(--n-surface-raised);
}

.feed-controls {
  display: flex;
  gap: 0.5rem;
  align-items: center;
}

#pin-status {
  font-size: var(--n-font-size-sm);
  color: var(--n-text-muted);
}

@layer ui {

  /* ══════════════════════════════════════════════════════════════════
     <n-feed> — Generic scrollable feed container
     Flex column with auto-scroll, bottom-anchoring, and optional
     virtual scroll. Use `align="end"` for chat-style bottom-anchored
     layouts where new content pushes from the bottom.
     ══════════════════════════════════════════════════════════════════ */

  :where(n-feed):not(:defined) { visibility: hidden; }

  :where(n-feed) {
    --n-feed-gap: calc(var(--n-space) * 2);

    display: flex;
    flex-direction: column;
    gap: var(--n-feed-gap);
    flex: 1 1 0%;
    min-height: 0;
    min-width: 0;
    overflow: hidden;
  }

  /* Virtual scroll container */
  :where(n-feed) > :where(.n-feed-virtual-container) {
    display: flex;
    flex-direction: column;
    gap: var(--n-feed-gap);
  }

  :where(n-feed) :where(.n-virtual-spacer-top),
  :where(n-feed) :where(.n-virtual-spacer-bottom) {
    flex-shrink: 0;
  }

  :where(n-feed[hidden]) { display: none; }

}

/* ══════════════════════════════════════════════════════════════════
   Attribute API (unlayered)
   ══════════════════════════════════════════════════════════════════ */

/* Bottom-anchored: content pushed to end (chat / activity feeds) */
:where(n-feed)[align="end"] {
  justify-content: flex-end;
}

/* Opt-in scroll container */
:where(n-feed)[scroll] {
  overflow-x: hidden;
  overflow-y: auto;
  scrollbar-width: thin;
  scroll-behavior: smooth;
}

@layer ui {

  :where(n-field):not(:defined) { visibility: hidden; }

  /* ── Field Base ── */

  :where(n-field) {
    --n-font-weight: var(--n-button-font-weight);
    --n-line-height: var(--n-control-line-height);

    display: flex;
    flex: 0 1 0%;
    min-width: 0;
    flex-direction: column;
    gap: var(--n-field-gap, calc(var(--n-space) * 2));
  }

  /* ── Label ── */

  :where(n-field) > :where([slot="label"]) {
    font-size: var(--n-font-size);
    font-weight: var(--n-font-weight);
    line-height: var(--n-line-height);
    color: var(--n-ink-strong);
    cursor: default;
  }

  /* Required asterisk */

  :where(n-field[required]) > :where([slot="label"])::after {
    content: ' *';
    color: var(--n-ink-muted);
  }

  /* ── Description ── */

  :where(n-field) > :where([slot="description"]) {
    font-size: calc(var(--n-font-size) * 0.875);
    line-height: 1.4;
    color: var(--n-ink-muted);
  }

  /* ── Error ── */

  :where(n-field) > :where([slot="error"]) {
    font-size: calc(var(--n-font-size) * 0.875);
    line-height: 1.4;
    color: var(--n-ink-muted);
    display: none;
  }

  :where(n-field[invalid]) > :where([slot="error"]) {
    display: block;
  }

  /* ── Disabled ── */

  :where(n-field[aria-disabled="true"]) > :where([slot="label"]) {
    color: var(--n-ink-disabled);
    cursor: not-allowed;
  }

  :where(n-field[aria-disabled="true"]) > :where([slot="description"]) {
    color: var(--n-ink-disabled);
  }

  :where(n-field[hidden]) { display: none; }

}

/* ── Attribute API (unlayered) ── */

:where(n-field)[gap="none"] { gap: 0; }
:where(n-field)[gap="tight"] { gap: var(--n-space); }
:where(n-field)[gap="relaxed"] { gap: calc(var(--n-space) * 4); }

/* ─────────────────────────────────────────────────────
   n-gripper
   Popover + Anchor-positioned manipulation handle.
   ───────────────────────────────────────────────────── */

@layer ui {

  :where(n-gripper):not(:defined) { visibility: hidden; }

  /* Popover hidden-state guard (author display vs UA display) */
  :where(n-gripper[popover]):not(:popover-open) { display: none; }

  :where(n-gripper) {
    position: fixed;
    margin: 0;
    padding: 0;
    border: none;
    background: transparent;
    touch-action: none;
  }

  /* ── Edge handles ── */

  :where(n-gripper[mode="resize-horizontal"]) {
    width: 8px;
    cursor: col-resize;
  }

  :where(n-gripper[mode="resize-vertical"]) {
    height: 8px;
    cursor: row-resize;
  }

  /* ── Corner handle ── */

  :where(n-gripper[mode="resize-corner"]) {
    width: 12px;
    height: 12px;
  }

  :where(n-gripper[mode="resize-corner"][placement="bottom-end"]),
  :where(n-gripper[mode="resize-corner"][placement="top-start"]) {
    cursor: nwse-resize;
  }

  :where(n-gripper[mode="resize-corner"][placement="bottom-start"]),
  :where(n-gripper[mode="resize-corner"][placement="top-end"]) {
    cursor: nesw-resize;
  }

  /* ── Visual indicator ── */

  :where(n-gripper)::after {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: 9999px;
    background: var(--n-ink-muted);
    opacity: 0;
    transition: opacity var(--n-duration) var(--n-easing);
    pointer-events: none;
  }

  :where(n-gripper[mode="resize-horizontal"])::after {
    inset-inline: 3px;
  }

  :where(n-gripper[mode="resize-vertical"])::after {
    inset-block: 3px;
  }

  :where(n-gripper):hover::after,
  :where(n-gripper[gripping])::after {
    opacity: 1;
  }

  /* ── Disabled ── */

  :where(n-gripper)[disabled] {
    pointer-events: none;
  }

  :where(n-gripper[hidden]) { display: none; }

}

.demo-target {
  background: var(--n-panel);
  border: 1px solid var(--n-border-muted);
  border-radius: var(--n-radius);
  padding: 1rem;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.875rem;
  color: var(--n-ink-muted);
  anchor-name: none; /* let the gripper set this */
}
.demo-overflow {
  overflow: hidden;
  border: 2px dashed var(--n-border-muted);
  border-radius: var(--n-radius);
  padding: 1rem;
  position: relative;
}
.demo-readout {
  font-size: 0.8125rem;
  color: var(--n-ink-muted);
  margin-block-start: 0.5rem;
  font-variant-numeric: tabular-nums;
}

@layer ui {

  :where(n-input-otp):not(:defined) { visibility: hidden; }

  /* ── OTP Base ── */

  :where(n-input-otp) {
    --n-font-weight: var(--n-button-font-weight);
    --n-line-height: var(--n-control-line-height);
    --n-background: transparent;
    --n-border-color: var(--n-border);
    --n-border-color-hover: var(--n-border-hover);
    --n-border-color-disabled: transparent;
    --n-color: var(--n-ink);
    --n-color-disabled: var(--n-ink-disabled);

    display: inline-flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
  }

  /* ── Cell ── */

  :where(n-input-otp) > :where(.n-otp-cell) {
    display: flex;
    align-items: center;
    justify-content: center;

    width: var(--n-size);
    height: var(--n-size);

    font-size: var(--n-font-size);
    font-weight: var(--n-font-weight);
    line-height: var(--n-line-height);
    letter-spacing: var(--n-letter-spacing);
    color: var(--n-color);
    text-align: center;

    border: 1px solid var(--n-border-color);
    border-radius: var(--n-radius);
    background: var(--n-background);

    cursor: text;
    caret-color: transparent;
    outline: none;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Cell hover ── */

  :where(n-input-otp):not([aria-disabled="true"]) > :where(.n-otp-cell):hover,
  :where(n-input-otp[force-hover]):not([aria-disabled="true"]) > :where(.n-otp-cell) {
    border-color: var(--n-border-color-hover);
  }

  /* ── Cell focus ── */

  :where(n-input-otp) > :where(.n-otp-cell):focus,
  :where(n-input-otp[force-focus]) > :where(.n-otp-cell) {
    border-color: var(--n-focus-ring);
    outline: 1px solid var(--n-focus-ring);
    outline-offset: 0;
  }

  /* ── Caret blink on focused empty cell ── */

  :where(n-input-otp) > :where(.n-otp-cell[data-empty]):focus::after,
  :where(n-input-otp[force-focus]) > :where(.n-otp-cell[data-empty])::after {
    content: '';
    width: 1px;
    height: 1.2em;
    background: var(--n-color);
    animation: n-otp-blink 1s step-end infinite;
  }

  @keyframes n-otp-blink {
    50% { opacity: 0; }
  }

  /* ── Mask mode ── */

  :where(n-input-otp[mask]) > :where(.n-otp-cell:not([data-empty]))::after {
    content: '';
    width: 0.5em;
    height: 0.5em;
    border-radius: 50%;
    background: currentColor;
  }

  :where(n-input-otp[mask]) > :where(.n-otp-cell) {
    color: transparent;
  }

  /* ── Disabled ── */

  :where(n-input-otp[aria-disabled="true"]) > :where(.n-otp-cell) {
    color: var(--n-color-disabled);
    border-color: var(--n-border-color-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  :where(n-input-otp[hidden]) { display: none; }

}

@layer ui {

  :where(n-input):not(:defined) { visibility: hidden; }

  /* ── Input Base ── */

  :where(n-input) {
    --n-font-weight: var(--n-input-font-weight);
    --n-line-height: var(--n-control-line-height);

    --n-background: var(--n-control);
    --n-background-hover: var(--n-control-hover);
    --n-background-active: var(--n-control-active);
    --n-background-disabled: var(--n-control-disabled);
    --n-color: var(--n-ink);
    --n-color-hover: var(--n-ink-hover);
    --n-color-disabled: var(--n-ink-disabled);
    --n-border-color: var(--n-border-rest);
    --n-border-color-hover: var(--n-border-muted);
    --n-border-color-disabled: transparent;

    display: inline-flex;
    vertical-align: middle;
    box-sizing: border-box;
    min-width: 0;
    align-items: center;
    gap: var(--n-pad-gap);

    min-height: var(--n-size);
    max-height: var(--n-size);
    padding-inline: var(--n-pad-inline);

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    /* WHY: line-height matches min-height (minus border) to vertically center text in contenteditable */
    line-height: calc(var(--n-size) - 2px);
    font-weight: var(--n-font-weight);

    border-radius: var(--n-radius);
    border: 1px solid var(--n-border-color);
    background: var(--n-background);
    color: var(--n-color);

    cursor: text;
    outline: none;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Inner editing surface ── */
  /* WHY: Browsers break contenteditable text insertion when the contenteditable
     element uses display:flex and contains child elements (slot icons).
     The surface is a child <span> that owns the contenteditable — the flex
     host handles layout while the surface handles text editing. */

  :where(n-input) > :where(.n-input-surface) {
    flex: 1;
    min-width: 0;
    outline: none;
    white-space: nowrap;
    overflow: hidden;
    cursor: text;
    user-select: text;
  }

  /* ── Placeholder (shown when empty via CustomStateSet) ── */
  /* WHY: Placeholder lives on the surface's ::before — reads data-placeholder
     which is synced from the host's placeholder attribute by JS. */

  :where(n-input):state(empty) > :where(.n-input-surface)::before {
    content: attr(data-placeholder);
    color: var(--n-ink-placeholder);
    pointer-events: none;
  }

  /* ── Password masking ── */

  :where(n-input[type="password"]) > :where(.n-input-surface) {
    -webkit-text-security: disc;
  }

  /* ── Slot children (icons) ── */

  :where(n-input) > :where([slot]) {
    flex-shrink: 0;
    user-select: none;
    pointer-events: none;
  }

  :where(n-input) > :where([slot="leading"]) {
    order: -1;
  }

  :where(n-input) > :where([slot="trailing"]) {
    order: 1;
    margin-inline-start: auto;
  }

  /* ── States ── */

  :where(n-input):hover,
  :where(n-input)[force-hover] {
    background: var(--n-background-hover);
    color: var(--n-color-hover);
    border-color: var(--n-border-color-hover);
  }

  /* ── Filled state (elevated bg, no border, stronger text) ── */
  /* WHY: When the input has content, bump elevation (control → panel),
     text contrast (ink → ink-strong), and drop border so filled fields
     look solid and elevated vs the outlined empty state. */

  :where(n-input):not(:state(empty)) {
    background: var(--n-panel);
    color: var(--n-ink-strong);
    border-color: transparent;
  }

  :where(n-input):not(:state(empty)):hover,
  :where(n-input):not(:state(empty))[force-hover] {
    background: var(--n-panel-hover);
    border-color: transparent;
  }

  /* WHY: :focus-within because actual focus lives on the inner surface,
     not the host element. The host shows the focus ring when any
     descendant (the surface) has focus. */
  :where(n-input):focus-within,
  :where(n-input)[force-focus] {
    border-color: var(--n-focus-ring);
    outline: 1px solid var(--n-focus-ring);
    outline-offset: 0;
  }

  :where(n-input)[aria-disabled="true"] {
    background: var(--n-background-disabled);
    color: var(--n-color-disabled);
    border-color: var(--n-border-color-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

}


@layer ui {

  /* ╭──────────────────────────────────────────────────────────╮
     │  n-kbd                                                    │
     │  Keyboard shortcut indicator. Own font/size scale         │
     │  (like .badge) — zero-attribute = md.                    │
     ╰──────────────────────────────────────────────────────────╯ */

  :where(n-kbd) {
    --n-icon-size: 1.125em;
    --n-ground: var(--n-body);

    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-family: ui-monospace, monospace;
    font-size: var(--n-widget-font);
    line-height: 1;
    min-height: calc(var(--n-widget-xs) + var(--n-space));
    padding-inline: 0.4em;
    border-radius: 0.5em;
    background: var(--n-ground);
    border: 1px solid var(--n-border-muted);
    color: var(--n-ink-muted);
    white-space: nowrap;
    user-select: none;
    flex-shrink: 0;
    vertical-align: baseline;
  }

}

.demo-row + .demo-row {
        margin-top: 0.75rem;
      }

      .demo-label {
        font-size: 0.75rem;
        color: var(--n-ink-muted-neutral);
        min-width: 2rem;
      }

@layer ui {

  :where(n-listbox, n-option, n-option-group, n-option-group-header):not(:defined) { visibility: hidden; }

  /* ── Listbox Base ── */

  :where(n-listbox, [role="listbox"]) {
    --n-background: var(--n-popover);
    --n-color: var(--n-ink);
    --n-border-color: var(--n-border-rest);

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    flex-direction: column;
    gap: 0;
    padding-block: var(--n-space);
    padding-inline: var(--n-space);
    border-radius: var(--n-radius);
    border: 1px solid var(--n-border-color);
    background: var(--n-background);
    color: var(--n-color);
    overflow-y: auto;
    outline: none;
    scrollbar-width: thin;
    scrollbar-color: var(--n-border-muted-neutral) transparent;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  :where(n-listbox)[aria-disabled="true"] {
    color: var(--n-ink-disabled);
    border-color: transparent;
    pointer-events: none;
  }

  /* WHY: Author-layer display:flex (above) overrides UA popover display:none.
     This rule must come AFTER the base rule so it wins by source order
     (both have zero specificity via :where()). */
  :where(n-listbox[popover]):not(:popover-open) {
    display: none;
  }

  :where(n-listbox[popover]) {
    overscroll-behavior: contain;
  }

  /* ── Popover Animation ──
     WHY: Shared entry/exit transition for all popover listboxes.
     Context CSS overrides --n-popover-origin and --n-popover-from
     to match the popover's anchor direction (e.g. sidebar flyouts
     open to the right → rotateY instead of rotateX). */

  :where(n-listbox[popover]) {
    --n-popover-origin: top center;
    --n-popover-from: perspective(800px) scale(0.96) rotateX(-20deg);

    transform-origin: var(--n-popover-origin);
    opacity: 0;
    transform: var(--n-popover-from);

    transition:
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing),
      display var(--n-duration) var(--n-easing) allow-discrete,
      overlay var(--n-duration) var(--n-easing) allow-discrete;
  }

  :where(n-listbox[popover]):popover-open {
    opacity: 1;
    transform: none;
  }

  @starting-style {
    :where(n-listbox[popover]):popover-open {
      opacity: 0;
      transform: var(--n-popover-from);
    }
  }

  /* ── Option / Command Item Base ── */

  :where(n-option, n-command-item, [role="option"]) {
    --n-font-weight: var(--n-text-font-weight);
    --n-line-height: var(--n-control-line-height);

    /* Defaults: ghost at rest, button-level scrim on hover/active.
       WHY: Options live inside a solid popover surface — scrim overlays
       provide subtle contrast without competing with the container. */
    --n-background: transparent;
    --n-background-hover: var(--n-button-hover);
    --n-background-active: var(--n-button-active);
    --n-background-disabled: transparent;
    --n-color: var(--n-ink);
    --n-color-hover: var(--n-ink-hover);
    --n-color-active: var(--n-ink-active);
    --n-color-disabled: var(--n-ink-disabled);

    display: flex;
    align-items: center;
    min-width: 0;
    gap: var(--n-pad-gap);

    min-height: var(--n-size);
    padding-inline: var(--n-pad-inline);

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: var(--n-line-height);
    font-weight: var(--n-font-weight);

    border-radius: calc(var(--n-radius) - var(--n-space));
    cursor: pointer;

    white-space: nowrap;
    background: var(--n-background);
    color: var(--n-color);

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Option / Command Item States ── */

  :where(n-option, n-command-item, [role="option"]):hover,
  :where(n-option, n-command-item, [role="option"])[force-hover] {
    background: var(--n-background-hover);
    color: var(--n-color-hover);
  }

  :where(n-option, n-command-item, [role="option"])[active] {
    background: var(--n-background-hover);
    color: var(--n-color-hover);
  }

  :where(n-option, n-command-item, [role="option"]):active,
  :where(n-option, n-command-item, [role="option"])[force-active] {
    background: var(--n-background-active);
    color: var(--n-color-active);
  }

  :where(n-option, n-command-item, [role="option"])[aria-selected="true"] {
    background: var(--n-background-hover);
    color: var(--n-color-hover);
  }

  :where(n-option, n-command-item, [role="option"])[aria-disabled="true"] {
    background: var(--n-background-disabled);
    color: var(--n-color-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  :where(n-option, n-command-item, [role="option"]):focus-visible,
  :where(n-option, n-command-item, [role="option"])[force-focus-visible] {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: -2px;
  }

  /* ── Icon-side padding compensation ── */

  :where(n-option, n-command-item):has(> n-icon:first-child) {
    padding-inline: var(--n-pad-inline-icon) var(--n-pad-inline);
  }

  :where(n-option, n-command-item):has(> n-icon:last-child) {
    padding-inline: var(--n-pad-inline) var(--n-pad-inline-icon);
  }

  /* ── Option Group ── */
  /* WHY: Group is purely structural — small uppercase label header,
     flat child options with no indentation. */

  :where(n-option-group) {
    display: flex;
    flex-direction: column;
  }

  :where(n-option-group) + :where(n-option-group) {
    margin-block-start: calc(var(--n-space) * 2);
  }

  /* ── Group Header — small uppercase label ── */

  :where(n-option-group-header) {
    display: flex;
    align-items: center;
    gap: var(--n-pad-gap);
    min-height: var(--n-size);
    padding-inline: var(--n-pad-inline);
    font-size: var(--n-group-header-font);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    line-height: var(--n-control-line-height);
    color: var(--n-ink-muted);
    cursor: default;
  }

}

.demo-grid {
        display: grid;
        grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
        gap: 1.5rem;
        align-items: start;
      }

      .demo-col {
        display: flex;
        flex-direction: column;
        gap: 0.5rem;
      }

      .demo-col-label {
        font-size: 0.625rem;
        font-weight: 600;
        text-transform: uppercase;
        letter-spacing: 0.04em;
        color: var(--n-ink-muted-neutral);
      }
.value-display {
        font-family: ui-monospace, monospace;
        font-size: 0.75rem;
        color: var(--n-ink-accent);
        background: var(--n-panel-accent);
        border-radius: 0.25rem;
        padding: 0.25rem 0.5rem;
        display: inline-block;
      }

.demo-grid {
        display: grid;
        grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
        gap: 1.5rem;
        align-items: start;
      }

      .demo-col {
        display: flex;
        flex-direction: column;
        gap: 0.5rem;
      }

      .demo-col-label {
        font-size: 0.625rem;
        font-weight: 600;
        text-transform: uppercase;
        letter-spacing: 0.04em;
        color: var(--n-ink-muted-neutral);
      }
.value-display {
        font-family: ui-monospace, monospace;
        font-size: 0.75rem;
        color: var(--n-ink-accent);
        background: var(--n-panel-accent);
        border-radius: 0.25rem;
        padding: 0.25rem 0.5rem;
        display: inline-block;
      }

/* ── n-noodles ── */

@layer ui {
  :where(n-noodles):not(:defined) { visibility: hidden; }
  :where(n-noodles) {
    display: block;
    position: relative;
    isolation: isolate;
    overflow: hidden;
  }
}

/* Port dot interaction states */
:where(n-noodles) :where([data-noodle-port-indicator]) {
  transition: transform 150ms ease, opacity 150ms ease;
}
:where(n-noodles) :where([data-noodle-drop-ready]) {
  transform: scale(1.4);
}
:where(n-noodles) :where([data-noodle-dragging]) {
  opacity: 0.5;
}

/* ── Noodle canvas ── */

.noodle-canvas {
  height: 200px;
}
.noodle-canvas--tall {
  height: 240px;
}

/* ── Node styling ── */

.node {
  position: absolute;
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 8px 14px;
  border-radius: var(--n-radius);
  background: var(--n-surface);
  border: 1px solid var(--n-border);
  font-size: var(--n-font-size-sm);
  font-weight: 500;
  white-space: nowrap;
  user-select: none;
  z-index: 1;
}
.node--accent { border-color: var(--n-color-accent-500); color: var(--n-color-accent-600); }
.node--warning { border-color: var(--n-color-warning-500); color: var(--n-color-warning-600); }
.node--success { border-color: var(--n-color-success-500); color: var(--n-color-success-600); }
.node--danger { border-color: var(--n-color-danger-500); color: var(--n-color-danger-600); }

/* ── Controls ── */

.demo-controls {
  display: flex;
  align-items: center;
  gap: 8px;
  padding-block: 8px;
}

.nav-main {
        padding: 2rem;
        max-width: 52rem;
      }

/* ════════════════════════════════════════════════════
   n-pagination-dots — Pagination dot indicator
   ════════════════════════════════════════════════════ */

@layer ui {

  :where(n-pagination-dots):not(:defined) { visibility: hidden; }

  /* ── Container ── */

  :where(n-pagination-dots) {
    --n-dot-size: calc(var(--n-size) * 0.22);
    --n-dot-indicator-length: calc(var(--n-dot-size) * 2);
    --n-dot-gap: var(--n-space);
    --n-dot-background: var(--n-border);
    --n-dot-background-hover: var(--n-border-hover);
    --n-dot-background-active: var(--n-border-active);
    --n-dot-selected: white;

    display: inline-flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    padding: var(--n-space);

    background: var(--n-control);
    border-radius: var(--n-radius);

    transition:
      background var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing);
  }

  /* ── Dots area ── */

  :where(n-pagination-dots) > :where([part="dots"]) {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: var(--n-dot-gap);
  }

  /* ── Floating Indicator ── */
  /* WHY: Real DOM element (not ::before) so JS can set --n-dot-index directly.
     CSS transitions on transform work reliably without @property registration,
     which can fail in dynamic CSS injection contexts (Vite HMR, bundler <style>). */

  :where(n-pagination-dots) > :where([part="dots"]) > :where(.n-dot-indicator) {
    display: none;
  }

  :where(n-pagination-dots):state(ready) > :where([part="dots"]) > :where(.n-dot-indicator) {
    display: block;
    position: absolute;
    top: 50%;
    inset-inline-start: 0;
    transform:
      translateY(-50%)
      translateX(calc(var(--n-dot-index, 0) * (var(--n-dot-size) + var(--n-dot-gap))));
    width: var(--n-dot-indicator-length);
    height: var(--n-dot-size);
    border-radius: var(--n-radius);
    background: var(--n-dot-selected);
    pointer-events: none;

    transition:
      transform calc(var(--n-duration) * 1.5) var(--n-easing),
      background var(--n-duration) var(--n-easing);
  }

  /* ── Dot button (hit area) ── */

  :where(n-pagination-dots) :where(button[role="tab"]) {
    appearance: none;
    border: none;
    cursor: pointer;
    background: transparent;
    padding: 0;

    display: inline-flex;
    align-items: center;
    justify-content: center;

    /* WHY: z-index ensures dot buttons sit above the floating indicator
       for click/focus interaction */
    position: relative;
    z-index: 1;

    width: var(--n-dot-size);
    height: var(--n-dot-size);
  }

  /* ── Dot visual (span) ── */

  :where(n-pagination-dots) :where(button[role="tab"]) > :where(span) {
    display: block;
    width: var(--n-dot-size);
    height: var(--n-dot-size);
    border-radius: var(--n-radius);
    background: var(--n-dot-background);
    flex-shrink: 0;

    transition:
      background var(--n-duration) var(--n-easing),
      opacity calc(var(--n-duration) * 1.5) var(--n-easing),
      transform calc(var(--n-duration) * 1.5) var(--n-easing);
  }

  /* ── Active (selected dot) ── */
  /* WHY: The floating indicator provides the selected visual.
     The dot span becomes transparent so the indicator shows through. */

  /* WHY: Margin on selected button compensates for the indicator overhang
     so visual gap from pill edge to neighbor = regular dot-gap. */
  :where(n-pagination-dots) :where(button[aria-selected="true"]) {
    margin-inline: calc((var(--n-dot-indicator-length) - var(--n-dot-size)) / 2);
  }

  :where(n-pagination-dots) :where(button[aria-selected="true"]) > :where(span) {
    background: transparent;
  }

  /* ── Hover (inactive dot) ── */

  :where(n-pagination-dots) :where(button:hover:not([aria-selected="true"])) > :where(span),
  :where(n-pagination-dots[force-hover]) :where(button:not([aria-selected="true"])) > :where(span) {
    background: var(--n-dot-background-hover);
  }

  /* ── Active/Pressed (inactive dot) ── */

  :where(n-pagination-dots) :where(button:active:not([aria-selected="true"])) > :where(span),
  :where(n-pagination-dots[force-active]) :where(button:not([aria-selected="true"])) > :where(span) {
    background: var(--n-dot-background-active);
  }

  /* ── Edge dots (windowed, at boundary) ── */

  :where(n-pagination-dots) :where(button[data-edge]) > :where(span) {
    transform: scale(0.5);
    opacity: 0.3;
  }

  /* ── Focus ── */

  :where(n-pagination-dots) :where(button[role="tab"]):focus-visible,
  :where(n-pagination-dots[force-focus-visible]) :where(button[role="tab"]) {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: 2px;
  }

  /* ── Paddles ── */

  :where(n-pagination-dots) > :where([part="prev"]),
  :where(n-pagination-dots) > :where([part="next"]) {
    display: none;
  }

  /* ── Disabled ── */

  :where(n-pagination-dots)[aria-disabled="true"] {
    pointer-events: none;
  }

  :where(n-pagination-dots)[aria-disabled="true"] :where(button) {
    cursor: not-allowed;
  }

  :where(n-pagination-dots)[aria-disabled="true"] :where(button[role="tab"]) > :where(span) {
    opacity: 0.4;
  }

  :where(n-pagination-dots)[aria-disabled="true"] > :where([part="dots"]) > :where(.n-dot-indicator) {
    opacity: 0.4;
  }

  /* ── Hidden ── */

  :where(n-pagination-dots[hidden]) { display: none; }

  /* ── Reduced Motion ── */

  @media (prefers-reduced-motion: reduce) {
    :where(n-pagination-dots) :where(button[role="tab"]) > :where(span) {
      transition: none;
    }

    :where(n-pagination-dots) > :where([part="dots"]) > :where(.n-dot-indicator) {
      transition: none;
    }
  }

}

/* ── Attribute API (unlayered) ── */

[orientation="vertical"]:where(n-pagination-dots) {
  flex-direction: column;
}

[orientation="vertical"]:where(n-pagination-dots) > :where([part="dots"]) {
  flex-direction: column;
}

[orientation="vertical"]:where(n-pagination-dots):state(ready) > :where([part="dots"]) > :where(.n-dot-indicator) {
  top: 0;
  inset-inline-start: 50%;
  width: var(--n-dot-size);
  height: var(--n-dot-indicator-length);
  transform:
    translateX(-50%)
    translateY(calc(var(--n-dot-index, 0) * (var(--n-dot-size) + var(--n-dot-gap))));
}

[orientation="vertical"]:where(n-pagination-dots) :where(button[aria-selected="true"]) {
  margin-inline: 0;
  margin-block: calc((var(--n-dot-indicator-length) - var(--n-dot-size)) / 2);
}

[paddles]:where(n-pagination-dots) > :where([part="prev"]),
[paddles]:where(n-pagination-dots) > :where([part="next"]) {
  display: inline-flex;
}

[variant="plain"]:where(n-pagination-dots) {
  background: transparent;
  padding: 0;
}

@layer ui {

  :where(n-pagination):not(:defined) { visibility: hidden; }

  /* ── Pagination Container ── */

  :where(n-pagination) {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--n-space) * 1);
  }

  :where(n-pagination)[aria-disabled="true"] {
    color: var(--n-ink-disabled);
    pointer-events: none;
  }

  /* ── Page buttons ── */
  /* WHY: Ghost variant sets hover to transparent; pagination buttons want
     a subtle panel-hover fill on hover for better interactivity feedback. */

  :where(n-pagination) > :where(n-button) {
    --n-background-hover: var(--n-panel-hover);
    --n-background-active: var(--n-panel-active);
  }

  /* ── Current page highlight ── */

  :where(n-pagination) > :where(n-button[aria-current="page"]) {
    --n-background: var(--n-surface);
    --n-color: var(--n-surface-ink);
    --n-border-color: var(--n-surface);
  }

  /* ── Ellipsis ── */

  :where(n-pagination) > :where(.n-pagination-ellipsis) {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: var(--n-size);
    min-height: var(--n-size);
    color: var(--n-ink-muted);
    font-size: var(--n-font-size);
    pointer-events: none;
  }

  :where(n-pagination[hidden]) { display: none; }

}

@layer ui {

  /* ╭──────────────────────────────────────────────────────────╮
     │  n-picture                                                 │
     │  Image container with token-aware border-radius and      │
     │  responsive sizing. CSS-only — no JS.                    │
     ╰──────────────────────────────────────────────────────────╯ */

  /* ── Base ── */

  :where(n-picture) {
    display: block;
    position: relative;
    width: var(--n-picture-width);
    height: var(--n-picture-height);
    --n-picture-max-width: 100%;
    max-width: var(--n-picture-max-width);
    min-width: 0;
    min-height: 3rem;
    overflow: hidden;
    border-radius: var(--n-radius);
    background: var(--n-surface-neutral);
  }

  /* Placeholder icon — visible when img is missing, empty, or broken */
  :where(n-picture)::after {
    content: '';
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background:
      url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 256 256'%3E%3Cpath fill='%239ca3af' d='M216 40H40a16 16 0 0 0-16 16v144a16 16 0 0 0 16 16h176a16 16 0 0 0 16-16V56a16 16 0 0 0-16-16m0 16v102.75l-26.07-26.06a16 16 0 0 0-22.63 0l-20 20l-44-44a16 16 0 0 0-22.62 0L40 149.37V56ZM40 172l52-52l80 80H40Zm176 28h-21.37l-36-36l20-20L216 181.38V200ZM144 100a12 12 0 1 1 12 12a12 12 0 0 1-12-12'/%3E%3C/svg%3E")
      no-repeat center center;
    pointer-events: none;
    z-index: 0;
  }

  :where(n-picture) > :where(img) {
    display: block;
    position: relative;
    z-index: 1;
    max-width: 100%;
    height: auto;
    object-fit: cover;
  }

  /* Hide img when src is absent or empty — let placeholder show through */
  :where(n-picture) > :where(img:not([src])),
  :where(n-picture) > :where(img[src=""]) {
    visibility: hidden;
  }

  /* ── Fit ── */

  [fit="contain"]:where(n-picture) > :where(img) { object-fit: contain; }
  [fit="fill"]:where(n-picture) > :where(img) { object-fit: fill; }
  [fit="none"]:where(n-picture) > :where(img) { object-fit: none; }

  /* ── Aspect ratio ── */

  [aspect="square"]:where(n-picture) > :where(img) { aspect-ratio: 1; }
  [aspect="video"]:where(n-picture) > :where(img) { aspect-ratio: 16 / 9; }
  [aspect="photo"]:where(n-picture) > :where(img) { aspect-ratio: 4 / 3; }

  /* ── Contained mode — strip chrome for inline/embedded use ── */

  [contained]:where(n-picture) {
    background: none;
    border-radius: 0;
  }

  [contained]:where(n-picture)::after {
    display: none;
  }

  /* ── Inline mode ── */

  [inline]:where(n-picture) {
    display: inline-block;
  }

}

@layer ui {

  /* ╭──────────────────────────────────────────────────────────╮
     │  n-progress                                              │
     │  Read-only progress bar. CSS-only — no JS.               │
     │                                                          │
     │  Set progress via --n-progress (0–1) custom property.    │
     │  The A2UI adapter sets this from the value/max attrs.    │
     │                                                          │
     │  Usage:                                                  │
     │    <n-progress style="--n-progress: 0.6"></n-progress>   │
     ╰──────────────────────────────────────────────────────────╯ */

  /* ── Base (track) ── */

  :where(n-progress) {
    --n-progress: 0;

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    align-items: center;
    position: relative;

    height: calc(var(--n-space) * 2);
    border-radius: var(--n-radius);
    background: var(--n-control);
    overflow: hidden;
  }

  /* ── Fill (::before) ── */

  :where(n-progress)::before {
    content: '';
    position: absolute;
    inset-block: 0;
    inset-inline-start: 0;
    width: calc(var(--n-progress) * 100%);
    background: var(--n-ink);
    border-radius: inherit;
    transition: width var(--n-duration) var(--n-easing);
  }

  @keyframes n-progress-indeterminate {
    0% { inset-inline-start: -30%; }
    100% { inset-inline-start: 100%; }
  }

}

/* ── Attribute API (unlayered) ── */

[intent="accent"]:where(n-progress)::before { background: var(--n-ink); }
[intent="success"]:where(n-progress)::before { background: var(--n-ink); }
[intent="warning"]:where(n-progress)::before { background: var(--n-ink); }
[intent="danger"]:where(n-progress)::before { background: var(--n-ink); }

[size="xs"]:where(n-progress) { height: calc(var(--n-space) * 1); }
[size="sm"]:where(n-progress) { height: calc(var(--n-space) * 1.5); }
[size="lg"]:where(n-progress) { height: calc(var(--n-space) * 3); }

[indeterminate]:where(n-progress)::before {
  width: 30%;
  animation: n-progress-indeterminate 1.5s ease-in-out infinite;
}

@layer ui {

  :where(n-radio, n-radio-group):not(:defined) { visibility: hidden; }

  /* ── Radio Group ── */

  :where(n-radio-group) {
    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    flex-direction: column;
    gap: calc(var(--n-space) * 2);
    outline: none;
  }

  :where(n-radio-group[orientation="horizontal"]) {
    flex-direction: row;
    align-items: center;
  }

  /* ── Radio Base ── */

  :where(n-radio) {
    --n-font-weight: var(--n-text-font-weight);
    --n-line-height: var(--n-control-line-height);
    --n-radius: 50%;

    /* Circle size: shared widget scale for toggle controls */
    --n-circle-size: var(--n-widget-size);
    /* Inner dot */
    --n-dot-size: calc(var(--n-circle-size) * 0.4);

    --n-background: var(--n-widget);
    --n-background-hover: var(--n-widget-hover);
    --n-background-active: var(--n-widget-active);
    --n-background-disabled: var(--n-widget-disabled);
    --n-color: var(--n-ink);
    --n-color-hover: var(--n-ink-hover);
    --n-color-disabled: var(--n-ink-disabled);
    --n-border-color: var(--n-border-muted);
    --n-border-color-hover: var(--n-border-hover);
    --n-border-color-active: var(--n-border-active);
    --n-border-color-disabled: transparent;

    position: relative;
    display: inline-flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    /* WHY: padding reserves space for the absolutely-positioned circle */
    padding-inline-start: calc(var(--n-circle-size) + var(--n-space) * 2);
    min-height: var(--n-circle-size);

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: var(--n-line-height);
    font-weight: var(--n-font-weight);
    color: var(--n-color);

    cursor: pointer;
    outline: none;

    transition:
      color var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing);
  }

  /* ── Circle (outer ring) ── */
  /* WHY: Absolutely positioned so text flows naturally after padding gap */

  :where(n-radio)::before {
    content: '';
    position: absolute;
    inset-inline-start: 0;
    top: 50%;
    transform: translateY(-50%);
    width: var(--n-circle-size);
    height: var(--n-circle-size);
    border-radius: var(--n-radius);
    border: 1px solid var(--n-border-color);
    background: var(--n-background);

    transition:
      background var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Dot (inner fill) ── */
  /* WHY: Centered within the circle using calc offset from start + vertical center */

  :where(n-radio)::after {
    content: '';
    position: absolute;
    inset-inline-start: calc((var(--n-circle-size) - var(--n-dot-size)) / 2);
    top: 50%;
    transform: translateY(-50%) scale(0);
    width: var(--n-dot-size);
    height: var(--n-dot-size);
    border-radius: var(--n-radius);
    background: transparent;

    transition:
      background var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Selected ── */

  :where(n-radio)[aria-checked="true"]::before {
    background: var(--n-surface);
    border-color: var(--n-surface);
  }

  :where(n-radio)[aria-checked="true"]::after {
    background: var(--n-surface-ink);
    transform: translateY(-50%) scale(1);
  }

  /* ── Hover ── */

  :where(n-radio):hover,
  :where(n-radio)[force-hover] {
    color: var(--n-color-hover);
  }

  :where(n-radio):hover::before,
  :where(n-radio)[force-hover]::before {
    background: var(--n-background-hover);
    border-color: var(--n-border-color-hover);
  }

  :where(n-radio)[aria-checked="true"]:hover::before,
  :where(n-radio)[aria-checked="true"][force-hover]::before {
    background: var(--n-surface-hover);
    border-color: var(--n-surface-hover);
  }

  /* ── Active (pressed) ── */

  :where(n-radio)[pressed]::before,
  :where(n-radio)[force-active]::before {
    background: var(--n-background-active);
    border-color: var(--n-border-color-active);
  }

  :where(n-radio)[aria-checked="true"][pressed]::before,
  :where(n-radio)[aria-checked="true"][force-active]::before {
    background: var(--n-surface-active);
    border-color: var(--n-surface-active);
  }

  /* ── Focus ── */

  :where(n-radio):focus-visible::before,
  :where(n-radio)[force-focus-visible]::before {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: 2px;
  }

  /* ── Disabled ── */

  :where(n-radio)[aria-disabled="true"] {
    color: var(--n-color-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  :where(n-radio)[aria-disabled="true"]::before {
    background: var(--n-background-disabled);
    border-color: var(--n-border-color-disabled);
  }

  :where(n-radio)[aria-disabled="true"][aria-checked="true"]::before {
    background: var(--n-surface-disabled);
    border-color: var(--n-surface-disabled);
  }

  :where(n-radio)[aria-disabled="true"]::after {
    background: var(--n-surface-ink-disabled);
  }

  :where(n-radio[hidden]) { display: none; }

}

@layer ui {

  :where(n-range):not(:defined) { visibility: hidden; }

  /* ── Range Base ── */

  :where(n-range) {
    white-space: nowrap;
    --n-progress: 0.5;

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    align-items: center;
    position: relative;
    /* WHY: Isolate internal z-index (thumb z-index: 1) from parent stacking context */
    isolation: isolate;

    min-height: var(--n-widget-size);

    cursor: pointer;
    outline: none;
    touch-action: none;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Track (background) ── */

  :where(n-range)::before {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: calc(var(--n-widget-size) / 2);
    background: var(--n-widget);
    border: 1px solid var(--n-border-muted);

    transition:
      background var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing);
  }

  /* ── Fill ── */
  /* WHY: Default fill uses accent so range is visually distinct without
     needing intent="accent". Track background stays neutral.
     When an explicit [intent] is set, the intent selector's --n-surface wins. */

  :where(n-range)::after {
    content: '';
    position: absolute;
    inset-block: 0;
    inset-inline-start: 0;
    /* 0% = track-height (circle), 100% = full width */
    width: calc(var(--n-widget-size) + (100% - var(--n-widget-size)) * var(--n-progress));
    border-radius: calc(var(--n-widget-size) / 2);
    background: var(--n-surface);

    transition:
      background var(--n-duration) var(--n-easing);
  }

  /* ── Thumb ── */

  :where(n-range) > :where(.n-range-thumb) {
    position: absolute;
    inset-inline-start: calc((100% - var(--n-widget-size)) * var(--n-progress));
    inset-block-start: 50%;
    transform: translateY(-50%);
    z-index: 1;
    width: var(--n-widget-size);
    height: var(--n-widget-size);
    border-radius: 50%;
    background: var(--n-surface-ink);
    border: 2px solid var(--n-surface);
    box-shadow: var(--n-shadow-sm);
    pointer-events: none;

    transition:
      box-shadow var(--n-duration) var(--n-easing),
      background var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing);
  }

  /* ── Focus ── */

  :where(n-range):focus-visible > :where(.n-range-thumb),
  :where(n-range)[force-focus-visible] > :where(.n-range-thumb) {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: 2px;
  }

  /* ── Hover ── */

  :where(n-range):hover::after,
  :where(n-range)[force-hover]::after {
    background: var(--n-surface-hover);
  }

  :where(n-range):hover > :where(.n-range-thumb),
  :where(n-range)[force-hover] > :where(.n-range-thumb) {
    border-color: var(--n-surface-hover);
    box-shadow: var(--n-shadow-sm), 0 0 0 4px var(--n-surface);
  }

  /* ── Active (dragging) ── */

  :where(n-range)[pressed]::after,
  :where(n-range)[force-active]::after {
    background: var(--n-surface-active);
  }

  :where(n-range)[pressed] > :where(.n-range-thumb),
  :where(n-range)[force-active] > :where(.n-range-thumb) {
    border-color: var(--n-surface-active);
    box-shadow: var(--n-shadow-sm), 0 0 0 6px var(--n-surface);
  }

  /* ── Disabled ── */

  :where(n-range)[aria-disabled="true"] {
    cursor: not-allowed;
    pointer-events: none;
  }

  :where(n-range)[aria-disabled="true"]::before {
    background: var(--n-widget-disabled);
  }

  :where(n-range)[aria-disabled="true"]::after {
    background: var(--n-surface-disabled);
  }

  :where(n-range)[aria-disabled="true"] > :where(.n-range-thumb) {
    background: var(--n-surface-ink-disabled);
    border-color: var(--n-surface-disabled);
    box-shadow: none;
  }

  :where(n-range[hidden]) { display: none; }

}

.value-display {
        font-size: 0.8125rem;
        color: var(--n-ink-muted-neutral);
        font-variant-numeric: tabular-nums;
      }

@layer ui {

/* ── native-root ──
   Host container with optional shadow DOM isolation.
   Light mode: semantic host shell, no isolation.
   Shadow mode: CSS isolation via shadow root + adoptedStyleSheets.
   ────────────────────────────────────────────────── */

  :where(native-root):not(:defined) {
    visibility: hidden;
  }

  :where(native-root) {
    display: block;
  }

}

@layer ui {

  :where(n-segment, n-segmented-control):not(:defined) { visibility: hidden; }

  /* ── Segmented Control (container) ── */

  :where(n-segmented-control) {
    --n-font-weight: var(--n-button-font-weight);
    --n-line-height: var(--n-control-line-height);
    --n-background: var(--n-control);
    --n-background-hover: var(--n-control-hover);
    --n-background-active: var(--n-control-active);
    --n-background-disabled: var(--n-control-disabled);
    --n-border-color: var(--n-border-rest);
    --n-segment-count: 1;
    --n-indicator-background: white;
    --n-indicator-border-color: transparent;

    position: relative;
    display: inline-grid;
    width: auto;
    min-width: 0;
    grid-auto-flow: column;
    grid-auto-columns: 1fr;
    align-items: center;
    padding-block: var(--n-space);
    padding-inline: var(--n-space);

    border-radius: var(--n-radius);
    border: 1px solid var(--n-border-color);
    background: var(--n-background);
    white-space: nowrap;

    outline: none;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  :where(n-segmented-control)[aria-disabled="true"] {
    color: var(--n-ink-disabled);
    pointer-events: none;
  }

  /* ── Floating Indicator ── */
  /* WHY: Real DOM element (not ::before) so JS can set transform directly.
     CSS transitions on transform work reliably without @property registration,
     which can fail in dynamic CSS injection contexts (Vite HMR, bundler <style>). */

  :where(n-segmented-control) > :where(.n-segmented-indicator) {
    display: none;
  }

  :where(n-segmented-control):state(ready) > :where(.n-segmented-indicator) {
    display: block;
    position: absolute;
    top: var(--n-space);
    bottom: var(--n-space);
    /* WHY: left skips container padding so indicator aligns with grid columns.
       100% = padding-box width, subtract 2×padding = content width. */
    left: var(--n-space);
    width: calc((100% - var(--n-space) * 2) / var(--n-segment-count));
    border-radius: calc(var(--n-radius) - var(--n-space));
    background: var(--n-indicator-background);
    border: 1px solid var(--n-indicator-border-color);
    /* WHY: transform is set directly on the element by JS — no @property needed
       for CSS transitions to animate transform on real DOM elements. */

    transition:
      transform var(--n-duration) var(--n-easing),
      background var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing);
  }

  /* ── Segment (individual tab) ── */

  :where(n-segment) {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--n-pad-gap);

    /* WHY: z-index ensures text sits above the floating indicator */
    position: relative;
    z-index: 1;

    min-height: calc(var(--n-size) - var(--n-space) * 2 - 2px);
    padding-inline: var(--n-pad-inline);

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: var(--n-line-height);
    font-weight: var(--n-font-weight);

    border-radius: calc(var(--n-radius) - var(--n-space));
    background: transparent;
    color: var(--n-ink-muted);

    cursor: pointer;
    outline: none;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Segment States ── */

  :where(n-segment):hover,
  :where(n-segment)[force-hover] {
    color: var(--n-ink-hover);
  }

  :where(n-segment)[pressed],
  :where(n-segment)[force-active] {
    color: var(--n-ink-active);
  }

  /* ── Selected Segment ── */
  /* WHY: The floating indicator provides the background + shadow.
     The segment itself only changes text color. */

  :where(n-segment)[aria-checked="true"] {
    color: var(--n-ink-inverse);
  }

  :where(n-segment)[aria-checked="true"]:hover,
  :where(n-segment)[aria-checked="true"][force-hover] {
    color: var(--n-ink-hover);
  }

  /* ── Focus ── */

  :where(n-segment):focus-visible,
  :where(n-segment)[force-focus-visible] {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: -2px;
  }

  /* ── Disabled ── */

  :where(n-segment)[aria-disabled="true"] {
    color: var(--n-ink-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  :where(n-segment)[aria-disabled="true"][aria-checked="true"] {
    color: var(--n-ink-disabled);
  }

  :where(n-segmented-control)[aria-disabled="true"] > :where(.n-segmented-indicator) {
    background: var(--n-background-disabled);
    border-color: transparent;
  }

  /* ── Icon-side padding compensation ── */

  :where(n-segment):has(> n-icon:first-child) {
    padding-inline: var(--n-pad-inline-icon) var(--n-pad-inline);
  }

  :where(n-segment):has(> n-icon:last-child) {
    padding-inline: var(--n-pad-inline) var(--n-pad-inline-icon);
  }

  :where(n-segmented-control[hidden]) { display: none; }

}

/* ── Attribute API (unlayered) ── */

/* [inline] — now the default, kept as no-op for backwards compat */

:where(n-segmented-control)[block] {
  display: grid;
  width: 100%;
}

@layer ui {

  /* ── Select Defaults ──
     WHY: n-select IS the trigger button (inherits button base from button.css).
     Default to spread justify and overflow visible for popover children. */

  :where(n-select) {
    position: relative;
    overflow: visible;
  }

  /* Hide listbox until JS upgrades it with [popover] */
  :where(n-select) > :where(n-listbox:not([popover])) {
    display: none;
  }

  /* ── Popover Listbox — hidden in grid, positioned when open ──
     WHY: n-listbox[popover] is a direct child but has display:none when closed
     (UA popover style). When open it moves to the top layer and is positioned
     via CSS anchor relative to the select trigger. */

  :where(n-select) > :where(n-listbox[popover]) {
    position: fixed;
    position-area: block-end span-inline-end;
    position-try-fallbacks: flip-block;
    margin-block: var(--n-popover-viewport-margin);
    margin-inline: 0;
    margin-block-start: var(--n-popover-gap);
    min-width: anchor-size(inline);
    max-height: var(--n-popover-max-height);
    overflow-y: auto;
  }

}

@layer ui {

  :where(n-slide):not(:defined),
  :where(n-slideshow):not(:defined) { visibility: hidden; }

  /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
     n-slideshow / n-slide
     CSS-first carousel using scroll-snap.

     DOM structure (JS-stamped):
       n-slideshow
         div[part="track"]
           n-slide …
         div[part="controls"]
           button[part="prev"]
           button[part="next"]
         n-pagination-dots[part="indicators"]
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */

  /* ── Slideshow Wrapper ── */

  :where(n-slideshow) {
    --n-slideshow-gap: 0px;
    --n-per-view: 1;
    --n-slideshow-peek: 0px;

    display: grid;
    flex: 1 1 0%;
    min-width: 0;
    grid-template-rows: 1fr auto;
    grid-template-columns: 1fr;
    position: relative;
    overflow: hidden;
    border-radius: var(--n-radius);
    user-select: none;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  :where(n-slideshow[gap]) {
    --n-slideshow-gap: calc(var(--n-space) * 4);
  }

  :where(n-slideshow[peek]) {
    --n-slideshow-peek: calc(var(--n-space-k) * var(--n-space) * 2);
  }

  /* ── Track ── */

  :where(n-slideshow) > :where([part="track"]) {
    display: flex;
    min-width: 0;
    min-height: 0;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scroll-behavior: smooth;
    scrollbar-width: none;
    overscroll-behavior-x: contain;
    gap: var(--n-slideshow-gap);
    padding-inline: var(--n-slideshow-peek);
    scroll-padding-inline: var(--n-slideshow-peek);
    grid-row: 1;
    grid-column: 1;
  }

  :where(n-slideshow) > :where([part="track"])::-webkit-scrollbar {
    display: none;
  }

  /* Drag-to-scroll cursor */
  :where(n-slideshow) > :where([part="track"]) {
    cursor: grab;
  }

  :where(n-slideshow) > :where([part="track"][data-dragging]) {
    cursor: grabbing;
    user-select: none;
  }

  /* ── Vertical ── */

  :where(n-slideshow[direction="vertical"]) > :where([part="track"]) {
    flex-direction: column;
    overflow-x: hidden;
    overflow-y: auto;
    scroll-snap-type: y mandatory;
    overscroll-behavior-x: auto;
    overscroll-behavior-y: contain;
    padding-inline: 0;
    scroll-padding-inline: 0;
    padding-block: var(--n-slideshow-peek);
    scroll-padding-block: var(--n-slideshow-peek);
  }

  /* ── Slide ── */

  :where(n-slide) {
    flex: 0 0 calc(
      (100% - (var(--n-per-view) - 1) * var(--n-slideshow-gap)) / var(--n-per-view)
    );
    scroll-snap-align: start;
    min-width: 0;
    min-height: 0;
    overflow: hidden;
    user-select: none;
  }

  /* Vertical slides need full height instead of full width */
  :where(n-slideshow[direction="vertical"]) > :where([part="track"]) > :where(n-slide) {
    flex: 0 0 100%;
  }

  /* ── Controls ── */

  :where(n-slideshow) > :where([part="controls"]) {
    display: none;
  }

  :where(n-slideshow[controls]) > :where([part="controls"]) {
    display: contents;
  }

  :where(n-slideshow) :where([part="prev"]),
  :where(n-slideshow) :where([part="next"]) {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    z-index: 2;

    appearance: none;
    border: none;
    cursor: pointer;

    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--n-size);
    height: var(--n-size);
    border-radius: 50%;
    background: var(--n-panel);
    color: var(--n-ink);
    border: 1px solid var(--n-border-muted);
    box-shadow: var(--n-shadow-sm);

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  :where(n-slideshow) :where([part="prev"]) {
    inset-inline-start: calc(var(--n-space) * 2);
  }

  :where(n-slideshow) :where([part="next"]) {
    inset-inline-end: calc(var(--n-space) * 2);
  }

  :where(n-slideshow) :where([part="prev"]):hover,
  :where(n-slideshow) :where([part="next"]):hover,
  :where(n-slideshow[force-hover]) :where([part="prev"]),
  :where(n-slideshow[force-hover]) :where([part="next"]) {
    background: var(--n-panel-hover);
    color: var(--n-ink-hover);
    border-color: var(--n-border-hover);
  }

  :where(n-slideshow) :where([part="prev"]):focus-visible,
  :where(n-slideshow) :where([part="next"]):focus-visible,
  :where(n-slideshow[force-focus-visible]) :where([part="prev"]),
  :where(n-slideshow[force-focus-visible]) :where([part="next"]) {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: 2px;
  }

  :where(n-slideshow) :where([part="prev"]):disabled,
  :where(n-slideshow) :where([part="next"]):disabled {
    opacity: 0.3;
    cursor: not-allowed;
    pointer-events: none;
  }

  /* ── Indicators ── */

  :where(n-slideshow) > :where([part="indicators"]) {
    display: none;
    grid-row: 2;
    grid-column: 1;
  }

  :where(n-slideshow[indicators]) > :where([part="indicators"]) {
    display: inline-flex;
    padding-block: calc(var(--n-space) * 3);
    justify-self: center;
  }

  /* Cascade debug states from slideshow host to internal n-pagination-dots */
  :where(n-slideshow[force-hover]) :where(n-pagination-dots) :where(button:not([aria-selected="true"])) > :where(span) {
    background: var(--n-border-hover);
  }

  :where(n-slideshow[force-focus-visible]) :where(n-pagination-dots) :where(button[role="tab"]) {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: 2px;
  }

  /* ── Disabled ── */

  :where(n-slideshow)[aria-disabled="true"] > :where([part="track"]) {
    pointer-events: none;
  }

  :where(n-slideshow)[aria-disabled="true"] > :where([part="controls"]) {
    opacity: 0.3;
    pointer-events: none;
  }

  /* ── Visually Hidden (live region) ── */

  :where(n-slideshow) :where([data-visually-hidden]) {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
  }

  /* ── Reduced Motion ── */

  @media (prefers-reduced-motion: reduce) {
    :where(n-slideshow) > :where([part="track"]) {
      scroll-behavior: auto;
    }

    :where(n-slideshow) :where([part="prev"]),
    :where(n-slideshow) :where([part="next"]) {
      transition: none;
    }
  }

  :where(n-slideshow[hidden]) { display: none; }

}

/* Slide content for demos */
      .slide-content {
        min-height: 12rem;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 2rem;
        font-weight: 700;
        border-radius: 0.5rem;
      }

      .slide-1 { background: var(--n-surface-accent); color: var(--n-surface-ink-accent); }
      .slide-2 { background: var(--n-surface-info); color: var(--n-surface-ink-info); }
      .slide-3 { background: var(--n-surface-success); color: var(--n-surface-ink-success); }
      .slide-4 { background: var(--n-surface-warning); color: var(--n-surface-ink-warning); }
      .slide-5 { background: var(--n-surface-danger); color: var(--n-surface-ink-danger); }

      .slide-short {
        min-height: 8rem;
        font-size: 1.25rem;
      }

      /* Vertical demo needs explicit height */
      .vertical-demo {
        height: 16rem;
      }

      /* Image slides */
      .slide-img {
        min-height: 14rem;
        background-size: cover;
        background-position: center;
      }

@layer ui {

  :where(n-switch):not(:defined) { visibility: hidden; }

  /* ── Switch Base ── */

  :where(n-switch) {
    white-space: nowrap;
    --n-font-weight: var(--n-text-font-weight);
    --n-line-height: var(--n-control-line-height);

    --n-track-width: calc(var(--n-widget-size) * 1.75);
    --n-thumb-size: calc(var(--n-widget-size) - var(--n-space));
    --n-thumb-offset: calc(var(--n-space) / 2);

    /* Defaults: unchecked = muted outline variant */
    --n-track-bg: var(--n-widget);
    --n-track-bg-hover: var(--n-widget-hover);
    --n-track-bg-active: var(--n-widget-active);
    --n-track-bg-disabled: var(--n-widget-disabled);
    --n-track-border: var(--n-border-muted);
    --n-track-border-hover: var(--n-border-hover);
    --n-track-border-active: var(--n-border-active);
    --n-track-border-disabled: var(--n-border-disabled);
    --n-thumb-bg: var(--n-ink-muted);
    --n-thumb-bg-disabled: var(--n-border-disabled);

    position: relative;
    display: inline-flex;
    align-items: center;
    gap: calc(var(--n-space) * 2);
    /* WHY: padding reserves space for the absolutely-positioned track */
    padding-inline-start: calc(var(--n-track-width) + var(--n-space) * 2);
    min-height: var(--n-widget-size);

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: var(--n-line-height);
    font-weight: var(--n-font-weight);
    color: var(--n-ink);

    cursor: pointer;

    transition:
      color var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing);
  }

  /* ── Track (the pill-shaped container) ── */
  /* WHY: Absolutely positioned so the text content flows naturally
     after the padding-inline-start gap */

  :where(n-switch)::before {
    content: '';
    position: absolute;
    inset-inline-start: 0;
    top: 50%;
    transform: translateY(-50%);
    width: var(--n-track-width);
    height: var(--n-widget-size);
    border-radius: calc(var(--n-widget-size) / 2);
    border: 1px solid var(--n-track-border);
    background: var(--n-track-bg);

    transition:
      background var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Thumb (the sliding circle) — GPU composited via transform ── */
  /* WHY: Positioned inside the track area, slides left/right on check.
     Uses translateX for the slide so the animation stays on the compositor. */

  :where(n-switch)::after {
    content: '';
    position: absolute;
    top: 50%;
    inset-inline-start: var(--n-thumb-offset);
    transform: translateY(-50%);
    width: var(--n-thumb-size);
    height: var(--n-thumb-size);
    border-radius: 50%;
    background: var(--n-thumb-bg);

    transition:
      transform var(--n-duration) var(--n-easing),
      background var(--n-duration) var(--n-easing);
  }

  /* ── Checked State ── */
  /* WHY: Default checked fill uses accent so switch is visually distinct
     without needing intent="accent". Unchecked track stays neutral.
     When an explicit [intent] is set, the intent selector's --n-surface wins. */

  :where(n-switch)[aria-checked="true"]::before {
    background: var(--n-surface);
    border-color: var(--n-surface);
  }

  :where(n-switch)[aria-checked="true"]::after {
    /* Slide thumb to the right via translateX — GPU composited */
    transform: translateY(-50%) translateX(calc(var(--n-track-width) - var(--n-thumb-size) - var(--n-thumb-offset) * 2));
    background: var(--n-surface-ink);
  }

  /* ── Hover ── */

  :where(n-switch):hover,
  :where(n-switch)[force-hover] {
    color: var(--n-ink-hover);
  }

  :where(n-switch):hover::before,
  :where(n-switch)[force-hover]::before {
    background: var(--n-track-bg-hover);
    border-color: var(--n-track-border-hover);
  }

  :where(n-switch)[aria-checked="true"]:hover::before,
  :where(n-switch)[aria-checked="true"][force-hover]::before {
    background: var(--n-surface-hover);
    border-color: var(--n-surface-hover);
  }

  /* ── Active (pressed) ── */

  :where(n-switch)[pressed]::before,
  :where(n-switch)[force-active]::before {
    background: var(--n-track-bg-active);
    border-color: var(--n-track-border-active);
  }

  :where(n-switch)[aria-checked="true"][pressed]::before,
  :where(n-switch)[aria-checked="true"][force-active]::before {
    background: var(--n-surface-active);
    border-color: var(--n-surface-active);
  }

  /* ── Focus ── */

  :where(n-switch):focus-visible::before,
  :where(n-switch)[force-focus-visible]::before {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: 2px;
  }

  /* ── Disabled ── */

  :where(n-switch)[aria-disabled="true"] {
    color: var(--n-ink-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  :where(n-switch)[aria-disabled="true"]::before {
    background: var(--n-track-bg-disabled);
    border-color: var(--n-track-border-disabled);
  }

  :where(n-switch)[aria-disabled="true"]::after {
    background: var(--n-thumb-bg-disabled);
  }

  :where(n-switch)[aria-disabled="true"][aria-checked="true"]::before {
    background: var(--n-surface-disabled);
    border-color: var(--n-surface-disabled);
  }

  :where(n-switch)[aria-disabled="true"][aria-checked="true"]::after {
    background: var(--n-surface-ink-disabled);
  }

}

.demo-col {
        display: flex;
        flex-direction: column;
        gap: 0.75rem;
      }

@layer ui {

  :where(n-table, n-table-body, n-table-cell, n-table-head, n-table-header, n-table-row):not(:defined) { visibility: hidden; }

  /* ── Table Container ── */

  :where(n-table) {
    --n-font-weight: var(--n-text-font-weight);
    --n-line-height: var(--n-text-line-height);

    --n-background: var(--n-panel);
    --n-border-color: var(--n-border-muted);
    --n-color: var(--n-ink);

    display: grid;
    flex: 1 1 0%;
    min-width: 0;
    border: 1px solid var(--n-border-color);
    border-radius: var(--n-radius);
    overflow: hidden;

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: var(--n-line-height);
    color: var(--n-color);
  }

  /* ── Head & Body (row groups) ── */

  :where(n-table-head, n-table-body) {
    display: contents;
  }

  /* ── Row ── */

  :where(n-table-row) {
    display: grid;
    grid-template-columns: subgrid;
    grid-column: 1 / -1;
    align-items: center;
    min-height: 0;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing);
  }

  /* ── Header Row ── */

  :where(n-table-head) > :where(n-table-row) {
    background: var(--n-panel);
    border-block-end: 1px solid var(--n-border-color);
  }

  /* ── Body Rows ── */

  :where(n-table-body) > :where(n-table-row) {
    background: transparent;
  }

  :where(n-table-body) > :where(n-table-row):hover,
  :where(n-table-body) > :where(n-table-row)[force-hover] {
    background: var(--n-panel-hover);
  }

  :where(n-table-body) > :where(n-table-row) + :where(n-table-row) {
    border-block-start: 1px solid var(--n-border-color);
  }

  /* ── Selected Row ── */

  :where(n-table-body) > :where(n-table-row)[aria-selected="true"] {
    background: var(--n-surface);
    color: var(--n-surface-ink);
  }

  :where(n-table-body) > :where(n-table-row)[aria-selected="true"]:hover,
  :where(n-table-body) > :where(n-table-row)[aria-selected="true"][force-hover] {
    background: var(--n-surface-hover);
    color: var(--n-surface-ink-hover);
  }

  /* ── Selectable Table Rows ── */

  :where(n-table[selectable]) :where(n-table-body) > :where(n-table-row) {
    cursor: pointer;
  }

  :where(n-table[selectable]) :where(n-table-body) > :where(n-table-row):focus-visible,
  :where(n-table[selectable]) :where(n-table-body) > :where(n-table-row)[force-focus-visible] {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: -2px;
  }

  /* ── Cell ── */

  :where(n-table-cell, n-table-header) {
    padding-inline: calc(var(--n-space-k) * var(--n-space));
    padding-block: calc(var(--n-space) * 2);
  }

  /* ── Header Cell ── */

  :where(n-table-header) {
    font-weight: var(--n-button-font-weight);
    color: var(--n-ink-strong);
    white-space: nowrap;
  }

  /* ── Body Cell ── */

  :where(n-table-cell) {
    font-weight: var(--n-font-weight);
  }

  /* ── Plain Variant ── */
  /* WHY: Editorial / documentation tables that sit inline with prose.
     No outer border, no radius, no header fill, no row hover. */

  :where(n-table[variant="plain"]) {
    border: none;
    border-radius: 0;
    overflow: visible;
  }

  :where(n-table[variant="plain"]) :where(n-table-head) > :where(n-table-row) {
    background: transparent;
    border-block-end: 2px solid var(--n-border-color);
  }

  :where(n-table[variant="plain"]) :where(n-table-body) > :where(n-table-row):hover,
  :where(n-table[variant="plain"]) :where(n-table-body) > :where(n-table-row)[force-hover] {
    background: transparent;
  }

  :where(n-table[variant="plain"]) :where(n-table-header) {
    color: var(--n-ink-muted);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-size: smaller;
  }

  :where(n-table[variant="plain"]) :where(n-table-cell:first-child, n-table-header:first-child) {
    padding-inline-start: 0;
  }

  /* ── Sticky Header & Column ── */

  :where(n-table[sticky-header]) {
    overflow-y: auto;
  }

  :where(n-table[sticky-column]) {
    overflow-x: auto;
  }

  :where(n-table[sticky-header]) :where(n-table-head) > :where(n-table-row) {
    position: sticky;
    top: 0;
    z-index: 3;
  }

  :where(n-table[sticky-column]) :where(n-table-header:first-child) {
    position: sticky;
    inset-inline-start: 0;
    z-index: 2;
    background: var(--n-panel);
  }

  :where(n-table[sticky-column]) :where(n-table-cell:first-child) {
    position: sticky;
    inset-inline-start: 0;
    z-index: 1;
    background: var(--n-panel);
  }

  :where(n-table[sticky-header][sticky-column]) :where(n-table-head) > :where(n-table-row) > :where(n-table-header:first-child) {
    z-index: 4;
  }

  :where(n-table[sticky-column]) :where(n-table-body) > :where(n-table-row):hover > :where(n-table-cell:first-child),
  :where(n-table[sticky-column]) :where(n-table-body) > :where(n-table-row)[force-hover] > :where(n-table-cell:first-child) {
    background: var(--n-panel-hover);
  }

  :where(n-table[sticky-column]) :where(n-table-body) > :where(n-table-row)[aria-selected="true"] > :where(n-table-cell:first-child) {
    background: var(--n-surface);
  }

  /* WHY: Plain variant sets overflow:visible; sticky overrides it. */
  :where(n-table[variant="plain"][sticky-header]) { overflow-y: auto; }
  :where(n-table[variant="plain"][sticky-column]) { overflow-x: auto; }

  /* ── Resizable Columns ── */
  /* WHY: Injected handle divs at right edge of each header cell.
     Cannot use ::after — sortable headers already use it for sort arrow. */

  :where(n-table[resizable]) :where(n-table-header) {
    position: relative;
  }

  :where(n-table) :where(.table-resize-handle) {
    position: absolute;
    inset-block-start: 0;
    inset-inline-end: -2px;
    width: 4px;
    block-size: 100%;
    cursor: col-resize;
    z-index: 5;
    background: transparent;
    transition: background var(--n-duration) var(--n-easing);
  }

  :where(n-table) :where(.table-resize-handle):hover {
    background: var(--n-border-muted);
  }

  :where(n-table[resizing]) :where(.table-resize-handle) {
    background: var(--n-focus-ring);
  }

  :where(n-table[resizing]) {
    user-select: none;
    cursor: col-resize;
  }

  /* ── Reorderable Rows ── */
  /* WHY: Drag-to-reorder rows. DragController (slot mode) manages ghost + placeholder.
     Cursor hints signal draggability. Colspan rows are excluded from drag. */

  :where(n-table[reorderable]) :where(n-table-body) > :where(n-table-row):not([colspan]) {
    cursor: grab;
  }

  :where(n-table[reorderable]) :where(n-table-body) > :where(n-table-row):not([colspan]):active,
  :where(n-table[reorderable]) :where(n-table-body) > :where(n-table-row):not([colspan])[force-active] {
    cursor: grabbing;
  }

  :where(n-table-body) > :where(n-table-row)[dragging] {
    opacity: 0.4;
  }

  /* WHY: Placeholder spans all columns (grid-column: 1 / -1) because n-table-body
     has display: contents — its children participate in the parent n-table grid.
     Styled as a thin accent line to indicate insertion point. */
  :where(n-table-body) > :where(.drag-placeholder) {
    grid-column: 1 / -1;
    height: 2px;
    background: var(--n-focus-ring);
    border-radius: 1px;
    margin-block: calc(var(--n-space) * -1);
    position: relative;
    z-index: 1;
  }

}

/* ── Attribute API (unlayered) ── */

/* Colspan Row */
:where(n-table-row)[colspan] {
  grid-template-columns: 1fr;
}

:where(n-table-body) > :where(n-table-row)[colspan] {
  background: var(--n-panel);
  font-size: var(--n-group-header-font);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--n-ink-muted);
}

:where(n-table-body) > :where(n-table-row)[colspan]:hover,
:where(n-table-body) > :where(n-table-row)[colspan][force-hover] {
  background: var(--n-panel);
}

:where(n-table[selectable]) :where(n-table-body) > :where(n-table-row)[colspan] {
  cursor: default;
}

:where(n-table-row)[hidden] {
  display: none;
}

/* Sticky Colspan Row */
:where(n-table[sticky-header]) :where(n-table-row)[colspan][sticky] {
  position: sticky;
  top: var(--n-header-height, 0px);
  z-index: 2;
}


@layer ui {

  :where(n-tab, n-tab-panel, n-tab-panels, n-tabs):not(:defined) { visibility: hidden; }

  /* ── Tabs Container (tablist) ── */

  :where(n-tabs) {
    --n-font-weight: var(--n-button-font-weight);
    --n-line-height: var(--n-control-line-height);

    /* Indicator position (set by JS): 0-based index, tab count */
    --n-indicator-index: 0;
    --n-tab-count: 1;

    position: relative;
    min-width: 0;

    outline: none;

    transition:
      border-color var(--n-duration) var(--n-easing);
  }

  :where(n-tabs)[aria-disabled="true"] {
    color: var(--n-ink-disabled);
    pointer-events: none;
  }

  /* ── Horizontal (default): grid — tabs row 1, panels row 2 ── */
  /* WHY: repeat(--n-tab-count, 1fr) creates explicit columns so 1 / -1
     spans work and the percentage-based indicator aligns to grid slots. */

  :where(n-tabs:not([orientation="vertical"])) {
    display: grid;
    grid-template-columns: repeat(var(--n-tab-count), 1fr);
    grid-template-rows: auto 1fr;
  }

  :where(n-tabs:not([orientation="vertical"])) > :where(n-tab) {
    grid-row: 1;
  }

  :where(n-tabs:not([orientation="vertical"])) > :where(n-tab-panels) {
    grid-column: 1 / -1;
    grid-row: 2;
  }

  /* Horizontal separator line — positioned at bottom of tab row */
  :where(n-tabs:not([orientation="vertical"]))::before {
    content: '';
    position: absolute;
    top: var(--n-size);
    inset-inline: 0;
    height: 1px;
    background: var(--n-border-muted);
    transform: translateY(-100%);
  }

  /* Horizontal sliding underline indicator */
  :where(n-tabs:not([orientation="vertical"]))::after {
    content: none;
  }

  :where(n-tabs:not([orientation="vertical"])):state(ready)::after {
    content: '';
    position: absolute;
    z-index: 1;
    top: var(--n-size);
    left: 0;
    width: calc(100% / var(--n-tab-count));
    height: var(--n-tabs-indicator);
    background: var(--n-surface);
    border-radius: 1px;
    transform: translateY(-100%) translateX(calc(var(--n-indicator-index) * 100%));

    transition:
      transform var(--n-duration) var(--n-easing),
      background var(--n-duration) var(--n-easing);
  }

  /* ── Vertical: grid — tabs column + panels column ── */

  :where(n-tabs[orientation="vertical"]) {
    display: grid;
    grid-template-columns: auto 1fr;
    align-items: start;
    border-inline-start: 1px solid var(--n-border-muted);
  }

  :where(n-tabs[orientation="vertical"])::before {
    display: none;
  }

  :where(n-tabs[orientation="vertical"]) > :where(n-tab-panels) {
    grid-column: 2;
    grid-row: 1 / span 999;
  }

  /* Vertical sliding side indicator */
  :where(n-tabs[orientation="vertical"])::after {
    content: none;
  }

  :where(n-tabs[orientation="vertical"]):state(ready)::after {
    content: '';
    position: absolute;
    inset-inline-start: -1px;
    top: 0;
    height: var(--n-size);
    width: var(--n-tabs-indicator);
    background: var(--n-surface);
    border-radius: 1px;
    transform: translateY(calc(var(--n-indicator-index) * var(--n-size)));

    transition:
      transform var(--n-duration) var(--n-easing),
      background var(--n-duration) var(--n-easing);
  }

  /* ── Tab ── */

  :where(n-tab) {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--n-pad-gap);

    position: relative;
    z-index: 1;

    min-height: var(--n-size);
    padding-inline: var(--n-pad-inline);

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: var(--n-line-height);
    font-weight: var(--n-font-weight);

    background: transparent;
    color: var(--n-ink-muted);

    white-space: nowrap;
    cursor: pointer;
    outline: none;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Tab States ── */

  :where(n-tab):hover,
  :where(n-tab)[force-hover] {
    color: var(--n-ink-hover);
  }

  :where(n-tab)[pressed],
  :where(n-tab)[force-active] {
    color: var(--n-ink-active);
  }

  :where(n-tab)[aria-selected="true"] {
    color: var(--n-ink-active);
  }

  :where(n-tab)[aria-selected="true"]:hover,
  :where(n-tab)[aria-selected="true"][force-hover] {
    color: var(--n-surface-ink-hover);
  }

  /* ── Tab Focus ── */

  :where(n-tab):focus-visible,
  :where(n-tab)[force-focus-visible] {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: -2px;
  }

  /* ── Tab Disabled ── */

  :where(n-tab)[aria-disabled="true"] {
    color: var(--n-ink-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  /* ── Icon-side padding compensation ── */

  :where(n-tab):has(> n-icon:first-child) {
    padding-inline: var(--n-pad-inline-icon) var(--n-pad-inline);
  }

  :where(n-tab):has(> n-icon:last-child) {
    padding-inline: var(--n-pad-inline) var(--n-pad-inline-icon);
  }

  /* ── Vertical Tab Overrides (after base rules so cascade wins) ── */

  :where(n-tabs[orientation="vertical"]) > :where(n-tab) {
    grid-column: 1;
    justify-content: start;
  }

  /* ── Tab Panels Container ── */

  :where(n-tab-panels) {
    display: block;
    min-height: 0;
  }

  /* ── Tab Panel ── */

  :where(n-tab-panel) {
    --n-padding: calc(var(--n-space) * 4);

    display: block;
    padding: var(--n-padding);
    outline: none;
  }

  :where(n-tab-panel[hidden]) {
    display: none;
  }

  /* ── Hidden ── */

  :where(n-tabs)[hidden] {
    display: none;
  }

}

/* ── Attribute API (unlayered) ── */

:where(n-tabs)[inline] {
  display: inline-grid;
}


@layer ui {

  :where(n-textarea):not(:defined) { visibility: hidden; }

  /* ── Textarea Base ── */

  :where(n-textarea) {
    --n-font-weight: var(--n-input-font-weight);
    --n-line-height: var(--n-control-line-height);
    --n-rows: 3;

    --n-background: var(--n-control);
    --n-background-hover: var(--n-control-hover);
    --n-background-active: var(--n-control-active);
    --n-background-disabled: var(--n-control-disabled);
    --n-color: var(--n-ink);
    --n-color-hover: var(--n-ink-hover);
    --n-color-disabled: var(--n-ink-disabled);
    --n-border-color: var(--n-border-rest);
    --n-border-color-hover: var(--n-border-muted);
    --n-border-color-disabled: transparent;

    display: inline-block;
    min-width: 0;
    vertical-align: top;

    min-height: var(--n-size);
    height: calc(var(--n-size) * var(--n-rows));
    padding-block: calc(var(--n-space) * 2);
    padding-inline: var(--n-pad-inline);

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: 1.5;
    font-weight: var(--n-font-weight);

    border-radius: var(--n-radius);
    border: 1px solid var(--n-border-color);
    background: var(--n-background);
    color: var(--n-color);

    cursor: text;
    /* WHY: Override inherited user-select: none from n-field — contenteditable needs text selection */
    user-select: text;
    outline: none;
    resize: vertical;
    overflow-y: auto;
    scrollbar-width: thin;
    scrollbar-color: var(--n-border-muted-neutral) transparent;
    white-space: pre-wrap;
    word-break: break-word;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  /* ── Placeholder (shown when empty via CustomStateSet) ── */

  :where(n-textarea):state(empty)::before {
    content: attr(placeholder);
    color: var(--n-ink-placeholder);
    pointer-events: none;
  }

  /* ── States ── */

  :where(n-textarea):hover,
  :where(n-textarea)[force-hover] {
    background: var(--n-background-hover);
    color: var(--n-color-hover);
    border-color: var(--n-border-color-hover);
  }

  /* ── Filled state (elevated bg, no border, stronger text) ── */
  /* WHY: When the textarea has content, bump elevation (control → panel),
     text contrast (ink → ink-strong), and drop border so filled fields
     look solid and elevated vs the outlined empty state.
     Updates --n-background / --n-background-hover so consumers (e.g. chat)
     that override these tokens still win in the filled state. */

  :where(n-textarea:not(:state(empty))) {
    --n-background: var(--n-panel);
    --n-background-hover: var(--n-panel-hover);
    color: var(--n-ink-strong);
    border-color: transparent;
  }

  :where(n-textarea:not(:state(empty)):hover),
  :where(n-textarea:not(:state(empty))[force-hover]) {
    border-color: transparent;
  }

  :where(n-textarea):focus,
  :where(n-textarea)[force-focus] {
    border-color: var(--n-focus-ring);
    outline: 1px solid var(--n-focus-ring);
    outline-offset: 0;
  }

  :where(n-textarea)[aria-disabled="true"] {
    background: var(--n-background-disabled);
    color: var(--n-color-disabled);
    border-color: var(--n-border-color-disabled);
    cursor: not-allowed;
    pointer-events: none;
    resize: none;
  }

}

/* ── Attribute API (unlayered) ── */

:where(n-textarea)[rows="1"] { --n-rows: 1; }
:where(n-textarea)[rows="2"] { --n-rows: 2; }
:where(n-textarea)[rows="4"] { --n-rows: 4; }
:where(n-textarea)[rows="5"] { --n-rows: 5; }
:where(n-textarea)[rows="6"] { --n-rows: 6; }
:where(n-textarea)[rows="8"] { --n-rows: 8; }
:where(n-textarea)[rows="10"] { --n-rows: 10; }

:where(n-textarea)[autogrow] {
  resize: none;
  overflow-y: hidden;
  height: var(--n-autogrow-height, auto);
}

.demo-row {
        display: flex;
        flex-direction: column;
        gap: 0.75rem;
        margin-bottom: 0.75rem;
      }

      .demo-label {
        font-size: 0.625rem;
        font-weight: 600;
        text-transform: uppercase;
        letter-spacing: 0.04em;
        color: var(--n-ink-muted-neutral);
        margin-bottom: 0.25rem;
      }

@layer ui {

  /* ╭──────────────────────────────────────────────────────────╮
     │  n-toast                                                 │
     │  Toast notification element + popover container.         │
     │  Created by ToastController. Container uses              │
     │  [popover="manual"] for top-layer rendering.             │
     ╰──────────────────────────────────────────────────────────╯ */

  :where(n-toast):not(:defined) { visibility: hidden; }

  /* ── Container ── */

  :where(.n-toast-container) {
    position: fixed;
    inset: unset;
    top: 1rem;
    right: 1rem;
    margin: 0;
    padding: 0;
    border: none;
    background: transparent;
    overflow: visible;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    pointer-events: none;
  }

  /* WHY: Author-layer display overrides UA display:none on popover.
     Must hide when not open. */
  :where(.n-toast-container):not(:popover-open) {
    display: none;
  }

  /* ── Toast ── */

  :where(n-toast) {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    min-width: 280px;
    max-width: 360px;
    padding: 0.75rem 1rem;
    border-radius: var(--n-radius);
    font-size: 0.875rem;
    line-height: 1.4;
    box-shadow: 0 4px 12px oklch(0% 0 0 / 0.15);
    pointer-events: auto;
    animation: n-toast-in var(--n-duration) var(--n-easing);
  }

  /* ── Children ── */

  :where(n-toast) :where(.n-toast-message) {
    flex: 1;
  }

  :where(n-toast) :where(.n-toast-close) {
    background: none;
    border: none;
    color: inherit;
    font-size: 1.125rem;
    cursor: pointer;
    padding: 0.125rem 0.25rem;
    border-radius: 0.25rem;
    opacity: 0.7;
    line-height: 1;
  }

  :where(n-toast) :where(.n-toast-close):hover {
    opacity: 1;
  }

  /* ── Animation ── */

  @keyframes n-toast-in {
    from {
      opacity: 0;
      transform: translateX(1rem);
    }
    to {
      opacity: 1;
      transform: translateX(0);
    }
  }

}

/* ── Attribute API (unlayered) ── */

:where(n-toast)[intent="info"] {
  background: var(--n-surface-info);
  color: var(--n-surface-ink-info);
}

:where(n-toast)[intent="success"] {
  background: var(--n-surface-success);
  color: var(--n-surface-ink-success);
}

:where(n-toast)[intent="warning"] {
  background: var(--n-surface-warning);
  color: var(--n-surface-ink-warning);
}

:where(n-toast)[intent="danger"] {
  background: var(--n-surface-danger);
  color: var(--n-surface-ink-danger);
}

@layer ui {

  :where(n-toolbar):not(:defined) { visibility: hidden; }

  /* ── Base ── */

  :where(n-toolbar) {
    --n-ground: var(--n-panel);
    --n-background: var(--n-ground);
    --n-border-color: var(--n-border-muted);

    /* Default size context — children inherit md */
    --n-size: var(--n-size-md);
    --n-font-size: var(--n-font-md);
    --n-letter-spacing: var(--n-tracking-md);
    --n-space: var(--n-space-md);
    --n-icon-size: var(--n-icon-md);
    --n-widget-size: var(--n-widget-md);
    --n-widget-font: var(--n-widget-font-md);

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    min-height: var(--n-size);
    align-items: center;
    gap: var(--n-pad-gap);
    overflow: clip;
    background: var(--n-background);
    border-radius: var(--n-radius);
    border: 1px solid var(--n-border-color);
    padding: calc(var(--n-space) * 1);

    font-size: var(--n-font-size);
    line-height: var(--n-line-height);
  }

  /* WHY: n-button has width:100% for block contexts. Inside a toolbar,
     buttons must shrink-wrap to their content at intrinsic width.
     Items that don't fit go into the overflow menu — no growing or shrinking.
     Second selector targets children of display:contents groups (DOM grandchildren
     that are layout-level flex items of the toolbar). */
  :where(n-toolbar) > :where(:not(n-listbox)),
  :where(n-toolbar) > :where(n-toolbar-group) > :where(*) {
    flex: 0 0 auto;
    width: auto;
  }

  /* ── Fill mode ── */

  /* Per-item [fill] — lets a single child grow to fill available space.
     Use on a spacer element to push trailing items to the edge. */
  :where(n-toolbar) > :where([fill]),
  :where(n-toolbar) > :where(n-toolbar-group) > :where([fill]) {
    flex: 1 0 auto;
  }

  /* WHY: [fill] on the toolbar lets ALL items grow to distribute space evenly.
     Default is intrinsic (compact); fill is opt-in.
     flex-shrink: 1 + min-width: 0 lets items compress in constrained containers
     (e.g. n-header trailing slot) rather than overflowing the toolbar box. */
  :where(n-toolbar[fill]) > :where(:not(n-listbox)),
  :where(n-toolbar[fill]) > :where(n-toolbar-group) > :where(*) {
    flex: 1 1 0;
    min-width: 0;
  }

  /* WHY: During overflow measurement, items must be at intrinsic width
     so offsetWidth reflects true content size, not grown size. */
  :where(n-toolbar[data-measuring]) > :where(:not(n-listbox)),
  :where(n-toolbar[data-measuring]) > :where(n-toolbar-group) > :where(*) {
    flex: 0 0 auto;
  }

  /* ── Toolbar group ── */

  /* Groups use display:contents so children are direct flex items of the toolbar.
     When the group overflows, switch to display:none to hide all children atomically. */
  :where(n-toolbar-group) {
    display: contents;
  }

  :where(n-toolbar-group[data-overflow]) {
    display: none;
  }

  /* ── Overflow ── */

  /* Hidden overflow items */
  :where(n-toolbar) > :where([data-overflow]) {
    display: none;
  }

  /* More button — compact, always at trailing edge.
     order:99 fixes parser ordering (connectedCallback stamps before children exist).
     flex:0 0 auto prevents the trigger from growing with content items. */
  :where(n-toolbar) > :where([data-overflow-trigger]) {
    flex: 0 0 auto;
    order: 99;
    margin-inline-start: auto;
  }

  /* WHY: Inline SVG in overflow trigger — same sizing as n-icon. */
  :where(n-toolbar) > :where([data-overflow-trigger]) > :where(svg) {
    width: var(--n-icon-size);
    height: var(--n-icon-size);
  }

  /* Hide more button when no overflow */
  :where(n-toolbar):not([data-overflowing]) > :where([data-overflow-trigger]) {
    display: none;
  }

  /* ── Overflow popover ── */

  :where(n-toolbar) > :where(n-listbox[popover]) {
    position: fixed;
    position-area: block-end span-inline-end;
    position-try-fallbacks: flip-block;
    margin: 0.25rem 0 0;
    min-width: 10rem;
  }

  :where(n-toolbar) > :where(n-listbox[popover]):not(:popover-open) {
    display: none;
  }

}

/* ── Attribute API (unlayered — must beat consumer overrides) ── */

/* Vertical orientation */
:where(n-toolbar)[orientation="vertical"] {
  flex-direction: column;
  align-items: stretch;
}

/* Padding */
:where(n-toolbar)[padding="none"] { padding: 0; }
:where(n-toolbar)[padding="tight"] { padding: calc(var(--n-space) * 1); }
:where(n-toolbar)[padding="regular"] { padding: calc(var(--n-space) * 2); }
:where(n-toolbar)[padding="relaxed"] { padding: calc(var(--n-space) * 3); }

/* Plain variant */
/* WHY: Embedded contexts (n-header trailing, chat controls) need
   toolbar layout + overflow without container chrome. */
:where(n-toolbar)[variant="plain"] {
  background: transparent;
  border: none;
  border-radius: 0;
  padding: 0;
}

/* Numeric padding — --n-space multiplier. Placed after variant rules
   so padding="N" can override variant="plain"'s padding:0. */
:where(n-toolbar)[padding="0"] { padding: 0; }
:where(n-toolbar)[padding="1"] { padding: calc(var(--n-space) * 1); }
:where(n-toolbar)[padding="2"] { padding: calc(var(--n-space) * 2); }
:where(n-toolbar)[padding="3"] { padding: calc(var(--n-space) * 3); }
:where(n-toolbar)[padding="4"] { padding: calc(var(--n-space) * 4); }
:where(n-toolbar)[padding="6"] { padding: calc(var(--n-space) * 6); }

.editor-area {
        margin-top: 0.75rem;
        padding: 0.75rem;
        border: 1px solid var(--n-border-muted-neutral);
        border-radius: 0.25rem;
        min-height: 4rem;
        font-size: 0.875rem;
        color: var(--n-ink-muted-neutral);
      }

@layer ui {

  :where(n-tooltip):not(:defined) { visibility: hidden; }

  /* ── Tooltip Base ── */
  /* WHY: Tooltip is a child of its trigger, display:contents when closed
     so it doesn't affect the trigger's layout. Promoted to top-layer
     via [popover] when shown. */

  :where(n-tooltip) {
    display: contents;
  }

  :where(n-tooltip[popover]) {
    position: fixed;
    /* Default placement: above the anchor */
    position-area: block-start;
    position-try-fallbacks: flip-block, flip-inline;
    margin: var(--n-popover-viewport-margin);

    max-width: var(--n-tooltip-max-width);
    padding-block: calc(var(--n-space) * 1.5);
    padding-inline: calc(var(--n-space-k) * var(--n-space) * 0.75);

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: var(--n-text-line-height);
    font-weight: var(--n-text-font-weight);

    color: var(--n-surface-ink);
    background: var(--n-surface);
    border: 1px solid var(--n-border-muted);
    border-radius: calc(var(--n-radius) * 0.6);

    box-shadow: var(--n-shadow-md);

    /* WHY: Override UA popover styles */
    inset: unset;
    overflow: visible;

    --n-popover-origin: bottom center;
    --n-popover-from: perspective(800px) scale(0.96) rotateX(10deg);

    transform-origin: var(--n-popover-origin);
    opacity: 0;
    transform: var(--n-popover-from);
    transition:
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing),
      display var(--n-duration) var(--n-easing) allow-discrete,
      overlay var(--n-duration) var(--n-easing) allow-discrete;
  }

  /* ── Open State ── */

  :where(n-tooltip[popover]):popover-open {
    opacity: 1;
    transform: none;
  }

  /* Starting style for entry animation */
  @starting-style {
    :where(n-tooltip[popover]):popover-open {
      opacity: 0;
      transform: var(--n-popover-from);
    }
  }

  /* ── Placement Variants ── */

  :where(n-tooltip[placement="top"]) {
    --n-popover-origin: bottom center;
    --n-popover-from: perspective(800px) scale(0.96) rotateX(10deg);
    position-area: block-start;
    margin-block-end: calc(var(--n-space) * 2);
  }

  :where(n-tooltip[placement="bottom"]) {
    --n-popover-origin: top center;
    --n-popover-from: perspective(800px) scale(0.96) rotateX(-10deg);
    position-area: block-end;
    margin-block-start: calc(var(--n-space) * 2);
  }

  :where(n-tooltip[placement="left"]) {
    --n-popover-origin: right center;
    --n-popover-from: perspective(800px) scale(0.96) rotateY(-10deg);
    position-area: inline-start;
    margin-inline-end: calc(var(--n-space) * 2);
  }

  :where(n-tooltip[placement="right"]) {
    --n-popover-origin: left center;
    --n-popover-from: perspective(800px) scale(0.96) rotateY(10deg);
    position-area: inline-end;
    margin-inline-start: calc(var(--n-space) * 2);
  }

  /* ── Hidden (not :popover-open) ── */
  /* WHY: Override author display so UA display:none takes effect */

  :where(n-tooltip[popover]):not(:popover-open) {
    display: none;
  }

}

.demo-section > .demo-code {
        flex-basis: 100%;
      }

@layer ui {

  :where(n-tree, n-tree-item):not(:defined) { visibility: hidden; }

  /* ── Tree Container ── */

  :where(n-tree) {
    --n-font-weight: var(--n-button-font-weight);
    --n-line-height: var(--n-control-line-height);

    display: flex;
    flex: 1 1 0%;
    min-width: 0;
    flex-direction: column;
    padding-block: var(--n-space);
    padding-inline: var(--n-space);
    font-size: var(--n-font-size);
    line-height: var(--n-line-height);
  }

  :where(n-tree)[aria-disabled="true"] {
    color: var(--n-ink-disabled);
    pointer-events: none;
  }

  /* ── Tree Item ── */

  :where(n-tree-item) {
    display: flex;
    flex-direction: column;
    min-width: 0;
  }

  /* ── Item row (label area) ── */

  :where(n-tree-item) > :where([slot="label"]) {
    display: flex;
    align-items: center;
    gap: var(--n-pad-gap);

    min-height: var(--n-size);
    /* WHY: Each nesting level indents by icon-size + gap so child text
       aligns with the parent's text (past the caret icon). */
    padding-inline: var(--n-pad-inline);
    padding-inline-start: calc(var(--n-pad-inline) + var(--n-tree-depth, 0) * (var(--n-icon-size) + var(--n-pad-gap)));

    font-size: var(--n-font-size);
    letter-spacing: var(--n-letter-spacing);
    line-height: var(--n-line-height);
    font-weight: var(--n-text-font-weight);

    border-radius: calc(var(--n-radius) - var(--n-space));
    background: transparent;
    color: var(--n-ink);
    cursor: pointer;
    outline: none;

    transition:
      background var(--n-duration) var(--n-easing),
      color var(--n-duration) var(--n-easing),
      border-color var(--n-duration) var(--n-easing),
      border-radius var(--n-duration) var(--n-easing),
      outline var(--n-duration) var(--n-easing),
      opacity var(--n-duration) var(--n-easing),
      transform var(--n-duration) var(--n-easing);
  }

  :where(n-tree-item) > :where([slot="label"]):hover,
  :where(n-tree-item[force-hover]) > :where([slot="label"]) {
    background: var(--n-panel-hover);
    color: var(--n-ink-hover);
  }

  :where(n-tree-item) > :where([slot="label"]):focus-visible,
  :where(n-tree-item[force-focus-visible]) > :where([slot="label"]) {
    outline: 2px solid var(--n-focus-ring);
    outline-offset: -2px;
  }

  /* ── Selected ── */

  :where(n-tree-item[aria-selected="true"]) > :where([slot="label"]) {
    background: var(--n-surface);
    color: var(--n-surface-ink);
    font-weight: var(--n-font-weight);
  }

  /* ── Expand caret icon ── */

  :where(n-tree-item) > :where([slot="label"]) > :where(n-icon[data-role="caret"]) {
    flex-shrink: 0;
    color: currentColor;
  }

  /* ── Children group ── */

  :where(n-tree-item) > :where(.n-tree-children) {
    display: none;
  }

  :where(n-tree-item[expanded]) > :where(.n-tree-children) {
    display: flex;
    flex-direction: column;
    min-width: 0;
  }

  /* ── Disabled ── */

  :where(n-tree-item[aria-disabled="true"]) > :where([slot="label"]) {
    color: var(--n-ink-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  :where(n-tree[hidden]) { display: none; }

}

.log {
        font-family: monospace;
        font-size: 0.75rem;
        background: var(--n-panel-neutral);
        border-radius: 0.375rem;
        padding: 0.75rem;
        max-height: 10rem;
        overflow-y: auto;
        margin-top: 0.5rem;
      }

@layer ui {

  /* ╭──────────────────────────────────────────────────────────╮
     │  n-video                                                 │
     │  Video container with token-aware border-radius and      │
     │  responsive sizing. CSS-only — no JS.                    │
     ╰──────────────────────────────────────────────────────────╯ */

  /* ── Base ── */

  :where(n-video) {
    display: block;
    min-width: 0;
    max-width: 100%;
    overflow: hidden;
    border-radius: var(--n-radius);
    background: var(--n-control);
  }

  :where(n-video) > :where(video) {
    display: block;
    max-width: 100%;
    height: auto;
  }

}
