@nadicodeai/design-system 0.2.0 → 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/AGENTS.md CHANGED
@@ -14,7 +14,7 @@ Plain imperatives are the default. The few hard prohibitions below use `never`/`
14
14
  - Preserve approved `DESIGN.md` token and component families unless the user explicitly approves a palette/component migration. Website/kernel CSS is implementation evidence, not the complete palette authority; never delete tokens because current prototypes do not use them or because `@google/design.md lint` reports them as unused.
15
15
  - Name implemented grids, components, modules, and page elements as NadicodeAI-owned primitives; source brands such as Vercel or Attio may appear only in reference notes, never in component names, CSS comments, `data-module` values, or public-facing contracts.
16
16
  - Calculate page grids, module spans, seams, borders, and element placement from explicit grid math; never hand-place visual structure by eye.
17
- - Author CSS-bundle work as a reusable design-system component architecture first, not as showcase/page-specific code. The design-system CSS lives in `src/css/` (`tokens.generated` [built from `DESIGN.md`] + `tokens.local` [hand-authored] / `reset`/`foundation`/`motion`/`layout`/`primitives` + `components/*`, mirrored to `dist/css/` and exported as `@nadicodeai/design-system/css`). Since the Tailwind+shadcn migration (ADR 0007) the bundle ships only framework-agnostic brand/display CSS components: the cascade is `@layer tokens, reset, foundation, motion, layout, primitives, components;` (no `sections` layer), and `components/*` holds the agent-chat CSS component family, the run-state `state-tag` family, and `image` — the generic marketing/SaaS component CSS and the whole `sections/*` layer retired to React shadcn components in `@nadicodeai/ui`. The delivery tiers map to real authoring homes: tokens → `tokens.generated`/`tokens.local`; page grammar → `layout.css`; CSS primitives/components → `primitives.css` + `components/*`; specimens → `examples/`. Contracted CSS components are paired with `DESIGN.md components:` entries; the three named CSS-internal components are deliberate no-token exceptions. Pages, site-specific page assemblies, and the standard/interactive/section UI belong to consuming surfaces (`../website/`, `../portal/`, sibling Nadia apps) and to the React package (`@nadicodeai/ui`), not this package. Study current source HTML/CSS for approved external references before implementing similar NadicodeAI primitives, then adapt the structure into NadicodeAI-owned tokens, primitives, and components. Specimen HTML demonstrates only already-defined primitives/components; it never invents component geometry, seams, borders, fillers, heights, or responsive behavior inline. The generated token layer (`tokens.generated.css`) and the Tailwind adapter (`nadicode.theme.css`) are emitted by Style Dictionary (`scripts/sd/`, driven from `scripts/build.ts`) as a complete projection of the `@google/design.md` export — never an allowlist or subset; responsive `@media` switching and composed/`calc` vars live in `layout.css`/`tokens.local.css` and reference emitted `--nc-*` tokens only, while the `.nc-type-*` utility classes live in `foundation.css`. Emitted-but-unreferenced tokens are intentional (the contract drives emission, not consumption), and the generated Tailwind adapter owns standard shadcn role maps for both `:root` and `.dark` using only generated `--color-*`/`--radius-*` references; `@nadicodeai/ui/globals.css` keeps the Tailwind role bridge plus UI-local product aliases. Correctness is enforced by export-derived structural parity (`tests/token-structural-parity.test.ts` for the `--nc-*` layer; the per-token `@theme` value loops and light/dark role-integrity checks in `tests/tailwind-v4-theme.test.ts` for the adapter), the narrowed two-way parity between `DESIGN.md` component YAML/prose and the retained CSS component surface (`tests/components-yaml-matches-css.test.ts`, ADR 0007 D4), plus consumer discipline (`tests/consumer-css-discipline.test.ts`), not a byte snapshot (ADR 0006 supersedes ADR 0005 D1–D3/D5; ADR 0008 supersedes ADR 0005 D4).
17
+ - Author CSS-bundle work as a reusable design-system component architecture first, not as showcase/page-specific code. The design-system CSS lives in `src/css/` (`tokens.generated` [built from `DESIGN.md`] + `tokens.local` [hand-authored] / `reset`/`foundation`/`motion`/`layout`/`primitives` + `components/*`, mirrored to `dist/css/` and exported as `@nadicodeai/design-system/css`). Since the Tailwind+shadcn migration (ADR 0007) the bundle ships only framework-agnostic brand/display CSS components: the cascade is `@layer tokens, reset, foundation, motion, layout, primitives, components;` (no `sections` layer), and `components/*` holds the agent-chat CSS component family, the run-state `state-tag` family, and `image` — the generic marketing/SaaS component CSS and the whole `sections/*` layer retired to React shadcn components in `@nadicodeai/ui`. The delivery tiers map to real authoring homes: tokens → `tokens.generated`/`tokens.local`; page grammar → `layout.css`; CSS primitives/components → `primitives.css` + `components/*`; specimens → `examples/`. Contracted CSS components are paired with `DESIGN.md components:` entries; the three named CSS-internal components are deliberate no-token exceptions. Pages, site-specific page assemblies, and the standard/interactive/section UI belong to consuming surfaces (`../website/`, `../portal/`, sibling Nadia apps) and to the React package (`@nadicodeai/ui`), not this package. Study current source HTML/CSS for approved external references before implementing similar NadicodeAI primitives, then adapt the structure into NadicodeAI-owned tokens, primitives, and components. Specimen HTML demonstrates only already-defined primitives/components; it never invents component geometry, seams, borders, fillers, heights, or responsive behavior inline. The generated token layer (`tokens.generated.css`) and the Tailwind adapter (`nadicode.theme.css`) are emitted by Style Dictionary (`scripts/sd/`, driven from `scripts/build.ts`) as a complete projection of the `@google/design.md` export — never an allowlist or subset; responsive `@media` switching and composed/`calc` vars live in `layout.css`/`tokens.local.css` and reference emitted `--nc-*` tokens only, while the `.nc-type-*` utility classes live in `foundation.css`. Emitted-but-unreferenced tokens are intentional (the contract drives emission, not consumption), and the generated Tailwind adapter owns standard shadcn role maps for both `:root` and `.dark` using generated `--color-*`/`--radius-*` references, plus a small set of `--nc-*` remaps in the `.dark` block (the `state-*`, `selection-*`, and `cross` families → their `--nc-dark-*` counterparts) so design-system CSS components that read those raw brand tokens directly flip on the dark console; `@nadicodeai/ui/globals.css` keeps the Tailwind role bridge plus UI-local product aliases. Correctness is enforced by export-derived structural parity (`tests/token-structural-parity.test.ts` for the `--nc-*` layer; the per-token `@theme` value loops and light/dark role-integrity checks in `tests/tailwind-v4-theme.test.ts` for the adapter), the narrowed two-way parity between `DESIGN.md` component YAML/prose and the retained CSS component surface (`tests/components-yaml-matches-css.test.ts`, ADR 0007 D4), plus consumer discipline (`tests/consumer-css-discipline.test.ts`), not a byte snapshot (ADR 0006 supersedes ADR 0005 D1–D3/D5; ADR 0008 supersedes ADR 0005 D4).
18
18
  - Follow a source-first reference workflow for external visual references: inspect live/source DOM, stylesheet/CSSOM rules, inline styles, custom properties, computed styles, grid tracks, spans, seam ownership, colors, heights, and breakpoints before writing NadicodeAI code. Screenshots are verification evidence only after implementation; never use them as the source for authoring structure, geometry, or CSS.
19
19
  - Never derive reusable kernel geometry from screenshots, eyeballing, one-off browser coordinates, or local patch experiments. Browser measurements may verify an implementation after the source CSS/DOM model is understood, but they do not replace reading the source rules that create the behavior.
20
20
  - Map every imported visual behavior to either `DESIGN.md`, an existing kernel token/primitive, or an explicit user-approved change before implementation. If the reference leaves a required decision open, or if `DESIGN.md` does not decide it, ask before coding the missing decision, including height/row span, surface color, visual payload, content slots, crosshair placement, and responsive behavior.
@@ -33,20 +33,20 @@ Generated-artifact and runtime-JS prohibitions live in the Forbidden Patterns ta
33
33
  - Treat `src/assets/` as the source for exported brand SVG assets.
34
34
  - Treat `dist/icons/` as a generated icon set baked from the pinned `lucide-static` dependency by `npm run generate:icons` (also run inside `npm run build`) and exported via `./icons/*`; regenerate by bumping `lucide-static`, never hand-edit.
35
35
  - Treat `../docs/experiments/**` as the archived `design-canvas/` prototype source-of-record (the chat-motion/component prototypes that `src/css/motion.css`, `src/js/chat-autoplay.js`, and `tests/chat-showcase.test.ts` re-express); never treat it as the package build, runtime component surface, or normative brand contract.
36
- - Any change to package-consumed output (`DESIGN.md`, generated tokens, CSS bundle, Tailwind theme output, package exports, assets, package docs, or agent instructions) must end with an explicit npm release decision before handoff. If the change should reach external consumers, bump `@nadicodeai/design-system`, run `npm pack --dry-run -w @nadicodeai/design-system`, and follow `../docs/agents/npm-publishing.md`. When `@nadicodeai/ui` consumes the changed output, publish `@nadicodeai/design-system` first, then bump/update/publish `@nadicodeai/ui`. Never claim the package is shipped to npm until `npm view @nadicodeai/design-system version` reports the intended version.
36
+ - Any change to package-consumed output (`DESIGN.md`, generated tokens, CSS bundle, Tailwind theme output, package exports, assets, package docs, or agent instructions) must end with an explicit npm release decision before handoff — enforced by the pre-push release gate: bump the version (merge then auto-publishes; see `../docs/agents/npm-publishing.md`) or mark a commit `[no-publish]`. If the change should reach external consumers, bump `@nadicodeai/design-system` and run `npm pack --dry-run -w @nadicodeai/design-system`. When `@nadicodeai/ui` consumes the changed output, publish `@nadicodeai/design-system` first, then bump/update/publish `@nadicodeai/ui`. Never claim the package is shipped to npm until `npm view @nadicodeai/design-system version` reports the intended version.
37
37
 
38
38
  ## Task Routing
39
39
 
40
40
  | Task | Read first | Then read | Verify |
41
41
  | --- | --- | --- | --- |
42
- | Design token, contract, or token-pipeline change | `DESIGN.md`, `scripts/sd/config.ts`, `scripts/sd/transforms.ts`, `scripts/sd/format-token-layer.ts`, `scripts/sd/format-tailwind-v4-theme.ts` | `npx @google/design.md spec`, `scripts/build.ts`, `tests/token-structural-parity.test.ts`, `tests/consumer-css-discipline.test.ts`, `tests/tailwind-v4-theme.test.ts` | `npm run lint:design && npm run build && npm run test` |
42
+ | Design token, contract, or token-pipeline change | `DESIGN.md`, `scripts/sd/config.ts`, `scripts/sd/transforms.ts`, `scripts/sd/format-token-layer.ts`, `scripts/sd/format-tailwind-v4-theme.ts` | `npm exec -- design.md spec`, `scripts/build.ts`, `tests/token-structural-parity.test.ts`, `tests/consumer-css-discipline.test.ts`, `tests/tailwind-v4-theme.test.ts` | `npm run lint:design && npm run build && npm run test` |
43
43
  | Kernel geometry or component work | `DESIGN.md` Layout and Components | `src/css/index.css`, `src/css/layout.css`, `src/css/primitives.css`, `src/css/components/*.css`, `src/css/motion.css`, `tests/kernel-css-architecture.test.ts`, `tests/kernel-rendered-geometry.test.ts` | from design-system/: `npx vitest run tests/kernel-css-architecture.test.ts tests/kernel-rendered-geometry.test.ts` |
44
44
  | CSS component or `examples/` specimen work | `DESIGN.md` Layout and Components | `src/css/components/`, `examples/`, `../skills/nadicodeai-brand-copy/SKILL.md`, `../skills/nadicodeai-brand-copy/references/brand-voice-profile.md`, `../skills/nadicodeai-brand-copy/references/voice-examples.md`, `../skills/nadicodeai-brand-copy/references/anti-slop-patterns.md` | `npm run test -- tests/examples-package-coherence.test.ts` |
45
45
  | Package consumption or export surface | `README.md` | `package.json`, `scripts/build.ts`, `dist/tailwind/`, `dist/tokens/` | `npm run build && npm run test -- tests/build-produces-exports.test.ts tests/tailwind-v4-theme.test.ts` |
46
46
 
47
47
  ## DESIGN.md Authoring
48
48
 
49
- - Check `npx @google/design.md spec` before adding or changing YAML front matter fields.
49
+ - Check `npm exec -- design.md spec` before adding or changing YAML front matter fields.
50
50
  - Put exact reusable values in YAML when they should export through `npm run build`: colors, typography, rounded, spacing, and component fields listed by the current spec.
51
51
  - Put application guidance in prose when it describes how to use values: borders, gradients, grid placement, motion, state behavior, responsive composition, markup shape, and accessibility.
52
52
  - Keep component identity paired inside `## Components`: every named YAML `components:` entry needs a matching Markdown `**\`component-name\`**` entry in the Components section, and every Markdown component entry in that section needs a matching YAML `components:` entry. YAML carries machine-readable component style hooks; Markdown carries usage, variants, constraints, and judgment.
@@ -91,7 +91,7 @@ npm run lint:design && npm run build && npm run test
91
91
 
92
92
  `npm run test` MUST stay browser-free: browser-driven tests live in `tests/**/*.visual.ts` (outside the default `*.test.ts` glob) and run only via `npm run test:visual`. Never add a browser test to the default suite — parallel headless sessions inside the gate are what orphaned Chrome and hung it; that is the real constraint, not `agent-browser` itself.
93
93
 
94
- For a visual check, agents drive `agent-browser` directly: open the rendered page, save a screenshot into the ignored evidence folder (`../tmp/visual-evidence/`), inspect it, confirm it looks right, and **close the session** so no Chrome daemon is left running. Run these checks **sequentially, one page at a time** — never as a parallel suite. The screenshots persist in `../tmp/visual-evidence/` as evidence for the operator to review.
94
+ For a visual check, agents use the workspace-local `agent-browser` package (`npm exec -w design-system -- agent-browser ...` from the repo root, or `npm exec -- agent-browser ...` from this directory): open the rendered page, save a screenshot into the ignored evidence folder (`../tmp/visual-evidence/`), inspect it, confirm it looks right, and **close the session** so no Chrome daemon is left running. Run these checks **sequentially, one page at a time** — never as a parallel suite. The repo-level `agent-browser.json` and this directory's `agent-browser.json` set the idle timeout for ad hoc commands, but explicit close is still required. The screenshots persist in `../tmp/visual-evidence/` as evidence for the operator to review.
95
95
 
96
96
  ## References
97
97
 
@@ -105,6 +105,7 @@ For a visual check, agents drive `agent-browser` directly: open the rendered pag
105
105
  | `scripts/sd/` | Style Dictionary build: `config.ts` (entrypoints), `transforms.ts` (`name/nc`/`color/nc-hex`/`dimension/nc-px` + FORK-A line-height), `format-token-layer.ts` (OUTPUT 1), `format-tailwind-v4-theme.ts` (OUTPUT 2). See ADR 0006 |
106
106
  | `scripts/generate-icons.ts` | Bakes the NadicodeAI icon set into `dist/icons/` from the pinned `lucide-static` dependency |
107
107
  | `tests/` | Vitest gate for design lint, build exports, and accepted repo-local validators |
108
+ | `agent-browser.json` | Project-level timeout defaults for workspace-local `agent-browser` visual checks |
108
109
  | `src/assets/` | Package logo SVG exports |
109
110
  | `dist/` | Generated token exports tracked for package consumers |
110
111
  | `dist/icons/` | Generated Lucide-derived icon set, exported via `./icons/*` |
package/DESIGN.md CHANGED
@@ -8,7 +8,7 @@ description: >-
8
8
  token exports.
9
9
 
10
10
  colors:
11
- primary: "#171717"
11
+ primary: "#008c45"
12
12
  on-primary: "#ffffff"
13
13
  ink: "#171717"
14
14
  body: "#4d4d4d"
@@ -19,53 +19,125 @@ colors:
19
19
  line: "#e5e5e5"
20
20
  seam: "#e4e7ec"
21
21
  cross: "#a1a1a1"
22
- link: "#007a5e"
23
- link-deep: "#005d49"
24
- link-bg-soft: "#d8f0e9"
22
+ link: "#007a3c"
23
+ link-deep: "#00602f"
24
+ link-bg-soft: "#d9f6e4"
25
+ accent: "#cd212a"
26
+ info: "#2743d8"
25
27
  success: "#008c45"
26
28
  error: "#b80022"
27
- error-soft: "#f4d7dc"
28
- error-deep: "#820018"
29
+ error-soft: "#fce4e4"
30
+ error-deep: "#9c001d"
29
31
  warning: "#f5a623"
30
- warning-soft: "#ffefcf"
31
- warning-deep: "#ab570a"
32
- cyan: "#50e3c2"
33
- cyan-soft: "#aaffec"
34
- cyan-deep: "#29bc9b"
32
+ warning-soft: "#fff1cf"
33
+ warning-deep: "#8f4a06"
35
34
  flag-red: "#cd212a"
36
- gradient-develop-start: "#007a5e"
37
- gradient-develop-end: "#00dfd8"
38
- gradient-ship-start: "#b80022"
39
- gradient-ship-end: "#f9cb28"
40
35
  selection-bg: "#171717"
41
36
  selection-fg: "#f2f2f2"
42
- state-ready: "#171717"
43
- state-running: "#007a5e"
37
+ state-ready: "#4d4d4d"
38
+ state-running: "#2743d8"
44
39
  state-review: "#f5a623"
45
40
  state-blocked: "#b80022"
46
41
  state-complete: "#008c45"
47
- dark-canvas: "#101414"
48
- dark-canvas-soft: "#151b19"
49
- dark-canvas-soft-2: "#1d2522"
50
- dark-ink: "#f5f7f4"
51
- dark-body: "#c8d0cb"
52
- dark-muted: "#8d9892"
53
- dark-line: "#2c3632"
54
- dark-seam: "#24302b"
55
- dark-primary: "#ecf4ee"
56
- dark-on-primary: "#101414"
57
- dark-link: "#7ee7c6"
58
- dark-link-deep: "#b8ffe5"
59
- dark-link-bg-soft: "#163f34"
60
- dark-error: "#ff7a8b"
61
- dark-error-soft: "#4b1821"
62
- dark-error-deep: "#ffb3bd"
63
- dark-warning: "#ffd28a"
64
- dark-warning-soft: "#4a3219"
65
- dark-warning-deep: "#ffe6b8"
66
- dark-cyan: "#83f7dc"
67
- dark-cyan-soft: "#b8ffe5"
68
- dark-cyan-deep: "#49c6a8"
42
+ background-100: "#ffffff"
43
+ background-200: "#fafafa"
44
+ gray-100: "#f2f2f2"
45
+ gray-200: "#ebebeb"
46
+ gray-300: "#e6e6e6"
47
+ gray-400: "#eaeaea"
48
+ gray-500: "#c9c9c9"
49
+ gray-600: "#a8a8a8"
50
+ gray-700: "#8f8f8f"
51
+ gray-800: "#7d7d7d"
52
+ gray-900: "#4d4d4d"
53
+ gray-1000: "#171717"
54
+ green-italia-100: "#e8faef"
55
+ green-italia-200: "#d9f6e4"
56
+ green-italia-300: "#c3f0d4"
57
+ green-italia-400: "#9fe6bc"
58
+ green-italia-500: "#62d494"
59
+ green-italia-600: "#17b568"
60
+ green-italia-700: "#008c45"
61
+ green-italia-800: "#007a3c"
62
+ green-italia-900: "#00602f"
63
+ green-italia-1000: "#00301a"
64
+ red-italia-100: "#fdeeee"
65
+ red-italia-200: "#fce4e4"
66
+ red-italia-300: "#fad3d4"
67
+ red-italia-400: "#f7b3b5"
68
+ red-italia-500: "#f28085"
69
+ red-italia-600: "#e84e57"
70
+ red-italia-700: "#cd212a"
71
+ red-italia-800: "#b80022"
72
+ red-italia-900: "#9c001d"
73
+ red-italia-1000: "#4a000e"
74
+ blue-cobalto-100: "#eef2ff"
75
+ blue-cobalto-200: "#e2e9fe"
76
+ blue-cobalto-300: "#cdd9fd"
77
+ blue-cobalto-400: "#a9befa"
78
+ blue-cobalto-500: "#7d99f2"
79
+ blue-cobalto-600: "#4f6ae6"
80
+ blue-cobalto-700: "#2743d8"
81
+ blue-cobalto-800: "#1d33ad"
82
+ blue-cobalto-900: "#16277f"
83
+ blue-cobalto-1000: "#0a1240"
84
+ amber-100: "#fff6e1"
85
+ amber-200: "#fff1cf"
86
+ amber-300: "#ffe9b3"
87
+ amber-400: "#ffd97d"
88
+ amber-500: "#ffc933"
89
+ amber-600: "#f5a623"
90
+ amber-700: "#d98800"
91
+ amber-800: "#b36b00"
92
+ amber-900: "#8f4a06"
93
+ amber-1000: "#452301"
94
+ campo-verde: "#008c45"
95
+ campo-rosso: "#cd212a"
96
+ campo-arancio: "#e4530b"
97
+ campo-giallo: "#f2b705"
98
+ campo-cobalto: "#2743d8"
99
+ campo-inchiostro: "#171717"
100
+ campo-bianco: "#ffffff"
101
+ chart-1: "#2743d8"
102
+ chart-2: "#008c45"
103
+ chart-3: "#f5a623"
104
+ chart-4: "#cd212a"
105
+ chart-5: "#00838f"
106
+ chart-6: "#6f42c1"
107
+ dark-canvas: "#0a0a0a"
108
+ dark-canvas-soft: "#171717"
109
+ dark-canvas-soft-2: "#262626"
110
+ dark-ink: "#f5f5f5"
111
+ dark-body: "#d4d4d4"
112
+ dark-muted: "#a3a3a3"
113
+ dark-line: "#2e2e2e"
114
+ dark-input: "#5d5d5d"
115
+ dark-seam: "#1f1f1f"
116
+ dark-primary: "#ededed"
117
+ dark-on-primary: "#0a0a0a"
118
+ dark-link: "#9fe6bc"
119
+ dark-link-deep: "#c3f0d4"
120
+ dark-link-bg-soft: "#00301a"
121
+ dark-error: "#f7b3b5"
122
+ dark-error-soft: "#4a000e"
123
+ dark-error-deep: "#fad3d4"
124
+ dark-warning: "#ffd97d"
125
+ dark-warning-soft: "#452301"
126
+ dark-warning-deep: "#ffe9b3"
127
+ dark-cyan: "#33d1cb"
128
+ dark-cyan-soft: "#7ee8de"
129
+ dark-cyan-deep: "#1f9e9a"
130
+ dark-success: "#62d494"
131
+ dark-state-ready: "#d4d4d4"
132
+ dark-state-running: "#a9befa"
133
+ dark-state-review: "#ffd97d"
134
+ dark-state-blocked: "#f7b3b5"
135
+ dark-state-complete: "#62d494"
136
+ dark-selection-bg: "#ededed"
137
+ dark-selection-fg: "#0a0a0a"
138
+ dark-cross: "#6e6e6e"
139
+ dark-chart-1: "#7d99f2"
140
+ dark-chart-6: "#9575cd"
69
141
 
70
142
  typography:
71
143
  display-xl:
@@ -173,11 +245,11 @@ typography:
173
245
 
174
246
  rounded:
175
247
  none: 0px
176
- xs: 4px
177
- sm: 6px
178
- md: 8px
179
- lg: 12px
180
- xl: 16px
248
+ xs: 2px
249
+ sm: 4px
250
+ md: 6px
251
+ lg: 8px
252
+ xl: 10px
181
253
  pill-sm: 64px
182
254
  pill: 100px
183
255
  full: 9999px
@@ -254,14 +326,14 @@ components:
254
326
  backgroundColor: "{colors.canvas-soft}"
255
327
  textColor: "{colors.body}"
256
328
  typography: "{typography.caption-mono}"
257
- rounded: "{rounded.lg}"
329
+ rounded: "{rounded.sm}"
258
330
  padding: "5px 9px"
259
331
  height: 28px
260
332
  status-tag-approved:
261
333
  backgroundColor: "{colors.link-bg-soft}"
262
334
  textColor: "{colors.link-deep}"
263
335
  typography: "{typography.caption-mono}"
264
- rounded: "{rounded.lg}"
336
+ rounded: "{rounded.sm}"
265
337
  padding: "5px 9px"
266
338
  height: 28px
267
339
  image:
@@ -383,23 +455,55 @@ The kernel is the reusable implementation layer. `DESIGN.md` defines the reusabl
383
455
 
384
456
  ## Colors
385
457
 
386
- The palette keeps the broad neutral, accent, state, and gradient families that NadicodeAI started from, then adds the newer kernel seam vocabulary. The public website may use a restrained subset, but the design-system contract remains broader than any current specimen.
458
+ The Italia color system runs on two tiers that never mix. The **functional tier** (scales + semantic roles + charts) drives every product and interface state; the **brand tier** (the seven campi) paints marketing and identity surfaces. A scale step is never a poster field, and a campo is never a UI state.
459
+
460
+ ### Architecture — step semantics
461
+
462
+ Colour is organised as two page backgrounds plus five ten-step scales (`gray`, `green-italia`, `red-italia`, `blue-cobalto`, `amber`). Every scale reads the same way, so a step number carries a fixed job across all five families:
387
463
 
388
- - **Ink / Primary** (`{colors.ink}`, `{colors.primary}`): near-black for text, primary actions, and dark action bands.
389
- - **Canvas** (`{colors.canvas}`): white content cells.
390
- - **Canvas Soft** (`{colors.canvas-soft}`): page background and diagonal filler base.
391
- - **Canvas Soft 2** (`{colors.canvas-soft-2}`): subtle filler stripe and inset surface tone.
392
- - **Line** (`{colors.line}`): the universal 1 px divider and seam color. It is the only token used to tune ordinary seam visibility; keep it visible on `{colors.canvas}` and `{colors.canvas-soft}` while remaining quiet. Do not darken individual borders, gap backgrounds, hatch stripes, or dividers locally.
393
- - **Cross** (`{colors.cross}`): stronger gray for visible marks, pending nodes, and crosshair markers.
394
- - **Seam** (`{colors.seam}`): dashed connector and secondary guide color.
464
+ - **100–300** component backgrounds: default, hover, active.
465
+ - **400–600** — borders: default, hover, active.
466
+ - **700** — the high-contrast solid, the star anchor of the scale (the flag/cobalt tone).
467
+ - **800** solid hover.
468
+ - **900** text and icons (AA body weight on white).
469
+ - **1000** high-contrast text, and the darkest ground for dark-mode tinted panels.
470
+
471
+ Backgrounds are `{colors.background-100}` (page default, white) and `{colors.background-200}` (soft, used sparingly). `gray` is adopted verbatim as the neutral spine: the existing `{colors.ink}` (= `gray-1000`), `{colors.body}` (= `gray-900`), `{colors.canvas}`, `{colors.canvas-soft}`, `{colors.canvas-soft-2}`, and `{colors.line}` names stay as consumed aliases over the scale — do not rename them. `green-italia` is the brand primary (anchor `{colors.green-italia-700}`, flag green); `red-italia` carries accent and danger (anchor `{colors.red-italia-700}`, flag red); `blue-cobalto` carries info and the cobalt world of the imagery (anchor `{colors.blue-cobalto-700}`); `amber` carries warning and chrome-yellow energy (`{colors.amber-600}` is the operational warning tone).
472
+
473
+ ### Semantic roles (functional tier)
474
+
475
+ - **Primary** (`{colors.primary}` = `green-italia-700`): primary actions and primary buttons, always with `{colors.on-primary}` (white) text. Green, not near-black, is now the primary weight; `{colors.ink}` becomes the neutral/secondary button treatment.
476
+ - **Canvas / Line / Cross / Seam** (`{colors.canvas}`, `{colors.line}`, `{colors.cross}`, `{colors.seam}`): white content cells, the universal 1 px divider/seam color, the stronger gray for marks and crosshair markers, and the dashed connector guide. `{colors.line}` is the only token used to tune ordinary seam visibility; do not darken borders, gaps, or dividers locally.
395
477
  - **Body / Muted** (`{colors.body}`, `{colors.muted}`): secondary copy and low-priority labels.
396
- - **Italian Link Green** (`{colors.link}`): inline links, navigational accents, and approved/example proof states. It is intentionally green, not blue, so NadicodeAI keeps an Italian signal without turning the interface into flag decoration.
397
- - **Semantic** (`{colors.success}`, `{colors.error}`, `{colors.warning}` plus soft/deep variants): validation, caution, approval, and operational feedback. `success` uses the Italian flag green family; `error` uses a deeper Italian red so destructive and blocked states are visible without defaulting to generic web red.
398
- - **Accent** (`{colors.cyan}`): high-energy accent available for visuals, states, and generated assets.
399
- - **Flag Red** (`{colors.flag-red}`): a decorative Italian-flag red reserved for brand-asset decoration only (identity marks such as Nadia's flag-red bar). It is distinct from `{colors.error}`; never use `flag-red` for destructive, blocked, or validation states.
400
- - **Gradient Pairs** (`{colors.gradient-develop-*}`, `{colors.gradient-ship-*}`): reserved gradient vocabulary for artifact- and asset-level energy; do not use them to repair page structure or seams.
401
- - **Workflow States** (`{colors.state-ready}`, `{colors.state-running}`, `{colors.state-review}`, `{colors.state-blocked}`, `{colors.state-complete}`): left-border/state vocabulary for agentic work surfaces.
402
- - **Dark Primitives** (`{colors.dark-canvas}`, `{colors.dark-ink}`, `{colors.dark-line}`, and siblings): the source tokens for the generated shadcn `.dark` role map. They are mode-bearing primitives, not a separate component palette; consuming apps opt into them by applying a `.dark` ancestor through their runtime theme provider.
478
+ - **Link** (`{colors.link}` = `green-italia-800`, `{colors.link-deep}` = `green-italia-900`, `{colors.link-bg-soft}` = `green-italia-200`): inline links, navigational accents, and approved/example proof states. Intentionally green, keeping the Italian signal without turning the interface into flag decoration.
479
+ - **Semantic feedback** (`{colors.success}`, `{colors.error}` + `{colors.error-soft}`/`{colors.error-deep}`, `{colors.warning}` + `{colors.warning-soft}`/`{colors.warning-deep}`, `{colors.info}`): validation, caution, approval, and operational feedback. `success` uses `green-italia-700`; `error` uses `red-italia-800` with soft/deep on `red-italia-200`/`red-italia-900`; `warning` uses `amber-600` with soft/deep on `amber-200`/`amber-900`; `info` (`blue-cobalto-700`) is the new informational role.
480
+ - **Accent** (`{colors.accent}` = `red-italia-700`): UI highlights, badges, and selected markers. Flag red is now an active accent the former "decoration-only" restriction on flag red is retired.
481
+ - **Flag Red** (`{colors.flag-red}`): kept as a stable alias at the same value as `{colors.accent}` (`red-italia-700`, `#cd212a`). `accent` and `flag-red` are two roles at one hex: `accent` is the interface-highlight role, `flag-red` is the identity-mark alias. `error` (`red-italia-800`) stays a distinct, deeper red; never use it as an accent.
482
+ - **Workflow States** (`{colors.state-ready}`, `{colors.state-running}`, `{colors.state-review}`, `{colors.state-blocked}`, `{colors.state-complete}`): the left-border/state vocabulary for agentic work surfaces. `state-running` is now `blue-cobalto-700` and `state-complete` is `green-italia-700` — blue means in motion, green means done; `state-ready` moves to `gray-900`. The dark counterparts (`{colors.dark-state-ready}`, `{colors.dark-state-running}`, `{colors.dark-state-review}`, `{colors.dark-state-blocked}`, `{colors.dark-state-complete}`) ride the same Italia scales moved to lighter steps for the dark console — ready ink-neutral (`gray` step `#d4d4d4`), running a light `blue-cobalto` (blue = in motion), review `amber-400`, blocked `red-italia-400`, complete `green-italia-500` — carried on the `state-tag` 3 px `border-left`, each clearing 4.5:1 on the dark canvas for its label.
483
+
484
+ ### Chart categoricals (functional tier)
485
+
486
+ - **Charts** (`{colors.chart-1}`…`{colors.chart-6}`): the categorical series palette — cobalto, verde, ambra, rosso, plus a functional-only teal and viola. Functional only: never place chart colours on marketing surfaces, campi, or generated imagery. On the dark canvas the deep cobalto and viola drop below the 3:1 WCAG 1.4.11 floor for data marks, so they carry dark-tuned steps (`{colors.dark-chart-1}` on `blue-cobalto-500`, `{colors.dark-chart-6}` a lighter viola); the four mid/high-luminance series (verde, ambra, rosso, teal) already clear 3:1 and stay saturated in both modes.
487
+ - **Categorical distinguishability**: the same-family neighbours are held apart — `chart-3`/`chart-4` (ambra/rosso) and `chart-2`/`chart-5` (verde/teal) each clear a CIEDE2000 ≥ 20 normal / ≥ 15 deuteranopia-simulated floor. Two proximities are brand-locked and exempt from the numeric floor: `chart-2`/`chart-4` (verde/rosso, the flag pair, which collapses under red-green deficiency by identity) and `chart-1`/`chart-6` (cobalto/viola, adjacent blue-violet). Charts using the full six must carry redundant encoding (direct labels, position, or pattern), never hue alone, so these two pairs stay readable under colour-vision deficiency.
488
+
489
+ ### Brand tier — i campi
490
+
491
+ The seven campi are full-strength named brand fields. They carry NO tints, NO steps, and NO hover variants; UI states always come from the scales, never from a campo.
492
+
493
+ - `{colors.campo-verde}` (Verde Bandiera), `{colors.campo-rosso}` (Rosso Bandiera), and `{colors.campo-cobalto}` pair with `{colors.campo-bianco}` (white) type.
494
+ - `{colors.campo-arancio}` (vermilion) and `{colors.campo-giallo}` (mustard) pair with `{colors.campo-inchiostro}` (ink) type.
495
+ - `{colors.campo-inchiostro}` pairs with white type; `{colors.campo-bianco}` pairs with ink type.
496
+
497
+ Four campo rules govern their use:
498
+
499
+ 1. **One campo per room.** A section owns exactly one field; adjacent sections must jump in luminance, so two mid-tone rooms never touch.
500
+ 2. **Type on a campo is bianco or inchiostro only.** Arancio and Giallo carry ink; Verde, Rosso, Cobalto, and Inchiostro carry white. No tinted text on fields.
501
+ 3. **Campi are planes, not chips.** The minimum duty of a campo is a section ground, poster field, or full media mount. UI states come from the scales, never campi.
502
+ 4. **One paint box.** Generated imagery draws its flat fields from these seven values; the Visual Law's private palette retires and points at these tokens.
503
+
504
+ ### Dark primitives
505
+
506
+ **Dark Primitives** (`{colors.dark-canvas}`, `{colors.dark-ink}`, `{colors.dark-line}`, and siblings) are the source tokens for the generated shadcn `.dark` role map — mode-bearing primitives, not a separate palette; consuming apps opt in by applying a `.dark` ancestor through their runtime theme provider. The dark neutrals (`dark-canvas`, `dark-canvas-soft`, `dark-canvas-soft-2`, `dark-ink`, `dark-body`, `dark-muted`, `dark-line`, `dark-input`, `dark-seam`, `dark-primary`, `dark-on-primary`) are true neutrals: each is a pure gray (equal channels) so the interface carries no ambient tint, and they step in clear elevation planes (`dark-canvas` → `dark-canvas-soft` → `dark-canvas-soft-2`). `dark-input` is the resting text-input boundary, held one gray brighter than the decorative `dark-line` border so a field edge clears non-text contrast before the focus ring appears. Chroma lives only in the intentional accents: the dark semantic ramps ride the same Italia scales as their light counterparts, moved to lighter steps so each pair clears 4.5:1 on the dark surfaces — `dark-link`/`dark-link-deep` on `green-italia-400`/`green-italia-300`, `dark-error`/`dark-error-deep` on `red-italia-400`/`red-italia-300`, `dark-warning`/`dark-warning-deep` on `amber-400`/`amber-300`, with the `*-soft` tinted grounds on each scale's `1000` step, plus `dark-success` on `green-italia-500` for the positive-feedback green and the `dark-state-*` workflow family on their matching Italia scale steps. The remaining dark-ramp members stay true-neutral: `dark-selection-bg`/`dark-selection-fg` invert the light selection (a bright neutral ground with dark text) and `dark-cross` is the visible mark gray, brighter than the decorative `dark-line`. Never reintroduce hue into the neutral set.
403
507
 
404
508
  Do not delete a color because the current website kernel does not consume it. Prototype usage is not palette authority; removals require an explicit palette migration decision.
405
509
 
@@ -36,7 +36,7 @@
36
36
 
37
37
  /* Optional identity accent — same AC-016 map as chat-bubble-agent. */
