@nadicodeai/design-system 0.5.3 → 0.7.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.
@@ -69,7 +69,12 @@
69
69
  height: var(--nc-run-timeline-node);
70
70
  margin-top: 4px;
71
71
  /* Center the node on the rail: rail center minus half the node width. */
72
- margin-left: calc(var(--nc-run-timeline-rail) - (var(--nc-run-timeline-node) / 2) - 14px - var(--nc-run-timeline-node));
72
+ margin-left: calc(
73
+ var(--nc-run-timeline-rail) -
74
+ (var(--nc-run-timeline-node) / 2) -
75
+ 14px -
76
+ var(--nc-run-timeline-node)
77
+ );
73
78
  border-radius: var(--nc-rounded-full);
74
79
  background: var(--nc-canvas);
75
80
  box-shadow: 0 0 0 var(--nc-guide) var(--nc-line);
@@ -123,13 +128,33 @@
123
128
  /* State variants — color carries state, sourced from the shared `--nc-state-*`
124
129
  tokens (the same vocabulary as state-tag/state-row). The node core and the
125
130
  content left edge both take the state token; shape is unchanged. */
126
- .nc-run-timeline-step[data-state="ready"] .nc-run-timeline-node { color: var(--nc-state-ready); }
127
- .nc-run-timeline-step[data-state="ready"] .nc-run-timeline-content { border-left-color: var(--nc-state-ready); }
128
- .nc-run-timeline-step[data-state="running"] .nc-run-timeline-node { color: var(--nc-state-running); }
129
- .nc-run-timeline-step[data-state="running"] .nc-run-timeline-content { border-left-color: var(--nc-state-running); }
130
- .nc-run-timeline-step[data-state="review"] .nc-run-timeline-node { color: var(--nc-state-review); }
131
- .nc-run-timeline-step[data-state="review"] .nc-run-timeline-content { border-left-color: var(--nc-state-review); }
132
- .nc-run-timeline-step[data-state="blocked"] .nc-run-timeline-node { color: var(--nc-state-blocked); }
133
- .nc-run-timeline-step[data-state="blocked"] .nc-run-timeline-content { border-left-color: var(--nc-state-blocked); }
134
- .nc-run-timeline-step[data-state="complete"] .nc-run-timeline-node { color: var(--nc-state-complete); }
135
- .nc-run-timeline-step[data-state="complete"] .nc-run-timeline-content { border-left-color: var(--nc-state-complete); }
131
+ .nc-run-timeline-step[data-state="ready"] .nc-run-timeline-node {
132
+ color: var(--nc-state-ready);
133
+ }
134
+ .nc-run-timeline-step[data-state="ready"] .nc-run-timeline-content {
135
+ border-left-color: var(--nc-state-ready);
136
+ }
137
+ .nc-run-timeline-step[data-state="running"] .nc-run-timeline-node {
138
+ color: var(--nc-state-running);
139
+ }
140
+ .nc-run-timeline-step[data-state="running"] .nc-run-timeline-content {
141
+ border-left-color: var(--nc-state-running);
142
+ }
143
+ .nc-run-timeline-step[data-state="review"] .nc-run-timeline-node {
144
+ color: var(--nc-state-review);
145
+ }
146
+ .nc-run-timeline-step[data-state="review"] .nc-run-timeline-content {
147
+ border-left-color: var(--nc-state-review);
148
+ }
149
+ .nc-run-timeline-step[data-state="blocked"] .nc-run-timeline-node {
150
+ color: var(--nc-state-blocked);
151
+ }
152
+ .nc-run-timeline-step[data-state="blocked"] .nc-run-timeline-content {
153
+ border-left-color: var(--nc-state-blocked);
154
+ }
155
+ .nc-run-timeline-step[data-state="complete"] .nc-run-timeline-node {
156
+ color: var(--nc-state-complete);
157
+ }
158
+ .nc-run-timeline-step[data-state="complete"] .nc-run-timeline-content {
159
+ border-left-color: var(--nc-state-complete);
160
+ }
@@ -47,8 +47,18 @@
47
47
  color: var(--nc-state-running);
48
48
  background: currentColor;
49
49
  }
