@nadicodeai/design-system 0.1.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/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 ships light roles only with no `.dark` block; `@nadicodeai/ui/globals.css` may layer semantic `.dark` remaps from generated tokens without adding a new source-token group. Correctness is enforced by export-derived structural parity (`tests/token-structural-parity.test.ts` for the `--nc-*` layer; the per-token `@theme` value loops 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 0005 D4 keeps the generated-adapter no-dark-palette rule).
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,19 +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 — 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.
36
37
 
37
38
  ## Task Routing
38
39
 
39
40
  | Task | Read first | Then read | Verify |
40
41
  | --- | --- | --- | --- |
41
- | 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` |
42
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` |
43
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` |
44
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` |
45
46
 
46
47
  ## DESIGN.md Authoring
47
48
 
48
- - 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.
49
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.
50
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.
51
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.
@@ -64,7 +65,7 @@ Generated-artifact and runtime-JS prohibitions live in the Forbidden Patterns ta
64
65
  | --- | --- | --- |
65
66
  | Editing `dist/**` or `src/css/tokens.generated.css` directly | Edit `DESIGN.md`, then run `npm run build`; hand-authored token CSS goes in `src/css/tokens.local.css` | Both are generated from `DESIGN.md`; hand edits are overwritten on the next build |
66
67
  | Hand-listing which tokens reach the CSS layer (an allowlist, "runtime subset", rename, or any `@media`/`calc` in `tokens.generated.css`) | Style Dictionary (`scripts/sd/`) emits a complete projection of the `@google/design.md` export: every token `--nc-<exact-name>: <exact-value>`, each name once. Responsive switching and composed/`calc` vars are hand-authored in `layout.css`/`tokens.local.css` and reference emitted `--nc-*` only | The export is the contract; a differing subset is drift. `token-structural-parity.test.ts` (export-derived) fails on any dropped/renamed/added/modified/duplicated var, a name collision, a non-px line-height, or any `@media`/`calc` in the generated layer (ADR 0006) |
67
- | Hardcoding a color/radius/dimension in `src/css`, `examples/`, or the Tailwind adapter that duplicates or extends a token — including a `var(--token, <hex==its value>)` fallback | Reference the emitted token: `var(--nc-<name>)` / `var(--color-<name>)`. A new value goes to `DESIGN.md` first. There is no exception island: the system ships zero out-of-contract values, and the generated Tailwind adapter ships no dark palette or `.dark` block; UI package `.dark` remaps must reference generated tokens or semantic roles | No second value source may exist; the no-raw-literal and no-second-value-source guards in `consumer-css-discipline.test.ts` forbid duplicate values, fallback-encoded or not (ADR 0006; generated-adapter no-dark per ADR 0005 D4) |
68
+ | Hardcoding a color/radius/dimension in `src/css`, `examples/`, or the Tailwind adapter that duplicates or extends a token — including a `var(--token, <hex==its value>)` fallback | Reference the emitted token: `var(--nc-<name>)` / `var(--color-<name>)`. A new value goes to `DESIGN.md` first. There is no exception island: the system ships zero out-of-contract values, and the generated Tailwind adapter may ship light/dark role remaps only when every role value references generated `--color-*`/`--radius-*` tokens. Export-anchored generated aliases such as `--color-nadicode-muted` may duplicate the exported value only when a `var()` reference would collide with a downstream semantic bridge; these aliases must be generated from `DESIGN.md` through `scripts/sd/` and covered by tests. UI package `.dark` aliases must reference generated tokens or semantic roles | No second hand-authored value source may exist; the no-raw-literal and no-second-value-source guards in `consumer-css-discipline.test.ts` forbid duplicate values, fallback-encoded or not, outside the generated export-anchored aliases described here (ADR 0006; light/dark role maps per ADR 0008) |
68
69
  | "Cleaning up" emitted-but-unreferenced tokens or the responsive alias block | Leave them. Emitted-unreferenced tokens (orphans) are the intended steady state — the contract drives emission, not consumption. Never add an orphan-detection test or delete a token/alias because no prototype uses it | The contract is the palette authority; consumption is not. Deleting unused tokens is the exact silent-removal the boundary rules forbid (ADR 0006) |