38
38
  .nc-agent-avatar[data-accent="green"] { --nc-accent: var(--nc-link); }
39
- .nc-agent-avatar[data-accent="cyan"] { --nc-accent: var(--nc-cyan-deep); }
39
+ .nc-agent-avatar[data-accent="cyan"] { --nc-accent: var(--nc-info); }
40
40
  .nc-agent-avatar[data-accent="amber"] { --nc-accent: var(--nc-warning-deep); }
41
41
  .nc-agent-avatar[data-accent="ink"] { --nc-accent: var(--nc-ink); }
42
42
  .nc-agent-avatar[data-accent="red"] { --nc-accent: var(--nc-error); }
@@ -34,10 +34,10 @@
34
34
  }
35
35
 
36
36
  /* AC-016 accent map → existing --nc-* tokens. Each rule references a token, no
37
- hard-coded hex. green→link, cyan→cyan-deep, amber→warning-deep, ink→ink,
38
- red→error. */
37
+ hard-coded hex. green→link, cyan→info (blue-cobalto; the killed cyan token
38
+ retired per Italia contract §6), amber→warning-deep, ink→ink, red→error. */
39
39
  .nc-chat-bubble-agent[data-accent="green"] { --nc-accent: var(--nc-link); }
40
- .nc-chat-bubble-agent[data-accent="cyan"] { --nc-accent: var(--nc-cyan-deep); }
40
+ .nc-chat-bubble-agent[data-accent="cyan"] { --nc-accent: var(--nc-info); }
41
41
  .nc-chat-bubble-agent[data-accent="amber"] { --nc-accent: var(--nc-warning-deep); }
