@tangle-network/brand 1.10.3 → 1.13.0
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/CHANGELOG.md +34 -0
- package/README.md +4 -1
- package/bin/drift-baseline.json +1395 -0
- package/bin/tangle-drift.mjs +456 -0
- package/package.json +9 -3
- package/src/styles/focus.test.ts +2 -2
- package/src/styles/ladders.css +144 -0
- package/src/styles/legacy-light.css +733 -29
- package/src/styles/named-themes.css +336 -6
- package/src/styles/named-themes.test.ts +374 -5
- package/src/styles/system.css +0 -18
- package/src/styles/tokens.css +229 -18
- package/src/styles/tokens.test.ts +41 -0
package/src/styles/tokens.css
CHANGED
|
@@ -45,8 +45,14 @@
|
|
|
45
45
|
[data-theme="aubergine-light"],
|
|
46
46
|
[data-theme="arena"],
|
|
47
47
|
[data-theme="arena-light"],
|
|
48
|
+
[data-theme="super"],
|
|
49
|
+
[data-theme="super-light"],
|
|
48
50
|
[data-theme="tangle-dark"],
|
|
49
51
|
[data-theme="tangle-light"],
|
|
52
|
+
[data-theme="hospitality"],
|
|
53
|
+
[data-theme="agents"],
|
|
54
|
+
[data-theme="agents-light"],
|
|
55
|
+
[data-theme="website"],
|
|
50
56
|
.light,
|
|
51
57
|
.dark {
|
|
52
58
|
color-scheme: dark;
|
|
@@ -206,15 +212,73 @@
|
|
|
206
212
|
--surface-info-bg: #2d4e67;
|
|
207
213
|
--surface-info-border: #3d7292;
|
|
208
214
|
--surface-info-text: #67cdff;
|
|
209
|
-
|
|
210
|
-
--
|
|
211
|
-
--
|
|
212
|
-
--
|
|
213
|
-
--
|
|
214
|
-
--
|
|
215
|
-
--
|
|
216
|
-
--
|
|
217
|
-
--
|
|
215
|
+
/* tones:begin — generated by scripts/gen-ladders.mjs; edit its CATEGORY map, not these lines. */
|
|
216
|
+
--tone-violet-bg: #4e3a60;
|
|
217
|
+
--tone-violet-bg-hover: #583d71;
|
|
218
|
+
--tone-violet-bg-selected: #624080;
|
|
219
|
+
--tone-violet-border: #8457aa;
|
|
220
|
+
--tone-violet-border-selected: #d19dff;
|
|
221
|
+
--tone-violet-text: #ecd9fa;
|
|
222
|
+
--tone-violet-icon: #d19dff;
|
|
223
|
+
--tone-orange-bg: #583c2b;
|
|
224
|
+
--tone-orange-bg-hover: #664029;
|
|
225
|
+
--tone-orange-bg-selected: #724327;
|
|
226
|
+
--tone-orange-border: #a35829;
|
|
227
|
+
--tone-orange-border-selected: #ff801f;
|
|
228
|
+
--tone-orange-text: #ffe0c2;
|
|
229
|
+
--tone-orange-icon: #ff801f;
|
|
230
|
+
--tone-teal-bg: #2a4744;
|
|
231
|
+
--tone-teal-bg-hover: #28504b;
|
|
232
|
+
--tone-teal-bg-selected: #265751;
|
|
233
|
+
--tone-teal-border: #207e73;
|
|
234
|
+
--tone-teal-border-selected: #0eb39e;
|
|
235
|
+
--tone-teal-text: #adf0dd;
|
|
236
|
+
--tone-teal-icon: #0eb39e;
|
|
237
|
+
--tone-blue-bg: #25455e;
|
|
238
|
+
--tone-blue-bg-hover: #224c6c;
|
|
239
|
+
--tone-blue-bg-selected: #1f537b;
|
|
240
|
+
--tone-blue-border: #2870bd;
|
|
241
|
+
--tone-blue-border-selected: #70b8ff;
|
|
242
|
+
--tone-blue-text: #c2e6ff;
|
|
243
|
+
--tone-blue-icon: #70b8ff;
|
|
244
|
+
--tone-pink-bg: #5e344f;
|
|
245
|
+
--tone-pink-bg-hover: #6d3659;
|
|
246
|
+
--tone-pink-bg-selected: #7b3762;
|
|
247
|
+
--tone-pink-border: #a84885;
|
|
248
|
+
--tone-pink-border-selected: #ff8dcc;
|
|
249
|
+
--tone-pink-text: #fdd1ea;
|
|
250
|
+
--tone-pink-icon: #ff8dcc;
|
|
251
|
+
--tone-brown-bg: #494038;
|
|
252
|
+
--tone-brown-bg-hover: #54473c;
|
|
253
|
+
--tone-brown-bg-selected: #5c4c3e;
|
|
254
|
+
--tone-brown-border: #7c5f46;
|
|
255
|
+
--tone-brown-border-selected: #dbb594;
|
|
256
|
+
--tone-brown-text: #f2e1ca;
|
|
257
|
+
--tone-brown-icon: #dbb594;
|
|
258
|
+
--tone-cyan-bg: #27464d;
|
|
259
|
+
--tone-cyan-bg-hover: #234f59;
|
|
260
|
+
--tone-cyan-bg-selected: #205662;
|
|
261
|
+
--tone-cyan-border: #11809c;
|
|
262
|
+
--tone-cyan-border-selected: #23afd0;
|
|
263
|
+
--tone-cyan-text: #b6ecf7;
|
|
264
|
+
--tone-cyan-icon: #23afd0;
|
|
265
|
+
--tone-lime-bg: #404536;
|
|
266
|
+
--tone-lime-bg-hover: #444b37;
|
|
267
|
+
--tone-lime-bg-selected: #495239;
|
|
268
|
+
--tone-lime-border: #577538;
|
|
269
|
+
--tone-lime-border-selected: #bdee63;
|
|
270
|
+
--tone-lime-text: #e3f7ba;
|
|
271
|
+
--tone-lime-icon: #bdee63;
|
|
272
|
+
--surface-violet-bg: #4e3a60;
|
|
273
|
+
--surface-violet-border: #8457aa;
|
|
274
|
+
--surface-violet-text: #d19dff;
|
|
275
|
+
--surface-orange-bg: #583c2b;
|
|
276
|
+
--surface-orange-border: #a35829;
|
|
277
|
+
--surface-orange-text: #ffa057;
|
|
278
|
+
--surface-teal-bg: #2a4744;
|
|
279
|
+
--surface-teal-border: #207e73;
|
|
280
|
+
--surface-teal-text: #0bd8b6;
|
|
281
|
+
/* tones:end */
|
|
218
282
|
|
|
219
283
|
/* Run-mix ramp — the fills of a proportional status bar.
|
|
220
284
|
*
|
|
@@ -458,10 +522,14 @@
|
|
|
458
522
|
* carries both `data-sandbox-ui` (dark) and `data-theme="light"`, light wins. */
|
|
459
523
|
[data-sandbox-theme="vault"]:where(:not(.dark)),
|
|
460
524
|
[data-sandbox-theme="dawn"]:where(:not(.dark)),
|
|
525
|
+
[data-theme="hospitality"]:where(:not(.dark)),
|
|
526
|
+
[data-theme="website"]:where(:not(.dark)),
|
|
461
527
|
[data-theme="light"],
|
|
462
528
|
[data-theme="aubergine-light"],
|
|
463
529
|
[data-theme="arena-light"],
|
|
530
|
+
[data-theme="super-light"],
|
|
464
531
|
[data-theme="tangle-light"],
|
|
532
|
+
[data-theme="agents-light"],
|
|
465
533
|
.light {
|
|
466
534
|
color-scheme: light;
|
|
467
535
|
/* Light theme — neutral surfaces with purple accents */
|
|
@@ -588,15 +656,73 @@
|
|
|
588
656
|
--surface-info-bg: #f0f9ff;
|
|
589
657
|
--surface-info-border: #bae6fd;
|
|
590
658
|
--surface-info-text: #0369a1;
|
|
591
|
-
|
|
592
|
-
--
|
|
593
|
-
--
|
|
594
|
-
--
|
|
595
|
-
--
|
|
596
|
-
--
|
|
597
|
-
--
|
|
598
|
-
--
|
|
599
|
-
--
|
|
659
|
+
/* tones:begin — generated by scripts/gen-ladders.mjs; edit its CATEGORY map, not these lines. */
|
|
660
|
+
--tone-violet-bg: #f7edfe;
|
|
661
|
+
--tone-violet-bg-hover: #f2e2fc;
|
|
662
|
+
--tone-violet-bg-selected: #ead5f9;
|
|
663
|
+
--tone-violet-border: #e0c4f4;
|
|
664
|
+
--tone-violet-border-selected: #8e4ec6;
|
|
665
|
+
--tone-violet-text: #402060;
|
|
666
|
+
--tone-violet-icon: #8e4ec6;
|
|
667
|
+
--tone-orange-bg: #ffefd6;
|
|
668
|
+
--tone-orange-bg-hover: #ffdfb5;
|
|
669
|
+
--tone-orange-bg-selected: #ffd19a;
|
|
670
|
+
--tone-orange-border: #ffc182;
|
|
671
|
+
--tone-orange-border-selected: #cc4e00;
|
|
672
|
+
--tone-orange-text: #582d1d;
|
|
673
|
+
--tone-orange-icon: #cc4e00;
|
|
674
|
+
--tone-teal-bg: #e0f8f3;
|
|
675
|
+
--tone-teal-bg-hover: #ccf3ea;
|
|
676
|
+
--tone-teal-bg-selected: #b8eae0;
|
|
677
|
+
--tone-teal-border: #a1ded2;
|
|
678
|
+
--tone-teal-border-selected: #008573;
|
|
679
|
+
--tone-teal-text: #0d3d38;
|
|
680
|
+
--tone-teal-icon: #008573;
|
|
681
|
+
--tone-blue-bg: #e6f4fe;
|
|
682
|
+
--tone-blue-bg-hover: #d5efff;
|
|
683
|
+
--tone-blue-bg-selected: #c2e5ff;
|
|
684
|
+
--tone-blue-border: #acd8fc;
|
|
685
|
+
--tone-blue-border-selected: #0d74ce;
|
|
686
|
+
--tone-blue-text: #113264;
|
|
687
|
+
--tone-blue-icon: #0d74ce;
|
|
688
|
+
--tone-pink-bg: #fee9f5;
|
|
689
|
+
--tone-pink-bg-hover: #fbdcef;
|
|
690
|
+
--tone-pink-bg-selected: #f6cee7;
|
|
691
|
+
--tone-pink-border: #efbfdd;
|
|
692
|
+
--tone-pink-border-selected: #cf3897;
|
|
693
|
+
--tone-pink-text: #651249;
|
|
694
|
+
--tone-pink-icon: #cf3897;
|
|
695
|
+
--tone-brown-bg: #f6eee7;
|
|
696
|
+
--tone-brown-bg-hover: #f0e4d9;
|
|
697
|
+
--tone-brown-bg-selected: #ebdaca;
|
|
698
|
+
--tone-brown-border: #e4cdb7;
|
|
699
|
+
--tone-brown-border-selected: #815e46;
|
|
700
|
+
--tone-brown-text: #3e332e;
|
|
701
|
+
--tone-brown-icon: #815e46;
|
|
702
|
+
--tone-cyan-bg: #def7f9;
|
|
703
|
+
--tone-cyan-bg-hover: #caf1f6;
|
|
704
|
+
--tone-cyan-bg-selected: #b5e9f0;
|
|
705
|
+
--tone-cyan-border: #9ddde7;
|
|
706
|
+
--tone-cyan-border-selected: #107d98;
|
|
707
|
+
--tone-cyan-text: #0d3c48;
|
|
708
|
+
--tone-cyan-icon: #107d98;
|
|
709
|
+
--tone-lime-bg: #eef6d6;
|
|
710
|
+
--tone-lime-bg-hover: #e2f0bd;
|
|
711
|
+
--tone-lime-bg-selected: #d3e7a6;
|
|
712
|
+
--tone-lime-border: #c2da91;
|
|
713
|
+
--tone-lime-border-selected: #5c7c2f;
|
|
714
|
+
--tone-lime-text: #37401c;
|
|
715
|
+
--tone-lime-icon: #5c7c2f;
|
|
716
|
+
--surface-violet-bg: #f7edfe;
|
|
717
|
+
--surface-violet-border: #e0c4f4;
|
|
718
|
+
--surface-violet-text: #8145b5;
|
|
719
|
+
--surface-orange-bg: #ffefd6;
|
|
720
|
+
--surface-orange-border: #ffc182;
|
|
721
|
+
--surface-orange-text: #bc4904;
|
|
722
|
+
--surface-teal-bg: #e0f8f3;
|
|
723
|
+
--surface-teal-border: #a1ded2;
|
|
724
|
+
--surface-teal-text: #017d6d;
|
|
725
|
+
/* tones:end */
|
|
600
726
|
|
|
601
727
|
/* Run-mix ramp — the fills of a proportional status bar.
|
|
602
728
|
*
|
|
@@ -809,6 +935,8 @@
|
|
|
809
935
|
* themes, which would otherwise inherit the dark ramp from :root. */
|
|
810
936
|
[data-sandbox-theme="vault"]:where(:not(.dark)),
|
|
811
937
|
[data-sandbox-theme="dawn"]:where(:not(.dark)),
|
|
938
|
+
[data-theme="hospitality"]:where(:not(.dark)),
|
|
939
|
+
[data-theme="website"]:where(:not(.dark)),
|
|
812
940
|
[data-theme="light"],
|
|
813
941
|
.light,
|
|
814
942
|
[data-theme$="-light"] {
|
|
@@ -843,3 +971,86 @@
|
|
|
843
971
|
--motion-arrive: var(--duration-arrive) var(--ease-expo);
|
|
844
972
|
}
|
|
845
973
|
}
|
|
974
|
+
|
|
975
|
+
/* tone-scopes:begin — generated by scripts/gen-ladders.mjs; edit its CATEGORY map, not these lines. */
|
|
976
|
+
[data-tone="violet"],
|
|
977
|
+
[data-tone="violet"] :is(.light, .dark, [data-theme], [data-sandbox-ui], [data-sandbox-theme]) {
|
|
978
|
+
--tone-bg: var(--tone-violet-bg);
|
|
979
|
+
--tone-bg-hover: var(--tone-violet-bg-hover);
|
|
980
|
+
--tone-bg-selected: var(--tone-violet-bg-selected);
|
|
981
|
+
--tone-border: var(--tone-violet-border);
|
|
982
|
+
--tone-border-selected: var(--tone-violet-border-selected);
|
|
983
|
+
--tone-text: var(--tone-violet-text);
|
|
984
|
+
--tone-icon: var(--tone-violet-icon);
|
|
985
|
+
}
|
|
986
|
+
[data-tone="orange"],
|
|
987
|
+
[data-tone="orange"] :is(.light, .dark, [data-theme], [data-sandbox-ui], [data-sandbox-theme]) {
|
|
988
|
+
--tone-bg: var(--tone-orange-bg);
|
|
989
|
+
--tone-bg-hover: var(--tone-orange-bg-hover);
|
|
990
|
+
--tone-bg-selected: var(--tone-orange-bg-selected);
|
|
991
|
+
--tone-border: var(--tone-orange-border);
|
|
992
|
+
--tone-border-selected: var(--tone-orange-border-selected);
|
|
993
|
+
--tone-text: var(--tone-orange-text);
|
|
994
|
+
--tone-icon: var(--tone-orange-icon);
|
|
995
|
+
}
|
|
996
|
+
[data-tone="teal"],
|
|
997
|
+
[data-tone="teal"] :is(.light, .dark, [data-theme], [data-sandbox-ui], [data-sandbox-theme]) {
|
|
998
|
+
--tone-bg: var(--tone-teal-bg);
|
|
999
|
+
--tone-bg-hover: var(--tone-teal-bg-hover);
|
|
1000
|
+
--tone-bg-selected: var(--tone-teal-bg-selected);
|
|
1001
|
+
--tone-border: var(--tone-teal-border);
|
|
1002
|
+
--tone-border-selected: var(--tone-teal-border-selected);
|
|
1003
|
+
--tone-text: var(--tone-teal-text);
|
|
1004
|
+
--tone-icon: var(--tone-teal-icon);
|
|
1005
|
+
}
|
|
1006
|
+
[data-tone="blue"],
|
|
1007
|
+
[data-tone="blue"] :is(.light, .dark, [data-theme], [data-sandbox-ui], [data-sandbox-theme]) {
|
|
1008
|
+
--tone-bg: var(--tone-blue-bg);
|
|
1009
|
+
--tone-bg-hover: var(--tone-blue-bg-hover);
|
|
1010
|
+
--tone-bg-selected: var(--tone-blue-bg-selected);
|
|
1011
|
+
--tone-border: var(--tone-blue-border);
|
|
1012
|
+
--tone-border-selected: var(--tone-blue-border-selected);
|
|
1013
|
+
--tone-text: var(--tone-blue-text);
|
|
1014
|
+
--tone-icon: var(--tone-blue-icon);
|
|
1015
|
+
}
|
|
1016
|
+
[data-tone="pink"],
|
|
1017
|
+
[data-tone="pink"] :is(.light, .dark, [data-theme], [data-sandbox-ui], [data-sandbox-theme]) {
|
|
1018
|
+
--tone-bg: var(--tone-pink-bg);
|
|
1019
|
+
--tone-bg-hover: var(--tone-pink-bg-hover);
|
|
1020
|
+
--tone-bg-selected: var(--tone-pink-bg-selected);
|
|
1021
|
+
--tone-border: var(--tone-pink-border);
|
|
1022
|
+
--tone-border-selected: var(--tone-pink-border-selected);
|
|
1023
|
+
--tone-text: var(--tone-pink-text);
|
|
1024
|
+
--tone-icon: var(--tone-pink-icon);
|
|
1025
|
+
}
|
|
1026
|
+
[data-tone="brown"],
|
|
1027
|
+
[data-tone="brown"] :is(.light, .dark, [data-theme], [data-sandbox-ui], [data-sandbox-theme]) {
|
|
1028
|
+
--tone-bg: var(--tone-brown-bg);
|
|
1029
|
+
--tone-bg-hover: var(--tone-brown-bg-hover);
|
|
1030
|
+
--tone-bg-selected: var(--tone-brown-bg-selected);
|
|
1031
|
+
--tone-border: var(--tone-brown-border);
|
|
1032
|
+
--tone-border-selected: var(--tone-brown-border-selected);
|
|
1033
|
+
--tone-text: var(--tone-brown-text);
|
|
1034
|
+
--tone-icon: var(--tone-brown-icon);
|
|
1035
|
+
}
|
|
1036
|
+
[data-tone="cyan"],
|
|
1037
|
+
[data-tone="cyan"] :is(.light, .dark, [data-theme], [data-sandbox-ui], [data-sandbox-theme]) {
|
|
1038
|
+
--tone-bg: var(--tone-cyan-bg);
|
|
1039
|
+
--tone-bg-hover: var(--tone-cyan-bg-hover);
|
|
1040
|
+
--tone-bg-selected: var(--tone-cyan-bg-selected);
|
|
1041
|
+
--tone-border: var(--tone-cyan-border);
|
|
1042
|
+
--tone-border-selected: var(--tone-cyan-border-selected);
|
|
1043
|
+
--tone-text: var(--tone-cyan-text);
|
|
1044
|
+
--tone-icon: var(--tone-cyan-icon);
|
|
1045
|
+
}
|
|
1046
|
+
[data-tone="lime"],
|
|
1047
|
+
[data-tone="lime"] :is(.light, .dark, [data-theme], [data-sandbox-ui], [data-sandbox-theme]) {
|
|
1048
|
+
--tone-bg: var(--tone-lime-bg);
|
|
1049
|
+
--tone-bg-hover: var(--tone-lime-bg-hover);
|
|
1050
|
+
--tone-bg-selected: var(--tone-lime-bg-selected);
|
|
1051
|
+
--tone-border: var(--tone-lime-border);
|
|
1052
|
+
--tone-border-selected: var(--tone-lime-border-selected);
|
|
1053
|
+
--tone-text: var(--tone-lime-text);
|
|
1054
|
+
--tone-icon: var(--tone-lime-icon);
|
|
1055
|
+
}
|
|
1056
|
+
/* tone-scopes:end */
|
|
@@ -520,3 +520,44 @@ describe("dark status surfaces carry their tone in hue, not weight", () => {
|
|
|
520
520
|
});
|
|
521
521
|
}
|
|
522
522
|
});
|
|
523
|
+
|
|
524
|
+
describe("categorical tones are a complete, legible family", () => {
|
|
525
|
+
// gen-ladders.mjs solves these and refuses to write a failing set; this holds
|
|
526
|
+
// the written file to the same floors, so a hand edit inside the generated
|
|
527
|
+
// region fails here before `gen-ladders --check` is even run.
|
|
528
|
+
const CATEGORIES = ["violet", "orange", "teal", "blue", "pink", "brown", "cyan", "lime"];
|
|
529
|
+
const ROLES = ["bg", "bg-hover", "bg-selected", "border", "border-selected", "text", "icon"];
|
|
530
|
+
for (const [theme, spine] of [
|
|
531
|
+
["dark", DARK],
|
|
532
|
+
["light", LIGHT],
|
|
533
|
+
] as const) {
|
|
534
|
+
for (const tone of CATEGORIES) {
|
|
535
|
+
it(`${theme} ${tone}: text and icon clear their floors on every fill`, () => {
|
|
536
|
+
for (const role of ROLES) hexIn(spine, `tone-${tone}-${role}`);
|
|
537
|
+
for (const fill of ["bg", "bg-hover", "bg-selected"]) {
|
|
538
|
+
const under = hexIn(spine, `tone-${tone}-${fill}`);
|
|
539
|
+
expect(
|
|
540
|
+
contrastRatio(hexIn(spine, `tone-${tone}-text`), under),
|
|
541
|
+
`${theme} --tone-${tone}-text on --tone-${tone}-${fill}`,
|
|
542
|
+
).toBeGreaterThanOrEqual(4.5);
|
|
543
|
+
expect(
|
|
544
|
+
contrastRatio(hexIn(spine, `tone-${tone}-icon`), under),
|
|
545
|
+
`${theme} --tone-${tone}-icon on --tone-${tone}-${fill}`,
|
|
546
|
+
).toBeGreaterThanOrEqual(3);
|
|
547
|
+
}
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
it("keeps the shipped --surface-{violet,orange,teal}-* names on the family, with legible text", () => {
|
|
552
|
+
for (const spine of [DARK, LIGHT]) {
|
|
553
|
+
for (const tone of ["violet", "orange", "teal"]) {
|
|
554
|
+
for (const role of ["bg", "border"]) {
|
|
555
|
+
expect(hexIn(spine, `surface-${tone}-${role}`)).toEqual(hexIn(spine, `tone-${tone}-${role}`));
|
|
556
|
+
}
|
|
557
|
+
expect(
|
|
558
|
+
contrastRatio(hexIn(spine, `surface-${tone}-text`), hexIn(spine, `surface-${tone}-bg`)),
|
|
559
|
+
).toBeGreaterThanOrEqual(4.5);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
});
|
|
563
|
+
});
|