69
70
  | Adding `render:showcase`, e2e, examples, registry, AI-Elements, or a second runtime JS file | Keep the package to `DESIGN.md`, assets, token/CSS exports, and the single vanilla `src/js/chat-autoplay.js` enhancer (exported via `./css/*`) | Those surfaces were intentionally removed; only the one dependency-free chat auto-play enhancer is carved out |
70
71
  | Inventing token or component behavior | Read `DESIGN.md` | The brand contract is single-source |
@@ -90,7 +91,7 @@ npm run lint:design && npm run build && npm run test
90
91
 
91
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.
92
93
 
93
- 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.
94
95
 
95
96
  ## References
96
97
 
@@ -104,6 +105,7 @@ For a visual check, agents drive `agent-browser` directly: open the rendered pag
104
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 |
105
106
  | `scripts/generate-icons.ts` | Bakes the NadicodeAI icon set into `dist/icons/` from the pinned `lucide-static` dependency |
106
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 |
107
109
  | `src/assets/` | Package logo SVG exports |
108
110
  | `dist/` | Generated token exports tracked for package consumers |
109
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,31 +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"
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"
47
141
 
48
142
  typography:
49
143
  display-xl:
@@ -151,11 +245,11 @@ typography:
151
245
 
152
246
  rounded:
153
247
  none: 0px
154
- xs: 4px
155
- sm: 6px
156
- md: 8px
157
- lg: 12px
158
- xl: 16px
248
+ xs: 2px
249
+ sm: 4px
250
+ md: 6px
251
+ lg: 8px
252
+ xl: 10px
159
253
  pill-sm: 64px
160
254
  pill: 100px
161
255
  full: 9999px
@@ -232,14 +326,14 @@ components:
232
326
  backgroundColor: "{colors.canvas-soft}"
233
327
  textColor: "{colors.body}"
234
328
  typography: "{typography.caption-mono}"
235
- rounded: "{rounded.lg}"
329
+ rounded: "{rounded.sm}"
236
330
  padding: "5px 9px"
237
331
  height: 28px
238
332
  status-tag-approved:
239
333
  backgroundColor: "{colors.link-bg-soft}"
240
334
  textColor: "{colors.link-deep}"
241
335
  typography: "{typography.caption-mono}"
242
- rounded: "{rounded.lg}"
336
+ rounded: "{rounded.sm}"
243
337
  padding: "5px 9px"
244
338
  height: 28px
245
339
  image:
@@ -361,22 +455,55 @@ The kernel is the reusable implementation layer. `DESIGN.md` defines the reusabl
361
455
 
362
456
  ## Colors
363
457
 
364
- 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:
365
463
 
366
- - **Ink / Primary** (`{colors.ink}`, `{colors.primary}`): near-black for text, primary actions, and dark action bands.
367
- - **Canvas** (`{colors.canvas}`): white content cells.
368
- - **Canvas Soft** (`{colors.canvas-soft}`): page background and diagonal filler base.
369
- - **Canvas Soft 2** (`{colors.canvas-soft-2}`): subtle filler stripe and inset surface tone.
370
- - **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.
371
- - **Cross** (`{colors.cross}`): stronger gray for visible marks, pending nodes, and crosshair markers.
372
- - **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.
373
477
  - **Body / Muted** (`{colors.body}`, `{colors.muted}`): secondary copy and low-priority labels.
374
- - **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.
375
- - **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.
376
- - **Accent** (`{colors.cyan}`): high-energy accent available for visuals, states, and generated assets.
377
- - **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.
378
- - **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.
379
- - **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.
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.
380
507
 
381
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.
382
509
 