42
42
  .nc-chat-bubble-agent[data-accent="ink"] { --nc-accent: var(--nc-ink); }
43
43
  .nc-chat-bubble-agent[data-accent="red"] { --nc-accent: var(--nc-error); }
@@ -31,6 +31,20 @@
31
31
  color var(--nc-duration-confirm) var(--nc-ease-out-strong);
32
32
  }
33
33
 
34
+ /*
35
+ * Dark console: the tag's neutral surface flips to the dark ramp so the chip is
36
+ * dark-grounded, not a light chip on the dark canvas. Scoped to the component
37
+ * because canvas/ink/line are global neutrals that must not be remapped in the
38
+ * unscoped .dark block. The variant state colors flip separately via the
39
+ * generated .dark --nc-state-* remap in the Tailwind theme map. Direct
40
+ * counterparts: the tag stays a canvas-grounded chip in both themes.
41
+ */
42
+ .dark .nc-state-tag {
43
+ --nc-canvas: var(--nc-dark-canvas);
44
+ --nc-ink: var(--nc-dark-ink);
45
+ --nc-line: var(--nc-dark-line);
46
+ }
47
+
34
48
  .nc-state-tag[data-variant="ready"] {
35
49
  border-left-color: var(--nc-state-ready);
36
50
  }
@@ -28,10 +28,10 @@
28
28
  }
