@brightweblabs/theme 0.7.4 → 0.8.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/README.md CHANGED
@@ -25,7 +25,7 @@ The family contract starts at `--font-body`, `--font-heading`, and `--font-code`
25
25
  | `text-body-lg` | `1rem` | Emphasized or introductory body copy |
26
26
  | `text-body` | `0.875rem` | Default interface body copy |
27
27
  | `text-meta` | `0.75rem` | Secondary metadata |
28
- | `text-label` | `0.6875rem` | Uppercase interface label |
28
+ | `text-label` | `0.75rem` | Compact sentence-case interface label |
29
29
  | `text-micro` | `0.625rem` | Dense supporting copy |
30
30
  | `text-kpi` | `2.75rem` | Display-face headline KPI |
31
31
  | `text-kpi-lg` | `3.5rem` | Large display-face headline KPI |
@@ -38,9 +38,10 @@ are mono, and numbers in sentences inherit their surrounding prose. The legacy
38
38
  existing rendered output for compatibility; new code should use the semantic roles
39
39
  above.
40
40
 
41
- Existing recipes remain supported and preserve their rendered values. The table
42
- below gives the recommended semantic role for new code; it is a migration guide,
43
- not a claim that every compatibility utility renders identically:
41
+ Existing recipes remain supported. Compatibility label recipes intentionally
42
+ adopt the shared sentence-case label treatment; other compatibility recipes keep
43
+ their established values. The table below gives the recommended semantic role for
44
+ new code rather than promising pixel-identical output:
44
45
 
45
46
  | Compatibility utility | Recommended role |
46
47
  | --- | --- |
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@brightweblabs/theme",
3
3
  "private": false,
4
- "version": "0.7.4",
4
+ "version": "0.8.1",
5
5
  "main": "./src/tint.ts",
6
6
  "types": "./src/tint.ts",
