tyrell-components 1.0.0-TC40 → 1.0.0-TC42
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/css/tyrell-theme.css +130 -77
- package/css/tyrell.css +68 -10
- package/dist/tyrell-theme.css +130 -77
- package/dist/tyrell.css +68 -10
- package/dist/tyrell.js +1 -1
- package/lib/styles/button.d.ts +35 -5
- package/lib/styles/button.d.ts.map +1 -1
- package/lib/styles/button.js +171 -39
- package/lib/styles/button.js.map +1 -1
- package/lib/styles/calendar-month.js +1 -1
- package/lib/styles/calendar-navigation.d.ts +1 -1
- package/lib/styles/calendar-navigation.d.ts.map +1 -1
- package/lib/styles/calendar-navigation.js +1 -1
- package/lib/styles/checkbox.js +2 -2
- package/lib/styles/copy.js +2 -2
- package/lib/styles/custom-scrollbar.d.ts +1 -1
- package/lib/styles/custom-scrollbar.d.ts.map +1 -1
- package/lib/styles/custom-scrollbar.js +2 -2
- package/lib/styles/date-picker.js +1 -1
- package/lib/styles/file-upload.d.ts +1 -1
- package/lib/styles/file-upload.d.ts.map +1 -1
- package/lib/styles/file-upload.js +3 -3
- package/lib/styles/input.js +3 -3
- package/lib/styles/radio.js +1 -1
- package/lib/styles/scroll-container.d.ts +1 -1
- package/lib/styles/scroll-container.d.ts.map +1 -1
- package/lib/styles/select-base.d.ts.map +1 -1
- package/lib/styles/select-base.js +18 -4
- package/lib/styles/select-base.js.map +1 -1
- package/lib/styles/select.d.ts +1 -1
- package/lib/styles/select.d.ts.map +1 -1
- package/lib/styles/select.js +1 -0
- package/lib/styles/select.js.map +1 -1
- package/lib/styles/step.d.ts +1 -1
- package/lib/styles/step.d.ts.map +1 -1
- package/lib/styles/switch.js +2 -2
- package/lib/styles/tab.d.ts +1 -1
- package/lib/styles/tab.d.ts.map +1 -1
- package/lib/styles/tabs.d.ts +1 -1
- package/lib/styles/tabs.d.ts.map +1 -1
- package/lib/styles/tabs.js +1 -1
- package/lib/styles/tag.d.ts.map +1 -1
- package/lib/styles/tag.js +4 -1
- package/lib/styles/tag.js.map +1 -1
- package/lib/styles/textarea.d.ts +1 -1
- package/lib/styles/textarea.d.ts.map +1 -1
- package/lib/styles/textarea.js +5 -5
- package/lib/styles/wizard.d.ts +1 -1
- package/lib/styles/wizard.d.ts.map +1 -1
- package/lib/styles/wizard.js +3 -3
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
package/css/tyrell-theme.css
CHANGED
|
@@ -108,7 +108,6 @@
|
|
|
108
108
|
* Bump to ~0.005 (light) / ~0.012 (dark) to warm surfaces toward brand. */
|
|
109
109
|
--ty-surface-chroma: 0;
|
|
110
110
|
|
|
111
|
-
|
|
112
111
|
/* ----------------------------------------------------------------
|
|
113
112
|
* Tier 2 — PER-FLAVOR ANCHORS
|
|
114
113
|
* Semantic colors (success/warning/danger/neutral) have their own
|
|
@@ -118,7 +117,6 @@
|
|
|
118
117
|
* --ty-warning-chroma: 0.2; (more vivid)
|
|
119
118
|
* --------------------------------------------------------------*/
|
|
120
119
|
|
|
121
|
-
|
|
122
120
|
--ty-success-hue: 145;
|
|
123
121
|
--ty-success-chroma: calc(var(--ty-brand-chroma) * 1.08);
|
|
124
122
|
|
|
@@ -192,6 +190,11 @@
|
|
|
192
190
|
--ty-l-surface-input: 1;
|
|
193
191
|
|
|
194
192
|
--ty-l-solid-neutral: 0.4; /* the neutral "ink" fill — dark in BOTH modes */
|
|
193
|
+
/* neutral+ is FULL-CONTRAST ink — near-black on light, near-white on dark
|
|
194
|
+
(mode block below) — not "anchor + shared offset" like other tones: the
|
|
195
|
+
max-emphasis monochrome button is an absolute, not a nudge. Matches the
|
|
196
|
+
static tyrell.css light value (#000) that predates this dial. */
|
|
197
|
+
--ty-l-solid-neutral-strong: 0.15;
|
|
195
198
|
--ty-l-bg-neutral-strong: 0.25; /* opposes the mode: dark bg on light page */
|
|
196
199
|
--ty-l-bg-neutral-faint: 0.99; /* follows the mode */
|
|
197
200
|
--ty-c-bg-neutral-faint-mult: 0.4;
|
|
@@ -264,6 +267,17 @@
|
|
|
264
267
|
--ty-solid-l: 0; /* lightness offset — negative dims */
|
|
265
268
|
--ty-solid-c: 1; /* chroma multiplier — <1 desaturates */
|
|
266
269
|
--ty-solid-h: 0; /* hue offset (deg) */
|
|
270
|
+
|
|
271
|
+
/* Axis C — per-flavor solid anchor lift (added to the base fill's L,
|
|
272
|
+
* tones/hover/active then derive from the lifted anchor). The solid
|
|
273
|
+
* ladder's "darker = stronger" is FALSE for the yellow family: darkened
|
|
274
|
+
* hue-75 is brown, so warning's whole ladder shifts UP instead — soft
|
|
275
|
+
* 0.82 pale amber, base 0.72 vivid orange, strong 0.66 deep orange, all
|
|
276
|
+
* black-text (Material treats amber the same way). Other flavors: 0. */
|
|
277
|
+
--ty-primary-solid-l: 0;
|
|
278
|
+
--ty-success-solid-l: 0;
|
|
279
|
+
--ty-warning-solid-l: 0.1;
|
|
280
|
+
--ty-danger-solid-l: 0;
|
|
267
281
|
}
|
|
268
282
|
|
|
269
283
|
/* Dark mode overrides for the L-curve and saturation curve. Tier 1 + 2
|
|
@@ -310,7 +324,8 @@ html[data-theme="dark"],
|
|
|
310
324
|
--ty-l-surface-floating: 0.22;
|
|
311
325
|
--ty-l-surface-input: 0.18;
|
|
312
326
|
|
|
313
|
-
--ty-l-solid-neutral: 0.
|
|
327
|
+
--ty-l-solid-neutral: 0.18;
|
|
328
|
+
--ty-l-solid-neutral-strong: 0.88; /* inverted ink: white button, black text */
|
|
314
329
|
--ty-l-bg-neutral-strong: 0.95;
|
|
315
330
|
--ty-l-bg-neutral-faint: 0.15;
|
|
316
331
|
--ty-c-bg-neutral-faint-mult: 2;
|
|
@@ -335,14 +350,21 @@ html[data-theme="dark"],
|
|
|
335
350
|
/* Tier 6 dark — interaction offsets flip sign (press LIGHTENS on dark),
|
|
336
351
|
* and the per-theme adjust dims + desaturates the fills against the
|
|
337
352
|
* dark canvas. (Computed solid tokens are declared once at html:root.) */
|
|
338
|
-
|
|
339
|
-
|
|
353
|
+
/* Bigger than light mode's 0.04/0.08: small L deltas at the dark end of
|
|
354
|
+
* an emissive screen read much weaker than the same delta mid-scale, so
|
|
355
|
+
* dark hover needs more push to be felt at all. */
|
|
356
|
+
--ty-solid-hover-l: 0.07; /* :hover */
|
|
357
|
+
--ty-solid-active-l: 0.11; /* :active */
|
|
340
358
|
--ty-solid-strong-l: 0.06; /* tone+ */
|
|
341
359
|
--ty-solid-soft-l: -0.1; /* tone- */
|
|
342
360
|
|
|
343
361
|
--ty-solid-l: -0.2; /* dim against dark canvas */
|
|
344
362
|
--ty-solid-c: 0.7; /* desaturate against dark canvas */
|
|
345
363
|
--ty-solid-h: 0; /* hue offset */
|
|
364
|
+
|
|
365
|
+
/* Axis C — dark warning fills are already dim enough not to brown out
|
|
366
|
+
* (and browns read intentional on dark); no lift needed. */
|
|
367
|
+
--ty-warning-solid-l: 0;
|
|
346
368
|
}
|
|
347
369
|
|
|
348
370
|
/* =====================================================================
|
|
@@ -756,19 +778,23 @@ html:root,
|
|
|
756
778
|
[data-ty-theme] {
|
|
757
779
|
/* base fill per flavor (= flavor color, theme-adjusted by Axis B) */
|
|
758
780
|
--ty-solid-primary: oklch(
|
|
759
|
-
from var(--ty-color-primary)
|
|
781
|
+
from var(--ty-color-primary)
|
|
782
|
+
calc(l + var(--ty-solid-l) + var(--ty-primary-solid-l, 0))
|
|
760
783
|
calc(c * var(--ty-solid-c)) calc(h + var(--ty-solid-h))
|
|
761
784
|
);
|
|
762
785
|
--ty-solid-success: oklch(
|
|
763
|
-
from var(--ty-color-success)
|
|
786
|
+
from var(--ty-color-success)
|
|
787
|
+
calc(l + var(--ty-solid-l) + var(--ty-success-solid-l, 0))
|
|
764
788
|
calc(c * var(--ty-solid-c)) calc(h + var(--ty-solid-h))
|
|
765
789
|
);
|
|
766
790
|
--ty-solid-danger: oklch(
|
|
767
|
-
from var(--ty-color-danger)
|
|
791
|
+
from var(--ty-color-danger)
|
|
792
|
+
calc(l + var(--ty-solid-l) + var(--ty-danger-solid-l, 0))
|
|
768
793
|
calc(c * var(--ty-solid-c)) calc(h + var(--ty-solid-h))
|
|
769
794
|
);
|
|
770
795
|
--ty-solid-warning: oklch(
|
|
771
|
-
from var(--ty-color-warning)
|
|
796
|
+
from var(--ty-color-warning)
|
|
797
|
+
calc(l + var(--ty-solid-l) + var(--ty-warning-solid-l, 0))
|
|
772
798
|
calc(c * var(--ty-solid-c)) calc(h + var(--ty-solid-h))
|
|
773
799
|
);
|
|
774
800
|
/* neutral is a deliberate dark grey fill, not the neutral text color */
|
|
@@ -814,7 +840,6 @@ html:root,
|
|
|
814
840
|
clamp(0, (var(--ty-solid-fg-threshold) - l) * 1000, 1) 0 0
|
|
815
841
|
);
|
|
816
842
|
|
|
817
|
-
|
|
818
843
|
--ty-solid-success-fg: oklch(
|
|
819
844
|
from var(--ty-solid-success)
|
|
820
845
|
clamp(0, (var(--ty-solid-fg-threshold) - l) * 1000, 1) 0 0
|
|
@@ -881,7 +906,6 @@ html:root,
|
|
|
881
906
|
from var(--ty-solid-primary) calc(l + var(--ty-solid-soft-l)) c h
|
|
882
907
|
);
|
|
883
908
|
|
|
884
|
-
|
|
885
909
|
--ty-solid-success-hover: oklch(
|
|
886
910
|
from var(--ty-solid-success) calc(l + var(--ty-solid-hover-l)) c h
|
|
887
911
|
);
|
|
@@ -927,15 +951,17 @@ html:root,
|
|
|
927
951
|
--ty-solid-neutral-active: oklch(
|
|
928
952
|
from var(--ty-solid-neutral) calc(l + var(--ty-solid-active-l)) c h
|
|
929
953
|
);
|
|
954
|
+
/* neutral+ reads its own absolute L dial, not anchor + shared offset —
|
|
955
|
+
it's the full-contrast ink endpoint (see --ty-l-solid-neutral-strong). */
|
|
930
956
|
--ty-solid-neutral-strong: oklch(
|
|
931
|
-
from var(--ty-
|
|
957
|
+
from var(--ty-neutral-seed-resolved) var(--ty-l-solid-neutral-strong)
|
|
958
|
+
calc(c * var(--ty-c-strong-mult)) h
|
|
932
959
|
);
|
|
933
960
|
--ty-solid-neutral-soft: oklch(
|
|
934
961
|
from var(--ty-solid-neutral) calc(l + var(--ty-solid-soft-l)) c h
|
|
935
962
|
);
|
|
936
963
|
}
|
|
937
964
|
|
|
938
|
-
|
|
939
965
|
/* =====================================================================
|
|
940
966
|
* SECTION 3 — THEME TRANSITIONS
|
|
941
967
|
* =====================================================================
|
|
@@ -1148,6 +1174,11 @@ html:root,
|
|
|
1148
1174
|
inherits: true;
|
|
1149
1175
|
initial-value: 0.4;
|
|
1150
1176
|
}
|
|
1177
|
+
@property --ty-l-solid-neutral-strong {
|
|
1178
|
+
syntax: "<number>";
|
|
1179
|
+
inherits: true;
|
|
1180
|
+
initial-value: 0.15;
|
|
1181
|
+
}
|
|
1151
1182
|
@property --ty-l-bg-neutral-strong {
|
|
1152
1183
|
syntax: "<number>";
|
|
1153
1184
|
inherits: true;
|
|
@@ -1228,6 +1259,55 @@ html:root,
|
|
|
1228
1259
|
inherits: true;
|
|
1229
1260
|
initial-value: 1;
|
|
1230
1261
|
}
|
|
1262
|
+
/* Typography + button-depth dials (defined in tyrell.css, mode-flipped
|
|
1263
|
+
there). Registered here so they interpolate on theme switch: with a
|
|
1264
|
+
variable font, text weight crossfades along with the colors, and the
|
|
1265
|
+
solid-button depth chrome (border offset) glides rather than snaps. */
|
|
1266
|
+
@property --ty-weight-action {
|
|
1267
|
+
syntax: "<number>";
|
|
1268
|
+
inherits: true;
|
|
1269
|
+
initial-value: 510;
|
|
1270
|
+
}
|
|
1271
|
+
@property --ty-weight-label {
|
|
1272
|
+
syntax: "<number>";
|
|
1273
|
+
inherits: true;
|
|
1274
|
+
initial-value: 440;
|
|
1275
|
+
}
|
|
1276
|
+
@property --ty-button-depth {
|
|
1277
|
+
syntax: "<number>";
|
|
1278
|
+
inherits: true;
|
|
1279
|
+
initial-value: 0.35;
|
|
1280
|
+
}
|
|
1281
|
+
@property --ty-button-border-l {
|
|
1282
|
+
syntax: "<number>";
|
|
1283
|
+
inherits: true;
|
|
1284
|
+
initial-value: -0.08;
|
|
1285
|
+
}
|
|
1286
|
+
@property --ty-button-border-l-neutral {
|
|
1287
|
+
syntax: "<number>";
|
|
1288
|
+
inherits: true;
|
|
1289
|
+
initial-value: -0.25;
|
|
1290
|
+
}
|
|
1291
|
+
@property --ty-primary-solid-l {
|
|
1292
|
+
syntax: "<number>";
|
|
1293
|
+
inherits: true;
|
|
1294
|
+
initial-value: 0;
|
|
1295
|
+
}
|
|
1296
|
+
@property --ty-success-solid-l {
|
|
1297
|
+
syntax: "<number>";
|
|
1298
|
+
inherits: true;
|
|
1299
|
+
initial-value: 0;
|
|
1300
|
+
}
|
|
1301
|
+
@property --ty-warning-solid-l {
|
|
1302
|
+
syntax: "<number>";
|
|
1303
|
+
inherits: true;
|
|
1304
|
+
initial-value: 0.1;
|
|
1305
|
+
}
|
|
1306
|
+
@property --ty-danger-solid-l {
|
|
1307
|
+
syntax: "<number>";
|
|
1308
|
+
inherits: true;
|
|
1309
|
+
initial-value: 0;
|
|
1310
|
+
}
|
|
1231
1311
|
@property --ty-solid-hover-l {
|
|
1232
1312
|
syntax: "<number>";
|
|
1233
1313
|
inherits: true;
|
|
@@ -1304,69 +1384,29 @@ html:root,
|
|
|
1304
1384
|
html,
|
|
1305
1385
|
[data-ty-theme] {
|
|
1306
1386
|
transition-property:
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
--ty-l-text-faint,
|
|
1331
|
-
--ty-l-border-content,
|
|
1332
|
-
--ty-l-border-elevated,
|
|
1333
|
-
--ty-l-border-floating,
|
|
1334
|
-
--ty-l-border-strong,
|
|
1335
|
-
--ty-l-border-bold,
|
|
1336
|
-
--ty-l-border,
|
|
1337
|
-
--ty-l-border-soft,
|
|
1338
|
-
--ty-l-border-faint,
|
|
1339
|
-
--ty-l-surface-canvas,
|
|
1340
|
-
--ty-l-surface-content,
|
|
1341
|
-
--ty-l-surface-elevated,
|
|
1342
|
-
--ty-l-surface-floating,
|
|
1343
|
-
--ty-l-surface-input,
|
|
1344
|
-
--ty-l-solid-neutral,
|
|
1345
|
-
--ty-l-bg-neutral-strong,
|
|
1346
|
-
--ty-l-bg-neutral-faint,
|
|
1347
|
-
--ty-c-bg-neutral-faint-mult,
|
|
1348
|
-
--ty-c-strong-mult,
|
|
1349
|
-
--ty-c-bold-mult,
|
|
1350
|
-
--ty-c-base-mult,
|
|
1351
|
-
--ty-c-soft-mult,
|
|
1352
|
-
--ty-c-faint-mult,
|
|
1353
|
-
--ty-c-bg-base-mult,
|
|
1354
|
-
--ty-c-bg-bold-mult,
|
|
1355
|
-
--ty-c-bg-soft-mult,
|
|
1356
|
-
--ty-primary-l-factor,
|
|
1357
|
-
--ty-success-l-factor,
|
|
1358
|
-
--ty-warning-l-factor,
|
|
1359
|
-
--ty-danger-l-factor,
|
|
1360
|
-
--ty-neutral-l-factor,
|
|
1361
|
-
--ty-solid-hover-l,
|
|
1362
|
-
--ty-solid-active-l,
|
|
1363
|
-
--ty-solid-strong-l,
|
|
1364
|
-
--ty-solid-soft-l,
|
|
1365
|
-
--ty-solid-l,
|
|
1366
|
-
--ty-solid-c,
|
|
1367
|
-
--ty-solid-h,
|
|
1368
|
-
--ty-solid-fg-threshold,
|
|
1369
|
-
--ty-focus-ring-alpha;
|
|
1387
|
+
--ty-brand-hue, --ty-brand-chroma, --ty-surface-chroma, --ty-success-hue,
|
|
1388
|
+
--ty-success-chroma, --ty-warning-hue, --ty-warning-chroma,
|
|
1389
|
+
--ty-danger-hue, --ty-danger-chroma, --ty-neutral-hue,
|
|
1390
|
+
--ty-neutral-chroma, --ty-l-strong, --ty-l-bold, --ty-l-base, --ty-l-soft,
|
|
1391
|
+
--ty-l-faint, --ty-l-bg-base, --ty-l-bg-bold, --ty-l-bg-soft,
|
|
1392
|
+
--ty-l-text-strong, --ty-l-text-bold, --ty-l-text-base, --ty-l-text-soft,
|
|
1393
|
+
--ty-l-text-faint, --ty-l-border-content, --ty-l-border-elevated,
|
|
1394
|
+
--ty-l-border-floating, --ty-l-border-strong, --ty-l-border-bold,
|
|
1395
|
+
--ty-l-border, --ty-l-border-soft, --ty-l-border-faint,
|
|
1396
|
+
--ty-l-surface-canvas, --ty-l-surface-content, --ty-l-surface-elevated,
|
|
1397
|
+
--ty-l-surface-floating, --ty-l-surface-input, --ty-l-solid-neutral,
|
|
1398
|
+
--ty-l-solid-neutral-strong, --ty-l-bg-neutral-strong,
|
|
1399
|
+
--ty-l-bg-neutral-faint, --ty-c-bg-neutral-faint-mult, --ty-c-strong-mult,
|
|
1400
|
+
--ty-c-bold-mult, --ty-c-base-mult, --ty-c-soft-mult, --ty-c-faint-mult,
|
|
1401
|
+
--ty-c-bg-base-mult, --ty-c-bg-bold-mult, --ty-c-bg-soft-mult,
|
|
1402
|
+
--ty-primary-l-factor, --ty-success-l-factor, --ty-warning-l-factor,
|
|
1403
|
+
--ty-danger-l-factor, --ty-neutral-l-factor, --ty-primary-solid-l,
|
|
1404
|
+
--ty-success-solid-l, --ty-warning-solid-l, --ty-danger-solid-l,
|
|
1405
|
+
--ty-solid-hover-l, --ty-solid-active-l, --ty-solid-strong-l,
|
|
1406
|
+
--ty-solid-soft-l, --ty-solid-l, --ty-solid-c, --ty-solid-h,
|
|
1407
|
+
--ty-solid-fg-threshold, --ty-focus-ring-alpha, --ty-weight-action,
|
|
1408
|
+
--ty-weight-label, --ty-button-depth, --ty-button-border-l,
|
|
1409
|
+
--ty-button-border-l-neutral;
|
|
1370
1410
|
transition-duration: var(--ty-theme-transition, 0.45s);
|
|
1371
1411
|
transition-timing-function: ease;
|
|
1372
1412
|
}
|
|
@@ -1393,7 +1433,20 @@ html:root,
|
|
|
1393
1433
|
* parseFloat(getComputedStyle(root)
|
|
1394
1434
|
* .getPropertyValue('--ty-theme-transition')) * 1000 || 450);
|
|
1395
1435
|
*
|
|
1396
|
-
*
|
|
1436
|
+
* Two mechanisms, because Shadow DOM blocks the first from reaching the
|
|
1437
|
+
* second: the `*` rule below only matches LIGHT-DOM elements (your own
|
|
1438
|
+
* markup, Tailwind-transitioned nav items, etc.) — it cannot reach inside
|
|
1439
|
+
* any ty-* component's shadow root, style encapsulation blocks a document
|
|
1440
|
+
* stylesheet's universal selector from crossing that boundary. Every ty-*
|
|
1441
|
+
* component's OWN local transition is instead wired to the inheriting
|
|
1442
|
+
* custom property `--ty-local-transition` (unset by default; components
|
|
1443
|
+
* fall back to their normal value) — custom properties DO inherit through
|
|
1444
|
+
* shadow boundaries, so setting it once here reaches every component's
|
|
1445
|
+
* internal styles for free. Purely additive — nothing here runs unless you
|
|
1446
|
+
* add the class yourself. */
|
|
1447
|
+
.ty-theme-switching {
|
|
1448
|
+
--ty-local-transition: none;
|
|
1449
|
+
}
|
|
1397
1450
|
.ty-theme-switching *,
|
|
1398
1451
|
.ty-theme-switching *::before,
|
|
1399
1452
|
.ty-theme-switching *::after {
|
package/css/tyrell.css
CHANGED
|
@@ -499,6 +499,39 @@ DESIGN SYSTEM TOKENS
|
|
|
499
499
|
--ty-font-bold: 680;
|
|
500
500
|
--ty-font-extrabold: 800;
|
|
501
501
|
|
|
502
|
+
/* Semantic weight dials — MODE-FLIPPED (see the html.dark block).
|
|
503
|
+
Light text on dark surfaces optically blooms (halation), so dark mode
|
|
504
|
+
wants genuinely lighter weights than light mode; a single fixed weight
|
|
505
|
+
can't be right in both. Components consume these instead of the raw
|
|
506
|
+
scale above:
|
|
507
|
+
--ty-weight-action buttons, interactive chrome
|
|
508
|
+
--ty-weight-label tags, chips, badges
|
|
509
|
+
Theme these like any other token — per :root, html.dark, a named theme
|
|
510
|
+
pack, or one element. The theme layer registers them as typed numbers,
|
|
511
|
+
so with a variable font, weight crossfades during theme transitions
|
|
512
|
+
along with the colors. */
|
|
513
|
+
--ty-weight-action: var(--ty-font-medium);
|
|
514
|
+
--ty-weight-label: 440;
|
|
515
|
+
|
|
516
|
+
/* Solid-button depth chrome (consumed in button.ts):
|
|
517
|
+
--ty-button-depth master intensity 0–1. 0 = pixel-flat (the old
|
|
518
|
+
look), 1 = full tactile gloss. Scales the
|
|
519
|
+
derived border offset, top sheen and drop
|
|
520
|
+
shadow together. Themable per mode / theme
|
|
521
|
+
pack / element like any other dial.
|
|
522
|
+
--ty-button-border-l L-offset of the fill-derived 1px border,
|
|
523
|
+
mode-flipped below: dark mode needs a LIGHTER-
|
|
524
|
+
than-fill hairline (solids wash out against
|
|
525
|
+
dark surfaces without a lit edge), light mode
|
|
526
|
+
a slightly darker one. */
|
|
527
|
+
--ty-button-depth: 0.35;
|
|
528
|
+
--ty-button-border-l: -0.08;
|
|
529
|
+
/* Neutral (ink) gets its own, stronger edge: it has no hue separating it
|
|
530
|
+
from the canvas, so the same offset that reads fine on colored fills
|
|
531
|
+
nearly vanishes on it — especially in dark mode, where the ink fill
|
|
532
|
+
sits close to the page. */
|
|
533
|
+
--ty-button-border-l-neutral: -0.25;
|
|
534
|
+
|
|
502
535
|
--ty-line-height-none: 1;
|
|
503
536
|
--ty-line-height-tight: 1.25;
|
|
504
537
|
--ty-line-height-snug: 1.375;
|
|
@@ -506,14 +539,19 @@ DESIGN SYSTEM TOKENS
|
|
|
506
539
|
--ty-line-height-relaxed: 1.625;
|
|
507
540
|
--ty-line-height-loose: 2;
|
|
508
541
|
|
|
509
|
-
/* Transitions
|
|
542
|
+
/* Transitions. Each routes through --ty-local-transition first — unset by
|
|
543
|
+
default (falls through to the real value below), but the theme engine's
|
|
544
|
+
.ty-theme-switching sets it to `none` for the duration of a theme swap,
|
|
545
|
+
so components using these tokens don't run their own hover/focus
|
|
546
|
+
transition at the same time as the coordinated theme crossfade. See
|
|
547
|
+
tyrell-theme.css SECTION 3 — THEME TRANSITIONS. */
|
|
510
548
|
--ty-transition-none: none;
|
|
511
|
-
--ty-transition-all: all 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
512
|
-
--ty-transition-colors:
|
|
549
|
+
--ty-transition-all: var(--ty-local-transition, all 150ms cubic-bezier(0.4, 0, 0.2, 1));
|
|
550
|
+
--ty-transition-colors: var(--ty-local-transition,
|
|
513
551
|
bg-color, border-color, color, fill,
|
|
514
|
-
stroke 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
515
|
-
--ty-transition-shadow: box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
516
|
-
--ty-transition-transform: transform 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
552
|
+
stroke 150ms cubic-bezier(0.4, 0, 0.2, 1));
|
|
553
|
+
--ty-transition-shadow: var(--ty-local-transition, box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1));
|
|
554
|
+
--ty-transition-transform: var(--ty-local-transition, transform 150ms cubic-bezier(0.4, 0, 0.2, 1));
|
|
517
555
|
|
|
518
556
|
/* Component Sizes — single source of truth for FIELD heights.
|
|
519
557
|
Fields (ty-input, ty-select, ty-date-picker) come in exactly three
|
|
@@ -603,6 +641,21 @@ html[data-theme="dark"] {
|
|
|
603
641
|
Emphasis logic inverts: lighter = more emphasis
|
|
604
642
|
================================================================= */
|
|
605
643
|
|
|
644
|
+
/* Weight dials flip with the mode — light-on-dark text blooms, so dark
|
|
645
|
+
mode runs genuinely lighter. See the :root definitions. */
|
|
646
|
+
--ty-weight-action: var(--ty-font-normal);
|
|
647
|
+
--ty-weight-label: var(--ty-font-normal);
|
|
648
|
+
|
|
649
|
+
/* Colored solid buttons: no border in dark mode — border color equals
|
|
650
|
+
the fill exactly, so it's geometrically present (depth 0 keeps
|
|
651
|
+
geometry stable) but invisible. Neutral keeps its own separate,
|
|
652
|
+
stronger dial (below) since its dark ink fill needs the lit edge to
|
|
653
|
+
read as a shape at all against a near-black canvas; colored fills
|
|
654
|
+
don't have that problem (their own hue/saturation already separates
|
|
655
|
+
them from the page), so no border reads as cleaner. */
|
|
656
|
+
--ty-button-border-l: 0;
|
|
657
|
+
--ty-button-border-l-neutral: 0.5;
|
|
658
|
+
|
|
606
659
|
/* Primary */
|
|
607
660
|
--ty-color-primary-strong: #9cbde5;
|
|
608
661
|
--ty-color-primary-bold: #6c9bd5;
|
|
@@ -758,12 +811,17 @@ Emphasis logic inverts: lighter = more emphasis
|
|
|
758
811
|
--ty-solid-warning-soft-fg: white;
|
|
759
812
|
|
|
760
813
|
--ty-solid-neutral: #414141;
|
|
761
|
-
|
|
814
|
+
/* neutral+ = inverted ink (white button, black text) — the dark-mode
|
|
815
|
+
mirror of light's #000. Max-emphasis monochrome CTA (Geist-style).
|
|
816
|
+
hover/active are pinned to the OLD strong literal, not the alias:
|
|
817
|
+
aliasing var(--ty-solid-neutral-strong) would flash the BASE button
|
|
818
|
+
white on hover. */
|
|
819
|
+
--ty-solid-neutral-strong: #f5f5f5;
|
|
762
820
|
--ty-solid-neutral-soft: #2a2a2a;
|
|
763
|
-
--ty-solid-neutral-hover:
|
|
764
|
-
--ty-solid-neutral-active:
|
|
821
|
+
--ty-solid-neutral-hover: #4c4c4c;
|
|
822
|
+
--ty-solid-neutral-active: #4c4c4c;
|
|
765
823
|
--ty-solid-neutral-fg: white;
|
|
766
|
-
--ty-solid-neutral-strong-fg:
|
|
824
|
+
--ty-solid-neutral-strong-fg: black;
|
|
767
825
|
--ty-solid-neutral-soft-fg: white;
|
|
768
826
|
|
|
769
827
|
/* Input component tokens - dark mode */
|