@rackbops/styles 0.1.0 → 0.1.1
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,33 @@
|
|
|
1
|
+
/* concrete-signal — dialog (native <dialog>)
|
|
2
|
+
* A square-cornered slab dropped onto a flat, unblurred backdrop — this
|
|
3
|
+
* theme never uses blur/glass, so the scrim behind the dialog stays flat. */
|
|
4
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-dialog {
|
|
5
|
+
padding: 0;
|
|
6
|
+
max-width: min(92vw, 32rem);
|
|
7
|
+
width: calc(100vw - 2rem);
|
|
8
|
+
background: var(--rb-surface);
|
|
9
|
+
border: 2px solid var(--rb-border-strong);
|
|
10
|
+
border-radius: var(--rb-radius);
|
|
11
|
+
color: var(--rb-text);
|
|
12
|
+
box-shadow: var(--rb-shadow-lg);
|
|
13
|
+
}
|
|
14
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-dialog::backdrop {
|
|
15
|
+
background: rgba(0, 0, 0, 0.6);
|
|
16
|
+
}
|
|
17
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-dialog__body {
|
|
18
|
+
padding: var(--rb-space-5);
|
|
19
|
+
}
|
|
20
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-dialog__title {
|
|
21
|
+
margin: 0 0 var(--rb-space-3);
|
|
22
|
+
text-transform: uppercase;
|
|
23
|
+
font-family: var(--rb-font-display);
|
|
24
|
+
font-weight: var(--rb-font-weight-bold);
|
|
25
|
+
letter-spacing: var(--rb-label-tracking);
|
|
26
|
+
}
|
|
27
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-dialog__actions {
|
|
28
|
+
display: flex;
|
|
29
|
+
justify-content: flex-end;
|
|
30
|
+
gap: var(--rb-space-2);
|
|
31
|
+
padding: var(--rb-space-3) var(--rb-space-5);
|
|
32
|
+
border-top: 1px solid var(--rb-border);
|
|
33
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/* concrete-signal — 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"], [data-rb-style="concrete-signal"] *).rb-field {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
gap: var(--rb-space-1);
|
|
9
|
+
}
|
|
10
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-input,
|
|
18
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-textarea,
|
|
19
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-textarea {
|
|
33
|
+
min-height: 5rem;
|
|
34
|
+
resize: vertical;
|
|
35
|
+
}
|
|
36
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).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='%238f8f8a' 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"], [data-rb-style="concrete-signal"] *).rb-input::placeholder,
|
|
44
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-textarea::placeholder {
|
|
45
|
+
color: var(--rb-text-faint);
|
|
46
|
+
}
|
|
47
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-input:focus,
|
|
48
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-textarea:focus,
|
|
49
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-select:focus {
|
|
50
|
+
outline: none;
|
|
51
|
+
border: 2px solid var(--rb-accent);
|
|
52
|
+
}
|
|
53
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-input[aria-invalid="true"],
|
|
54
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-textarea[aria-invalid="true"] {
|
|
55
|
+
border-color: var(--rb-danger);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-checkbox,
|
|
70
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-checkbox:checked,
|
|
83
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-switch:checked {
|
|
114
|
+
border-color: var(--rb-accent);
|
|
115
|
+
}
|
|
116
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-switch:checked::after {
|
|
117
|
+
transform: translateX(1.1rem);
|
|
118
|
+
background: var(--rb-accent);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-checkbox:focus-visible,
|
|
122
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-radio:focus-visible,
|
|
123
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-input,
|
|
130
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-textarea,
|
|
131
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-select,
|
|
132
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-checkbox,
|
|
133
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-radio,
|
|
134
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-switch,
|
|
135
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-switch::after {
|
|
136
|
+
transition: none;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/* concrete-signal — 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"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-link:hover {
|
|
28
|
+
background: var(--rb-surface-2);
|
|
29
|
+
}
|
|
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 {
|
|
32
|
+
background: var(--rb-accent);
|
|
33
|
+
}
|
|
34
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-link {
|
|
42
|
+
transition: none;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* concrete-signal — 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"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-pre.rb-log {
|
|
18
|
+
overflow-x: hidden;
|
|
19
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/* concrete-signal — 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"], [data-rb-style="concrete-signal"] *).rb-muted {
|
|
6
|
+
color: var(--rb-text-faint);
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/* concrete-signal — 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"], [data-rb-style="concrete-signal"] *).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 — 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"], [data-rb-style="concrete-signal"] *).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 — 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"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-progress::-webkit-progress-bar {
|
|
16
|
+
background: var(--rb-surface-sunken);
|
|
17
|
+
}
|
|
18
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-progress::-webkit-progress-value {
|
|
19
|
+
background: var(--rb-accent);
|
|
20
|
+
}
|
|
21
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-progress::-moz-progress-bar {
|
|
22
|
+
background: var(--rb-accent);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).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-spin 0.7s linear infinite;
|
|
33
|
+
}
|
|
34
|
+
@keyframes rb-signal-spin {
|
|
35
|
+
to {
|
|
36
|
+
transform: rotate(360deg);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@media (prefers-reduced-motion: reduce) {
|
|
41
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-spinner {
|
|
42
|
+
animation-duration: 2s;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/* concrete-signal — 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. */
|
|
17
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper {
|
|
18
|
+
display: flex;
|
|
19
|
+
isolation: isolate;
|
|
20
|
+
list-style: none;
|
|
21
|
+
margin: 0;
|
|
22
|
+
padding: 0;
|
|
23
|
+
}
|
|
24
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper__step {
|
|
25
|
+
position: relative;
|
|
26
|
+
flex: 1;
|
|
27
|
+
min-width: 0;
|
|
28
|
+
display: flex;
|
|
29
|
+
flex-direction: column;
|
|
30
|
+
align-items: center;
|
|
31
|
+
gap: var(--rb-space-2);
|
|
32
|
+
text-align: center;
|
|
33
|
+
}
|
|
34
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper__step:not(:first-child)::before {
|
|
35
|
+
content: "";
|
|
36
|
+
position: absolute;
|
|
37
|
+
top: 1rem;
|
|
38
|
+
right: 50%;
|
|
39
|
+
width: 100%;
|
|
40
|
+
height: 2px;
|
|
41
|
+
background: var(--rb-surface-sunken);
|
|
42
|
+
z-index: -1;
|
|
43
|
+
}
|
|
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 {
|
|
46
|
+
background: var(--rb-accent);
|
|
47
|
+
}
|
|
48
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper__node {
|
|
49
|
+
display: flex;
|
|
50
|
+
align-items: center;
|
|
51
|
+
justify-content: center;
|
|
52
|
+
width: 2rem;
|
|
53
|
+
height: 2rem;
|
|
54
|
+
border: 2px solid transparent;
|
|
55
|
+
border-radius: var(--rb-radius-pill);
|
|
56
|
+
background: var(--rb-surface-2);
|
|
57
|
+
color: var(--rb-text-faint);
|
|
58
|
+
font-size: var(--rb-text-sm);
|
|
59
|
+
font-weight: var(--rb-font-weight-bold);
|
|
60
|
+
}
|
|
61
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper__label {
|
|
62
|
+
font-size: var(--rb-text-sm);
|
|
63
|
+
color: var(--rb-text-faint);
|
|
64
|
+
text-transform: uppercase;
|
|
65
|
+
letter-spacing: var(--rb-label-tracking);
|
|
66
|
+
}
|
|
67
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper--complete .rb-stepper__node {
|
|
68
|
+
background: var(--rb-accent);
|
|
69
|
+
color: var(--rb-accent-fg);
|
|
70
|
+
}
|
|
71
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper--complete .rb-stepper__label {
|
|
72
|
+
color: var(--rb-text);
|
|
73
|
+
}
|
|
74
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper--current .rb-stepper__node {
|
|
75
|
+
background: var(--rb-surface);
|
|
76
|
+
border-color: var(--rb-accent);
|
|
77
|
+
color: var(--rb-accent);
|
|
78
|
+
box-shadow: var(--rb-shadow-lg);
|
|
79
|
+
}
|
|
80
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-stepper--current .rb-stepper__label {
|
|
81
|
+
color: var(--rb-accent);
|
|
82
|
+
font-weight: var(--rb-font-weight-bold);
|
|
83
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* concrete-signal — 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"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-table--interactive tbody tr {
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
}
|
|
36
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-table--interactive tbody tr:focus-visible,
|
|
37
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-table--interactive tbody tr:focus-visible td,
|
|
42
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-table--interactive tbody tr:has(:focus-visible) td {
|
|
43
|
+
background: var(--rb-surface-2);
|
|
44
|
+
}
|
|
45
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-table .rb-num {
|
|
46
|
+
text-align: right;
|
|
47
|
+
font-variant-numeric: tabular-nums;
|
|
48
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/* concrete-signal — 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"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-tab:hover {
|
|
25
|
+
color: var(--rb-text);
|
|
26
|
+
}
|
|
27
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-tab.rb-tab--active,
|
|
28
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-tab[aria-selected="true"] {
|
|
29
|
+
color: var(--rb-accent);
|
|
30
|
+
}
|
|
31
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-tab.rb-tab--active::after,
|
|
32
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).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"], [data-rb-style="concrete-signal"] *).rb-tabpanel {
|
|
42
|
+
padding: var(--rb-space-4) 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@media (prefers-reduced-motion: reduce) {
|
|
46
|
+
:where([data-rb-style="concrete-signal"], [data-rb-style="concrete-signal"] *).rb-tab {
|
|
47
|
+
transition: none;
|
|
48
|
+
}
|
|
49
|
+
}
|