50
- .nc-state-row[data-kind="ready"] .nc-state-row-dot { color: var(--nc-state-ready); }
51
- .nc-state-row[data-kind="running"] .nc-state-row-dot { color: var(--nc-state-running); }
52
- .nc-state-row[data-kind="review"] .nc-state-row-dot { color: var(--nc-state-review); }
53
- .nc-state-row[data-kind="blocked"] .nc-state-row-dot { color: var(--nc-state-blocked); }
54
- .nc-state-row[data-kind="complete"] .nc-state-row-dot { color: var(--nc-state-complete); }
50
+ .nc-state-row[data-kind="ready"] .nc-state-row-dot {
51
+ color: var(--nc-state-ready);
52
+ }
53
+ .nc-state-row[data-kind="running"] .nc-state-row-dot {
54
+ color: var(--nc-state-running);
55
+ }
56
+ .nc-state-row[data-kind="review"] .nc-state-row-dot {
57
+ color: var(--nc-state-review);
58
+ }
59
+ .nc-state-row[data-kind="blocked"] .nc-state-row-dot {
60
+ color: var(--nc-state-blocked);
61
+ }
62
+ .nc-state-row[data-kind="complete"] .nc-state-row-dot {
63
+ color: var(--nc-state-complete);
64
+ }
@@ -26,9 +26,10 @@
26
26
  letter-spacing: 0;
27
27
  white-space: nowrap;
28
28
  /* Confirm move: state transitions at the 150–200 ms feedback band. */
29
- transition: background-color var(--nc-duration-confirm) var(--nc-ease-out-strong),
30
- border-color var(--nc-duration-confirm) var(--nc-ease-out-strong),
31
- color var(--nc-duration-confirm) var(--nc-ease-out-strong);
29
+ transition:
30
+ background-color var(--nc-duration-confirm) var(--nc-ease-out-strong),
31
+ border-color var(--nc-duration-confirm) var(--nc-ease-out-strong),
32
+ color var(--nc-duration-confirm) var(--nc-ease-out-strong);
32
33
  }
33
34
 
