@hanzo/ui 8.0.47 → 8.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.css CHANGED
@@ -229,7 +229,7 @@
229
229
  So EVERY token whose dark value is a --white-* rung must be restated below,
230
230
  and check-tokens.mjs fails the build if one is missed — that class of bug is
231
231
  silent (the border simply stops existing) and has shipped before. */
232
- .light{
232
+ .light, :root.t_light{
233
233
  color-scheme:light;
234
234
  --background:#ffffff;
235
235
  --foreground:#0a0a0a;
@@ -608,7 +608,7 @@
608
608
  obvious spelling would invalidate the whole declaration and take the drop
609
609
  shadow down with it. A zero-size transparent shadow composes to nothing and
610
610
  costs nothing. */
611
- .light{
611
+ .light, :root.t_light{
612
612
  --shadow-floating:0 24px 60px -16px rgb(0 0 0 / .18);
613
613
  --shadow-inset-hairline:inset 0 0 0 1px rgb(0 0 0 / .10);
614
614
  --edge-highlight:inset 0 0 0 0 transparent;
@@ -895,7 +895,7 @@
895
895
  stays INSIDE the layer — an unlayered rule here would outrank an app's own
896
896
  utilities, which is the defect check 1c exists to catch. */
897
897
  :where(html){scrollbar-color:var(--white-15) transparent;scrollbar-width:thin}
898
- .light{scrollbar-color:rgb(0 0 0 / .18) transparent}
898
+ .light, :root.t_light{scrollbar-color:rgb(0 0 0 / .18) transparent}
899
899
  :where(*)::-webkit-scrollbar{width:6px;height:6px}
900
900
  :where(*)::-webkit-scrollbar-track{background:transparent}
901
901
  :where(*)::-webkit-scrollbar-thumb{background:var(--white-15);border-radius:var(--radius-full)}
@@ -1064,24 +1064,159 @@
1064
1064
  [data-touch-y="23"]::after { top: -23px; bottom: -23px; }
1065
1065
  [data-touch-y="24"]::after { top: -24px; bottom: -24px; }
1066
1066
 
1067
- /* Elevation ladder the shadow steps components name by class. */
1068
- .elevation-1 { box-shadow: var(--hz-elevation-1, 0 1px 2px rgba(0, 0, 0, 0.16)); }
1069
- .elevation-2 { box-shadow: var(--hz-elevation-2, 0 4px 12px rgba(0, 0, 0, 0.24)); }
1070
- .elevation-3 { box-shadow: var(--hz-elevation-3, 0 8px 24px rgba(0, 0, 0, 0.36)); }
1071
- .elevation-4 { box-shadow: var(--hz-elevation-4, 0 16px 48px rgba(0, 0, 0, 0.44)); }
1067
+ /* The material, the elevation ladder, the scrim and the row separators live in
1068
+ src/glass.css and are inlined here by scripts/compose-theme.mjs one home,
1069
+ two entry points (`@hanzo/ui/theme.css` and `@hanzo/ui/glass.css`), so a host
1070
+ that wants only the chrome material does not have to take the token layer
1071
+ with it.
1072
1072
 
1073
- /* Glass the ONE frosted material (see backends/gui/glass.tsx). The component
1074
- stands as a solid raised panel; only a browser that can actually blur the
1075
- backdrop trades it for the translucent material, so content never sits on
1076
- see-through ground without the blur. !important beats the compiled bg atom. */
1073
+ They used to be four `.elevation-*` rules reading `var(--hz-elevation-N, )`.
1074
+ Nothing in this repo, in @hanzo/design or in any consumer ever DEFINED an
1075
+ `--hz-elevation-*` variable, so every one of those resolved to its fallback:
1076
+ an indirection through a name that does not exist, with a hardcoded shadow
1077
+ behind it, next to a design system that publishes real ones. */
1078
+
1079
+ /* Glass — the material floating chrome is made of, and the ladder it stands on.
1080
+ *
1081
+ * import '@hanzo/ui/glass.css' // this slice alone
1082
+ * import '@hanzo/ui/theme.css' // the whole sheet; this is inlined in it
1083
+ *
1084
+ * Menus, dialogs, popovers, toasts, sticky bars: things with page UNDER them.
1085
+ * That last clause is the whole rule. Vibrancy is a lens — translucent ground
1086
+ * plus a backdrop blur — so it shows a softened version of whatever it covers,
1087
+ * and covering nothing but the flat canvas it has nothing to soften. An in-flow
1088
+ * card wearing this is not glass; it is the page with extra steps. So: over
1089
+ * content -> glass, in the flow -> the surface ladder. There is no third case.
1090
+ *
1091
+ * ── Values come from @hanzo/design ──────────────────────────────────────────
1092
+ * Every colour, shadow and light below is a design token. The fallbacks are
1093
+ * design's OWN published values, present so a host that imports this file
1094
+ * without design's sheet still gets a ladder instead of a silently-dropped
1095
+ * declaration (an undefined var() invalidates the whole property). They are a
1096
+ * mirror, not a second opinion — glass.test.ts reads @hanzo/design/styles.css
1097
+ * and fails if any of them stops matching, so the copy cannot drift.
1098
+ */
1099
+
1100
+ /* ── The material ───────────────────────────────────────────────────────────
1101
+ Applied BY SLOT, not by call site. Every surface below is floating chrome by
1102
+ construction — a popover is over the page or it is nothing — so which of them
1103
+ is glass was never a decision a call site should get to make. It was making
1104
+ it anyway: in the console, of 135 floating surfaces exactly ONE had reached
1105
+ for the material by hand and a dozen dialogs had gone the other way and
1106
+ pinned an opaque fill. Reaching them one by one is 134 edits that agree today
1107
+ and drift apart on the next one somebody adds. A new dialog is glass because
1108
+ it is a dialog.
1109
+
1110
+ `.glass` is here for the same reason `glass()` exists in the recipes module:
1111
+ a hand-rolled bar or a custom menu is floating chrome that no slot names.
1112
+
1113
+ The ground is derived from --background rather than fixed, so the material
1114
+ follows the theme instead of assuming a dark one.
1115
+
1116
+ The opaque `background-color` outside the @supports block is load-bearing
1117
+ rather than belt-and-braces: a browser that cannot blur gets no rule at all
1118
+ from inside it, and a menu with no background is a menu you read the page
1119
+ through. !important beats the compiled atomic background class, which lands
1120
+ in an inline <style> a bundler orders after this sheet, and it beats the call
1121
+ sites that pin a fill by hand — those become no-ops instead of holes. */
1077
1122
  @supports (backdrop-filter: blur(8px)) {
1078
- [data-slot="glass"] {
1123
+ .glass,
1124
+ [data-slot="glass"],
1125
+ [data-slot="dialog-content"],
1126
+ [data-slot="popover-content"],
1127
+ [data-slot="select-content"],
1128
+ [data-slot="dropdown-menu-content"],
1129
+ [data-slot="dropdown-menu-sub-content"],
1130
+ [data-slot="tooltip-content"] {
1079
1131
  background-color: color-mix(in oklab, var(--background) 72%, transparent) !important;
1080
1132
  -webkit-backdrop-filter: blur(20px) saturate(1.8);
1081
1133
  backdrop-filter: blur(20px) saturate(1.8);
1082
1134
  }
1083
1135
  }
1084
1136
 
1137
+ /* ── Depth — three rungs, and the lit edge is the load-bearing half ──────────
1138
+ A cast shadow is how a light page shows lift. On a near-black canvas it is
1139
+ nearly free of information: black on near-black moves no pixels, so a raised
1140
+ panel wearing only a shadow reads exactly as flat as one wearing none. What
1141
+ says "this surface is above that one" in a dark UI is the LIT EDGE — the top
1142
+ lip catching light, which is why every macOS/iOS glass panel has one. Design
1143
+ spends the same two tokens for the same reason and zeroes --edge-highlight in
1144
+ `.light`, where a white line on a white card is nothing and the drop does all
1145
+ the work: one composition, both themes, no branch here.
1146
+
1147
+ Levels are a LADDER, not a palette — 1 rests in the flow, 2 lifts off it, 3
1148
+ floats over the page. Nothing needs a fourth; if something seems to, it is
1149
+ sitting at the wrong level.
1150
+
1151
+ Anchored chrome — a menu pinned to the control that opened it, a tooltip to
1152
+ its target — is rung 2. A modal has no anchor and a scrim of its own, so it
1153
+ floats free at 3. Those slots share the rung's rule rather than restating its
1154
+ value, so the ladder cannot come apart from the surfaces standing on it.
1155
+
1156
+ Glass over glass (a select opened inside a dialog) is deliberately left to
1157
+ stack: two 72% grounds land near 92%, so the nested surface reads as MORE
1158
+ solid than its parent, which is the right answer and the one macOS gives. */
1159
+ .elevation-1 {
1160
+ box-shadow:
1161
+ var(--edge-highlight, inset 0 1px 0 0 rgb(255 255 255 / .10)),
1162
+ var(--shadow-sm, 0 1px 2px 0 rgb(0 0 0 / .40)) !important;
1163
+ }
1164
+
1165
+ .elevation-2,
1166
+ [data-slot="popover-content"],
1167
+ [data-slot="select-content"],
1168
+ [data-slot="dropdown-menu-content"],
1169
+ [data-slot="dropdown-menu-sub-content"],
1170
+ [data-slot="tooltip-content"] {
1171
+ box-shadow:
1172
+ var(--edge-highlight, inset 0 1px 0 0 rgb(255 255 255 / .10)),
1173
+ var(--shadow-lg, 0 10px 15px -3px rgb(0 0 0 / .55), 0 4px 6px -4px rgb(0 0 0 / .55)) !important;
1174
+ }
1175
+
1176
+ .elevation-3,
1177
+ [data-slot="dialog-content"] {
1178
+ box-shadow:
1179
+ var(--edge-highlight, inset 0 1px 0 0 rgb(255 255 255 / .10)),
1180
+ var(--shadow-floating, 0 24px 60px -16px rgb(0 0 0 / .75)) !important;
1181
+ }
1182
+
1183
+ /* ── The scrim ──────────────────────────────────────────────────────────────
1184
+ The dim that makes a floating panel read as floating rather than as more
1185
+ page. gui's overlay dims TWICE — a translucent ground under a further
1186
+ `opacity` — landing at about a quarter black. Opaque chrome gets away with
1187
+ it; glass does not, because the blur behind a translucent panel only reads as
1188
+ depth when the ground behind it is genuinely darker.
1189
+
1190
+ One value, in one place: the recipes module reads the same token, so the dim
1191
+ behind a component dialog and the dim behind a hand-rolled one are the same
1192
+ dim by construction rather than by two people remembering a number. */
1193
+ [data-slot="dialog-overlay"] {
1194
+ opacity: 1;
1195
+ background-color: var(--surface-scrim, rgb(0 0 0 / .8));
1196
+ }
1197
+
1198
+ /* ── Grouped rows ───────────────────────────────────────────────────────────
1199
+ One card, hairlines between its rows — the macOS settings group. Four
1200
+ separate cards for four toggles reads as four unrelated decisions, each with
1201
+ its own four edges; the same four inside one card reads as one set and drops
1202
+ twelve edges of noise.
1203
+
1204
+ The separator is drawn by the PARENT, because only the parent knows which
1205
+ child is last. Every by-hand version either left a trailing hairline sitting
1206
+ against the card's own bottom border (two parallel lines, 1px apart) or made
1207
+ each row take a `first` flag it should never have needed. `> * + *` has
1208
+ neither failure mode and needs nothing from the call site.
1209
+
1210
+ Pair with `overflow: hidden` on the card (the `rows` recipe does) so the
1211
+ separators stop at the radius instead of poking through the rounded corner.
1212
+
1213
+ --borderColor first: that is the variable the gui theme scope re-bases, and
1214
+ it is what a card's own edge is drawn with. Falling through to --border keeps
1215
+ a host that has design's tokens but no gui scope from losing the line. */
1216
+ [data-slot="rows"] > * + * {
1217
+ border-top: 1px solid var(--borderColor, var(--border));
1218
+ }
1219
+
1085
1220
  /* @hanzo/ui motion primitives — the calm, restrained animation vocabulary the
1086
1221
  Hanzo surfaces share. One place defines the easing; components apply the class.
1087
1222
  `className` forwards to the underlying DOM node on web, so the browser
@@ -1241,10 +1376,17 @@
1241
1376
  letter-spacing: -0.01em;
1242
1377
  }
1243
1378
 
1379
+ /* Paper — a ringed sheet: the ladder's lit edge and drop, plus a hairline all
1380
+ the way round. The three values are @hanzo/design's, reached by their real
1381
+ names. They used to be `--hz-ring` / `--hz-paper-highlight` /
1382
+ `--hz-elevation-3`, none of which is defined in this repo, in @hanzo/design
1383
+ or in any consumer — so all three resolved to hardcoded fallbacks, and the
1384
+ comment above promising that "a host that defines its own --hz-* tokens still
1385
+ wins" described a hook nobody could reach. */
1244
1386
  .paper {
1245
- box-shadow: var(--hz-ring, inset 0 0 0 1px rgba(255, 255, 255, 0.08)),
1246
- var(--hz-paper-highlight, inset 0 1px 0 0 rgba(255, 255, 255, 0.05)),
1247
- var(--hz-elevation-3, 0 8px 24px rgba(0, 0, 0, 0.36));
1387
+ box-shadow: var(--shadow-inset-hairline, inset 0 0 0 1px rgb(255 255 255 / .10)),
1388
+ var(--edge-highlight, inset 0 1px 0 0 rgb(255 255 255 / .10)),
1389
+ var(--shadow-lg, 0 10px 15px -3px rgb(0 0 0 / .55), 0 4px 6px -4px rgb(0 0 0 / .55));
1248
1390
  }
1249
1391
 
1250
1392
  @keyframes menu-in {
@@ -1323,10 +1465,10 @@
1323
1465
  :root .font_mono, :root .t_lang-mono-default .font_mono { --f-family:'Geist Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; --f-lineHeight-1:16px; --f-lineHeight-2:18px; --f-lineHeight-3:20px; --f-lineHeight-4:22px; --f-lineHeight-5:22px; --f-lineHeight-6:24px; --f-lineHeight-7:28px; --f-lineHeight-8:32px; --f-lineHeight-9:32px; --f-lineHeight-10:38px; --f-lineHeight-11:46px; --f-lineHeight-12:54px; --f-lineHeight-13:62px; --f-lineHeight-14:70px; --f-lineHeight-15:86px; --f-lineHeight-16:102px; --f-lineHeight-true:20px; --f-weight-1:400; --f-weight-2:400; --f-weight-3:400; --f-weight-4:400; --f-weight-5:400; --f-weight-6:400; --f-weight-7:400; --f-weight-8:400; --f-weight-9:400; --f-weight-10:400; --f-weight-11:400; --f-weight-12:400; --f-weight-13:400; --f-weight-14:400; --f-weight-15:400; --f-weight-16:400; --f-weight-true:400; --f-letterSpacing-1:0px; --f-letterSpacing-2:0px; --f-letterSpacing-3:0px; --f-letterSpacing-4:0px; --f-letterSpacing-5:0px; --f-letterSpacing-6:0px; --f-letterSpacing-7:0px; --f-letterSpacing-8:0px; --f-letterSpacing-9:0px; --f-letterSpacing-10:0px; --f-letterSpacing-11:0px; --f-letterSpacing-12:0px; --f-letterSpacing-13:0px; --f-letterSpacing-14:0px; --f-letterSpacing-15:0px; --f-letterSpacing-16:0px; --f-letterSpacing-true:0px; --f-size-1:11px; --f-size-2:13px; --f-size-3:14px; --f-size-4:15px; --f-size-5:15px; --f-size-6:17px; --f-size-7:21px; --f-size-8:26px; --f-size-9:26px; --f-size-10:32px; --f-size-11:40px; --f-size-12:48px; --f-size-13:56px; --f-size-14:64px; --f-size-15:80px; --f-size-16:96px; --f-size-true:14px
1324
1466
  }
1325
1467
  .font_body, .font_heading, .font_mono, .is_View {font-family: var(--f-family); letter-spacing: var(--f-letterSpacing-true); line-height: var(--f-lineHeight-true); font-weight: var(--f-weight-true)}
1326
- :root.t_dark, :root.t_dark , :root.t_light .t_dark , .tm_xxt {--accentBackground:var(--t0);--accentColor:var(--t1);--background0:var(--t2);--background02:var(--t3);--background04:var(--t4);--background06:var(--t5);--background08:var(--t6);--color1:var(--t7);--color2:var(--t8);--color3:var(--t9);--color4:var(--t10);--color5:var(--t0);--color6:var(--t11);--color7:var(--t12);--color8:var(--t13);--color9:var(--t14);--color10:var(--t15);--color11:var(--t16);--color12:var(--t17);--color0:var(--t18);--color02:var(--t19);--color04:var(--t20);--color06:var(--t21);--color08:var(--t22);--color:var(--t17);--colorHover:var(--t22);--colorPress:var(--t17);--colorFocus:var(--t16);--background:var(--t8);--backgroundHover:var(--t9);--backgroundPress:var(--t7);--backgroundFocus:var(--t9);--backgroundActive:var(--t8);--borderColor:var(--t10);--borderColorHover:var(--t0);--borderColorFocus:var(--t10);--borderColorPress:var(--t9);--placeholderColor:var(--t14);--colorTransparent:var(--t18);--black1:var(--t23);--black2:var(--t24);--black3:var(--t25);--black4:var(--t26);--black5:var(--t27);--black6:var(--t28);--black7:var(--t29);--black8:var(--t30);--black9:var(--t31);--black10:var(--t32);--black11:var(--t33);--black12:var(--t34);--white1:var(--t35);--white2:var(--t36);--white3:var(--t37);--white4:var(--t38);--white5:var(--t39);--white6:var(--t40);--white7:var(--t41);--white8:var(--t42);--white9:var(--t43);--white10:var(--t44);--white11:var(--t45);--white12:var(--t46);--white:var(--t47);--white0:var(--t48);--white02:var(--t49);--white04:var(--t50);--white06:var(--t51);--white08:var(--t52);--black:var(--t53);--black0:var(--t54);--black02:var(--t55);--black04:var(--t56);--black06:var(--t57);--black08:var(--t58);--shadow1:var(--t59);--shadow2:var(--t60);--shadow3:var(--t61);--shadow4:var(--t62);--shadow5:var(--t63);--shadow6:var(--t58);--shadow7:var(--t64);--shadow8:var(--t53);--highlight1:var(--t65);--highlight2:var(--t49);--highlight3:var(--t66);--highlight4:var(--t67);--highlight5:var(--t68);--highlight6:var(--t69);--highlight7:var(--t70);--highlight8:var(--t47);--shadowColor:var(--t61);--gray1:var(--t71);--gray2:var(--t25);--gray3:var(--t72);--gray4:var(--t73);--gray5:var(--t74);--gray6:var(--t75);--gray7:var(--t76);--gray8:var(--t77);--gray9:var(--t78);--gray10:var(--t79);--gray11:var(--t80);--gray12:var(--t81);--blue1:var(--t82);--blue2:var(--t83);--blue3:var(--t84);--blue4:var(--t85);--blue5:var(--t86);--blue6:var(--t87);--blue7:var(--t88);--blue8:var(--t89);--blue9:var(--t90);--blue10:var(--t91);--blue11:var(--t92);--blue12:var(--t93);--red1:var(--t94);--red2:var(--t95);--red3:var(--t96);--red4:var(--t97);--red5:var(--t98);--red6:var(--t99);--red7:var(--t100);--red8:var(--t101);--red9:var(--t102);--red10:var(--t103);--red11:var(--t104);--red12:var(--t105);--yellow1:var(--t106);--yellow2:var(--t107);--yellow3:var(--t108);--yellow4:var(--t109);--yellow5:var(--t110);--yellow6:var(--t111);--yellow7:var(--t112);--yellow8:var(--t113);--yellow9:var(--t114);--yellow10:var(--t115);--yellow11:var(--t116);--yellow12:var(--t117);--green1:var(--t118);--green2:var(--t119);--green3:var(--t120);--green4:var(--t121);--green5:var(--t122);--green6:var(--t123);--green7:var(--t124);--green8:var(--t125);--green9:var(--t126);--green10:var(--t127);--green11:var(--t128);--green12:var(--t129);--orange1:var(--t130);--orange2:var(--t131);--orange3:var(--t132);--orange4:var(--t133);--orange5:var(--t134);--orange6:var(--t135);--orange7:var(--t136);--orange8:var(--t137);--orange9:var(--t138);--orange10:var(--t139);--orange11:var(--t140);--orange12:var(--t141);--pink1:var(--t142);--pink2:var(--t143);--pink3:var(--t144);--pink4:var(--t145);--pink5:var(--t146);--pink6:var(--t147);--pink7:var(--t148);--pink8:var(--t149);--pink9:var(--t150);--pink10:var(--t151);--pink11:var(--t152);--pink12:var(--t153);--purple1:var(--t154);--purple2:var(--t155);--purple3:var(--t156);--purple4:var(--t157);--purple5:var(--t158);--purple6:var(--t159);--purple7:var(--t160);--purple8:var(--t161);--purple9:var(--t162);--purple10:var(--t163);--purple11:var(--t164);--purple12:var(--t165);--teal1:var(--t166);--teal2:var(--t167);--teal3:var(--t168);--teal4:var(--t169);--teal5:var(--t170);--teal6:var(--t171);--teal7:var(--t172);--teal8:var(--t173);--teal9:var(--t174);--teal10:var(--t175);--teal11:var(--t176);--teal12:var(--t177);--neutral1:var(--t178);--neutral2:var(--t179);--neutral3:var(--t180);--neutral4:var(--t41);--neutral5:var(--t181);--neutral6:var(--t182);--neutral7:var(--t183);--neutral8:var(--t184);--neutral9:var(--t185);--neutral10:var(--t186);--neutral11:var(--t187);--neutral12:var(--t188);--accent1:var(--t17);--accent2:var(--t189);--accent3:var(--t1);--accent4:var(--t190);--accent5:var(--t16);--accent6:var(--t191);--accent7:var(--t192);--accent8:var(--t193);--accent9:var(--t194);--accent10:var(--t0);--accent11:var(--t10);--accent12:var(--t195);--color01:var(--t196);--color0075:var(--t197);--color005:var(--t198);--color0025:var(--t199);--color002:var(--t200);--color001:var(--t201);--background01:var(--t202);--background0075:var(--t203);--background005:var(--t204);--background0025:var(--t205);--background002:var(--t206);--background001:var(--t207);--outlineColor:var(--t208);}
1468
+ :root.t_dark, :root.t_dark , :root.t_light .t_dark , .tm_xxt {--accentBackground:var(--t0);--accentColor:var(--t1);--background0:var(--t2);--background02:var(--t3);--background04:var(--t4);--background06:var(--t5);--background08:var(--t6);--color1:var(--t7);--color2:var(--t8);--color3:var(--t9);--color4:var(--t10);--color5:var(--t0);--color6:var(--t11);--color7:var(--t12);--color8:var(--t13);--color9:var(--t14);--color10:var(--t15);--color11:var(--t16);--color12:var(--t17);--color0:var(--t18);--color02:var(--t19);--color04:var(--t20);--color06:var(--t21);--color08:var(--t22);--color:var(--t17);--colorHover:var(--t22);--colorPress:var(--t17);--colorFocus:var(--t16);--backgroundHover:var(--t9);--backgroundPress:var(--t7);--backgroundFocus:var(--t9);--backgroundActive:var(--t8);--borderColor:var(--t10);--borderColorHover:var(--t0);--borderColorFocus:var(--t10);--borderColorPress:var(--t9);--placeholderColor:var(--t14);--colorTransparent:var(--t18);--black1:var(--t23);--black2:var(--t24);--black3:var(--t25);--black4:var(--t26);--black5:var(--t27);--black6:var(--t28);--black7:var(--t29);--black8:var(--t30);--black9:var(--t31);--black10:var(--t32);--black11:var(--t33);--black12:var(--t34);--white1:var(--t35);--white2:var(--t36);--white3:var(--t37);--white4:var(--t38);--white5:var(--t39);--white6:var(--t40);--white7:var(--t41);--white8:var(--t42);--white9:var(--t43);--white10:var(--t44);--white11:var(--t45);--white12:var(--t46);--white0:var(--t48);--white02:var(--t49);--white04:var(--t50);--white06:var(--t51);--white08:var(--t52);--black0:var(--t54);--black02:var(--t55);--black04:var(--t56);--black06:var(--t57);--black08:var(--t58);--shadow1:var(--t59);--shadow2:var(--t60);--shadow3:var(--t61);--shadow4:var(--t62);--shadow5:var(--t63);--shadow6:var(--t58);--shadow7:var(--t64);--shadow8:var(--t53);--highlight1:var(--t65);--highlight2:var(--t49);--highlight3:var(--t66);--highlight4:var(--t67);--highlight5:var(--t68);--highlight6:var(--t69);--highlight7:var(--t70);--highlight8:var(--t47);--shadowColor:var(--t61);--gray1:var(--t71);--gray2:var(--t25);--gray3:var(--t72);--gray4:var(--t73);--gray5:var(--t74);--gray6:var(--t75);--gray7:var(--t76);--gray8:var(--t77);--gray9:var(--t78);--gray10:var(--t79);--gray11:var(--t80);--gray12:var(--t81);--blue1:var(--t82);--blue2:var(--t83);--blue3:var(--t84);--blue4:var(--t85);--blue5:var(--t86);--blue6:var(--t87);--blue7:var(--t88);--blue8:var(--t89);--blue9:var(--t90);--blue10:var(--t91);--blue11:var(--t92);--blue12:var(--t93);--red1:var(--t94);--red2:var(--t95);--red3:var(--t96);--red4:var(--t97);--red5:var(--t98);--red6:var(--t99);--red7:var(--t100);--red8:var(--t101);--red9:var(--t102);--red10:var(--t103);--red11:var(--t104);--red12:var(--t105);--yellow1:var(--t106);--yellow2:var(--t107);--yellow3:var(--t108);--yellow4:var(--t109);--yellow5:var(--t110);--yellow6:var(--t111);--yellow7:var(--t112);--yellow8:var(--t113);--yellow9:var(--t114);--yellow10:var(--t115);--yellow11:var(--t116);--yellow12:var(--t117);--green1:var(--t118);--green2:var(--t119);--green3:var(--t120);--green4:var(--t121);--green5:var(--t122);--green6:var(--t123);--green7:var(--t124);--green8:var(--t125);--green9:var(--t126);--green10:var(--t127);--green11:var(--t128);--green12:var(--t129);--orange1:var(--t130);--orange2:var(--t131);--orange3:var(--t132);--orange4:var(--t133);--orange5:var(--t134);--orange6:var(--t135);--orange7:var(--t136);--orange8:var(--t137);--orange9:var(--t138);--orange10:var(--t139);--orange11:var(--t140);--orange12:var(--t141);--pink1:var(--t142);--pink2:var(--t143);--pink3:var(--t144);--pink4:var(--t145);--pink5:var(--t146);--pink6:var(--t147);--pink7:var(--t148);--pink8:var(--t149);--pink9:var(--t150);--pink10:var(--t151);--pink11:var(--t152);--pink12:var(--t153);--purple1:var(--t154);--purple2:var(--t155);--purple3:var(--t156);--purple4:var(--t157);--purple5:var(--t158);--purple6:var(--t159);--purple7:var(--t160);--purple8:var(--t161);--purple9:var(--t162);--purple10:var(--t163);--purple11:var(--t164);--purple12:var(--t165);--teal1:var(--t166);--teal2:var(--t167);--teal3:var(--t168);--teal4:var(--t169);--teal5:var(--t170);--teal6:var(--t171);--teal7:var(--t172);--teal8:var(--t173);--teal9:var(--t174);--teal10:var(--t175);--teal11:var(--t176);--teal12:var(--t177);--neutral1:var(--t178);--neutral2:var(--t179);--neutral3:var(--t180);--neutral4:var(--t41);--neutral5:var(--t181);--neutral6:var(--t182);--neutral7:var(--t183);--neutral8:var(--t184);--neutral9:var(--t185);--neutral10:var(--t186);--neutral11:var(--t187);--neutral12:var(--t188);--accent1:var(--t17);--accent2:var(--t189);--accent3:var(--t1);--accent4:var(--t190);--accent5:var(--t16);--accent6:var(--t191);--accent7:var(--t192);--accent8:var(--t193);--accent9:var(--t194);--accent10:var(--t0);--accent11:var(--t10);--accent12:var(--t195);--color01:var(--t196);--color0075:var(--t197);--color005:var(--t198);--color0025:var(--t199);--color002:var(--t200);--color001:var(--t201);--background01:var(--t202);--background0075:var(--t203);--background005:var(--t204);--background0025:var(--t205);--background002:var(--t206);--background001:var(--t207);--outlineColor:var(--t208);}
1327
1469
  @media(prefers-color-scheme:dark){
1328
1470
  body{background:var(--background);color:var(--color)}
1329
- :root {--accentBackground:var(--t0);--accentColor:var(--t1);--background0:var(--t2);--background02:var(--t3);--background04:var(--t4);--background06:var(--t5);--background08:var(--t6);--color1:var(--t7);--color2:var(--t8);--color3:var(--t9);--color4:var(--t10);--color5:var(--t0);--color6:var(--t11);--color7:var(--t12);--color8:var(--t13);--color9:var(--t14);--color10:var(--t15);--color11:var(--t16);--color12:var(--t17);--color0:var(--t18);--color02:var(--t19);--color04:var(--t20);--color06:var(--t21);--color08:var(--t22);--color:var(--t17);--colorHover:var(--t22);--colorPress:var(--t17);--colorFocus:var(--t16);--background:var(--t8);--backgroundHover:var(--t9);--backgroundPress:var(--t7);--backgroundFocus:var(--t9);--backgroundActive:var(--t8);--borderColor:var(--t10);--borderColorHover:var(--t0);--borderColorFocus:var(--t10);--borderColorPress:var(--t9);--placeholderColor:var(--t14);--colorTransparent:var(--t18);--black1:var(--t23);--black2:var(--t24);--black3:var(--t25);--black4:var(--t26);--black5:var(--t27);--black6:var(--t28);--black7:var(--t29);--black8:var(--t30);--black9:var(--t31);--black10:var(--t32);--black11:var(--t33);--black12:var(--t34);--white1:var(--t35);--white2:var(--t36);--white3:var(--t37);--white4:var(--t38);--white5:var(--t39);--white6:var(--t40);--white7:var(--t41);--white8:var(--t42);--white9:var(--t43);--white10:var(--t44);--white11:var(--t45);--white12:var(--t46);--white:var(--t47);--white0:var(--t48);--white02:var(--t49);--white04:var(--t50);--white06:var(--t51);--white08:var(--t52);--black:var(--t53);--black0:var(--t54);--black02:var(--t55);--black04:var(--t56);--black06:var(--t57);--black08:var(--t58);--shadow1:var(--t59);--shadow2:var(--t60);--shadow3:var(--t61);--shadow4:var(--t62);--shadow5:var(--t63);--shadow6:var(--t58);--shadow7:var(--t64);--shadow8:var(--t53);--highlight1:var(--t65);--highlight2:var(--t49);--highlight3:var(--t66);--highlight4:var(--t67);--highlight5:var(--t68);--highlight6:var(--t69);--highlight7:var(--t70);--highlight8:var(--t47);--shadowColor:var(--t61);--gray1:var(--t71);--gray2:var(--t25);--gray3:var(--t72);--gray4:var(--t73);--gray5:var(--t74);--gray6:var(--t75);--gray7:var(--t76);--gray8:var(--t77);--gray9:var(--t78);--gray10:var(--t79);--gray11:var(--t80);--gray12:var(--t81);--blue1:var(--t82);--blue2:var(--t83);--blue3:var(--t84);--blue4:var(--t85);--blue5:var(--t86);--blue6:var(--t87);--blue7:var(--t88);--blue8:var(--t89);--blue9:var(--t90);--blue10:var(--t91);--blue11:var(--t92);--blue12:var(--t93);--red1:var(--t94);--red2:var(--t95);--red3:var(--t96);--red4:var(--t97);--red5:var(--t98);--red6:var(--t99);--red7:var(--t100);--red8:var(--t101);--red9:var(--t102);--red10:var(--t103);--red11:var(--t104);--red12:var(--t105);--yellow1:var(--t106);--yellow2:var(--t107);--yellow3:var(--t108);--yellow4:var(--t109);--yellow5:var(--t110);--yellow6:var(--t111);--yellow7:var(--t112);--yellow8:var(--t113);--yellow9:var(--t114);--yellow10:var(--t115);--yellow11:var(--t116);--yellow12:var(--t117);--green1:var(--t118);--green2:var(--t119);--green3:var(--t120);--green4:var(--t121);--green5:var(--t122);--green6:var(--t123);--green7:var(--t124);--green8:var(--t125);--green9:var(--t126);--green10:var(--t127);--green11:var(--t128);--green12:var(--t129);--orange1:var(--t130);--orange2:var(--t131);--orange3:var(--t132);--orange4:var(--t133);--orange5:var(--t134);--orange6:var(--t135);--orange7:var(--t136);--orange8:var(--t137);--orange9:var(--t138);--orange10:var(--t139);--orange11:var(--t140);--orange12:var(--t141);--pink1:var(--t142);--pink2:var(--t143);--pink3:var(--t144);--pink4:var(--t145);--pink5:var(--t146);--pink6:var(--t147);--pink7:var(--t148);--pink8:var(--t149);--pink9:var(--t150);--pink10:var(--t151);--pink11:var(--t152);--pink12:var(--t153);--purple1:var(--t154);--purple2:var(--t155);--purple3:var(--t156);--purple4:var(--t157);--purple5:var(--t158);--purple6:var(--t159);--purple7:var(--t160);--purple8:var(--t161);--purple9:var(--t162);--purple10:var(--t163);--purple11:var(--t164);--purple12:var(--t165);--teal1:var(--t166);--teal2:var(--t167);--teal3:var(--t168);--teal4:var(--t169);--teal5:var(--t170);--teal6:var(--t171);--teal7:var(--t172);--teal8:var(--t173);--teal9:var(--t174);--teal10:var(--t175);--teal11:var(--t176);--teal12:var(--t177);--neutral1:var(--t178);--neutral2:var(--t179);--neutral3:var(--t180);--neutral4:var(--t41);--neutral5:var(--t181);--neutral6:var(--t182);--neutral7:var(--t183);--neutral8:var(--t184);--neutral9:var(--t185);--neutral10:var(--t186);--neutral11:var(--t187);--neutral12:var(--t188);--accent1:var(--t17);--accent2:var(--t189);--accent3:var(--t1);--accent4:var(--t190);--accent5:var(--t16);--accent6:var(--t191);--accent7:var(--t192);--accent8:var(--t193);--accent9:var(--t194);--accent10:var(--t0);--accent11:var(--t10);--accent12:var(--t195);--color01:var(--t196);--color0075:var(--t197);--color005:var(--t198);--color0025:var(--t199);--color002:var(--t200);--color001:var(--t201);--background01:var(--t202);--background0075:var(--t203);--background005:var(--t204);--background0025:var(--t205);--background002:var(--t206);--background001:var(--t207);--outlineColor:var(--t208);}
1471
+ :root {--accentBackground:var(--t0);--accentColor:var(--t1);--background0:var(--t2);--background02:var(--t3);--background04:var(--t4);--background06:var(--t5);--background08:var(--t6);--color1:var(--t7);--color2:var(--t8);--color3:var(--t9);--color4:var(--t10);--color5:var(--t0);--color6:var(--t11);--color7:var(--t12);--color8:var(--t13);--color9:var(--t14);--color10:var(--t15);--color11:var(--t16);--color12:var(--t17);--color0:var(--t18);--color02:var(--t19);--color04:var(--t20);--color06:var(--t21);--color08:var(--t22);--color:var(--t17);--colorHover:var(--t22);--colorPress:var(--t17);--colorFocus:var(--t16);--backgroundHover:var(--t9);--backgroundPress:var(--t7);--backgroundFocus:var(--t9);--backgroundActive:var(--t8);--borderColor:var(--t10);--borderColorHover:var(--t0);--borderColorFocus:var(--t10);--borderColorPress:var(--t9);--placeholderColor:var(--t14);--colorTransparent:var(--t18);--black1:var(--t23);--black2:var(--t24);--black3:var(--t25);--black4:var(--t26);--black5:var(--t27);--black6:var(--t28);--black7:var(--t29);--black8:var(--t30);--black9:var(--t31);--black10:var(--t32);--black11:var(--t33);--black12:var(--t34);--white1:var(--t35);--white2:var(--t36);--white3:var(--t37);--white4:var(--t38);--white5:var(--t39);--white6:var(--t40);--white7:var(--t41);--white8:var(--t42);--white9:var(--t43);--white10:var(--t44);--white11:var(--t45);--white12:var(--t46);--white0:var(--t48);--white02:var(--t49);--white04:var(--t50);--white06:var(--t51);--white08:var(--t52);--black0:var(--t54);--black02:var(--t55);--black04:var(--t56);--black06:var(--t57);--black08:var(--t58);--shadow1:var(--t59);--shadow2:var(--t60);--shadow3:var(--t61);--shadow4:var(--t62);--shadow5:var(--t63);--shadow6:var(--t58);--shadow7:var(--t64);--shadow8:var(--t53);--highlight1:var(--t65);--highlight2:var(--t49);--highlight3:var(--t66);--highlight4:var(--t67);--highlight5:var(--t68);--highlight6:var(--t69);--highlight7:var(--t70);--highlight8:var(--t47);--shadowColor:var(--t61);--gray1:var(--t71);--gray2:var(--t25);--gray3:var(--t72);--gray4:var(--t73);--gray5:var(--t74);--gray6:var(--t75);--gray7:var(--t76);--gray8:var(--t77);--gray9:var(--t78);--gray10:var(--t79);--gray11:var(--t80);--gray12:var(--t81);--blue1:var(--t82);--blue2:var(--t83);--blue3:var(--t84);--blue4:var(--t85);--blue5:var(--t86);--blue6:var(--t87);--blue7:var(--t88);--blue8:var(--t89);--blue9:var(--t90);--blue10:var(--t91);--blue11:var(--t92);--blue12:var(--t93);--red1:var(--t94);--red2:var(--t95);--red3:var(--t96);--red4:var(--t97);--red5:var(--t98);--red6:var(--t99);--red7:var(--t100);--red8:var(--t101);--red9:var(--t102);--red10:var(--t103);--red11:var(--t104);--red12:var(--t105);--yellow1:var(--t106);--yellow2:var(--t107);--yellow3:var(--t108);--yellow4:var(--t109);--yellow5:var(--t110);--yellow6:var(--t111);--yellow7:var(--t112);--yellow8:var(--t113);--yellow9:var(--t114);--yellow10:var(--t115);--yellow11:var(--t116);--yellow12:var(--t117);--green1:var(--t118);--green2:var(--t119);--green3:var(--t120);--green4:var(--t121);--green5:var(--t122);--green6:var(--t123);--green7:var(--t124);--green8:var(--t125);--green9:var(--t126);--green10:var(--t127);--green11:var(--t128);--green12:var(--t129);--orange1:var(--t130);--orange2:var(--t131);--orange3:var(--t132);--orange4:var(--t133);--orange5:var(--t134);--orange6:var(--t135);--orange7:var(--t136);--orange8:var(--t137);--orange9:var(--t138);--orange10:var(--t139);--orange11:var(--t140);--orange12:var(--t141);--pink1:var(--t142);--pink2:var(--t143);--pink3:var(--t144);--pink4:var(--t145);--pink5:var(--t146);--pink6:var(--t147);--pink7:var(--t148);--pink8:var(--t149);--pink9:var(--t150);--pink10:var(--t151);--pink11:var(--t152);--pink12:var(--t153);--purple1:var(--t154);--purple2:var(--t155);--purple3:var(--t156);--purple4:var(--t157);--purple5:var(--t158);--purple6:var(--t159);--purple7:var(--t160);--purple8:var(--t161);--purple9:var(--t162);--purple10:var(--t163);--purple11:var(--t164);--purple12:var(--t165);--teal1:var(--t166);--teal2:var(--t167);--teal3:var(--t168);--teal4:var(--t169);--teal5:var(--t170);--teal6:var(--t171);--teal7:var(--t172);--teal8:var(--t173);--teal9:var(--t174);--teal10:var(--t175);--teal11:var(--t176);--teal12:var(--t177);--neutral1:var(--t178);--neutral2:var(--t179);--neutral3:var(--t180);--neutral4:var(--t41);--neutral5:var(--t181);--neutral6:var(--t182);--neutral7:var(--t183);--neutral8:var(--t184);--neutral9:var(--t185);--neutral10:var(--t186);--neutral11:var(--t187);--neutral12:var(--t188);--accent1:var(--t17);--accent2:var(--t189);--accent3:var(--t1);--accent4:var(--t190);--accent5:var(--t16);--accent6:var(--t191);--accent7:var(--t192);--accent8:var(--t193);--accent9:var(--t194);--accent10:var(--t0);--accent11:var(--t10);--accent12:var(--t195);--color01:var(--t196);--color0075:var(--t197);--color005:var(--t198);--color0025:var(--t199);--color002:var(--t200);--color001:var(--t201);--background01:var(--t202);--background0075:var(--t203);--background005:var(--t204);--background0025:var(--t205);--background002:var(--t206);--background001:var(--t207);--outlineColor:var(--t208);}
1330
1472
  }
1331
1473
  .t_dark ::selection{background:var(--color5);color:var(--color11)}
1332
1474
  :root.t_dark .t_Button, :root.t_dark .t_SliderThumb, :root.t_dark .t_Switch, :root.t_dark .t_black_Button, :root.t_dark .t_black_SliderThumb, :root.t_dark .t_black_Switch, :root.t_dark .t_black_surface2, :root.t_dark .t_surface2, :root.t_light .t_dark .t_Button, :root.t_light .t_dark .t_SliderThumb, :root.t_light .t_dark .t_Switch, :root.t_light .t_dark .t_black_Button, :root.t_light .t_dark .t_black_SliderThumb, :root.t_light .t_dark .t_black_Switch, :root.t_light .t_dark .t_black_surface2, :root.t_light .t_dark .t_surface2, .tm_xxt {--color:var(--t16);--colorHover:var(--t17);--colorPress:var(--t16);--colorFocus:var(--t15);--background:var(--t10);--backgroundHover:var(--t0);--backgroundPress:var(--t9);--backgroundFocus:var(--t12);--backgroundActive:var(--t10);--borderColor:var(--t11);--borderColorHover:var(--t12);--borderColorFocus:var(--t11);--borderColorPress:var(--t0);--color01:var(--t196);--color0075:var(--t197);--color005:var(--t198);--color0025:var(--t199);--color002:var(--t200);--color001:var(--t201);--background01:var(--t202);--background0075:var(--t203);--background005:var(--t204);--background0025:var(--t205);--background002:var(--t206);--background001:var(--t207);--background02:var(--t3);--background04:var(--t4);--background06:var(--t5);--background08:var(--t6);--outlineColor:var(--t208);}
@@ -1598,10 +1740,10 @@
1598
1740
  .t_yellow_SwitchThumb, .t_yellow_Tooltip, .t_yellow_accent {--accentBackground:var(--t1);--accentColor:var(--t0);--background0:var(--t598);--background02:var(--t582);--background04:var(--t583);--background06:var(--t584);--background08:var(--t585);--color1:var(--t597);--color2:var(--t596);--color3:var(--t595);--color4:var(--t594);--color5:var(--t593);--color6:var(--t592);--color7:var(--t591);--color8:var(--t590);--color9:var(--t589);--color10:var(--t588);--color11:var(--t587);--color12:var(--t586);--color0:var(--t581);--color02:var(--t616);--color04:var(--t617);--color06:var(--t618);--color08:var(--t619);--color:var(--t586);--colorHover:var(--t619);--colorPress:var(--t586);--colorFocus:var(--t587);--background:var(--t596);--backgroundHover:var(--t595);--backgroundPress:var(--t597);--backgroundFocus:var(--t595);--backgroundActive:var(--t596);--borderColor:var(--t594);--borderColorHover:var(--t593);--borderColorFocus:var(--t594);--borderColorPress:var(--t595);--placeholderColor:var(--t589);--colorTransparent:var(--t581);--color01:var(--t603);--color0075:var(--t604);--color005:var(--t605);--color0025:var(--t606);--color002:var(--t607);--color001:var(--t608);--background01:var(--t609);--background0075:var(--t610);--background005:var(--t611);--background0025:var(--t612);--background002:var(--t613);--background001:var(--t614);--outlineColor:var(--t615);}
1599
1741
  }
1600
1742
  .t_dark_yellow_SwitchThumb ::selection, .t_dark_yellow_Tooltip ::selection, .t_dark_yellow_accent ::selection{background:var(--color5);color:var(--color11)}
1601
- :root.t_dark .t_light , :root.t_light, :root.t_light , .tm_xxt {--accentBackground:var(--t9);--accentColor:var(--t15);--background0:var(--t18);--background02:var(--t213);--background04:var(--t214);--background06:var(--t215);--background08:var(--t216);--color1:var(--t17);--color2:var(--t189);--color3:var(--t1);--color4:var(--t190);--color5:var(--t16);--color6:var(--t191);--color7:var(--t192);--color8:var(--t193);--color9:var(--t194);--color10:var(--t0);--color11:var(--t10);--color12:var(--t195);--color0:var(--t217);--color02:var(--t218);--color04:var(--t219);--color06:var(--t220);--color08:var(--t221);--color:var(--t195);--colorHover:var(--t195);--colorPress:var(--t195);--colorFocus:var(--t221);--background:var(--t189);--backgroundHover:var(--t17);--backgroundPress:var(--t1);--backgroundFocus:var(--t1);--backgroundActive:var(--t189);--borderColor:var(--t190);--borderColorHover:var(--t1);--borderColorFocus:var(--t190);--borderColorPress:var(--t16);--placeholderColor:var(--t194);--colorTransparent:var(--t217);--black1:var(--t23);--black2:var(--t24);--black3:var(--t25);--black4:var(--t26);--black5:var(--t27);--black6:var(--t28);--black7:var(--t29);--black8:var(--t30);--black9:var(--t31);--black10:var(--t32);--black11:var(--t33);--black12:var(--t34);--white1:var(--t35);--white2:var(--t36);--white3:var(--t37);--white4:var(--t38);--white5:var(--t39);--white6:var(--t40);--white7:var(--t41);--white8:var(--t42);--white9:var(--t43);--white10:var(--t44);--white11:var(--t45);--white12:var(--t46);--white:var(--t47);--white0:var(--t48);--white02:var(--t49);--white04:var(--t50);--white06:var(--t51);--white08:var(--t52);--black:var(--t53);--black0:var(--t54);--black02:var(--t55);--black04:var(--t56);--black06:var(--t57);--black08:var(--t58);--shadow1:var(--t620);--shadow2:var(--t621);--shadow3:var(--t622);--shadow4:var(--t623);--shadow5:var(--t61);--shadow6:var(--t624);--shadow7:var(--t57);--shadow8:var(--t625);--highlight1:var(--t626);--highlight2:var(--t65);--highlight3:var(--t627);--highlight4:var(--t66);--highlight5:var(--t50);--highlight6:var(--t628);--highlight7:var(--t629);--highlight8:var(--t69);--shadowColor:var(--t622);--gray1:var(--t630);--gray2:var(--t631);--gray3:var(--t632);--gray4:var(--t633);--gray5:var(--t634);--gray6:var(--t635);--gray7:var(--t636);--gray8:var(--t637);--gray9:var(--t638);--gray10:var(--t639);--gray11:var(--t640);--gray12:var(--t641);--blue1:var(--t642);--blue2:var(--t643);--blue3:var(--t644);--blue4:var(--t645);--blue5:var(--t646);--blue6:var(--t647);--blue7:var(--t648);--blue8:var(--t649);--blue9:var(--t90);--blue10:var(--t650);--blue11:var(--t651);--blue12:var(--t652);--red1:var(--t653);--red2:var(--t654);--red3:var(--t655);--red4:var(--t656);--red5:var(--t657);--red6:var(--t658);--red7:var(--t659);--red8:var(--t660);--red9:var(--t102);--red10:var(--t661);--red11:var(--t662);--red12:var(--t663);--yellow1:var(--t664);--yellow2:var(--t665);--yellow3:var(--t666);--yellow4:var(--t667);--yellow5:var(--t668);--yellow6:var(--t669);--yellow7:var(--t670);--yellow8:var(--t671);--yellow9:var(--t114);--yellow10:var(--t672);--yellow11:var(--t673);--yellow12:var(--t674);--green1:var(--t675);--green2:var(--t676);--green3:var(--t677);--green4:var(--t678);--green5:var(--t679);--green6:var(--t680);--green7:var(--t681);--green8:var(--t682);--green9:var(--t126);--green10:var(--t683);--green11:var(--t684);--green12:var(--t685);--orange1:var(--t686);--orange2:var(--t687);--orange3:var(--t688);--orange4:var(--t689);--orange5:var(--t690);--orange6:var(--t691);--orange7:var(--t692);--orange8:var(--t693);--orange9:var(--t138);--orange10:var(--t694);--orange11:var(--t695);--orange12:var(--t696);--pink1:var(--t697);--pink2:var(--t698);--pink3:var(--t699);--pink4:var(--t700);--pink5:var(--t701);--pink6:var(--t702);--pink7:var(--t703);--pink8:var(--t704);--pink9:var(--t150);--pink10:var(--t705);--pink11:var(--t706);--pink12:var(--t707);--purple1:var(--t708);--purple2:var(--t709);--purple3:var(--t710);--purple4:var(--t711);--purple5:var(--t712);--purple6:var(--t713);--purple7:var(--t714);--purple8:var(--t715);--purple9:var(--t162);--purple10:var(--t716);--purple11:var(--t717);--purple12:var(--t718);--teal1:var(--t719);--teal2:var(--t720);--teal3:var(--t721);--teal4:var(--t722);--teal5:var(--t723);--teal6:var(--t724);--teal7:var(--t725);--teal8:var(--t726);--teal9:var(--t174);--teal10:var(--t727);--teal11:var(--t728);--teal12:var(--t729);--neutral1:var(--t178);--neutral2:var(--t179);--neutral3:var(--t180);--neutral4:var(--t41);--neutral5:var(--t181);--neutral6:var(--t182);--neutral7:var(--t183);--neutral8:var(--t184);--neutral9:var(--t185);--neutral10:var(--t186);--neutral11:var(--t187);--neutral12:var(--t188);--accent1:var(--t7);--accent2:var(--t8);--accent3:var(--t9);--accent4:var(--t10);--accent5:var(--t0);--accent6:var(--t11);--accent7:var(--t12);--accent8:var(--t13);--accent9:var(--t14);--accent10:var(--t15);--accent11:var(--t16);--accent12:var(--t17);--color01:var(--t222);--color0075:var(--t223);--color005:var(--t224);--color0025:var(--t225);--color002:var(--t226);--color001:var(--t227);--background01:var(--t228);--background0075:var(--t229);--background005:var(--t230);--background0025:var(--t231);--background002:var(--t232);--background001:var(--t233);--outlineColor:var(--t234);}
1743
+ :root.t_dark .t_light , :root.t_light, :root.t_light , .tm_xxt {--accentBackground:var(--t9);--accentColor:var(--t15);--background0:var(--t18);--background02:var(--t213);--background04:var(--t214);--background06:var(--t215);--background08:var(--t216);--color1:var(--t17);--color2:var(--t189);--color3:var(--t1);--color4:var(--t190);--color5:var(--t16);--color6:var(--t191);--color7:var(--t192);--color8:var(--t193);--color9:var(--t194);--color10:var(--t0);--color11:var(--t10);--color12:var(--t195);--color0:var(--t217);--color02:var(--t218);--color04:var(--t219);--color06:var(--t220);--color08:var(--t221);--color:var(--t195);--colorHover:var(--t195);--colorPress:var(--t195);--colorFocus:var(--t221);--backgroundHover:var(--t17);--backgroundPress:var(--t1);--backgroundFocus:var(--t1);--backgroundActive:var(--t189);--borderColor:var(--t190);--borderColorHover:var(--t1);--borderColorFocus:var(--t190);--borderColorPress:var(--t16);--placeholderColor:var(--t194);--colorTransparent:var(--t217);--black1:var(--t23);--black2:var(--t24);--black3:var(--t25);--black4:var(--t26);--black5:var(--t27);--black6:var(--t28);--black7:var(--t29);--black8:var(--t30);--black9:var(--t31);--black10:var(--t32);--black11:var(--t33);--black12:var(--t34);--white1:var(--t35);--white2:var(--t36);--white3:var(--t37);--white4:var(--t38);--white5:var(--t39);--white6:var(--t40);--white7:var(--t41);--white8:var(--t42);--white9:var(--t43);--white10:var(--t44);--white11:var(--t45);--white12:var(--t46);--white0:var(--t48);--white02:var(--t49);--white04:var(--t50);--white06:var(--t51);--white08:var(--t52);--black0:var(--t54);--black02:var(--t55);--black04:var(--t56);--black06:var(--t57);--black08:var(--t58);--shadow1:var(--t620);--shadow2:var(--t621);--shadow3:var(--t622);--shadow4:var(--t623);--shadow5:var(--t61);--shadow6:var(--t624);--shadow7:var(--t57);--shadow8:var(--t625);--highlight1:var(--t626);--highlight2:var(--t65);--highlight3:var(--t627);--highlight4:var(--t66);--highlight5:var(--t50);--highlight6:var(--t628);--highlight7:var(--t629);--highlight8:var(--t69);--shadowColor:var(--t622);--gray1:var(--t630);--gray2:var(--t631);--gray3:var(--t632);--gray4:var(--t633);--gray5:var(--t634);--gray6:var(--t635);--gray7:var(--t636);--gray8:var(--t637);--gray9:var(--t638);--gray10:var(--t639);--gray11:var(--t640);--gray12:var(--t641);--blue1:var(--t642);--blue2:var(--t643);--blue3:var(--t644);--blue4:var(--t645);--blue5:var(--t646);--blue6:var(--t647);--blue7:var(--t648);--blue8:var(--t649);--blue9:var(--t90);--blue10:var(--t650);--blue11:var(--t651);--blue12:var(--t652);--red1:var(--t653);--red2:var(--t654);--red3:var(--t655);--red4:var(--t656);--red5:var(--t657);--red6:var(--t658);--red7:var(--t659);--red8:var(--t660);--red9:var(--t102);--red10:var(--t661);--red11:var(--t662);--red12:var(--t663);--yellow1:var(--t664);--yellow2:var(--t665);--yellow3:var(--t666);--yellow4:var(--t667);--yellow5:var(--t668);--yellow6:var(--t669);--yellow7:var(--t670);--yellow8:var(--t671);--yellow9:var(--t114);--yellow10:var(--t672);--yellow11:var(--t673);--yellow12:var(--t674);--green1:var(--t675);--green2:var(--t676);--green3:var(--t677);--green4:var(--t678);--green5:var(--t679);--green6:var(--t680);--green7:var(--t681);--green8:var(--t682);--green9:var(--t126);--green10:var(--t683);--green11:var(--t684);--green12:var(--t685);--orange1:var(--t686);--orange2:var(--t687);--orange3:var(--t688);--orange4:var(--t689);--orange5:var(--t690);--orange6:var(--t691);--orange7:var(--t692);--orange8:var(--t693);--orange9:var(--t138);--orange10:var(--t694);--orange11:var(--t695);--orange12:var(--t696);--pink1:var(--t697);--pink2:var(--t698);--pink3:var(--t699);--pink4:var(--t700);--pink5:var(--t701);--pink6:var(--t702);--pink7:var(--t703);--pink8:var(--t704);--pink9:var(--t150);--pink10:var(--t705);--pink11:var(--t706);--pink12:var(--t707);--purple1:var(--t708);--purple2:var(--t709);--purple3:var(--t710);--purple4:var(--t711);--purple5:var(--t712);--purple6:var(--t713);--purple7:var(--t714);--purple8:var(--t715);--purple9:var(--t162);--purple10:var(--t716);--purple11:var(--t717);--purple12:var(--t718);--teal1:var(--t719);--teal2:var(--t720);--teal3:var(--t721);--teal4:var(--t722);--teal5:var(--t723);--teal6:var(--t724);--teal7:var(--t725);--teal8:var(--t726);--teal9:var(--t174);--teal10:var(--t727);--teal11:var(--t728);--teal12:var(--t729);--neutral1:var(--t178);--neutral2:var(--t179);--neutral3:var(--t180);--neutral4:var(--t41);--neutral5:var(--t181);--neutral6:var(--t182);--neutral7:var(--t183);--neutral8:var(--t184);--neutral9:var(--t185);--neutral10:var(--t186);--neutral11:var(--t187);--neutral12:var(--t188);--accent1:var(--t7);--accent2:var(--t8);--accent3:var(--t9);--accent4:var(--t10);--accent5:var(--t0);--accent6:var(--t11);--accent7:var(--t12);--accent8:var(--t13);--accent9:var(--t14);--accent10:var(--t15);--accent11:var(--t16);--accent12:var(--t17);--color01:var(--t222);--color0075:var(--t223);--color005:var(--t224);--color0025:var(--t225);--color002:var(--t226);--color001:var(--t227);--background01:var(--t228);--background0075:var(--t229);--background005:var(--t230);--background0025:var(--t231);--background002:var(--t232);--background001:var(--t233);--outlineColor:var(--t234);}
1602
1744
  @media(prefers-color-scheme:light){
1603
1745
  body{background:var(--background);color:var(--color)}
1604
- :root {--accentBackground:var(--t9);--accentColor:var(--t15);--background0:var(--t18);--background02:var(--t213);--background04:var(--t214);--background06:var(--t215);--background08:var(--t216);--color1:var(--t17);--color2:var(--t189);--color3:var(--t1);--color4:var(--t190);--color5:var(--t16);--color6:var(--t191);--color7:var(--t192);--color8:var(--t193);--color9:var(--t194);--color10:var(--t0);--color11:var(--t10);--color12:var(--t195);--color0:var(--t217);--color02:var(--t218);--color04:var(--t219);--color06:var(--t220);--color08:var(--t221);--color:var(--t195);--colorHover:var(--t195);--colorPress:var(--t195);--colorFocus:var(--t221);--background:var(--t189);--backgroundHover:var(--t17);--backgroundPress:var(--t1);--backgroundFocus:var(--t1);--backgroundActive:var(--t189);--borderColor:var(--t190);--borderColorHover:var(--t1);--borderColorFocus:var(--t190);--borderColorPress:var(--t16);--placeholderColor:var(--t194);--colorTransparent:var(--t217);--black1:var(--t23);--black2:var(--t24);--black3:var(--t25);--black4:var(--t26);--black5:var(--t27);--black6:var(--t28);--black7:var(--t29);--black8:var(--t30);--black9:var(--t31);--black10:var(--t32);--black11:var(--t33);--black12:var(--t34);--white1:var(--t35);--white2:var(--t36);--white3:var(--t37);--white4:var(--t38);--white5:var(--t39);--white6:var(--t40);--white7:var(--t41);--white8:var(--t42);--white9:var(--t43);--white10:var(--t44);--white11:var(--t45);--white12:var(--t46);--white:var(--t47);--white0:var(--t48);--white02:var(--t49);--white04:var(--t50);--white06:var(--t51);--white08:var(--t52);--black:var(--t53);--black0:var(--t54);--black02:var(--t55);--black04:var(--t56);--black06:var(--t57);--black08:var(--t58);--shadow1:var(--t620);--shadow2:var(--t621);--shadow3:var(--t622);--shadow4:var(--t623);--shadow5:var(--t61);--shadow6:var(--t624);--shadow7:var(--t57);--shadow8:var(--t625);--highlight1:var(--t626);--highlight2:var(--t65);--highlight3:var(--t627);--highlight4:var(--t66);--highlight5:var(--t50);--highlight6:var(--t628);--highlight7:var(--t629);--highlight8:var(--t69);--shadowColor:var(--t622);--gray1:var(--t630);--gray2:var(--t631);--gray3:var(--t632);--gray4:var(--t633);--gray5:var(--t634);--gray6:var(--t635);--gray7:var(--t636);--gray8:var(--t637);--gray9:var(--t638);--gray10:var(--t639);--gray11:var(--t640);--gray12:var(--t641);--blue1:var(--t642);--blue2:var(--t643);--blue3:var(--t644);--blue4:var(--t645);--blue5:var(--t646);--blue6:var(--t647);--blue7:var(--t648);--blue8:var(--t649);--blue9:var(--t90);--blue10:var(--t650);--blue11:var(--t651);--blue12:var(--t652);--red1:var(--t653);--red2:var(--t654);--red3:var(--t655);--red4:var(--t656);--red5:var(--t657);--red6:var(--t658);--red7:var(--t659);--red8:var(--t660);--red9:var(--t102);--red10:var(--t661);--red11:var(--t662);--red12:var(--t663);--yellow1:var(--t664);--yellow2:var(--t665);--yellow3:var(--t666);--yellow4:var(--t667);--yellow5:var(--t668);--yellow6:var(--t669);--yellow7:var(--t670);--yellow8:var(--t671);--yellow9:var(--t114);--yellow10:var(--t672);--yellow11:var(--t673);--yellow12:var(--t674);--green1:var(--t675);--green2:var(--t676);--green3:var(--t677);--green4:var(--t678);--green5:var(--t679);--green6:var(--t680);--green7:var(--t681);--green8:var(--t682);--green9:var(--t126);--green10:var(--t683);--green11:var(--t684);--green12:var(--t685);--orange1:var(--t686);--orange2:var(--t687);--orange3:var(--t688);--orange4:var(--t689);--orange5:var(--t690);--orange6:var(--t691);--orange7:var(--t692);--orange8:var(--t693);--orange9:var(--t138);--orange10:var(--t694);--orange11:var(--t695);--orange12:var(--t696);--pink1:var(--t697);--pink2:var(--t698);--pink3:var(--t699);--pink4:var(--t700);--pink5:var(--t701);--pink6:var(--t702);--pink7:var(--t703);--pink8:var(--t704);--pink9:var(--t150);--pink10:var(--t705);--pink11:var(--t706);--pink12:var(--t707);--purple1:var(--t708);--purple2:var(--t709);--purple3:var(--t710);--purple4:var(--t711);--purple5:var(--t712);--purple6:var(--t713);--purple7:var(--t714);--purple8:var(--t715);--purple9:var(--t162);--purple10:var(--t716);--purple11:var(--t717);--purple12:var(--t718);--teal1:var(--t719);--teal2:var(--t720);--teal3:var(--t721);--teal4:var(--t722);--teal5:var(--t723);--teal6:var(--t724);--teal7:var(--t725);--teal8:var(--t726);--teal9:var(--t174);--teal10:var(--t727);--teal11:var(--t728);--teal12:var(--t729);--neutral1:var(--t178);--neutral2:var(--t179);--neutral3:var(--t180);--neutral4:var(--t41);--neutral5:var(--t181);--neutral6:var(--t182);--neutral7:var(--t183);--neutral8:var(--t184);--neutral9:var(--t185);--neutral10:var(--t186);--neutral11:var(--t187);--neutral12:var(--t188);--accent1:var(--t7);--accent2:var(--t8);--accent3:var(--t9);--accent4:var(--t10);--accent5:var(--t0);--accent6:var(--t11);--accent7:var(--t12);--accent8:var(--t13);--accent9:var(--t14);--accent10:var(--t15);--accent11:var(--t16);--accent12:var(--t17);--color01:var(--t222);--color0075:var(--t223);--color005:var(--t224);--color0025:var(--t225);--color002:var(--t226);--color001:var(--t227);--background01:var(--t228);--background0075:var(--t229);--background005:var(--t230);--background0025:var(--t231);--background002:var(--t232);--background001:var(--t233);--outlineColor:var(--t234);}
1746
+ :root {--accentBackground:var(--t9);--accentColor:var(--t15);--background0:var(--t18);--background02:var(--t213);--background04:var(--t214);--background06:var(--t215);--background08:var(--t216);--color1:var(--t17);--color2:var(--t189);--color3:var(--t1);--color4:var(--t190);--color5:var(--t16);--color6:var(--t191);--color7:var(--t192);--color8:var(--t193);--color9:var(--t194);--color10:var(--t0);--color11:var(--t10);--color12:var(--t195);--color0:var(--t217);--color02:var(--t218);--color04:var(--t219);--color06:var(--t220);--color08:var(--t221);--color:var(--t195);--colorHover:var(--t195);--colorPress:var(--t195);--colorFocus:var(--t221);--backgroundHover:var(--t17);--backgroundPress:var(--t1);--backgroundFocus:var(--t1);--backgroundActive:var(--t189);--borderColor:var(--t190);--borderColorHover:var(--t1);--borderColorFocus:var(--t190);--borderColorPress:var(--t16);--placeholderColor:var(--t194);--colorTransparent:var(--t217);--black1:var(--t23);--black2:var(--t24);--black3:var(--t25);--black4:var(--t26);--black5:var(--t27);--black6:var(--t28);--black7:var(--t29);--black8:var(--t30);--black9:var(--t31);--black10:var(--t32);--black11:var(--t33);--black12:var(--t34);--white1:var(--t35);--white2:var(--t36);--white3:var(--t37);--white4:var(--t38);--white5:var(--t39);--white6:var(--t40);--white7:var(--t41);--white8:var(--t42);--white9:var(--t43);--white10:var(--t44);--white11:var(--t45);--white12:var(--t46);--white0:var(--t48);--white02:var(--t49);--white04:var(--t50);--white06:var(--t51);--white08:var(--t52);--black0:var(--t54);--black02:var(--t55);--black04:var(--t56);--black06:var(--t57);--black08:var(--t58);--shadow1:var(--t620);--shadow2:var(--t621);--shadow3:var(--t622);--shadow4:var(--t623);--shadow5:var(--t61);--shadow6:var(--t624);--shadow7:var(--t57);--shadow8:var(--t625);--highlight1:var(--t626);--highlight2:var(--t65);--highlight3:var(--t627);--highlight4:var(--t66);--highlight5:var(--t50);--highlight6:var(--t628);--highlight7:var(--t629);--highlight8:var(--t69);--shadowColor:var(--t622);--gray1:var(--t630);--gray2:var(--t631);--gray3:var(--t632);--gray4:var(--t633);--gray5:var(--t634);--gray6:var(--t635);--gray7:var(--t636);--gray8:var(--t637);--gray9:var(--t638);--gray10:var(--t639);--gray11:var(--t640);--gray12:var(--t641);--blue1:var(--t642);--blue2:var(--t643);--blue3:var(--t644);--blue4:var(--t645);--blue5:var(--t646);--blue6:var(--t647);--blue7:var(--t648);--blue8:var(--t649);--blue9:var(--t90);--blue10:var(--t650);--blue11:var(--t651);--blue12:var(--t652);--red1:var(--t653);--red2:var(--t654);--red3:var(--t655);--red4:var(--t656);--red5:var(--t657);--red6:var(--t658);--red7:var(--t659);--red8:var(--t660);--red9:var(--t102);--red10:var(--t661);--red11:var(--t662);--red12:var(--t663);--yellow1:var(--t664);--yellow2:var(--t665);--yellow3:var(--t666);--yellow4:var(--t667);--yellow5:var(--t668);--yellow6:var(--t669);--yellow7:var(--t670);--yellow8:var(--t671);--yellow9:var(--t114);--yellow10:var(--t672);--yellow11:var(--t673);--yellow12:var(--t674);--green1:var(--t675);--green2:var(--t676);--green3:var(--t677);--green4:var(--t678);--green5:var(--t679);--green6:var(--t680);--green7:var(--t681);--green8:var(--t682);--green9:var(--t126);--green10:var(--t683);--green11:var(--t684);--green12:var(--t685);--orange1:var(--t686);--orange2:var(--t687);--orange3:var(--t688);--orange4:var(--t689);--orange5:var(--t690);--orange6:var(--t691);--orange7:var(--t692);--orange8:var(--t693);--orange9:var(--t138);--orange10:var(--t694);--orange11:var(--t695);--orange12:var(--t696);--pink1:var(--t697);--pink2:var(--t698);--pink3:var(--t699);--pink4:var(--t700);--pink5:var(--t701);--pink6:var(--t702);--pink7:var(--t703);--pink8:var(--t704);--pink9:var(--t150);--pink10:var(--t705);--pink11:var(--t706);--pink12:var(--t707);--purple1:var(--t708);--purple2:var(--t709);--purple3:var(--t710);--purple4:var(--t711);--purple5:var(--t712);--purple6:var(--t713);--purple7:var(--t714);--purple8:var(--t715);--purple9:var(--t162);--purple10:var(--t716);--purple11:var(--t717);--purple12:var(--t718);--teal1:var(--t719);--teal2:var(--t720);--teal3:var(--t721);--teal4:var(--t722);--teal5:var(--t723);--teal6:var(--t724);--teal7:var(--t725);--teal8:var(--t726);--teal9:var(--t174);--teal10:var(--t727);--teal11:var(--t728);--teal12:var(--t729);--neutral1:var(--t178);--neutral2:var(--t179);--neutral3:var(--t180);--neutral4:var(--t41);--neutral5:var(--t181);--neutral6:var(--t182);--neutral7:var(--t183);--neutral8:var(--t184);--neutral9:var(--t185);--neutral10:var(--t186);--neutral11:var(--t187);--neutral12:var(--t188);--accent1:var(--t7);--accent2:var(--t8);--accent3:var(--t9);--accent4:var(--t10);--accent5:var(--t0);--accent6:var(--t11);--accent7:var(--t12);--accent8:var(--t13);--accent9:var(--t14);--accent10:var(--t15);--accent11:var(--t16);--accent12:var(--t17);--color01:var(--t222);--color0075:var(--t223);--color005:var(--t224);--color0025:var(--t225);--color002:var(--t226);--color001:var(--t227);--background01:var(--t228);--background0075:var(--t229);--background005:var(--t230);--background0025:var(--t231);--background002:var(--t232);--background001:var(--t233);--outlineColor:var(--t234);}
1605
1747
  }
1606
1748
  .t_light ::selection{background:var(--color5);color:var(--color11)}
1607
1749
  :root.t_dark .t_light .t_Button, :root.t_dark .t_light .t_SliderThumb, :root.t_dark .t_light .t_Switch, :root.t_dark .t_light .t_surface2, :root.t_dark .t_light .t_white_Button, :root.t_dark .t_light .t_white_SliderThumb, :root.t_dark .t_light .t_white_Switch, :root.t_dark .t_light .t_white_surface2, :root.t_light .t_Button, :root.t_light .t_SliderThumb, :root.t_light .t_Switch, :root.t_light .t_surface2, :root.t_light .t_white_Button, :root.t_light .t_white_SliderThumb, :root.t_light .t_white_Switch, :root.t_light .t_white_surface2, .tm_xxt {--color:var(--t10);--colorHover:var(--t10);--colorPress:var(--t10);--colorFocus:var(--t195);--background:var(--t190);--backgroundHover:var(--t1);--backgroundPress:var(--t16);--backgroundFocus:var(--t192);--backgroundActive:var(--t190);--borderColor:var(--t191);--borderColorHover:var(--t16);--borderColorFocus:var(--t191);--borderColorPress:var(--t192);--color01:var(--t222);--color0075:var(--t223);--color005:var(--t224);--color0025:var(--t225);--color002:var(--t226);--color001:var(--t227);--background01:var(--t228);--background0075:var(--t229);--background005:var(--t230);--background0025:var(--t231);--background002:var(--t232);--background001:var(--t233);--background02:var(--t213);--background04:var(--t214);--background06:var(--t215);--background08:var(--t216);--outlineColor:var(--t234);}
package/dist/theme.css CHANGED
@@ -227,7 +227,7 @@
227
227
  So EVERY token whose dark value is a --white-* rung must be restated below,
228
228
  and check-tokens.mjs fails the build if one is missed — that class of bug is
229
229
  silent (the border simply stops existing) and has shipped before. */
230
- .light{
230
+ .light, :root.t_light{
231
231
  color-scheme:light;
232
232
  --background:#ffffff;
233
233
  --foreground:#0a0a0a;
@@ -606,7 +606,7 @@
606
606
  obvious spelling would invalidate the whole declaration and take the drop
607
607
  shadow down with it. A zero-size transparent shadow composes to nothing and
608
608
  costs nothing. */
609
- .light{
609
+ .light, :root.t_light{
610
610
  --shadow-floating:0 24px 60px -16px rgb(0 0 0 / .18);
611
611
  --shadow-inset-hairline:inset 0 0 0 1px rgb(0 0 0 / .10);
612
612
  --edge-highlight:inset 0 0 0 0 transparent;
@@ -893,7 +893,7 @@
893
893
  stays INSIDE the layer — an unlayered rule here would outrank an app's own
894
894
  utilities, which is the defect check 1c exists to catch. */
895
895
  :where(html){scrollbar-color:var(--white-15) transparent;scrollbar-width:thin}
896
- .light{scrollbar-color:rgb(0 0 0 / .18) transparent}
896
+ .light, :root.t_light{scrollbar-color:rgb(0 0 0 / .18) transparent}
897
897
  :where(*)::-webkit-scrollbar{width:6px;height:6px}
898
898
  :where(*)::-webkit-scrollbar-track{background:transparent}
899
899
  :where(*)::-webkit-scrollbar-thumb{background:var(--white-15);border-radius:var(--radius-full)}
@@ -1062,20 +1062,155 @@
1062
1062
  [data-touch-y="23"]::after { top: -23px; bottom: -23px; }
1063
1063
  [data-touch-y="24"]::after { top: -24px; bottom: -24px; }
1064
1064
 
1065
- /* Elevation ladder the shadow steps components name by class. */
1066
- .elevation-1 { box-shadow: var(--hz-elevation-1, 0 1px 2px rgba(0, 0, 0, 0.16)); }
1067
- .elevation-2 { box-shadow: var(--hz-elevation-2, 0 4px 12px rgba(0, 0, 0, 0.24)); }
1068
- .elevation-3 { box-shadow: var(--hz-elevation-3, 0 8px 24px rgba(0, 0, 0, 0.36)); }
1069
- .elevation-4 { box-shadow: var(--hz-elevation-4, 0 16px 48px rgba(0, 0, 0, 0.44)); }
1065
+ /* The material, the elevation ladder, the scrim and the row separators live in
1066
+ src/glass.css and are inlined here by scripts/compose-theme.mjs one home,
1067
+ two entry points (`@hanzo/ui/theme.css` and `@hanzo/ui/glass.css`), so a host
1068
+ that wants only the chrome material does not have to take the token layer
1069
+ with it.
1070
1070
 
1071
- /* Glass the ONE frosted material (see backends/gui/glass.tsx). The component
1072
- stands as a solid raised panel; only a browser that can actually blur the
1073
- backdrop trades it for the translucent material, so content never sits on
1074
- see-through ground without the blur. !important beats the compiled bg atom. */
1071
+ They used to be four `.elevation-*` rules reading `var(--hz-elevation-N, )`.
1072
+ Nothing in this repo, in @hanzo/design or in any consumer ever DEFINED an
1073
+ `--hz-elevation-*` variable, so every one of those resolved to its fallback:
1074
+ an indirection through a name that does not exist, with a hardcoded shadow
1075
+ behind it, next to a design system that publishes real ones. */
1076
+
1077
+ /* Glass — the material floating chrome is made of, and the ladder it stands on.
1078
+ *
1079
+ * import '@hanzo/ui/glass.css' // this slice alone
1080
+ * import '@hanzo/ui/theme.css' // the whole sheet; this is inlined in it
1081
+ *
1082
+ * Menus, dialogs, popovers, toasts, sticky bars: things with page UNDER them.
1083
+ * That last clause is the whole rule. Vibrancy is a lens — translucent ground
1084
+ * plus a backdrop blur — so it shows a softened version of whatever it covers,
1085
+ * and covering nothing but the flat canvas it has nothing to soften. An in-flow
1086
+ * card wearing this is not glass; it is the page with extra steps. So: over
1087
+ * content -> glass, in the flow -> the surface ladder. There is no third case.
1088
+ *
1089
+ * ── Values come from @hanzo/design ──────────────────────────────────────────
1090
+ * Every colour, shadow and light below is a design token. The fallbacks are
1091
+ * design's OWN published values, present so a host that imports this file
1092
+ * without design's sheet still gets a ladder instead of a silently-dropped
1093
+ * declaration (an undefined var() invalidates the whole property). They are a
1094
+ * mirror, not a second opinion — glass.test.ts reads @hanzo/design/styles.css
1095
+ * and fails if any of them stops matching, so the copy cannot drift.
1096
+ */
1097
+
1098
+ /* ── The material ───────────────────────────────────────────────────────────
1099
+ Applied BY SLOT, not by call site. Every surface below is floating chrome by
1100
+ construction — a popover is over the page or it is nothing — so which of them
1101
+ is glass was never a decision a call site should get to make. It was making
1102
+ it anyway: in the console, of 135 floating surfaces exactly ONE had reached
1103
+ for the material by hand and a dozen dialogs had gone the other way and
1104
+ pinned an opaque fill. Reaching them one by one is 134 edits that agree today
1105
+ and drift apart on the next one somebody adds. A new dialog is glass because
1106
+ it is a dialog.
1107
+
1108
+ `.glass` is here for the same reason `glass()` exists in the recipes module:
1109
+ a hand-rolled bar or a custom menu is floating chrome that no slot names.
1110
+
1111
+ The ground is derived from --background rather than fixed, so the material
1112
+ follows the theme instead of assuming a dark one.
1113
+
1114
+ The opaque `background-color` outside the @supports block is load-bearing
1115
+ rather than belt-and-braces: a browser that cannot blur gets no rule at all
1116
+ from inside it, and a menu with no background is a menu you read the page
1117
+ through. !important beats the compiled atomic background class, which lands
1118
+ in an inline <style> a bundler orders after this sheet, and it beats the call
1119
+ sites that pin a fill by hand — those become no-ops instead of holes. */
1075
1120
  @supports (backdrop-filter: blur(8px)) {
1076
- [data-slot="glass"] {
1121
+ .glass,
1122
+ [data-slot="glass"],
1123
+ [data-slot="dialog-content"],
1124
+ [data-slot="popover-content"],
1125
+ [data-slot="select-content"],
1126
+ [data-slot="dropdown-menu-content"],
1127
+ [data-slot="dropdown-menu-sub-content"],
1128
+ [data-slot="tooltip-content"] {
1077
1129
  background-color: color-mix(in oklab, var(--background) 72%, transparent) !important;
1078
1130
  -webkit-backdrop-filter: blur(20px) saturate(1.8);
1079
1131
  backdrop-filter: blur(20px) saturate(1.8);
1080
1132
  }
1081
1133
  }
1134
+
1135
+ /* ── Depth — three rungs, and the lit edge is the load-bearing half ──────────
1136
+ A cast shadow is how a light page shows lift. On a near-black canvas it is
1137
+ nearly free of information: black on near-black moves no pixels, so a raised
1138
+ panel wearing only a shadow reads exactly as flat as one wearing none. What
1139
+ says "this surface is above that one" in a dark UI is the LIT EDGE — the top
1140
+ lip catching light, which is why every macOS/iOS glass panel has one. Design
1141
+ spends the same two tokens for the same reason and zeroes --edge-highlight in
1142
+ `.light`, where a white line on a white card is nothing and the drop does all
1143
+ the work: one composition, both themes, no branch here.
1144
+
1145
+ Levels are a LADDER, not a palette — 1 rests in the flow, 2 lifts off it, 3
1146
+ floats over the page. Nothing needs a fourth; if something seems to, it is
1147
+ sitting at the wrong level.
1148
+
1149
+ Anchored chrome — a menu pinned to the control that opened it, a tooltip to
1150
+ its target — is rung 2. A modal has no anchor and a scrim of its own, so it
1151
+ floats free at 3. Those slots share the rung's rule rather than restating its
1152
+ value, so the ladder cannot come apart from the surfaces standing on it.
1153
+
1154
+ Glass over glass (a select opened inside a dialog) is deliberately left to
1155
+ stack: two 72% grounds land near 92%, so the nested surface reads as MORE
1156
+ solid than its parent, which is the right answer and the one macOS gives. */
1157
+ .elevation-1 {
1158
+ box-shadow:
1159
+ var(--edge-highlight, inset 0 1px 0 0 rgb(255 255 255 / .10)),
1160
+ var(--shadow-sm, 0 1px 2px 0 rgb(0 0 0 / .40)) !important;
1161
+ }
1162
+
1163
+ .elevation-2,
1164
+ [data-slot="popover-content"],
1165
+ [data-slot="select-content"],
1166
+ [data-slot="dropdown-menu-content"],
1167
+ [data-slot="dropdown-menu-sub-content"],
1168
+ [data-slot="tooltip-content"] {
1169
+ box-shadow:
1170
+ var(--edge-highlight, inset 0 1px 0 0 rgb(255 255 255 / .10)),
1171
+ var(--shadow-lg, 0 10px 15px -3px rgb(0 0 0 / .55), 0 4px 6px -4px rgb(0 0 0 / .55)) !important;
1172
+ }
1173
+
1174
+ .elevation-3,
1175
+ [data-slot="dialog-content"] {
1176
+ box-shadow:
1177
+ var(--edge-highlight, inset 0 1px 0 0 rgb(255 255 255 / .10)),
1178
+ var(--shadow-floating, 0 24px 60px -16px rgb(0 0 0 / .75)) !important;
1179
+ }
1180
+
1181
+ /* ── The scrim ──────────────────────────────────────────────────────────────
1182
+ The dim that makes a floating panel read as floating rather than as more
1183
+ page. gui's overlay dims TWICE — a translucent ground under a further
1184
+ `opacity` — landing at about a quarter black. Opaque chrome gets away with
1185
+ it; glass does not, because the blur behind a translucent panel only reads as
1186
+ depth when the ground behind it is genuinely darker.
1187
+
1188
+ One value, in one place: the recipes module reads the same token, so the dim
1189
+ behind a component dialog and the dim behind a hand-rolled one are the same
1190
+ dim by construction rather than by two people remembering a number. */
1191
+ [data-slot="dialog-overlay"] {
1192
+ opacity: 1;
1193
+ background-color: var(--surface-scrim, rgb(0 0 0 / .8));
1194
+ }
1195
+
1196
+ /* ── Grouped rows ───────────────────────────────────────────────────────────
1197
+ One card, hairlines between its rows — the macOS settings group. Four
1198
+ separate cards for four toggles reads as four unrelated decisions, each with
1199
+ its own four edges; the same four inside one card reads as one set and drops
1200
+ twelve edges of noise.
1201
+
1202
+ The separator is drawn by the PARENT, because only the parent knows which
1203
+ child is last. Every by-hand version either left a trailing hairline sitting
1204
+ against the card's own bottom border (two parallel lines, 1px apart) or made
1205
+ each row take a `first` flag it should never have needed. `> * + *` has
1206
+ neither failure mode and needs nothing from the call site.
1207
+
1208
+ Pair with `overflow: hidden` on the card (the `rows` recipe does) so the
1209
+ separators stop at the radius instead of poking through the rounded corner.
1210
+
1211
+ --borderColor first: that is the variable the gui theme scope re-bases, and
1212
+ it is what a card's own edge is drawn with. Falling through to --border keeps
1213
+ a host that has design's tokens but no gui scope from losing the line. */
1214
+ [data-slot="rows"] > * + * {
1215
+ border-top: 1px solid var(--borderColor, var(--border));
1216
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanzo/ui",
3
- "version": "8.0.47",
3
+ "version": "8.0.49",
4
4
  "type": "module",
5
5
  "description": "Hanzo UI — the one canonical Hanzo component library, on @hanzo/gui + @hanzo/design. ONE substrate: every component renders through @hanzo/gui primitives, so the same import works on web, native (expo) and desktop (Tauri). Self-contained (theme.css), presentational, host-agnostic, clean-room.",
6
6
  "exports": {
@@ -38,6 +38,13 @@
38
38
  "import": "./dist/core/tokens.js"
39
39
  },
40
40
  "./theme.css": "./dist/theme.css",
41
+ "./glass.css": "./dist/glass.css",
42
+ "./glass": {
43
+ "types": "./dist/glass.d.ts",
44
+ "import": "./dist/glass.js",
45
+ "require": "./dist/glass.cjs",
46
+ "default": "./dist/glass.js"
47
+ },
41
48
  "./product": {
42
49
  "types": "./dist/product/index.d.ts",
43
50
  "import": "./dist/product/index.js",
@@ -232,7 +239,7 @@
232
239
  "tc": "tsc --noEmit",
233
240
  "typecheck": "tsc --noEmit",
234
241
  "typecheck:ui": "tsc -p tsconfig.check.json",
235
- "test": "vitest run && node scripts/consumer-test.mjs && node scripts/consumer-webpack.mjs",
242
+ "test": "pnpm run test:unit",
236
243
  "test:watch": "vitest",
237
244
  "test:consumer": "node scripts/consumer-test.mjs",
238
245
  "test:unit": "vitest run",