@rackbops/styles 0.1.4 → 0.1.6

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.
Files changed (39) hide show
  1. package/amber-ember/components/link.css +4 -2
  2. package/amber-ember/components/stepper.css +6 -3
  3. package/amber-ember/components/tabs.css +4 -2
  4. package/amber-hearth/components/link.css +4 -2
  5. package/amber-hearth/components/stepper.css +6 -3
  6. package/amber-hearth/components/tabs.css +4 -2
  7. package/arcane-obsidian/components/link.css +4 -2
  8. package/arcane-obsidian/components/stepper.css +6 -3
  9. package/arcane-obsidian/components/tabs.css +4 -2
  10. package/arcane-obsidian/design.md +5 -4
  11. package/arcane-obsidian/tokens.css +2 -2
  12. package/arcane-parchment/components/link.css +4 -2
  13. package/arcane-parchment/components/stepper.css +6 -3
  14. package/arcane-parchment/components/tabs.css +4 -2
  15. package/arcane-parchment/design.md +3 -1
  16. package/concrete-signal/components/link.css +4 -2
  17. package/concrete-signal/components/stepper.css +6 -3
  18. package/concrete-signal-light/components/link.css +4 -2
  19. package/concrete-signal-light/components/stepper.css +6 -3
  20. package/contract.json +7 -41
  21. package/luminous-precision/components/link.css +2 -1
  22. package/luminous-precision/components/stepper.css +6 -3
  23. package/mono-field/components/link.css +4 -2
  24. package/mono-field/components/stepper.css +6 -3
  25. package/mono-field/design.md +4 -2
  26. package/neon-butterfly/components/dialog.css +1 -1
  27. package/neon-butterfly/components/link.css +4 -2
  28. package/neon-butterfly/components/stepper.css +6 -3
  29. package/package.json +1 -1
  30. package/rackbops-noir/components/link.css +2 -1
  31. package/rackbops-noir/components/stepper.css +6 -3
  32. package/rackbops-noir/components/tabs.css +4 -2
  33. package/rackbops-studio/components/link.css +2 -1
  34. package/rackbops-studio/components/stepper.css +6 -3
  35. package/rackbops-studio/components/tabs.css +4 -2
  36. package/rackbops-studio/design.md +2 -2
  37. package/rackbops-studio/tokens.css +2 -2
  38. package/summer-cloud/components/dialog.css +1 -1
  39. package/summer-cloud/components/stepper.css +6 -3
@@ -32,10 +32,12 @@
32
32
  transition: background var(--rb-transition);
33
33
  }
34
34
  :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-link:hover::before,