34
35
  /*
@@ -0,0 +1,101 @@
1
+ /*
2
+ * status-tag — the entity-status system (DESIGN.md `status-tag-*` family).
3
+ * Sibling of `state-tag`, not a replacement: `state-tag` stays the run-state
4
+ * rail (ready/running/review/blocked/complete), carried by a 3px border-left
5
+ * on a neutral canvas. `status-tag` is the entity-status vocabulary — agent,
6
+ * credential, activation, customer, invitation, subscription, and health
7
+ * values that live on records, not on a run. It carries state a different
8
+ * way: a subtle tinted rectangle where BOTH the background and the text
9
+ * shift together, never a border-left rail, and it never touches the
10
+ * `--nc-state-*` token family.
11
+ *
12
+ * Shape: a small sans rectangle (`{rounded.md}`, not a capsule), never
13
+ * Geist Mono. Tone comes from `[data-tone]` (gray/green/red/amber/blue), not
14
+ * BEM modifiers, and each tone is a full background+text ramp pair pulled
15
+ * directly from the color ramps (gray/green-italia/red-italia/amber/
16
+ * blue-cobalto) rather than through a semantic alias — status-tag consumes
17
+ * ramp steps directly, matching `state-tag`'s "shape carries meaning, color
18
+ * carries variant" discipline but expressed as a bg/text pair instead of a
19
+ * border.
20
+ *
21
+ * Doctrine: gray is the default tone. Color is reserved for marking health
22
+ * and exceptions — every terminal/no-action state renders gray. Subtle-only
23
+ * (no solid/filled variants), no icons inside the badge, no text-transform,
24
+ * labels render verbatim from the i18n dictionary that owns them.
25
+ */
26
+ .nc-status-tag {
27
+ display: inline-flex;
28
+ align-items: center;
29
+ height: 24px;
30
+ padding: 0 10px;
31
+ border: 0;
32
+ border-radius: var(--nc-rounded-md);
33
+ font-family: Geist, Inter, system-ui, -apple-system, sans-serif;
34
+ font-size: 12px;
35
+ font-weight: 500;
36
+ line-height: 16px;
37
+ letter-spacing: 0;
38
+ white-space: nowrap;
39
+ /* Confirm move: state transitions at the 150–200 ms feedback band, same as
40
+ state-tag — color arrives WITH the meaning, never before it. */
41
+ transition:
42
+ background-color var(--nc-duration-confirm) var(--nc-ease-out-strong),
43
+ color var(--nc-duration-confirm) var(--nc-ease-out-strong);
44
+ }
45
+
46
+ .nc-status-tag[data-tone="gray"] {
47
+ background: var(--nc-gray-200);
48
+ color: var(--nc-gray-900);
49
+ }
50
+
51
+ .nc-status-tag[data-tone="green"] {
52
+ background: var(--nc-green-italia-200);
53
+ color: var(--nc-green-italia-900);
54
+ }
55
+
56
+ .nc-status-tag[data-tone="red"] {
57
+ background: var(--nc-red-italia-200);
58
+ color: var(--nc-red-italia-900);
59
+ }
60
+
61
+ .nc-status-tag[data-tone="amber"] {
62
+ background: var(--nc-amber-200);
63
+ color: var(--nc-amber-900);
64
+ }
65
+
66
+ .nc-status-tag[data-tone="blue"] {
67
+ background: var(--nc-blue-cobalto-200);
68
+ color: var(--nc-blue-cobalto-900);
69
+ }
70
+
71
+ /*
72
+ * Dark console: each tone flips to its own dark-ramp pair rather than a
73
+ * shared canvas/ink remap (unlike state-tag's neutral chip), because tone
74
+ * here is carried by a full bg+text pair, not a single border-left accent.
75
+ * Scoped per tone so gray's pair (dark-canvas-soft-2/gray-600) does not
76
+ * collide with the chromatic tones' 1000/400 pairs.
77
+ */
78
+ .dark .nc-status-tag[data-tone="gray"] {
79
+ background: var(--nc-dark-canvas-soft-2);
80
+ color: var(--nc-gray-600);
81
+ }
82
+
83
+ .dark .nc-status-tag[data-tone="green"] {
84
+ background: var(--nc-green-italia-1000);
85
+ color: var(--nc-green-italia-400);
86
+ }
87
+
88
+ .dark .nc-status-tag[data-tone="red"] {
89
+ background: var(--nc-red-italia-1000);
90
+ color: var(--nc-red-italia-400);
91
+ }
92
+
93
+ .dark .nc-status-tag[data-tone="amber"] {
94
+ background: var(--nc-amber-1000);
95
+ color: var(--nc-amber-400);
96
+ }
97
+
98
+ .dark .nc-status-tag[data-tone="blue"] {
99
+ background: var(--nc-blue-cobalto-1000);
100
+ color: var(--nc-blue-cobalto-400);
101
+ }
@@ -32,5 +32,5 @@
32
32
  vertical-align: -2px;
33
33
  background-color: var(--nc-muted);
34
34
  -webkit-mask: url("../../icons/chevron-right.svg") center / contain no-repeat;
35
- mask: url("../../icons/chevron-right.svg") center / contain no-repeat;
35
+ mask: url("../../icons/chevron-right.svg") center / contain no-repeat;
36
36
  }
@@ -30,11 +30,21 @@
30
30
  /* AC-016 accent map → existing --nc-* tokens; identical to chat-bubble-agent and
31
31
  agent-avatar. green→link, cyan→info (blue-cobalto; killed cyan token retired
32
32
  per Italia contract §6), amber→warning-deep, ink→ink, red→error. No hard-coded hex. */
33
- .nc-typing-dots[data-accent="green"] { --nc-accent: var(--nc-link); }
34
- .nc-typing-dots[data-accent="cyan"] { --nc-accent: var(--nc-info); }
35
- .nc-typing-dots[data-accent="amber"] { --nc-accent: var(--nc-warning-deep); }
36
- .nc-typing-dots[data-accent="ink"] { --nc-accent: var(--nc-ink); }
37
- .nc-typing-dots[data-accent="red"] { --nc-accent: var(--nc-error); }
33
+ .nc-typing-dots[data-accent="green"] {
34
+ --nc-accent: var(--nc-link);
35
+ }
36
+ .nc-typing-dots[data-accent="cyan"] {
37
+ --nc-accent: var(--nc-info);
38
+ }
39
+ .nc-typing-dots[data-accent="amber"] {
40
+ --nc-accent: var(--nc-warning-deep);
41
+ }
42
+ .nc-typing-dots[data-accent="ink"] {
43
+ --nc-accent: var(--nc-ink);
44
+ }
45
+ .nc-typing-dots[data-accent="red"] {
46
+ --nc-accent: var(--nc-error);
47
+ }
38
48
 
