@teamblind-chorus/ui 1.2.0 → 2.0.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/README.md +3 -3
- package/agents/AGENTS.md +6 -6
- package/agents/DESIGN.md +245 -244
- package/agents/LOVABLE.md +40 -11
- package/agents/catalog.md +4 -4
- package/agents/components/avatar-rail/avatar-rail.md +2 -4
- package/agents/components/avatar-rail/avatar-rail.spec.json +10 -14
- package/agents/components/badge/role.md +7 -9
- package/agents/components/badge/role.spec.json +6 -6
- package/agents/components/badge/update.md +6 -8
- package/agents/components/badge/update.spec.json +5 -5
- package/agents/components/banner/banner.md +16 -18
- package/agents/components/banner/banner.spec.json +14 -14
- package/agents/components/bottom-sheet/bottom-sheet.md +4 -6
- package/agents/components/bottom-sheet/bottom-sheet.spec.json +5 -5
- package/agents/components/bubble/bubble.md +8 -10
- package/agents/components/bubble/bubble.spec.json +11 -11
- package/agents/components/button/button.md +1 -1
- package/agents/components/button/check.md +9 -11
- package/agents/components/button/check.spec.json +8 -10
- package/agents/components/button/fab.md +7 -9
- package/agents/components/button/fab.spec.json +10 -12
- package/agents/components/button/group.spec.json +4 -4
- package/agents/components/button/icon.md +21 -23
- package/agents/components/button/icon.spec.json +12 -14
- package/agents/components/button/standard.md +40 -42
- package/agents/components/button/standard.spec.json +20 -22
- package/agents/components/button/text.md +21 -23
- package/agents/components/button/text.spec.json +13 -15
- package/agents/components/button/toggle.md +7 -9
- package/agents/components/button/toggle.spec.json +10 -12
- package/agents/components/button/toolbar.md +24 -26
- package/agents/components/button/toolbar.spec.json +10 -12
- package/agents/components/carousel/carousel.md +1 -1
- package/agents/components/carousel/post.md +15 -21
- package/agents/components/carousel/post.spec.json +17 -17
- package/agents/components/carousel/profile.md +9 -45
- package/agents/components/carousel/profile.spec.json +17 -17
- package/agents/components/chip/chip.md +1 -1
- package/agents/components/chip/filter.md +22 -24
- package/agents/components/chip/filter.spec.json +17 -13
- package/agents/components/chip/tag.md +22 -24
- package/agents/components/chip/tag.spec.json +19 -15
- package/agents/components/dialog/dialog.md +1 -3
- package/agents/components/dialog/dialog.spec.json +3 -3
- package/agents/components/directory-list/directory-list.md +1 -3
- package/agents/components/directory-list/directory-list.spec.json +2 -2
- package/agents/components/divider/divider.family.json +1 -1
- package/agents/components/divider/divider.md +12 -14
- package/agents/components/divider/divider.spec.json +8 -8
- package/agents/components/empty-state/empty-state.md +9 -9
- package/agents/components/empty-state/empty-state.spec.json +14 -14
- package/agents/components/feed/ad.md +2 -4
- package/agents/components/feed/ad.spec.json +10 -10
- package/agents/components/feed/post.md +41 -43
- package/agents/components/feed/post.spec.json +35 -39
- package/agents/components/form-field/form-field.md +1 -1
- package/agents/components/form-field/input.md +32 -34
- package/agents/components/form-field/input.spec.json +34 -33
- package/agents/components/form-field/search.md +2 -4
- package/agents/components/form-field/search.spec.json +19 -18
- package/agents/components/form-field/select.md +18 -20
- package/agents/components/form-field/select.spec.json +30 -29
- package/agents/components/form-field/textarea.md +3 -5
- package/agents/components/form-field/textarea.spec.json +32 -31
- package/agents/components/header/main.md +4 -6
- package/agents/components/header/main.spec.json +3 -3
- package/agents/components/header/sub.md +6 -8
- package/agents/components/header/sub.spec.json +3 -3
- package/agents/components/list/accordion.md +34 -45
- package/agents/components/list/accordion.spec.json +20 -20
- package/agents/components/list/entry.md +59 -81
- package/agents/components/list/entry.spec.json +20 -23
- package/agents/components/list/list.md +2 -2
- package/agents/components/list/radio.md +13 -20
- package/agents/components/list/radio.spec.json +16 -20
- package/agents/components/list/standard.md +50 -72
- package/agents/components/list/standard.spec.json +18 -21
- package/agents/components/metadata/compact.md +4 -6
- package/agents/components/metadata/compact.spec.json +6 -6
- package/agents/components/metadata/metadata.md +1 -1
- package/agents/components/metadata/standard.md +12 -14
- package/agents/components/metadata/standard.spec.json +10 -10
- package/agents/components/nav-card/nav-card.md +25 -27
- package/agents/components/nav-card/nav-card.spec.json +19 -19
- package/agents/components/nav-list/nav-list.md +2 -8
- package/agents/components/nav-list/nav-list.spec.json +3 -3
- package/agents/components/navigation-bar/main.md +9 -11
- package/agents/components/navigation-bar/main.spec.json +6 -6
- package/agents/components/navigation-bar/search.md +6 -8
- package/agents/components/navigation-bar/search.spec.json +9 -9
- package/agents/components/navigation-bar/sub.md +9 -11
- package/agents/components/navigation-bar/sub.spec.json +7 -7
- package/agents/components/pagination/pagination.family.json +1 -1
- package/agents/components/pagination/pagination.md +3 -3
- package/agents/components/pagination/pagination.spec.json +5 -5
- package/agents/components/profile-header/profile-header.md +9 -11
- package/agents/components/profile-header/profile-header.spec.json +9 -9
- package/agents/components/progress/progress.family.json +1 -1
- package/agents/components/progress/progress.md +5 -5
- package/agents/components/progress/progress.spec.json +8 -8
- package/agents/components/side-sheet/side-sheet.md +11 -13
- package/agents/components/side-sheet/side-sheet.spec.json +3 -3
- package/agents/components/skeleton/skeleton.md +7 -9
- package/agents/components/skeleton/skeleton.spec.json +5 -5
- package/agents/components/spinner/spinner.family.json +1 -1
- package/agents/components/spinner/spinner.md +8 -10
- package/agents/components/spinner/spinner.spec.json +9 -9
- package/agents/components/status-tag/status-tag.md +7 -9
- package/agents/components/status-tag/status-tag.spec.json +5 -5
- package/agents/components/suggestion-list/suggestion-list.md +3 -7
- package/agents/components/suggestion-list/suggestion-list.spec.json +8 -12
- package/agents/components/switch/switch.md +12 -14
- package/agents/components/switch/switch.spec.json +17 -18
- package/agents/components/tab-bar/tab-bar.md +9 -11
- package/agents/components/tab-bar/tab-bar.spec.json +25 -27
- package/agents/components/tabs/rounded.md +6 -8
- package/agents/components/tabs/rounded.spec.json +17 -15
- package/agents/components/tabs/segmented.md +4 -6
- package/agents/components/tabs/segmented.spec.json +4 -8
- package/agents/components/tabs/underline.md +9 -11
- package/agents/components/tabs/underline.spec.json +14 -16
- package/agents/components/thumbnail/thumbnail.md +5 -7
- package/agents/components/thumbnail/thumbnail.spec.json +8 -8
- package/agents/components/toast/toast.md +5 -7
- package/agents/components/toast/toast.spec.json +3 -3
- package/agents/components/tooltip/tooltip.md +6 -8
- package/agents/components/tooltip/tooltip.spec.json +4 -4
- package/agents/tokens.usage.json +71 -226
- package/dist/index.cjs +212 -223
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -16
- package/dist/index.d.ts +16 -16
- package/dist/index.js +212 -223
- package/dist/index.js.map +1 -1
- package/dist/styles.css +386 -387
- package/eslint/rules.js +7 -7
- package/package.json +2 -3
- package/agents/anti-patterns.md +0 -533
- package/agents/compose.md +0 -240
- package/agents/images.md +0 -66
package/dist/styles.css
CHANGED
|
@@ -160,10 +160,9 @@ textarea {
|
|
|
160
160
|
`box-shadow` on the button itself. Because the pseudo-element is
|
|
161
161
|
`position: absolute`, the ring is out of flow: it contributes nothing
|
|
162
162
|
to layout, so neither the button, a button group's gap, nor any
|
|
163
|
-
sibling shifts when focus arrives. The
|
|
164
|
-
DESIGN.md's canonical recipe, painted *outward*
|
|
165
|
-
|
|
166
|
-
visible at 1→3px). Sits at `z-index: 2`, above the state-overlay
|
|
163
|
+
sibling shifts when focus arrives. The single-ring composition is
|
|
164
|
+
DESIGN.md's canonical recipe, painted *outward* as a 1px
|
|
165
|
+
`border.focused` box-shadow. Sits at `z-index: 2`, above the state-overlay
|
|
167
166
|
`::before` (z-index 0) and the label / icon (z-index 1). */
|
|
168
167
|
.chorus-button--standard::after {
|
|
169
168
|
content: '';
|
|
@@ -178,9 +177,7 @@ textarea {
|
|
|
178
177
|
|
|
179
178
|
.chorus-button--standard:focus-visible::after,
|
|
180
179
|
.chorus-button--standard[data-force-state="focused"]::after {
|
|
181
|
-
box-shadow:
|
|
182
|
-
0 0 0 var(--button-standard-focus-inset-width) var(--button-standard-focus-inset-color),
|
|
183
|
-
0 0 0 calc(var(--button-standard-focus-outer-width) + var(--button-standard-focus-inset-width)) var(--button-standard-focus-outer-color);
|
|
180
|
+
box-shadow: 0 0 0 var(--sys-borderWidth-hairline) var(--button-standard-focus-outer-color);
|
|
184
181
|
}
|
|
185
182
|
|
|
186
183
|
.chorus-button--standard:disabled::after { box-shadow: none; }
|
|
@@ -252,7 +249,7 @@ textarea {
|
|
|
252
249
|
.chorus-button-group__label {
|
|
253
250
|
text-align: center;
|
|
254
251
|
margin-bottom: var(--sys-layout-stack-md);
|
|
255
|
-
color: var(--sys-color-
|
|
252
|
+
color: var(--sys-color-text-subtle);
|
|
256
253
|
font-size: var(--sys-typo-body-md-size);
|
|
257
254
|
font-weight: var(--sys-typo-body-md-weight);
|
|
258
255
|
line-height: var(--sys-typo-body-md-line);
|
|
@@ -260,7 +257,7 @@ textarea {
|
|
|
260
257
|
}
|
|
261
258
|
|
|
262
259
|
.chorus-button-group__label strong {
|
|
263
|
-
color: var(--sys-color-
|
|
260
|
+
color: var(--sys-color-text-default);
|
|
264
261
|
}
|
|
265
262
|
|
|
266
263
|
/* Docked footer bar — full-bleed surface pinned to the bottom of the app.
|
|
@@ -269,7 +266,7 @@ textarea {
|
|
|
269
266
|
passing behind reads as a separate region. Renders in flow — PageShell
|
|
270
267
|
owns the pin, so the bar must NOT set position: sticky/fixed itself. */
|
|
271
268
|
.chorus-button-group--docked {
|
|
272
|
-
background: var(--sys-color-surface);
|
|
269
|
+
background: var(--sys-color-surface-default);
|
|
273
270
|
padding: var(--sys-layout-container-md);
|
|
274
271
|
box-shadow: var(--sys-elevation-sheet);
|
|
275
272
|
}
|
|
@@ -329,7 +326,7 @@ textarea {
|
|
|
329
326
|
/* Focus ring — dedicated overlay layer (`::after`), so it never affects
|
|
330
327
|
layout (the FAB's footprint is fixed; nothing reflows on focus) and
|
|
331
328
|
never collides with the FAB's own `box-shadow` (the floating
|
|
332
|
-
elevation, which stays untouched underneath). Canonical
|
|
329
|
+
elevation, which stays untouched underneath). Canonical single-ring
|
|
333
330
|
composition, painted outward; `z-index: 2`, above the overlay
|
|
334
331
|
`::before` (z-index 0) and the label / icon (z-index 1). */
|
|
335
332
|
.chorus-button--fab::after {
|
|
@@ -345,9 +342,7 @@ textarea {
|
|
|
345
342
|
|
|
346
343
|
.chorus-button--fab:focus-visible::after,
|
|
347
344
|
.chorus-button--fab[data-force-state="focused"]::after {
|
|
348
|
-
box-shadow:
|
|
349
|
-
0 0 0 var(--button-fab-focus-inset-width) var(--button-fab-focus-inset-color),
|
|
350
|
-
0 0 0 calc(var(--button-fab-focus-outer-width) + var(--button-fab-focus-inset-width)) var(--button-fab-focus-outer-color);
|
|
345
|
+
box-shadow: 0 0 0 var(--sys-borderWidth-hairline) var(--button-fab-focus-outer-color);
|
|
351
346
|
}
|
|
352
347
|
|
|
353
348
|
.chorus-button--fab__icon,
|
|
@@ -393,11 +388,7 @@ textarea {
|
|
|
393
388
|
--chip-overlay-hover: var(--sys-state-hover);
|
|
394
389
|
--chip-overlay-pressed: var(--sys-state-pressed);
|
|
395
390
|
--chip-overlay-focus: var(--sys-state-focus);
|
|
396
|
-
--chip-
|
|
397
|
-
--chip-focus-outer-width: var(--sys-borderWidth-thin);
|
|
398
|
-
--chip-focus-outer-color: var(--sys-color-focus);
|
|
399
|
-
--chip-focus-inset-width: var(--sys-borderWidth-hairline);
|
|
400
|
-
--chip-focus-inset-color: var(--sys-color-focusInset);
|
|
391
|
+
--chip-focus-outer-color: var(--sys-color-border-focused);
|
|
401
392
|
font-size: var(--sys-typo-label-sm-size);
|
|
402
393
|
font-weight: var(--sys-typo-label-sm-weight);
|
|
403
394
|
line-height: var(--sys-typo-label-sm-line);
|
|
@@ -431,8 +422,8 @@ textarea {
|
|
|
431
422
|
|
|
432
423
|
.chorus-chip--filter {
|
|
433
424
|
--chip-bg: transparent;
|
|
434
|
-
--chip-label: var(--sys-color-
|
|
435
|
-
--chip-border-color: var(--sys-color-
|
|
425
|
+
--chip-label: var(--sys-color-text-default);
|
|
426
|
+
--chip-border-color: var(--sys-color-border-default);
|
|
436
427
|
/* 32 capsule — anatomy rung, resolved via ref.space. */
|
|
437
428
|
--chip-min-height: var(--ref-space-400);
|
|
438
429
|
--chip-padding-block: var(--sys-layout-container-2xs);
|
|
@@ -441,8 +432,8 @@ textarea {
|
|
|
441
432
|
}
|
|
442
433
|
|
|
443
434
|
.chorus-chip--filter.is-selected {
|
|
444
|
-
--chip-bg: var(--sys-color-
|
|
445
|
-
--chip-label: var(--sys-color-
|
|
435
|
+
--chip-bg: var(--sys-color-background-inverse);
|
|
436
|
+
--chip-label: var(--sys-color-text-inverse);
|
|
446
437
|
--chip-border-color: transparent;
|
|
447
438
|
}
|
|
448
439
|
|
|
@@ -455,8 +446,8 @@ textarea {
|
|
|
455
446
|
so the recipe falls out of the same chip CSS without a per-state
|
|
456
447
|
override. */
|
|
457
448
|
.chorus-chip--filter.chorus-button--toolbar--accent {
|
|
458
|
-
--chip-bg: var(--sys-color-primary);
|
|
459
|
-
--chip-label: var(--sys-color-
|
|
449
|
+
--chip-bg: var(--sys-color-background-primary);
|
|
450
|
+
--chip-label: var(--sys-color-text-onFill);
|
|
460
451
|
--chip-border-color: transparent;
|
|
461
452
|
}
|
|
462
453
|
|
|
@@ -466,8 +457,8 @@ textarea {
|
|
|
466
457
|
cluster so the button reads against `inverseSurface` containers
|
|
467
458
|
without a per-host tweak. */
|
|
468
459
|
.chorus-chip--filter.chorus-button--toolbar--inverse {
|
|
469
|
-
--chip-bg: var(--sys-color-
|
|
470
|
-
--chip-label: var(--sys-color-
|
|
460
|
+
--chip-bg: var(--sys-color-background-inverse);
|
|
461
|
+
--chip-label: var(--sys-color-text-inverse);
|
|
471
462
|
--chip-border-color: transparent;
|
|
472
463
|
}
|
|
473
464
|
|
|
@@ -477,8 +468,8 @@ textarea {
|
|
|
477
468
|
(transparent while inactive), so the chip never changes width when it
|
|
478
469
|
toggles. */
|
|
479
470
|
.chorus-chip--toggle {
|
|
480
|
-
--chip-bg: var(--sys-color-primary);
|
|
481
|
-
--chip-label: var(--sys-color-
|
|
471
|
+
--chip-bg: var(--sys-color-background-primary);
|
|
472
|
+
--chip-label: var(--sys-color-text-onFill);
|
|
482
473
|
--chip-border-color: transparent;
|
|
483
474
|
/* 32 capsule — same geometry as Filter, anatomy rung. */
|
|
484
475
|
--chip-min-height: var(--ref-space-400);
|
|
@@ -488,21 +479,18 @@ textarea {
|
|
|
488
479
|
}
|
|
489
480
|
|
|
490
481
|
.chorus-chip--toggle.is-selected {
|
|
491
|
-
--chip-bg: var(--sys-color-
|
|
492
|
-
--chip-label: var(--sys-color-
|
|
493
|
-
--chip-border-color: var(--sys-color-
|
|
482
|
+
--chip-bg: var(--sys-color-background-neutral);
|
|
483
|
+
--chip-label: var(--sys-color-text-default);
|
|
484
|
+
--chip-border-color: var(--sys-color-border-default);
|
|
494
485
|
}
|
|
495
486
|
|
|
496
487
|
.chorus-chip--tag {
|
|
497
|
-
/*
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
track, StatusTag neutral, and Skeleton. */
|
|
504
|
-
--chip-bg: var(--sys-color-scrimSubtle);
|
|
505
|
-
--chip-label: var(--sys-color-onSurface);
|
|
488
|
+
/* Solid `background.neutral` fill (the role that replaced the old ~8%
|
|
489
|
+
scrim) — a fixed light-gray pill in light, a mid-gray in dark. Same
|
|
490
|
+
neutral fill as Banner default, Progress track, StatusTag neutral,
|
|
491
|
+
and Skeleton, so the quiet-neutral family reads as one. */
|
|
492
|
+
--chip-bg: var(--sys-color-background-neutral);
|
|
493
|
+
--chip-label: var(--sys-color-text-default);
|
|
506
494
|
--chip-border-color: transparent;
|
|
507
495
|
/* 24 capsule — Tag rung, anatomy via ref.space. */
|
|
508
496
|
--chip-min-height: var(--ref-space-300);
|
|
@@ -516,8 +504,8 @@ textarea {
|
|
|
516
504
|
block. Inline `--chip-bg` is also skipped by the JSX (the appearance
|
|
517
505
|
has no `backgroundDark` field) so this class wins cleanly. */
|
|
518
506
|
.chorus-chip--tag.chorus-chip--tag--accent {
|
|
519
|
-
--chip-bg: var(--sys-color-
|
|
520
|
-
--chip-label: var(--sys-color-
|
|
507
|
+
--chip-bg: var(--sys-color-background-selected);
|
|
508
|
+
--chip-label: var(--sys-color-text-accent-blue);
|
|
521
509
|
}
|
|
522
510
|
|
|
523
511
|
/* Icon-only Compact — when the chip carries no label slot, shrink the
|
|
@@ -559,7 +547,7 @@ span.chorus-chip {
|
|
|
559
547
|
|
|
560
548
|
/* Focus ring — dedicated overlay layer (`::after`), `position: absolute`
|
|
561
549
|
so it's out of flow: a focused chip never widens, and a chip group's
|
|
562
|
-
4px gap never shifts. Canonical
|
|
550
|
+
4px gap never shifts. Canonical single-ring composition, painted outward;
|
|
563
551
|
`z-index: 2`, above the overlay `::before` (z-index 0) and the label /
|
|
564
552
|
icon (z-index 1). Inside a Tabs row the ring is re-anchored *inward*
|
|
565
553
|
(the row is a scroller — see the Segmented override below). */
|
|
@@ -576,9 +564,7 @@ span.chorus-chip {
|
|
|
576
564
|
|
|
577
565
|
.chorus-chip:focus-visible::after,
|
|
578
566
|
.chorus-chip[data-force-state="focused"]::after {
|
|
579
|
-
box-shadow:
|
|
580
|
-
0 0 0 var(--chip-focus-inset-width) var(--chip-focus-inset-color),
|
|
581
|
-
0 0 0 calc(var(--chip-focus-outer-width) + var(--chip-focus-inset-width)) var(--chip-focus-outer-color);
|
|
567
|
+
box-shadow: 0 0 0 var(--sys-borderWidth-hairline) var(--chip-focus-outer-color);
|
|
582
568
|
}
|
|
583
569
|
|
|
584
570
|
.chorus-chip:disabled::after { box-shadow: none; }
|
|
@@ -607,7 +593,12 @@ span.chorus-chip {
|
|
|
607
593
|
}
|
|
608
594
|
|
|
609
595
|
.chorus-chip:disabled {
|
|
610
|
-
opacity:
|
|
596
|
+
/* Explicit disabled (no opacity): neutral disabled pill — overrides the
|
|
597
|
+
variant's --chip-bg / --chip-label / --chip-border-color on source
|
|
598
|
+
order (this rule sits after every appearance block above). */
|
|
599
|
+
--chip-bg: var(--sys-color-background-disabled);
|
|
600
|
+
--chip-label: var(--sys-color-text-disabled);
|
|
601
|
+
--chip-border-color: var(--sys-color-border-bold);
|
|
611
602
|
cursor: not-allowed;
|
|
612
603
|
}
|
|
613
604
|
|
|
@@ -649,7 +640,7 @@ span.chorus-chip {
|
|
|
649
640
|
width: var(--badge-min-width);
|
|
650
641
|
height: var(--badge-min-height);
|
|
651
642
|
padding: 0;
|
|
652
|
-
box-shadow: 0 0 0 var(--sys-borderWidth-thin) var(--sys-color-surface);
|
|
643
|
+
box-shadow: 0 0 0 var(--sys-borderWidth-thin) var(--sys-color-surface-default);
|
|
653
644
|
}
|
|
654
645
|
|
|
655
646
|
/* ============================================================
|
|
@@ -749,7 +740,11 @@ span.chorus-chip {
|
|
|
749
740
|
}
|
|
750
741
|
|
|
751
742
|
.chorus-tab:disabled {
|
|
752
|
-
opacity:
|
|
743
|
+
/* Explicit disabled (no opacity): label + icon re-tone to text.disabled
|
|
744
|
+
(icon rides currentColor); overrides the selected/unselected label
|
|
745
|
+
color on specificity. A disabled tab is never selected, so no
|
|
746
|
+
indicator paints. */
|
|
747
|
+
color: var(--sys-color-text-disabled);
|
|
753
748
|
cursor: not-allowed;
|
|
754
749
|
outline: none;
|
|
755
750
|
box-shadow: none;
|
|
@@ -889,10 +884,9 @@ span.chorus-chip {
|
|
|
889
884
|
• Clip-safe — the Tabs row is a horizontal scroller (`overflow-x:
|
|
890
885
|
auto`, which coerces `overflow-y: auto`), so an *outward* ring is
|
|
891
886
|
sliced off at the row's top / bottom edge. The ring is drawn
|
|
892
|
-
*inside* the tab via
|
|
893
|
-
• Layer-safe —
|
|
894
|
-
|
|
895
|
-
`focusInset` counter-ring) are explicit and both visible.
|
|
887
|
+
*inside* the tab via an inset box-shadow, so nothing clips it.
|
|
888
|
+
• Layer-safe — the ring is a single 1px `border.focused` inset
|
|
889
|
+
box-shadow on the `::after`, explicit and always visible.
|
|
896
890
|
Sits at `z-index: 2`, above the state-overlay `::before` (z-index 0)
|
|
897
891
|
and the label / icon (z-index 1). The tab's own `::before` already
|
|
898
892
|
owns the focus *overlay* tint; this `::after` owns the *ring*. */
|
|
@@ -909,9 +903,7 @@ span.chorus-chip {
|
|
|
909
903
|
|
|
910
904
|
.chorus-tab--underline:focus-visible::after,
|
|
911
905
|
.chorus-tab--underline[data-force-state="focused"]::after {
|
|
912
|
-
box-shadow:
|
|
913
|
-
inset 0 0 0 var(--tabs-focus-outer-width) var(--tabs-focus-outer-color),
|
|
914
|
-
inset 0 0 0 calc(var(--tabs-focus-outer-width) + var(--tabs-focus-inset-width)) var(--tabs-focus-inset-color);
|
|
906
|
+
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--tabs-focus-outer-color);
|
|
915
907
|
}
|
|
916
908
|
|
|
917
909
|
/* ----- Segmented ----- */
|
|
@@ -951,9 +943,7 @@ span.chorus-chip {
|
|
|
951
943
|
from outward to inset here.) */
|
|
952
944
|
.chorus-tabs--segmented .chorus-chip:focus-visible::after,
|
|
953
945
|
.chorus-tabs--segmented .chorus-chip[data-force-state="focused"]::after {
|
|
954
|
-
box-shadow:
|
|
955
|
-
inset 0 0 0 var(--chip-focus-outer-width) var(--chip-focus-outer-color),
|
|
956
|
-
inset 0 0 0 calc(var(--chip-focus-outer-width) + var(--chip-focus-inset-width)) var(--chip-focus-inset-color);
|
|
946
|
+
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--chip-focus-outer-color);
|
|
957
947
|
}
|
|
958
948
|
|
|
959
949
|
/* ----- Rounded (chip-delegated) -----
|
|
@@ -998,7 +988,7 @@ span.chorus-chip {
|
|
|
998
988
|
font-size: var(--sys-typo-label-sm-size);
|
|
999
989
|
font-weight: var(--sys-typo-label-sm-weight);
|
|
1000
990
|
line-height: var(--sys-typo-label-sm-line);
|
|
1001
|
-
color: var(--sys-color-
|
|
991
|
+
color: var(--sys-color-text-default);
|
|
1002
992
|
text-decoration: none;
|
|
1003
993
|
white-space: nowrap;
|
|
1004
994
|
overflow: hidden;
|
|
@@ -1007,7 +997,7 @@ span.chorus-chip {
|
|
|
1007
997
|
}
|
|
1008
998
|
a.chorus-metadata__name:hover { text-decoration: underline; }
|
|
1009
999
|
a.chorus-metadata__name:focus-visible {
|
|
1010
|
-
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-
|
|
1000
|
+
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-border-focused);
|
|
1011
1001
|
outline-offset: var(--sys-layout-inline-xs);
|
|
1012
1002
|
border-radius: var(--sys-radius-xs);
|
|
1013
1003
|
}
|
|
@@ -1017,7 +1007,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1017
1007
|
font-weight: var(--sys-typo-label-sm-weight);
|
|
1018
1008
|
line-height: var(--sys-typo-label-sm-line);
|
|
1019
1009
|
/* One tonal step further than name — timestamp recedes. */
|
|
1020
|
-
color: var(--sys-color-
|
|
1010
|
+
color: var(--sys-color-border-boldest);
|
|
1021
1011
|
}
|
|
1022
1012
|
|
|
1023
1013
|
/* Middot separator. The bullet glyph (U+00B7) is naturally tall — its
|
|
@@ -1029,7 +1019,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1029
1019
|
the line-box to that font-size so the dot's vertical extent never
|
|
1030
1020
|
exceeds the text height. */
|
|
1031
1021
|
.chorus-metadata__dot {
|
|
1032
|
-
color: var(--sys-color-
|
|
1022
|
+
color: var(--sys-color-border-boldest);
|
|
1033
1023
|
font-size: var(--sys-typo-label-sm-size);
|
|
1034
1024
|
line-height: 1;
|
|
1035
1025
|
}
|
|
@@ -1044,15 +1034,15 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1044
1034
|
font-size: var(--sys-typo-label-sm-size);
|
|
1045
1035
|
font-weight: var(--sys-typo-label-sm-weight);
|
|
1046
1036
|
line-height: var(--sys-typo-label-sm-line);
|
|
1047
|
-
color: var(--sys-color-
|
|
1037
|
+
color: var(--sys-color-text-link);
|
|
1048
1038
|
}
|
|
1049
1039
|
|
|
1050
1040
|
.chorus-metadata__follow[aria-pressed="true"] {
|
|
1051
|
-
color: var(--sys-color-
|
|
1041
|
+
color: var(--sys-color-text-subtle);
|
|
1052
1042
|
}
|
|
1053
1043
|
|
|
1054
1044
|
.chorus-metadata__follow:focus-visible {
|
|
1055
|
-
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-
|
|
1045
|
+
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-border-focused);
|
|
1056
1046
|
outline-offset: var(--sys-layout-inline-xs);
|
|
1057
1047
|
border-radius: var(--sys-radius-xs);
|
|
1058
1048
|
}
|
|
@@ -1061,7 +1051,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1061
1051
|
font-size: var(--sys-typo-label-sm-size);
|
|
1062
1052
|
font-weight: var(--sys-typo-label-sm-weight);
|
|
1063
1053
|
line-height: var(--sys-typo-label-sm-line);
|
|
1064
|
-
color: var(--sys-color-
|
|
1054
|
+
color: var(--sys-color-text-subtle);
|
|
1065
1055
|
white-space: nowrap;
|
|
1066
1056
|
overflow: hidden;
|
|
1067
1057
|
text-overflow: ellipsis;
|
|
@@ -1074,7 +1064,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1074
1064
|
font-size: var(--sys-typo-label-sm-size);
|
|
1075
1065
|
font-weight: var(--sys-typo-label-sm-weight);
|
|
1076
1066
|
line-height: var(--sys-typo-label-sm-line);
|
|
1077
|
-
color: var(--sys-color-
|
|
1067
|
+
color: var(--sys-color-text-subtle);
|
|
1078
1068
|
min-width: 0;
|
|
1079
1069
|
}
|
|
1080
1070
|
|
|
@@ -1088,7 +1078,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1088
1078
|
}
|
|
1089
1079
|
.chorus-metadata__meta-link:hover { text-decoration: underline; }
|
|
1090
1080
|
.chorus-metadata__meta-link:focus-visible {
|
|
1091
|
-
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-
|
|
1081
|
+
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-border-focused);
|
|
1092
1082
|
outline-offset: var(--sys-layout-inline-xs);
|
|
1093
1083
|
border-radius: var(--sys-radius-xs);
|
|
1094
1084
|
}
|
|
@@ -1148,8 +1138,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1148
1138
|
flex-direction: column;
|
|
1149
1139
|
gap: var(--sys-layout-stack-md);
|
|
1150
1140
|
padding: var(--sys-layout-container-lg) var(--sys-layout-container-md);
|
|
1151
|
-
background: var(--sys-color-surface);
|
|
1152
|
-
color: var(--sys-color-
|
|
1141
|
+
background: var(--sys-color-surface-default);
|
|
1142
|
+
color: var(--sys-color-text-default);
|
|
1153
1143
|
width: 100%;
|
|
1154
1144
|
/* Max-width is a layout-contract literal (matches the Feed family's
|
|
1155
1145
|
"single column, mobile-first card" rule). Anatomy contract, not a
|
|
@@ -1157,9 +1147,9 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1157
1147
|
max-width: 480px;
|
|
1158
1148
|
box-sizing: border-box;
|
|
1159
1149
|
/* Hairline bottom divider — every Post / Ad card ends with a 1px
|
|
1160
|
-
|
|
1150
|
+
border.default seam so consecutive cards in a stream read as one
|
|
1161
1151
|
rhythm. border-bottom is layout-safe under box-sizing: border-box. */
|
|
1162
|
-
border-bottom: var(--sys-borderWidth-hairline) solid var(--sys-color-
|
|
1152
|
+
border-bottom: var(--sys-borderWidth-hairline) solid var(--sys-color-border-default);
|
|
1163
1153
|
}
|
|
1164
1154
|
|
|
1165
1155
|
/* Clickable Post — whole-card navigation target (opt-in via `onClick`).
|
|
@@ -1172,7 +1162,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1172
1162
|
}
|
|
1173
1163
|
|
|
1174
1164
|
.chorus-feed--clickable:focus-visible {
|
|
1175
|
-
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-
|
|
1165
|
+
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-border-focused);
|
|
1176
1166
|
outline-offset: calc(-1 * var(--sys-layout-inline-xs));
|
|
1177
1167
|
}
|
|
1178
1168
|
|
|
@@ -1196,7 +1186,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1196
1186
|
font-weight: var(--sys-typo-label-sm-weight);
|
|
1197
1187
|
line-height: var(--sys-typo-label-sm-line);
|
|
1198
1188
|
letter-spacing: var(--sys-typo-label-sm-tracking);
|
|
1199
|
-
color: var(--sys-color-brand);
|
|
1189
|
+
color: var(--sys-color-text-brand);
|
|
1200
1190
|
text-transform: uppercase;
|
|
1201
1191
|
}
|
|
1202
1192
|
|
|
@@ -1227,7 +1217,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1227
1217
|
font-weight: var(--sys-typo-heading-sm-weight);
|
|
1228
1218
|
line-height: var(--sys-typo-heading-sm-line);
|
|
1229
1219
|
letter-spacing: var(--sys-typo-heading-sm-tracking);
|
|
1230
|
-
color: var(--sys-color-
|
|
1220
|
+
color: var(--sys-color-text-default);
|
|
1231
1221
|
white-space: nowrap;
|
|
1232
1222
|
overflow: hidden;
|
|
1233
1223
|
text-overflow: ellipsis;
|
|
@@ -1238,7 +1228,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1238
1228
|
font-size: var(--sys-typo-body-sm-size);
|
|
1239
1229
|
font-weight: var(--sys-typo-body-sm-weight);
|
|
1240
1230
|
line-height: var(--sys-typo-body-sm-line);
|
|
1241
|
-
color: var(--sys-color-
|
|
1231
|
+
color: var(--sys-color-text-subtle);
|
|
1242
1232
|
display: -webkit-box;
|
|
1243
1233
|
-webkit-line-clamp: 2;
|
|
1244
1234
|
-webkit-box-orient: vertical;
|
|
@@ -1254,7 +1244,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1254
1244
|
width: var(--ref-space-1000);
|
|
1255
1245
|
height: var(--ref-space-1000);
|
|
1256
1246
|
border-radius: var(--sys-radius-md);
|
|
1257
|
-
background: var(--sys-color-
|
|
1247
|
+
background: var(--sys-color-surface-sunken);
|
|
1258
1248
|
position: relative;
|
|
1259
1249
|
overflow: hidden;
|
|
1260
1250
|
}
|
|
@@ -1262,7 +1252,6 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1262
1252
|
.chorus-feed__thumbnail img,
|
|
1263
1253
|
.chorus-feed__thumbnail-fallback {
|
|
1264
1254
|
width: 100%; height: 100%; display: block;
|
|
1265
|
-
background: linear-gradient(135deg, var(--sys-color-placeholderImage-start) 0%, var(--sys-color-placeholderImage-end) 100%);
|
|
1266
1255
|
object-fit: cover;
|
|
1267
1256
|
}
|
|
1268
1257
|
|
|
@@ -1300,7 +1289,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1300
1289
|
/* Touch-target floor — same 48 rung used by List rows, kept as an
|
|
1301
1290
|
intrinsic anatomy dimension (not a layout token). */
|
|
1302
1291
|
min-height: var(--ref-space-600);
|
|
1303
|
-
background: var(--sys-color-
|
|
1292
|
+
background: var(--sys-color-surface-sunken);
|
|
1304
1293
|
border-radius: var(--sys-radius-md);
|
|
1305
1294
|
font-size: var(--sys-typo-body-sm-size);
|
|
1306
1295
|
line-height: var(--sys-typo-body-sm-line);
|
|
@@ -1311,25 +1300,25 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1311
1300
|
align-items: center;
|
|
1312
1301
|
gap: var(--sys-layout-inline-sm);
|
|
1313
1302
|
}
|
|
1314
|
-
.chorus-feed__poll-glyph { color: var(--sys-color-brand); display: inline-flex; }
|
|
1315
|
-
.chorus-feed__poll-label { color: var(--sys-color-brand); font-weight: var(--ref-fontWeight-bold); }
|
|
1303
|
+
.chorus-feed__poll-glyph { color: var(--sys-color-text-brand); display: inline-flex; }
|
|
1304
|
+
.chorus-feed__poll-label { color: var(--sys-color-text-brand); font-weight: var(--ref-fontWeight-bold); }
|
|
1316
1305
|
|
|
1317
1306
|
/* Offer-evaluation tone — same chrome as the poll banner, but the
|
|
1318
|
-
leading glyph and label paint in `sys.color.success` (resolves to
|
|
1307
|
+
leading glyph and label paint in `sys.color.text.success` (resolves to
|
|
1319
1308
|
`ref.palette.green.500` in light, the same step in dark), so the
|
|
1320
1309
|
editorial category reads as "compensation / decision support"
|
|
1321
1310
|
rather than "community vote". The icon is `CompensationFillIcon`;
|
|
1322
1311
|
the label is constrained to the literal "Offer" by the spec. */
|
|
1323
1312
|
.chorus-feed__poll--offer .chorus-feed__poll-glyph,
|
|
1324
1313
|
.chorus-feed__poll--offer .chorus-feed__poll-label {
|
|
1325
|
-
color: var(--sys-color-success);
|
|
1314
|
+
color: var(--sys-color-text-success);
|
|
1326
1315
|
}
|
|
1327
1316
|
.chorus-feed__poll-divider {
|
|
1328
1317
|
width: var(--sys-borderWidth-hairline);
|
|
1329
1318
|
align-self: stretch;
|
|
1330
|
-
background: var(--sys-color-
|
|
1319
|
+
background: var(--sys-color-border-default);
|
|
1331
1320
|
}
|
|
1332
|
-
.chorus-feed__poll-participants { color: var(--sys-color-
|
|
1321
|
+
.chorus-feed__poll-participants { color: var(--sys-color-text-default); }
|
|
1333
1322
|
.chorus-feed__poll-participants strong { font-weight: var(--ref-fontWeight-bold); }
|
|
1334
1323
|
|
|
1335
1324
|
.chorus-feed__citation {
|
|
@@ -1342,7 +1331,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1342
1331
|
gap: 0;
|
|
1343
1332
|
align-items: stretch;
|
|
1344
1333
|
padding: 0;
|
|
1345
|
-
background: var(--sys-color-
|
|
1334
|
+
background: var(--sys-color-surface-default);
|
|
1346
1335
|
border-radius: var(--sys-radius-md);
|
|
1347
1336
|
overflow: hidden;
|
|
1348
1337
|
text-decoration: none;
|
|
@@ -1359,7 +1348,6 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1359
1348
|
flex: 0 0 120px;
|
|
1360
1349
|
width: 120px;
|
|
1361
1350
|
align-self: stretch;
|
|
1362
|
-
background: linear-gradient(135deg, var(--sys-color-placeholderImage-start) 0%, var(--sys-color-placeholderImage-end) 100%);
|
|
1363
1351
|
overflow: hidden;
|
|
1364
1352
|
position: relative;
|
|
1365
1353
|
}
|
|
@@ -1380,7 +1368,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1380
1368
|
padding: var(--sys-layout-container-sm);
|
|
1381
1369
|
min-width: 0;
|
|
1382
1370
|
flex: 1 1 auto;
|
|
1383
|
-
background: var(--sys-color-
|
|
1371
|
+
background: var(--sys-color-surface-sunken);
|
|
1384
1372
|
}
|
|
1385
1373
|
|
|
1386
1374
|
/* All text inside the citation surface sits at the label.sm rung —
|
|
@@ -1394,7 +1382,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1394
1382
|
.chorus-feed__citation-title {
|
|
1395
1383
|
font-weight: var(--sys-typo-label-sm-weight);
|
|
1396
1384
|
line-height: var(--sys-typo-label-sm-line);
|
|
1397
|
-
color: var(--sys-color-
|
|
1385
|
+
color: var(--sys-color-text-default);
|
|
1398
1386
|
display: -webkit-box;
|
|
1399
1387
|
-webkit-line-clamp: 2;
|
|
1400
1388
|
-webkit-box-orient: vertical;
|
|
@@ -1405,7 +1393,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1405
1393
|
display: inline-flex;
|
|
1406
1394
|
align-items: center;
|
|
1407
1395
|
gap: var(--sys-layout-inline-sm);
|
|
1408
|
-
color: var(--sys-color-
|
|
1396
|
+
color: var(--sys-color-text-subtle);
|
|
1409
1397
|
}
|
|
1410
1398
|
/* Source mark is a 16×16 brand badge — `icon.sm` anatomy rung with
|
|
1411
1399
|
`radius.sm` (4px) so it reads as a chip-adjacent badge, not a tag. */
|
|
@@ -1413,8 +1401,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1413
1401
|
width: var(--sys-icon-md); height: var(--sys-icon-md);
|
|
1414
1402
|
flex: 0 0 var(--sys-icon-md);
|
|
1415
1403
|
border-radius: var(--sys-radius-sm);
|
|
1416
|
-
background: var(--sys-color-
|
|
1417
|
-
color: var(--sys-color-surface);
|
|
1404
|
+
background: var(--sys-color-icon-default);
|
|
1405
|
+
color: var(--sys-color-surface-default);
|
|
1418
1406
|
display: inline-flex; align-items: center; justify-content: center;
|
|
1419
1407
|
overflow: hidden;
|
|
1420
1408
|
}
|
|
@@ -1424,7 +1412,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1424
1412
|
.chorus-feed__mention {
|
|
1425
1413
|
font-style: italic;
|
|
1426
1414
|
font-size: var(--sys-typo-body-sm-size);
|
|
1427
|
-
color: var(--sys-color-
|
|
1415
|
+
color: var(--sys-color-text-mention);
|
|
1428
1416
|
text-decoration: none;
|
|
1429
1417
|
}
|
|
1430
1418
|
|
|
@@ -1439,14 +1427,14 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1439
1427
|
display: flex;
|
|
1440
1428
|
align-items: center;
|
|
1441
1429
|
gap: var(--sys-layout-inline-lg);
|
|
1442
|
-
color: var(--sys-color-
|
|
1430
|
+
color: var(--sys-color-text-subtle);
|
|
1443
1431
|
}
|
|
1444
1432
|
|
|
1445
1433
|
/* Active toggle — the brand-tone variant of the Like counter. We
|
|
1446
1434
|
override `--button-text-label` directly rather than reaching for
|
|
1447
1435
|
Text Button's `primary` appearance because Feed's active-like
|
|
1448
|
-
colour is `sys.color.brand` (the same role the editorial `flag`
|
|
1449
|
-
slot rides), not the interactive `sys.color.primary`. Selector
|
|
1436
|
+
colour is `sys.color.text.brand` (the same role the editorial `flag`
|
|
1437
|
+
slot rides), not the interactive `sys.color.background.primary`. Selector
|
|
1450
1438
|
doubles the class (specificity 0,2,0) so it wins against the
|
|
1451
1439
|
`.chorus-button--text--appearance-default` rule that declares
|
|
1452
1440
|
`--button-text-label` later in the cascade. The Heart glyph re-
|
|
@@ -1454,7 +1442,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1454
1442
|
and the hover / pressed / focus overlays inherit from
|
|
1455
1443
|
`--button-text-label` so the state feedback stays in lockstep. */
|
|
1456
1444
|
.chorus-button--text.chorus-feed__like--active {
|
|
1457
|
-
--button-text-label: var(--sys-color-brand);
|
|
1445
|
+
--button-text-label: var(--sys-color-text-brand);
|
|
1458
1446
|
}
|
|
1459
1447
|
|
|
1460
1448
|
|
|
@@ -1478,7 +1466,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1478
1466
|
font-size: var(--sys-typo-label-sm-size);
|
|
1479
1467
|
font-weight: var(--sys-typo-label-sm-weight);
|
|
1480
1468
|
line-height: var(--sys-typo-label-sm-line);
|
|
1481
|
-
color: var(--sys-color-
|
|
1469
|
+
color: var(--sys-color-text-subtle);
|
|
1482
1470
|
}
|
|
1483
1471
|
.chorus-feed__views-icon {
|
|
1484
1472
|
display: inline-flex;
|
|
@@ -1496,8 +1484,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1496
1484
|
flex-direction: column;
|
|
1497
1485
|
gap: var(--sys-layout-stack-md);
|
|
1498
1486
|
padding: var(--sys-layout-container-lg) var(--sys-layout-container-md);
|
|
1499
|
-
background: var(--sys-color-surface);
|
|
1500
|
-
color: var(--sys-color-
|
|
1487
|
+
background: var(--sys-color-surface-default);
|
|
1488
|
+
color: var(--sys-color-text-default);
|
|
1501
1489
|
width: 100%;
|
|
1502
1490
|
/* Same column cap as Feed — FeedAd rides in the same scrolling
|
|
1503
1491
|
column, so the literal mirrors Feed's anatomy contract. */
|
|
@@ -1506,7 +1494,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1506
1494
|
box-sizing: border-box;
|
|
1507
1495
|
/* Hairline bottom divider — mirrors the Feed Post seam so an Ad
|
|
1508
1496
|
drops into a Post stream without breaking the inter-card rhythm. */
|
|
1509
|
-
border-bottom: var(--sys-borderWidth-hairline) solid var(--sys-color-
|
|
1497
|
+
border-bottom: var(--sys-borderWidth-hairline) solid var(--sys-color-border-default);
|
|
1510
1498
|
}
|
|
1511
1499
|
|
|
1512
1500
|
/* FeedAd brand row is now rendered via the shared Metadata component —
|
|
@@ -1528,7 +1516,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1528
1516
|
justify-content: center;
|
|
1529
1517
|
width: var(--ref-space-300);
|
|
1530
1518
|
height: var(--ref-space-300);
|
|
1531
|
-
color: var(--sys-color-
|
|
1519
|
+
color: var(--sys-color-text-subtle);
|
|
1532
1520
|
flex: 0 0 auto;
|
|
1533
1521
|
}
|
|
1534
1522
|
.chorus-feed-ad__dismiss svg {
|
|
@@ -1537,7 +1525,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1537
1525
|
display: block;
|
|
1538
1526
|
}
|
|
1539
1527
|
.chorus-feed-ad__dismiss:focus-visible {
|
|
1540
|
-
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-
|
|
1528
|
+
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-border-focused);
|
|
1541
1529
|
outline-offset: var(--sys-layout-inline-xs);
|
|
1542
1530
|
border-radius: var(--sys-radius-xs);
|
|
1543
1531
|
}
|
|
@@ -1555,7 +1543,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1555
1543
|
font-weight: var(--sys-typo-heading-sm-weight);
|
|
1556
1544
|
line-height: var(--sys-typo-heading-sm-line);
|
|
1557
1545
|
letter-spacing: var(--sys-typo-heading-sm-tracking);
|
|
1558
|
-
color: var(--sys-color-
|
|
1546
|
+
color: var(--sys-color-text-default);
|
|
1559
1547
|
white-space: nowrap;
|
|
1560
1548
|
overflow: hidden;
|
|
1561
1549
|
text-overflow: ellipsis;
|
|
@@ -1566,7 +1554,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1566
1554
|
font-size: var(--sys-typo-body-sm-size);
|
|
1567
1555
|
font-weight: var(--sys-typo-body-sm-weight);
|
|
1568
1556
|
line-height: var(--sys-typo-body-sm-line);
|
|
1569
|
-
color: var(--sys-color-
|
|
1557
|
+
color: var(--sys-color-text-subtle);
|
|
1570
1558
|
display: -webkit-box;
|
|
1571
1559
|
-webkit-line-clamp: 2;
|
|
1572
1560
|
-webkit-box-orient: vertical;
|
|
@@ -1592,7 +1580,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1592
1580
|
.chorus-feed-ad__media {
|
|
1593
1581
|
width: 100%;
|
|
1594
1582
|
aspect-ratio: 16 / 10;
|
|
1595
|
-
background-color: var(--sys-color-
|
|
1583
|
+
background-color: var(--sys-color-surface-sunken);
|
|
1596
1584
|
background-image: var(--chorus-placeholder-image);
|
|
1597
1585
|
background-size: cover;
|
|
1598
1586
|
background-position: center;
|
|
@@ -1624,7 +1612,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1624
1612
|
schema/components/carousel/carousel.md for the contract.
|
|
1625
1613
|
============================================================ */
|
|
1626
1614
|
.chorus-carousel {
|
|
1627
|
-
background: var(--sys-color-surface);
|
|
1615
|
+
background: var(--sys-color-surface-default);
|
|
1628
1616
|
width: 100%;
|
|
1629
1617
|
box-sizing: border-box;
|
|
1630
1618
|
/* Full-bleed inline (matches DirectoryList): the host pays NO inline
|
|
@@ -1676,7 +1664,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1676
1664
|
|
|
1677
1665
|
.chorus-header .chorus-header__label {
|
|
1678
1666
|
margin: 0;
|
|
1679
|
-
color: var(--sys-color-
|
|
1667
|
+
color: var(--sys-color-text-default);
|
|
1680
1668
|
font-size: var(--sys-typo-heading-md-size);
|
|
1681
1669
|
line-height: var(--sys-typo-heading-md-line);
|
|
1682
1670
|
font-weight: var(--sys-typo-heading-md-weight);
|
|
@@ -1699,7 +1687,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1699
1687
|
later in this file. The IconButton is its own tap target; the
|
|
1700
1688
|
surrounding `<header>` stays non-interactive. */
|
|
1701
1689
|
.chorus-button--icon.chorus-header__icon {
|
|
1702
|
-
--button-icon-glyph-color: var(--sys-color-
|
|
1690
|
+
--button-icon-glyph-color: var(--sys-color-text-subtle);
|
|
1703
1691
|
}
|
|
1704
1692
|
|
|
1705
1693
|
.chorus-header__icon--chevron svg {
|
|
@@ -1801,10 +1789,10 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1801
1789
|
gap: var(--sys-layout-stack-sm);
|
|
1802
1790
|
padding: var(--sys-layout-container-md);
|
|
1803
1791
|
border-radius: var(--sys-radius-md);
|
|
1804
|
-
background: var(--sys-color-surface);
|
|
1792
|
+
background: var(--sys-color-surface-default);
|
|
1805
1793
|
/* No-layout outline — an inset hairline ring rather than a border so
|
|
1806
1794
|
the card's box geometry is stable across states. */
|
|
1807
|
-
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-
|
|
1795
|
+
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-border-default);
|
|
1808
1796
|
text-align: left;
|
|
1809
1797
|
font: inherit;
|
|
1810
1798
|
color: inherit;
|
|
@@ -1842,7 +1830,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1842
1830
|
font-size: var(--sys-typo-label-md-size);
|
|
1843
1831
|
line-height: var(--sys-typo-label-md-line);
|
|
1844
1832
|
font-weight: var(--sys-typo-label-md-weight);
|
|
1845
|
-
color: var(--sys-color-
|
|
1833
|
+
color: var(--sys-color-text-default);
|
|
1846
1834
|
white-space: nowrap;
|
|
1847
1835
|
overflow: hidden;
|
|
1848
1836
|
text-overflow: ellipsis;
|
|
@@ -1853,7 +1841,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1853
1841
|
font-size: var(--sys-typo-body-sm-size);
|
|
1854
1842
|
line-height: var(--sys-typo-body-sm-line);
|
|
1855
1843
|
font-weight: var(--sys-typo-body-sm-weight);
|
|
1856
|
-
color: var(--sys-color-
|
|
1844
|
+
color: var(--sys-color-text-subtle);
|
|
1857
1845
|
display: -webkit-box;
|
|
1858
1846
|
-webkit-line-clamp: 3;
|
|
1859
1847
|
-webkit-box-orient: vertical;
|
|
@@ -1863,7 +1851,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1863
1851
|
.chorus-post-carousel__card-mention {
|
|
1864
1852
|
font-size: var(--sys-typo-body-sm-size);
|
|
1865
1853
|
line-height: var(--sys-typo-body-sm-line);
|
|
1866
|
-
color: var(--sys-color-
|
|
1854
|
+
color: var(--sys-color-text-mention);
|
|
1867
1855
|
}
|
|
1868
1856
|
|
|
1869
1857
|
.chorus-post-carousel__card-footer {
|
|
@@ -1877,7 +1865,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1877
1865
|
font-size: var(--sys-typo-label-sm-size);
|
|
1878
1866
|
line-height: var(--sys-typo-label-sm-line);
|
|
1879
1867
|
font-weight: var(--sys-typo-label-sm-weight);
|
|
1880
|
-
color: var(--sys-color-
|
|
1868
|
+
color: var(--sys-color-text-subtle);
|
|
1881
1869
|
}
|
|
1882
1870
|
|
|
1883
1871
|
.chorus-post-carousel__card-views {
|
|
@@ -1886,7 +1874,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1886
1874
|
gap: var(--sys-layout-inline-sm);
|
|
1887
1875
|
font-size: var(--sys-typo-label-sm-size);
|
|
1888
1876
|
line-height: var(--sys-typo-label-sm-line);
|
|
1889
|
-
color: var(--sys-color-
|
|
1877
|
+
color: var(--sys-color-text-subtle);
|
|
1890
1878
|
}
|
|
1891
1879
|
|
|
1892
1880
|
.chorus-post-carousel__card-views svg {
|
|
@@ -1949,7 +1937,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1949
1937
|
display: flex;
|
|
1950
1938
|
flex-direction: column;
|
|
1951
1939
|
align-items: center;
|
|
1952
|
-
background: var(--sys-color-surface);
|
|
1940
|
+
background: var(--sys-color-surface-default);
|
|
1953
1941
|
border-radius: var(--sys-radius-md);
|
|
1954
1942
|
overflow: hidden;
|
|
1955
1943
|
padding-bottom: var(--sys-layout-container-md);
|
|
@@ -1973,7 +1961,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1973
1961
|
border-radius: inherit;
|
|
1974
1962
|
pointer-events: none;
|
|
1975
1963
|
z-index: 2;
|
|
1976
|
-
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-
|
|
1964
|
+
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-border-default);
|
|
1977
1965
|
}
|
|
1978
1966
|
|
|
1979
1967
|
.chorus-profile-carousel__card--clickable {
|
|
@@ -1988,7 +1976,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
1988
1976
|
paints opaquely over the background. */
|
|
1989
1977
|
width: 100%;
|
|
1990
1978
|
height: 88px;
|
|
1991
|
-
background-color: var(--sys-color-
|
|
1979
|
+
background-color: var(--sys-color-surface-sunken);
|
|
1992
1980
|
background-image: var(--chorus-placeholder-image);
|
|
1993
1981
|
background-size: cover;
|
|
1994
1982
|
background-position: center;
|
|
@@ -2012,7 +2000,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2012
2000
|
/* The Thumbnail's surface halo (a 2px ring) sits on the cover band's
|
|
2013
2001
|
edge so the circular avatar reads as a separate plane from the
|
|
2014
2002
|
cover. */
|
|
2015
|
-
box-shadow: 0 0 0 2px var(--sys-color-surface);
|
|
2003
|
+
box-shadow: 0 0 0 2px var(--sys-color-surface-default);
|
|
2016
2004
|
border-radius: var(--sys-radius-full);
|
|
2017
2005
|
}
|
|
2018
2006
|
|
|
@@ -2031,7 +2019,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2031
2019
|
font-size: var(--sys-typo-label-md-size);
|
|
2032
2020
|
line-height: var(--sys-typo-label-md-line);
|
|
2033
2021
|
font-weight: var(--sys-typo-label-md-weight);
|
|
2034
|
-
color: var(--sys-color-
|
|
2022
|
+
color: var(--sys-color-text-default);
|
|
2035
2023
|
max-width: 100%;
|
|
2036
2024
|
white-space: nowrap;
|
|
2037
2025
|
overflow: hidden;
|
|
@@ -2041,7 +2029,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2041
2029
|
.chorus-profile-carousel__followers {
|
|
2042
2030
|
font-size: var(--sys-typo-label-sm-size);
|
|
2043
2031
|
line-height: var(--sys-typo-label-sm-line);
|
|
2044
|
-
color: var(--sys-color-
|
|
2032
|
+
color: var(--sys-color-text-subtle);
|
|
2045
2033
|
}
|
|
2046
2034
|
|
|
2047
2035
|
/* Slot below the identity stack. Either a row of icon-value metrics or a
|
|
@@ -2083,7 +2071,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2083
2071
|
margin: 0;
|
|
2084
2072
|
font-size: var(--sys-typo-label-sm-size);
|
|
2085
2073
|
line-height: var(--sys-typo-label-sm-line);
|
|
2086
|
-
color: var(--sys-color-
|
|
2074
|
+
color: var(--sys-color-text-subtle);
|
|
2087
2075
|
text-align: center;
|
|
2088
2076
|
display: -webkit-box;
|
|
2089
2077
|
-webkit-line-clamp: 2;
|
|
@@ -2098,7 +2086,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2098
2086
|
gap: var(--sys-layout-inline-sm);
|
|
2099
2087
|
font-size: var(--sys-typo-label-sm-size);
|
|
2100
2088
|
line-height: var(--sys-typo-label-sm-line);
|
|
2101
|
-
color: var(--sys-color-
|
|
2089
|
+
color: var(--sys-color-text-default);
|
|
2102
2090
|
}
|
|
2103
2091
|
|
|
2104
2092
|
.chorus-profile-carousel__metric-icon {
|
|
@@ -2145,7 +2133,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2145
2133
|
.chorus-profile-header {
|
|
2146
2134
|
display: flex;
|
|
2147
2135
|
flex-direction: column;
|
|
2148
|
-
background: var(--sys-color-surface);
|
|
2136
|
+
background: var(--sys-color-surface-default);
|
|
2149
2137
|
width: 100%;
|
|
2150
2138
|
}
|
|
2151
2139
|
|
|
@@ -2164,7 +2152,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2164
2152
|
widens / narrows, so the cover keeps the same visual mass relative
|
|
2165
2153
|
to the column instead of locking to a hard pixel height. */
|
|
2166
2154
|
aspect-ratio: 375 / 120;
|
|
2167
|
-
background-color: var(--sys-color-
|
|
2155
|
+
background-color: var(--sys-color-surface-sunken);
|
|
2168
2156
|
background-image: var(--chorus-placeholder-image);
|
|
2169
2157
|
background-size: cover;
|
|
2170
2158
|
background-position: center;
|
|
@@ -2295,7 +2283,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2295
2283
|
line-height: var(--sys-typo-heading-lg-line);
|
|
2296
2284
|
font-weight: var(--sys-typo-heading-lg-weight);
|
|
2297
2285
|
letter-spacing: var(--sys-typo-heading-lg-tracking);
|
|
2298
|
-
color: var(--sys-color-
|
|
2286
|
+
color: var(--sys-color-text-default);
|
|
2299
2287
|
white-space: nowrap;
|
|
2300
2288
|
overflow: hidden;
|
|
2301
2289
|
text-overflow: ellipsis;
|
|
@@ -2309,17 +2297,17 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2309
2297
|
gap: var(--sys-layout-inline-sm);
|
|
2310
2298
|
font-size: var(--sys-typo-body-sm-size);
|
|
2311
2299
|
line-height: var(--sys-typo-body-sm-line);
|
|
2312
|
-
color: var(--sys-color-
|
|
2300
|
+
color: var(--sys-color-text-subtle);
|
|
2313
2301
|
min-width: 0;
|
|
2314
2302
|
}
|
|
2315
2303
|
|
|
2316
2304
|
.chorus-profile-header__meta-icon {
|
|
2317
2305
|
flex: 0 0 auto;
|
|
2318
|
-
color: var(--sys-color-
|
|
2306
|
+
color: var(--sys-color-text-subtle);
|
|
2319
2307
|
}
|
|
2320
2308
|
|
|
2321
2309
|
.chorus-profile-header__meta-sep {
|
|
2322
|
-
color: var(--sys-color-
|
|
2310
|
+
color: var(--sys-color-text-subtle);
|
|
2323
2311
|
}
|
|
2324
2312
|
|
|
2325
2313
|
.chorus-profile-header__meta-visibility,
|
|
@@ -2357,7 +2345,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2357
2345
|
Canonical hosts: ProfileHeader's avatar (the 56-rung that half-
|
|
2358
2346
|
overlaps the cover) and any avatar Thumbnail that lives over imagery. */
|
|
2359
2347
|
.chorus-thumbnail--outlined {
|
|
2360
|
-
box-shadow: 0 0 0 var(--sys-borderWidth-thin) var(--sys-color-surface);
|
|
2348
|
+
box-shadow: 0 0 0 var(--sys-borderWidth-thin) var(--sys-color-surface-default);
|
|
2361
2349
|
}
|
|
2362
2350
|
|
|
2363
2351
|
/* Same image-area fallback contract as `.chorus-feed-ad__media` — the
|
|
@@ -2369,7 +2357,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2369
2357
|
width: 100%;
|
|
2370
2358
|
height: 100%;
|
|
2371
2359
|
border-radius: var(--sys-radius-full);
|
|
2372
|
-
background-color: var(--sys-color-
|
|
2360
|
+
background-color: var(--sys-color-surface-sunken);
|
|
2373
2361
|
background-image: var(--chorus-placeholder-image);
|
|
2374
2362
|
background-size: cover;
|
|
2375
2363
|
background-position: center;
|
|
@@ -2402,11 +2390,11 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2402
2390
|
width: var(--sys-icon-md);
|
|
2403
2391
|
height: var(--sys-icon-md);
|
|
2404
2392
|
border-radius: var(--sys-radius-full);
|
|
2405
|
-
background: var(--sys-color-surface);
|
|
2393
|
+
background: var(--sys-color-surface-default);
|
|
2406
2394
|
/* Hairline halo via box-shadow so the badge does not enlarge the
|
|
2407
2395
|
bounding box — the halo paints over the host image's edge without
|
|
2408
2396
|
shifting the badge's `icon.sm` footprint. */
|
|
2409
|
-
box-shadow: 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-surface);
|
|
2397
|
+
box-shadow: 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-surface-default);
|
|
2410
2398
|
overflow: hidden;
|
|
2411
2399
|
display: inline-flex;
|
|
2412
2400
|
align-items: center;
|
|
@@ -2422,12 +2410,12 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2422
2410
|
}
|
|
2423
2411
|
|
|
2424
2412
|
.chorus-thumbnail__badge:empty {
|
|
2425
|
-
background: var(--sys-color-
|
|
2413
|
+
background: var(--sys-color-surface-sunken);
|
|
2426
2414
|
}
|
|
2427
2415
|
|
|
2428
2416
|
/* List — vertical row stack. The row is the interactive surface;
|
|
2429
2417
|
leading and trailing slots are decorative. Inter-row divider is a
|
|
2430
|
-
hairline `
|
|
2418
|
+
hairline `border.default`, not a layout gap — the contract is
|
|
2431
2419
|
"flush rows separated by a rule", not "rows with breathing room". */
|
|
2432
2420
|
.chorus-list {
|
|
2433
2421
|
display: flex;
|
|
@@ -2456,7 +2444,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2456
2444
|
min-height: var(--ref-space-600);
|
|
2457
2445
|
box-sizing: border-box;
|
|
2458
2446
|
cursor: pointer;
|
|
2459
|
-
color: var(--sys-color-
|
|
2447
|
+
color: var(--sys-color-text-default);
|
|
2460
2448
|
position: relative;
|
|
2461
2449
|
isolation: isolate;
|
|
2462
2450
|
}
|
|
@@ -2475,7 +2463,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2475
2463
|
right: var(--sys-layout-container-md);
|
|
2476
2464
|
bottom: 0;
|
|
2477
2465
|
height: var(--sys-borderWidth-hairline);
|
|
2478
|
-
background: var(--sys-color-
|
|
2466
|
+
background: var(--sys-color-border-default);
|
|
2479
2467
|
pointer-events: none;
|
|
2480
2468
|
}
|
|
2481
2469
|
|
|
@@ -2489,11 +2477,11 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2489
2477
|
nav chevron carries no `data-nested-action`, so hovering it still lights
|
|
2490
2478
|
the row (it IS the row's drill-in affordance). */
|
|
2491
2479
|
.chorus-list__row:hover:not(:has([data-nested-action]:hover)) {
|
|
2492
|
-
background: color-mix(in srgb, var(--sys-color-
|
|
2480
|
+
background: color-mix(in srgb, var(--sys-color-text-default) calc(var(--sys-state-hover) * 100%), transparent);
|
|
2493
2481
|
}
|
|
2494
2482
|
|
|
2495
2483
|
.chorus-list__row:active:not(:has([data-nested-action]:active)) {
|
|
2496
|
-
background: color-mix(in srgb, var(--sys-color-
|
|
2484
|
+
background: color-mix(in srgb, var(--sys-color-text-default) calc(var(--sys-state-pressed) * 100%), transparent);
|
|
2497
2485
|
}
|
|
2498
2486
|
|
|
2499
2487
|
/* Focus indicator — inward composition per DESIGN.md → Focus ring
|
|
@@ -2514,9 +2502,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2514
2502
|
|
|
2515
2503
|
.chorus-list__row:focus-visible::before,
|
|
2516
2504
|
.chorus-list__row[data-force-state="focused"]::before {
|
|
2517
|
-
box-shadow:
|
|
2518
|
-
inset 0 0 0 var(--sys-borderWidth-thin) var(--sys-color-focus),
|
|
2519
|
-
inset 0 0 0 calc(var(--sys-borderWidth-thin) + var(--sys-borderWidth-hairline)) var(--sys-color-focusInset);
|
|
2505
|
+
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-border-focused);
|
|
2520
2506
|
}
|
|
2521
2507
|
|
|
2522
2508
|
.chorus-list__row:focus-visible {
|
|
@@ -2527,13 +2513,21 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2527
2513
|
cursor: not-allowed;
|
|
2528
2514
|
}
|
|
2529
2515
|
|
|
2530
|
-
/* Disabled
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2516
|
+
/* Disabled re-tones the row *content* to the neutral disabled tokens —
|
|
2517
|
+
text → `text.disabled`, icon glyph → `icon.disabled` — instead of an
|
|
2518
|
+
opacity dim, so the inter-row divider (`::after`) and focus overlay
|
|
2519
|
+
(`::before`) keep full strength. Scoping the colors to the content
|
|
2520
|
+
leaves the hairline rule crisp, the same reason the old opacity was
|
|
2521
|
+
applied to the row's children rather than the whole box. */
|
|
2522
|
+
.chorus-list__row.is-disabled .chorus-list__label,
|
|
2523
|
+
.chorus-list__row.is-disabled .chorus-list__supporting,
|
|
2524
|
+
.chorus-list__row.is-disabled .chorus-list__trailing {
|
|
2525
|
+
color: var(--sys-color-text-disabled);
|
|
2526
|
+
}
|
|
2527
|
+
|
|
2528
|
+
.chorus-list__row.is-disabled .chorus-list__leading--icon,
|
|
2529
|
+
.chorus-list__row.is-disabled .chorus-list__radio {
|
|
2530
|
+
color: var(--sys-color-icon-disabled);
|
|
2537
2531
|
}
|
|
2538
2532
|
|
|
2539
2533
|
.chorus-list__leading {
|
|
@@ -2577,7 +2571,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2577
2571
|
.chorus-list__label {
|
|
2578
2572
|
font-size: var(--sys-typo-body-md-size);
|
|
2579
2573
|
line-height: var(--sys-typo-body-md-line);
|
|
2580
|
-
color: var(--sys-color-
|
|
2574
|
+
color: var(--sys-color-text-default);
|
|
2581
2575
|
overflow: hidden;
|
|
2582
2576
|
text-overflow: ellipsis;
|
|
2583
2577
|
white-space: nowrap;
|
|
@@ -2599,7 +2593,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2599
2593
|
.chorus-list__supporting {
|
|
2600
2594
|
font-size: var(--sys-typo-body-sm-size);
|
|
2601
2595
|
line-height: var(--sys-typo-body-sm-line);
|
|
2602
|
-
color: var(--sys-color-
|
|
2596
|
+
color: var(--sys-color-text-subtle);
|
|
2603
2597
|
overflow: hidden;
|
|
2604
2598
|
text-overflow: ellipsis;
|
|
2605
2599
|
white-space: nowrap;
|
|
@@ -2609,7 +2603,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2609
2603
|
display: inline-flex;
|
|
2610
2604
|
align-items: center;
|
|
2611
2605
|
justify-content: center;
|
|
2612
|
-
color: var(--sys-color-
|
|
2606
|
+
color: var(--sys-color-text-subtle);
|
|
2613
2607
|
flex: 0 0 auto;
|
|
2614
2608
|
/* Text group ↔ trailing action: fixed `inline.md` (8) in every variant. */
|
|
2615
2609
|
margin-left: var(--sys-layout-inline-md);
|
|
@@ -2674,7 +2668,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2674
2668
|
carries the meaning; the slot enforces the 24 rung regardless of the glyph's
|
|
2675
2669
|
own size attribute. */
|
|
2676
2670
|
.chorus-list__leading--icon {
|
|
2677
|
-
color: var(--sys-color-
|
|
2671
|
+
color: var(--sys-color-text-subtle);
|
|
2678
2672
|
}
|
|
2679
2673
|
|
|
2680
2674
|
.chorus-list__leading--icon svg {
|
|
@@ -2744,7 +2738,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2744
2738
|
min-width: 0;
|
|
2745
2739
|
}
|
|
2746
2740
|
|
|
2747
|
-
/* Inline verified mark — paints in `sys.color.primary` (resolves to
|
|
2741
|
+
/* Inline verified mark — paints in `sys.color.background.primary` (resolves to
|
|
2748
2742
|
`ref.palette.blue.500`). Sits to the LEFT of the label so the trust
|
|
2749
2743
|
signal reads first. Centred against the label (the primary row is
|
|
2750
2744
|
baseline-aligned for the label + count pairing). */
|
|
@@ -2753,7 +2747,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2753
2747
|
align-self: center;
|
|
2754
2748
|
width: var(--sys-icon-md);
|
|
2755
2749
|
height: var(--sys-icon-md);
|
|
2756
|
-
color: var(--sys-color-
|
|
2750
|
+
color: var(--sys-color-icon-accent-blue-default);
|
|
2757
2751
|
flex: 0 0 auto;
|
|
2758
2752
|
}
|
|
2759
2753
|
|
|
@@ -2766,7 +2760,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2766
2760
|
font-size: var(--sys-typo-label-md-size);
|
|
2767
2761
|
line-height: var(--sys-typo-label-md-line);
|
|
2768
2762
|
font-weight: var(--sys-typo-label-md-weight);
|
|
2769
|
-
color: var(--sys-color-
|
|
2763
|
+
color: var(--sys-color-text-default);
|
|
2770
2764
|
overflow: hidden;
|
|
2771
2765
|
text-overflow: ellipsis;
|
|
2772
2766
|
white-space: nowrap;
|
|
@@ -2783,7 +2777,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2783
2777
|
.chorus-entry-row__secondary {
|
|
2784
2778
|
font-size: var(--sys-typo-label-sm-size);
|
|
2785
2779
|
line-height: var(--sys-typo-label-sm-line);
|
|
2786
|
-
color: var(--sys-color-
|
|
2780
|
+
color: var(--sys-color-text-default);
|
|
2787
2781
|
overflow: hidden;
|
|
2788
2782
|
text-overflow: ellipsis;
|
|
2789
2783
|
white-space: nowrap;
|
|
@@ -2792,7 +2786,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2792
2786
|
.chorus-entry-row__description {
|
|
2793
2787
|
font-size: var(--sys-typo-label-sm-size);
|
|
2794
2788
|
line-height: var(--sys-typo-label-sm-line);
|
|
2795
|
-
color: var(--sys-color-
|
|
2789
|
+
color: var(--sys-color-text-subtle);
|
|
2796
2790
|
/* Identity-group ↔ description separator: 2px (ref.space.25). The
|
|
2797
2791
|
description reads as a tight supporting layer below the identity
|
|
2798
2792
|
block rather than a co-equal line. */
|
|
@@ -2809,7 +2803,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2809
2803
|
display: inline-flex;
|
|
2810
2804
|
align-items: center;
|
|
2811
2805
|
justify-content: center;
|
|
2812
|
-
color: var(--sys-color-
|
|
2806
|
+
color: var(--sys-color-text-subtle);
|
|
2813
2807
|
flex: 0 0 auto;
|
|
2814
2808
|
margin-left: var(--sys-layout-inline-md);
|
|
2815
2809
|
}
|
|
@@ -2850,7 +2844,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2850
2844
|
modifier when the card needs its own opaque tier (sitting on a
|
|
2851
2845
|
transparent host or between bare-surface sections). */
|
|
2852
2846
|
background: transparent;
|
|
2853
|
-
color: var(--sys-color-
|
|
2847
|
+
color: var(--sys-color-text-default);
|
|
2854
2848
|
border: 0;
|
|
2855
2849
|
border-radius: var(--sys-radius-md);
|
|
2856
2850
|
text-align: left;
|
|
@@ -2858,7 +2852,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2858
2852
|
cursor: pointer;
|
|
2859
2853
|
position: relative;
|
|
2860
2854
|
isolation: isolate;
|
|
2861
|
-
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-
|
|
2855
|
+
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-border-default);
|
|
2862
2856
|
transition: background 120ms ease;
|
|
2863
2857
|
}
|
|
2864
2858
|
|
|
@@ -2879,12 +2873,12 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2879
2873
|
/* Default hover/pressed — overlay mixes on a transparent base, so the
|
|
2880
2874
|
host surface tone keeps reading through underneath the state paint. */
|
|
2881
2875
|
.chorus-nav-card:hover {
|
|
2882
|
-
background: color-mix(in srgb, var(--sys-color-
|
|
2876
|
+
background: color-mix(in srgb, var(--sys-color-text-default) calc(var(--sys-state-hover) * 100%), transparent);
|
|
2883
2877
|
}
|
|
2884
2878
|
|
|
2885
2879
|
.chorus-nav-card:active,
|
|
2886
2880
|
.chorus-nav-card[data-force-state="pressed"] {
|
|
2887
|
-
background: color-mix(in srgb, var(--sys-color-
|
|
2881
|
+
background: color-mix(in srgb, var(--sys-color-text-default) calc(var(--sys-state-pressed) * 100%), transparent);
|
|
2888
2882
|
}
|
|
2889
2883
|
|
|
2890
2884
|
/* Surface appearance — paints the card with its own `surface` fill.
|
|
@@ -2894,16 +2888,16 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2894
2888
|
hairline outline + chevron + hover overlay all stay; only the
|
|
2895
2889
|
container fill changes. */
|
|
2896
2890
|
.chorus-nav-card--surface {
|
|
2897
|
-
background: var(--sys-color-surface);
|
|
2891
|
+
background: var(--sys-color-surface-default);
|
|
2898
2892
|
}
|
|
2899
2893
|
|
|
2900
2894
|
.chorus-nav-card--surface:hover {
|
|
2901
|
-
background: color-mix(in srgb, var(--sys-color-
|
|
2895
|
+
background: color-mix(in srgb, var(--sys-color-text-default) calc(var(--sys-state-hover) * 100%), var(--sys-color-surface-default));
|
|
2902
2896
|
}
|
|
2903
2897
|
|
|
2904
2898
|
.chorus-nav-card--surface:active,
|
|
2905
2899
|
.chorus-nav-card--surface[data-force-state="pressed"] {
|
|
2906
|
-
background: color-mix(in srgb, var(--sys-color-
|
|
2900
|
+
background: color-mix(in srgb, var(--sys-color-text-default) calc(var(--sys-state-pressed) * 100%), var(--sys-color-surface-default));
|
|
2907
2901
|
}
|
|
2908
2902
|
|
|
2909
2903
|
/* Outward focus ring — paints OUTSIDE the card's outline so it never
|
|
@@ -2926,14 +2920,15 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2926
2920
|
|
|
2927
2921
|
.chorus-nav-card:focus-visible::after,
|
|
2928
2922
|
.chorus-nav-card[data-force-state="focused"]::after {
|
|
2929
|
-
box-shadow:
|
|
2930
|
-
0 0 0 var(--sys-borderWidth-thin) var(--sys-color-focus),
|
|
2931
|
-
0 0 0 calc(var(--sys-borderWidth-thin) + var(--sys-borderWidth-hairline)) var(--sys-color-focusInset);
|
|
2923
|
+
box-shadow: 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-border-focused);
|
|
2932
2924
|
}
|
|
2933
2925
|
|
|
2934
2926
|
.chorus-nav-card[data-disabled="true"],
|
|
2935
2927
|
.chorus-nav-card:disabled {
|
|
2936
|
-
opacity:
|
|
2928
|
+
/* Explicit disabled (no opacity): content re-tones to text.disabled via
|
|
2929
|
+
the card's inherited color (label / supporting / leading glyph all
|
|
2930
|
+
ride it). */
|
|
2931
|
+
color: var(--sys-color-text-disabled);
|
|
2937
2932
|
cursor: not-allowed;
|
|
2938
2933
|
}
|
|
2939
2934
|
|
|
@@ -2959,7 +2954,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2959
2954
|
font-size: var(--sys-typo-body-sm-size);
|
|
2960
2955
|
line-height: var(--sys-typo-body-sm-line);
|
|
2961
2956
|
font-weight: var(--sys-typo-body-sm-weight);
|
|
2962
|
-
color: var(--sys-color-
|
|
2957
|
+
color: var(--sys-color-text-default);
|
|
2963
2958
|
overflow: hidden;
|
|
2964
2959
|
text-overflow: ellipsis;
|
|
2965
2960
|
white-space: nowrap;
|
|
@@ -2968,7 +2963,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2968
2963
|
.chorus-nav-card__supporting {
|
|
2969
2964
|
font-size: var(--sys-typo-label-sm-size);
|
|
2970
2965
|
line-height: var(--sys-typo-label-sm-line);
|
|
2971
|
-
color: var(--sys-color-
|
|
2966
|
+
color: var(--sys-color-text-subtle);
|
|
2972
2967
|
overflow: hidden;
|
|
2973
2968
|
text-overflow: ellipsis;
|
|
2974
2969
|
white-space: nowrap;
|
|
@@ -2978,7 +2973,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
2978
2973
|
display: inline-flex;
|
|
2979
2974
|
align-items: center;
|
|
2980
2975
|
justify-content: center;
|
|
2981
|
-
color: var(--sys-color-
|
|
2976
|
+
color: var(--sys-color-text-subtle);
|
|
2982
2977
|
flex: 0 0 auto;
|
|
2983
2978
|
}
|
|
2984
2979
|
|
|
@@ -3001,7 +2996,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3001
2996
|
display: inline-flex;
|
|
3002
2997
|
align-items: center;
|
|
3003
2998
|
justify-content: center;
|
|
3004
|
-
color: var(--sys-color-
|
|
2999
|
+
color: var(--sys-color-icon-default);
|
|
3005
3000
|
transition: color 120ms ease;
|
|
3006
3001
|
}
|
|
3007
3002
|
|
|
@@ -3018,7 +3013,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3018
3013
|
anchored to the rail's right edge regardless of how far the user
|
|
3019
3014
|
scrolls the avatars. */
|
|
3020
3015
|
.chorus-avatar-rail {
|
|
3021
|
-
background: var(--sys-color-surface);
|
|
3016
|
+
background: var(--sys-color-surface-default);
|
|
3022
3017
|
width: 100%;
|
|
3023
3018
|
box-sizing: border-box;
|
|
3024
3019
|
padding: var(--sys-layout-container-sm) var(--sys-layout-container-md);
|
|
@@ -3093,7 +3088,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3093
3088
|
}
|
|
3094
3089
|
|
|
3095
3090
|
.chorus-avatar-rail__item:focus-visible {
|
|
3096
|
-
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-
|
|
3091
|
+
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-border-focused);
|
|
3097
3092
|
outline-offset: var(--sys-layout-inline-xs);
|
|
3098
3093
|
}
|
|
3099
3094
|
|
|
@@ -3111,7 +3106,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3111
3106
|
width: calc(48px + 2 * var(--sys-layout-inline-sm));
|
|
3112
3107
|
font-size: var(--sys-typo-label-sm-size);
|
|
3113
3108
|
line-height: var(--sys-typo-label-sm-line);
|
|
3114
|
-
color: var(--sys-color-
|
|
3109
|
+
color: var(--sys-color-text-default);
|
|
3115
3110
|
text-align: center;
|
|
3116
3111
|
overflow: hidden;
|
|
3117
3112
|
text-overflow: ellipsis;
|
|
@@ -3144,7 +3139,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3144
3139
|
label), toggle at one inline.xl (16) before the next page's leading avatar,
|
|
3145
3140
|
and that next avatar peeks 8 (inline.md) past the surface's right edge. */
|
|
3146
3141
|
.chorus-suggestion-list {
|
|
3147
|
-
background: var(--sys-color-surface);
|
|
3142
|
+
background: var(--sys-color-surface-default);
|
|
3148
3143
|
width: 100%;
|
|
3149
3144
|
box-sizing: border-box;
|
|
3150
3145
|
padding-block: var(--sys-layout-container-lg);
|
|
@@ -3282,7 +3277,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3282
3277
|
============================================================ */
|
|
3283
3278
|
.chorus-directory-list,
|
|
3284
3279
|
.chorus-nav-list {
|
|
3285
|
-
background: var(--sys-color-surface);
|
|
3280
|
+
background: var(--sys-color-surface-default);
|
|
3286
3281
|
width: 100%;
|
|
3287
3282
|
box-sizing: border-box;
|
|
3288
3283
|
/* Full-bleed column — the host pays NO inline padding. Its Header and
|
|
@@ -3374,9 +3369,9 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3374
3369
|
}
|
|
3375
3370
|
|
|
3376
3371
|
.chorus-banner--accent {
|
|
3377
|
-
background: var(--sys-color-
|
|
3378
|
-
color: var(--sys-color-
|
|
3379
|
-
--banner-outline-color: color-mix(in srgb, var(--sys-color-primary) 40%, transparent);
|
|
3372
|
+
background: var(--sys-color-background-selected);
|
|
3373
|
+
color: var(--sys-color-text-link);
|
|
3374
|
+
--banner-outline-color: color-mix(in srgb, var(--sys-color-border-primary) 40%, transparent);
|
|
3380
3375
|
}
|
|
3381
3376
|
|
|
3382
3377
|
/* Destructive — error-tinted banner. Reach for it when the aside is a
|
|
@@ -3385,30 +3380,26 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3385
3380
|
shadcn `<Alert variant="destructive">` shape for Lovable-generated
|
|
3386
3381
|
screens. */
|
|
3387
3382
|
.chorus-banner--destructive {
|
|
3388
|
-
background: var(--sys-color-
|
|
3389
|
-
color: var(--sys-color-
|
|
3390
|
-
--banner-outline-color: color-mix(in srgb, var(--sys-color-
|
|
3391
|
-
}
|
|
3392
|
-
|
|
3393
|
-
/* Default uses `
|
|
3394
|
-
|
|
3395
|
-
|
|
3396
|
-
|
|
3397
|
-
(light mode) or lighter (dark mode) instead of pinning to a fixed
|
|
3398
|
-
neutral step that can collide with the surface ladder. Same scrim
|
|
3399
|
-
used by Chip / Tag default, Progress track, StatusTag neutral, and
|
|
3400
|
-
Skeleton. */
|
|
3383
|
+
background: var(--sys-color-background-danger);
|
|
3384
|
+
color: var(--sys-color-text-danger);
|
|
3385
|
+
--banner-outline-color: color-mix(in srgb, var(--sys-color-border-danger) 40%, transparent);
|
|
3386
|
+
}
|
|
3387
|
+
|
|
3388
|
+
/* Default uses the solid `background.neutral` fill (the role that
|
|
3389
|
+
replaced the old ~8% scrim) — a fixed light-gray step in light, a
|
|
3390
|
+
mid-gray in dark. Same neutral fill as Chip / Tag default, Progress
|
|
3391
|
+
track, StatusTag neutral, and Skeleton, so they read as one family. */
|
|
3401
3392
|
.chorus-banner--default {
|
|
3402
|
-
background: var(--sys-color-
|
|
3403
|
-
color: var(--sys-color-
|
|
3404
|
-
--banner-outline-color: var(--sys-color-
|
|
3393
|
+
background: var(--sys-color-background-neutral);
|
|
3394
|
+
color: var(--sys-color-text-default);
|
|
3395
|
+
--banner-outline-color: var(--sys-color-border-default);
|
|
3405
3396
|
}
|
|
3406
3397
|
|
|
3407
3398
|
/* Optional outline — a hairline inset stroke toned to the appearance's
|
|
3408
3399
|
color family (each appearance block above sets
|
|
3409
3400
|
`--banner-outline-color`), kept deliberately faint so the edge reads
|
|
3410
3401
|
as a soft boundary of the same tint, not a frame: the subtle gray
|
|
3411
|
-
hairline (`sys.color.
|
|
3402
|
+
hairline (`sys.color.border.default`) on default's gray-tinted
|
|
3412
3403
|
scrim; `primary` / `error` at 40% over transparent (the Skeleton
|
|
3413
3404
|
fill recipe) on accent / destructive. Painted as an inset
|
|
3414
3405
|
box-shadow, never a `border`, so toggling it can't change the
|
|
@@ -3498,7 +3489,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3498
3489
|
}
|
|
3499
3490
|
|
|
3500
3491
|
.chorus-banner--default .chorus-banner__action {
|
|
3501
|
-
color: var(--sys-color-
|
|
3492
|
+
color: var(--sys-color-text-link);
|
|
3502
3493
|
}
|
|
3503
3494
|
|
|
3504
3495
|
/* neutral-body — keeps the `accent` fill but lays the Default
|
|
@@ -3509,11 +3500,11 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3509
3500
|
Only meaningful combined with `--accent` (default is already
|
|
3510
3501
|
`onSurface`; destructive must carry the warning tone through copy). */
|
|
3511
3502
|
.chorus-banner--accent.chorus-banner--neutral-body {
|
|
3512
|
-
color: var(--sys-color-
|
|
3503
|
+
color: var(--sys-color-text-default);
|
|
3513
3504
|
}
|
|
3514
3505
|
|
|
3515
3506
|
.chorus-banner--accent.chorus-banner--neutral-body .chorus-banner__action {
|
|
3516
|
-
color: var(--sys-color-
|
|
3507
|
+
color: var(--sys-color-text-link);
|
|
3517
3508
|
}
|
|
3518
3509
|
|
|
3519
3510
|
/* Trailing icon slot — a 16 × 16 glyph (`sys.icon.md`) at the trailing
|
|
@@ -3558,16 +3549,14 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3558
3549
|
/* ============================================================
|
|
3559
3550
|
Divider — section-break band between adjacent regions that
|
|
3560
3551
|
don't share an enclosing container. Single full-bleed block
|
|
3561
|
-
painted with `sys.color.
|
|
3562
|
-
|
|
3563
|
-
`sys.layout.stack.xs` (8) block thickness —
|
|
3564
|
-
the base-unit ladder.
|
|
3565
|
-
|
|
3566
|
-
|
|
3567
|
-
|
|
3568
|
-
|
|
3569
|
-
every browser `<hr>` default (margin, border, background-
|
|
3570
|
-
image) so only the scrimSubtle band paints.
|
|
3552
|
+
painted with `sys.color.border.default` (the hairline
|
|
3553
|
+
separator role — a faint gray in light, a subtle dark step in
|
|
3554
|
+
dark) at a fixed `sys.layout.stack.xs` (8) block thickness —
|
|
3555
|
+
the 1× rung of the base-unit ladder. Reads as a separator
|
|
3556
|
+
tier rather than a fill (unlike Banner / Chip / Tag default,
|
|
3557
|
+
which take the solid `background.neutral`). Resets every
|
|
3558
|
+
browser `<hr>` default (margin, border, background-image) so
|
|
3559
|
+
only the divider band paints.
|
|
3571
3560
|
============================================================ */
|
|
3572
3561
|
.chorus-divider {
|
|
3573
3562
|
display: block;
|
|
@@ -3577,7 +3566,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3577
3566
|
padding: 0;
|
|
3578
3567
|
border: none;
|
|
3579
3568
|
border-radius: 0;
|
|
3580
|
-
background: var(--sys-color-
|
|
3569
|
+
background: var(--sys-color-border-default);
|
|
3581
3570
|
background-image: none;
|
|
3582
3571
|
flex-shrink: 0;
|
|
3583
3572
|
}
|
|
@@ -3620,8 +3609,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3620
3609
|
box-sizing: border-box;
|
|
3621
3610
|
display: flex;
|
|
3622
3611
|
flex-direction: column;
|
|
3623
|
-
background: var(--sys-color-surface);
|
|
3624
|
-
color: var(--sys-color-
|
|
3612
|
+
background: var(--sys-color-surface-default);
|
|
3613
|
+
color: var(--sys-color-text-default);
|
|
3625
3614
|
box-shadow: var(--sys-elevation-sheet);
|
|
3626
3615
|
}
|
|
3627
3616
|
|
|
@@ -3673,7 +3662,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3673
3662
|
.chorus-side-sheet__footer {
|
|
3674
3663
|
flex: 0 0 auto;
|
|
3675
3664
|
padding: var(--sys-layout-container-md);
|
|
3676
|
-
border-top: var(--sys-borderWidth-hairline) solid var(--sys-color-
|
|
3665
|
+
border-top: var(--sys-borderWidth-hairline) solid var(--sys-color-border-default);
|
|
3677
3666
|
display: flex;
|
|
3678
3667
|
align-items: center;
|
|
3679
3668
|
justify-content: flex-start;
|
|
@@ -3719,8 +3708,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3719
3708
|
max-height: 90vh;
|
|
3720
3709
|
display: flex;
|
|
3721
3710
|
flex-direction: column;
|
|
3722
|
-
background: var(--sys-color-
|
|
3723
|
-
color: var(--sys-color-
|
|
3711
|
+
background: var(--sys-color-surface-default);
|
|
3712
|
+
color: var(--sys-color-text-default);
|
|
3724
3713
|
border-top-left-radius: var(--sys-radius-xl);
|
|
3725
3714
|
border-top-right-radius: var(--sys-radius-xl);
|
|
3726
3715
|
box-shadow: var(--sys-elevation-sheet);
|
|
@@ -3738,7 +3727,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3738
3727
|
height: var(--ref-space-50);
|
|
3739
3728
|
margin: var(--sys-layout-container-xs) auto;
|
|
3740
3729
|
border-radius: var(--sys-radius-full);
|
|
3741
|
-
background: color-mix(in srgb, var(--sys-color-
|
|
3730
|
+
background: color-mix(in srgb, var(--sys-color-text-subtle) 40%, transparent);
|
|
3742
3731
|
}
|
|
3743
3732
|
|
|
3744
3733
|
.chorus-bottom-sheet__content {
|
|
@@ -3756,7 +3745,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3756
3745
|
line-height: var(--sys-typo-heading-lg-line);
|
|
3757
3746
|
font-weight: var(--sys-typo-heading-lg-weight);
|
|
3758
3747
|
letter-spacing: var(--sys-typo-heading-lg-tracking);
|
|
3759
|
-
color: var(--sys-color-
|
|
3748
|
+
color: var(--sys-color-text-default);
|
|
3760
3749
|
}
|
|
3761
3750
|
|
|
3762
3751
|
/* Nested-step title row — when the sheet drives a drill-in, an Icon
|
|
@@ -3775,7 +3764,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3775
3764
|
font-size: var(--sys-typo-body-md-size);
|
|
3776
3765
|
line-height: var(--sys-typo-body-md-line);
|
|
3777
3766
|
font-weight: var(--sys-typo-body-md-weight);
|
|
3778
|
-
color: var(--sys-color-
|
|
3767
|
+
color: var(--sys-color-text-subtle);
|
|
3779
3768
|
}
|
|
3780
3769
|
|
|
3781
3770
|
.chorus-bottom-sheet__actions {
|
|
@@ -3784,7 +3773,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3784
3773
|
flex-direction: column;
|
|
3785
3774
|
gap: var(--sys-layout-stack-xs);
|
|
3786
3775
|
padding: var(--sys-layout-container-md);
|
|
3787
|
-
background: var(--sys-color-
|
|
3776
|
+
background: var(--sys-color-surface-default);
|
|
3788
3777
|
transition: box-shadow 120ms ease-out;
|
|
3789
3778
|
}
|
|
3790
3779
|
|
|
@@ -3829,8 +3818,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3829
3818
|
align-items: stretch;
|
|
3830
3819
|
text-align: start;
|
|
3831
3820
|
padding: var(--sys-layout-container-lg);
|
|
3832
|
-
background: var(--sys-color-
|
|
3833
|
-
color: var(--sys-color-
|
|
3821
|
+
background: var(--sys-color-surface-default);
|
|
3822
|
+
color: var(--sys-color-text-default);
|
|
3834
3823
|
border-radius: var(--sys-radius-xl);
|
|
3835
3824
|
box-shadow: var(--sys-elevation-overlay);
|
|
3836
3825
|
}
|
|
@@ -3846,7 +3835,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3846
3835
|
line-height: var(--sys-typo-heading-sm-line);
|
|
3847
3836
|
font-weight: var(--sys-typo-heading-sm-weight);
|
|
3848
3837
|
letter-spacing: var(--sys-typo-heading-sm-tracking);
|
|
3849
|
-
color: var(--sys-color-
|
|
3838
|
+
color: var(--sys-color-text-default);
|
|
3850
3839
|
}
|
|
3851
3840
|
|
|
3852
3841
|
.chorus-dialog__image {
|
|
@@ -3862,7 +3851,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3862
3851
|
font-size: var(--sys-typo-body-sm-size);
|
|
3863
3852
|
line-height: var(--sys-typo-body-sm-line);
|
|
3864
3853
|
font-weight: var(--sys-typo-body-sm-weight);
|
|
3865
|
-
color: var(--sys-color-
|
|
3854
|
+
color: var(--sys-color-text-subtle);
|
|
3866
3855
|
}
|
|
3867
3856
|
|
|
3868
3857
|
.chorus-dialog__actions {
|
|
@@ -3970,7 +3959,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3970
3959
|
|
|
3971
3960
|
/* Accessibility focus ring — a dedicated overlay layer (`::after`),
|
|
3972
3961
|
`position: absolute` so it never affects layout: a focused field never
|
|
3973
|
-
widens and never nudges a sibling. Canonical
|
|
3962
|
+
widens and never nudges a sibling. Canonical single-ring composition,
|
|
3974
3963
|
painted outward from the field's edge; sits at `z-index: 2`, above the
|
|
3975
3964
|
state-overlay `::before` (z-index 0) and the input / clear slots
|
|
3976
3965
|
(z-index 1). `inset: 0` because the field has no `border` — the padding
|
|
@@ -3988,14 +3977,15 @@ a.chorus-metadata__name:focus-visible {
|
|
|
3988
3977
|
}
|
|
3989
3978
|
|
|
3990
3979
|
.chorus-field[data-force-state="focused"]::after {
|
|
3991
|
-
box-shadow:
|
|
3992
|
-
0 0 0 var(--field-focus-inset-width) var(--field-focus-inset-color),
|
|
3993
|
-
0 0 0 calc(var(--field-focus-outer-width) + var(--field-focus-inset-width)) var(--field-focus-outer-color);
|
|
3980
|
+
box-shadow: 0 0 0 var(--sys-borderWidth-hairline) var(--field-focus-outer-color);
|
|
3994
3981
|
}
|
|
3995
3982
|
|
|
3996
3983
|
.chorus-field.is-disabled {
|
|
3984
|
+
/* Explicit disabled (no opacity): neutral disabled fill + bold border
|
|
3985
|
+
+ disabled text. The component swaps `--field-text` / `--field-border`
|
|
3986
|
+
to the disabled tokens when disabled (see FormField.jsx), so the held
|
|
3987
|
+
rest stroke and typed text re-tone without a dim. */
|
|
3997
3988
|
background: var(--field-bg-disabled);
|
|
3998
|
-
opacity: var(--field-disabled-opacity);
|
|
3999
3989
|
cursor: not-allowed;
|
|
4000
3990
|
/* Hold the rest stroke even if the disabled field is hovered. */
|
|
4001
3991
|
box-shadow: inset 0 0 0 var(--field-border-width) var(--field-border);
|
|
@@ -4121,7 +4111,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4121
4111
|
padding: 0;
|
|
4122
4112
|
border: none;
|
|
4123
4113
|
background: transparent;
|
|
4124
|
-
color: var(--sys-color-
|
|
4114
|
+
color: var(--sys-color-text-subtle);
|
|
4125
4115
|
border-radius: var(--sys-radius-full);
|
|
4126
4116
|
cursor: pointer;
|
|
4127
4117
|
}
|
|
@@ -4143,7 +4133,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4143
4133
|
}
|
|
4144
4134
|
|
|
4145
4135
|
/* Focus ring — dedicated overlay layer (`::after`), `position: absolute`
|
|
4146
|
-
so it never affects the field's layout. Canonical
|
|
4136
|
+
so it never affects the field's layout. Canonical single-ring,
|
|
4147
4137
|
outward; `z-index: 2`, above the 16px glyph. */
|
|
4148
4138
|
.chorus-field__clear::after {
|
|
4149
4139
|
content: '';
|
|
@@ -4157,9 +4147,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4157
4147
|
}
|
|
4158
4148
|
|
|
4159
4149
|
.chorus-field__clear:focus-visible::after {
|
|
4160
|
-
box-shadow:
|
|
4161
|
-
0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-focusInset),
|
|
4162
|
-
0 0 0 calc(var(--sys-borderWidth-thin) + var(--sys-borderWidth-hairline)) var(--sys-color-focus);
|
|
4150
|
+
box-shadow: 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-border-focused);
|
|
4163
4151
|
}
|
|
4164
4152
|
|
|
4165
4153
|
/* ============================================================
|
|
@@ -4190,7 +4178,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4190
4178
|
font-weight: var(--sys-typo-label-md-weight);
|
|
4191
4179
|
line-height: var(--sys-typo-label-md-line);
|
|
4192
4180
|
letter-spacing: var(--sys-typo-label-md-tracking);
|
|
4193
|
-
color: var(--sys-color-
|
|
4181
|
+
color: var(--sys-color-text-default);
|
|
4194
4182
|
}
|
|
4195
4183
|
|
|
4196
4184
|
.chorus-field-group__helper {
|
|
@@ -4198,7 +4186,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4198
4186
|
font-weight: var(--sys-typo-body-sm-weight);
|
|
4199
4187
|
line-height: var(--sys-typo-body-sm-line);
|
|
4200
4188
|
letter-spacing: var(--sys-typo-body-sm-tracking);
|
|
4201
|
-
color: var(--sys-color-
|
|
4189
|
+
color: var(--sys-color-text-subtle);
|
|
4202
4190
|
}
|
|
4203
4191
|
|
|
4204
4192
|
.chorus-field-group__count {
|
|
@@ -4207,14 +4195,14 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4207
4195
|
font-weight: var(--sys-typo-body-sm-weight);
|
|
4208
4196
|
line-height: var(--sys-typo-body-sm-line);
|
|
4209
4197
|
letter-spacing: var(--sys-typo-body-sm-tracking);
|
|
4210
|
-
color: var(--sys-color-
|
|
4198
|
+
color: var(--sys-color-text-subtle);
|
|
4211
4199
|
}
|
|
4212
4200
|
|
|
4213
4201
|
/* Current-count number — same body.sm size, label.md weight so the
|
|
4214
4202
|
live count reads bolder than the `/max` suffix. */
|
|
4215
4203
|
.chorus-field-group__count-current {
|
|
4216
4204
|
font-weight: var(--sys-typo-label-md-weight);
|
|
4217
|
-
color: var(--sys-color-
|
|
4205
|
+
color: var(--sys-color-text-default);
|
|
4218
4206
|
}
|
|
4219
4207
|
|
|
4220
4208
|
/* Error appearance — re-tone the helper / count so the bottom rung
|
|
@@ -4222,16 +4210,15 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4222
4210
|
.chorus-field-group--error .chorus-field-group__helper,
|
|
4223
4211
|
.chorus-field-group--error .chorus-field-group__count,
|
|
4224
4212
|
.chorus-field-group--error .chorus-field-group__count-current {
|
|
4225
|
-
color: var(--sys-color-
|
|
4213
|
+
color: var(--sys-color-text-danger);
|
|
4226
4214
|
}
|
|
4227
4215
|
|
|
4228
|
-
/* Disabled —
|
|
4229
|
-
|
|
4230
|
-
`--field-disabled-opacity` independently (no compounding). */
|
|
4216
|
+
/* Disabled — re-tone the label / helper / count to `text.disabled` to
|
|
4217
|
+
match the field box's explicit disabled treatment (no opacity). */
|
|
4231
4218
|
.chorus-field-group.is-disabled .chorus-field-group__label,
|
|
4232
4219
|
.chorus-field-group.is-disabled .chorus-field-group__helper,
|
|
4233
4220
|
.chorus-field-group.is-disabled .chorus-field-group__count {
|
|
4234
|
-
|
|
4221
|
+
color: var(--sys-color-text-disabled);
|
|
4235
4222
|
}
|
|
4236
4223
|
|
|
4237
4224
|
/* Trailing slot — symmetric to `.chorus-field__leading`. Hosts the
|
|
@@ -4246,7 +4233,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4246
4233
|
justify-content: center;
|
|
4247
4234
|
width: var(--field-icon-size);
|
|
4248
4235
|
height: var(--field-icon-size);
|
|
4249
|
-
color: var(--sys-color-
|
|
4236
|
+
color: var(--sys-color-text-subtle);
|
|
4250
4237
|
}
|
|
4251
4238
|
|
|
4252
4239
|
.chorus-field--error .chorus-field__trailing {
|
|
@@ -4389,8 +4376,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4389
4376
|
calc(env(safe-area-inset-top, 0px) + var(--sys-layout-container-xs))
|
|
4390
4377
|
var(--sys-layout-container-md)
|
|
4391
4378
|
var(--sys-layout-container-xs);
|
|
4392
|
-
background: var(--sys-color-surface);
|
|
4393
|
-
color: var(--sys-color-
|
|
4379
|
+
background: var(--sys-color-surface-default);
|
|
4380
|
+
color: var(--sys-color-text-default);
|
|
4394
4381
|
}
|
|
4395
4382
|
|
|
4396
4383
|
/* Main row layout (leading slot + flex-grown left title + trailing action
|
|
@@ -4411,7 +4398,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4411
4398
|
line-height: var(--sys-typo-heading-lg-line);
|
|
4412
4399
|
font-weight: var(--sys-typo-heading-lg-weight);
|
|
4413
4400
|
letter-spacing: var(--sys-typo-heading-lg-tracking);
|
|
4414
|
-
color: var(--sys-color-
|
|
4401
|
+
color: var(--sys-color-text-default);
|
|
4415
4402
|
overflow: hidden;
|
|
4416
4403
|
text-overflow: ellipsis;
|
|
4417
4404
|
white-space: nowrap;
|
|
@@ -4445,7 +4432,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4445
4432
|
line-height: var(--sys-typo-heading-sm-line);
|
|
4446
4433
|
font-weight: var(--sys-typo-heading-sm-weight);
|
|
4447
4434
|
letter-spacing: var(--sys-typo-heading-sm-tracking);
|
|
4448
|
-
color: var(--sys-color-
|
|
4435
|
+
color: var(--sys-color-text-default);
|
|
4449
4436
|
overflow: hidden;
|
|
4450
4437
|
text-overflow: ellipsis;
|
|
4451
4438
|
white-space: nowrap;
|
|
@@ -4523,7 +4510,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4523
4510
|
the row or shifts the input's caret position. Unique to Search; the
|
|
4524
4511
|
bare input has no chrome of its own and the divider terminates the
|
|
4525
4512
|
bar against the results list below. */
|
|
4526
|
-
box-shadow: inset 0 -1px 0 var(--sys-color-
|
|
4513
|
+
box-shadow: inset 0 -1px 0 var(--sys-color-border-default);
|
|
4527
4514
|
}
|
|
4528
4515
|
|
|
4529
4516
|
.chorus-navigation-bar--search .chorus-navigation-bar__slot--leading {
|
|
@@ -4535,9 +4522,9 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4535
4522
|
}
|
|
4536
4523
|
|
|
4537
4524
|
/* Bare input — no border / background / inset stroke. Type rung body.md
|
|
4538
|
-
(16/Regular). Caret picks up `sys.color.primary` so the active state
|
|
4525
|
+
(16/Regular). Caret picks up `sys.color.background.primary` so the active state
|
|
4539
4526
|
reads against the surface fill. Placeholder picks up `sys.color.outline`;
|
|
4540
|
-
value text picks up `sys.color.
|
|
4527
|
+
value text picks up `sys.color.text.default`. */
|
|
4541
4528
|
.chorus-navigation-bar__search-input {
|
|
4542
4529
|
box-sizing: border-box;
|
|
4543
4530
|
width: 100%;
|
|
@@ -4546,8 +4533,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4546
4533
|
padding: 0;
|
|
4547
4534
|
border: 0;
|
|
4548
4535
|
background: transparent;
|
|
4549
|
-
color: var(--sys-color-
|
|
4550
|
-
caret-color: var(--sys-color-
|
|
4536
|
+
color: var(--sys-color-text-default);
|
|
4537
|
+
caret-color: var(--sys-color-text-default);
|
|
4551
4538
|
font-family: inherit;
|
|
4552
4539
|
font-size: var(--sys-typo-body-md-size);
|
|
4553
4540
|
line-height: var(--sys-typo-body-md-line);
|
|
@@ -4559,7 +4546,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4559
4546
|
}
|
|
4560
4547
|
|
|
4561
4548
|
.chorus-navigation-bar__search-input::placeholder {
|
|
4562
|
-
color: var(--sys-color-
|
|
4549
|
+
color: var(--sys-color-border-boldest);
|
|
4563
4550
|
opacity: 1;
|
|
4564
4551
|
}
|
|
4565
4552
|
|
|
@@ -4585,8 +4572,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4585
4572
|
40 × 40 footprint falls out of `8 (padding) + 24 (glyph) + 8` and
|
|
4586
4573
|
re-flows automatically if the icon token changes. Transparent at
|
|
4587
4574
|
rest; hover / pressed paint `sys.state.*` overlays of `onSurface`;
|
|
4588
|
-
focus composes the standard three-layer ring (`sys.color.
|
|
4589
|
-
outside `sys.color.
|
|
4575
|
+
focus composes the standard three-layer ring (`sys.color.border.focused`
|
|
4576
|
+
outside `sys.color.border.focused`). */
|
|
4590
4577
|
.chorus-button--icon {
|
|
4591
4578
|
box-sizing: border-box;
|
|
4592
4579
|
display: inline-flex;
|
|
@@ -4608,7 +4595,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4608
4595
|
/* Per-appearance plumbing — the glyph colour drives the hover /
|
|
4609
4596
|
pressed / focus overlays (they `color-mix` from this var), so
|
|
4610
4597
|
each appearance only declares one token. */
|
|
4611
|
-
--button-icon-glyph-color: var(--sys-color-
|
|
4598
|
+
--button-icon-glyph-color: var(--sys-color-icon-default);
|
|
4612
4599
|
color: var(--button-icon-glyph-color);
|
|
4613
4600
|
border-radius: var(--sys-radius-full);
|
|
4614
4601
|
cursor: pointer;
|
|
@@ -4625,8 +4612,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4625
4612
|
/* Appearance modifiers — only the glyph colour token changes. Hover /
|
|
4626
4613
|
pressed / focus overlays mix from `--button-icon-glyph-color`, so
|
|
4627
4614
|
the recipe falls out without per-appearance overlay rules. */
|
|
4628
|
-
.chorus-button--icon--appearance-default { --button-icon-glyph-color: var(--sys-color-
|
|
4629
|
-
.chorus-button--icon--appearance-inverse { --button-icon-glyph-color: var(--sys-color-
|
|
4615
|
+
.chorus-button--icon--appearance-default { --button-icon-glyph-color: var(--sys-color-icon-default); }
|
|
4616
|
+
.chorus-button--icon--appearance-inverse { --button-icon-glyph-color: var(--sys-color-text-inverse); }
|
|
4630
4617
|
|
|
4631
4618
|
.chorus-button--icon:hover,
|
|
4632
4619
|
.chorus-button--icon[data-force-state="hovered"] {
|
|
@@ -4640,9 +4627,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4640
4627
|
|
|
4641
4628
|
.chorus-button--icon:focus-visible,
|
|
4642
4629
|
.chorus-button--icon[data-force-state="focused"] {
|
|
4643
|
-
outline: var(--sys-borderWidth-
|
|
4644
|
-
outline-offset: calc(-1 * var(--sys-borderWidth-
|
|
4645
|
-
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-focusInset);
|
|
4630
|
+
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-border-focused);
|
|
4631
|
+
outline-offset: calc(-1 * var(--sys-borderWidth-hairline));
|
|
4646
4632
|
}
|
|
4647
4633
|
|
|
4648
4634
|
.chorus-button--icon[data-force-state="focused"] {
|
|
@@ -4684,7 +4670,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4684
4670
|
density. Renders as <a> when `href` is given, <button> otherwise. */
|
|
4685
4671
|
.chorus-button--text {
|
|
4686
4672
|
/* Per-size plumbing — appearance + size modifiers override these. */
|
|
4687
|
-
--button-text-label: var(--sys-color-
|
|
4673
|
+
--button-text-label: var(--sys-color-text-subtle);
|
|
4688
4674
|
--button-text-min-height: var(--ref-space-500);
|
|
4689
4675
|
--button-text-padding-block: var(--sys-layout-container-xs);
|
|
4690
4676
|
--button-text-padding-inline: var(--sys-layout-container-xs);
|
|
@@ -4736,10 +4722,10 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4736
4722
|
`inverse` swaps the label to the inverse cluster so a Text Button
|
|
4737
4723
|
inside a Toast / coach-mark / snackbar reads against the host's
|
|
4738
4724
|
`inverseSurface` fill without a per-host tweak. */
|
|
4739
|
-
.chorus-button--text--appearance-default { --button-text-label: var(--sys-color-
|
|
4740
|
-
.chorus-button--text--appearance-accent { --button-text-label: var(--sys-color-
|
|
4741
|
-
.chorus-button--text--appearance-onPrimary { --button-text-label: var(--sys-color-
|
|
4742
|
-
.chorus-button--text--appearance-inverse { --button-text-label: var(--sys-color-
|
|
4725
|
+
.chorus-button--text--appearance-default { --button-text-label: var(--sys-color-text-subtle); }
|
|
4726
|
+
.chorus-button--text--appearance-accent { --button-text-label: var(--sys-color-text-accent-blue); }
|
|
4727
|
+
.chorus-button--text--appearance-onPrimary { --button-text-label: var(--sys-color-text-onFill); }
|
|
4728
|
+
.chorus-button--text--appearance-inverse { --button-text-label: var(--sys-color-text-inverse); }
|
|
4743
4729
|
|
|
4744
4730
|
/* Size modifiers — pair min-height + padding + typo + icon footprint. */
|
|
4745
4731
|
.chorus-button--text--size-medium {
|
|
@@ -4809,9 +4795,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4809
4795
|
|
|
4810
4796
|
.chorus-button--text:focus-visible,
|
|
4811
4797
|
.chorus-button--text[data-force-state="focused"] {
|
|
4812
|
-
outline: var(--sys-borderWidth-
|
|
4813
|
-
outline-offset: calc(-1 * var(--sys-borderWidth-
|
|
4814
|
-
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-focusInset);
|
|
4798
|
+
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-border-focused);
|
|
4799
|
+
outline-offset: calc(-1 * var(--sys-borderWidth-hairline));
|
|
4815
4800
|
}
|
|
4816
4801
|
|
|
4817
4802
|
.chorus-button--text[data-force-state="focused"] {
|
|
@@ -4835,7 +4820,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4835
4820
|
layout edges. */
|
|
4836
4821
|
.chorus-button--check {
|
|
4837
4822
|
/* Per-size plumbing. */
|
|
4838
|
-
--button-check-label: var(--sys-color-
|
|
4823
|
+
--button-check-label: var(--sys-color-text-subtle);
|
|
4839
4824
|
--button-check-min-height: var(--ref-space-500);
|
|
4840
4825
|
--button-check-padding-block: var(--sys-layout-container-xs);
|
|
4841
4826
|
--button-check-padding-inline: var(--sys-layout-container-xs);
|
|
@@ -4872,9 +4857,18 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4872
4857
|
transition: background 120ms ease;
|
|
4873
4858
|
}
|
|
4874
4859
|
|
|
4875
|
-
.chorus-button--check--appearance-default { --button-check-label: var(--sys-color-
|
|
4876
|
-
.chorus-button--check--appearance-accent { --button-check-label: var(--sys-color-
|
|
4877
|
-
.chorus-button--check--appearance-inverse { --button-check-label: var(--sys-color-
|
|
4860
|
+
.chorus-button--check--appearance-default { --button-check-label: var(--sys-color-text-subtle); }
|
|
4861
|
+
.chorus-button--check--appearance-accent { --button-check-label: var(--sys-color-text-accent-blue); }
|
|
4862
|
+
.chorus-button--check--appearance-inverse { --button-check-label: var(--sys-color-text-inverse); }
|
|
4863
|
+
|
|
4864
|
+
/* Standard checkbox glyph paints in `icon.default` — the selection-control
|
|
4865
|
+
family's neutral glyph tone (selection is shown by the outline↔fill glyph
|
|
4866
|
+
swap, not color), while the label keeps its quieter `text.subtle`. The
|
|
4867
|
+
accent / inverse appearances intentionally tint the glyph with their label
|
|
4868
|
+
color via `currentColor`, so this only re-tones the default appearance. */
|
|
4869
|
+
.chorus-button--check--appearance-default .chorus-button--check__checkbox {
|
|
4870
|
+
color: var(--sys-color-icon-default);
|
|
4871
|
+
}
|
|
4878
4872
|
|
|
4879
4873
|
/* Two sizes — the checkbox footprint is the size differentiator, not the
|
|
4880
4874
|
label. Both rungs share `sys.typo.label.sm` (12-rank); medium pairs it
|
|
@@ -4946,9 +4940,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4946
4940
|
|
|
4947
4941
|
.chorus-button--check:focus-visible,
|
|
4948
4942
|
.chorus-button--check[data-force-state="focused"] {
|
|
4949
|
-
outline: var(--sys-borderWidth-
|
|
4950
|
-
outline-offset: calc(-1 * var(--sys-borderWidth-
|
|
4951
|
-
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-focusInset);
|
|
4943
|
+
outline: var(--sys-borderWidth-hairline) solid var(--sys-color-border-focused);
|
|
4944
|
+
outline-offset: calc(-1 * var(--sys-borderWidth-hairline));
|
|
4952
4945
|
}
|
|
4953
4946
|
|
|
4954
4947
|
.chorus-button--check[data-force-state="focused"] {
|
|
@@ -4990,13 +4983,13 @@ a.chorus-metadata__name:focus-visible {
|
|
|
4990
4983
|
its original 56-tall footprint. Inline padding stays 0 — tab
|
|
4991
4984
|
items are equal-width and span the full row. */
|
|
4992
4985
|
padding: 0 0 env(safe-area-inset-bottom, 0px);
|
|
4993
|
-
background: var(--sys-color-surface);
|
|
4994
|
-
color: var(--sys-color-
|
|
4986
|
+
background: var(--sys-color-surface-default);
|
|
4987
|
+
color: var(--sys-color-text-default);
|
|
4995
4988
|
/* Top hairline divider — separates the bar from the scrolling content
|
|
4996
4989
|
above it without introducing a layout border that could nudge the
|
|
4997
4990
|
56-tall row off-pixel. Painted as an inset shadow so the bar's flex
|
|
4998
4991
|
geometry is untouched. */
|
|
4999
|
-
box-shadow: inset 0 var(--sys-borderWidth-hairline) 0 0 var(--sys-color-
|
|
4992
|
+
box-shadow: inset 0 var(--sys-borderWidth-hairline) 0 0 var(--sys-color-border-default);
|
|
5000
4993
|
}
|
|
5001
4994
|
|
|
5002
4995
|
.chorus-tab-bar__item {
|
|
@@ -5024,14 +5017,14 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5024
5017
|
margin: 0;
|
|
5025
5018
|
font: inherit;
|
|
5026
5019
|
text-decoration: none;
|
|
5027
|
-
color: var(--sys-color-
|
|
5020
|
+
color: var(--sys-color-text-subtle);
|
|
5028
5021
|
cursor: pointer;
|
|
5029
5022
|
-webkit-tap-highlight-color: transparent;
|
|
5030
5023
|
}
|
|
5031
5024
|
|
|
5032
5025
|
.chorus-tab-bar__item[aria-current="page"].is-active,
|
|
5033
5026
|
.chorus-tab-bar__item.is-active {
|
|
5034
|
-
color: var(--sys-color-
|
|
5027
|
+
color: var(--sys-color-text-default);
|
|
5035
5028
|
}
|
|
5036
5029
|
|
|
5037
5030
|
.chorus-tab-bar__icon {
|
|
@@ -5070,27 +5063,25 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5070
5063
|
|
|
5071
5064
|
.chorus-tab-bar__item:hover::before,
|
|
5072
5065
|
.chorus-tab-bar__item[data-force-state="hovered"]::before {
|
|
5073
|
-
background: color-mix(in srgb, var(--sys-color-
|
|
5066
|
+
background: color-mix(in srgb, var(--sys-color-text-default) calc(var(--sys-state-hover) * 100%), transparent);
|
|
5074
5067
|
}
|
|
5075
5068
|
|
|
5076
5069
|
.chorus-tab-bar__item:active::before,
|
|
5077
5070
|
.chorus-tab-bar__item[data-force-state="pressed"]::before {
|
|
5078
|
-
background: color-mix(in srgb, var(--sys-color-
|
|
5071
|
+
background: color-mix(in srgb, var(--sys-color-text-default) calc(var(--sys-state-pressed) * 100%), transparent);
|
|
5079
5072
|
}
|
|
5080
5073
|
|
|
5081
5074
|
.chorus-tab-bar__item[data-force-state="focused"]::before {
|
|
5082
|
-
background: color-mix(in srgb, var(--sys-color-
|
|
5075
|
+
background: color-mix(in srgb, var(--sys-color-text-default) calc(var(--sys-state-focus) * 100%), transparent);
|
|
5083
5076
|
}
|
|
5084
5077
|
|
|
5085
5078
|
/* Focus ring — three-layer composition rings the item flush at the
|
|
5086
5079
|
slot edge. We can't ring outward (adjacent items are flush under
|
|
5087
5080
|
`flex: 1 1 0`, so an outward stroke would overlap its neighbour),
|
|
5088
|
-
so the standard composition is painted as `inset`
|
|
5089
|
-
::after that covers the slot exactly
|
|
5090
|
-
|
|
5091
|
-
|
|
5092
|
-
outer, inset inner**, never reversed. The ring is constrained
|
|
5093
|
-
strictly inside the slot's bounding box. */
|
|
5081
|
+
so the standard composition is painted as an `inset` shadow on the
|
|
5082
|
+
::after that covers the slot exactly: a single 1px `border.focused`
|
|
5083
|
+
ring at the slot edge, constrained strictly inside the slot's
|
|
5084
|
+
bounding box. */
|
|
5094
5085
|
.chorus-tab-bar__item::after {
|
|
5095
5086
|
content: '';
|
|
5096
5087
|
position: absolute;
|
|
@@ -5104,9 +5095,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5104
5095
|
|
|
5105
5096
|
.chorus-tab-bar__item:focus-visible::after,
|
|
5106
5097
|
.chorus-tab-bar__item[data-force-state="focused"]::after {
|
|
5107
|
-
box-shadow:
|
|
5108
|
-
inset 0 0 0 var(--sys-borderWidth-thin) var(--sys-color-focus),
|
|
5109
|
-
inset 0 0 0 calc(var(--sys-borderWidth-thin) + var(--sys-borderWidth-hairline)) var(--sys-color-focusInset);
|
|
5098
|
+
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-border-focused);
|
|
5110
5099
|
}
|
|
5111
5100
|
|
|
5112
5101
|
/* Label fills the item's slot up to its natural text width and
|
|
@@ -5118,10 +5107,10 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5118
5107
|
.chorus-tab-bar__label {
|
|
5119
5108
|
max-width: 100%;
|
|
5120
5109
|
font-family: var(--sys-typo-fontFamily-sans);
|
|
5121
|
-
font-size: var(--sys-typo-
|
|
5122
|
-
line-height: var(--sys-typo-
|
|
5123
|
-
font-weight: var(--sys-typo-
|
|
5124
|
-
letter-spacing: var(--sys-typo-
|
|
5110
|
+
font-size: var(--sys-typo-label-xs-size);
|
|
5111
|
+
line-height: var(--sys-typo-label-xs-line);
|
|
5112
|
+
font-weight: var(--sys-typo-label-xs-weight);
|
|
5113
|
+
letter-spacing: var(--sys-typo-label-xs-tracking);
|
|
5125
5114
|
color: currentColor;
|
|
5126
5115
|
text-align: center;
|
|
5127
5116
|
white-space: nowrap;
|
|
@@ -5132,7 +5121,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5132
5121
|
}
|
|
5133
5122
|
|
|
5134
5123
|
/* Primary appearance — the "Create" / "Compose" commit affordance.
|
|
5135
|
-
Paints the glyph in `sys.color.brand` (the editorial/brand accent
|
|
5124
|
+
Paints the glyph in `sys.color.text.brand` (the editorial/brand accent
|
|
5136
5125
|
the system reserves for commit affordances that should read as the
|
|
5137
5126
|
product's voice, not a generic call-to-action). Pair with a
|
|
5138
5127
|
filled-tile icon (AddSquareFillIcon / ComposeFillIcon) so the
|
|
@@ -5143,11 +5132,11 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5143
5132
|
standard icon footprint so the row's optical alignment is
|
|
5144
5133
|
unaffected. */
|
|
5145
5134
|
.chorus-tab-bar__item--primary {
|
|
5146
|
-
color: var(--sys-color-
|
|
5135
|
+
color: var(--sys-color-text-subtle);
|
|
5147
5136
|
}
|
|
5148
5137
|
|
|
5149
5138
|
.chorus-tab-bar__item--primary .chorus-tab-bar__icon {
|
|
5150
|
-
color: var(--sys-color-brand);
|
|
5139
|
+
color: var(--sys-color-text-brand);
|
|
5151
5140
|
}
|
|
5152
5141
|
|
|
5153
5142
|
.chorus-tab-bar__item:focus-visible {
|
|
@@ -5156,7 +5145,9 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5156
5145
|
|
|
5157
5146
|
.chorus-tab-bar__item:disabled,
|
|
5158
5147
|
.chorus-tab-bar__item[aria-disabled="true"] {
|
|
5159
|
-
opacity:
|
|
5148
|
+
/* Explicit disabled (no opacity): item re-tones to text.disabled; icon
|
|
5149
|
+
and label ride currentColor so both follow. */
|
|
5150
|
+
color: var(--sys-color-text-disabled);
|
|
5160
5151
|
cursor: not-allowed;
|
|
5161
5152
|
pointer-events: none;
|
|
5162
5153
|
}
|
|
@@ -5182,8 +5173,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5182
5173
|
max-width: min(400px, calc(100vw - 2 * var(--sys-layout-container-xs)));
|
|
5183
5174
|
padding: var(--sys-layout-container-xs) var(--sys-layout-container-md);
|
|
5184
5175
|
border-radius: var(--sys-radius-md);
|
|
5185
|
-
background: var(--sys-color-
|
|
5186
|
-
color: var(--sys-color-
|
|
5176
|
+
background: var(--sys-color-background-inverse);
|
|
5177
|
+
color: var(--sys-color-text-inverse);
|
|
5187
5178
|
box-shadow: var(--sys-elevation-overlay);
|
|
5188
5179
|
}
|
|
5189
5180
|
|
|
@@ -5265,16 +5256,16 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5265
5256
|
Pair the action button with `appearance="onPrimary"` (also
|
|
5266
5257
|
theme-stable). */
|
|
5267
5258
|
.chorus-tooltip--appearance-default {
|
|
5268
|
-
background: var(--sys-color-primary);
|
|
5269
|
-
color: var(--sys-color-
|
|
5259
|
+
background: var(--sys-color-background-primary);
|
|
5260
|
+
color: var(--sys-color-text-onFill);
|
|
5270
5261
|
}
|
|
5271
5262
|
|
|
5272
5263
|
/* Inverse — dark-cluster bubble for primary-heavy screens. Pair the
|
|
5273
5264
|
action button with `appearance="inverse"` so the label flips with
|
|
5274
5265
|
the host fill. */
|
|
5275
5266
|
.chorus-tooltip--appearance-inverse {
|
|
5276
|
-
background: var(--sys-color-
|
|
5277
|
-
color: var(--sys-color-
|
|
5267
|
+
background: var(--sys-color-background-inverse);
|
|
5268
|
+
color: var(--sys-color-text-inverse);
|
|
5278
5269
|
}
|
|
5279
5270
|
|
|
5280
5271
|
.chorus-tooltip__body {
|
|
@@ -5372,8 +5363,8 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5372
5363
|
}
|
|
5373
5364
|
|
|
5374
5365
|
.chorus-bubble {
|
|
5375
|
-
--bubble-fill: var(--sys-color-primary);
|
|
5376
|
-
--bubble-ink: var(--sys-color-
|
|
5366
|
+
--bubble-fill: var(--sys-color-background-primary);
|
|
5367
|
+
--bubble-ink: var(--sys-color-text-onFill);
|
|
5377
5368
|
|
|
5378
5369
|
position: relative;
|
|
5379
5370
|
display: inline-flex;
|
|
@@ -5393,10 +5384,10 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5393
5384
|
border-radius: var(--sys-radius-full);
|
|
5394
5385
|
background: var(--bubble-fill);
|
|
5395
5386
|
color: var(--bubble-ink);
|
|
5396
|
-
font-size: var(--sys-typo-
|
|
5397
|
-
font-weight: var(--sys-typo-
|
|
5398
|
-
line-height: var(--sys-typo-
|
|
5399
|
-
letter-spacing: var(--sys-typo-
|
|
5387
|
+
font-size: var(--sys-typo-label-xs-size);
|
|
5388
|
+
font-weight: var(--sys-typo-label-xs-weight);
|
|
5389
|
+
line-height: var(--sys-typo-label-xs-line);
|
|
5390
|
+
letter-spacing: var(--sys-typo-label-xs-tracking);
|
|
5400
5391
|
}
|
|
5401
5392
|
|
|
5402
5393
|
/* Single-line body. `min-width: 0` is the standard flex-truncation
|
|
@@ -5461,7 +5452,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5461
5452
|
/* One 6px dot per page in an inline.sm row. An inline element —
|
|
5462
5453
|
inline-flex, intrinsic width (no stretch, no self-centering); the
|
|
5463
5454
|
host owns horizontal placement. Active dot paints `onSurface`, the
|
|
5464
|
-
rest `
|
|
5455
|
+
rest `border.default`. Non-interactive (`aria-hidden` on the root) —
|
|
5465
5456
|
the host pager owns the active index and keyboard reach.
|
|
5466
5457
|
See schema/components/pagination/pagination.md. */
|
|
5467
5458
|
|
|
@@ -5475,23 +5466,22 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5475
5466
|
width: var(--ref-space-75);
|
|
5476
5467
|
height: var(--ref-space-75);
|
|
5477
5468
|
border-radius: var(--sys-radius-full);
|
|
5478
|
-
background: var(--sys-color-
|
|
5469
|
+
background: var(--sys-color-border-default);
|
|
5479
5470
|
display: block;
|
|
5480
5471
|
}
|
|
5481
5472
|
|
|
5482
5473
|
.chorus-pagination__dot--active {
|
|
5483
|
-
background: var(--sys-color-
|
|
5474
|
+
background: var(--sys-color-text-default);
|
|
5484
5475
|
}
|
|
5485
5476
|
|
|
5486
5477
|
/* ============================================================
|
|
5487
5478
|
Progress — linear progress bar (determinate)
|
|
5488
5479
|
============================================================ */
|
|
5489
|
-
/* Single visual rung — 8px tall, radius.full. Track paints with
|
|
5490
|
-
`
|
|
5491
|
-
|
|
5492
|
-
|
|
5493
|
-
|
|
5494
|
-
always contrasts against the bare-track scrim regardless of theme.
|
|
5480
|
+
/* Single visual rung — 8px tall, radius.full. Track paints with the
|
|
5481
|
+
solid `background.neutral` fill (the role that replaced the old
|
|
5482
|
+
Banner-style ~8% scrim) — a light-gray track in light, a mid-gray in
|
|
5483
|
+
dark. Indicator paints in `inverseSurface` so the filled segment
|
|
5484
|
+
always contrasts against the bare track regardless of theme.
|
|
5495
5485
|
The indicator's `translateX` parks at `-100 + percent`% so the
|
|
5496
5486
|
trailing edge sits at the value's ratio; transitions over 200ms so
|
|
5497
5487
|
jumps animate. */
|
|
@@ -5502,7 +5492,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5502
5492
|
width: 100%;
|
|
5503
5493
|
height: var(--sys-layout-container-xs);
|
|
5504
5494
|
overflow: hidden;
|
|
5505
|
-
background: var(--sys-color-
|
|
5495
|
+
background: var(--sys-color-background-neutral);
|
|
5506
5496
|
border-radius: var(--sys-radius-full);
|
|
5507
5497
|
flex: 1 1 auto;
|
|
5508
5498
|
}
|
|
@@ -5512,7 +5502,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5512
5502
|
position: absolute;
|
|
5513
5503
|
inset: 0;
|
|
5514
5504
|
width: 100%;
|
|
5515
|
-
background: var(--sys-color-
|
|
5505
|
+
background: var(--sys-color-background-inverse);
|
|
5516
5506
|
border-radius: inherit;
|
|
5517
5507
|
transform: translateX(-100%);
|
|
5518
5508
|
transition: transform 200ms ease-out;
|
|
@@ -5549,32 +5539,30 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5549
5539
|
}
|
|
5550
5540
|
|
|
5551
5541
|
/* Neutral — the quiet informational default. Background paints with
|
|
5552
|
-
`
|
|
5553
|
-
|
|
5554
|
-
|
|
5555
|
-
|
|
5556
|
-
|
|
5557
|
-
`onSurfaceVariant` so legibility tracks the active palette
|
|
5558
|
-
automatically. */
|
|
5542
|
+
the solid `background.neutral` fill (the role that replaced the old
|
|
5543
|
+
~8% scrim) — a light-gray pill in light, a mid-gray in dark. Same
|
|
5544
|
+
neutral fill used by Banner / Chip / Tag default, Progress track,
|
|
5545
|
+
and Skeleton. Foreground stays bound to `text.subtle` so legibility
|
|
5546
|
+
tracks the active palette automatically. */
|
|
5559
5547
|
.chorus-status-tag--neutral {
|
|
5560
|
-
background: var(--sys-color-
|
|
5561
|
-
color: var(--sys-color-
|
|
5548
|
+
background: var(--sys-color-background-neutral);
|
|
5549
|
+
color: var(--sys-color-text-subtle);
|
|
5562
5550
|
}
|
|
5563
5551
|
|
|
5564
5552
|
.chorus-status-tag--error {
|
|
5565
|
-
background: var(--sys-color-
|
|
5566
|
-
color: var(--sys-color-
|
|
5553
|
+
background: var(--sys-color-background-danger);
|
|
5554
|
+
color: var(--sys-color-text-danger);
|
|
5567
5555
|
}
|
|
5568
5556
|
|
|
5569
5557
|
/* ============================================================
|
|
5570
5558
|
Skeleton — tonal loading placeholder with opacity pulse
|
|
5571
5559
|
============================================================ */
|
|
5572
|
-
/*
|
|
5573
|
-
|
|
5574
|
-
(0.5 → 1 → 0.5, 1.6s
|
|
5575
|
-
|
|
5576
|
-
|
|
5577
|
-
|
|
5560
|
+
/* Solid `background.neutral` fill (the role that replaced the old ~8%
|
|
5561
|
+
scrim) — a light-gray placeholder in light, a mid-gray in dark —
|
|
5562
|
+
painted with a slow opacity pulse (0.5 → 1 → 0.5, 1.6s
|
|
5563
|
+
`ease-in-out`). The same neutral fill used by Banner / Chip / Tag
|
|
5564
|
+
default, Progress track, and StatusTag neutral. Three shapes select
|
|
5565
|
+
the default footprint and corner
|
|
5578
5566
|
radius. The pulse animates `opacity` only — no gradient sweep — so
|
|
5579
5567
|
the placeholder reads as anonymous chrome and degrades cleanly under
|
|
5580
5568
|
`prefers-reduced-motion: reduce`. */
|
|
@@ -5585,7 +5573,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5585
5573
|
|
|
5586
5574
|
.chorus-skeleton {
|
|
5587
5575
|
display: block;
|
|
5588
|
-
background: var(--sys-color-
|
|
5576
|
+
background: var(--sys-color-background-neutral);
|
|
5589
5577
|
animation: chorus-skeleton-pulse 1.6s ease-in-out infinite;
|
|
5590
5578
|
}
|
|
5591
5579
|
|
|
@@ -5625,9 +5613,9 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5625
5613
|
Spinner — indeterminate rotating-arc loading indicator
|
|
5626
5614
|
============================================================ */
|
|
5627
5615
|
/* A rotating ring for short, progress-unknown waits (< ~1s) on a
|
|
5628
|
-
neutral host surface. The arc paints `
|
|
5629
|
-
foreground motion over a
|
|
5630
|
-
|
|
5616
|
+
neutral host surface. The arc paints `background.primary` as the
|
|
5617
|
+
foreground motion over a solid `background.neutral` track ring (the
|
|
5618
|
+
role that replaced the old ~8% scrim) so the rotation reads clearly.
|
|
5631
5619
|
The ring is drawn with a conic gradient masked to an annulus — no
|
|
5632
5620
|
`border:` (per the no-layout-strokes rule). Diameter rides the
|
|
5633
5621
|
icon.* ladder via the `--spinner-diameter` plumbing var (sys.icon.lg
|
|
@@ -5652,7 +5640,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5652
5640
|
border-radius: var(--sys-radius-full);
|
|
5653
5641
|
/* Foreground arc sweeps from primary to transparent over the track. */
|
|
5654
5642
|
background:
|
|
5655
|
-
conic-gradient(var(--sys-color-primary), color-mix(in srgb, var(--sys-color-primary) 0%, transparent) 75%, color-mix(in srgb, var(--sys-color-primary) 0%, transparent));
|
|
5643
|
+
conic-gradient(var(--sys-color-background-primary), color-mix(in srgb, var(--sys-color-background-primary) 0%, transparent) 75%, color-mix(in srgb, var(--sys-color-background-primary) 0%, transparent));
|
|
5656
5644
|
/* Annulus mask: punch out the centre so it reads as a ring, 2px thick.
|
|
5657
5645
|
The mask fill is alpha-only — the opaque keep-region of the mask is
|
|
5658
5646
|
not a design color, so it is not a token binding. */
|
|
@@ -5670,7 +5658,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5670
5658
|
position: absolute;
|
|
5671
5659
|
inset: 0;
|
|
5672
5660
|
border-radius: inherit;
|
|
5673
|
-
box-shadow: inset 0 0 0 2px var(--sys-color-
|
|
5661
|
+
box-shadow: inset 0 0 0 2px var(--sys-color-background-neutral);
|
|
5674
5662
|
}
|
|
5675
5663
|
|
|
5676
5664
|
.chorus-spinner__arc {
|
|
@@ -5678,7 +5666,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5678
5666
|
}
|
|
5679
5667
|
|
|
5680
5668
|
.chorus-spinner__label {
|
|
5681
|
-
color: var(--sys-color-
|
|
5669
|
+
color: var(--sys-color-text-subtle);
|
|
5682
5670
|
}
|
|
5683
5671
|
|
|
5684
5672
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -5690,21 +5678,21 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5690
5678
|
/* ============================================================
|
|
5691
5679
|
Switch — binary active/inactive pill with translating thumb
|
|
5692
5680
|
============================================================ */
|
|
5693
|
-
/* 52 × 32 pill track + 28 × 28 thumb. Inactive paints a
|
|
5694
|
-
track
|
|
5681
|
+
/* 52 × 32 pill track + 28 × 28 thumb. Inactive paints a solid
|
|
5682
|
+
`background.neutral` track with a hairline outline and a fixed-white
|
|
5695
5683
|
thumb; active paints `primary` track with no outline. Thumb translates 20px between
|
|
5696
5684
|
the two ends. Whole track is the click target — the thumb is
|
|
5697
5685
|
decorative. Outward focus ring matches Switch's "stands inline with
|
|
5698
5686
|
whitespace around it" placement; the rest stroke stays a no-layout
|
|
5699
5687
|
inset box-shadow. */
|
|
5700
5688
|
.chorus-switch {
|
|
5701
|
-
/* Inactive (resting) — `
|
|
5702
|
-
|
|
5703
|
-
|
|
5704
|
-
|
|
5705
|
-
|
|
5706
|
-
--switch-track-bg: var(--sys-color-
|
|
5707
|
-
--switch-track-outline: var(--sys-color-
|
|
5689
|
+
/* Inactive (resting) — `icon.subtlest` track: the off state of the
|
|
5690
|
+
selection-control family, a mid-neutral that reads clearly on any host
|
|
5691
|
+
surface, reinforced by the hairline outline, with a fixed-white thumb
|
|
5692
|
+
that reads the same in light and dark. The active selector below
|
|
5693
|
+
overrides for the on-state. */
|
|
5694
|
+
--switch-track-bg: var(--sys-color-icon-subtlest);
|
|
5695
|
+
--switch-track-outline: var(--sys-color-border-default);
|
|
5708
5696
|
--switch-thumb-bg: var(--ref-palette-white-1000);
|
|
5709
5697
|
--switch-thumb-offset: 0px;
|
|
5710
5698
|
|
|
@@ -5743,20 +5731,20 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5743
5731
|
transform 120ms ease-out;
|
|
5744
5732
|
}
|
|
5745
5733
|
|
|
5746
|
-
/* Active — `
|
|
5747
|
-
filled track reads as one solid block. Thumb translates to the
|
|
5734
|
+
/* Active — `icon.accent.blue` track, `onFill` thumb, outline disappears so
|
|
5735
|
+
the filled track reads as one solid block. Thumb translates to the
|
|
5748
5736
|
trailing end (52 - 28 - 2*2 = 20). */
|
|
5749
5737
|
.chorus-switch[data-state='active'] {
|
|
5750
|
-
--switch-track-bg: var(--sys-color-
|
|
5738
|
+
--switch-track-bg: var(--sys-color-icon-accent-blue-default);
|
|
5751
5739
|
--switch-track-outline: transparent;
|
|
5752
|
-
--switch-thumb-bg: var(--sys-color-
|
|
5740
|
+
--switch-thumb-bg: var(--sys-color-text-onFill);
|
|
5753
5741
|
--switch-thumb-offset: 20px;
|
|
5754
5742
|
}
|
|
5755
5743
|
|
|
5756
5744
|
.chorus-switch:hover {
|
|
5757
5745
|
background: color-mix(
|
|
5758
5746
|
in srgb,
|
|
5759
|
-
var(--sys-color-
|
|
5747
|
+
var(--sys-color-text-default) calc(var(--sys-state-hover) * 100%),
|
|
5760
5748
|
var(--switch-track-bg)
|
|
5761
5749
|
);
|
|
5762
5750
|
}
|
|
@@ -5765,7 +5753,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5765
5753
|
.chorus-switch[data-force-state='pressed'] {
|
|
5766
5754
|
background: color-mix(
|
|
5767
5755
|
in srgb,
|
|
5768
|
-
var(--sys-color-
|
|
5756
|
+
var(--sys-color-text-default) calc(var(--sys-state-pressed) * 100%),
|
|
5769
5757
|
var(--switch-track-bg)
|
|
5770
5758
|
);
|
|
5771
5759
|
}
|
|
@@ -5790,14 +5778,16 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5790
5778
|
|
|
5791
5779
|
.chorus-switch:focus-visible::after,
|
|
5792
5780
|
.chorus-switch[data-force-state='focused']::after {
|
|
5793
|
-
box-shadow:
|
|
5794
|
-
0 0 0 var(--sys-borderWidth-thin) var(--sys-color-focus),
|
|
5795
|
-
0 0 0 calc(var(--sys-borderWidth-thin) + var(--sys-borderWidth-hairline)) var(--sys-color-focusInset);
|
|
5781
|
+
box-shadow: 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-border-focused);
|
|
5796
5782
|
}
|
|
5797
5783
|
|
|
5798
5784
|
.chorus-switch:disabled,
|
|
5799
5785
|
.chorus-switch[data-disabled='true'] {
|
|
5800
|
-
opacity:
|
|
5786
|
+
/* Explicit disabled (no opacity): the track re-tones to the neutral
|
|
5787
|
+
disabled fill with a bold edge, overriding the active/inactive track
|
|
5788
|
+
set above — this rule wins on source order. Thumb stays put. */
|
|
5789
|
+
--switch-track-bg: var(--sys-color-icon-disabled);
|
|
5790
|
+
--switch-track-outline: var(--sys-color-border-bold);
|
|
5801
5791
|
cursor: not-allowed;
|
|
5802
5792
|
pointer-events: none;
|
|
5803
5793
|
}
|
|
@@ -5806,7 +5796,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5806
5796
|
Accordion — stack of expandable rows with rotating chevron
|
|
5807
5797
|
============================================================ */
|
|
5808
5798
|
/* Edge-to-edge (`full-bleed`) family. Rows tile flush with a hairline
|
|
5809
|
-
`
|
|
5799
|
+
`border.default` divider inset 16px (`layout.container.md`) on BOTH
|
|
5810
5800
|
the leading and trailing edges so the rule reads as separating row
|
|
5811
5801
|
*content*, not the container. Composes the divider on a dedicated
|
|
5812
5802
|
`::after` overlay rather than a `border:` / full-bleed box-shadow so
|
|
@@ -5831,7 +5821,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5831
5821
|
right: var(--sys-layout-container-md);
|
|
5832
5822
|
bottom: 0;
|
|
5833
5823
|
height: var(--sys-borderWidth-hairline);
|
|
5834
|
-
background: var(--sys-color-
|
|
5824
|
+
background: var(--sys-color-border-default);
|
|
5835
5825
|
pointer-events: none;
|
|
5836
5826
|
}
|
|
5837
5827
|
|
|
@@ -5845,7 +5835,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5845
5835
|
padding: var(--sys-layout-container-xs) var(--sys-layout-container-md);
|
|
5846
5836
|
border: 0;
|
|
5847
5837
|
background: transparent;
|
|
5848
|
-
color: var(--sys-color-
|
|
5838
|
+
color: var(--sys-color-text-default);
|
|
5849
5839
|
text-align: left;
|
|
5850
5840
|
cursor: pointer;
|
|
5851
5841
|
position: relative;
|
|
@@ -5863,7 +5853,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5863
5853
|
line-height: var(--sys-typo-body-md-line);
|
|
5864
5854
|
font-weight: var(--sys-typo-body-md-weight);
|
|
5865
5855
|
letter-spacing: var(--sys-typo-body-md-tracking);
|
|
5866
|
-
color: var(--sys-color-
|
|
5856
|
+
color: var(--sys-color-text-default);
|
|
5867
5857
|
}
|
|
5868
5858
|
|
|
5869
5859
|
.chorus-accordion__chevron {
|
|
@@ -5873,7 +5863,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5873
5863
|
justify-content: center;
|
|
5874
5864
|
width: var(--sys-icon-md);
|
|
5875
5865
|
height: var(--sys-icon-md);
|
|
5876
|
-
color: var(--sys-color-
|
|
5866
|
+
color: var(--sys-color-text-subtle);
|
|
5877
5867
|
transition: transform 120ms ease-out;
|
|
5878
5868
|
}
|
|
5879
5869
|
|
|
@@ -5884,7 +5874,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5884
5874
|
.chorus-accordion__trigger:hover {
|
|
5885
5875
|
background: color-mix(
|
|
5886
5876
|
in srgb,
|
|
5887
|
-
var(--sys-color-
|
|
5877
|
+
var(--sys-color-text-default) calc(var(--sys-state-hover) * 100%),
|
|
5888
5878
|
transparent
|
|
5889
5879
|
);
|
|
5890
5880
|
}
|
|
@@ -5893,7 +5883,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5893
5883
|
.chorus-accordion__trigger[data-force-state='pressed'] {
|
|
5894
5884
|
background: color-mix(
|
|
5895
5885
|
in srgb,
|
|
5896
|
-
var(--sys-color-
|
|
5886
|
+
var(--sys-color-text-default) calc(var(--sys-state-pressed) * 100%),
|
|
5897
5887
|
transparent
|
|
5898
5888
|
);
|
|
5899
5889
|
}
|
|
@@ -5917,17 +5907,26 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5917
5907
|
|
|
5918
5908
|
.chorus-accordion__trigger:focus-visible::before,
|
|
5919
5909
|
.chorus-accordion__trigger[data-force-state='focused']::before {
|
|
5920
|
-
box-shadow:
|
|
5921
|
-
inset 0 0 0 var(--sys-borderWidth-thin) var(--sys-color-focus),
|
|
5922
|
-
inset 0 0 0 calc(var(--sys-borderWidth-thin) + var(--sys-borderWidth-hairline)) var(--sys-color-focusInset);
|
|
5910
|
+
box-shadow: inset 0 0 0 var(--sys-borderWidth-hairline) var(--sys-color-border-focused);
|
|
5923
5911
|
}
|
|
5924
5912
|
|
|
5925
5913
|
.chorus-accordion__trigger:disabled,
|
|
5926
5914
|
.chorus-accordion__item[data-disabled='true'] {
|
|
5927
|
-
opacity: var(--sys-state-disabled);
|
|
5928
5915
|
cursor: not-allowed;
|
|
5929
5916
|
}
|
|
5930
5917
|
|
|
5918
|
+
/* Explicit disabled (no opacity): trigger label re-tones to text.disabled,
|
|
5919
|
+
chevron glyph to icon.disabled. */
|
|
5920
|
+
.chorus-accordion__trigger:disabled,
|
|
5921
|
+
.chorus-accordion__item[data-disabled='true'] .chorus-accordion__trigger,
|
|
5922
|
+
.chorus-accordion__item[data-disabled='true'] .chorus-accordion__label {
|
|
5923
|
+
color: var(--sys-color-text-disabled);
|
|
5924
|
+
}
|
|
5925
|
+
|
|
5926
|
+
.chorus-accordion__item[data-disabled='true'] .chorus-accordion__chevron {
|
|
5927
|
+
color: var(--sys-color-icon-disabled);
|
|
5928
|
+
}
|
|
5929
|
+
|
|
5931
5930
|
.chorus-accordion__item[data-disabled='true'] .chorus-accordion__trigger {
|
|
5932
5931
|
pointer-events: none;
|
|
5933
5932
|
}
|
|
@@ -5948,7 +5947,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5948
5947
|
sub-list stretches flush to the accordion's right edge without
|
|
5949
5948
|
a double-paid gutter.
|
|
5950
5949
|
|
|
5951
|
-
Mode (b) also paints a hairline `
|
|
5950
|
+
Mode (b) also paints a hairline `border.default` top group-divider
|
|
5952
5951
|
via a `::before` overlay (no-layout stroke — a `border-top:` on the
|
|
5953
5952
|
child container would reflow the first row's box and break its
|
|
5954
5953
|
inward focus ring). The 16px inline inset mirrors the inter-item
|
|
@@ -5985,7 +5984,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
5985
5984
|
right: var(--sys-layout-container-md);
|
|
5986
5985
|
top: 0;
|
|
5987
5986
|
height: var(--sys-borderWidth-hairline);
|
|
5988
|
-
background: var(--sys-color-
|
|
5987
|
+
background: var(--sys-color-border-default);
|
|
5989
5988
|
pointer-events: none;
|
|
5990
5989
|
}
|
|
5991
5990
|
|
|
@@ -6027,7 +6026,7 @@ a.chorus-metadata__name:focus-visible {
|
|
|
6027
6026
|
line-height: var(--sys-typo-body-sm-line);
|
|
6028
6027
|
font-weight: var(--sys-typo-body-sm-weight);
|
|
6029
6028
|
letter-spacing: var(--sys-typo-body-sm-tracking);
|
|
6030
|
-
color: var(--sys-color-
|
|
6029
|
+
color: var(--sys-color-text-subtle);
|
|
6031
6030
|
}
|
|
6032
6031
|
|
|
6033
6032
|
@media (prefers-reduced-motion: reduce) {
|