29
29
 
30
30
  /* AC-016 accent map → existing --nc-* tokens; identical to chat-bubble-agent and
31
- agent-avatar. green→link, cyan→cyan-deep, amber→warning-deep, ink→ink,
32
- red→error. No hard-coded hex. */
31
+ agent-avatar. green→link, cyan→info (blue-cobalto; killed cyan token retired
32
+ per Italia contract §6), amber→warning-deep, ink→ink, red→error. No hard-coded hex. */
33
33
  .nc-typing-dots[data-accent="green"] { --nc-accent: var(--nc-link); }
34
- .nc-typing-dots[data-accent="cyan"] { --nc-accent: var(--nc-cyan-deep); }
34
+ .nc-typing-dots[data-accent="cyan"] { --nc-accent: var(--nc-info); }
35
35
  .nc-typing-dots[data-accent="amber"] { --nc-accent: var(--nc-warning-deep); }
36
36
  .nc-typing-dots[data-accent="ink"] { --nc-accent: var(--nc-ink); }
37
37
  .nc-typing-dots[data-accent="red"] { --nc-accent: var(--nc-error); }
@@ -170,10 +170,9 @@
170
170
  min-width: 0;
171
171
  border: var(--nc-guide) solid var(--nc-line);
172
172
  padding: 18px;