39
49
  .nc-typing-dots-dot {
40
50
  width: 5px;
@@ -136,6 +136,14 @@ body {
136
136
  letter-spacing: var(--nc-type-caption-letter-spacing);
137
137
  }
138
138
 
139
+ .nc-type-caption-strong {
140
+ font-family: var(--nc-type-caption-strong-font-family);
141
+ font-size: var(--nc-type-caption-strong-font-size);
142
+ font-weight: var(--nc-type-caption-strong-font-weight);
143
+ line-height: var(--nc-type-caption-strong-line-height);
144
+ letter-spacing: var(--nc-type-caption-strong-letter-spacing);
145
+ }
146
+
139
147
  .nc-type-caption-mono {
140
148
  font-family: var(--nc-type-caption-mono-font-family);
141
149
  font-size: var(--nc-type-caption-mono-font-size);
@@ -11,8 +11,9 @@
11
11
  * the structural-geometry foundation (`layout` + `primitives` — kernel grid,
12
12
  * single-owner seams, `.nc-marker` corner crosshairs, cell/row grid math, the
13
13
  * stage system), the brand display atoms shadcn/Radix has no equivalent for (the
14
- * 13 agent-chat atoms + the run-state `state-tag` family + `image`), and the
15
- * token/motion layers. The brand book and every static surface import this
14
+ * 13 agent-chat atoms + the run-state `state-tag` family + the entity-status
15
+ * `status-tag` family + `image`), and the token/motion layers. The brand book
16
+ * and every static surface import this
16
17
  * bundle raw — no Tailwind build step runs over `src/css/`, so the geometry is
17
18
  * `@layer` CSS, not `@utility` directives a browser would receive un-compiled.
18
19
  * The kept-geometry invariant guards stay live (kernel-css-architecture /
@@ -31,6 +32,9 @@
31
32
  /* Run-state tags (ADR 0007 D3). Agentic run-state, kept as CSS. */
32
33
  @import url("./components/state-tag.css") layer(components);
33
34
 
35
+ /* Entity-status tags. Record-level status vocabulary, sibling of state-tag. */
36
+ @import url("./components/status-tag.css") layer(components);
37
+
34
38
  /* Agent-chat atoms (M6 / Part B). Conversation surface + role-grammar atoms. */
35
39
  @import url("./components/chat-thread.css") layer(components);
36
40
  @import url("./components/chat-bubble-user.css") layer(components);
@@ -210,14 +210,13 @@
210
210
  display: none;
211
211
  min-width: 0;
212
212
  min-height: 0;
213
- background:
214
- repeating-linear-gradient(
215
- 125deg,
216
- var(--nc-canvas) 0,
217
- var(--nc-canvas) 6px,
218
- var(--nc-line) 6px,
219
- var(--nc-line) 7px
220
- );
213
+ background: repeating-linear-gradient(
214
+ 125deg,
215
+ var(--nc-canvas) 0,
216
+ var(--nc-canvas) 6px,
217
+ var(--nc-line) 6px,
218
+ var(--nc-line) 7px
219
+ );
221
220
  }
222
221
 
223
222
  /* The fill owns its single inner boundary rail so the texture is bounded on
@@ -127,7 +127,11 @@
127
127
  --nc-blueprint-line: var(--nc-line);
128
128
  background-image:
129
129
  linear-gradient(to right, var(--nc-blueprint-line) var(--nc-guide), transparent var(--nc-guide)),
130
- linear-gradient(to bottom, var(--nc-blueprint-line) var(--nc-guide), transparent var(--nc-guide));
130
+ linear-gradient(
131
+ to bottom,
132
+ var(--nc-blueprint-line) var(--nc-guide),
133
+ transparent var(--nc-guide)
134
+ );
131
135
  background-size:
132
136
  calc(100% / var(--nc-blueprint-columns)) calc(100% / var(--nc-blueprint-rows)),
133
137
  calc(100% / var(--nc-blueprint-columns)) calc(100% / var(--nc-blueprint-rows));
@@ -137,7 +141,7 @@
137
141
  scaffolding (used by atmospheric surfaces like the brand hero). */
138
142
  .nc-blueprint-field[data-feather="top"] {
139
143
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 22%, black 100%);
140
- mask-image: linear-gradient(to bottom, transparent 0%, black 22%, black 100%);
144
+ mask-image: linear-gradient(to bottom, transparent 0%, black 22%, black 100%);
141
145
  }
