html[data-nt="aurora"]{--brand:#428176;--brand-mid:#0d5d4f;--brand-light:#a3c1bc;--amber:#4cdac9;--amber-light:#facc15;--blue:#428176;}
html[data-nt="aurora"] body{background:#e6eceb;}
html[data-nt="champagne"]{--brand:#4d4941;--brand-mid:#1b160c;--brand-light:#a8a6a3;--amber:#c98a1e;--amber-light:#af7a2c;--blue:#4d4941;}
html[data-nt="champagne"] body{background:#f6efe1;}
html[data-nt="copper"]{--brand:#4b4844;--brand-mid:#18140f;--brand-light:#a7a6a4;--amber:#c87941;--amber-light:#e09a68;--blue:#4b4844;}
html[data-nt="copper"] body{background:#e8e7e7;}
html[data-nt="crimson"]{--brand:#6b505a;--brand-mid:#411f2b;--brand-light:#b7aaae;--amber:#fb7185;--amber-light:#fbbf24;--blue:#6b505a;}
html[data-nt="crimson"] body{background:#eae7e8;}
html[data-nt="daylight"]{--brand:#434548;--brand-mid:#0e1115;--brand-light:#a3a5a6;--amber:#c2670a;--amber-light:#ae7539;--blue:#434548;}
html[data-nt="daylight"] body{background:#f4f7fa;}
html[data-nt="ember"]{--brand:#4c4444;--brand-mid:#1a0f0f;--brand-light:#a8a4a4;--amber:#ef5f3c;--amber-light:#ff8a6b;--blue:#4c4444;}
html[data-nt="ember"] body{background:#e8e7e7;}
html[data-nt="forest"]{--brand:#556750;--brand-mid:#253c1f;--brand-light:#acb5aa;--amber:#a3e635;--amber-light:#facc15;--blue:#556750;}
html[data-nt="forest"] body{background:#e8e9e7;}
html[data-nt="halo"]{--brand:#4c5e71;--brand-mid:#1a3049;--brand-light:#a8b0ba;--amber:#4fd8ff;--amber-light:#ffb547;--blue:#4c5e71;}
html[data-nt="halo"] body{background:#e7e9eb;}
html[data-nt="horizon"]{--brand:#434a58;--brand-mid:#0e1729;--brand-light:#a3a7ae;--amber:#6183e4;--amber-light:#bf6d2e;--blue:#434a58;}
html[data-nt="horizon"] body{background:#d7e3f4;}
html[data-nt="ice"]{--brand:#424b4f;--brand-mid:#0d181d;--brand-light:#a3a7a9;--amber:#22d3ee;--amber-light:#67e8f9;--blue:#424b4f;}
html[data-nt="ice"] body{background:#e6e7e8;}
html[data-nt="matrix"]{--brand:#475369;--brand-mid:#13233f;--brand-light:#a5abb6;--amber:#34d399;--amber-light:#34d399;--blue:#475369;}
html[data-nt="matrix"] body{background:#e7e8ea;}
html[data-nt="royal"]{--brand:#635183;--brand-mid:#372060;--brand-light:#b3aac3;--amber:#a78bfa;--amber-light:#fbbf24;--blue:#635183;}
html[data-nt="royal"] body{background:#e9e7ec;}
html[data-nt="sand"]{--brand:#4a4641;--brand-mid:#17120c;--brand-light:#a7a5a3;--amber:#bf6d2e;--amber-light:#ad7951;--blue:#4a4641;}
html[data-nt="sand"] body{background:#faf6ef;}
html[data-nt="slate"]{--brand:#474c51;--brand-mid:#131920;--brand-light:#a5a8aa;--amber:#5b9dd9;--amber-light:#8ec2ee;--blue:#474c51;}
html[data-nt="slate"] body{background:#e7e8e8;}
html[data-nt="solar"]{--brand:#4d4845;--brand-mid:#1b1510;--brand-light:#a8a6a4;--amber:#ea580c;--amber-light:#bf6d2e;--blue:#4d4845;}
html[data-nt="solar"] body{background:#faf5ec;}
html[data-nt="sterling"]{--brand:#41454c;--brand-mid:#0b1019;--brand-light:#a2a4a8;--amber:#726bea;--amber-light:#bc6422;--blue:#41454c;}
html[data-nt="sterling"] body{background:#f5f6f8;}
html[data-nt="terminal"]{--brand:#424642;--brand-mid:#0d120d;--brand-light:#a3a5a3;--amber:#3fb950;--amber-light:#6ee787;--blue:#424642;}
html[data-nt="terminal"] body{background:#e6e7e6;}
html[data-nt="violet"]{--brand:#47454c;--brand-mid:#13101a;--brand-light:#a5a4a8;--amber:#a78bfa;--amber-light:#c4b2ff;--blue:#47454c;}
html[data-nt="violet"] body{background:#e7e7e8;}
html[data-nt="wyynn"]{--brand:#484d56;--brand-mid:#141b26;--brand-light:#a6a8ad;--amber:#5182ef;--amber-light:#d97706;--blue:#484d56;}
html[data-nt="wyynn"] body{background:#e8f0f7;}
/* ── 🔤 TEXT ────────────────────────────────────────────────────────────
   Face is a token so it cascades from the root. Every stack ends in a real
   generic: these are Windows/Office faces most visitors will not have, and a
   bare family name would silently do nothing. */
html[data-ntf="aptos"]{--nt-font:"Aptos","Segoe UI",system-ui,sans-serif}
html[data-ntf="calibri"]{--nt-font:"Calibri","Carlito","Segoe UI",sans-serif}
html[data-ntf="abadi"]{--nt-font:"Abadi","Segoe UI",Verdana,sans-serif}
html[data-ntf="arialnova"]{--nt-font:"Arial Nova",Arial,Helvetica,sans-serif}
html[data-ntf="arialnovacond"]{--nt-font:"Arial Nova Cond","Arial Narrow",Arial,sans-serif}
html[data-ntf="kigelia"]{--nt-font:"Kigelia","Segoe UI",system-ui,sans-serif}
html[data-ntf="latha"]{--nt-font:"Latha","Nirmala UI","Segoe UI",sans-serif}
html[data-ntf="lucida"]{--nt-font:"Lucida Sans","Lucida Sans Unicode","Lucida Grande",sans-serif}
html[data-ntf="meiryo"]{--nt-font:"Meiryo","Yu Gothic","MS PGothic",sans-serif}
html[data-ntf="meiryoui"]{--nt-font:"Meiryo UI","Meiryo","Yu Gothic UI",sans-serif}
html[data-ntf="gothicneo"]{--nt-font:"Microsoft GothicNeo","Malgun Gothic","Segoe UI",sans-serif}
html[data-ntf="yahei"]{--nt-font:"Microsoft YaHei","PingFang SC","Segoe UI",sans-serif}
html[data-ntf] body,html[data-ntf] button,html[data-ntf] input,
html[data-ntf] select,html[data-ntf] textarea{font-family:var(--nt-font)!important}

/* size scales the ROOT, so every rem-based measure follows it */
html[data-nts="s"]{font-size:93%}
html[data-nts="l"]{font-size:108%}
html[data-nts="xl"]{font-size:116%}
html[data-ntw="bold"] body{font-weight:600}

/* ── 🎚 DISPLAY ─────────────────────────────────────────────────────────
   One filter on the root covers every theme and every panel without touching
   their rules. The defaults are the IDENTITY values, so with nothing stored
   this is a no-op rather than a subtle shift nobody asked for. */
html{filter:brightness(var(--nt-bright,1)) contrast(var(--nt-contrast,1))
     saturate(var(--nt-sat,1)) sepia(var(--nt-warm,0));}

/* ── ◠ NAETH CURVE ──────────────────────────────────────────────────────
   ONE diagonal pair: top-left and bottom-right stay square, top-right and
   bottom-left are rounded. The stylesheet handles what it can; naeth-curve.js
   handles the rest, because most boxes carry their radius INLINE and inline
   beats a stylesheet. */
html[data-fui="curve"] .card,html[data-fui="curve"] .panel,
html[data-fui="curve"] .tile,html[data-fui="curve"] .stat{
  border-radius:0 22px 0 22px;
}
html[data-fui="curve"] .btn,html[data-fui="curve"] button,
html[data-fui="curve"] input,html[data-fui="curve"] select,
html[data-fui="curve"] textarea{border-radius:0 14px 0 14px}
/* the Theme panel's own controls must stay legible while you use them to
   change the shape - the same reason the engine skips its own panel */
html[data-fui="curve"] .nt-b,html[data-fui="curve"] .nt-sw button,
html[data-fui="curve"] #nt-confirm button{clip-path:none;border-radius:8px}