173
+ /* The retired gradient tokens (Italia color contract §6) are gone; the artifact
174
+ surface keeps a calm, scale-driven dot-grid atmosphere on canvas. */
173
175
  background:
174
- radial-gradient(circle at 72% 18%, color-mix(in srgb, var(--nc-gradient-develop-start) 16%, transparent), transparent 30%),
175
- radial-gradient(circle at 22% 76%, color-mix(in srgb, var(--nc-gradient-ship-end) 10%, transparent), transparent 34%),
176
- radial-gradient(circle at 86% 84%, color-mix(in srgb, var(--nc-gradient-ship-start) 9%, transparent), transparent 28%),
177
176
  radial-gradient(var(--nc-line) 0.8px, transparent 0.8px) 0 0 / 12px 12px,
178
177
  var(--nc-canvas);
179
178
  color: var(--nc-body);
@@ -203,8 +202,8 @@
203
202
  align-items: center;
204
203
  justify-content: center;
205
204
  border: var(--nc-guide) solid var(--nc-line);
206
- /* status-tag = {rounded.lg} (DESIGN.md). */
207
- border-radius: var(--nc-rounded-lg);
205
+ /* status-tag = {rounded.sm} (DESIGN.md). */
206
+ border-radius: var(--nc-rounded-sm);
208
207
  padding: 5px 9px;