142
146
 
143
147
  .nc-rule-svg {
@@ -195,28 +199,6 @@
195
199
  width: 38%;
196
200
  }
197
201
 
198
- .nc-status-tag {
199
- display: inline-flex;
200
- width: fit-content;
201
- min-height: 28px;
202
- align-items: center;
203
- justify-content: center;
204
- border: var(--nc-guide) solid var(--nc-line);
205
- /* status-tag = {rounded.sm} (DESIGN.md). */
206
- border-radius: var(--nc-rounded-sm);
207
- padding: 5px 9px;
208
- background: var(--nc-canvas-soft);
209
- color: var(--nc-body);
210
- font-family: "Geist Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, monospace;
211
- font-size: 12px;
212
- line-height: 16px;
213
- }
214
-
215
- .nc-status-tag[data-proof-state="approved"] {
216
- border-color: color-mix(in srgb, var(--nc-link) 35%, var(--nc-line));
217
- background: color-mix(in srgb, var(--nc-link-bg-soft) 48%, var(--nc-canvas));
218
- }
219
-
220
202
  /* nc-icon — the icon slot. Icons are derived from Lucide (ISC) by a build
221
203
  transform that bakes the house render into the SVG (see scripts/generate-icons.ts).
222
204
  This primitive renders an INLINE <svg> child and re-asserts that key — 1.5px
@@ -305,8 +287,8 @@
305
287
  }
306
288
 
307
289
  .nc-filter-chip:focus-visible {
308
- outline: 2px solid var(--nc-link);
309
- outline-offset: 2px;
290
+ outline: var(--nc-focus-ring-width) solid var(--nc-focus-ring);
291
+ outline-offset: 0;
310
292
  }
311
293
 
312
294
  /* nc-link-inline — the inline body link style (DESIGN.md link-inline). It reads
@@ -319,10 +301,11 @@
319
301
  text-decoration: underline;
320
302
  text-underline-offset: 2px;
321
303
  text-decoration-thickness: var(--nc-guide);
322
- transition: background-color var(--nc-duration-stagger) var(--nc-ease-out-strong),
323
- border-color var(--nc-duration-stagger) var(--nc-ease-out-strong),
324
- color var(--nc-duration-stagger) var(--nc-ease-out-strong),
325
- opacity var(--nc-duration-stagger) var(--nc-ease-out-strong);
304
+ transition:
305
+ background-color var(--nc-duration-stagger) var(--nc-ease-out-strong),
306
+ border-color var(--nc-duration-stagger) var(--nc-ease-out-strong),
307
+ color var(--nc-duration-stagger) var(--nc-ease-out-strong),
308
+ opacity var(--nc-duration-stagger) var(--nc-ease-out-strong);
326
309
  }
327
310
 
328
311
  @media (hover: hover) and (pointer: fine) {
@@ -332,9 +315,9 @@
332
315
  }
333
316
 
334
317
  .nc-link-inline:focus-visible {
335
- outline: 2px solid var(--nc-link);
336
- outline-offset: 2px;
337
- border-radius: var(--nc-rounded-xs);
318
+ outline: var(--nc-focus-ring-width) solid var(--nc-focus-ring);
319
+ outline-offset: 0;
320
+ border-radius: var(--nc-rounded-md);
338
321
  }
339
322
 
340
323
  /* nc-label-mono — the mono eyebrow/kicker for section labels and low-priority
@@ -7,6 +7,10 @@
7
7
  /* Colors */
8
8
  --nc-primary: #008c45;
9
9
  --nc-on-primary: #ffffff;