7
7
  "files": [
package/src/surfaces.css CHANGED
@@ -3,18 +3,54 @@
3
3
  Unlayered, these beat @layer utilities and e.g. p-0 on the CRM table card
4
4
  silently loses to the default card padding. */
5
5
  @layer components {
6
+ .card-root,
6
7
  .surface-card {
7
8
  border-radius: var(--radius-card);
8
9
  border: 1px solid var(--border-hairline);
9
10
  background: var(--surface-card);
10
- padding: var(--surface-card-padding);
11
- animation: surface-fade-in 640ms cubic-bezier(0.2, 0.7, 0.2, 1) both;
11
+ color: var(--card-foreground);
12
+ box-shadow: var(--dashboard-shadow-sm);
12
13
  }
13
14
 
15
+ .card-root[data-variant="light"],
14
16
  .surface-card.is-light {
15
17
  background: var(--surface-card-light);
16
18
  }
17
19
 
20
+ .card-root[data-variant="elevated"] {
21
+ box-shadow: var(--dashboard-shadow-md);
22
+ }
23
+
24
+ .card-root[data-variant="interactive"] {
25
+ cursor: pointer;
26
+ transition: border-color 160ms ease, box-shadow 160ms ease, transform 160ms ease;
27
+ }
28
+
29
+ .card-root[data-variant="interactive"]:hover,
30
+ .card-root[data-variant="interactive"]:focus-visible,
31
+ .card-root[data-variant="interactive"]:focus-within {
32
+ border-color: var(--border-selection);
33
+ box-shadow: var(--dashboard-shadow-md);
34
+ transform: translateY(-1px);
35
+ }
36
+
37
+ .card-root[data-variant="interactive"]:focus-visible,
38
+ .card-root[data-variant="interactive"]:focus-within {
39
+ outline: 2px solid var(--ring);
40
+ outline-offset: 2px;
41
+ }
42
+
43
+ .card-root[data-variant="insight"] {
44
+ overflow: hidden;
45
+ border-color: transparent;
46
+ background: var(--card);
47
+ box-shadow: none;
48
+ }
49
+
50
+ .card-enter {
51
+ animation: surface-fade-in 640ms cubic-bezier(0.2, 0.7, 0.2, 1) both;
52
+ }
53
+
18
54
  /* A near-black panel has strong figure/ground in light mode. In dark mode it
19
55
  elevates above the page through a lighter accent mix, border, and shadow. */
20
56
  .brand-panel {
@@ -120,6 +156,14 @@
120
156
  }
121
157
 
122
158
  @media (prefers-reduced-motion: reduce) {
159
+ .card-root,
160
+ .surface-card {
161
+ animation: none;
162
+ opacity: 1;
163
+ transform: none;
164
+ transition: none;
165
+ }
166
+
123
167
  .skeleton-ghost::after {
124
168
  display: none;
125
169
  }
@@ -138,10 +182,10 @@
138
182
  border-radius: var(--radius-pill);
139
183
  background: var(--brand-surface-tint);
140
184
  color: var(--brand-accent);
141
- font-size: var(--text-ui-label);
142
- font-weight: var(--font-weight-bold);
143
- letter-spacing: var(--type-tracking-040);
144
- text-transform: uppercase;
185
+ font-size: var(--text-meta);
186
+ font-weight: var(--font-weight-semibold);
187
+ letter-spacing: var(--type-tracking-normal);
188
+ text-transform: none;
145
189
  }
146
190
 
147
191
  .status {
package/src/tokens.css CHANGED
@@ -192,7 +192,7 @@
192
192
  --text-body-lg: 1rem;
193
193
  --text-body: 0.875rem;
194
194
  --text-meta: 0.75rem;
195
- --text-label: 0.6875rem;
195
+ --text-label: 0.75rem;
196
196
  --text-micro: 0.625rem;
197
197
  --text-metric: 2.75rem;
198
198
  --text-metric-display: var(--text-metric);
@@ -68,10 +68,10 @@
68
68
  @utility text-label {
69
69
  font-family: var(--font-body);
70
70
  font-size: var(--text-label);
71
- font-weight: var(--font-weight-medium);
72
- line-height: var(--type-leading-none);
73
- text-transform: uppercase;
74
- letter-spacing: var(--type-tracking-140);
71
+ font-weight: var(--font-weight-semibold);
72
+ line-height: var(--type-leading-140);
73
+ text-transform: none;
74
+ letter-spacing: var(--type-tracking-normal);
75
75
  }
76
76
 
77
77
  @utility text-micro {
@@ -151,10 +151,10 @@
151
151
  @utility text-ui-label {
152
152
  font-family: var(--font-body);
153
153
  font-size: var(--text-ui-label);
154
- font-weight: var(--font-weight-medium);
155
- line-height: var(--type-leading-none);
156
- text-transform: uppercase;
157
- letter-spacing: var(--type-tracking-140);
154
+ font-weight: var(--font-weight-semibold);
155
+ line-height: var(--type-leading-140);
156
+ text-transform: none;
157
+ letter-spacing: var(--type-tracking-normal);
158
158
  }
159
159
 
160
160
  @utility text-ui-meta {
@@ -317,10 +317,10 @@
317
317
  @utility portal-label {
318
318
  font-family: var(--font-body);
319
319
  font-size: var(--text-ui-label);
320
- font-weight: var(--font-weight-medium);
321
- line-height: var(--type-leading-none);
322
- text-transform: uppercase;
323
- letter-spacing: var(--type-tracking-140);
320
+ font-weight: var(--font-weight-semibold);
321
+ line-height: var(--type-leading-140);
322
+ text-transform: none;
323
+ letter-spacing: var(--type-tracking-normal);
324
324
  /* MQ parity: apps/portal/app/globals.css:663. */
325
325
  color: var(--muted-foreground);
326
326
  }
@@ -59,11 +59,11 @@
59
59
 
60
60
  .label {
61
61
  margin: 0;
62
- font-family: var(--font-display);
63
- font-size: var(--type-label);
64
- font-weight: var(--font-weight-heavy);
65
- line-height: var(--type-leading-120);
66
- letter-spacing: var(--type-tracking-120);
67
- text-transform: uppercase;
62
+ font-family: var(--font-body);
63
+ font-size: var(--text-meta);
64
+ font-weight: var(--font-weight-semibold);
65
+ line-height: var(--type-leading-140);
66
+ letter-spacing: var(--type-tracking-normal);
67
+ text-transform: none;
68
68
  }
69
69
  }