209
208
  background: var(--nc-canvas-soft);
210
209
  color: var(--nc-body);
@@ -5,7 +5,7 @@
5
5
 
6
6
  :root {
7
7
  /* Colors */
8
- --nc-primary: #171717;
8
+ --nc-primary: #008c45;
9
9
  --nc-on-primary: #ffffff;
10
10
  --nc-ink: #171717;
11
11
  --nc-body: #4d4d4d;
@@ -16,53 +16,125 @@
16
16
  --nc-line: #e5e5e5;
17
17
  --nc-seam: #e4e7ec;
18
18
  --nc-cross: #a1a1a1;
19
- --nc-link: #007a5e;
20
- --nc-link-deep: #005d49;
21
- --nc-link-bg-soft: #d8f0e9;
19
+ --nc-link: #007a3c;
20
+ --nc-link-deep: #00602f;
21
+ --nc-link-bg-soft: #d9f6e4;
22
+ --nc-accent: #cd212a;
23
+ --nc-info: #2743d8;
22
24
  --nc-success: #008c45;
23
25
  --nc-error: #b80022;
24
- --nc-error-soft: #f4d7dc;
25
- --nc-error-deep: #820018;
26
+ --nc-error-soft: #fce4e4;
27
+ --nc-error-deep: #9c001d;
26
28
  --nc-warning: #f5a623;
27
- --nc-warning-soft: #ffefcf;
28
- --nc-warning-deep: #ab570a;
29
- --nc-cyan: #50e3c2;
30
- --nc-cyan-soft: #aaffec;
31
- --nc-cyan-deep: #29bc9b;
29
+ --nc-warning-soft: #fff1cf;
30
+ --nc-warning-deep: #8f4a06;
32
31
  --nc-flag-red: #cd212a;
33
- --nc-gradient-develop-start: #007a5e;
34
- --nc-gradient-develop-end: #00dfd8;
35
- --nc-gradient-ship-start: #b80022;
36
- --nc-gradient-ship-end: #f9cb28;
37
32
  --nc-selection-bg: #171717;
38
33
  --nc-selection-fg: #f2f2f2;
39
- --nc-state-ready: #171717;
40
- --nc-state-running: #007a5e;
34
+ --nc-state-ready: #4d4d4d;
35
+ --nc-state-running: #2743d8;
41
36
  --nc-state-review: #f5a623;
42
37
  --nc-state-blocked: #b80022;
43
38
  --nc-state-complete: #008c45;
44
- --nc-dark-canvas: #101414;
45
- --nc-dark-canvas-soft: #151b19;
46
- --nc-dark-canvas-soft-2: #1d2522;
47
- --nc-dark-ink: #f5f7f4;
48
- --nc-dark-body: #c8d0cb;
49
- --nc-dark-muted: #8d9892;
50
- --nc-dark-line: #2c3632;
51
- --nc-dark-seam: #24302b;
52
- --nc-dark-primary: #ecf4ee;
53
- --nc-dark-on-primary: #101414;
54
- --nc-dark-link: #7ee7c6;
55
- --nc-dark-link-deep: #b8ffe5;
56
- --nc-dark-link-bg-soft: #163f34;
57
- --nc-dark-error: #ff7a8b;
58
- --nc-dark-error-soft: #4b1821;
59
- --nc-dark-error-deep: #ffb3bd;
60
- --nc-dark-warning: #ffd28a;
61
- --nc-dark-warning-soft: #4a3219;
62
- --nc-dark-warning-deep: #ffe6b8;
63
- --nc-dark-cyan: #83f7dc;
64
- --nc-dark-cyan-soft: #b8ffe5;
65
- --nc-dark-cyan-deep: #49c6a8;
39
+ --nc-background-100: #ffffff;
40
+ --nc-background-200: #fafafa;
41
+ --nc-gray-100: #f2f2f2;
42
+ --nc-gray-200: #ebebeb;
43
+ --nc-gray-300: #e6e6e6;
44
+ --nc-gray-400: #eaeaea;
45
+ --nc-gray-500: #c9c9c9;
46
+ --nc-gray-600: #a8a8a8;
47
+ --nc-gray-700: #8f8f8f;
48
+ --nc-gray-800: #7d7d7d;
49
+ --nc-gray-900: #4d4d4d;
50
+ --nc-gray-1000: #171717;
51
+ --nc-green-italia-100: #e8faef;
52
+ --nc-green-italia-200: #d9f6e4;
53
+ --nc-green-italia-300: #c3f0d4;
54
+ --nc-green-italia-400: #9fe6bc;
55
+ --nc-green-italia-500: #62d494;
56
+ --nc-green-italia-600: #17b568;
57
+ --nc-green-italia-700: #008c45;
58
+ --nc-green-italia-800: #007a3c;
59
+ --nc-green-italia-900: #00602f;
60
+ --nc-green-italia-1000: #00301a;
61
+ --nc-red-italia-100: #fdeeee;
62
+ --nc-red-italia-200: #fce4e4;
63
+ --nc-red-italia-300: #fad3d4;
64
+ --nc-red-italia-400: #f7b3b5;
65
+ --nc-red-italia-500: #f28085;
66
+ --nc-red-italia-600: #e84e57;
67
+ --nc-red-italia-700: #cd212a;
68
+ --nc-red-italia-800: #b80022;
69
+ --nc-red-italia-900: #9c001d;
70
+ --nc-red-italia-1000: #4a000e;
71
+ --nc-blue-cobalto-100: #eef2ff;
72
+ --nc-blue-cobalto-200: #e2e9fe;
73
+ --nc-blue-cobalto-300: #cdd9fd;
74
+ --nc-blue-cobalto-400: #a9befa;
75
+ --nc-blue-cobalto-500: #7d99f2;
76
+ --nc-blue-cobalto-600: #4f6ae6;
77
+ --nc-blue-cobalto-700: #2743d8;
78
+ --nc-blue-cobalto-800: #1d33ad;
79
+ --nc-blue-cobalto-900: #16277f;
80
+ --nc-blue-cobalto-1000: #0a1240;
81
+ --nc-amber-100: #fff6e1;
82
+ --nc-amber-200: #fff1cf;
83
+ --nc-amber-300: #ffe9b3;
84
+ --nc-amber-400: #ffd97d;
85
+ --nc-amber-500: #ffc933;
86
+ --nc-amber-600: #f5a623;
87
+ --nc-amber-700: #d98800;
88
+ --nc-amber-800: #b36b00;
89
+ --nc-amber-900: #8f4a06;
90
+ --nc-amber-1000: #452301;
91
+ --nc-campo-verde: #008c45;
92
+ --nc-campo-rosso: #cd212a;
93
+ --nc-campo-arancio: #e4530b;
94
+ --nc-campo-giallo: #f2b705;
95
+ --nc-campo-cobalto: #2743d8;
96
+ --nc-campo-inchiostro: #171717;
97
+ --nc-campo-bianco: #ffffff;
98
+ --nc-chart-1: #2743d8;
99
+ --nc-chart-2: #008c45;
100
+ --nc-chart-3: #f5a623;
101
+ --nc-chart-4: #cd212a;
102
+ --nc-chart-5: #00838f;
103
+ --nc-chart-6: #6f42c1;
104
+ --nc-dark-canvas: #0a0a0a;
105
+ --nc-dark-canvas-soft: #171717;
106
+ --nc-dark-canvas-soft-2: #262626;
107
+ --nc-dark-ink: #f5f5f5;
108
+ --nc-dark-body: #d4d4d4;
109
+ --nc-dark-muted: #a3a3a3;
110
+ --nc-dark-line: #2e2e2e;
111
+ --nc-dark-input: #5d5d5d;
112
+ --nc-dark-seam: #1f1f1f;
113
+ --nc-dark-primary: #ededed;
114
+ --nc-dark-on-primary: #0a0a0a;
115
+ --nc-dark-link: #9fe6bc;
116
+ --nc-dark-link-deep: #c3f0d4;
117
+ --nc-dark-link-bg-soft: #00301a;
118
+ --nc-dark-error: #f7b3b5;
119
+ --nc-dark-error-soft: #4a000e;
120
+ --nc-dark-error-deep: #fad3d4;
121
+ --nc-dark-warning: #ffd97d;
122
+ --nc-dark-warning-soft: #452301;
123
+ --nc-dark-warning-deep: #ffe9b3;
124
+ --nc-dark-cyan: #33d1cb;
125
+ --nc-dark-cyan-soft: #7ee8de;
126
+ --nc-dark-cyan-deep: #1f9e9a;
127
+ --nc-dark-success: #62d494;
128
+ --nc-dark-state-ready: #d4d4d4;
129
+ --nc-dark-state-running: #a9befa;
130
+ --nc-dark-state-review: #ffd97d;
131
+ --nc-dark-state-blocked: #f7b3b5;
132
+ --nc-dark-state-complete: #62d494;
133
+ --nc-dark-selection-bg: #ededed;
134
+ --nc-dark-selection-fg: #0a0a0a;
135
+ --nc-dark-cross: #6e6e6e;
136
+ --nc-dark-chart-1: #7d99f2;
137
+ --nc-dark-chart-6: #9575cd;
66
138
 
67
139
  /* Spacing */
68
140
  --nc-xxs: 4px;
@@ -125,11 +197,11 @@
125
197
 
126
198
  /* Radii */
127
199
  --nc-rounded-none: 0px;
128
- --nc-rounded-xs: 4px;
129
- --nc-rounded-sm: 6px;
130
- --nc-rounded-md: 8px;
131
- --nc-rounded-lg: 12px;
132
- --nc-rounded-xl: 16px;
200
+ --nc-rounded-xs: 2px;
201
+ --nc-rounded-sm: 4px;
202
+ --nc-rounded-md: 6px;
203
+ --nc-rounded-lg: 8px;
204
+ --nc-rounded-xl: 10px;
133
205
  --nc-rounded-pill-sm: 64px;
134
206
  --nc-rounded-pill: 100px;
135
207
  --nc-rounded-full: 9999px;