10
+ --nc-action: #007a3c;
11
+ --nc-action-foreground: #ffffff;
12
+ --nc-action-hover: #00602f;
13
+ --nc-action-active: #00301a;
10
14
  --nc-ink: #171717;
11
15
  --nc-body: #4d4d4d;
12
16
  --nc-muted: #888888;
@@ -14,8 +18,11 @@
14
18
  --nc-canvas-soft: #fafafa;
15
19
  --nc-canvas-soft-2: #f5f5f5;
16
20
  --nc-line: #e5e5e5;
21
+ --nc-input: #8f8f8f;
17
22
  --nc-seam: #e4e7ec;
18
23
  --nc-cross: #a1a1a1;
24
+ --nc-focus-ring: #007a3c;
25
+ --nc-scrim: #171717;
19
26
  --nc-link: #007a3c;
20
27
  --nc-link-deep: #00602f;
21
28
  --nc-link-bg-soft: #d9f6e4;
@@ -120,9 +127,15 @@
120
127
  --nc-dark-seam: #1f1f1f;
121
128
  --nc-dark-primary: #ededed;
122
129
  --nc-dark-on-primary: #0a0a0a;
130
+ --nc-dark-action: #ededed;
131
+ --nc-dark-action-foreground: #0a0a0a;
132
+ --nc-dark-action-hover: #d4d4d4;
133
+ --nc-dark-action-active: #a3a3a3;
123
134
  --nc-dark-link: #9fe6bc;
124
135
  --nc-dark-link-deep: #c3f0d4;
125
136
  --nc-dark-link-bg-soft: #00301a;
137
+ --nc-dark-focus-ring: #9fe6bc;
138
+ --nc-dark-scrim: #f5f5f5;
126
139
  --nc-dark-error: #f7b3b5;
127
140
  --nc-dark-error-soft: #4a000e;
128
141
  --nc-dark-error-deep: #fad3d4;
@@ -171,6 +184,10 @@
171
184
  --nc-6xl: 128px;
172
185
  --nc-section: 192px;
173
186
  --nc-guide: 1px;
187
+ --nc-focus-ring-width: 3px;
188
+ --nc-control-height: 32px;
189
+ --nc-control-padding-inline: 10px;
190
+ --nc-touch-target: 44px;
174
191
  --nc-page-pad: 24px;
175
192
  --nc-page-max-mobile: 448px;
176
193
  --nc-page-max-tablet: 624px;
@@ -225,6 +242,8 @@
225
242
  --nc-rounded-md: 6px;
226
243
  --nc-rounded-lg: 8px;
227
244
  --nc-rounded-xl: 10px;
245
+ --nc-rounded-2xl: 12px;
246
+ --nc-rounded-3xl: 16px;
228
247
  --nc-rounded-pill-sm: 64px;
229
248
  --nc-rounded-pill: 100px;
230
249
  --nc-rounded-full: 9999px;
@@ -295,6 +314,11 @@
295
314
  --nc-type-caption-font-weight: 400;
296
315
  --nc-type-caption-line-height: 16px;
297
316
  --nc-type-caption-letter-spacing: 0px;
317
+ --nc-type-caption-strong-font-family: Geist, Inter, system-ui, -apple-system, sans-serif;
318
+ --nc-type-caption-strong-font-size: 12px;
319
+ --nc-type-caption-strong-font-weight: 500;
320
+ --nc-type-caption-strong-line-height: 16px;
321
+ --nc-type-caption-strong-letter-spacing: 0px;
298
322
  --nc-type-caption-mono-font-family: Geist Mono, ui-monospace, SFMono-Regular, Menlo, Monaco, monospace;
299
323
  --nc-type-caption-mono-font-size: 12px;
300
324
  --nc-type-caption-mono-font-weight: 500;
@@ -315,4 +339,11 @@
315
339
  --nc-type-button-lg-font-weight: 500;
316
340
  --nc-type-button-lg-line-height: 24px;
317
341
  --nc-type-button-lg-letter-spacing: 0px;
