@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,20 @@
|
|
|
1
|
+
/* mono-field — card
|
|
2
|
+
* White surface; the 1px hairline border does most of the definition work
|
|
3
|
+
* since surface equals bg in this theme (no color hierarchy between layers). */
|
|
4
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-card {
|
|
5
|
+
padding: var(--rb-space-5);
|
|
6
|
+
background: var(--rb-surface);
|
|
7
|
+
border: 1px solid var(--rb-border);
|
|
8
|
+
border-radius: var(--rb-radius-lg);
|
|
9
|
+
color: var(--rb-text);
|
|
10
|
+
box-shadow: var(--rb-shadow-sm);
|
|
11
|
+
}
|
|
12
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-card > :first-child {
|
|
13
|
+
margin-top: 0;
|
|
14
|
+
}
|
|
15
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-card > :last-child {
|
|
16
|
+
margin-bottom: 0;
|
|
17
|
+
}
|
|
18
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-card--raised {
|
|
19
|
+
box-shadow: var(--rb-shadow-lg);
|
|
20
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/* mono-field — dialog (native <dialog>)
|
|
2
|
+
* White pane, subtle shadow, over a light blur and a lighter-than-usual scrim
|
|
3
|
+
* — quiet, not dramatic. Title stays normal case at the theme's max weight
|
|
4
|
+
* (600 — this theme's font-weight-bold ceiling). */
|
|
5
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-dialog {
|
|
6
|
+
padding: var(--rb-space-5);
|
|
7
|
+
max-width: 32rem;
|
|
8
|
+
width: calc(100vw - 2rem);
|
|
9
|
+
background: var(--rb-surface);
|
|
10
|
+
border: 1px solid var(--rb-border);
|
|
11
|
+
border-radius: var(--rb-radius-lg);
|
|
12
|
+
color: var(--rb-text);
|
|
13
|
+
font-family: var(--rb-font-body);
|
|
14
|
+
box-shadow: var(--rb-shadow-lg);
|
|
15
|
+
}
|
|
16
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-dialog::backdrop {
|
|
17
|
+
background: rgba(0, 0, 0, 0.3);
|
|
18
|
+
backdrop-filter: blur(var(--rb-blur));
|
|
19
|
+
}
|
|
20
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-dialog__title {
|
|
21
|
+
margin: 0 0 var(--rb-space-3);
|
|
22
|
+
color: var(--rb-text);
|
|
23
|
+
font-family: var(--rb-font-display);
|
|
24
|
+
font-size: 1.25rem;
|
|
25
|
+
font-weight: var(--rb-font-weight-bold);
|
|
26
|
+
letter-spacing: var(--rb-heading-tracking);
|
|
27
|
+
text-transform: none;
|
|
28
|
+
}
|
|
29
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-dialog__actions {
|
|
30
|
+
display: flex;
|
|
31
|
+
justify-content: flex-end;
|
|
32
|
+
gap: var(--rb-space-2);
|
|
33
|
+
margin-top: var(--rb-space-5);
|
|
34
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/* mono-field — form controls: input, textarea, select, checkbox, radio, switch
|
|
2
|
+
* Sunken fields; focus swaps the border to accent plus a thin accent-wash
|
|
3
|
+
* ring (the wash token itself is only 6% alpha, so the ring reads as
|
|
4
|
+
* barely-there, consistent with the theme). Labels are normal case, weight
|
|
5
|
+
* 500 — no shouting. */
|
|
6
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-field {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
gap: var(--rb-space-1);
|
|
10
|
+
}
|
|
11
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-label {
|
|
12
|
+
color: var(--rb-text-soft);
|
|
13
|
+
font-weight: var(--rb-font-weight-medium);
|
|
14
|
+
font-size: var(--rb-text-sm);
|
|
15
|
+
text-transform: none;
|
|
16
|
+
}
|
|
17
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-input,
|
|
18
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-textarea,
|
|
19
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-select {
|
|
20
|
+
width: 100%;
|
|
21
|
+
padding: var(--rb-space-2) var(--rb-space-3);
|
|
22
|
+
background: var(--rb-surface-sunken);
|
|
23
|
+
border: 1px solid var(--rb-border);
|
|
24
|
+
border-radius: var(--rb-radius);
|
|
25
|
+
color: var(--rb-text);
|
|
26
|
+
font-family: var(--rb-font-body);
|
|
27
|
+
font-size: var(--rb-text-sm);
|
|
28
|
+
transition:
|
|
29
|
+
border-color var(--rb-transition),
|
|
30
|
+
box-shadow var(--rb-transition);
|
|
31
|
+
}
|
|
32
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-select {
|
|
33
|
+
appearance: none;
|
|
34
|
+
padding-right: 2.25rem;
|
|
35
|
+
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='%235a5a5a' stroke-width='1.5'/%3E%3C/svg%3E");
|
|
36
|
+
background-repeat: no-repeat;
|
|
37
|
+
background-position: right var(--rb-space-3) center;
|
|
38
|
+
}
|
|
39
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-textarea {
|
|
40
|
+
min-height: 5rem;
|
|
41
|
+
resize: vertical;
|
|
42
|
+
}
|
|
43
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-input::placeholder,
|
|
44
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-textarea::placeholder {
|
|
45
|
+
color: var(--rb-text-faint);
|
|
46
|
+
}
|
|
47
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-input:focus-visible,
|
|
48
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-textarea:focus-visible,
|
|
49
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-select:focus-visible {
|
|
50
|
+
outline: none;
|
|
51
|
+
border-color: var(--rb-accent);
|
|
52
|
+
box-shadow: 0 0 0 3px var(--rb-accent-wash);
|
|
53
|
+
}
|
|
54
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-input[aria-invalid="true"],
|
|
55
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-textarea[aria-invalid="true"] {
|
|
56
|
+
border-color: var(--rb-danger);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-choice {
|
|
60
|
+
display: inline-flex;
|
|
61
|
+
align-items: center;
|
|
62
|
+
gap: var(--rb-space-2);
|
|
63
|
+
color: var(--rb-text);
|
|
64
|
+
font-size: var(--rb-text-sm);
|
|
65
|
+
cursor: pointer;
|
|
66
|
+
}
|
|
67
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-checkbox,
|
|
68
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-radio,
|
|
69
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-switch {
|
|
70
|
+
accent-color: var(--rb-accent);
|
|
71
|
+
width: 1rem;
|
|
72
|
+
height: 1rem;
|
|
73
|
+
cursor: pointer;
|
|
74
|
+
}
|
|
75
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-switch {
|
|
76
|
+
width: 2rem;
|
|
77
|
+
}
|
|
78
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-checkbox:focus-visible,
|
|
79
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-radio:focus-visible,
|
|
80
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-switch:focus-visible {
|
|
81
|
+
outline: 2px solid var(--rb-accent);
|
|
82
|
+
outline-offset: 2px;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@media (prefers-reduced-motion: reduce) {
|
|
86
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-input,
|
|
87
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-textarea,
|
|
88
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-select {
|
|
89
|
+
transition: none;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* mono-field — nav link (sidebar/tree row)
|
|
2
|
+
* Hover fills to surface-2 — the one place a fill color isn't white — and a
|
|
3
|
+
* thin 2px accent bar lights the left edge on hover/active. Thin and quiet,
|
|
4
|
+
* not bold. */
|
|
5
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).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
|
+
text-decoration: none;
|
|
14
|
+
font-size: var(--rb-text-sm);
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
transition:
|
|
17
|
+
background var(--rb-transition),
|
|
18
|
+
color var(--rb-transition);
|
|
19
|
+
}
|
|
20
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-link:hover {
|
|
21
|
+
background: var(--rb-surface-2);
|
|
22
|
+
}
|
|
23
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-link::before {
|
|
24
|
+
content: "";
|
|
25
|
+
position: absolute;
|
|
26
|
+
left: 0;
|
|
27
|
+
top: 6px;
|
|
28
|
+
bottom: 6px;
|
|
29
|
+
width: 2px;
|
|
30
|
+
border-radius: 2px;
|
|
31
|
+
background: transparent;
|
|
32
|
+
transition: background var(--rb-transition);
|
|
33
|
+
}
|
|
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 {
|
|
36
|
+
background: var(--rb-accent);
|
|
37
|
+
}
|
|
38
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-link.rb-link--active {
|
|
39
|
+
background: var(--rb-surface-2);
|
|
40
|
+
color: var(--rb-accent);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@media (prefers-reduced-motion: reduce) {
|
|
44
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-link {
|
|
45
|
+
transition: none;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* mono-field — log / terminal block
|
|
2
|
+
* Pairs with .rb-pre for the shared look (surface-sunken well, hairline
|
|
3
|
+
* border, radius, small mono) -- .rb-log itself only adds what changes for
|
|
4
|
+
* multi-line streaming output: a capped height with vertical scroll, wrapped
|
|
5
|
+
* long lines instead of .rb-pre's horizontal scroll, and a touch more
|
|
6
|
+
* line-height so dense text stays readable. Use together on one element:
|
|
7
|
+
* <pre class="rb-pre rb-log">. */
|
|
8
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).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="mono-field"], [data-rb-style="mono-field"] *).rb-pre.rb-log {
|
|
18
|
+
overflow-x: hidden;
|
|
19
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/* mono-field — muted / empty-state text
|
|
2
|
+
* Faint secondary text — captions, meta, "No results yet." style empty
|
|
3
|
+
* states. No italic: this theme carries "close to zero visual flourish";
|
|
4
|
+
* faint color alone stays consistent with its quiet, unshouty voice. */
|
|
5
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-muted {
|
|
6
|
+
color: var(--rb-text-faint);
|
|
7
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* mono-field — nav rail (vertical sidebar container)
|
|
2
|
+
* Flush edge chrome, not a floating card: fixed-width flex column, surface
|
|
3
|
+
* background, a hairline right edge. Composes with .rb-link for items --
|
|
4
|
+
* active/hover are entirely that component's own tokens, nothing new here. */
|
|
5
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-nav-rail {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
flex-shrink: 0;
|
|
9
|
+
gap: var(--rb-space-1);
|
|
10
|
+
width: 14rem;
|
|
11
|
+
padding: var(--rb-space-3);
|
|
12
|
+
background: var(--rb-surface);
|
|
13
|
+
border-right: 1px solid var(--rb-border);
|
|
14
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/* mono-field — command / log block
|
|
2
|
+
* Styled <pre> for shell commands or short log output: sunken well,
|
|
3
|
+
* hairline border, small mono, scrolls horizontally instead of wrapping. */
|
|
4
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-pre {
|
|
5
|
+
margin: 0;
|
|
6
|
+
padding: var(--rb-space-3) var(--rb-space-4);
|
|
7
|
+
background: var(--rb-surface-sunken);
|
|
8
|
+
border: 1px solid var(--rb-border);
|
|
9
|
+
border-radius: var(--rb-radius);
|
|
10
|
+
font-family: var(--rb-font-mono);
|
|
11
|
+
font-size: var(--rb-text-sm);
|
|
12
|
+
overflow-x: auto;
|
|
13
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/* mono-field — progress bar & spinner
|
|
2
|
+
* Sunken trough with a solid accent fill — no gradient here, it stays
|
|
3
|
+
* rationed to the tabs underline only. */
|
|
4
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-progress {
|
|
5
|
+
appearance: none;
|
|
6
|
+
display: block;
|
|
7
|
+
width: 100%;
|
|
8
|
+
height: 0.5rem;
|
|
9
|
+
background: var(--rb-surface-sunken);
|
|
10
|
+
border-radius: var(--rb-radius-pill);
|
|
11
|
+
overflow: hidden;
|
|
12
|
+
}
|
|
13
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-progress::-webkit-progress-bar {
|
|
14
|
+
background: var(--rb-surface-sunken);
|
|
15
|
+
}
|
|
16
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-progress::-webkit-progress-value {
|
|
17
|
+
background: var(--rb-accent);
|
|
18
|
+
}
|
|
19
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-progress::-moz-progress-bar {
|
|
20
|
+
background: var(--rb-accent);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-spinner {
|
|
24
|
+
display: inline-block;
|
|
25
|
+
width: 1.5rem;
|
|
26
|
+
height: 1.5rem;
|
|
27
|
+
border: 2px solid var(--rb-border);
|
|
28
|
+
border-top-color: var(--rb-accent);
|
|
29
|
+
border-radius: 50%;
|
|
30
|
+
animation: rb-field-spin 0.8s linear infinite;
|
|
31
|
+
}
|
|
32
|
+
@keyframes rb-field-spin {
|
|
33
|
+
to {
|
|
34
|
+
transform: rotate(360deg);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@media (prefers-reduced-motion: reduce) {
|
|
39
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-spinner {
|
|
40
|
+
animation-duration: 2s;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/* mono-field — 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
|
+
* shadow or glow anywhere in this theme -- the current node signals itself
|
|
15
|
+
* through border and weight alone. */
|
|
16
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper {
|
|
17
|
+
display: flex;
|
|
18
|
+
isolation: isolate;
|
|
19
|
+
list-style: none;
|
|
20
|
+
margin: 0;
|
|
21
|
+
padding: 0;
|
|
22
|
+
}
|
|
23
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper__step {
|
|
24
|
+
position: relative;
|
|
25
|
+
flex: 1;
|
|
26
|
+
min-width: 0;
|
|
27
|
+
display: flex;
|
|
28
|
+
flex-direction: column;
|
|
29
|
+
align-items: center;
|
|
30
|
+
gap: var(--rb-space-2);
|
|
31
|
+
text-align: center;
|
|
32
|
+
}
|
|
33
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper__step:not(:first-child)::before {
|
|
34
|
+
content: "";
|
|
35
|
+
position: absolute;
|
|
36
|
+
top: 1rem;
|
|
37
|
+
right: 50%;
|
|
38
|
+
width: 100%;
|
|
39
|
+
height: 2px;
|
|
40
|
+
background: var(--rb-surface-sunken);
|
|
41
|
+
z-index: -1;
|
|
42
|
+
transition: background-color var(--rb-transition);
|
|
43
|
+
}
|
|
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 {
|
|
46
|
+
background: var(--rb-accent);
|
|
47
|
+
}
|
|
48
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).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-medium);
|
|
60
|
+
}
|
|
61
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper__label {
|
|
62
|
+
font-size: var(--rb-text-sm);
|
|
63
|
+
color: var(--rb-text-faint);
|
|
64
|
+
}
|
|
65
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper--complete .rb-stepper__node {
|
|
66
|
+
background: var(--rb-accent);
|
|
67
|
+
color: var(--rb-accent-fg);
|
|
68
|
+
}
|
|
69
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper--complete .rb-stepper__label {
|
|
70
|
+
color: var(--rb-text);
|
|
71
|
+
}
|
|
72
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper--current .rb-stepper__node {
|
|
73
|
+
background: var(--rb-surface);
|
|
74
|
+
border-color: var(--rb-accent);
|
|
75
|
+
color: var(--rb-accent);
|
|
76
|
+
}
|
|
77
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper--current .rb-stepper__label {
|
|
78
|
+
color: var(--rb-accent);
|
|
79
|
+
font-weight: var(--rb-font-weight-medium);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@media (prefers-reduced-motion: reduce) {
|
|
83
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-stepper__step:not(:first-child)::before {
|
|
84
|
+
transition: none;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* mono-field — table
|
|
2
|
+
* Dense data table: a faint header rule, tabular numerals, row hover to
|
|
3
|
+
* surface-2. Headers stay normal case, weight 500 — never uppercase. */
|
|
4
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-table {
|
|
5
|
+
width: 100%;
|
|
6
|
+
border-collapse: collapse;
|
|
7
|
+
color: var(--rb-text);
|
|
8
|
+
font-size: var(--rb-text-sm);
|
|
9
|
+
font-variant-numeric: tabular-nums;
|
|
10
|
+
}
|
|
11
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-table th {
|
|
12
|
+
padding: var(--rb-space-2) var(--rb-space-3);
|
|
13
|
+
border-bottom: 1px solid var(--rb-border);
|
|
14
|
+
color: var(--rb-text-faint);
|
|
15
|
+
text-align: left;
|
|
16
|
+
font-weight: var(--rb-font-weight-medium);
|
|
17
|
+
letter-spacing: var(--rb-label-tracking);
|
|
18
|
+
text-transform: none;
|
|
19
|
+
}
|
|
20
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-table td {
|
|
21
|
+
padding: var(--rb-space-2) var(--rb-space-3);
|
|
22
|
+
border-bottom: 1px solid var(--rb-border);
|
|
23
|
+
color: var(--rb-text);
|
|
24
|
+
}
|
|
25
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-table tbody tr:hover td {
|
|
26
|
+
background: var(--rb-surface-2);
|
|
27
|
+
}
|
|
28
|
+
/* --interactive: clickable rows (a tabindex tr, or a row-wrapping button/link) —
|
|
29
|
+
* pointer cursor plus a keyboard-equivalent of the hover wash and a focus ring. */
|
|
30
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-table--interactive tbody tr {
|
|
31
|
+
cursor: pointer;
|
|
32
|
+
}
|
|
33
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-table--interactive tbody tr:focus-visible,
|
|
34
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-table--interactive tbody tr:has(:focus-visible) {
|
|
35
|
+
outline: 2px solid var(--rb-accent);
|
|
36
|
+
outline-offset: -2px;
|
|
37
|
+
}
|
|
38
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-table--interactive tbody tr:focus-visible td,
|
|
39
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-table--interactive tbody tr:has(:focus-visible) td {
|
|
40
|
+
background: var(--rb-surface-2);
|
|
41
|
+
}
|
|
42
|
+
/* Numeric cells take the tabular-numeral voice — prices and counts align. */
|
|
43
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-table td.rb-num,
|
|
44
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-table th.rb-num {
|
|
45
|
+
text-align: right;
|
|
46
|
+
font-variant-numeric: tabular-nums;
|
|
47
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* mono-field — tabs
|
|
2
|
+
* Normal-case text tabs. The active tab carries accent text and is
|
|
3
|
+
* underlined with the theme's one gradient — rationed here and nowhere else. */
|
|
4
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-tabs {
|
|
5
|
+
display: flex;
|
|
6
|
+
gap: var(--rb-space-2);
|
|
7
|
+
border-bottom: 1px solid var(--rb-border);
|
|
8
|
+
}
|
|
9
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-tab {
|
|
10
|
+
position: relative;
|
|
11
|
+
padding: var(--rb-space-2) var(--rb-space-4);
|
|
12
|
+
background: transparent;
|
|
13
|
+
border: 0;
|
|
14
|
+
color: var(--rb-text-soft);
|
|
15
|
+
font-family: var(--rb-font-body);
|
|
16
|
+
font-weight: var(--rb-font-weight-medium);
|
|
17
|
+
font-size: var(--rb-text-sm);
|
|
18
|
+
text-transform: none;
|
|
19
|
+
cursor: pointer;
|
|
20
|
+
transition: color var(--rb-transition);
|
|
21
|
+
}
|
|
22
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-tab:hover {
|
|
23
|
+
color: var(--rb-text);
|
|
24
|
+
}
|
|
25
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-tab.rb-tab--active,
|
|
26
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-tab[aria-selected="true"] {
|
|
27
|
+
color: var(--rb-accent);
|
|
28
|
+
}
|
|
29
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-tab.rb-tab--active::after,
|
|
30
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-tab[aria-selected="true"]::after {
|
|
31
|
+
content: "";
|
|
32
|
+
position: absolute;
|
|
33
|
+
left: var(--rb-space-3);
|
|
34
|
+
right: var(--rb-space-3);
|
|
35
|
+
bottom: -1px;
|
|
36
|
+
height: 2px;
|
|
37
|
+
border-radius: 2px 2px 0 0;
|
|
38
|
+
background: var(--rb-accent-grad);
|
|
39
|
+
}
|
|
40
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-tabpanel {
|
|
41
|
+
padding: var(--rb-space-4) 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@media (prefers-reduced-motion: reduce) {
|
|
45
|
+
:where([data-rb-style="mono-field"], [data-rb-style="mono-field"] *).rb-tab {
|
|
46
|
+
transition: none;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# mono-field
|
|
2
|
+
|
|
3
|
+
The library's deliberately restrained theme — a quiet foil to the glow,
|
|
4
|
+
gradient, and neon themes elsewhere in the roster. Near-flat grayscale
|
|
5
|
+
surfaces carry close to zero visual flourish: hierarchy comes from thin 1px
|
|
6
|
+
hairline borders and generous spacing rather than color contrast between
|
|
7
|
+
surface layers, shadows are barely perceptible, there is no glass and no
|
|
8
|
+
glow, and type stays small, tight, and system-ui with no uppercase tricks
|
|
9
|
+
anywhere — no shouty labels, everything stays normal sentence/title case. The
|
|
10
|
+
accent is a near-black ink-blue rather than any saturated hue — just enough
|
|
11
|
+
to be findable as "the interactive color" without ever reading as
|
|
12
|
+
decoration. This is a **standalone** theme: it ships no light/dark pair and
|
|
13
|
+
has no ported or reverse-documented source — it is purpose-built directly to
|
|
14
|
+
the library's `--rb-*` contract.
|
|
15
|
+
|
|
16
|
+
## Color
|
|
17
|
+
|
|
18
|
+
| Role | Value | Usage |
|
|
19
|
+
| --- | --- | --- |
|
|
20
|
+
| Background | `#ffffff` | Page canvas |
|
|
21
|
+
| Surface | `#ffffff` | Cards, dialogs, default buttons — same as bg |
|
|
22
|
+
| Surface 2 | `#f7f7f7` | Link/row hover, the alert panel — the one non-white fill |
|
|
23
|
+
| Surface sunken | `#f0f0f0` | Inset fields, progress trough |
|
|
24
|
+
| Text | `#111111` | Body text |
|
|
25
|
+
| Text soft | `#5a5a5a` | Secondary text, labels |
|
|
26
|
+
| Text faint | `#6b6b6b` | Meta, table headers |
|
|
27
|
+
| Border | `#e0e0e0` | Resting hairline borders |
|
|
28
|
+
| Border strong | `#c4c4c4` | Hover/emphasis borders |
|
|
29
|
+
| Accent | `#1d2733` (near-black ink-blue) | The sole interactive color: buttons, focus, active state |
|
|
30
|
+
| Accent fg | `#ffffff` | White ink on the solid accent fill |
|
|
31
|
+
| Accent wash | `rgba(29,39,51,.06)` | Focus ring — deliberately barely-there |
|
|
32
|
+
| Info | `#4a6fa5` | Informational chips (desaturated vs. the rest of the roster; 4.77:1 on surface-2) |
|
|
33
|
+
| Success | `#3f7d4f` | Positive status (desaturated; 4.60:1 on surface-2) |
|
|
34
|
+
| Warning | `#91681b` | Caution status (desaturated; darkened from `#a9791f`, 3.60:1, to 4.67:1 on surface-2) |
|
|
35
|
+
| Danger | `#a13a3a` | Destructive/error (desaturated; 6.16:1 on surface-2) |
|
|
36
|
+
|
|
37
|
+
**Rules.** Visual hierarchy comes from thin 1px hairline borders and spacing,
|
|
38
|
+
not from color contrast between surface layers — `--rb-surface` equals
|
|
39
|
+
`--rb-bg`, and `--rb-surface-2` is spent in exactly two places (link/row
|
|
40
|
+
hover, the alert panel). Even the required semantic status colors are
|
|
41
|
+
desaturated compared to how other themes in the library render them, to keep
|
|
42
|
+
this theme's voice consistently quiet. Colour beyond the accent is earned,
|
|
43
|
+
and the accent itself is spent sparingly — never for decoration.
|
|
44
|
+
|
|
45
|
+
## Typography
|
|
46
|
+
|
|
47
|
+
- **Display & body:** the system-ui stack
|
|
48
|
+
(`system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`)
|
|
49
|
+
for both — there is no separate display voice.
|
|
50
|
+
- **Mono:** `ui-monospace, "Cascadia Code", …` reserved for the `--rb-font-mono`
|
|
51
|
+
token; the baseline component set doesn't render code.
|
|
52
|
+
- **Weight:** 400 body, 500 medium (labels, buttons, badges, table headers),
|
|
53
|
+
600 bold — this theme never goes past 600; there is no true bold-800 weight
|
|
54
|
+
anywhere, part of the quiet voice.
|
|
55
|
+
- **Case:** normal sentence/title case everywhere. Buttons, badges, labels,
|
|
56
|
+
and table headers are never uppercase — unusual among the library's themes,
|
|
57
|
+
but consistent with this one's no-shouting rule.
|
|
58
|
+
- **Size & tracking:** small and tight — `--rb-text-sm` is 13px,
|
|
59
|
+
`--rb-heading-tracking` is `-0.005em`, `--rb-label-tracking` is `0.02em`.
|
|
60
|
+
- **Bare tags:** unclassed `h1`-`h6` pick up the same system-ui voice as the
|
|
61
|
+
body (weight 600, tracking `-0.005em`, `--rb-space-3` margin below,
|
|
62
|
+
relaxed `line-height: 1.3` — quiet, not tight). Bare `p` shares that
|
|
63
|
+
margin; bare `ul`/`ol` add it too, with `--rb-space-4` marker indent (real
|
|
64
|
+
disc/decimal markers, not stripped).
|
|
65
|
+
|
|
66
|
+
## Shape & effects
|
|
67
|
+
|
|
68
|
+
- Radius `0.25rem` for buttons, inputs, and alerts; `0.375rem` for cards and
|
|
69
|
+
dialogs; pills for badges and the progress trough.
|
|
70
|
+
- Shadows are barely perceptible (`--rb-shadow-sm` resting, `--rb-shadow-lg`
|
|
71
|
+
for raised cards, dialogs, and the primary button's hover state) — no
|
|
72
|
+
glass, no glow, anywhere in this theme.
|
|
73
|
+
- Focus is a plain 2px accent outline on buttons and choice controls; form
|
|
74
|
+
fields instead swap their border to accent and add a thin accent-wash ring
|
|
75
|
+
(the wash token itself is only 6% alpha, so the ring reads as barely-there,
|
|
76
|
+
consistent with the theme). Nav-link rows (`.rb-link`) don't carry a
|
|
77
|
+
themed focus style — matching this library's existing baseline (e.g.
|
|
78
|
+
arcane-obsidian) — so keyboard focus there falls back to the browser's
|
|
79
|
+
default outline.
|
|
80
|
+
- The **one gradient** (`--rb-accent-grad`, a subtle two-stop near-grayscale
|
|
81
|
+
ramp) is rationed to exactly one place: the active-tab underline. It
|
|
82
|
+
appears nowhere else — primary buttons stay a solid accent fill, never the
|
|
83
|
+
gradient.
|
|
84
|
+
- Transitions `0.12s` — quick, not showy. Every transition and animation
|
|
85
|
+
respects `prefers-reduced-motion`.
|
|
86
|
+
- Spacing rhythm `--rb-space-1..5` (0.25rem to 1.5rem).
|
|
87
|
+
|
|
88
|
+
## Components
|
|
89
|
+
|
|
90
|
+
Class prefix `rb-`; shared token/class contract with the other themes. Only
|
|
91
|
+
the baseline ten — no theme extras.
|
|
92
|
+
|
|
93
|
+
- **Button** `.rb-btn` — plain bordered ghost on white by default;
|
|
94
|
+
`--primary` is the one solid accent fill (barely-there shadow lift on
|
|
95
|
+
hover, no transform, no lift); `--accent` an accent-wash chip; `--danger` a
|
|
96
|
+
danger-colored ghost; `--ghost` chromeless. `--sm` is a compact size for
|
|
97
|
+
inline and table-row actions. `.rb-icon-btn` is a square icon-only hit
|
|
98
|
+
target (>=2rem), paired with `.rb-btn`.
|
|
99
|
+
- **Card** `.rb-card` (+ `--raised`) — white panel; the hairline border does
|
|
100
|
+
most of the definition work since surface equals bg.
|
|
101
|
+
- **NavLink** `.rb-link` — sidebar/tree row; hover fills to surface-2 (the
|
|
102
|
+
one non-white fill besides the alert) and lights a thin 2px accent bar on
|
|
103
|
+
the left edge on hover/active.
|
|
104
|
+
- **Nav rail** `.rb-nav-rail` — the sidebar container: 14rem fixed-width flex
|
|
105
|
+
column, surface background, a hairline right edge. Composes with `.rb-link`
|
|
106
|
+
for items; introduces no active-state convention of its own.
|
|
107
|
+
- **Form** `.rb-input` / `.rb-textarea` / `.rb-select` / `.rb-label` /
|
|
108
|
+
`.rb-field` / `.rb-choice` / `.rb-checkbox` / `.rb-radio` / `.rb-switch` —
|
|
109
|
+
sunken fields; focus swaps to the accent border plus a barely-there wash
|
|
110
|
+
ring; labels are normal case, weight 500.
|
|
111
|
+
- **Badge** `.rb-badge` — pill, normal case (unusual for a badge, but matches
|
|
112
|
+
this theme's no-shouting rule), weight 500, a 12%-alpha tint of its hue
|
|
113
|
+
behind full-strength (but desaturated) text.
|
|
114
|
+
- **Alert** `.rb-alert` — surface-2 panel, a rare use of the theme's one
|
|
115
|
+
non-white surface so a flagged message reads as such; a thin 2px semantic
|
|
116
|
+
left bar (not a bold 3-6px bar).
|
|
117
|
+
- **Dialog** `.rb-dialog` — native `<dialog>`, white pane, subtle shadow, a
|
|
118
|
+
light blurred backdrop over a lighter-than-usual `rgba(0,0,0,.3)` scrim,
|
|
119
|
+
normal-case weight-600 title.
|
|
120
|
+
- **Tabs** `.rb-tabs` / `.rb-tab` / `.rb-tabpanel` — normal-case text tabs;
|
|
121
|
+
the active tab is accent-colored and underlined with the theme's one
|
|
122
|
+
rationed gradient.
|
|
123
|
+
- **Table** `.rb-table` (+ `.rb-num`) — faint header rule, tabular numerals,
|
|
124
|
+
row hover to surface-2, normal-case weight-500 headers (never uppercase).
|
|
125
|
+
`--interactive` marks clickable rows: pointer cursor, plus a focus-visible
|
|
126
|
+
ring (and the surface-2 wash) for a `tabindex` row or a row-wrapping
|
|
127
|
+
button/link.
|
|
128
|
+
- **Progress / Spinner** `.rb-progress` / `.rb-spinner` — sunken
|
|
129
|
+
trough, solid accent fill (no gradient here — that stays rationed to tabs
|
|
130
|
+
only).
|
|
131
|
+
- **Stepper** `.rb-stepper` (+ `__step` / `__node` / `__label`, `--complete` /
|
|
132
|
+
`--current` / `--upcoming`) — a milestone rail: complete nodes solid accent
|
|
133
|
+
with a checkmark, current a white-on-accent-border ring (no shadow or glow
|
|
134
|
+
anywhere in this theme — the ring and weight alone signal it), upcoming
|
|
135
|
+
faint surface-2. Rail track is `surface-sunken`; each connector segment
|
|
136
|
+
fills to accent once its own step is reached (complete or current), so
|
|
137
|
+
the rail can't drift out of sync with the step states.
|
|
138
|
+
- **Muted text** `.rb-muted` — faint secondary/empty-state text;
|
|
139
|
+
`color: var(--rb-text-faint)` only, no italic — this theme's "close to zero
|
|
140
|
+
visual flourish" rule rules out a decorative slant too.
|
|
141
|
+
- **Pre / log block** `.rb-pre` — command/log `<pre>`; sunken background,
|
|
142
|
+
hairline border, radius, small mono, horizontal scroll. Pair with `.rb-log`
|
|
143
|
+
(`<pre class="rb-pre rb-log">`) for multi-line streaming output: a capped
|
|
144
|
+
16rem height with vertical scroll, wrapped lines instead of horizontal
|
|
145
|
+
scroll, and roomier line-height for dense text.
|
|
146
|
+
|
|
147
|
+
## Scoping
|
|
148
|
+
|
|
149
|
+
Every rule is guarded by `data-rb-style="mono-field"` (self or ancestor),
|
|
150
|
+
wrapped in zero-specificity `:where()`. Set the attribute on `<html>` for a
|
|
151
|
+
page or on a container for an embedded island.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* mono-field — full theme entry point */
|
|
2
|
+
@import "./tokens.css";
|
|
3
|
+
@import "./base.css";
|
|
4
|
+
@import "./components/alert.css";
|
|
5
|
+
@import "./components/badge.css";
|
|
6
|
+
@import "./components/button.css";
|
|
7
|
+
@import "./components/card.css";
|
|
8
|
+
@import "./components/dialog.css";
|
|
9
|
+
@import "./components/form.css";
|
|
10
|
+
@import "./components/link.css";
|
|
11
|
+
@import "./components/nav-rail.css";
|
|
12
|
+
@import "./components/progress.css";
|
|
13
|
+
@import "./components/stepper.css";
|
|
14
|
+
@import "./components/table.css";
|
|
15
|
+
@import "./components/tabs.css";
|
|
16
|
+
@import "./components/muted.css";
|
|
17
|
+
@import "./components/pre.css";
|
|
18
|
+
@import "./components/log.css";
|