35
- :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-link.rb-link--active::before {
35
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-link.rb-link--active::before,
36
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-link[aria-current="page"]::before {
36
37
  background: var(--rb-accent);
37
38
  }
38
- :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-link.rb-link--active {
39
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-link.rb-link--active,
40
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-link[aria-current="page"] {
39
41
  background: var(--rb-accent-wash);
40
42
  color: var(--rb-accent);
41
43
  }
@@ -42,7 +42,8 @@
42
42
  transition: background-color var(--rb-transition);
43
43
  }
44
44
  :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-stepper__step:not(:first-child).rb-stepper--complete::before,
45
- :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before {
45
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before,
46
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-stepper__step[aria-current="step"]::before {
46
47
  background: var(--rb-accent);
47
48
  }
48
49
  :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-stepper__node {
@@ -69,13 +70,15 @@
69
70
  :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-stepper--complete .rb-stepper__label {
70
71
  color: var(--rb-text);
71
72
  }
72
- :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-stepper--current .rb-stepper__node {
73
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-stepper--current .rb-stepper__node,
74
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-stepper__step[aria-current="step"] .rb-stepper__node {
73
75
  background: var(--rb-surface);
74
76
  border-color: var(--rb-accent);
75
77
  color: var(--rb-accent);
76
78
  box-shadow: var(--rb-shadow-lg);
77
79
  }
78
- :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-stepper--current .rb-stepper__label {
80
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-stepper--current .rb-stepper__label,
81
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-stepper__step[aria-current="step"] .rb-stepper__label {
79
82
  color: var(--rb-accent);
80
83
  font-weight: var(--rb-font-weight-medium);
81
84
  }
@@ -22,10 +22,12 @@
22
22
  :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-tab:hover {
23
23
  color: var(--rb-text);
24
24
  }
25
- :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-tab.rb-tab--active {
25
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-tab.rb-tab--active,
26
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-tab[aria-selected="true"] {
26
27
  color: var(--rb-accent);
27
28
  }
28
- :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-tab.rb-tab--active::after {
29
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-tab.rb-tab--active::after,
30
+ :where([data-rb-style="amber-ember"], [data-rb-style="amber-ember"] *).rb-tab[aria-selected="true"]::after {
29
31
  content: "";
30
32
  position: absolute;
31
33
  left: var(--rb-space-3);
@@ -32,10 +32,12 @@
32
32
  transition: background var(--rb-transition);
33
33
  }
34
34
  :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-link:hover::before,
35
- :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-link.rb-link--active::before {
35
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-link.rb-link--active::before,
36
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-link[aria-current="page"]::before {
36
37
  background: var(--rb-accent);
37
38
  }
38
- :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-link.rb-link--active {
39
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-link.rb-link--active,
40
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-link[aria-current="page"] {
39
41
  background: var(--rb-accent-wash);
40
42
  color: var(--rb-accent);
41
43
  }
@@ -42,7 +42,8 @@
42
42
  transition: background-color var(--rb-transition);
43
43
  }
44
44
  :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-stepper__step:not(:first-child).rb-stepper--complete::before,
45
- :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before {
45
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before,
46
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-stepper__step[aria-current="step"]::before {
46
47
  background: var(--rb-accent);
47
48
  }
48
49
  :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-stepper__node {
@@ -69,13 +70,15 @@
69
70
  :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-stepper--complete .rb-stepper__label {
70
71
  color: var(--rb-text);
71
72
  }
72
- :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-stepper--current .rb-stepper__node {
73
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-stepper--current .rb-stepper__node,
74
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-stepper__step[aria-current="step"] .rb-stepper__node {
73
75
  background: var(--rb-surface);
74
76
  border-color: var(--rb-accent);
75
77
  color: var(--rb-accent);
76
78
  box-shadow: var(--rb-shadow-lg);
77
79
  }
78
- :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-stepper--current .rb-stepper__label {
80
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-stepper--current .rb-stepper__label,
81
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-stepper__step[aria-current="step"] .rb-stepper__label {
79
82
  color: var(--rb-accent);
80
83
  font-weight: var(--rb-font-weight-medium);
81
84
  }
@@ -22,10 +22,12 @@
22
22
  :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-tab:hover {
23
23
  color: var(--rb-text);
24
24
  }
25
- :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-tab.rb-tab--active {
25
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-tab.rb-tab--active,
26
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-tab[aria-selected="true"] {
26
27
  color: var(--rb-accent);
27
28
  }
28
- :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-tab.rb-tab--active::after {
29
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-tab.rb-tab--active::after,
30
+ :where([data-rb-style="amber-hearth"], [data-rb-style="amber-hearth"] *).rb-tab[aria-selected="true"]::after {
29
31
  content: "";
30
32
  position: absolute;
31
33
  left: var(--rb-space-3);
@@ -31,10 +31,12 @@
31
31
  transition: background var(--rb-transition);
32
32
  }
33
33
  :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-link:hover::before,
34
- :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-link.rb-link--active::before {
34
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-link.rb-link--active::before,
35
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-link[aria-current="page"]::before {
35
36
  background: var(--rb-accent);
36
37
  }
37
- :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-link.rb-link--active {
38
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-link.rb-link--active,
39
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-link[aria-current="page"] {
38
40
  background: var(--rb-accent-wash);
39
41
  color: var(--rb-accent);
40
42
  }
@@ -42,7 +42,8 @@
42
42
  transition: background-color var(--rb-transition);
43
43
  }
44
44
  :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-stepper__step:not(:first-child).rb-stepper--complete::before,
45
- :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before {
45
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before,
46
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-stepper__step[aria-current="step"]::before {
46
47
  background: var(--rb-accent);
47
48
  }
48
49
  :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-stepper__node {
@@ -69,13 +70,15 @@
69
70
  :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-stepper--complete .rb-stepper__label {
70
71
  color: var(--rb-text);
71
72
  }
72
- :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-stepper--current .rb-stepper__node {
73
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-stepper--current .rb-stepper__node,
74
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-stepper__step[aria-current="step"] .rb-stepper__node {
73
75
  background: var(--rb-surface);
74
76
  border-color: var(--rb-accent);
75
77
  color: var(--rb-accent);
76
78
  box-shadow: var(--rb-shadow-lg);
77
79
  }
78
- :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-stepper--current .rb-stepper__label {
80
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-stepper--current .rb-stepper__label,
81
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-stepper__step[aria-current="step"] .rb-stepper__label {
79
82
  color: var(--rb-accent);
80
83
  font-weight: var(--rb-font-weight-medium);
81
84
  }
@@ -21,10 +21,12 @@
21
21
  :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-tab:hover {
22
22
  color: var(--rb-text);
23
23
  }
24
- :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-tab.rb-tab--active {
24
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-tab.rb-tab--active,
25
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-tab[aria-selected="true"] {
25
26
  color: var(--rb-accent);
26
27
  }
27
- :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-tab.rb-tab--active::after {
28
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-tab.rb-tab--active::after,
29
+ :where([data-rb-style="arcane-obsidian"], [data-rb-style="arcane-obsidian"] *).rb-tab[aria-selected="true"]::after {
28
30
  content: "";
29
31
  position: absolute;
30
32
  left: var(--rb-space-3);
@@ -49,8 +49,9 @@ Muted-on-surface is tuned to clear WCAG AA (4.5:1) on every surface; the light
49
49
  weight 600, tight tracking (`-0.01em`). Monospace *is* the display voice.
50
50
  - **Body & UI:** `system-ui, -apple-system, "Segoe UI", Roboto, …`, weight 400.
51
51
  - **Numerals:** `font-variant-numeric: tabular-nums` everywhere data is shown.
52
- - **Labels** (eyebrows, badges, table headers): mono, uppercase, ~11px, tracked
53
- `0.06em`.
52
+ - **Labels** (eyebrows, badges): mono, uppercase, ~11px, tracked `0.06em`.
53
+ Table headers are the one stated departure — body-sans, normal case
54
+ (`components/table.css:9-15`; badges stay mono uppercase, `badge.css:10-14`).
54
55
  - **Bare tags:** unclassed `h1`-`h6` pick up the mono display voice directly —
55
56
  weight 600, tracking `-0.01em`, `--rb-space-3` margin below. `.rb-card`
56
57
  renders a bare `<h3>` and gets this treatment too, since `card.css` declares
@@ -140,8 +141,8 @@ voices reused, never new decorative hues.
140
141
 
141
142
  ## Light counterpart — "Parchment"
142
143
 
143
- The AA-tuned light secondary. Not shipped as a separate theme yet; documented so
144
- it can become one additively.
144
+ The AA-tuned light secondary, shipped as its own theme: `arcane-parchment`
145
+ (`styles/arcane-parchment/design.md`).
145
146
 
146
147
  | Role | Value |
147
148
  | --- | --- |
@@ -11,8 +11,8 @@
11
11
  * Every theme declares the same baseline token set (styles/test enforces
12
12
  * parity); names marked (extra) are additions beyond it that only this
13
13
  * theme's own component CSS may rely on. This theme ships its dark, primary
14
- * look ("Obsidian"); its AA-tuned light counterpart ("Parchment") is
15
- * documented in design.md and can become its own theme later.
14
+ * look ("Obsidian"); its AA-tuned light counterpart ("Parchment") ships as
15
+ * its own theme, arcane-parchment (see design.md).
16
16
  */
17
17
  :where([data-rb-style="arcane-obsidian"]) {
18
18
  color-scheme: dark;
@@ -31,10 +31,12 @@
31
31
  transition: background var(--rb-transition);
32
32
  }
33
33
  :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-link:hover::before,
34
- :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-link.rb-link--active::before {
34
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-link.rb-link--active::before,
35
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-link[aria-current="page"]::before {
35
36
  background: var(--rb-accent);
36
37
  }
37
- :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-link.rb-link--active {
38
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-link.rb-link--active,
39
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-link[aria-current="page"] {
38
40
  background: var(--rb-accent-wash);
39
41
  color: var(--rb-accent);
40
42
  }
@@ -42,7 +42,8 @@
42
42
  transition: background-color var(--rb-transition);
43
43
  }
44
44
  :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-stepper__step:not(:first-child).rb-stepper--complete::before,
45
- :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before {
45
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before,
46
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-stepper__step[aria-current="step"]::before {
46
47
  background: var(--rb-accent);
47
48
  }
48
49
  :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-stepper__node {
@@ -69,13 +70,15 @@
69
70
  :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-stepper--complete .rb-stepper__label {
70
71
  color: var(--rb-text);
71
72
  }
72
- :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-stepper--current .rb-stepper__node {
73
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-stepper--current .rb-stepper__node,
74
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-stepper__step[aria-current="step"] .rb-stepper__node {
73
75
  background: var(--rb-surface);
74
76
  border-color: var(--rb-accent);
75
77
  color: var(--rb-accent);
76
78
  box-shadow: var(--rb-shadow-lg);
77
79
  }
78
- :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-stepper--current .rb-stepper__label {
80
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-stepper--current .rb-stepper__label,
81
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-stepper__step[aria-current="step"] .rb-stepper__label {
79
82
  color: var(--rb-accent);
80
83
  font-weight: var(--rb-font-weight-medium);
81
84
  }
@@ -21,10 +21,12 @@
21
21
  :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-tab:hover {
22
22
  color: var(--rb-text);
23
23
  }
24
- :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-tab.rb-tab--active {
24
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-tab.rb-tab--active,
25
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-tab[aria-selected="true"] {
25
26
  color: var(--rb-accent);
26
27
  }
27
- :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-tab.rb-tab--active::after {
28
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-tab.rb-tab--active::after,
29
+ :where([data-rb-style="arcane-parchment"], [data-rb-style="arcane-parchment"] *).rb-tab[aria-selected="true"]::after {
28
30
  content: "";
29
31
  position: absolute;
30
32
  left: var(--rb-space-3);
@@ -45,7 +45,9 @@ hues appear. Muted-on-surface is tuned to clear WCAG AA (4.5:1) on every surface
45
45
 
46
46
  Identical to arcane-obsidian: monospace display voice (the wordmark, weight 600,
47
47
  tracking `-0.01em`) over a `system-ui` body (weight 400); `tabular-nums` wherever
48
- data is shown; mono uppercase labels tracked `0.06em`. Bare `h1`-`h6`/`p`/`ul`/`ol`
48
+ data is shown; mono uppercase labels tracked `0.06em` (table headers are the
49
+ one stated departure — body-sans, normal case, `components/table.css:9-15`).
50
+ Bare `h1`-`h6`/`p`/`ul`/`ol`
49
51
  get the same treatment as arcane-obsidian too: unclassed headlines carry that
50
52
  same mono voice with `--rb-space-3` margin, and bare `ul`/`ol` add
51
53
  `--rb-space-4` marker indent with real disc/decimal markers.
@@ -28,10 +28,12 @@
28
28
  background: var(--rb-surface-2);
29
29
  }
30
30
  :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-link:hover::before,
31
- :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-link.rb-link--active::before {
31
+ :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-link.rb-link--active::before,
32
+ :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-link[aria-current="page"]::before {
32
33
  background: var(--rb-accent);
33
34
  }
34
- :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-link.rb-link--active {
35
+ :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-link.rb-link--active,
36
+ :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-link[aria-current="page"] {
35
37
  background: var(--rb-accent-wash);
36
38
  color: var(--rb-accent);
37
39
  font-weight: var(--rb-font-weight-bold);
@@ -42,7 +42,8 @@
42
42
  z-index: -1;
43
43
  }
44
44
  :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper__step:not(:first-child).rb-stepper--complete::before,
45
- :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before {
45
+ :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before,
46
+ :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper__step[aria-current="step"]::before {
46
47
  background: var(--rb-accent);
47
48
  }
48
49
  :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper__node {
@@ -71,13 +72,15 @@
71
72
  :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper--complete .rb-stepper__label {
72
73
  color: var(--rb-text);
73
74
  }
74
- :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper--current .rb-stepper__node {
75
+ :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper--current .rb-stepper__node,
76
+ :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper__step[aria-current="step"] .rb-stepper__node {
75
77
  background: var(--rb-surface);
76
78
  border-color: var(--rb-accent);
77
79
  color: var(--rb-accent);
78
80
  box-shadow: var(--rb-shadow-lg);
79
81
  }
80
- :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper--current .rb-stepper__label {
82
+ :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper--current .rb-stepper__label,
83
+ :where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper__step[aria-current="step"] .rb-stepper__label {
81
84
  color: var(--rb-accent);
82
85
  font-weight: var(--rb-font-weight-bold);
83
86
  }
@@ -28,10 +28,12 @@
28
28
  background: var(--rb-surface-2);
29
29
  }
30
30
  :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-link:hover::before,
31
- :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-link.rb-link--active::before {
31
+ :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-link.rb-link--active::before,
32
+ :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-link[aria-current="page"]::before {
32
33
  background: var(--rb-accent);
33
34
  }
34
- :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-link.rb-link--active {
35
+ :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-link.rb-link--active,
36
+ :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-link[aria-current="page"] {
35
37
  background: var(--rb-accent-wash);
36
38
  color: var(--rb-accent);
37
39
  font-weight: var(--rb-font-weight-bold);
@@ -43,7 +43,8 @@
43
43
  z-index: -1;
44
44
  }
45
45
  :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper__step:not(:first-child).rb-stepper--complete::before,
46
- :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before {
46
+ :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before,
47
+ :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper__step[aria-current="step"]::before {
47
48
  background: var(--rb-accent);
48
49
  }
49
50
  :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper__node {
@@ -72,13 +73,15 @@
72
73
  :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper--complete .rb-stepper__label {
73
74
  color: var(--rb-text);
74
75
  }
75
- :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper--current .rb-stepper__node {
76
+ :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper--current .rb-stepper__node,
77
+ :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper__step[aria-current="step"] .rb-stepper__node {
76
78
  background: var(--rb-surface);
77
79
  border-color: var(--rb-accent);
78
80
  color: var(--rb-accent);
79
81
  box-shadow: var(--rb-shadow-lg);
80
82
  }
81
- :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper--current .rb-stepper__label {
83
+ :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper--current .rb-stepper__label,
84
+ :where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper__step[aria-current="step"] .rb-stepper__label {
82
85
  color: var(--rb-accent);
83
86
  font-weight: var(--rb-font-weight-bold);
84
87
  }
package/contract.json CHANGED
@@ -27,7 +27,7 @@
27
27
  "link": {
28
28
  "react": "NavLink",
29
29
  "classes": ["rb-link", "rb-link--active"],
30
- "notes": "active prop; SHOULD also match [aria-current=\"page\"] (pending CSS sweep, #65)"
30
+ "notes": "active prop; also matches [aria-current=\"page\"] in every theme"
31
31
  },
32
32
  "nav-rail": {
33
33
  "react": "NavRail",
@@ -57,7 +57,7 @@
57
57
  "tabs": {
58
58
  "react": "Tabs",
59
59
  "classes": ["rb-tabs", "rb-tab", "rb-tab--active", "rb-tabpanel"],
60
- "notes": "items: {id, label, content}[]; --active SHOULD also match [aria-selected=\"true\"] (pending CSS sweep, #65)"
60
+ "notes": "items: {id, label, content}[]; --active also matches [aria-selected=\"true\"] in every theme"
61
61
  },
62
62
  "table": {
63
63
  "react": null,
@@ -87,7 +87,7 @@
87
87
  "stepper": {
88
88
  "react": "Stepper",
89
89
  "classes": ["rb-stepper", "rb-stepper__step", "rb-stepper__node", "rb-stepper__label", "rb-stepper--complete", "rb-stepper--current", "rb-stepper--upcoming"],
90
- "notes": "--upcoming is the resting state (allowlisted, no rule needed); --current SHOULD also match [aria-current=\"step\"] (pending CSS sweep, #65)"
90
+ "notes": "--upcoming is the resting state (allowlisted, no rule needed); --current also matches [aria-current=\"step\"] in every theme"
91
91
  }
92
92
  },
93
93
  "allowlist": [
@@ -131,62 +131,28 @@
131
131
  "class": "rb-tab--active",
132
132
  "attribute": "[aria-selected=\"true\"]",
133
133
  "baseSelector": "rb-tab",
134
- "exempt": [
135
- { "theme": "arcane-obsidian", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
136
- { "theme": "arcane-parchment", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
137
- { "theme": "rackbops-studio", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
138
- { "theme": "rackbops-noir", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
139
- { "theme": "amber-hearth", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
140
- { "theme": "amber-ember", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" }
141
- ]
134
+ "exempt": []
142
135
  },
143
136
  {
144
137
  "component": "link",
145
138
  "class": "rb-link--active",
146
139
  "attribute": "[aria-current=\"page\"]",
147
140
  "baseSelector": "rb-link",
148
- "exempt": [
149
- { "theme": "amber-ember", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
150
- { "theme": "amber-hearth", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
151
- { "theme": "arcane-obsidian", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
152
- { "theme": "arcane-parchment", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
153
- { "theme": "concrete-signal", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
154
- { "theme": "concrete-signal-light", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
155
- { "theme": "luminous-precision", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
156
- { "theme": "mono-field", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
157
- { "theme": "neon-butterfly", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
158
- { "theme": "rackbops-noir", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
159
- { "theme": "rackbops-studio", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" }
160
- ]
141
+ "exempt": []
161
142
  },
162
143
  {
163
144
  "component": "stepper",
164
145
  "class": "rb-stepper--current",
165
146
  "attribute": "[aria-current=\"step\"]",
166
147
  "baseSelector": "rb-stepper__step",
167
- "exempt": [
168
- { "theme": "amber-ember", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
169
- { "theme": "amber-hearth", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
170
- { "theme": "arcane-obsidian", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
171
- { "theme": "arcane-parchment", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
172
- { "theme": "concrete-signal", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
173
- { "theme": "concrete-signal-light", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
174
- { "theme": "luminous-precision", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
175
- { "theme": "mono-field", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
176
- { "theme": "neon-butterfly", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
177
- { "theme": "rackbops-noir", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
178
- { "theme": "rackbops-studio", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" },
179
- { "theme": "summer-cloud", "reason": "pending ARIA-pairing CSS sweep, tracked in #65" }
180
- ]
148
+ "exempt": []
181
149
  }
182
150
  ],
183
151
  "dialogBackdropBlur": {
184
152
  "token": "--rb-blur",
185
153
  "exempt": [
186
154
  { "theme": "concrete-signal", "reason": "flat scrim by design, no blur/glass anywhere in this theme", "permanent": true },
187
- { "theme": "concrete-signal-light", "reason": "flat scrim by design, no blur/glass anywhere in this theme", "permanent": true },
188
- { "theme": "neon-butterfly", "reason": "hard-codes blur(4px), pending CSS fix, tracked in #65" },
189
- { "theme": "summer-cloud", "reason": "hard-codes blur(4px), pending CSS fix, tracked in #65" }
155
+ { "theme": "concrete-signal-light", "reason": "flat scrim by design, no blur/glass anywhere in this theme", "permanent": true }
190
156
  ]
191
157
  }
192
158
  }
@@ -29,7 +29,8 @@
29
29
  0 0 12px var(--rb-accent-2-glow);
30
30
  }
31
31
  /* --active: the current route, styled as the resting version of :hover */
32
- :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-link--active {
32
+ :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-link--active,
33
+ :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-link[aria-current="page"] {
33
34
  background: var(--rb-surface);
34
35
  color: var(--rb-accent-2);
35
36
  box-shadow:
@@ -43,7 +43,8 @@
43
43
  transition: background-color var(--rb-transition), box-shadow var(--rb-transition);
44
44
  }
45
45
  :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-stepper__step:not(:first-child).rb-stepper--complete::before,
46
- :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before {
46
+ :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before,
47
+ :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-stepper__step[aria-current="step"]::before {
47
48
  background: var(--rb-accent);
48
49
  box-shadow: 0 0 8px var(--rb-accent-glow);
49
50
  }
@@ -71,13 +72,15 @@
71
72
  :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-stepper--complete .rb-stepper__label {
72
73
  color: var(--rb-text);
73
74
  }
74
- :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-stepper--current .rb-stepper__node {
75
+ :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-stepper--current .rb-stepper__node,
76
+ :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-stepper__step[aria-current="step"] .rb-stepper__node {
75
77
  background: var(--rb-surface);
76
78
  border-color: var(--rb-accent);
77
79
  color: var(--rb-accent);
78
80
  box-shadow: 0 0 8px var(--rb-accent-glow);
79
81
  }
80
- :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-stepper--current .rb-stepper__label {
82
+ :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-stepper--current .rb-stepper__label,
83
+ :where([data-rb-style="luminous-precision"], [data-rb-style="luminous-precision"] *).rb-stepper__step[aria-current="step"] .rb-stepper__label {
81
84
  color: var(--rb-accent);
82
85
  font-weight: var(--rb-font-weight-medium);
83
86
  }
@@ -32,10 +32,12 @@
32
32
  transition: background var(--rb-transition);
33
33
  }
34
34
  :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-link:hover::before,
35
- :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-link.rb-link--active::before {
35
+ :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-link.rb-link--active::before,
36
+ :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-link[aria-current="page"]::before {
36
37
  background: var(--rb-accent);
37
38
  }
38
- :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-link.rb-link--active {
39
+ :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-link.rb-link--active,
40
+ :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-link[aria-current="page"] {
39
41
  background: var(--rb-surface-2);
40
42
  color: var(--rb-accent);
41
43
  }
@@ -42,7 +42,8 @@
42
42
  transition: background-color var(--rb-transition);
43
43
  }
44
44
  :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper__step:not(:first-child).rb-stepper--complete::before,
45
- :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before {
45
+ :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before,
46
+ :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper__step[aria-current="step"]::before {
46
47
  background: var(--rb-accent);
47
48
  }
48
49
  :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper__node {
@@ -69,12 +70,14 @@
69
70
  :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper--complete .rb-stepper__label {
70
71
  color: var(--rb-text);
71
72
  }
72
- :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper--current .rb-stepper__node {
73
+ :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper--current .rb-stepper__node,
74
+ :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper__step[aria-current="step"] .rb-stepper__node {
73
75
  background: var(--rb-surface);
74
76
  border-color: var(--rb-accent);
75
77
  color: var(--rb-accent);
76
78
  }
77
- :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper--current .rb-stepper__label {
79
+ :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper--current .rb-stepper__label,
80
+ :where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper__step[aria-current="step"] .rb-stepper__label {
78
81
  color: var(--rb-accent);
79
82
  font-weight: var(--rb-font-weight-medium);
80
83
  }
@@ -87,8 +87,10 @@ and the accent itself is spent sparingly — never for decoration.
87
87
 
88
88
  ## Components
89
89
 
90
- Class prefix `rb-`; shared token/class contract with the other themes. Only
91
- the baseline ten no theme extras.
90
+ Class prefix `rb-`; shared token/class contract with the other themes (the
91
+ full required set is `styles/contract.json` / STANDARD.md 5.1 — not restated
92
+ as a count here, since that count has drifted before) — no theme-specific
93
+ extras.
92
94
 
93
95
  - **Button** `.rb-btn` — plain bordered ghost on white by default;
94
96
  `--primary` is the one solid accent fill (barely-there shadow lift on
@@ -12,7 +12,7 @@
12
12
  }
13
13
  :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-dialog::backdrop {
14
14
  background: rgba(11, 19, 38, 0.7);
15
- backdrop-filter: blur(4px);
15
+ backdrop-filter: blur(var(--rb-blur));
16
16
  }
17
17
  :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-dialog__title {
18
18
  margin: 0 0 var(--rb-space-3);
@@ -36,11 +36,13 @@
36
36
  }
37
37
  /* --active: the current route — the hover color/glow, resting, without the
38
38
  * hover-only slide (that's a click-me cue; an active item is already "here"). */
39
- :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-link--active {
39
+ :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-link--active,
40
+ :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-link[aria-current="page"] {
40
41
  border-color: var(--rb-accent-border);
41
42
  color: var(--rb-accent);
42
43
  }
43
- :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-link--active::before {
44
+ :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-link--active::before,
45
+ :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-link[aria-current="page"]::before {
44
46
  color: var(--rb-accent-2);
45
47
  text-shadow: 0 0 5px var(--rb-accent-2-glow);
46
48
  }
@@ -43,7 +43,8 @@
43
43
  transition: background-color var(--rb-transition), box-shadow var(--rb-transition);
44
44
  }
45
45
  :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-stepper__step:not(:first-child).rb-stepper--complete::before,
46
- :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before {
46
+ :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before,
47
+ :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-stepper__step[aria-current="step"]::before {
47
48
  background: var(--rb-accent);
48
49
  box-shadow: 0 0 8px var(--rb-accent-glow);
49
50
  }
@@ -71,13 +72,15 @@
71
72
  :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-stepper--complete .rb-stepper__label {
72
73
  color: var(--rb-text);
73
74
  }
74
- :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-stepper--current .rb-stepper__node {
75
+ :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-stepper--current .rb-stepper__node,
76
+ :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-stepper__step[aria-current="step"] .rb-stepper__node {
75
77
  background: var(--rb-surface);
76
78
  border-color: var(--rb-accent);
77
79
  color: var(--rb-accent);
78
80
  box-shadow: 0 0 8px var(--rb-accent-glow);
79
81
  }
80
- :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-stepper--current .rb-stepper__label {
82
+ :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-stepper--current .rb-stepper__label,
83
+ :where([data-rb-style="neon-butterfly"], [data-rb-style="neon-butterfly"] *).rb-stepper__step[aria-current="step"] .rb-stepper__label {
81
84
  color: var(--rb-accent);
82
85
  font-weight: var(--rb-font-weight-medium);
83
86
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rackbops/styles",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Rackbops design-system styles: tokens, base styles, and component classes per theme.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -20,7 +20,8 @@
20
20
  color: var(--rb-text);
21
21
  background: var(--rb-surface-2);
22
22
  }
23
- :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-link.rb-link--active {
23
+ :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-link.rb-link--active,
24
+ :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-link[aria-current="page"] {
24
25
  color: var(--rb-accent);
25
26
  }
26
27
 
@@ -42,7 +42,8 @@
42
42
  transition: background-color var(--rb-transition);
43
43
  }
44
44
  :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-stepper__step:not(:first-child).rb-stepper--complete::before,
45
- :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before {
45
+ :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before,
46
+ :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-stepper__step[aria-current="step"]::before {
46
47
  background: var(--rb-accent);
47
48
  }
48
49
  :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-stepper__node {
@@ -69,13 +70,15 @@
69
70
  :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-stepper--complete .rb-stepper__label {
70
71
  color: var(--rb-text);
71
72
  }
72
- :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-stepper--current .rb-stepper__node {
73
+ :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-stepper--current .rb-stepper__node,
74
+ :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-stepper__step[aria-current="step"] .rb-stepper__node {
73
75
  background: var(--rb-surface);
74
76
  border-color: var(--rb-accent);
75
77
  color: var(--rb-accent);
76
78
  box-shadow: var(--rb-shadow-lg);
77
79
  }
78
- :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-stepper--current .rb-stepper__label {
80
+ :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-stepper--current .rb-stepper__label,
81
+ :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-stepper__step[aria-current="step"] .rb-stepper__label {
79
82
  color: var(--rb-accent);
80
83
  font-weight: var(--rb-font-weight-medium);
81
84
  }
@@ -21,10 +21,12 @@
21
21
  :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-tab:hover {
22
22
  color: var(--rb-text);
23
23
  }
24
- :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-tab.rb-tab--active {
24
+ :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-tab.rb-tab--active,
25
+ :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-tab[aria-selected="true"] {
25
26
  color: var(--rb-text);
26
27
  }
27
- :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-tab.rb-tab--active::after {
28
+ :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-tab.rb-tab--active::after,
29
+ :where([data-rb-style="rackbops-noir"], [data-rb-style="rackbops-noir"] *).rb-tab[aria-selected="true"]::after {
28
30
  content: "";
29
31
  position: absolute;
30
32
  left: 0;
@@ -20,7 +20,8 @@
20
20
  color: var(--rb-text);
21
21
  background: var(--rb-surface-2);
22
22
  }
23
- :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-link.rb-link--active {
23
+ :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-link.rb-link--active,
24
+ :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-link[aria-current="page"] {
24
25
  color: var(--rb-accent);
25
26
  }
26
27
 
@@ -42,7 +42,8 @@
42
42
  transition: background-color var(--rb-transition);
43
43
  }
44
44
  :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-stepper__step:not(:first-child).rb-stepper--complete::before,
45
- :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before {
45
+ :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before,
46
+ :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-stepper__step[aria-current="step"]::before {
46
47
  background: var(--rb-accent);
47
48
  }
48
49
  :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-stepper__node {
@@ -69,13 +70,15 @@
69
70
  :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-stepper--complete .rb-stepper__label {
70
71
  color: var(--rb-text);
71
72
  }
72
- :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-stepper--current .rb-stepper__node {
73
+ :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-stepper--current .rb-stepper__node,
74
+ :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-stepper__step[aria-current="step"] .rb-stepper__node {
73
75
  background: var(--rb-surface);
74
76
  border-color: var(--rb-accent);
75
77
  color: var(--rb-accent);
76
78
  box-shadow: var(--rb-shadow-lg);
77
79
  }
78
- :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-stepper--current .rb-stepper__label {
80
+ :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-stepper--current .rb-stepper__label,
81
+ :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-stepper__step[aria-current="step"] .rb-stepper__label {
79
82
  color: var(--rb-accent);
80
83
  font-weight: var(--rb-font-weight-medium);
81
84
  }
@@ -21,10 +21,12 @@
21
21
  :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-tab:hover {
22
22
  color: var(--rb-text);
23
23
  }
24
- :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-tab.rb-tab--active {
24
+ :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-tab.rb-tab--active,
25
+ :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-tab[aria-selected="true"] {
25
26
  color: var(--rb-text);
26
27
  }
27
- :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-tab.rb-tab--active::after {
28
+ :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-tab.rb-tab--active::after,
29
+ :where([data-rb-style="rackbops-studio"], [data-rb-style="rackbops-studio"] *).rb-tab[aria-selected="true"]::after {
28
30
  content: "";
29
31
  position: absolute;
30
32
  left: 0;
@@ -167,8 +167,8 @@ Class prefix `rb-`; shared token/class contract with the other themes.
167
167
 
168
168
  ## Dark counterpart
169
169
 
170
- The dark mode rackbops.com toggles into. Not shipped as a separate theme yet;
171
- documented so it can become one additively.
170
+ The dark mode rackbops.com toggles into, shipped as its own theme:
171
+ `rackbops-noir` (`styles/rackbops-noir/design.md`).
172
172
 
173
173
  | Role | Value |
174
174
  | --- | --- |
@@ -8,8 +8,8 @@
8
8
  * The :where() keeps specificity at zero, so any consumer rule overrides.
9
9
  *
10
10
  * This theme ships its canonical, primary look (light); the dark counterpart
11
- * that rackbops.com toggles into is documented in design.md and can become its
12
- * own theme later. Every theme declares the same baseline token set (styles/test
11
+ * that rackbops.com toggles into ships as its own theme, rackbops-noir (see
12
+ * design.md). Every theme declares the same baseline token set (styles/test
13
13
  * enforces parity); names marked (extra) are additions this theme's own
14
14
  * component CSS may rely on.
15
15
  */
@@ -12,7 +12,7 @@
12
12
  }
13
13
  :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-dialog::backdrop {
14
14
  background: rgba(23, 28, 31, 0.3);
15
- backdrop-filter: blur(4px);
15
+ backdrop-filter: blur(var(--rb-blur));
16
16
  }
17
17
  :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-dialog__title {
18
18
  margin: 0 0 var(--rb-space-3);
@@ -44,7 +44,8 @@
44
44
  transition: background-color var(--rb-transition), box-shadow var(--rb-transition);
45
45
  }
46
46
  :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-stepper__step:not(:first-child).rb-stepper--complete::before,
47
- :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before {
47
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-stepper__step:not(:first-child).rb-stepper--current::before,
48
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-stepper__step[aria-current="step"]::before {
48
49
  background: var(--rb-accent);
49
50
  box-shadow: 0 0 10px var(--rb-accent-glow);
50
51
  }
@@ -72,13 +73,15 @@
72
73
  :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-stepper--complete .rb-stepper__label {
73
74
  color: var(--rb-text);
74
75
  }
75
- :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-stepper--current .rb-stepper__node {
76
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-stepper--current .rb-stepper__node,
77
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-stepper__step[aria-current="step"] .rb-stepper__node {
76
78
  background: var(--rb-surface);
77
79
  border-color: var(--rb-accent);
78
80
  color: var(--rb-accent);
79
81
  box-shadow: var(--rb-shadow-raised);
80
82
  }
81
- :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-stepper--current .rb-stepper__label {
83
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-stepper--current .rb-stepper__label,
84
+ :where([data-rb-style="summer-cloud"], [data-rb-style="summer-cloud"] *).rb-stepper__step[aria-current="step"] .rb-stepper__label {
82
85
  color: var(--rb-accent);
83
86
  font-weight: var(--rb-font-weight-medium);
84
87
  }