@rackbops/styles 0.1.0 → 0.1.2
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/all.css +5 -0
- package/amber-ember/base.css +61 -0
- package/amber-ember/components/alert.css +30 -0
- package/amber-ember/components/badge.css +32 -0
- package/amber-ember/components/button.css +90 -0
- package/amber-ember/components/card.css +24 -0
- package/amber-ember/components/dialog.css +33 -0
- package/amber-ember/components/form.css +72 -0
- package/amber-ember/components/link.css +47 -0
- package/amber-ember/components/log.css +19 -0
- package/amber-ember/components/muted.css +7 -0
- package/amber-ember/components/nav-rail.css +14 -0
- package/amber-ember/components/pre.css +13 -0
- package/amber-ember/components/progress.css +42 -0
- package/amber-ember/components/stepper.css +87 -0
- package/amber-ember/components/table.css +50 -0
- package/amber-ember/components/tabs.css +46 -0
- package/amber-ember/design.md +78 -0
- package/amber-ember/index.css +18 -0
- package/amber-ember/tokens.css +72 -0
- package/amber-hearth/base.css +61 -0
- package/amber-hearth/components/alert.css +30 -0
- package/amber-hearth/components/badge.css +32 -0
- package/amber-hearth/components/button.css +90 -0
- package/amber-hearth/components/card.css +24 -0
- package/amber-hearth/components/dialog.css +33 -0
- package/amber-hearth/components/form.css +72 -0
- package/amber-hearth/components/link.css +47 -0
- package/amber-hearth/components/log.css +19 -0
- package/amber-hearth/components/muted.css +7 -0
- package/amber-hearth/components/nav-rail.css +14 -0
- package/amber-hearth/components/pre.css +13 -0
- package/amber-hearth/components/progress.css +42 -0
- package/amber-hearth/components/stepper.css +87 -0
- package/amber-hearth/components/table.css +50 -0
- package/amber-hearth/components/tabs.css +46 -0
- package/amber-hearth/design.md +146 -0
- package/amber-hearth/index.css +18 -0
- package/amber-hearth/tokens.css +77 -0
- package/arcane-obsidian/base.css +20 -0
- package/arcane-obsidian/components/button.css +15 -0
- package/arcane-obsidian/components/log.css +19 -0
- package/arcane-obsidian/components/muted.css +7 -0
- package/arcane-obsidian/components/nav-rail.css +14 -0
- package/arcane-obsidian/components/pre.css +13 -0
- package/arcane-obsidian/components/stepper.css +87 -0
- package/arcane-obsidian/components/table.css +14 -0
- package/arcane-obsidian/design.md +30 -2
- package/arcane-obsidian/index.css +5 -0
- package/arcane-parchment/base.css +20 -0
- package/arcane-parchment/components/button.css +15 -0
- package/arcane-parchment/components/log.css +19 -0
- package/arcane-parchment/components/muted.css +7 -0
- package/arcane-parchment/components/nav-rail.css +14 -0
- package/arcane-parchment/components/pre.css +13 -0
- package/arcane-parchment/components/stepper.css +87 -0
- package/arcane-parchment/components/table.css +14 -0
- package/arcane-parchment/design.md +10 -6
- package/arcane-parchment/index.css +5 -0
- package/concrete-signal/base.css +57 -0
- package/concrete-signal/components/alert.css +44 -0
- package/concrete-signal/components/badge.css +38 -0
- package/concrete-signal/components/button.css +98 -0
- package/concrete-signal/components/card.css +21 -0
- package/concrete-signal/components/dialog.css +33 -0
- package/concrete-signal/components/form.css +138 -0
- package/concrete-signal/components/link.css +44 -0
- package/concrete-signal/components/log.css +19 -0
- package/concrete-signal/components/muted.css +7 -0
- package/concrete-signal/components/nav-rail.css +15 -0
- package/concrete-signal/components/pre.css +14 -0
- package/concrete-signal/components/progress.css +44 -0
- package/concrete-signal/components/stepper.css +83 -0
- package/concrete-signal/components/table.css +48 -0
- package/concrete-signal/components/tabs.css +49 -0
- package/concrete-signal/design.md +171 -0
- package/concrete-signal/index.css +18 -0
- package/concrete-signal/tokens.css +75 -0
- package/concrete-signal-light/base.css +57 -0
- package/concrete-signal-light/components/alert.css +44 -0
- package/concrete-signal-light/components/badge.css +38 -0
- package/concrete-signal-light/components/button.css +98 -0
- package/concrete-signal-light/components/card.css +21 -0
- package/concrete-signal-light/components/dialog.css +33 -0
- package/concrete-signal-light/components/form.css +138 -0
- package/concrete-signal-light/components/link.css +44 -0
- package/concrete-signal-light/components/log.css +19 -0
- package/concrete-signal-light/components/muted.css +7 -0
- package/concrete-signal-light/components/nav-rail.css +15 -0
- package/concrete-signal-light/components/pre.css +14 -0
- package/concrete-signal-light/components/progress.css +44 -0
- package/concrete-signal-light/components/stepper.css +84 -0
- package/concrete-signal-light/components/table.css +48 -0
- package/concrete-signal-light/components/tabs.css +49 -0
- package/concrete-signal-light/design.md +82 -0
- package/concrete-signal-light/index.css +18 -0
- package/concrete-signal-light/tokens.css +75 -0
- package/css-side-effect.d.ts +5 -0
- package/luminous-precision/base.css +12 -0
- package/luminous-precision/components/button.css +25 -0
- package/luminous-precision/components/link.css +8 -0
- package/luminous-precision/components/log.css +19 -0
- package/luminous-precision/components/muted.css +7 -0
- package/luminous-precision/components/nav-rail.css +17 -0
- package/luminous-precision/components/pre.css +14 -0
- package/luminous-precision/components/progress.css +14 -5
- package/luminous-precision/components/stepper.css +89 -0
- package/luminous-precision/components/table.css +17 -0
- package/luminous-precision/design.md +44 -9
- package/luminous-precision/index.css +5 -0
- package/manifest.json +20 -0
- package/mono-field/base.css +59 -0
- package/mono-field/components/alert.css +35 -0
- package/mono-field/components/badge.css +34 -0
- package/mono-field/components/button.css +101 -0
- package/mono-field/components/card.css +20 -0
- package/mono-field/components/dialog.css +34 -0
- package/mono-field/components/form.css +91 -0
- package/mono-field/components/link.css +47 -0
- package/mono-field/components/log.css +19 -0
- package/mono-field/components/muted.css +7 -0
- package/mono-field/components/nav-rail.css +14 -0
- package/mono-field/components/pre.css +13 -0
- package/mono-field/components/progress.css +42 -0
- package/mono-field/components/stepper.css +86 -0
- package/mono-field/components/table.css +47 -0
- package/mono-field/components/tabs.css +48 -0
- package/mono-field/design.md +151 -0
- package/mono-field/index.css +18 -0
- package/mono-field/tokens.css +76 -0
- package/neon-butterfly/base.css +18 -0
- package/neon-butterfly/components/button.css +26 -0
- package/neon-butterfly/components/link.css +10 -0
- package/neon-butterfly/components/log.css +19 -0
- package/neon-butterfly/components/muted.css +7 -0
- package/neon-butterfly/components/nav-rail.css +17 -0
- package/neon-butterfly/components/pre.css +13 -0
- package/neon-butterfly/components/progress.css +14 -5
- package/neon-butterfly/components/stepper.css +89 -0
- package/neon-butterfly/components/table.css +15 -0
- package/neon-butterfly/design.md +40 -4
- package/neon-butterfly/index.css +5 -0
- package/package.json +61 -32
- package/rackbops-noir/base.css +11 -2
- package/rackbops-noir/components/button.css +16 -0
- package/rackbops-noir/components/card.css +9 -0
- package/rackbops-noir/components/log.css +19 -0
- package/rackbops-noir/components/muted.css +7 -0
- package/rackbops-noir/components/nav-rail.css +14 -0
- package/rackbops-noir/components/pre.css +13 -0
- package/rackbops-noir/components/principle.css +1 -0
- package/rackbops-noir/components/stepper.css +87 -0
- package/rackbops-noir/components/table.css +18 -0
- package/rackbops-noir/design.md +6 -3
- package/rackbops-noir/index.css +5 -0
- package/rackbops-studio/base.css +11 -2
- package/rackbops-studio/components/button.css +16 -0
- package/rackbops-studio/components/card.css +9 -0
- package/rackbops-studio/components/log.css +19 -0
- package/rackbops-studio/components/muted.css +7 -0
- package/rackbops-studio/components/nav-rail.css +14 -0
- package/rackbops-studio/components/pre.css +13 -0
- package/rackbops-studio/components/principle.css +1 -0
- package/rackbops-studio/components/stepper.css +87 -0
- package/rackbops-studio/components/table.css +18 -0
- package/rackbops-studio/design.md +29 -2
- package/rackbops-studio/index.css +5 -0
- package/summer-cloud/base.css +13 -1
- package/summer-cloud/components/button.css +17 -0
- package/summer-cloud/components/log.css +19 -0
- package/summer-cloud/components/muted.css +8 -0
- package/summer-cloud/components/nav-rail.css +17 -0
- package/summer-cloud/components/pre.css +16 -0
- package/summer-cloud/components/progress.css +14 -8
- package/summer-cloud/components/stepper.css +90 -0
- package/summer-cloud/components/table.css +11 -0
- package/summer-cloud/design.md +41 -3
- package/summer-cloud/index.css +5 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/* concrete-signal-light — form controls: input, textarea, select, checkbox, radio, switch
|
|
2
|
+
* Sunken square-cornered fields; focus is a hard border-weight change (1px to
|
|
3
|
+
* 2px solid accent) — no soft wash ring, brutalism doesn't glow. Checked
|
|
4
|
+
* checkbox/radio/switch states are a flat accent fill, not a tinted ring. */
|
|
5
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-field {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
gap: var(--rb-space-1);
|
|
9
|
+
}
|
|
10
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-label {
|
|
11
|
+
color: var(--rb-text-soft);
|
|
12
|
+
text-transform: uppercase;
|
|
13
|
+
font-size: var(--rb-text-sm);
|
|
14
|
+
font-weight: var(--rb-font-weight-medium);
|
|
15
|
+
letter-spacing: var(--rb-label-tracking);
|
|
16
|
+
}
|
|
17
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-input,
|
|
18
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-textarea,
|
|
19
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-select {
|
|
20
|
+
display: block;
|
|
21
|
+
width: 100%;
|
|
22
|
+
padding: var(--rb-space-2) var(--rb-space-3);
|
|
23
|
+
background: var(--rb-surface-sunken);
|
|
24
|
+
border: 1px solid var(--rb-border);
|
|
25
|
+
border-radius: var(--rb-radius);
|
|
26
|
+
color: var(--rb-text);
|
|
27
|
+
font-family: var(--rb-font-body);
|
|
28
|
+
font-weight: var(--rb-font-weight);
|
|
29
|
+
font-size: var(--rb-text-sm);
|
|
30
|
+
transition: border-color var(--rb-transition);
|
|
31
|
+
}
|
|
32
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-textarea {
|
|
33
|
+
min-height: 5rem;
|
|
34
|
+
resize: vertical;
|
|
35
|
+
}
|
|
36
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-select {
|
|
37
|
+
appearance: none;
|
|
38
|
+
padding-right: 2.25rem;
|
|
39
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%235f5d58' stroke-width='1.5'/%3E%3C/svg%3E");
|
|
40
|
+
background-repeat: no-repeat;
|
|
41
|
+
background-position: right var(--rb-space-3) center;
|
|
42
|
+
}
|
|
43
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-input::placeholder,
|
|
44
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-textarea::placeholder {
|
|
45
|
+
color: var(--rb-text-faint);
|
|
46
|
+
}
|
|
47
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-input:focus,
|
|
48
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-textarea:focus,
|
|
49
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-select:focus {
|
|
50
|
+
outline: none;
|
|
51
|
+
border: 2px solid var(--rb-accent);
|
|
52
|
+
}
|
|
53
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-input[aria-invalid="true"],
|
|
54
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-textarea[aria-invalid="true"] {
|
|
55
|
+
border-color: var(--rb-danger);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-choice {
|
|
59
|
+
display: inline-flex;
|
|
60
|
+
align-items: center;
|
|
61
|
+
gap: var(--rb-space-2);
|
|
62
|
+
color: var(--rb-text);
|
|
63
|
+
font-size: var(--rb-text-sm);
|
|
64
|
+
cursor: pointer;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* checkbox & radio — square, sunken; checked is a flat accent fill framed by
|
|
68
|
+
an inset ring of the field background, not a glow */
|
|
69
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-checkbox,
|
|
70
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-radio {
|
|
71
|
+
appearance: none;
|
|
72
|
+
width: 1.1rem;
|
|
73
|
+
height: 1.1rem;
|
|
74
|
+
margin: 0;
|
|
75
|
+
vertical-align: text-bottom;
|
|
76
|
+
background: var(--rb-surface-sunken);
|
|
77
|
+
border: 1px solid var(--rb-border);
|
|
78
|
+
border-radius: var(--rb-radius);
|
|
79
|
+
cursor: pointer;
|
|
80
|
+
transition: border-color var(--rb-transition), background var(--rb-transition);
|
|
81
|
+
}
|
|
82
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-checkbox:checked,
|
|
83
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-radio:checked {
|
|
84
|
+
background: var(--rb-accent);
|
|
85
|
+
border-color: var(--rb-accent);
|
|
86
|
+
box-shadow: inset 0 0 0 3px var(--rb-surface-sunken);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* switch — square track and thumb; flat accent fill when on */
|
|
90
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-switch {
|
|
91
|
+
appearance: none;
|
|
92
|
+
position: relative;
|
|
93
|
+
width: 2.4rem;
|
|
94
|
+
height: 1.3rem;
|
|
95
|
+
margin: 0;
|
|
96
|
+
vertical-align: text-bottom;
|
|
97
|
+
background: var(--rb-surface-sunken);
|
|
98
|
+
border: 1px solid var(--rb-border);
|
|
99
|
+
border-radius: var(--rb-radius);
|
|
100
|
+
cursor: pointer;
|
|
101
|
+
transition: border-color var(--rb-transition);
|
|
102
|
+
}
|
|
103
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-switch::after {
|
|
104
|
+
content: "";
|
|
105
|
+
position: absolute;
|
|
106
|
+
top: 2px;
|
|
107
|
+
left: 2px;
|
|
108
|
+
width: calc(1.3rem - 6px);
|
|
109
|
+
height: calc(1.3rem - 6px);
|
|
110
|
+
background: var(--rb-text-faint);
|
|
111
|
+
transition: transform var(--rb-transition), background var(--rb-transition);
|
|
112
|
+
}
|
|
113
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-switch:checked {
|
|
114
|
+
border-color: var(--rb-accent);
|
|
115
|
+
}
|
|
116
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-switch:checked::after {
|
|
117
|
+
transform: translateX(1.1rem);
|
|
118
|
+
background: var(--rb-accent);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-checkbox:focus-visible,
|
|
122
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-radio:focus-visible,
|
|
123
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-switch:focus-visible {
|
|
124
|
+
outline: none;
|
|
125
|
+
border: 2px solid var(--rb-accent);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@media (prefers-reduced-motion: reduce) {
|
|
129
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-input,
|
|
130
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-textarea,
|
|
131
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-select,
|
|
132
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-checkbox,
|
|
133
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-radio,
|
|
134
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-switch,
|
|
135
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-switch::after {
|
|
136
|
+
transition: none;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/* concrete-signal-light — nav link (tree/sidebar row)
|
|
2
|
+
* Hover fills to surface-2 and stamps a hard 3px solid accent bar on the left
|
|
3
|
+
* edge — no gradient, no blur, no glow; active carries the accent wash plus
|
|
4
|
+
* the same bar and bold text. */
|
|
5
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-link {
|
|
6
|
+
position: relative;
|
|
7
|
+
display: flex;
|
|
8
|
+
align-items: center;
|
|
9
|
+
gap: var(--rb-space-2);
|
|
10
|
+
padding: var(--rb-space-2) var(--rb-space-3);
|
|
11
|
+
border-radius: var(--rb-radius);
|
|
12
|
+
color: var(--rb-text);
|
|
13
|
+
font-size: var(--rb-text-sm);
|
|
14
|
+
text-decoration: none;
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
transition: background var(--rb-transition), color var(--rb-transition);
|
|
17
|
+
}
|
|
18
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-link::before {
|
|
19
|
+
content: "";
|
|
20
|
+
position: absolute;
|
|
21
|
+
left: 0;
|
|
22
|
+
top: 0;
|
|
23
|
+
bottom: 0;
|
|
24
|
+
width: 3px;
|
|
25
|
+
background: transparent;
|
|
26
|
+
}
|
|
27
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-link:hover {
|
|
28
|
+
background: var(--rb-surface-2);
|
|
29
|
+
}
|
|
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 {
|
|
32
|
+
background: var(--rb-accent);
|
|
33
|
+
}
|
|
34
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-link.rb-link--active {
|
|
35
|
+
background: var(--rb-accent-wash);
|
|
36
|
+
color: var(--rb-accent);
|
|
37
|
+
font-weight: var(--rb-font-weight-bold);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@media (prefers-reduced-motion: reduce) {
|
|
41
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-link {
|
|
42
|
+
transition: none;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* concrete-signal-light — log / terminal block
|
|
2
|
+
* Pairs with .rb-pre for the shared look (surface-sunken well, hairline
|
|
3
|
+
* border, zero radius, small mono) -- .rb-log itself only adds what changes
|
|
4
|
+
* for multi-line streaming output: a capped height with vertical scroll,
|
|
5
|
+
* wrapped long lines instead of .rb-pre's horizontal scroll, and a touch
|
|
6
|
+
* more line-height so dense text stays readable. Use together on one
|
|
7
|
+
* element: <pre class="rb-pre rb-log">. */
|
|
8
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-log {
|
|
9
|
+
max-height: 16rem;
|
|
10
|
+
overflow-y: auto;
|
|
11
|
+
white-space: pre-wrap;
|
|
12
|
+
overflow-wrap: anywhere;
|
|
13
|
+
line-height: 1.5;
|
|
14
|
+
}
|
|
15
|
+
/* Specificity-pinned (not import-order-dependent) override of .rb-pre's
|
|
16
|
+
* overflow-x: auto -- .rb-log wraps instead of scrolling horizontally. */
|
|
17
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-pre.rb-log {
|
|
18
|
+
overflow-x: hidden;
|
|
19
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/* concrete-signal-light — muted / empty-state text
|
|
2
|
+
* Faint secondary text — captions, meta, "No results yet." style empty
|
|
3
|
+
* states. No italic: brutalism carries its voice through weight, case, and
|
|
4
|
+
* tracking, never a softening slant. */
|
|
5
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-muted {
|
|
6
|
+
color: var(--rb-text-faint);
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/* concrete-signal-light — nav rail (vertical sidebar container)
|
|
2
|
+
* Flush edge chrome, not a floating card: fixed-width flex column, surface
|
|
3
|
+
* background, a 1px border-strong right edge (this theme's spec-sheet
|
|
4
|
+
* convention, not a faint hairline). Composes with .rb-link for items --
|
|
5
|
+
* active/hover are entirely that component's own tokens, nothing new here. */
|
|
6
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-nav-rail {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
flex-shrink: 0;
|
|
10
|
+
gap: var(--rb-space-1);
|
|
11
|
+
width: 14rem;
|
|
12
|
+
padding: var(--rb-space-3);
|
|
13
|
+
background: var(--rb-surface);
|
|
14
|
+
border-right: 1px solid var(--rb-border-strong);
|
|
15
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* concrete-signal-light — command / log block
|
|
2
|
+
* Styled <pre> for shell commands or short log output: sunken well, hairline
|
|
3
|
+
* border, small mono, scrolls horizontally instead of wrapping. Zero radius
|
|
4
|
+
* falls out of --rb-radius automatically, same as every other panel here. */
|
|
5
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-pre {
|
|
6
|
+
margin: 0;
|
|
7
|
+
padding: var(--rb-space-3) var(--rb-space-4);
|
|
8
|
+
background: var(--rb-surface-sunken);
|
|
9
|
+
border: 1px solid var(--rb-border);
|
|
10
|
+
border-radius: var(--rb-radius);
|
|
11
|
+
font-family: var(--rb-font-mono);
|
|
12
|
+
font-size: var(--rb-text-sm);
|
|
13
|
+
overflow-x: auto;
|
|
14
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/* concrete-signal-light — progress bar & spinner
|
|
2
|
+
* A sunken, square-cornered trough with a flat accent fill — no gradient fill,
|
|
3
|
+
* no glow. The spinner keeps the theme's zero-radius signature: a square
|
|
4
|
+
* rotating frame rather than a soft circular arc. */
|
|
5
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-progress {
|
|
6
|
+
appearance: none;
|
|
7
|
+
display: block;
|
|
8
|
+
width: 100%;
|
|
9
|
+
height: 0.5rem;
|
|
10
|
+
background: var(--rb-surface-sunken);
|
|
11
|
+
border: 1px solid var(--rb-border);
|
|
12
|
+
border-radius: var(--rb-radius);
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
}
|
|
15
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-progress::-webkit-progress-bar {
|
|
16
|
+
background: var(--rb-surface-sunken);
|
|
17
|
+
}
|
|
18
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-progress::-webkit-progress-value {
|
|
19
|
+
background: var(--rb-accent);
|
|
20
|
+
}
|
|
21
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-progress::-moz-progress-bar {
|
|
22
|
+
background: var(--rb-accent);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-spinner {
|
|
26
|
+
display: inline-block;
|
|
27
|
+
width: 1.25rem;
|
|
28
|
+
height: 1.25rem;
|
|
29
|
+
border: 2px solid var(--rb-border-strong);
|
|
30
|
+
border-top-color: var(--rb-accent);
|
|
31
|
+
border-radius: var(--rb-radius);
|
|
32
|
+
animation: rb-signal-light-spin 0.7s linear infinite;
|
|
33
|
+
}
|
|
34
|
+
@keyframes rb-signal-light-spin {
|
|
35
|
+
to {
|
|
36
|
+
transform: rotate(360deg);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@media (prefers-reduced-motion: reduce) {
|
|
41
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-spinner {
|
|
42
|
+
animation-duration: 2s;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/* concrete-signal-light — stepper (delivery / milestone tracker)
|
|
2
|
+
* <ol class="rb-stepper"> with one
|
|
3
|
+
* <li class="rb-stepper__step rb-stepper--complete|current|upcoming"> per
|
|
4
|
+
* milestone: a .rb-stepper__node icon/number circle + .rb-stepper__label.
|
|
5
|
+
* Each non-first step draws its OWN connector segment back to the previous
|
|
6
|
+
* step's node (right: 50%; width: 100% of that step's own flex slice, self-
|
|
7
|
+
* aligning to node centers regardless of item count or label width -- a
|
|
8
|
+
* single full-width rail can't do this without knowing how many steps there
|
|
9
|
+
* are, since node centers sit inset within their own slice). isolation:
|
|
10
|
+
* isolate keeps every segment's negative z-index scoped to this stepper, so
|
|
11
|
+
* it paints behind every node without needing per-node z-index of its own.
|
|
12
|
+
* A segment fills once its OWN step is reached (complete or current) -- the
|
|
13
|
+
* same state class already on the <li>, not a second progress mechanism. No
|
|
14
|
+
* glow or blur -- ever, per this theme's rule -- so the current node's lift
|
|
15
|
+
* is the hard, literal offset shadow-lg, and a segment snaps instantly
|
|
16
|
+
* instead of transitioning. Identical to concrete-signal; only the palette
|
|
17
|
+
* differs. */
|
|
18
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper {
|
|
19
|
+
display: flex;
|
|
20
|
+
isolation: isolate;
|
|
21
|
+
list-style: none;
|
|
22
|
+
margin: 0;
|
|
23
|
+
padding: 0;
|
|
24
|
+
}
|
|
25
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper__step {
|
|
26
|
+
position: relative;
|
|
27
|
+
flex: 1;
|
|
28
|
+
min-width: 0;
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
align-items: center;
|
|
32
|
+
gap: var(--rb-space-2);
|
|
33
|
+
text-align: center;
|
|
34
|
+
}
|
|
35
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper__step:not(:first-child)::before {
|
|
36
|
+
content: "";
|
|
37
|
+
position: absolute;
|
|
38
|
+
top: 1rem;
|
|
39
|
+
right: 50%;
|
|
40
|
+
width: 100%;
|
|
41
|
+
height: 2px;
|
|
42
|
+
background: var(--rb-surface-sunken);
|
|
43
|
+
z-index: -1;
|
|
44
|
+
}
|
|
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 {
|
|
47
|
+
background: var(--rb-accent);
|
|
48
|
+
}
|
|
49
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper__node {
|
|
50
|
+
display: flex;
|
|
51
|
+
align-items: center;
|
|
52
|
+
justify-content: center;
|
|
53
|
+
width: 2rem;
|
|
54
|
+
height: 2rem;
|
|
55
|
+
border: 2px solid transparent;
|
|
56
|
+
border-radius: var(--rb-radius-pill);
|
|
57
|
+
background: var(--rb-surface-2);
|
|
58
|
+
color: var(--rb-text-faint);
|
|
59
|
+
font-size: var(--rb-text-sm);
|
|
60
|
+
font-weight: var(--rb-font-weight-bold);
|
|
61
|
+
}
|
|
62
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper__label {
|
|
63
|
+
font-size: var(--rb-text-sm);
|
|
64
|
+
color: var(--rb-text-faint);
|
|
65
|
+
text-transform: uppercase;
|
|
66
|
+
letter-spacing: var(--rb-label-tracking);
|
|
67
|
+
}
|
|
68
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper--complete .rb-stepper__node {
|
|
69
|
+
background: var(--rb-accent);
|
|
70
|
+
color: var(--rb-accent-fg);
|
|
71
|
+
}
|
|
72
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper--complete .rb-stepper__label {
|
|
73
|
+
color: var(--rb-text);
|
|
74
|
+
}
|
|
75
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper--current .rb-stepper__node {
|
|
76
|
+
background: var(--rb-surface);
|
|
77
|
+
border-color: var(--rb-accent);
|
|
78
|
+
color: var(--rb-accent);
|
|
79
|
+
box-shadow: var(--rb-shadow-lg);
|
|
80
|
+
}
|
|
81
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-stepper--current .rb-stepper__label {
|
|
82
|
+
color: var(--rb-accent);
|
|
83
|
+
font-weight: var(--rb-font-weight-bold);
|
|
84
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* concrete-signal-light — table
|
|
2
|
+
* Dense, spec-sheet reading: 1px border-strong rules everywhere (not faint
|
|
3
|
+
* hairlines), uppercase tracked headers, tabular numerals, and a row hover
|
|
4
|
+
* that snaps instantly — no transition softness. */
|
|
5
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-table {
|
|
6
|
+
width: 100%;
|
|
7
|
+
border-collapse: collapse;
|
|
8
|
+
font-size: var(--rb-text-sm);
|
|
9
|
+
font-variant-numeric: tabular-nums;
|
|
10
|
+
color: var(--rb-text);
|
|
11
|
+
}
|
|
12
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-table th {
|
|
13
|
+
padding: var(--rb-space-2) var(--rb-space-3);
|
|
14
|
+
border-bottom: 1px solid var(--rb-border-strong);
|
|
15
|
+
color: var(--rb-text-faint);
|
|
16
|
+
text-align: left;
|
|
17
|
+
text-transform: uppercase;
|
|
18
|
+
font-size: 12px;
|
|
19
|
+
font-weight: var(--rb-font-weight-bold);
|
|
20
|
+
letter-spacing: var(--rb-label-tracking);
|
|
21
|
+
}
|
|
22
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-table td {
|
|
23
|
+
padding: var(--rb-space-2) var(--rb-space-3);
|
|
24
|
+
border-bottom: 1px solid var(--rb-border-strong);
|
|
25
|
+
color: var(--rb-text);
|
|
26
|
+
}
|
|
27
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-table tbody tr:hover td {
|
|
28
|
+
background: var(--rb-surface-2);
|
|
29
|
+
}
|
|
30
|
+
/* --interactive: clickable rows (a tabindex tr, or a row-wrapping button/link) —
|
|
31
|
+
* pointer cursor plus a keyboard-equivalent of the hover wash and a focus ring;
|
|
32
|
+
* no transition here either, matching the table's instant-snap hover. */
|
|
33
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-table--interactive tbody tr {
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
}
|
|
36
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-table--interactive tbody tr:focus-visible,
|
|
37
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-table--interactive tbody tr:has(:focus-visible) {
|
|
38
|
+
outline: 2px solid var(--rb-accent);
|
|
39
|
+
outline-offset: -2px;
|
|
40
|
+
}
|
|
41
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-table--interactive tbody tr:focus-visible td,
|
|
42
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-table--interactive tbody tr:has(:focus-visible) td {
|
|
43
|
+
background: var(--rb-surface-2);
|
|
44
|
+
}
|
|
45
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-table .rb-num {
|
|
46
|
+
text-align: right;
|
|
47
|
+
font-variant-numeric: tabular-nums;
|
|
48
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/* concrete-signal-light — tabs
|
|
2
|
+
* Uppercase text tabs; the active tab carries accent text and a hard 3px
|
|
3
|
+
* underline in the theme's one rationed gradient — its only appearance
|
|
4
|
+
* outside the token declaration itself. */
|
|
5
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-tabs {
|
|
6
|
+
display: flex;
|
|
7
|
+
gap: var(--rb-space-2);
|
|
8
|
+
border-bottom: 1px solid var(--rb-border);
|
|
9
|
+
}
|
|
10
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-tab {
|
|
11
|
+
position: relative;
|
|
12
|
+
padding: var(--rb-space-2) var(--rb-space-4);
|
|
13
|
+
background: none;
|
|
14
|
+
border: none;
|
|
15
|
+
color: var(--rb-text-soft);
|
|
16
|
+
text-transform: uppercase;
|
|
17
|
+
font-family: var(--rb-font-body);
|
|
18
|
+
font-weight: var(--rb-font-weight-bold);
|
|
19
|
+
font-size: var(--rb-text-sm);
|
|
20
|
+
letter-spacing: var(--rb-label-tracking);
|
|
21
|
+
cursor: pointer;
|
|
22
|
+
transition: color var(--rb-transition);
|
|
23
|
+
}
|
|
24
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-tab:hover {
|
|
25
|
+
color: var(--rb-text);
|
|
26
|
+
}
|
|
27
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-tab.rb-tab--active,
|
|
28
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-tab[aria-selected="true"] {
|
|
29
|
+
color: var(--rb-accent);
|
|
30
|
+
}
|
|
31
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-tab.rb-tab--active::after,
|
|
32
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-tab[aria-selected="true"]::after {
|
|
33
|
+
content: "";
|
|
34
|
+
position: absolute;
|
|
35
|
+
left: 0;
|
|
36
|
+
right: 0;
|
|
37
|
+
bottom: -1px;
|
|
38
|
+
height: 3px;
|
|
39
|
+
background: var(--rb-accent-grad);
|
|
40
|
+
}
|
|
41
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-tabpanel {
|
|
42
|
+
padding: var(--rb-space-4) 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@media (prefers-reduced-motion: reduce) {
|
|
46
|
+
:where([data-rb-style="concrete-signal-light"], [data-rb-style="concrete-signal-light"] *).rb-tab {
|
|
47
|
+
transition: none;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# concrete-signal-light
|
|
2
|
+
|
|
3
|
+
The light, AA-tuned counterpart of **concrete-signal** — the same brutalist
|
|
4
|
+
industrial language (zero border-radius everywhere, thick hairline borders,
|
|
5
|
+
hard offset shadows instead of blur, the sole safety-orange accent used
|
|
6
|
+
functionally only, heavy-weight uppercase labels, tabular numerals, snappy
|
|
7
|
+
`0.1s` transitions with no easing softness) rendered on a poured-concrete
|
|
8
|
+
off-white ground instead of the dark slab. It ships the identical `rb-*`
|
|
9
|
+
component set as concrete-signal — the components are token-driven, so only
|
|
10
|
+
the palette differs — and swaps in with a single attribute flip.
|
|
11
|
+
|
|
12
|
+
## Color
|
|
13
|
+
|
|
14
|
+
| Role | Value | Usage |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| Background | `#eeece6` (poured concrete, off-white) | Page canvas |
|
|
17
|
+
| Surface | `#f7f6f2` | Cards, header, panels |
|
|
18
|
+
| Surface 2 | `#e4e2da` | Raised/hover surface, row hover |
|
|
19
|
+
| Surface sunken | `#dcdad2` | Inset fields, progress troughs |
|
|
20
|
+
| Text | `#141311` | Body text |
|
|
21
|
+
| Text soft | `#4a4844` | Secondary text |
|
|
22
|
+
| Text faint | `#5f5d58` | Labels, idle tabs, meta |
|
|
23
|
+
| Border | `#c9c6bc` | Resting hairline borders |
|
|
24
|
+
| Border strong | `#a8a59a` | Card/table/dialog structural rules |
|
|
25
|
+
| Accent | `#cc4611` (safety-orange, darkened for AA) | The sole brand voice: emphasis, active state, focus (4.72:1 as accent-fg text) |
|
|
26
|
+
| Accent fg | `#ffffff` | White on the solid orange fill |
|
|
27
|
+
| Accent wash | `rgba(204,70,17,.14)` | Default badge tint, active-link wash |
|
|
28
|
+
| Gradient | `linear-gradient(90deg,#cc4611,#b8281f)` | The one rationed gradient: active-tab underline only |
|
|
29
|
+
| Info | `#2f6fa8` | Informational chips (4.90:1 on surface) |
|
|
30
|
+
| Success | `#3d7a45` | Healthy/live status (4.77:1 on surface) |
|
|
31
|
+
| Warning | `#906721` | Caution status (darkened from `#b8842a`, 3.05:1, to 4.68:1 on surface) |
|
|
32
|
+
| Danger | `#b8281f` | Destructive actions, errors (5.78:1 on surface) |
|
|
33
|
+
|
|
34
|
+
**Rules.** Colour is functional. Resting UI is concrete grey and faint;
|
|
35
|
+
safety-orange appears only on interaction, focus, active state, and
|
|
36
|
+
emphasis — never as decoration. Colour beyond the accent is *earned*:
|
|
37
|
+
severity and status chips are the one place other hues appear. The accent
|
|
38
|
+
and the warning chip are both darkened from their naive values so every
|
|
39
|
+
text/border use of a semantic colour clears WCAG AA (4.5:1) against
|
|
40
|
+
`--rb-surface` — genuinely AA-tuned, not just labelled as such. The theme
|
|
41
|
+
never softens with glow, blur, or gradient — the one exception is the
|
|
42
|
+
2-stop hard gradient rationed to the active-tab underline.
|
|
43
|
+
|
|
44
|
+
## Typography
|
|
45
|
+
|
|
46
|
+
Identical to concrete-signal — see its `design.md` for per-component notes;
|
|
47
|
+
behaviour is the same, only the palette differs. `system-ui` throughout at
|
|
48
|
+
weight 800 for display/labels, uppercase and tracked; tabular numerals on
|
|
49
|
+
tables.
|
|
50
|
+
|
|
51
|
+
## Shape & effects
|
|
52
|
+
|
|
53
|
+
Identical to concrete-signal — see its `design.md` for per-component notes;
|
|
54
|
+
behaviour is the same, only the palette differs. Zero radius everywhere
|
|
55
|
+
(save the near-square `--rb-radius-pill` used by badges), hard offset
|
|
56
|
+
shadows instead of blur, a hard border-weight focus change, the theme's one
|
|
57
|
+
rationed gradient on the active-tab underline only, and `0.1s` snap
|
|
58
|
+
transitions.
|
|
59
|
+
|
|
60
|
+
## Components
|
|
61
|
+
|
|
62
|
+
Identical to concrete-signal — see its `design.md` for per-component notes;
|
|
63
|
+
behaviour is the same, only the palette differs. The full baseline twelve:
|
|
64
|
+
`.rb-btn` (+ `--primary/--accent/--danger/--ghost`, `--sm` compact size, `.rb-icon-btn` icon-only square), `.rb-card` (+
|
|
65
|
+
`--raised`), `.rb-link`, `.rb-nav-rail`, the form set (`.rb-input`/`.rb-textarea`/
|
|
66
|
+
`.rb-select`/`.rb-label`/`.rb-field`/`.rb-choice`/`.rb-checkbox`/`.rb-radio`/
|
|
67
|
+
`.rb-switch`), `.rb-badge`, `.rb-alert`, `.rb-dialog`, `.rb-tabs`/`.rb-tab`/
|
|
68
|
+
`.rb-tabpanel`, `.rb-table` (+ `.rb-num`, `--interactive`), `.rb-progress`/`.rb-spinner`, `.rb-stepper`,
|
|
69
|
+
`.rb-muted` (no italic — brutalism never softens with a slant), `.rb-pre` (+ `.rb-log`)
|
|
70
|
+
(zero radius falls out of `--rb-radius` automatically).
|
|
71
|
+
|
|
72
|
+
## Dark counterpart
|
|
73
|
+
|
|
74
|
+
`concrete-signal` — the primary, dark look. This theme and it share the
|
|
75
|
+
same `--rb-*` baseline and `rb-*` classes, so switching `data-rb-style`
|
|
76
|
+
between them restyles a page without touching markup.
|
|
77
|
+
|
|
78
|
+
## Scoping
|
|
79
|
+
|
|
80
|
+
Every rule is guarded by `data-rb-style="concrete-signal-light"` (self or
|
|
81
|
+
ancestor), wrapped in zero-specificity `:where()`. Set the attribute on
|
|
82
|
+
`<html>` for a page or on a container for an embedded island.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* concrete-signal-light — full theme entry point */
|
|
2
|
+
@import "./tokens.css";
|
|
3
|
+
@import "./base.css";
|
|
4
|
+
@import "./components/card.css";
|
|
5
|
+
@import "./components/link.css";
|
|
6
|
+
@import "./components/nav-rail.css";
|
|
7
|
+
@import "./components/button.css";
|
|
8
|
+
@import "./components/form.css";
|
|
9
|
+
@import "./components/badge.css";
|
|
10
|
+
@import "./components/alert.css";
|
|
11
|
+
@import "./components/dialog.css";
|
|
12
|
+
@import "./components/tabs.css";
|
|
13
|
+
@import "./components/table.css";
|
|
14
|
+
@import "./components/progress.css";
|
|
15
|
+
@import "./components/stepper.css";
|
|
16
|
+
@import "./components/muted.css";
|
|
17
|
+
@import "./components/pre.css";
|
|
18
|
+
@import "./components/log.css";
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* concrete-signal-light — design tokens
|
|
2
|
+
* The light, AA-tuned counterpart of concrete-signal: the same brutalist
|
|
3
|
+
* industrial language — zero border-radius everywhere, thick hairline
|
|
4
|
+
* borders, hard offset shadows instead of blur — rendered on a poured-
|
|
5
|
+
* concrete off-white ground instead of the dark slab. It ships the identical
|
|
6
|
+
* `rb-*` component set as concrete-signal (token-driven, so only the palette
|
|
7
|
+
* differs) and swaps in with a single attribute flip. Consume via:
|
|
8
|
+
* @import "@rackbops/styles/concrete-signal-light/tokens";
|
|
9
|
+
* or pull the whole theme with ./index.css.
|
|
10
|
+
*
|
|
11
|
+
* Nothing applies until an element carries
|
|
12
|
+
* data-rb-style="concrete-signal-light" — set it on <html> for a page, or on
|
|
13
|
+
* any container for an embedded island. The :where() keeps specificity at
|
|
14
|
+
* zero, so any consumer rule overrides.
|
|
15
|
+
*/
|
|
16
|
+
:where([data-rb-style="concrete-signal-light"]) {
|
|
17
|
+
color-scheme: light;
|
|
18
|
+
|
|
19
|
+
/* color — poured concrete, off-white */
|
|
20
|
+
--rb-bg: #eeece6;
|
|
21
|
+
--rb-surface: #f7f6f2;
|
|
22
|
+
--rb-surface-2: #e4e2da;
|
|
23
|
+
--rb-surface-sunken: #dcdad2;
|
|
24
|
+
--rb-text: #141311;
|
|
25
|
+
--rb-text-soft: #4a4844;
|
|
26
|
+
--rb-text-faint: #5f5d58;
|
|
27
|
+
--rb-border: #c9c6bc;
|
|
28
|
+
--rb-border-strong: #a8a59a;
|
|
29
|
+
|
|
30
|
+
/* accent — safety-orange is the sole brand voice: interaction/focus/emphasis only.
|
|
31
|
+
Darkened from the naive #d94a12 to #cc4611 so accent-fg-on-accent (the
|
|
32
|
+
primary button fill) clears WCAG AA (4.72:1, was 4.25:1). */
|
|
33
|
+
--rb-accent: #cc4611;
|
|
34
|
+
--rb-accent-fg: #ffffff;
|
|
35
|
+
--rb-accent-wash: rgba(204, 70, 17, 0.14);
|
|
36
|
+
|
|
37
|
+
/* the ONE gradient — rationed to the active-tab underline only */
|
|
38
|
+
--rb-accent-grad: linear-gradient(90deg, #cc4611, #b8281f);
|
|
39
|
+
|
|
40
|
+
/* semantic — colour beyond the accent is earned: severity/status only.
|
|
41
|
+
Warning darkened from #b8842a (3.05:1 on --rb-surface, failed AA) to
|
|
42
|
+
#906721 (4.68:1) — it's the sole failing semantic hue on this ground. */
|
|
43
|
+
--rb-info: #2f6fa8;
|
|
44
|
+
--rb-success: #3d7a45;
|
|
45
|
+
--rb-warning: #906721;
|
|
46
|
+
--rb-danger: #b8281f;
|
|
47
|
+
|
|
48
|
+
/* typography — system-ui throughout; the industrial voice comes from
|
|
49
|
+
weight/case/tracking, not font family */
|
|
50
|
+
--rb-font-display: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
51
|
+
--rb-font-body: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
52
|
+
--rb-font-mono: ui-monospace, "Cascadia Code", "Cascadia Mono", "Segoe UI Mono", Consolas, Menlo, monospace;
|
|
53
|
+
--rb-font-weight: 400;
|
|
54
|
+
--rb-font-weight-medium: 600;
|
|
55
|
+
--rb-font-weight-bold: 800;
|
|
56
|
+
--rb-heading-tracking: 0.01em;
|
|
57
|
+
--rb-label-tracking: 0.08em;
|
|
58
|
+
--rb-text-sm: 13px;
|
|
59
|
+
|
|
60
|
+
/* shape & effects — zero radius everywhere; hard offset shadows, no blur */
|
|
61
|
+
--rb-radius: 0;
|
|
62
|
+
--rb-radius-lg: 0;
|
|
63
|
+
--rb-radius-pill: 0.125rem; /* deliberately near-square, not a true pill — brutalism has no soft pills */
|
|
64
|
+
--rb-shadow-sm: 2px 2px 0 rgba(20, 19, 17, 0.18);
|
|
65
|
+
--rb-shadow-lg: 4px 4px 0 rgba(20, 19, 17, 0.22);
|
|
66
|
+
--rb-blur: 0px; /* this theme never uses blur/glass */
|
|
67
|
+
--rb-transition: 0.1s; /* snappy; brutalism doesn't ease */
|
|
68
|
+
|
|
69
|
+
/* spacing — 4px rhythm */
|
|
70
|
+
--rb-space-1: 0.25rem;
|
|
71
|
+
--rb-space-2: 0.5rem;
|
|
72
|
+
--rb-space-3: 0.75rem;
|
|
73
|
+
--rb-space-4: 1rem;
|
|
74
|
+
--rb-space-5: 1.5rem;
|
|
75
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Every @rackbops/styles export below is CSS consumed for its side effect
|
|
2
|
+
// only; this declares an empty module so TypeScript's stricter side-effect
|
|
3
|
+
// import resolution (moduleResolution: "bundler"/"node16",
|
|
4
|
+
// noUncheckedSideEffectImports) has a real type declaration to find.
|
|
5
|
+
export {};
|