342
+
343
+ /* Material opacity and shadows (strictly parsed from DESIGN.md prose) */
344
+ --nc-material-scrim-opacity: 10%;
345
+ --nc-material-shadow-tooltip: 0 1px 1px rgb(0 0 0 / 2%), 0 4px 8px rgb(0 0 0 / 4%);
346
+ --nc-material-shadow-menu: 0 1px 1px rgb(0 0 0 / 2%), 0 4px 8px -4px rgb(0 0 0 / 4%), 0 16px 24px -8px rgb(0 0 0 / 6%);
347
+ --nc-material-shadow-dialog: 0 1px 1px rgb(0 0 0 / 2%), 0 8px 16px -4px rgb(0 0 0 / 4%), 0 24px 32px -8px rgb(0 0 0 / 6%);
348
+ --nc-material-shadow-sheet: 0 2px 2px rgb(0 0 0 / 4%), 0 8px 16px -4px rgb(0 0 0 / 4%);
318
349
  }
@@ -4,6 +4,10 @@
4
4
  "colors": {
5
5
  "primary": "#008c45",
6
6
  "on-primary": "#ffffff",
7
+ "action": "#007a3c",
8
+ "action-foreground": "#ffffff",
9
+ "action-hover": "#00602f",
10
+ "action-active": "#00301a",
7
11
  "ink": "#171717",
8
12
  "body": "#4d4d4d",
9
13
  "muted": "#888888",
@@ -11,8 +15,11 @@
11
15
  "canvas-soft": "#fafafa",
12
16
  "canvas-soft-2": "#f5f5f5",
13
17
  "line": "#e5e5e5",
18
+ "input": "#8f8f8f",
14
19
  "seam": "#e4e7ec",
15
20
  "cross": "#a1a1a1",
21
+ "focus-ring": "#007a3c",
22
+ "scrim": "#171717",
16
23
  "link": "#007a3c",
17
24
  "link-deep": "#00602f",
18
25
  "link-bg-soft": "#d9f6e4",
@@ -117,9 +124,15 @@
117
124
  "dark-seam": "#1f1f1f",
118
125
  "dark-primary": "#ededed",
119
126
  "dark-on-primary": "#0a0a0a",
127
+ "dark-action": "#ededed",
128
+ "dark-action-foreground": "#0a0a0a",
129
+ "dark-action-hover": "#d4d4d4",
130
+ "dark-action-active": "#a3a3a3",
120
131
  "dark-link": "#9fe6bc",
121
132
  "dark-link-deep": "#c3f0d4",
122
133
  "dark-link-bg-soft": "#00301a",
134
+ "dark-focus-ring": "#9fe6bc",
135
+ "dark-scrim": "#f5f5f5",
123
136
  "dark-error": "#f7b3b5",
124
137
  "dark-error-soft": "#4a000e",
125
138
  "dark-error-deep": "#fad3d4",
@@ -193,6 +206,9 @@
193
206
  "caption": [
194
207
  "Geist, Inter, system-ui, -apple-system, sans-serif"
195
208
  ],
209
+ "caption-strong": [
210
+ "Geist, Inter, system-ui, -apple-system, sans-serif"
211
+ ],
196
212
  "caption-mono": [
197
213
  "Geist Mono, ui-monospace, SFMono-Regular, Menlo, Monaco, monospace"
198
214
  ],
@@ -311,6 +327,14 @@
311
327
  "fontWeight": "400"
312
328
  }
313
329
  ],
330
+ "caption-strong": [
331
+ "12px",
332
+ {
333
+ "lineHeight": "16px",
334
+ "letterSpacing": "0px",
335
+ "fontWeight": "500"
336
+ }
337
+ ],
314
338
  "caption-mono": [
315
339
  "12px",
316
340
  {
@@ -351,6 +375,8 @@
351
375
  "md": "6px",
352
376
  "lg": "8px",
353
377
  "xl": "10px",
378
+ "2xl": "12px",
379
+ "3xl": "16px",
354
380
  "pill-sm": "64px",
355
381
  "pill": "100px",
356
382
  "full": "9999px"
@@ -370,6 +396,10 @@
370
396
  "6xl": "128px",
371
397
  "section": "192px",
372
398
  "guide": "1px",
399
+ "focus-ring-width": "3px",
400
+ "control-height": "32px",
401
+ "control-padding-inline": "10px",
402
+ "touch-target": "44px",
373
403
  "page-pad": "24px",
374
404
  "page-max-mobile": "448px",
375
405
  "page-max-tablet": "624px",