package/README.md CHANGED
@@ -11,7 +11,7 @@ For Tailwind CSS v4 CSS-first projects, `npm run build` also emits `dist/tailwin
11
11
  @import "@nadicodeai/design-system/tailwind/theme.css";
12
12
  ```
13
13
 
14
- The CSS adapter provides shadcn-compatible semantic utilities such as `bg-background`, `text-foreground`, `bg-primary`, `text-primary-foreground`, `border-border`, and `ring-ring`. NadicodeAI-specific spacing utilities are namespaced, for example `p-nadicode-lg` and `h-nadicode-h-cell-sm`, so standard Tailwind/shadcn classes such as `max-w-3xl` keep their normal Tailwind behavior. React consumers normally get this through `@nadicodeai/ui/globals.css`.
14
+ The CSS adapter provides shadcn-compatible semantic utilities such as `bg-background`, `text-foreground`, `bg-primary`, `text-primary-foreground`, `border-border`, and `ring-ring`. It publishes both `:root` light roles and `.dark` dark roles; consuming apps opt into dark mode by applying a `.dark` ancestor, normally through their own theme provider. NadicodeAI-specific spacing utilities are namespaced, for example `p-nadicode-lg` and `h-nadicode-h-cell-sm`, so standard Tailwind/shadcn classes such as `max-w-3xl` keep their normal Tailwind behavior. React consumers normally get this through `@nadicodeai/ui/globals.css`.
15
15
 
16
16
  Geist and Geist Mono (SIL Open Font License 1.1) ship inside the package under `src/assets/fonts/`. Consumers can pull the `@font-face` shim directly:
17
17
 
@@ -61,7 +61,7 @@ Because the order is declared data, consumer overrides are predictable: layer yo
61
61
 
62
62
  The `/css` bundle and the Tailwind `theme.css` adapter are complementary:
63
63
 
64
- - `@nadicodeai/design-system/tailwind/theme.css` publishes the shadcn `:root` token variables (the semantic `bg-background` / `text-foreground` / `border-border` family), so interactive shadcn app islands land on-brand when they need JS-driven accessibility behavior such as dialogs or comboboxes.
64
+ - `@nadicodeai/design-system/tailwind/theme.css` publishes the shadcn `:root` and `.dark` token variables (the semantic `bg-background` / `text-foreground` / `border-border` family), so interactive shadcn app islands land on-brand when they need JS-driven accessibility behavior such as dialogs or comboboxes.
65
65
  - The `/css` bundle ships NadicodeAI's framework-agnostic page grammar, CSS components, brand motion contract, and agent-chat surfaces.
66
66
  - `@nadicodeai/ui` ships the React shadcn-style components and reusable section/app compositions on top of those tokens and CSS components.
67
67
 
@@ -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,31 +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;
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;
44
138
 
45
139
  /* Spacing */
46
140
  --nc-xxs: 4px;
@@ -103,11 +197,11 @@
103
197
 
104
198
  /* Radii */
105
199
  --nc-rounded-none: 0px;
106
- --nc-rounded-xs: 4px;
107
- --nc-rounded-sm: 6px;
108
- --nc-rounded-md: 8px;
109
- --nc-rounded-lg: 12px;
110
- --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;
111
205
  --nc-rounded-pill-sm: 64px;
112
206
  --nc-rounded-pill: 100px;
113
207
  --nc-rounded-full: 9999px;
@@ -4,7 +4,7 @@
4
4
  corner (rx 7 -> 0) for the full-bleed apple-touch / PWA variants. -->
5
5
  <defs>
6
6
  <linearGradient id="nc-agent-f" x1="0" y1="0" x2="1" y2="1">
7
- <stop offset="0" stop-color="#007a5e"/>
7
+ <stop offset="0" stop-color="#007a3c"/>
8
8
  <stop offset="0.55" stop-color="#00a07a"/>
9
9
  <stop offset="1" stop-color="#00b389"/>
10
10
  </linearGradient>