@brightweblabs/theme 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/package.json +1 -1
- package/src/base.css +1 -0
- package/src/surfaces.css +20 -25
- package/src/tokens.css +195 -0
- package/src/typography.css +35 -6
- package/themes/mq-aliases.css +28 -5
- package/themes/mq.css +32 -0
package/README.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# `@brightweblabs/theme` token contract
|
|
2
|
+
|
|
3
|
+
BrightWeb themes follow one cascade: L0 brand primitives feed L1 shadcn semantics, L2 describes brand-agnostic states, and L3 exposes component and experience controls. Package components consume L1-L3 tokens only; theme files such as `themes/mq.css` override values without changing component code.
|
|
4
|
+
|
|
5
|
+
## L3 visual tokens
|
|
6
|
+
|
|
7
|
+
| Tokens | Purpose |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `--text-ui-chip`, `--text-ui-action`, `--text-ui-calendar` | Compact control and calendar type sizes. |
|
|
10
|
+
| `--text-ui-shell-title`, `--text-ui-report-title`, `--text-ui-report-title-lg`, `--text-ui-report-metric` | Shell and CRM report display type sizes. |
|
|
11
|
+
| `--surface-overlay`, `--surface-overlay-strong`, `--surface-tooltip`, `--surface-badge-tint` | Overlay, tooltip, and tint surfaces. |
|
|
12
|
+
| `--surface-button-soft`, `--surface-button-soft-hover`, `--border-button-soft-hover` | Soft button surface states. |
|
|
13
|
+
| `--surface-selection`, `--border-selection`, `--surface-pagination-active`, `--border-pagination-active` | Selected control and active pagination states. |
|
|
14
|
+
| `--surface-danger-subtle` | Subtle destructive-state background. |
|
|
15
|
+
| `--surface-account-team`, `--surface-account-client`, `--surface-account`, `--surface-account-hover`, `--account-presence` | Account rail identity, presence, and interaction surfaces. |
|
|
16
|
+
| `--account-presence-size`, `--radius-swatch`, `--radius-pill`, `--radius-scrollbar` | Presence, swatch, pill, avatar, and scrollbar geometry. |
|
|
17
|
+
| `--row-hover-sweep`, `--surface-status-success`, `--surface-status-warning`, `--surface-status-danger` | Shared row and status surfaces. |
|
|
18
|
+
| `--tint-soft-border`, `--tint-soft-bg`, `--tint-soft-hover`, `--tint-hero-border`, `--tint-hero-bg`, `--tint-hero-fg`, `--tint-hero-hover` | Dynamic tint recipes resolved where a component supplies `--tint`. |
|
|
19
|
+
| `--scrollbar-thumb`, `--scrollbar-thumb-hover`, `--scrollbar-size` | Shared scrollbar colour and geometry. |
|
|
20
|
+
| `--toast-success-bg`, `--toast-success-border`, `--toast-warning-bg`, `--toast-warning-text`, `--toast-warning-border`, `--toast-error-bg`, `--toast-error-border`, `--toast-info-bg`, `--toast-info-text`, `--toast-info-border` | Sonner semantic toast palette. |
|
|
21
|
+
| `--shadow-accent-control`, `--shadow-toolbar-control`, `--shadow-toolbar-popover`, `--shadow-tooltip`, `--shadow-dialog`, `--shadow-phone-dropdown` | Component elevation recipes. |
|
|
22
|
+
| `--report-hero-glow`, `--report-hero-rule` | CRM report decorative surfaces. |
|
|
23
|
+
| `--shell-frame-offset`, `--shell-sidebar-width`, `--shell-sidebar-collapsed-width`, `--shell-sidebar-toggle-offset`, `--shell-sidebar-toggle-size`, `--shell-sidebar-toggle-inset`, `--shell-brand-height` | Shell frame and sidebar geometry. |
|
|
24
|
+
| `--shell-nav-item-height`, `--shell-nav-item-collapsed-size`, `--shell-nav-icon-well-size`, `--shell-nav-icon-radius`, `--shell-nav-icon-size`, `--shell-nav-divider-width`, `--shell-nav-child-height`, `--shell-nav-child-enter-offset` | Shell navigation sizing and entry geometry. |
|
|
25
|
+
| `--shell-nav-active-indicator-inset`, `--shell-nav-active-indicator-collapsed-inset`, `--shell-nav-active-indicator-width`, `--shell-nav-active-indicator-offset`, `--shell-nav-context-dot-size`, `--shell-nav-context-dot-offset`, `--shell-nav-context-dot-border` | Shell navigation active markers. |
|
|
26
|
+
| `--shell-header-divider-height`, `--shell-account-gap`, `--shell-account-padding-y` | Header and account-control anatomy. |
|
|
27
|
+
| `--shell-surface-border`, `--shell-surface-hover`, `--shell-surface-active`, `--shell-hairline`, `--shell-icon-bg`, `--shell-group-open`, `--shell-shadow`, `--shell-background`, `--shell-sidebar-background` | Shell surfaces and elevation. |
|
|
28
|
+
| `--shell-control-muted`, `--shell-nav-foreground`, `--shell-nav-active-border`, `--shell-nav-active-icon-bg`, `--shell-nav-active-icon-fg`, `--shell-nav-context-icon-bg`, `--shell-nav-context-icon-fg` | Shell control and navigation colours. |
|
|
29
|
+
| `--shell-nav-child-fg`, `--shell-nav-child-icon-fg`, `--shell-nav-child-active-bg`, `--shell-nav-child-active-border`, `--shell-navbar-fg`, `--shell-navbar-muted`, `--shell-navbar-hairline` | Child-navigation and header colours. |
|
|
30
|
+
| `--toolbar-popover-width`, `--toolbar-chip-height`, `--toolbar-search-min-width`, `--toolbar-icon-size`, `--radius-toolbar-popover` | Shared CRM toolbar geometry. |
|
|
31
|
+
| `--crm-sidebar-gap`, `--crm-report-copy-max-width`, `--crm-report-metric-min-width`, `--report-stat-min-width` | CRM dashboard and report layout. |
|
|
32
|
+
| `--timeline-list-inset`, `--timeline-line-offset`, `--timeline-marker-offset` | Timeline anatomy. |
|
|
33
|
+
| `--table-header-height`, `--table-cell-padding-x`, `--table-cell-padding-y`, `--crm-table-viewport-offset`, `--crm-table-min-height`, `--crm-table-empty-min-height` | Table row anatomy and CRM viewport sizing. |
|
|
34
|
+
| `--dialog-width`, `--sheet-width`, `--crm-sheet-width`, `--menu-min-width`, `--chart-tooltip-min-width` | Overlay and floating-surface geometry. |
|
|
35
|
+
| `--skeleton-line-height`, `--skeleton-line-height-lg`, `--skeleton-line-height-compact`, `--skeleton-line-height-xs` | Skeleton text-line anatomy. |
|
|
36
|
+
| `--section-icon-size`, `--surface-enter-offset`, `--space-eyebrow-y` | Shared surface icon, entrance, and eyebrow geometry. |
|
|
37
|
+
|
|
38
|
+
All tokens above have neutral defaults in `src/tokens.css`. Values that are derived from semantic tokens automatically follow `themes/mq.css`; a direct MQ declaration is needed only when MQ intentionally differs from the neutral default. `themes/mq-aliases.css` remains the compatibility layer for legacy MQ primitive and typography names.
|
package/package.json
CHANGED
package/src/base.css
CHANGED
package/src/surfaces.css
CHANGED
|
@@ -31,12 +31,7 @@
|
|
|
31
31
|
border-radius: var(--radius-card);
|
|
32
32
|
opacity: 0;
|
|
33
33
|
transition: opacity 300ms ease;
|
|
34
|
-
background:
|
|
35
|
-
90deg,
|
|
36
|
-
transparent,
|
|
37
|
-
color-mix(in srgb, var(--row-sweep-tint, var(--foreground)) 9%, transparent) 50%,
|
|
38
|
-
transparent
|
|
39
|
-
);
|
|
34
|
+
background: var(--row-hover-sweep);
|
|
40
35
|
}
|
|
41
36
|
|
|
42
37
|
.group:hover > .row-hover-sweep,
|
|
@@ -47,34 +42,34 @@
|
|
|
47
42
|
/* ── Canonical tinted-pill recipes ────────────────────────────────────── */
|
|
48
43
|
@layer components {
|
|
49
44
|
.tint-soft {
|
|
50
|
-
border-color:
|
|
51
|
-
background-color:
|
|
45
|
+
border-color: var(--tint-soft-border);
|
|
46
|
+
background-color: var(--tint-soft-bg);
|
|
52
47
|
color: var(--tint-strong);
|
|
53
48
|
}
|
|
54
49
|
|
|
55
50
|
.tint-soft:hover {
|
|
56
|
-
background-color:
|
|
51
|
+
background-color: var(--tint-soft-hover);
|
|
57
52
|
}
|
|
58
53
|
|
|
59
54
|
.tint-hero {
|
|
60
|
-
border-color:
|
|
61
|
-
background-color:
|
|
62
|
-
color:
|
|
55
|
+
border-color: var(--tint-hero-border);
|
|
56
|
+
background-color: var(--tint-hero-bg);
|
|
57
|
+
color: var(--tint-hero-fg);
|
|
63
58
|
}
|
|
64
59
|
|
|
65
60
|
.tint-hero:hover {
|
|
66
|
-
background-color:
|
|
61
|
+
background-color: var(--tint-hero-hover);
|
|
67
62
|
}
|
|
68
63
|
}
|
|
69
64
|
|
|
70
65
|
.section-icon {
|
|
71
66
|
display: flex;
|
|
72
|
-
width:
|
|
73
|
-
height:
|
|
67
|
+
width: var(--section-icon-size);
|
|
68
|
+
height: var(--section-icon-size);
|
|
74
69
|
flex-shrink: 0;
|
|
75
70
|
align-items: center;
|
|
76
71
|
justify-content: center;
|
|
77
|
-
border-radius:
|
|
72
|
+
border-radius: var(--radius-pill);
|
|
78
73
|
background: var(--muted);
|
|
79
74
|
color: var(--muted-foreground);
|
|
80
75
|
}
|
|
@@ -87,7 +82,7 @@
|
|
|
87
82
|
@keyframes surface-fade-in {
|
|
88
83
|
from {
|
|
89
84
|
opacity: 0;
|
|
90
|
-
transform: translateY(
|
|
85
|
+
transform: translateY(var(--surface-enter-offset));
|
|
91
86
|
}
|
|
92
87
|
to {
|
|
93
88
|
opacity: 1;
|
|
@@ -139,8 +134,8 @@
|
|
|
139
134
|
.eyebrow {
|
|
140
135
|
display: inline-flex;
|
|
141
136
|
width: fit-content;
|
|
142
|
-
padding:
|
|
143
|
-
border-radius:
|
|
137
|
+
padding: var(--space-eyebrow-y) var(--radius-control);
|
|
138
|
+
border-radius: var(--radius-pill);
|
|
144
139
|
background: var(--brand-surface-tint);
|
|
145
140
|
color: var(--brand-accent);
|
|
146
141
|
font-size: var(--text-ui-label);
|
|
@@ -152,24 +147,24 @@
|
|
|
152
147
|
.status {
|
|
153
148
|
display: inline-flex;
|
|
154
149
|
align-items: center;
|
|
155
|
-
gap:
|
|
156
|
-
padding:
|
|
157
|
-
border-radius:
|
|
150
|
+
gap: var(--space-xs);
|
|
151
|
+
padding: var(--space-xs) var(--space-sm);
|
|
152
|
+
border-radius: var(--radius-pill);
|
|
158
153
|
font-size: var(--text-ui-meta);
|
|
159
154
|
font-weight: var(--font-weight-bold);
|
|
160
155
|
}
|
|
161
156
|
|
|
162
157
|
.status.ok {
|
|
163
|
-
background:
|
|
158
|
+
background: var(--surface-status-success);
|
|
164
159
|
color: var(--semantic-success-strong);
|
|
165
160
|
}
|
|
166
161
|
|
|
167
162
|
.status.warn {
|
|
168
|
-
background:
|
|
163
|
+
background: var(--surface-status-warning);
|
|
169
164
|
color: var(--semantic-warning-strong);
|
|
170
165
|
}
|
|
171
166
|
|
|
172
167
|
.status.error {
|
|
173
|
-
background:
|
|
168
|
+
background: var(--surface-status-danger);
|
|
174
169
|
color: var(--semantic-danger-strong);
|
|
175
170
|
}
|
package/src/tokens.css
CHANGED
|
@@ -85,10 +85,15 @@
|
|
|
85
85
|
--radius-control: 0.625rem;
|
|
86
86
|
--radius-card: 0.75rem;
|
|
87
87
|
--radius-panel: 1rem;
|
|
88
|
+
--radius-swatch: 0.125rem;
|
|
89
|
+
--radius-pill: 999px;
|
|
90
|
+
--radius-scrollbar: 9999px;
|
|
88
91
|
|
|
89
92
|
--text-ui-micro: 0.625rem;
|
|
90
93
|
--text-ui-label: 0.6875rem;
|
|
91
94
|
--text-ui-meta: 0.75rem;
|
|
95
|
+
--text-ui-chip: 0.78125rem;
|
|
96
|
+
--text-ui-action: 0.8125rem;
|
|
92
97
|
--text-ui-body: 0.875rem;
|
|
93
98
|
--text-ui-card-title: 0.9375rem;
|
|
94
99
|
--text-ui-subhead: 1.125rem;
|
|
@@ -96,9 +101,29 @@
|
|
|
96
101
|
--text-ui-heading: 1.5rem;
|
|
97
102
|
--text-ui-title-sm: 1.875rem;
|
|
98
103
|
--text-ui-title: clamp(1.75rem, 1.6rem + 0.7vw, 2rem);
|
|
104
|
+
--text-ui-shell-title: 1.3125rem;
|
|
105
|
+
--text-ui-report-title: 1.75rem;
|
|
106
|
+
--text-ui-report-title-lg: 2.25rem;
|
|
107
|
+
--text-ui-calendar: 0.8rem;
|
|
108
|
+
--text-ui-report-metric: 2.5rem;
|
|
99
109
|
--text-ui-metric: 2.75rem;
|
|
100
110
|
--text-ui-metric-xl: 3.5rem;
|
|
101
111
|
--text-ui-metric-display: var(--text-ui-metric);
|
|
112
|
+
--portal-text-micro: 0.625rem;
|
|
113
|
+
--portal-text-label: 0.6875rem;
|
|
114
|
+
--portal-text-meta: 0.75rem;
|
|
115
|
+
--portal-text-body: 0.875rem;
|
|
116
|
+
--portal-text-card-title: 0.9375rem;
|
|
117
|
+
--portal-text-subhead: 1.125rem;
|
|
118
|
+
--portal-text-panel: 1.25rem;
|
|
119
|
+
--portal-text-heading: 1.5rem;
|
|
120
|
+
--portal-text-title-sm: 1.875rem;
|
|
121
|
+
--portal-text-title: clamp(1.75rem, 1.6rem + 0.7vw, 2rem);
|
|
122
|
+
--portal-text-metric: 2.75rem;
|
|
123
|
+
--portal-text-metric-lg: 3.5rem;
|
|
124
|
+
--type-paragraph-large: 1.09375rem;
|
|
125
|
+
--type-paragraph-small: 0.875rem;
|
|
126
|
+
--type-paragraph-mini: 0.75rem;
|
|
102
127
|
|
|
103
128
|
--elevate-1: color-mix(in srgb, var(--foreground) 3%, transparent);
|
|
104
129
|
--elevate-2: color-mix(in srgb, var(--foreground) 5%, transparent);
|
|
@@ -109,6 +134,131 @@
|
|
|
109
134
|
--border-hairline-soft: color-mix(in srgb, var(--foreground) 12%, transparent);
|
|
110
135
|
--border-strong: color-mix(in srgb, var(--foreground) 24%, transparent);
|
|
111
136
|
--surface-hover: color-mix(in srgb, var(--foreground) 4%, var(--card) 96%);
|
|
137
|
+
--surface-overlay: color-mix(in srgb, var(--foreground) 50%, transparent);
|
|
138
|
+
--surface-overlay-strong: color-mix(in srgb, var(--foreground) 55%, transparent);
|
|
139
|
+
--surface-tooltip: color-mix(in srgb, var(--popover) 95%, transparent);
|
|
140
|
+
--surface-badge-tint: color-mix(in srgb, currentColor 14%, transparent);
|
|
141
|
+
--surface-button-soft: color-mix(in srgb, var(--foreground) 3.5%, var(--card));
|
|
142
|
+
--surface-button-soft-hover: color-mix(in srgb, var(--foreground) 7%, var(--card));
|
|
143
|
+
--border-button-soft-hover: color-mix(in srgb, var(--foreground) 16%, transparent);
|
|
144
|
+
--surface-selection: color-mix(in srgb, var(--accent) 12%, var(--card));
|
|
145
|
+
--border-selection: color-mix(in srgb, var(--accent) 40%, var(--hairline));
|
|
146
|
+
--surface-pagination-active: color-mix(in srgb, var(--accent) 10%, var(--card));
|
|
147
|
+
--border-pagination-active: color-mix(in srgb, var(--accent) 36%, transparent);
|
|
148
|
+
--surface-danger-subtle: color-mix(in srgb, var(--semantic-danger) 10%, transparent);
|
|
149
|
+
--surface-account-team: color-mix(in srgb, var(--role-team) 20%, var(--card));
|
|
150
|
+
--surface-account-client: color-mix(in srgb, var(--role-client) 20%, var(--card));
|
|
151
|
+
--surface-account: color-mix(in srgb, var(--foreground) 3%, var(--card) 97%);
|
|
152
|
+
--surface-account-hover: color-mix(in srgb, var(--foreground) 5%, transparent);
|
|
153
|
+
--account-presence: #10b981;
|
|
154
|
+
--account-presence-size: 0.625rem;
|
|
155
|
+
--surface-status-success: color-mix(in srgb, var(--semantic-success) 14%, transparent);
|
|
156
|
+
--surface-status-warning: color-mix(in srgb, var(--semantic-warning) 14%, transparent);
|
|
157
|
+
--surface-status-danger: color-mix(in srgb, var(--semantic-danger) 12%, transparent);
|
|
158
|
+
--scrollbar-thumb: color-mix(in srgb, var(--foreground) 18%, transparent);
|
|
159
|
+
--scrollbar-thumb-hover: color-mix(in srgb, var(--foreground) 30%, transparent);
|
|
160
|
+
|
|
161
|
+
--toast-success-bg: color-mix(in srgb, var(--primary) 12%, var(--background));
|
|
162
|
+
--toast-success-border: color-mix(in srgb, var(--primary) 30%, var(--background));
|
|
163
|
+
--toast-warning-bg: color-mix(in srgb, var(--accent) 12%, var(--background));
|
|
164
|
+
--toast-warning-text: color-mix(in srgb, var(--accent) 80%, var(--foreground));
|
|
165
|
+
--toast-warning-border: color-mix(in srgb, var(--accent) 30%, var(--background));
|
|
166
|
+
--toast-error-bg: color-mix(in srgb, var(--destructive) 12%, var(--background));
|
|
167
|
+
--toast-error-border: color-mix(in srgb, var(--destructive) 30%, var(--background));
|
|
168
|
+
--toast-info-bg: color-mix(in srgb, var(--secondary) 15%, var(--background));
|
|
169
|
+
--toast-info-text: color-mix(in srgb, var(--secondary) 70%, var(--foreground));
|
|
170
|
+
--toast-info-border: color-mix(in srgb, var(--secondary) 30%, var(--background));
|
|
171
|
+
|
|
172
|
+
--shadow-accent-control: 0 4px 14px color-mix(in srgb, var(--brand-accent) 26%, transparent);
|
|
173
|
+
--shadow-toolbar-control: 0 4px 14px rgba(91, 197, 242, 0.26);
|
|
174
|
+
--shadow-toolbar-popover: 0 18px 44px rgba(10, 21, 26, 0.16), 0 2px 10px rgba(10, 21, 26, 0.08);
|
|
175
|
+
--shadow-tooltip: 0 14px 34px var(--elevate-3);
|
|
176
|
+
--shadow-dialog: 0 24px 64px var(--elevate-3);
|
|
177
|
+
--shadow-phone-dropdown: 0 12px 28px var(--elevate-3);
|
|
178
|
+
|
|
179
|
+
--report-hero-glow: radial-gradient(circle, color-mix(in srgb, var(--accent) 38%, transparent), transparent 70%);
|
|
180
|
+
--report-hero-rule: linear-gradient(90deg, transparent, color-mix(in srgb, var(--accent) 60%, transparent), transparent);
|
|
181
|
+
|
|
182
|
+
--shell-frame-offset: 0.75rem;
|
|
183
|
+
--shell-sidebar-width: 15rem;
|
|
184
|
+
--shell-sidebar-collapsed-width: 4rem;
|
|
185
|
+
--shell-sidebar-toggle-offset: 3.25rem;
|
|
186
|
+
--shell-sidebar-toggle-size: 1.625rem;
|
|
187
|
+
--shell-sidebar-toggle-inset: -0.8125rem;
|
|
188
|
+
--shell-brand-height: 2.25rem;
|
|
189
|
+
--shell-nav-item-height: 2.625rem;
|
|
190
|
+
--shell-nav-item-collapsed-size: 2.75rem;
|
|
191
|
+
--shell-nav-icon-well-size: 1.6875rem;
|
|
192
|
+
--shell-nav-icon-radius: 0.5rem;
|
|
193
|
+
--shell-nav-icon-size: 0.9375rem;
|
|
194
|
+
--shell-nav-divider-width: 2.25rem;
|
|
195
|
+
--shell-nav-child-height: 2.25rem;
|
|
196
|
+
--shell-nav-child-enter-offset: 0.25rem;
|
|
197
|
+
--shell-nav-active-indicator-inset: 0.5625rem;
|
|
198
|
+
--shell-nav-active-indicator-collapsed-inset: 0.6875rem;
|
|
199
|
+
--shell-nav-active-indicator-width: 0.1875rem;
|
|
200
|
+
--shell-nav-active-indicator-offset: -0.0625rem;
|
|
201
|
+
--shell-nav-context-dot-size: 0.5rem;
|
|
202
|
+
--shell-nav-context-dot-offset: -0.1875rem;
|
|
203
|
+
--shell-nav-context-dot-border: 0.125rem;
|
|
204
|
+
--shell-header-divider-height: 1.25rem;
|
|
205
|
+
--shell-account-gap: 0.6875rem;
|
|
206
|
+
--shell-account-padding-y: 0.4375rem;
|
|
207
|
+
--shell-surface-border: color-mix(in srgb, var(--foreground) 10%, transparent);
|
|
208
|
+
--shell-surface-hover: color-mix(in srgb, var(--card) 78%, var(--foreground) 3%);
|
|
209
|
+
--shell-surface-active: color-mix(in srgb, var(--accent) 11%, var(--card) 89%);
|
|
210
|
+
--shell-hairline: color-mix(in srgb, var(--foreground) 7%, transparent);
|
|
211
|
+
--shell-icon-bg: color-mix(in srgb, var(--foreground) 4.5%, var(--card) 95.5%);
|
|
212
|
+
--shell-group-open: color-mix(in srgb, var(--foreground) 2.6%, transparent);
|
|
213
|
+
--shell-shadow: 0 16px 38px rgba(10, 21, 26, 0.06), 0 2px 10px rgba(10, 21, 26, 0.04);
|
|
214
|
+
--shell-background: #f4f8fb;
|
|
215
|
+
--shell-sidebar-background: linear-gradient(180deg, color-mix(in srgb, var(--card) 94%, white 6%) 0%, color-mix(in srgb, var(--card) 98%, transparent) 100%);
|
|
216
|
+
--shell-control-muted: color-mix(in srgb, var(--foreground) 58%, transparent);
|
|
217
|
+
--shell-nav-foreground: color-mix(in srgb, var(--foreground) 70%, transparent);
|
|
218
|
+
--shell-nav-active-border: color-mix(in srgb, var(--accent) 28%, var(--shell-surface-border));
|
|
219
|
+
--shell-nav-active-icon-bg: color-mix(in srgb, var(--accent) 18%, var(--card) 82%);
|
|
220
|
+
--shell-nav-active-icon-fg: color-mix(in srgb, var(--accent) 82%, black 18%);
|
|
221
|
+
--shell-nav-context-icon-bg: color-mix(in srgb, var(--accent) 16%, var(--card) 84%);
|
|
222
|
+
--shell-nav-context-icon-fg: color-mix(in srgb, var(--accent) 80%, black 20%);
|
|
223
|
+
--shell-nav-child-fg: color-mix(in srgb, var(--foreground) 64%, transparent);
|
|
224
|
+
--shell-nav-child-icon-fg: color-mix(in srgb, var(--foreground) 48%, transparent);
|
|
225
|
+
--shell-nav-child-active-bg: color-mix(in srgb, var(--accent) 13%, var(--card) 87%);
|
|
226
|
+
--shell-nav-child-active-border: color-mix(in srgb, var(--accent) 26%, var(--shell-surface-border));
|
|
227
|
+
--shell-navbar-fg: #0a151a;
|
|
228
|
+
--shell-navbar-muted: #8e8f9a;
|
|
229
|
+
--shell-navbar-hairline: color-mix(in srgb, #0a151a 8%, transparent);
|
|
230
|
+
|
|
231
|
+
--toolbar-popover-width: 18.75rem;
|
|
232
|
+
--toolbar-chip-height: 1.875rem;
|
|
233
|
+
--toolbar-search-min-width: 13.125rem;
|
|
234
|
+
--toolbar-icon-size: 0.9375rem;
|
|
235
|
+
--radius-toolbar-popover: 0.875rem;
|
|
236
|
+
--crm-sidebar-gap: 1.125rem;
|
|
237
|
+
--crm-report-copy-max-width: 34rem;
|
|
238
|
+
--crm-report-metric-min-width: 6.5rem;
|
|
239
|
+
--timeline-list-inset: 0.625rem;
|
|
240
|
+
--timeline-line-offset: 0.28125rem;
|
|
241
|
+
--timeline-marker-offset: 0.3125rem;
|
|
242
|
+
--table-header-height: 2.25rem;
|
|
243
|
+
--table-cell-padding-x: 1rem;
|
|
244
|
+
--table-cell-padding-y: 0.5rem;
|
|
245
|
+
--crm-table-viewport-offset: 12rem;
|
|
246
|
+
--crm-table-min-height: 35rem;
|
|
247
|
+
--crm-table-empty-min-height: 26.25rem;
|
|
248
|
+
--report-stat-min-width: 9rem;
|
|
249
|
+
--dialog-width: 28rem;
|
|
250
|
+
--sheet-width: 24rem;
|
|
251
|
+
--crm-sheet-width: 32rem;
|
|
252
|
+
--menu-min-width: 8rem;
|
|
253
|
+
--chart-tooltip-min-width: 8rem;
|
|
254
|
+
--skeleton-line-height: 0.6rem;
|
|
255
|
+
--skeleton-line-height-lg: 0.7rem;
|
|
256
|
+
--skeleton-line-height-compact: 0.55rem;
|
|
257
|
+
--skeleton-line-height-xs: 0.5rem;
|
|
258
|
+
--section-icon-size: 1.875rem;
|
|
259
|
+
--surface-enter-offset: 0.625rem;
|
|
260
|
+
--space-eyebrow-y: 0.375rem;
|
|
261
|
+
--scrollbar-size: 0.375rem;
|
|
112
262
|
|
|
113
263
|
--skeleton: color-mix(in srgb, var(--foreground) 7%, transparent);
|
|
114
264
|
--skeleton-strong: color-mix(in srgb, var(--foreground) 11%, transparent);
|
|
@@ -143,6 +293,18 @@
|
|
|
143
293
|
--brand-panel-muted: color-mix(in srgb, var(--brand-white) 68%, transparent);
|
|
144
294
|
--brand-panel-subtle: color-mix(in srgb, var(--brand-white) 48%, transparent);
|
|
145
295
|
--brand-panel-border: color-mix(in srgb, var(--brand-accent) 22%, transparent);
|
|
296
|
+
--project-surface-primary: var(--card);
|
|
297
|
+
--project-surface-secondary: color-mix(in srgb, var(--foreground) 2%, var(--card) 98%);
|
|
298
|
+
--project-surface-item: color-mix(in srgb, var(--card) 96%, transparent);
|
|
299
|
+
--project-surface-hero: color-mix(in srgb, var(--accent) 8%, var(--card) 92%);
|
|
300
|
+
--project-surface-hero-border: color-mix(in srgb, var(--accent) 26%, var(--foreground) 8%);
|
|
301
|
+
--project-hero-surface: var(--brand-panel-surface);
|
|
302
|
+
--project-hero-surface-raised: var(--brand-panel-surface-raised);
|
|
303
|
+
--project-hero-foreground: var(--brand-panel-foreground);
|
|
304
|
+
--project-hero-muted: var(--brand-panel-muted);
|
|
305
|
+
--project-hero-subtle: var(--brand-panel-subtle);
|
|
306
|
+
--project-hero-border: var(--brand-panel-border);
|
|
307
|
+
--project-surface-padding: 1.25rem;
|
|
146
308
|
--row-sweep-tint: var(--foreground);
|
|
147
309
|
--surface-card: color-mix(in srgb, var(--foreground) 2%, var(--card) 98%);
|
|
148
310
|
--surface-card-light: var(--card);
|
|
@@ -150,6 +312,26 @@
|
|
|
150
312
|
--stat-cell-padding: 1rem;
|
|
151
313
|
}
|
|
152
314
|
|
|
315
|
+
/* Dynamic tint recipes resolve where components provide --tint. */
|
|
316
|
+
@layer components {
|
|
317
|
+
.row-hover-sweep {
|
|
318
|
+
--row-hover-sweep: linear-gradient(90deg, transparent, color-mix(in srgb, var(--row-sweep-tint, var(--foreground)) 9%, transparent) 50%, transparent);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.tint-soft {
|
|
322
|
+
--tint-soft-border: color-mix(in srgb, var(--tint) 34%, transparent);
|
|
323
|
+
--tint-soft-bg: color-mix(in srgb, var(--tint) 10%, var(--card));
|
|
324
|
+
--tint-soft-hover: color-mix(in srgb, var(--tint) 14%, var(--card));
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.tint-hero {
|
|
328
|
+
--tint-hero-border: color-mix(in srgb, var(--tint) 46%, transparent);
|
|
329
|
+
--tint-hero-bg: color-mix(in srgb, var(--tint) 16%, transparent);
|
|
330
|
+
--tint-hero-fg: color-mix(in srgb, var(--tint) 18%, white);
|
|
331
|
+
--tint-hero-hover: color-mix(in srgb, var(--tint) 24%, transparent);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
153
335
|
/* Dark mode redefines the primitives and semantic base before re-deriving L1. */
|
|
154
336
|
:root.dark,
|
|
155
337
|
:root[data-theme="dark"],
|
|
@@ -235,6 +417,19 @@
|
|
|
235
417
|
--brand-panel-surface-raised: color-mix(in srgb, var(--card) 72%, var(--brand-accent));
|
|
236
418
|
--surface-card: color-mix(in srgb, var(--foreground) 2%, var(--card) 98%);
|
|
237
419
|
--surface-card-light: color-mix(in srgb, var(--card) 92%, var(--brand-white) 8%);
|
|
420
|
+
|
|
421
|
+
--shell-surface-border: rgba(255, 255, 255, 0.11);
|
|
422
|
+
--shell-surface-hover: rgba(19, 37, 52, 0.96);
|
|
423
|
+
--shell-surface-active: rgba(24, 62, 82, 0.82);
|
|
424
|
+
--shell-hairline: rgba(255, 255, 255, 0.08);
|
|
425
|
+
--shell-icon-bg: rgba(255, 255, 255, 0.055);
|
|
426
|
+
--shell-group-open: rgba(255, 255, 255, 0.025);
|
|
427
|
+
--shell-shadow: 0 22px 46px rgba(0, 0, 0, 0.3), 0 4px 16px rgba(0, 0, 0, 0.2);
|
|
428
|
+
--shell-background: #06121b;
|
|
429
|
+
--shell-sidebar-background: linear-gradient(180deg, rgba(7, 18, 28, 0.92) 0%, rgba(10, 23, 33, 0.94) 100%);
|
|
430
|
+
--shell-navbar-fg: #f6fbff;
|
|
431
|
+
--shell-navbar-muted: #8da3b0;
|
|
432
|
+
--shell-navbar-hairline: rgba(255, 255, 255, 0.08);
|
|
238
433
|
}
|
|
239
434
|
|
|
240
435
|
/* Explicit light scope wins when a theme class/attribute is toggled at runtime. */
|
package/src/typography.css
CHANGED
|
@@ -32,6 +32,35 @@
|
|
|
32
32
|
color: var(--muted-foreground);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
/* Size-only utilities for component recipes that supply their own weight and rhythm. */
|
|
36
|
+
@utility text-ui-chip {
|
|
37
|
+
font-size: var(--text-ui-chip);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@utility text-ui-action {
|
|
41
|
+
font-size: var(--text-ui-action);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@utility text-ui-calendar {
|
|
45
|
+
font-size: var(--text-ui-calendar);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@utility text-ui-shell-title {
|
|
49
|
+
font-size: var(--text-ui-shell-title);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@utility text-ui-report-title {
|
|
53
|
+
font-size: var(--text-ui-report-title);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@utility text-ui-report-title-lg {
|
|
57
|
+
font-size: var(--text-ui-report-title-lg);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@utility text-ui-report-metric {
|
|
61
|
+
font-size: var(--text-ui-report-metric);
|
|
62
|
+
}
|
|
63
|
+
|
|
35
64
|
@utility text-ui-body {
|
|
36
65
|
font-family: var(--font-body), sans-serif;
|
|
37
66
|
font-size: var(--text-ui-body);
|
|
@@ -130,20 +159,20 @@
|
|
|
130
159
|
overflow-y: overlay;
|
|
131
160
|
overflow-x: hidden;
|
|
132
161
|
scrollbar-width: thin;
|
|
133
|
-
scrollbar-color:
|
|
162
|
+
scrollbar-color: var(--scrollbar-thumb) transparent;
|
|
134
163
|
|
|
135
164
|
&::-webkit-scrollbar {
|
|
136
|
-
width:
|
|
137
|
-
height:
|
|
165
|
+
width: var(--scrollbar-size);
|
|
166
|
+
height: var(--scrollbar-size);
|
|
138
167
|
}
|
|
139
168
|
&::-webkit-scrollbar-track {
|
|
140
169
|
background: transparent;
|
|
141
170
|
}
|
|
142
171
|
&::-webkit-scrollbar-thumb {
|
|
143
|
-
background-color:
|
|
144
|
-
border-radius:
|
|
172
|
+
background-color: var(--scrollbar-thumb);
|
|
173
|
+
border-radius: var(--radius-scrollbar);
|
|
145
174
|
}
|
|
146
175
|
&::-webkit-scrollbar-thumb:hover {
|
|
147
|
-
background-color:
|
|
176
|
+
background-color: var(--scrollbar-thumb-hover);
|
|
148
177
|
}
|
|
149
178
|
}
|
package/themes/mq-aliases.css
CHANGED
|
@@ -125,15 +125,38 @@
|
|
|
125
125
|
overflow-y: overlay;
|
|
126
126
|
overflow-x: hidden;
|
|
127
127
|
scrollbar-width: thin;
|
|
128
|
-
scrollbar-color:
|
|
128
|
+
scrollbar-color: var(--scrollbar-thumb) transparent;
|
|
129
129
|
|
|
130
|
-
&::-webkit-scrollbar { width:
|
|
130
|
+
&::-webkit-scrollbar { width: var(--scrollbar-size); height: var(--scrollbar-size); }
|
|
131
131
|
&::-webkit-scrollbar-track { background: transparent; }
|
|
132
132
|
&::-webkit-scrollbar-thumb {
|
|
133
|
-
background-color:
|
|
134
|
-
border-radius:
|
|
133
|
+
background-color: var(--scrollbar-thumb);
|
|
134
|
+
border-radius: var(--radius-scrollbar);
|
|
135
135
|
}
|
|
136
136
|
&::-webkit-scrollbar-thumb:hover {
|
|
137
|
-
background-color:
|
|
137
|
+
background-color: var(--scrollbar-thumb-hover);
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
|
+
|
|
141
|
+
.paragraph-large,
|
|
142
|
+
.paragraph-small,
|
|
143
|
+
.paragraph-mini {
|
|
144
|
+
font-family: var(--font-body), sans-serif;
|
|
145
|
+
font-weight: var(--font-weight-regular);
|
|
146
|
+
color: var(--foreground);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.paragraph-large {
|
|
150
|
+
font-size: var(--type-paragraph-large);
|
|
151
|
+
line-height: 1.55;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.paragraph-small {
|
|
155
|
+
font-size: var(--type-paragraph-small);
|
|
156
|
+
line-height: 1.5;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.paragraph-mini {
|
|
160
|
+
font-size: var(--type-paragraph-mini);
|
|
161
|
+
line-height: 1.45;
|
|
162
|
+
}
|
package/themes/mq.css
CHANGED
|
@@ -59,6 +59,18 @@
|
|
|
59
59
|
--brand-panel-muted: rgba(246, 251, 255, 0.66);
|
|
60
60
|
--brand-panel-subtle: rgba(246, 251, 255, 0.46);
|
|
61
61
|
--brand-panel-border: rgba(145, 211, 241, 0.2);
|
|
62
|
+
--project-surface-primary: var(--card);
|
|
63
|
+
--project-surface-secondary: color-mix(in srgb, var(--foreground) 2%, var(--card) 98%);
|
|
64
|
+
--project-surface-item: color-mix(in srgb, var(--card) 96%, transparent);
|
|
65
|
+
--project-surface-hero: color-mix(in srgb, var(--accent) 8%, var(--card) 92%);
|
|
66
|
+
--project-surface-hero-border: color-mix(in srgb, var(--accent) 26%, var(--foreground) 8%);
|
|
67
|
+
--project-hero-surface: linear-gradient(158deg, #02070d 0%, #06111c 30%, #071d2b 63%, #123747 100%);
|
|
68
|
+
--project-hero-surface-raised: #0b2634;
|
|
69
|
+
--project-hero-foreground: #f6fbff;
|
|
70
|
+
--project-hero-muted: rgba(246, 251, 255, 0.66);
|
|
71
|
+
--project-hero-subtle: rgba(246, 251, 255, 0.46);
|
|
72
|
+
--project-hero-border: rgba(145, 211, 241, 0.2);
|
|
73
|
+
--project-surface-padding: 1.25rem;
|
|
62
74
|
}
|
|
63
75
|
|
|
64
76
|
:root.dark,
|
|
@@ -137,6 +149,17 @@
|
|
|
137
149
|
--brand-panel-muted: rgba(246, 251, 255, 0.66);
|
|
138
150
|
--brand-panel-subtle: rgba(246, 251, 255, 0.46);
|
|
139
151
|
--brand-panel-border: color-mix(in srgb, var(--accent) 20%, transparent);
|
|
152
|
+
--project-surface-primary: var(--card);
|
|
153
|
+
--project-surface-secondary: color-mix(in srgb, var(--foreground) 2%, var(--card) 98%);
|
|
154
|
+
--project-surface-item: color-mix(in srgb, var(--card) 96%, transparent);
|
|
155
|
+
--project-surface-hero: color-mix(in srgb, var(--accent) 8%, var(--card) 92%);
|
|
156
|
+
--project-surface-hero-border: color-mix(in srgb, var(--accent) 26%, var(--foreground) 8%);
|
|
157
|
+
--project-hero-surface: linear-gradient(158deg, #0c2433 0%, #143b4e 52%, #1b4f66 100%);
|
|
158
|
+
--project-hero-surface-raised: #0b2634;
|
|
159
|
+
--project-hero-foreground: #f6fbff;
|
|
160
|
+
--project-hero-muted: rgba(246, 251, 255, 0.66);
|
|
161
|
+
--project-hero-subtle: rgba(246, 251, 255, 0.46);
|
|
162
|
+
--project-hero-border: color-mix(in srgb, var(--accent) 20%, transparent);
|
|
140
163
|
}
|
|
141
164
|
|
|
142
165
|
:root.light,
|
|
@@ -174,4 +197,13 @@
|
|
|
174
197
|
--border: var(--brand-border-subtle);
|
|
175
198
|
--input: rgba(10, 21, 26, 0.08);
|
|
176
199
|
--ring: rgba(91, 197, 242, 0.42);
|
|
200
|
+
--project-surface-primary: var(--card);
|
|
201
|
+
--project-surface-secondary: color-mix(in srgb, var(--foreground) 2%, var(--card) 98%);
|
|
202
|
+
--project-surface-item: color-mix(in srgb, var(--card) 96%, transparent);
|
|
203
|
+
--project-hero-surface: linear-gradient(158deg, #02070d 0%, #06111c 30%, #071d2b 63%, #123747 100%);
|
|
204
|
+
--project-hero-surface-raised: #0b2634;
|
|
205
|
+
--project-hero-foreground: #f6fbff;
|
|
206
|
+
--project-hero-muted: rgba(246, 251, 255, 0.66);
|
|
207
|
+
--project-hero-subtle: rgba(246, 251, 255, 0.46);
|
|
208
|
+
--project-hero-border: rgba(145, 211, 241, 0.2);
|
|
177
209
|
}
|