@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/backends/gui/glass.cjs +22 -13
- package/dist/backends/gui/glass.d.ts +37 -6
- package/dist/backends/gui/glass.d.ts.map +1 -1
- package/dist/backends/gui/glass.js +23 -14
- package/dist/backends/gui/glass.js.map +1 -1
- package/dist/glass.cjs +256 -0
- package/dist/glass.css +140 -0
- package/dist/glass.d.ts +243 -0
- package/dist/glass.d.ts.map +1 -0
- package/dist/glass.js +252 -0
- package/dist/glass.js.map +1 -0
- package/dist/product/SlideOver.cjs +6 -1
- package/dist/product/SlideOver.d.ts.map +1 -1
- package/dist/product/SlideOver.js +6 -1
- package/dist/product/SlideOver.js.map +1 -1
- package/dist/styles/motion.css +10 -3
- package/dist/styles.css +162 -20
- package/dist/theme.css +148 -13
- package/package.json +9 -2
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
|
-
/*
|
|
1068
|
-
.
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
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
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
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
|
-
|
|
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(--
|
|
1246
|
-
var(--
|
|
1247
|
-
var(--
|
|
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);--
|
|
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);--
|
|
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);--
|
|
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);--
|
|
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
|
-
/*
|
|
1066
|
-
.
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
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
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
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
|
-
|
|
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.
|
|
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": "
|
|
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",
|