@nadicodeai/design-system 0.22.0 → 1.0.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 +7 -8
- package/CONTEXT.md +6 -0
- package/DESIGN.md +67 -54
- package/dist/css/index.css +15 -195
- package/dist/tailwind/nadicode.tailwind.json +4 -0
- package/dist/tokens/nadicode.dtcg.json +44 -0
- package/package.json +3 -1
package/AGENTS.md
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
# @nadicodeai/design-system
|
|
2
2
|
|
|
3
|
-
The `@nadicodeai/design-system` npm workspace. `DESIGN.md` is the normative contract for reusable design tokens and package output; the package ships tokens, the CSS kit (structural geometry plus framework-agnostic brand display components), and assets. Repo-only `examples/` specimens prove that public surface. Standard, interactive, and section UI ships as React components from `@nadicodeai/ui`, not from here. Paths here are relative to `design-system/`; run commands from this directory, or with `-w design-system` from the repo root.
|
|
3
|
+
The `@nadicodeai/design-system` npm workspace. `DESIGN.md` is the normative contract for reusable design tokens and package output; the package ships tokens, the CSS kit (structural geometry plus framework-agnostic brand display components), and assets. Repo-only `examples/` specimens prove that public surface. Standard, interactive, and section UI ships as React components from `@nadicodeai/ui`, not from here. Paths here are relative to `design-system/`; run commands from this directory, or with `-w @nadicodeai/design-system` from the repo root.
|
|
4
4
|
|
|
5
5
|
## Commands
|
|
6
6
|
|
|
7
|
+
Proof escalates by the ladder in the root `AGENTS.md` "Commands": `npm run check -w @nadicodeai/design-system` and `npm run test -w @nadicodeai/design-system` before pushing. `check` carries the `DESIGN.md` contract lint, so a contract edit needs no separate command. This workspace has no app to boot: it ships a package, and `examples/` renders through the website's verification routes.
|
|
8
|
+
|
|
7
9
|
| Command | When |
|
|
8
10
|
| --- | --- |
|
|
9
|
-
| `npm run
|
|
10
|
-
| `npm run
|
|
11
|
-
| `npm run generate:
|
|
12
|
-
| `npm run
|
|
13
|
-
| `npm run test:visual` | Rendered CSS checks (`playwright.visual.config.ts`, `tests/visual/`) |
|
|
14
|
-
|
|
15
|
-
Handoff gate: `npm run lint:design && npm run lint && npm run build && npm run test`.
|
|
11
|
+
| `npm run build -w @nadicodeai/design-system` | After any `DESIGN.md` edit; regenerates every `dist/` artifact (tokens, Tailwind data, icons, complete CSS bundle) |
|
|
12
|
+
| `npm run generate:icons -w @nadicodeai/design-system` | After bumping `lucide-static`; rebakes `dist/icons/` (also runs inside `build`) |
|
|
13
|
+
| `npm run generate:favicons -w @nadicodeai/design-system` | After a favicon source change; the output is git-tracked and the build does not regenerate it |
|
|
14
|
+
| `npm run test:visual -w @nadicodeai/design-system` | Rendered CSS checks (`playwright.visual.config.ts`, `tests/visual/`), outside the browser-free default suite |
|
|
16
15
|
|
|
17
16
|
## Routing
|
|
18
17
|
|
package/CONTEXT.md
CHANGED
|
@@ -60,6 +60,12 @@ A visual family for presenting a concrete content type, such as an image or arti
|
|
|
60
60
|
**Agentic work surface**:
|
|
61
61
|
A NadicodeAI visual family for showing people and agents working together through conversations, artifacts, approvals, tools, handoffs, traces, and inspectable state.
|
|
62
62
|
|
|
63
|
+
**Agent visual**:
|
|
64
|
+
The decorative metaball identity assigned explicitly to a persistent Agent by
|
|
65
|
+
type. It identifies the Agent across products without carrying status, runtime
|
|
66
|
+
activity, capability, or work output.
|
|
67
|
+
_Avoid_: Agent glyph, Agent avatar
|
|
68
|
+
|
|
63
69
|
**App-owned product feature**:
|
|
64
70
|
A product-specific route, screen, use case, or behavior owned by the consuming app rather than by the reusable design or UI packages.
|
|
65
71
|
|
package/DESIGN.md
CHANGED
|
@@ -20,6 +20,8 @@ colors:
|
|
|
20
20
|
canvas: "#ffffff"
|
|
21
21
|
canvas-soft: "#fafafa"
|
|
22
22
|
canvas-soft-2: "#f5f5f5"
|
|
23
|
+
material-workspace: "#f7f7f7"
|
|
24
|
+
material-solid: "#ffffff"
|
|
23
25
|
line: "#e5e5e5"
|
|
24
26
|
input: "#757575"
|
|
25
27
|
seam: "#d4d4d4"
|
|
@@ -79,6 +81,8 @@ colors:
|
|
|
79
81
|
dark-canvas: "#000000"
|
|
80
82
|
dark-canvas-soft: "#111111"
|
|
81
83
|
dark-canvas-soft-2: "#1a1a1a"
|
|
84
|
+
dark-material-workspace: "#000000"
|
|
85
|
+
dark-material-solid: "#000000"
|
|
82
86
|
dark-ink: "#ededed"
|
|
83
87
|
dark-body: "#c7c7c7"
|
|
84
88
|
dark-muted: "#8f8f8f"
|
|
@@ -356,7 +360,7 @@ Every value a role needs is carried by the role token itself; there are no ten-s
|
|
|
356
360
|
- **Semantic feedback** (`{colors.success}` = verde with `{colors.success-soft}`/`{colors.success-deep}`; `{colors.error}` = rosso funzionale `#d3302f` with `{colors.error-soft}`/`{colors.error-deep}`; `{colors.warning}` = giallo `#ffc220` with `{colors.warning-soft}`/`{colors.warning-deep}`; `{colors.info}` = cobalto `#1e3cff` with `{colors.info-soft}`/`{colors.info-deep}`): validation, caution, approval, and operational feedback. In each pair the `-soft` value is the tinted tag/banner ground and the `-deep` value is the AA-clearing text on it. On a solid `error` fill (the shadcn `destructive` role) text is white; on a solid `warning` or `success` fill text is ink. The success pair intentionally reuses the link pair's AA-safe verde values; its feedback meaning remains distinct from inline navigation and entity-status semantics.
|
|
357
361
|
- **Accent** (`{colors.accent}` = arancio `#ff5a1f`): the attention accent for highlights, exception flags, and emphasis marks. It is an accent only — never a fill, background, or body-text colour, and it never carries text. Do not conflate this functional `accent` with the identically-named shadcn surface role: that role is a neutral (`{colors.canvas-soft-2}` in light, `{colors.dark-canvas-soft-2}` in dark) and carries no hue despite the shared word.
|
|
358
362
|
- **Flag Red** (`{colors.flag-red}` = `#d3302f`): the identity-mark red alias. It shares its hex with `{colors.error}` but stays a distinct role name — `flag-red` is identity, `error` is validation feedback. The attention accent is arancio, not flag red.
|
|
359
|
-
- **Workflow States** (`{colors.state-ready}` neutral, `{colors.state-running}` cobalto, `{colors.state-review}` giallo, `{colors.state-blocked}` rosso, `{colors.state-complete}` verde): the left-border/state vocabulary for agentic work surfaces — cobalto means in motion, verde means done. The dark counterparts (`{colors.dark-state-ready}`, `{colors.dark-state-running}`, `{colors.dark-state-review}`, `{colors.dark-state-blocked}`, `{colors.dark-state-complete}`) keep the same functional identity. These colours are carried
|
|
363
|
+
- **Workflow States** (`{colors.state-ready}` neutral, `{colors.state-running}` cobalto, `{colors.state-review}` giallo, `{colors.state-blocked}` rosso, `{colors.state-complete}` verde): the left-border/state vocabulary for agentic work surfaces — cobalto means in motion, verde means done. The dark counterparts (`{colors.dark-state-ready}`, `{colors.dark-state-running}`, `{colors.dark-state-review}`, `{colors.dark-state-blocked}`, `{colors.dark-state-complete}`) keep the same functional identity. These colours are carried by non-text state accents only — meter and bullet segments, delta marks, and the brand book's own rails; label text stays on the neutral foreground roles for contrast in both themes. Status is not one of their jobs: every status the product renders is the Badge status vocabulary (see `## Status Vocabulary`), which reads from the semantic feedback and link pairs, and the two token sets never cross.
|
|
360
364
|
|
|
361
365
|
### Chart categoricals (functional tier)
|
|
362
366
|
|
|
@@ -438,8 +442,8 @@ All body, title, caption, and code typography uses `letterSpacing: 0px`. Do not
|
|
|
438
442
|
| `{typography.body-sm}` | 14px | 400 | 20px | Secondary copy, nav, compact cell copy. |
|
|
439
443
|
| `{typography.body-sm-strong}` | 14px | 500 | 20px | Emphasised secondary copy and compact labels. |
|
|
440
444
|
| `{typography.caption}` | 12px | 400 | 16px | Footer secondary lines and badge labels. |
|
|
441
|
-
| `{typography.caption-strong}` | 12px | 500 | 16px |
|
|
442
|
-
| `{typography.caption-mono}` | 12px | 500 | 16px | Eyebrows, identifiers and code
|
|
445
|
+
| `{typography.caption-strong}` | 12px | 500 | 16px | Compact emphasised labels on chrome and chips. |
|
|
446
|
+
| `{typography.caption-mono}` | 12px | 500 | 16px | Eyebrows, identifiers and code. |
|
|
443
447
|
| `{typography.code}` | 13px | 400 | 20px | Tool calls, snippets, traces. |
|
|
444
448
|
| `{typography.button-lg}` | 16px | 500 | 24px | Marketing-scale button labels. |
|
|
445
449
|
| `{typography.button-md}` | 14px | 500 | 18px | Standard button and control labels. |
|
|
@@ -482,7 +486,7 @@ Kernel compositions arrange approved primitives for a content role. They must no
|
|
|
482
486
|
Each reusable concern has one home and one authoring surface, so a member is documented and shipped in exactly one place:
|
|
483
487
|
|
|
484
488
|
- **Tokens** — exact reusable values live in this contract's `colors`, `spacing`, `rounded`, and `typography`; they export to the generated token layer (with a hand-authored local token layer beside it). No component or section may re-encode a token value.
|
|
485
|
-
- **Framework-agnostic CSS components** — the brand/display CSS components that remain in this package (agent-work artifacts,
|
|
489
|
+
- **Framework-agnostic CSS components** — the brand/display CSS components that remain in this package (agent-work artifacts, `image`, and the small label/badge/link metadata components). Their names and semantics live once in `## Components`; design-system CSS realises that catalog without a second recipe or component-token hierarchy.
|
|
486
490
|
- **Reusable compositions and sections** — patterns that arrange the page grammar and lower tiers for a content role. They ship as React shadcn compositions from `@nadicodeai/ui`, composed over the kept page grammar; they are not a pure-CSS section layer and do not add a second component catalog here.
|
|
487
491
|
- **Layout grammar** — the page-frame, row, lane, seam, stage, and marker system documented across this `## Layout` section, carried by the layout CSS layer.
|
|
488
492
|
- **Specimens** — static demonstrations of already-defined primitives. They invent no geometry, seams, heights, or responsive behavior; they only assemble shipped tiers for inspection.
|
|
@@ -531,28 +535,33 @@ These live helpers are part of the kept page-grammar layout layer. They support
|
|
|
531
535
|
|
|
532
536
|
NadicodeAI website depth is flat and architectural. Hairlines, contrast, dotted fields, diagonal fills, and dark action bands create hierarchy. The public website does not use floating card stacks as its main structure; the page frame and row grid remain dominant.
|
|
533
537
|
|
|
534
|
-
Product UI uses
|
|
538
|
+
Product UI uses one shared material ladder. The workspace is one continuous ground (`{colors.material-workspace}` / `{colors.dark-material-workspace}`); every solid object uses the same fill (`{colors.material-solid}` / `{colors.dark-material-solid}`). In dark mode, both are true black. The workspace remains legible because it carries the existing `dotted-field` texture and solid objects occlude it. Elevation never means progressively greyer cards. Physical distance changes only the `shadow-plugin` falloff: `smooth-shadow-ring-md` for resting content, then `lg`, `xl`, and `2xl` when an object is physically raised, floating, or modal. Each utility already integrates the plugin's adaptive optical ring, including the plugin's 18% white dark-mode ring, so an elevated root never adds a border, second ring, local ring tint, or opacity override. Product code chooses only the semantic role.
|
|
535
539
|
|
|
536
|
-
|
|
540
|
+
Glass is a material variant, not an elevation step. It is reserved for compact control chrome floating over legible content. Cards, KPIs, tables, inspectors, and ordinary modal bodies remain solid. Reduced-transparency mode replaces glass with the same solid material at the same elevation.
|
|
541
|
+
|
|
542
|
+
The Google design schema does not define opacity groups. These declarations are therefore the authored material-token source inside this contract. The build reads this block strictly and emits generated `--nc-*` hooks. The UI package owns the exact `shadow-plugin` dependency and maps semantic component roles to its utilities without copying the vendor shadow values into this contract.
|
|
537
543
|
|
|
538
544
|
```css material-tokens
|
|
539
545
|
--nc-material-scrim-opacity: 10%;
|
|
540
|
-
--nc-material-
|
|
541
|
-
--nc-material-
|
|
542
|
-
--nc-material-
|
|
543
|
-
--nc-material-shadow-sheet: 0 2px 2px rgb(0 0 0 / 4%), 0 8px 16px -4px rgb(0 0 0 / 4%);
|
|
546
|
+
--nc-material-glass-opacity: 76%;
|
|
547
|
+
--nc-material-glass-blur: 28px;
|
|
548
|
+
--nc-material-glass-saturation: 116%;
|
|
544
549
|
```
|
|
545
550
|
|
|
546
|
-
| Material role |
|
|
547
|
-
|
|
|
548
|
-
|
|
|
549
|
-
| Resting
|
|
550
|
-
|
|
|
551
|
-
|
|
|
552
|
-
|
|
|
553
|
-
|
|
|
554
|
-
|
|
555
|
-
|
|
551
|
+
| Material role | Construction | Use |
|
|
552
|
+
| ------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
553
|
+
| Workspace | `dotted-field` on `{colors.material-workspace}` / `{colors.dark-material-workspace}`; no edge or shadow | The continuous work area behind product objects |
|
|
554
|
+
| Resting | Solid fill; plugin-default integrated ring; `smooth-shadow-ring-md`; `{rounded.3xl}` (16 px) | KPI, card, table, setting, and persistent content surfaces |
|
|
555
|
+
| Raised | Same solid fill and ring; `smooth-shadow-ring-lg`; `{rounded.3xl}` (16 px) | Active work, a selected object, or an attached inspector above resting siblings |
|
|
556
|
+
| Floating | Same solid fill and ring; `smooth-shadow-ring-xl`; role-specific corner radius | Compact menus, popovers, dropdowns, and anchored surfaces use `{rounded.2xl}` (12 px); small artifacts such as tooltips and toasts keep `{rounded.md}` (6 px); detached product surfaces may use `{rounded.3xl}` (16 px) |
|
|
557
|
+
| Modal | Same solid fill and ring; `smooth-shadow-ring-2xl`; `{rounded.3xl}` (16 px) | Dialog, sheet, drawer, and takeover |
|
|
558
|
+
| Glass control | Translucent solid fill at 76%, 28 px backdrop blur, integrated plugin ring, and the falloff for its physical level | Compact control chrome floating above content; never a content container |
|
|
559
|
+
|
|
560
|
+
`Card` is the fundamental product container. Its content does not create a second material family: KPIs, Agent cards, settings, and ordinary grouped content use the resting role unless the object is physically raised. Interaction variants may change state or emphasis without changing the material role.
|
|
561
|
+
|
|
562
|
+
Absence follows the container that owns it. A page-level or region-level empty state is an opaque solid region with a dashed boundary. An empty state inside a Card is transparent and unframed so it does not draw a second container inside the first.
|
|
563
|
+
|
|
564
|
+
Resting form controls are not elevated material planes. They keep the 1 px `{colors.input}` / `{colors.dark-input}` boundary, `{rounded.md}` (6 px), and no shadow. Their inline padding is `{spacing.control-padding-inline}`, textareas use `{spacing.xs}` block padding, and every default control is at least `{spacing.control-height}` high.
|
|
556
565
|
|
|
557
566
|
Modal overlays use `{colors.scrim}` / `{colors.dark-scrim}` at the generated `scrim` opacity with no blur. Focus is not elevation: controls use a full-opacity `{spacing.focus-ring-width}` `{colors.focus-ring}` / `{colors.dark-focus-ring}` ring with no offset. Avoid nested decorative borders: one container owns containment, while child groups use spacing, headings, or dividers only when those dividers clarify structure.
|
|
558
567
|
|
|
@@ -563,12 +572,12 @@ On coarse or non-hover input capability, every interactive target is at least 44
|
|
|
563
572
|
Corners are restrained and assigned by material role.
|
|
564
573
|
|
|
565
574
|
- Use `{rounded.none}` for page rows, frame edges, grid cells, and structural modules.
|
|
566
|
-
- Use `{rounded.md}` (6 px) for
|
|
567
|
-
- Use `{rounded.2xl}` (12 px) for menus, popovers, and
|
|
568
|
-
- Use `{rounded.3xl}` (16 px) for inset sheets and takeovers.
|
|
575
|
+
- Use `{rounded.md}` (6 px) for controls, buttons, chips, status tags, and small artifacts.
|
|
576
|
+
- Use `{rounded.2xl}` (12 px) for compact menus, popovers, dropdowns, and anchored floating surfaces.
|
|
577
|
+
- Use `{rounded.3xl}` (16 px) for resting and raised product content surfaces, detached inspectors, modal dialogs, inset sheets, and takeovers.
|
|
569
578
|
- Use `{rounded.full}` only for intrinsically circular identity/avatar chrome and compact control marks whose geometry is inherently round or pill-shaped. It never turns a content surface, button, badge, or navigation item into a pill by default.
|
|
570
579
|
|
|
571
|
-
Public page-grammar cells are not cards and remain square because their parent frame supplies the visual system. Product cards
|
|
580
|
+
Public page-grammar cells are not cards and remain square because their parent frame supplies the visual system. Product cards use the resting material role; they do not gain a second border, nested ring, or stronger elevation merely because they contain grouped settings.
|
|
572
581
|
|
|
573
582
|
## Motion
|
|
574
583
|
|
|
@@ -602,33 +611,9 @@ Content surfaces display specific content types inside the grammar. They are val
|
|
|
602
611
|
|
|
603
612
|
Agentic work surfaces are the NadicodeAI-specific display layer outside the conversation renderer. They show concrete work output or workflow state such as memory, state, run progress, identity, and handoffs. Conversation messages, tools, artifacts, approvals, and pending indicators belong to assistant-ui.
|
|
604
613
|
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
Status-tag variants share the same compact sans rectangle at `{typography.caption-strong}`, `{rounded.md}` — a small subtle-tinted rectangle, never a capsule — and differentiate by tone: a paired background+text ramp step, not a border-left rail. Tone is `[data-tone]`, not BEM modifiers. Gray is the default tone; color is reserved for marking health and exceptions, so every terminal or no-action entity status (inactive, archived, rejected, canceled, expired, revoked, denied) renders gray. Subtle-only (no solid/filled variant), no icons inside the badge, no text-transform; labels render verbatim from the source's own i18n dictionary. `status-tag` is the entity-status vocabulary — agent, credential, activation, customer, invitation, subscription, and health values that live on a record — and stays a sibling of `state-tag`: the two families never blend, and `status-tag` never touches the `{colors.state-*}` tokens.
|
|
608
|
-
|
|
609
|
-
**`status-tag-gray`** — default and terminal entity status: no action pending, nothing to watch (inactive, archived, rejected, canceled, expired, revoked, denied).
|
|
610
|
-
|
|
611
|
-
**`status-tag-green`** — a healthy, active, or successfully completed entity status.
|
|
612
|
-
|
|
613
|
-
**`status-tag-red`** — a failed, blocked, or otherwise exceptional entity status that needs attention.
|
|
614
|
-
|
|
615
|
-
**`status-tag-amber`** — a degrading, retiring, or past-due entity status between healthy and failed.
|
|
614
|
+
Agent identity is decorative product identity, not a work artifact or a status signal. Its approved metaball form, closed Agent-type recipes, four surface treatments, palette, still frames, and motion rules live in [`brand/visual-design/AGENT-VISUAL-SYSTEM.md`](../brand/visual-design/AGENT-VISUAL-SYSTEM.md). `@nadicodeai/ui` owns the typed React implementation. Consuming apps assign a recipe explicitly and own placement, data, actions, and accessible meaning.
|
|
616
615
|
|
|
617
|
-
**`
|
|
618
|
-
|
|
619
|
-
State-tag variants share the same compact rectangular shape at `{typography.caption-mono}` and differentiate by a 3 px colored `border-left` consuming the matching `{colors.state-*}` token. Shape carries meaning; color carries variant.
|
|
620
|
-
|
|
621
|
-
**`state-tag-ready`** — workflow state tag for work that is ready or waiting to start. Uses `{colors.state-ready}` for the left edge.
|
|
622
|
-
|
|
623
|
-
**`state-tag-running`** — workflow state tag for work currently being executed by an agent or system. Uses `{colors.state-running}` for the left edge.
|
|
624
|
-
|
|
625
|
-
**`state-tag-review`** — workflow state tag for human review or approval. Uses `{colors.state-review}` for the left edge.
|
|
626
|
-
|
|
627
|
-
**`state-tag-blocked`** — workflow state tag for blocked work or failed preconditions. Uses `{colors.state-blocked}` for the left edge.
|
|
628
|
-
|
|
629
|
-
**`state-tag-complete`** — workflow state tag for completed work. Uses `{colors.state-complete}` for the left edge.
|
|
630
|
-
|
|
631
|
-
**`state-row`** — full-width workflow-state divider inside an agentic work surface. Its bounded hairlines belong to the row and its dot consumes the same state token as the matching `state-tag` variant.
|
|
616
|
+
**`artifact-surface`** — inspectable output area outside a conversation. Use for proposal previews, reports, plans, spreadsheets, schedules, run logs, and workflow maps.
|
|
632
617
|
|
|
633
618
|
**`usage-meter`** — token, cost, latency, or run-count display.
|
|
634
619
|
|
|
@@ -638,6 +623,34 @@ State-tag variants share the same compact rectangular shape at `{typography.capt
|
|
|
638
623
|
|
|
639
624
|
**`handoff-banner`** — agent-to-agent or human-to-agent handoff surface. It explains the handoff reason and destination. It carries a 3 px colored `border-left` consuming the matching `{colors.link}` token and a leading direction marker tinted with the same token; the accent edge and arrow carry the handoff direction.
|
|
640
625
|
|
|
626
|
+
## Status Vocabulary
|
|
627
|
+
|
|
628
|
+
Status is the one thing every surface in the product says: an agent is active, a
|
|
629
|
+
key is revoked, an invitation is waiting, a run is blocked. It is said one way.
|
|
630
|
+
|
|
631
|
+
**What it is.** The single status carrier is the React `Badge` from
|
|
632
|
+
`@nadicodeai/ui`, rendered in one of five semantic tones with a small mark in
|
|
633
|
+
its icon slot. It is not a CSS component in this package: there is no
|
|
634
|
+
framework-neutral status class, and a static surface that needs to show a status
|
|
635
|
+
shows it as ordinary text. Its React API — the tone variants, the icon slot, and
|
|
636
|
+
what a consuming app must supply — is contracted in
|
|
637
|
+
[`@nadicodeai/ui/docs/contract.md`](../@nadicodeai/ui/docs/contract.md).
|
|
638
|
+
|
|
639
|
+
**Why.** A status read by colour alone is not read by everyone, and a product
|
|
640
|
+
that speaks status in three grammars teaches its next surface to invent a
|
|
641
|
+
fourth. One badge, carrying an icon and a word with the tone only reinforcing
|
|
642
|
+
both, is legible without colour and leaves nothing to invent.
|
|
643
|
+
|
|
644
|
+
**What it does.** Five tones, each a soft ground with its deep label from an
|
|
645
|
+
existing semantic pair: gray on the neutral spine for the default and every
|
|
646
|
+
terminal, no-action state; green on the link pair for healthy and complete; red
|
|
647
|
+
on the error pair for unusable and failed; amber on the warning pair for waiting
|
|
648
|
+
on a decision; blue on the info pair for a step in motion. One mark per tone, so
|
|
649
|
+
the shape repeats the tone rather than adding a second axis. The families —
|
|
650
|
+
which statuses exist and which tone each value takes — belong to the consuming
|
|
651
|
+
app, because they are its domain, not this contract's; the Portal keeps its
|
|
652
|
+
whole map in one module and no surface picks a status colour anywhere else.
|
|
653
|
+
|
|
641
654
|
## Do's and Don'ts
|
|
642
655
|
|
|
643
656
|
### Do
|
|
@@ -647,13 +660,13 @@ State-tag variants share the same compact rectangular shape at `{typography.capt
|
|
|
647
660
|
- Do use `side-fill`, guide strips, or component-owned fillers whenever content does not occupy the outer columns.
|
|
648
661
|
- Do use `{spacing.guide}` and `{colors.line}` for ordinary seams.
|
|
649
662
|
- Do use `{colors.input}` / `{colors.dark-input}` for resting control boundaries and the dedicated focus-ring roles for keyboard focus.
|
|
650
|
-
- Do use exactly one material role per container
|
|
663
|
+
- Do use exactly one material role per product container; structural page-grammar cells remain border-only, while product cards, menus, popovers, dialogs, sheets, and takeovers use their specified material treatment.
|
|
651
664
|
- Do tune line visibility by changing `{colors.line}` at the token contract, then rebuilding generated exports.
|
|
652
665
|
- Do use `{colors.cross}` for crosshair color while keeping crosshair weight equal to `{spacing.guide}`.
|
|
653
666
|
- Do use fixed height tokens for default component/specimen height and let content grow only when required.
|
|
654
667
|
- Do separate different story beats into separate rows.
|
|
655
668
|
- Do use the full-lane `stage` geometry for one major use-case/artifact story, not as a container for every page concept.
|
|
656
|
-
- Do
|
|
669
|
+
- Do use Agent identity visuals only to identify an Agent or its explicit type; use assistant-ui and the agentic work surfaces above for conversations, artifacts, review states, and work output.
|
|
657
670
|
- Do keep ordinary CSS components compact and subordinate to the page grammar.
|
|
658
671
|
- Do use pricing, logo, banner, and showcase compositions only when the page truly contains that content type.
|
|
659
672
|
|
|
@@ -663,7 +676,7 @@ State-tag variants share the same compact rectangular shape at `{typography.capt
|
|
|
663
676
|
- Don't draw the same seam from two adjacent elements.
|
|
664
677
|
- Don't add borders inside cells to fix visual seams; fix the owner layer.
|
|
665
678
|
- Don't use a 1 px decorative line as an input boundary, or locally increase card border weight to manufacture hierarchy.
|
|
666
|
-
- Don't stack borders around
|
|
679
|
+
- Don't stack borders or rings around an elevated surface, promote a resting card because its content is important, or blur modal scrims.
|
|
667
680
|
- Don't tune seam contrast with local opacity, raw colors, or component-specific border colors.
|
|
668
681
|
- Don't use viewport-scaled typography.
|
|
669
682
|
- Don't use negative letter spacing in the website kernel.
|
|
@@ -731,7 +744,7 @@ The NadicodeAI logo has three approved forms:
|
|
|
731
744
|
|
|
732
745
|
Other companies' marks are not NadicodeAI company logos and are not governed by anything in this section. They are generated identity images owned by `@nadicodeai/ui/components/brand-icons`, decided in [`docs/adr/0042-third-party-brand-marks-are-generated-identity-images.md`](../docs/adr/0042-third-party-brand-marks-are-generated-identity-images.md). A third-party mark never enters a NadicodeAI logo form, composition, or clear-space measurement.
|
|
733
746
|
|
|
734
|
-
Nadia's portrait and generated imagery are not NadicodeAI company logos.
|
|
747
|
+
Nadia's portrait, Agent identity visuals, and generated imagery are not NadicodeAI company logos. Nadia's identity and selection rules live in [`brand/visual-design/NADIA-VISUAL-IDENTITY.md`](../brand/visual-design/NADIA-VISUAL-IDENTITY.md); the Agent identity system lives in [`brand/visual-design/AGENT-VISUAL-SYSTEM.md`](../brand/visual-design/AGENT-VISUAL-SYSTEM.md); editorial imagery routes through [`brand/visual-design/EDITORIAL-ILLUSTRATION.md`](../brand/visual-design/EDITORIAL-ILLUSTRATION.md). This contract owns only the package delivery interface.
|
|
735
748
|
|
|
736
749
|
The approved transparent Nadia master ships at `assets/nadia-solid-surface`.
|
|
737
750
|
|
package/dist/css/index.css
CHANGED
|
@@ -53,6 +53,8 @@
|
|
|
53
53
|
--nc-canvas: oklch(1.0000 0.0000 0.00);
|
|
54
54
|
--nc-canvas-soft: oklch(0.9851 0.0000 0.00);
|
|
55
55
|
--nc-canvas-soft-2: oklch(0.9702 0.0000 0.00);
|
|
56
|
+
--nc-material-workspace: oklch(0.9761 0.0000 0.00);
|
|
57
|
+
--nc-material-solid: oklch(1.0000 0.0000 0.00);
|
|
56
58
|
--nc-line: oklch(0.9219 0.0000 0.00);
|
|
57
59
|
--nc-input: oklch(0.5624 0.0000 0.00);
|
|
58
60
|
--nc-seam: oklch(0.8699 0.0000 0.00);
|
|
@@ -112,6 +114,8 @@
|
|
|
112
114
|
--nc-dark-canvas: oklch(0.0000 0.0000 0.00);
|
|
113
115
|
--nc-dark-canvas-soft: oklch(0.1776 0.0000 0.00);
|
|
114
116
|
--nc-dark-canvas-soft-2: oklch(0.2178 0.0000 0.00);
|
|
117
|
+
--nc-dark-material-workspace: oklch(0.0000 0.0000 0.00);
|
|
118
|
+
--nc-dark-material-solid: oklch(0.0000 0.0000 0.00);
|
|
115
119
|
--nc-dark-ink: oklch(0.9461 0.0000 0.00);
|
|
116
120
|
--nc-dark-body: oklch(0.8297 0.0000 0.00);
|
|
117
121
|
--nc-dark-muted: oklch(0.6500 0.0000 0.00);
|
|
@@ -428,16 +432,9 @@
|
|
|
428
432
|
--nc-type-button-lg-line-height: 24px;
|
|
429
433
|
--nc-type-button-lg-letter-spacing: 0px;
|
|
430
434
|
--nc-material-scrim-opacity: 10%;
|
|
431
|
-
--nc-material-
|
|
432
|
-
--nc-material-
|
|
433
|
-
|
|
434
|
-
0 4px 8px -4px rgb(0 0 0 / 4%),
|
|
435
|
-
0 16px 24px -8px rgb(0 0 0 / 6%);
|
|
436
|
-
--nc-material-shadow-dialog:
|
|
437
|
-
0 1px 1px rgb(0 0 0 / 2%),
|
|
438
|
-
0 8px 16px -4px rgb(0 0 0 / 4%),
|
|
439
|
-
0 24px 32px -8px rgb(0 0 0 / 6%);
|
|
440
|
-
--nc-material-shadow-sheet: 0 2px 2px rgb(0 0 0 / 4%), 0 8px 16px -4px rgb(0 0 0 / 4%);
|
|
435
|
+
--nc-material-glass-opacity: 76%;
|
|
436
|
+
--nc-material-glass-blur: 28px;
|
|
437
|
+
--nc-material-glass-saturation: 116%;
|
|
441
438
|
}
|
|
442
439
|
}
|
|
443
440
|
|
|
@@ -447,6 +444,8 @@
|
|
|
447
444
|
--nc-canvas: var(--nc-dark-canvas);
|
|
448
445
|
--nc-canvas-soft: var(--nc-dark-canvas-soft);
|
|
449
446
|
--nc-canvas-soft-2: var(--nc-dark-canvas-soft-2);
|
|
447
|
+
--nc-material-workspace: var(--nc-dark-material-workspace);
|
|
448
|
+
--nc-material-solid: var(--nc-dark-material-solid);
|
|
450
449
|
--nc-ink: var(--nc-dark-ink);
|
|
451
450
|
--nc-body: var(--nc-dark-body);
|
|
452
451
|
--nc-muted: var(--nc-dark-muted);
|
|
@@ -510,9 +509,9 @@
|
|
|
510
509
|
--radius: var(--nc-rounded-md);
|
|
511
510
|
--background: var(--nc-canvas);
|
|
512
511
|
--foreground: var(--nc-ink);
|
|
513
|
-
--card: var(--nc-
|
|
512
|
+
--card: var(--nc-material-solid);
|
|
514
513
|
--card-foreground: var(--nc-ink);
|
|
515
|
-
--popover: var(--nc-
|
|
514
|
+
--popover: var(--nc-material-solid);
|
|
516
515
|
--popover-foreground: var(--nc-ink);
|
|
517
516
|
--primary: var(--nc-action);
|
|
518
517
|
--primary-foreground: var(--nc-action-foreground);
|
|
@@ -554,9 +553,9 @@
|
|
|
554
553
|
--radius: var(--nc-rounded-md);
|
|
555
554
|
--background: var(--nc-dark-canvas);
|
|
556
555
|
--foreground: var(--nc-dark-ink);
|
|
557
|
-
--card: var(--nc-dark-
|
|
556
|
+
--card: var(--nc-dark-material-solid);
|
|
558
557
|
--card-foreground: var(--nc-dark-ink);
|
|
559
|
-
--popover: var(--nc-dark-
|
|
558
|
+
--popover: var(--nc-dark-material-solid);
|
|
560
559
|
--popover-foreground: var(--nc-dark-ink);
|
|
561
560
|
--primary: var(--nc-dark-action);
|
|
562
561
|
--primary-foreground: var(--nc-dark-action-foreground);
|
|
@@ -595,7 +594,7 @@
|
|
|
595
594
|
--sidebar-ring: var(--nc-dark-focus-ring);
|
|
596
595
|
}
|
|
597
596
|
@theme inline { --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); --color-card-foreground: var(--card-foreground); --color-popover: var(--popover); --color-popover-foreground: var(--popover-foreground); --color-primary: var(--primary); --color-primary-foreground: var(--primary-foreground); --color-primary-hover: var(--primary-hover); --color-primary-active: var(--primary-active); --color-secondary: var(--secondary); --color-secondary-foreground: var(--secondary-foreground); --color-muted: var(--muted); --color-muted-foreground: var(--muted-foreground); --color-placeholder: var(--placeholder); --color-accent: var(--accent); --color-accent-foreground: var(--accent-foreground); --color-destructive: var(--destructive); --color-destructive-foreground: var(--destructive-foreground); --color-warning: var(--warning); --color-warning-foreground: var(--warning-foreground); --color-success: var(--success); --color-success-foreground: var(--success-foreground); --color-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); --color-scrim: var(--scrim); --color-chart-1: var(--chart-1); --color-chart-2: var(--chart-2); --color-chart-3: var(--chart-3); --color-chart-4: var(--chart-4); --color-chart-5: var(--chart-5); --color-sidebar: var(--sidebar); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-primary-hover: var(--sidebar-primary-hover); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-border: var(--sidebar-border); --color-sidebar-ring: var(--sidebar-ring); }
|
|
598
|
-
@theme { --color-nc-primary: oklch(0.5075 0.1338 151.91); --color-nc-on-primary: oklch(1.0000 0.0000 0.00); --color-nc-action: oklch(0.5075 0.1338 151.91); --color-nc-action-foreground: oklch(1.0000 0.0000 0.00); --color-nc-action-hover: oklch(0.4285 0.1117 152.40); --color-nc-action-active: oklch(0.2722 0.0643 157.47); --color-nc-ink: oklch(0.1776 0.0000 0.00); --color-nc-body: oklch(0.3867 0.0000 0.00); --color-nc-muted: oklch(0.5278 0.0000 0.00); --color-nc-canvas: oklch(1.0000 0.0000 0.00); --color-nc-canvas-soft: oklch(0.9851 0.0000 0.00); --color-nc-canvas-soft-2: oklch(0.9702 0.0000 0.00); --color-nc-line: oklch(0.9219 0.0000 0.00); --color-nc-input: oklch(0.5624 0.0000 0.00); --color-nc-seam: oklch(0.8699 0.0000 0.00); --color-nc-cross: oklch(0.6830 0.0000 0.00); --color-nc-focus-ring: oklch(0.4815 0.1209 154.24); --color-nc-scrim: oklch(0.1776 0.0000 0.00); --color-nc-link: oklch(0.4815 0.1209 154.24); --color-nc-link-deep: oklch(0.3852 0.0953 154.99); --color-nc-link-bg-soft: oklch(0.9170 0.0519 161.77); --color-nc-accent: oklch(0.6824 0.2108 37.70); --color-nc-info: oklch(0.5005 0.2804 266.17); --color-nc-info-soft: oklch(0.9457 0.0259 276.40); --color-nc-info-deep: oklch(0.3197 0.1758 266.79); --color-nc-success: oklch(0.6415 0.1644 153.23); --color-nc-success-soft: oklch(0.9170 0.0519 161.77); --color-nc-success-deep: oklch(0.3852 0.0953 154.99); --color-nc-error: oklch(0.5688 0.1995 26.59); --color-nc-error-soft: oklch(0.9522 0.0207 17.52); --color-nc-error-deep: oklch(0.4235 0.1525 27.08); --color-nc-warning: oklch(0.8466 0.1678 84.63); --color-nc-warning-soft: oklch(0.9649 0.0461 90.87); --color-nc-warning-deep: oklch(0.4834 0.0995 82.44); --color-nc-flag-red: oklch(0.5688 0.1995 26.59); --color-nc-selection-bg: oklch(0.1776 0.0000 0.00); --color-nc-selection-fg: oklch(0.9851 0.0000 0.00); --color-nc-navigation-selection-bg: oklch(0.5005 0.2804 266.17); --color-nc-navigation-selection-fg: oklch(1.0000 0.0000 0.00); --color-nc-navigation-selection-hover: oklch(0.4542 0.2521 265.86); --color-nc-state-ready: oklch(0.5278 0.0000 0.00); --color-nc-state-running: oklch(0.5005 0.2804 266.17); --color-nc-state-review: oklch(0.8466 0.1678 84.63); --color-nc-state-blocked: oklch(0.5688 0.1995 26.59); --color-nc-state-complete: oklch(0.6415 0.1644 153.23); --color-nc-background-100: oklch(1.0000 0.0000 0.00); --color-nc-background-200: oklch(0.9851 0.0000 0.00); --color-nc-campo-verde: oklch(0.6415 0.1644 153.23); --color-nc-campo-rosso: oklch(0.5688 0.1995 26.59); --color-nc-campo-arancio: oklch(0.6824 0.2108 37.70); --color-nc-campo-giallo: oklch(0.8466 0.1678 84.63); --color-nc-campo-cobalto: oklch(0.5005 0.2804 266.17); --color-nc-campo-inchiostro: oklch(0.0000 0.0000 0.00); --color-nc-campo-bianco: oklch(1.0000 0.0000 0.00); --color-nc-chart-1: oklch(0.5005 0.2804 266.17); --color-nc-chart-2: oklch(0.6415 0.1644 153.23); --color-nc-chart-3: oklch(0.7638 0.1562 86.86); --color-nc-chart-4: oklch(0.5688 0.1995 26.59); --color-nc-chart-5: oklch(0.6161 0.1062 208.85); --color-nc-chart-6: oklch(0.5015 0.1883 294.99); --color-nc-chart-seq-1: oklch(0.6998 0.1347 269.48); --color-nc-chart-seq-2: oklch(0.5724 0.1897 270.11); --color-nc-chart-seq-3: oklch(0.4725 0.2271 267.41); --color-nc-chart-seq-4: oklch(0.3989 0.1934 267.50); --color-nc-chart-seq-5: oklch(0.3270 0.1487 267.91); --color-nc-chart-div-warm: oklch(0.7592 0.1560 83.30); --color-nc-chart-div-mid: oklch(0.5278 0.0000 0.00); --color-nc-chart-div-cool: oklch(0.5923 0.2215 269.61); --color-nc-dark-canvas: oklch(0.0000 0.0000 0.00); --color-nc-dark-canvas-soft: oklch(0.1776 0.0000 0.00); --color-nc-dark-canvas-soft-2: oklch(0.2178 0.0000 0.00); --color-nc-dark-ink: oklch(0.9461 0.0000 0.00); --color-nc-dark-body: oklch(0.8297 0.0000 0.00); --color-nc-dark-muted: oklch(0.6500 0.0000 0.00); --color-nc-dark-line: oklch(0.2686 0.0000 0.00); --color-nc-dark-input: oklch(0.5208 0.0000 0.00); --color-nc-dark-seam: oklch(0.2178 0.0000 0.00); --color-nc-dark-primary: oklch(0.7727 0.1753 155.96); --color-nc-dark-on-primary: oklch(0.1448 0.0000 0.00); --color-nc-dark-action: oklch(0.7727 0.1753 155.96); --color-nc-dark-action-foreground: oklch(0.1448 0.0000 0.00); --color-nc-dark-action-hover: oklch(0.7661 0.1498 157.10); --color-nc-dark-action-active: oklch(0.7019 0.1753 153.20); --color-nc-dark-link: oklch(0.7661 0.1498 157.10); --color-nc-dark-link-deep: oklch(0.8524 0.0996 159.83); --color-nc-dark-link-bg-soft: oklch(0.2893 0.0697 156.32); --color-nc-dark-focus-ring: oklch(0.7661 0.1498 157.10); --color-nc-dark-scrim: oklch(0.9461 0.0000 0.00); --color-nc-dark-error: oklch(0.7955 0.0980 21.02); --color-nc-dark-error-soft: oklch(0.2296 0.0728 26.06); --color-nc-dark-error-deep: oklch(0.8856 0.0534 19.64); --color-nc-dark-warning: oklch(0.8939 0.1387 90.47); --color-nc-dark-warning-soft: oklch(0.3135 0.0643 85.04); --color-nc-dark-warning-deep: oklch(0.9320 0.0896 90.86); --color-nc-dark-info: oklch(0.7067 0.1528 272.08); --color-nc-dark-info-soft: oklch(0.2118 0.1033 268.28); --color-nc-dark-info-deep: oklch(0.8222 0.0888 274.44); --color-nc-dark-cyan: oklch(0.7820 0.1247 190.99); --color-nc-dark-cyan-soft: oklch(0.8646 0.1000 187.55); --color-nc-dark-cyan-deep: oklch(0.6347 0.1029 191.54); --color-nc-dark-success: oklch(0.7019 0.1753 153.20); --color-nc-dark-success-soft: oklch(0.2893 0.0697 156.32); --color-nc-dark-success-deep: oklch(0.8524 0.0996 159.83); --color-nc-dark-state-ready: oklch(0.5624 0.0000 0.00); --color-nc-dark-state-running: oklch(0.5923 0.2215 269.61); --color-nc-dark-state-review: oklch(0.8466 0.1678 84.63); --color-nc-dark-state-blocked: oklch(0.5688 0.1995 26.59); --color-nc-dark-state-complete: oklch(0.6415 0.1644 153.23); --color-nc-dark-selection-bg: oklch(0.9461 0.0000 0.00); --color-nc-dark-selection-fg: oklch(0.1448 0.0000 0.00); --color-nc-dark-navigation-selection-bg: oklch(0.4725 0.2271 267.41); --color-nc-dark-navigation-selection-fg: oklch(0.9461 0.0000 0.00); --color-nc-dark-navigation-selection-hover: oklch(0.5162 0.2247 268.31); --color-nc-dark-cross: oklch(0.4495 0.0000 0.00); --color-nc-dark-chart-1: oklch(0.5923 0.2215 269.61); --color-nc-dark-chart-2: oklch(0.6415 0.1644 153.23); --color-nc-dark-chart-3: oklch(0.8939 0.1387 90.47); --color-nc-dark-chart-4: oklch(0.6627 0.1685 23.66); --color-nc-dark-chart-5: oklch(0.7820 0.1247 190.99); --color-nc-dark-chart-6: oklch(0.6297 0.1321 299.36); --color-nc-dark-chart-seq-1: oklch(0.5724 0.1897 270.11); --color-nc-dark-chart-seq-2: oklch(0.6998 0.1347 269.48); --color-nc-dark-chart-seq-3: oklch(0.8072 0.0884 269.44); --color-nc-dark-chart-seq-4: oklch(0.8877 0.0514 270.78); --color-nc-dark-chart-seq-5: oklch(0.9619 0.0179 272.31); --color-nc-dark-chart-div-warm: oklch(0.8939 0.1387 90.47); --color-nc-dark-chart-div-mid: oklch(0.9219 0.0000 0.00); --color-nc-dark-chart-div-cool: oklch(0.8222 0.0888 274.44); --font-display-xl: Geist, Inter, system-ui, -apple-system, sans-serif; --font-display-lg: Geist, Inter, system-ui, -apple-system, sans-serif; --font-display-md: Geist, Inter, system-ui, -apple-system, sans-serif; --font-display-sm: Geist, Inter, system-ui, -apple-system, sans-serif; --font-title-lg: Geist, Inter, system-ui, -apple-system, sans-serif; --font-title-md: Geist, Inter, system-ui, -apple-system, sans-serif; --font-title-sm: Geist, Inter, system-ui, -apple-system, sans-serif; --font-body-lg: Geist, Inter, system-ui, -apple-system, sans-serif; --font-body-md: Geist, Inter, system-ui, -apple-system, sans-serif; --font-body-md-strong: Geist, Inter, system-ui, -apple-system, sans-serif; --font-body-sm: Geist, Inter, system-ui, -apple-system, sans-serif; --font-body-sm-strong: Geist, Inter, system-ui, -apple-system, sans-serif; --font-caption: Geist, Inter, system-ui, -apple-system, sans-serif; --font-caption-strong: Geist, Inter, system-ui, -apple-system, sans-serif; --font-caption-mono: Geist Mono, ui-monospace, SFMono-Regular, Menlo, Monaco, monospace; --font-code: Geist Mono, ui-monospace, SFMono-Regular, Menlo, Monaco, monospace; --font-button-md: Geist, Inter, system-ui, -apple-system, sans-serif; --font-button-lg: Geist, Inter, system-ui, -apple-system, sans-serif; --text-display-xl: 72px; --text-display-xl--line-height: 74px; --leading-display-xl: 74px; --text-display-xl--letter-spacing: -1.5px; --tracking-display-xl: -1.5px; --text-display-xl--font-weight: 600; --font-weight-display-xl: 600; --text-display-lg: 52px; --text-display-lg--line-height: 54px; --leading-display-lg: 54px; --text-display-lg--letter-spacing: -1px; --tracking-display-lg: -1px; --text-display-lg--font-weight: 600; --font-weight-display-lg: 600; --text-display-md: 24px; --text-display-md--line-height: 32px; --leading-display-md: 32px; --text-display-md--letter-spacing: 0px; --tracking-display-md: 0px; --text-display-md--font-weight: 600; --font-weight-display-md: 600; --text-display-sm: 20px; --text-display-sm--line-height: 28px; --leading-display-sm: 28px; --text-display-sm--letter-spacing: 0px; --tracking-display-sm: 0px; --text-display-sm--font-weight: 600; --font-weight-display-sm: 600; --text-title-lg: 40px; --text-title-lg--line-height: 41px; --leading-title-lg: 41px; --text-title-lg--letter-spacing: 0px; --tracking-title-lg: 0px; --text-title-lg--font-weight: 600; --font-weight-title-lg: 600; --text-title-md: 30px; --text-title-md--line-height: 32px; --leading-title-md: 32px; --text-title-md--letter-spacing: 0px; --tracking-title-md: 0px; --text-title-md--font-weight: 600; --font-weight-title-md: 600; --text-title-sm: 22px; --text-title-sm--line-height: 25px; --leading-title-sm: 25px; --text-title-sm--letter-spacing: 0px; --tracking-title-sm: 0px; --text-title-sm--font-weight: 600; --font-weight-title-sm: 600; --text-body-lg: 18px; --text-body-lg--line-height: 27px; --leading-body-lg: 27px; --text-body-lg--letter-spacing: 0px; --tracking-body-lg: 0px; --text-body-lg--font-weight: 400; --font-weight-body-lg: 400; --text-body-md: 16px; --text-body-md--line-height: 25px; --leading-body-md: 25px; --text-body-md--letter-spacing: 0px; --tracking-body-md: 0px; --text-body-md--font-weight: 400; --font-weight-body-md: 400; --text-body-md-strong: 16px; --text-body-md-strong--line-height: 24px; --leading-body-md-strong: 24px; --text-body-md-strong--letter-spacing: 0px; --tracking-body-md-strong: 0px; --text-body-md-strong--font-weight: 500; --font-weight-body-md-strong: 500; --text-body-sm: 14px; --text-body-sm--line-height: 20px; --leading-body-sm: 20px; --text-body-sm--letter-spacing: 0px; --tracking-body-sm: 0px; --text-body-sm--font-weight: 400; --font-weight-body-sm: 400; --text-body-sm-strong: 14px; --text-body-sm-strong--line-height: 20px; --leading-body-sm-strong: 20px; --text-body-sm-strong--letter-spacing: 0px; --tracking-body-sm-strong: 0px; --text-body-sm-strong--font-weight: 500; --font-weight-body-sm-strong: 500; --text-caption: 12px; --text-caption--line-height: 16px; --leading-caption: 16px; --text-caption--letter-spacing: 0px; --tracking-caption: 0px; --text-caption--font-weight: 400; --font-weight-caption: 400; --text-caption-strong: 12px; --text-caption-strong--line-height: 16px; --leading-caption-strong: 16px; --text-caption-strong--letter-spacing: 0px; --tracking-caption-strong: 0px; --text-caption-strong--font-weight: 500; --font-weight-caption-strong: 500; --text-caption-mono: 12px; --text-caption-mono--line-height: 16px; --leading-caption-mono: 16px; --text-caption-mono--letter-spacing: 0px; --tracking-caption-mono: 0px; --text-caption-mono--font-weight: 500; --font-weight-caption-mono: 500; --text-code: 13px; --text-code--line-height: 20px; --leading-code: 20px; --text-code--letter-spacing: 0px; --tracking-code: 0px; --text-code--font-weight: 400; --font-weight-code: 400; --text-button-md: 14px; --text-button-md--line-height: 18px; --leading-button-md: 18px; --text-button-md--letter-spacing: 0px; --tracking-button-md: 0px; --text-button-md--font-weight: 500; --font-weight-button-md: 500; --text-button-lg: 16px; --text-button-lg--line-height: 24px; --leading-button-lg: 24px; --text-button-lg--letter-spacing: 0px; --tracking-button-lg: 0px; --text-button-lg--font-weight: 500; --font-weight-button-lg: 500; --radius-none: 0px; --radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px; --radius-xl: 10px; --radius-2xl: 12px; --radius-3xl: 16px; --radius-pill-sm: 64px; --radius-pill: 100px; --radius-full: 9999px; --ring-width-focus: var(--spacing-nadicode-focus-ring-width); --opacity-scrim: var(--nc-material-scrim-opacity); --shadow-tooltip: var(--nc-material-shadow-tooltip); --shadow-menu: var(--nc-material-shadow-menu); --shadow-dialog: var(--nc-material-shadow-dialog); --shadow-sheet: var(--nc-material-shadow-sheet); --spacing-nadicode-xxs: 4px; --spacing-nadicode-filter-chip-gap: 6px; --spacing-nadicode-xs: 8px; --spacing-nadicode-sm: 12px; --spacing-nadicode-md: 16px; --spacing-nadicode-lg: 24px; --spacing-nadicode-xl: 32px; --spacing-nadicode-2xl: 40px; --spacing-nadicode-3xl: 48px; --spacing-nadicode-4xl: 64px; --spacing-nadicode-5xl: 96px; --spacing-nadicode-6xl: 128px; --spacing-nadicode-section: 192px; --spacing-nadicode-guide: 1px; --spacing-nadicode-icon-stroke: 1.6px; --spacing-nadicode-focus-ring-width: 3px; --spacing-nadicode-control-height: 32px; --spacing-nadicode-control-padding-inline: 10px; --spacing-nadicode-touch-target: 44px; --spacing-nadicode-page-pad: 24px; --spacing-nadicode-page-max-mobile: 448px; --spacing-nadicode-page-max-tablet: 624px; --spacing-nadicode-page-max-desktop: 1440px; --spacing-nadicode-frame-max: 1392px; --spacing-nadicode-frame-gap: 24px; --spacing-nadicode-cell-padding: 24px; --spacing-nadicode-section-gap: 48px; --spacing-nadicode-cross-size-mobile: 11px; --spacing-nadicode-cross-size-tablet: 15px; --spacing-nadicode-cross-size-desktop: 21px; --spacing-nadicode-h-strip-mobile: 72px; --spacing-nadicode-h-strip-tablet: 80px; --spacing-nadicode-h-strip-desktop: 88px; --spacing-nadicode-h-cell-sm: 120px; --spacing-nadicode-h-cell-md-mobile: 144px; --spacing-nadicode-h-cell-md-tablet: 160px; --spacing-nadicode-h-cell-md-desktop: 168px; --spacing-nadicode-h-cell-lg-mobile: 220px; --spacing-nadicode-h-cell-lg-desktop: 240px; --spacing-nadicode-h-visual-mobile: 276px; --spacing-nadicode-h-visual-tablet: 318px; --spacing-nadicode-h-visual-desktop: 360px; --spacing-nadicode-h-precision-mobile: 276px; --spacing-nadicode-h-precision-tablet: 480px; --spacing-nadicode-h-precision-desktop: 720px; --spacing-nadicode-h-hero-mobile: 560px; --spacing-nadicode-h-hero-desktop: 720px; --spacing-nadicode-h-action-strip-mobile: 20px; --spacing-nadicode-h-action-strip-desktop: 32px; --spacing-nadicode-h-action-body-mobile: 320px; --spacing-nadicode-h-action-body-tablet: 338px; --spacing-nadicode-h-action-band: 260px; --spacing-nadicode-h-feature-mobile: 360px; --spacing-nadicode-h-feature-tablet: 400px; --spacing-nadicode-h-feature-desktop: 456px; --spacing-nadicode-h-editorial-feature-mobile: 360px; --spacing-nadicode-h-editorial-feature-tablet: 440px; --spacing-nadicode-h-editorial-feature-desktop: 560px; --spacing-nadicode-h-bento-primary: 384px; --spacing-nadicode-h-bento-secondary: 240px; --spacing-nadicode-h-bento-mobile-copy: 248px; --spacing-nadicode-h-bento-mobile-main: 537px; --spacing-nadicode-h-bento-strip: 20px; --spacing-nadicode-filter-chip-height: 28px; --spacing-nadicode-filter-chip-icon: 14px; --spacing-control-height: var(--spacing-nadicode-control-height); --spacing-control-padding-inline: var(--spacing-nadicode-control-padding-inline); --spacing-touch-target: var(--spacing-nadicode-touch-target); }
|
|
597
|
+
@theme { --color-nc-primary: oklch(0.5075 0.1338 151.91); --color-nc-on-primary: oklch(1.0000 0.0000 0.00); --color-nc-action: oklch(0.5075 0.1338 151.91); --color-nc-action-foreground: oklch(1.0000 0.0000 0.00); --color-nc-action-hover: oklch(0.4285 0.1117 152.40); --color-nc-action-active: oklch(0.2722 0.0643 157.47); --color-nc-ink: oklch(0.1776 0.0000 0.00); --color-nc-body: oklch(0.3867 0.0000 0.00); --color-nc-muted: oklch(0.5278 0.0000 0.00); --color-nc-canvas: oklch(1.0000 0.0000 0.00); --color-nc-canvas-soft: oklch(0.9851 0.0000 0.00); --color-nc-canvas-soft-2: oklch(0.9702 0.0000 0.00); --color-nc-material-workspace: oklch(0.9761 0.0000 0.00); --color-nc-material-solid: oklch(1.0000 0.0000 0.00); --color-nc-line: oklch(0.9219 0.0000 0.00); --color-nc-input: oklch(0.5624 0.0000 0.00); --color-nc-seam: oklch(0.8699 0.0000 0.00); --color-nc-cross: oklch(0.6830 0.0000 0.00); --color-nc-focus-ring: oklch(0.4815 0.1209 154.24); --color-nc-scrim: oklch(0.1776 0.0000 0.00); --color-nc-link: oklch(0.4815 0.1209 154.24); --color-nc-link-deep: oklch(0.3852 0.0953 154.99); --color-nc-link-bg-soft: oklch(0.9170 0.0519 161.77); --color-nc-accent: oklch(0.6824 0.2108 37.70); --color-nc-info: oklch(0.5005 0.2804 266.17); --color-nc-info-soft: oklch(0.9457 0.0259 276.40); --color-nc-info-deep: oklch(0.3197 0.1758 266.79); --color-nc-success: oklch(0.6415 0.1644 153.23); --color-nc-success-soft: oklch(0.9170 0.0519 161.77); --color-nc-success-deep: oklch(0.3852 0.0953 154.99); --color-nc-error: oklch(0.5688 0.1995 26.59); --color-nc-error-soft: oklch(0.9522 0.0207 17.52); --color-nc-error-deep: oklch(0.4235 0.1525 27.08); --color-nc-warning: oklch(0.8466 0.1678 84.63); --color-nc-warning-soft: oklch(0.9649 0.0461 90.87); --color-nc-warning-deep: oklch(0.4834 0.0995 82.44); --color-nc-flag-red: oklch(0.5688 0.1995 26.59); --color-nc-selection-bg: oklch(0.1776 0.0000 0.00); --color-nc-selection-fg: oklch(0.9851 0.0000 0.00); --color-nc-navigation-selection-bg: oklch(0.5005 0.2804 266.17); --color-nc-navigation-selection-fg: oklch(1.0000 0.0000 0.00); --color-nc-navigation-selection-hover: oklch(0.4542 0.2521 265.86); --color-nc-state-ready: oklch(0.5278 0.0000 0.00); --color-nc-state-running: oklch(0.5005 0.2804 266.17); --color-nc-state-review: oklch(0.8466 0.1678 84.63); --color-nc-state-blocked: oklch(0.5688 0.1995 26.59); --color-nc-state-complete: oklch(0.6415 0.1644 153.23); --color-nc-background-100: oklch(1.0000 0.0000 0.00); --color-nc-background-200: oklch(0.9851 0.0000 0.00); --color-nc-campo-verde: oklch(0.6415 0.1644 153.23); --color-nc-campo-rosso: oklch(0.5688 0.1995 26.59); --color-nc-campo-arancio: oklch(0.6824 0.2108 37.70); --color-nc-campo-giallo: oklch(0.8466 0.1678 84.63); --color-nc-campo-cobalto: oklch(0.5005 0.2804 266.17); --color-nc-campo-inchiostro: oklch(0.0000 0.0000 0.00); --color-nc-campo-bianco: oklch(1.0000 0.0000 0.00); --color-nc-chart-1: oklch(0.5005 0.2804 266.17); --color-nc-chart-2: oklch(0.6415 0.1644 153.23); --color-nc-chart-3: oklch(0.7638 0.1562 86.86); --color-nc-chart-4: oklch(0.5688 0.1995 26.59); --color-nc-chart-5: oklch(0.6161 0.1062 208.85); --color-nc-chart-6: oklch(0.5015 0.1883 294.99); --color-nc-chart-seq-1: oklch(0.6998 0.1347 269.48); --color-nc-chart-seq-2: oklch(0.5724 0.1897 270.11); --color-nc-chart-seq-3: oklch(0.4725 0.2271 267.41); --color-nc-chart-seq-4: oklch(0.3989 0.1934 267.50); --color-nc-chart-seq-5: oklch(0.3270 0.1487 267.91); --color-nc-chart-div-warm: oklch(0.7592 0.1560 83.30); --color-nc-chart-div-mid: oklch(0.5278 0.0000 0.00); --color-nc-chart-div-cool: oklch(0.5923 0.2215 269.61); --color-nc-dark-canvas: oklch(0.0000 0.0000 0.00); --color-nc-dark-canvas-soft: oklch(0.1776 0.0000 0.00); --color-nc-dark-canvas-soft-2: oklch(0.2178 0.0000 0.00); --color-nc-dark-material-workspace: oklch(0.0000 0.0000 0.00); --color-nc-dark-material-solid: oklch(0.0000 0.0000 0.00); --color-nc-dark-ink: oklch(0.9461 0.0000 0.00); --color-nc-dark-body: oklch(0.8297 0.0000 0.00); --color-nc-dark-muted: oklch(0.6500 0.0000 0.00); --color-nc-dark-line: oklch(0.2686 0.0000 0.00); --color-nc-dark-input: oklch(0.5208 0.0000 0.00); --color-nc-dark-seam: oklch(0.2178 0.0000 0.00); --color-nc-dark-primary: oklch(0.7727 0.1753 155.96); --color-nc-dark-on-primary: oklch(0.1448 0.0000 0.00); --color-nc-dark-action: oklch(0.7727 0.1753 155.96); --color-nc-dark-action-foreground: oklch(0.1448 0.0000 0.00); --color-nc-dark-action-hover: oklch(0.7661 0.1498 157.10); --color-nc-dark-action-active: oklch(0.7019 0.1753 153.20); --color-nc-dark-link: oklch(0.7661 0.1498 157.10); --color-nc-dark-link-deep: oklch(0.8524 0.0996 159.83); --color-nc-dark-link-bg-soft: oklch(0.2893 0.0697 156.32); --color-nc-dark-focus-ring: oklch(0.7661 0.1498 157.10); --color-nc-dark-scrim: oklch(0.9461 0.0000 0.00); --color-nc-dark-error: oklch(0.7955 0.0980 21.02); --color-nc-dark-error-soft: oklch(0.2296 0.0728 26.06); --color-nc-dark-error-deep: oklch(0.8856 0.0534 19.64); --color-nc-dark-warning: oklch(0.8939 0.1387 90.47); --color-nc-dark-warning-soft: oklch(0.3135 0.0643 85.04); --color-nc-dark-warning-deep: oklch(0.9320 0.0896 90.86); --color-nc-dark-info: oklch(0.7067 0.1528 272.08); --color-nc-dark-info-soft: oklch(0.2118 0.1033 268.28); --color-nc-dark-info-deep: oklch(0.8222 0.0888 274.44); --color-nc-dark-cyan: oklch(0.7820 0.1247 190.99); --color-nc-dark-cyan-soft: oklch(0.8646 0.1000 187.55); --color-nc-dark-cyan-deep: oklch(0.6347 0.1029 191.54); --color-nc-dark-success: oklch(0.7019 0.1753 153.20); --color-nc-dark-success-soft: oklch(0.2893 0.0697 156.32); --color-nc-dark-success-deep: oklch(0.8524 0.0996 159.83); --color-nc-dark-state-ready: oklch(0.5624 0.0000 0.00); --color-nc-dark-state-running: oklch(0.5923 0.2215 269.61); --color-nc-dark-state-review: oklch(0.8466 0.1678 84.63); --color-nc-dark-state-blocked: oklch(0.5688 0.1995 26.59); --color-nc-dark-state-complete: oklch(0.6415 0.1644 153.23); --color-nc-dark-selection-bg: oklch(0.9461 0.0000 0.00); --color-nc-dark-selection-fg: oklch(0.1448 0.0000 0.00); --color-nc-dark-navigation-selection-bg: oklch(0.4725 0.2271 267.41); --color-nc-dark-navigation-selection-fg: oklch(0.9461 0.0000 0.00); --color-nc-dark-navigation-selection-hover: oklch(0.5162 0.2247 268.31); --color-nc-dark-cross: oklch(0.4495 0.0000 0.00); --color-nc-dark-chart-1: oklch(0.5923 0.2215 269.61); --color-nc-dark-chart-2: oklch(0.6415 0.1644 153.23); --color-nc-dark-chart-3: oklch(0.8939 0.1387 90.47); --color-nc-dark-chart-4: oklch(0.6627 0.1685 23.66); --color-nc-dark-chart-5: oklch(0.7820 0.1247 190.99); --color-nc-dark-chart-6: oklch(0.6297 0.1321 299.36); --color-nc-dark-chart-seq-1: oklch(0.5724 0.1897 270.11); --color-nc-dark-chart-seq-2: oklch(0.6998 0.1347 269.48); --color-nc-dark-chart-seq-3: oklch(0.8072 0.0884 269.44); --color-nc-dark-chart-seq-4: oklch(0.8877 0.0514 270.78); --color-nc-dark-chart-seq-5: oklch(0.9619 0.0179 272.31); --color-nc-dark-chart-div-warm: oklch(0.8939 0.1387 90.47); --color-nc-dark-chart-div-mid: oklch(0.9219 0.0000 0.00); --color-nc-dark-chart-div-cool: oklch(0.8222 0.0888 274.44); --font-display-xl: Geist, Inter, system-ui, -apple-system, sans-serif; --font-display-lg: Geist, Inter, system-ui, -apple-system, sans-serif; --font-display-md: Geist, Inter, system-ui, -apple-system, sans-serif; --font-display-sm: Geist, Inter, system-ui, -apple-system, sans-serif; --font-title-lg: Geist, Inter, system-ui, -apple-system, sans-serif; --font-title-md: Geist, Inter, system-ui, -apple-system, sans-serif; --font-title-sm: Geist, Inter, system-ui, -apple-system, sans-serif; --font-body-lg: Geist, Inter, system-ui, -apple-system, sans-serif; --font-body-md: Geist, Inter, system-ui, -apple-system, sans-serif; --font-body-md-strong: Geist, Inter, system-ui, -apple-system, sans-serif; --font-body-sm: Geist, Inter, system-ui, -apple-system, sans-serif; --font-body-sm-strong: Geist, Inter, system-ui, -apple-system, sans-serif; --font-caption: Geist, Inter, system-ui, -apple-system, sans-serif; --font-caption-strong: Geist, Inter, system-ui, -apple-system, sans-serif; --font-caption-mono: Geist Mono, ui-monospace, SFMono-Regular, Menlo, Monaco, monospace; --font-code: Geist Mono, ui-monospace, SFMono-Regular, Menlo, Monaco, monospace; --font-button-md: Geist, Inter, system-ui, -apple-system, sans-serif; --font-button-lg: Geist, Inter, system-ui, -apple-system, sans-serif; --text-display-xl: 72px; --text-display-xl--line-height: 74px; --leading-display-xl: 74px; --text-display-xl--letter-spacing: -1.5px; --tracking-display-xl: -1.5px; --text-display-xl--font-weight: 600; --font-weight-display-xl: 600; --text-display-lg: 52px; --text-display-lg--line-height: 54px; --leading-display-lg: 54px; --text-display-lg--letter-spacing: -1px; --tracking-display-lg: -1px; --text-display-lg--font-weight: 600; --font-weight-display-lg: 600; --text-display-md: 24px; --text-display-md--line-height: 32px; --leading-display-md: 32px; --text-display-md--letter-spacing: 0px; --tracking-display-md: 0px; --text-display-md--font-weight: 600; --font-weight-display-md: 600; --text-display-sm: 20px; --text-display-sm--line-height: 28px; --leading-display-sm: 28px; --text-display-sm--letter-spacing: 0px; --tracking-display-sm: 0px; --text-display-sm--font-weight: 600; --font-weight-display-sm: 600; --text-title-lg: 40px; --text-title-lg--line-height: 41px; --leading-title-lg: 41px; --text-title-lg--letter-spacing: 0px; --tracking-title-lg: 0px; --text-title-lg--font-weight: 600; --font-weight-title-lg: 600; --text-title-md: 30px; --text-title-md--line-height: 32px; --leading-title-md: 32px; --text-title-md--letter-spacing: 0px; --tracking-title-md: 0px; --text-title-md--font-weight: 600; --font-weight-title-md: 600; --text-title-sm: 22px; --text-title-sm--line-height: 25px; --leading-title-sm: 25px; --text-title-sm--letter-spacing: 0px; --tracking-title-sm: 0px; --text-title-sm--font-weight: 600; --font-weight-title-sm: 600; --text-body-lg: 18px; --text-body-lg--line-height: 27px; --leading-body-lg: 27px; --text-body-lg--letter-spacing: 0px; --tracking-body-lg: 0px; --text-body-lg--font-weight: 400; --font-weight-body-lg: 400; --text-body-md: 16px; --text-body-md--line-height: 25px; --leading-body-md: 25px; --text-body-md--letter-spacing: 0px; --tracking-body-md: 0px; --text-body-md--font-weight: 400; --font-weight-body-md: 400; --text-body-md-strong: 16px; --text-body-md-strong--line-height: 24px; --leading-body-md-strong: 24px; --text-body-md-strong--letter-spacing: 0px; --tracking-body-md-strong: 0px; --text-body-md-strong--font-weight: 500; --font-weight-body-md-strong: 500; --text-body-sm: 14px; --text-body-sm--line-height: 20px; --leading-body-sm: 20px; --text-body-sm--letter-spacing: 0px; --tracking-body-sm: 0px; --text-body-sm--font-weight: 400; --font-weight-body-sm: 400; --text-body-sm-strong: 14px; --text-body-sm-strong--line-height: 20px; --leading-body-sm-strong: 20px; --text-body-sm-strong--letter-spacing: 0px; --tracking-body-sm-strong: 0px; --text-body-sm-strong--font-weight: 500; --font-weight-body-sm-strong: 500; --text-caption: 12px; --text-caption--line-height: 16px; --leading-caption: 16px; --text-caption--letter-spacing: 0px; --tracking-caption: 0px; --text-caption--font-weight: 400; --font-weight-caption: 400; --text-caption-strong: 12px; --text-caption-strong--line-height: 16px; --leading-caption-strong: 16px; --text-caption-strong--letter-spacing: 0px; --tracking-caption-strong: 0px; --text-caption-strong--font-weight: 500; --font-weight-caption-strong: 500; --text-caption-mono: 12px; --text-caption-mono--line-height: 16px; --leading-caption-mono: 16px; --text-caption-mono--letter-spacing: 0px; --tracking-caption-mono: 0px; --text-caption-mono--font-weight: 500; --font-weight-caption-mono: 500; --text-code: 13px; --text-code--line-height: 20px; --leading-code: 20px; --text-code--letter-spacing: 0px; --tracking-code: 0px; --text-code--font-weight: 400; --font-weight-code: 400; --text-button-md: 14px; --text-button-md--line-height: 18px; --leading-button-md: 18px; --text-button-md--letter-spacing: 0px; --tracking-button-md: 0px; --text-button-md--font-weight: 500; --font-weight-button-md: 500; --text-button-lg: 16px; --text-button-lg--line-height: 24px; --leading-button-lg: 24px; --text-button-lg--letter-spacing: 0px; --tracking-button-lg: 0px; --text-button-lg--font-weight: 500; --font-weight-button-lg: 500; --radius-none: 0px; --radius-xs: 2px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px; --radius-xl: 10px; --radius-2xl: 12px; --radius-3xl: 16px; --radius-pill-sm: 64px; --radius-pill: 100px; --radius-full: 9999px; --ring-width-focus: var(--spacing-nadicode-focus-ring-width); --opacity-scrim: var(--nc-material-scrim-opacity); --spacing-nadicode-xxs: 4px; --spacing-nadicode-filter-chip-gap: 6px; --spacing-nadicode-xs: 8px; --spacing-nadicode-sm: 12px; --spacing-nadicode-md: 16px; --spacing-nadicode-lg: 24px; --spacing-nadicode-xl: 32px; --spacing-nadicode-2xl: 40px; --spacing-nadicode-3xl: 48px; --spacing-nadicode-4xl: 64px; --spacing-nadicode-5xl: 96px; --spacing-nadicode-6xl: 128px; --spacing-nadicode-section: 192px; --spacing-nadicode-guide: 1px; --spacing-nadicode-icon-stroke: 1.6px; --spacing-nadicode-focus-ring-width: 3px; --spacing-nadicode-control-height: 32px; --spacing-nadicode-control-padding-inline: 10px; --spacing-nadicode-touch-target: 44px; --spacing-nadicode-page-pad: 24px; --spacing-nadicode-page-max-mobile: 448px; --spacing-nadicode-page-max-tablet: 624px; --spacing-nadicode-page-max-desktop: 1440px; --spacing-nadicode-frame-max: 1392px; --spacing-nadicode-frame-gap: 24px; --spacing-nadicode-cell-padding: 24px; --spacing-nadicode-section-gap: 48px; --spacing-nadicode-cross-size-mobile: 11px; --spacing-nadicode-cross-size-tablet: 15px; --spacing-nadicode-cross-size-desktop: 21px; --spacing-nadicode-h-strip-mobile: 72px; --spacing-nadicode-h-strip-tablet: 80px; --spacing-nadicode-h-strip-desktop: 88px; --spacing-nadicode-h-cell-sm: 120px; --spacing-nadicode-h-cell-md-mobile: 144px; --spacing-nadicode-h-cell-md-tablet: 160px; --spacing-nadicode-h-cell-md-desktop: 168px; --spacing-nadicode-h-cell-lg-mobile: 220px; --spacing-nadicode-h-cell-lg-desktop: 240px; --spacing-nadicode-h-visual-mobile: 276px; --spacing-nadicode-h-visual-tablet: 318px; --spacing-nadicode-h-visual-desktop: 360px; --spacing-nadicode-h-precision-mobile: 276px; --spacing-nadicode-h-precision-tablet: 480px; --spacing-nadicode-h-precision-desktop: 720px; --spacing-nadicode-h-hero-mobile: 560px; --spacing-nadicode-h-hero-desktop: 720px; --spacing-nadicode-h-action-strip-mobile: 20px; --spacing-nadicode-h-action-strip-desktop: 32px; --spacing-nadicode-h-action-body-mobile: 320px; --spacing-nadicode-h-action-body-tablet: 338px; --spacing-nadicode-h-action-band: 260px; --spacing-nadicode-h-feature-mobile: 360px; --spacing-nadicode-h-feature-tablet: 400px; --spacing-nadicode-h-feature-desktop: 456px; --spacing-nadicode-h-editorial-feature-mobile: 360px; --spacing-nadicode-h-editorial-feature-tablet: 440px; --spacing-nadicode-h-editorial-feature-desktop: 560px; --spacing-nadicode-h-bento-primary: 384px; --spacing-nadicode-h-bento-secondary: 240px; --spacing-nadicode-h-bento-mobile-copy: 248px; --spacing-nadicode-h-bento-mobile-main: 537px; --spacing-nadicode-h-bento-strip: 20px; --spacing-nadicode-filter-chip-height: 28px; --spacing-nadicode-filter-chip-icon: 14px; --spacing-control-height: var(--spacing-nadicode-control-height); --spacing-control-padding-inline: var(--spacing-nadicode-control-padding-inline); --spacing-touch-target: var(--spacing-nadicode-touch-target); }
|
|
599
598
|
}
|
|
600
599
|
|
|
601
600
|
/* src/css/reset.css */
|
|
@@ -1662,97 +1661,6 @@
|
|
|
1662
1661
|
}
|
|
1663
1662
|
}
|
|
1664
1663
|
|
|
1665
|
-
/* src/css/components/state-tag.css */
|
|
1666
|
-
@layer components {
|
|
1667
|
-
.nc-state-tag {
|
|
1668
|
-
display: inline-flex;
|
|
1669
|
-
align-items: center;
|
|
1670
|
-
height: 26px;
|
|
1671
|
-
padding: 0 8px;
|
|
1672
|
-
border: var(--nc-guide) solid var(--nc-line);
|
|
1673
|
-
border-left-width: 3px;
|
|
1674
|
-
border-left-color: var(--nc-ink);
|
|
1675
|
-
border-radius: var(--nc-rounded-sm);
|
|
1676
|
-
background: var(--nc-canvas);
|
|
1677
|
-
color: var(--nc-ink);
|
|
1678
|
-
font-family:
|
|
1679
|
-
"Geist Mono",
|
|
1680
|
-
ui-monospace,
|
|
1681
|
-
SFMono-Regular,
|
|
1682
|
-
Menlo,
|
|
1683
|
-
Monaco,
|
|
1684
|
-
monospace;
|
|
1685
|
-
font-size: 12px;
|
|
1686
|
-
font-weight: 500;
|
|
1687
|
-
line-height: 16px;
|
|
1688
|
-
letter-spacing: 0;
|
|
1689
|
-
white-space: nowrap;
|
|
1690
|
-
transition:
|
|
1691
|
-
background-color var(--nc-duration-confirm) var(--nc-ease-out-strong),
|
|
1692
|
-
border-color var(--nc-duration-confirm) var(--nc-ease-out-strong),
|
|
1693
|
-
color var(--nc-duration-confirm) var(--nc-ease-out-strong);
|
|
1694
|
-
}
|
|
1695
|
-
.nc-state-tag[data-variant=ready] {
|
|
1696
|
-
border-left-color: var(--nc-state-ready);
|
|
1697
|
-
}
|
|
1698
|
-
.nc-state-tag[data-variant=running] {
|
|
1699
|
-
border-left-color: var(--nc-state-running);
|
|
1700
|
-
}
|
|
1701
|
-
.nc-state-tag[data-variant=review] {
|
|
1702
|
-
border-left-color: var(--nc-state-review);
|
|
1703
|
-
}
|
|
1704
|
-
.nc-state-tag[data-variant=blocked] {
|
|
1705
|
-
border-left-color: var(--nc-state-blocked);
|
|
1706
|
-
}
|
|
1707
|
-
.nc-state-tag[data-variant=complete] {
|
|
1708
|
-
border-left-color: var(--nc-state-complete);
|
|
1709
|
-
}
|
|
1710
|
-
}
|
|
1711
|
-
|
|
1712
|
-
/* src/css/components/status-tag.css */
|
|
1713
|
-
@layer components {
|
|
1714
|
-
.nc-status-tag {
|
|
1715
|
-
display: inline-flex;
|
|
1716
|
-
align-items: center;
|
|
1717
|
-
height: 24px;
|
|
1718
|
-
padding: 0 10px;
|
|
1719
|
-
border: 0;
|
|
1720
|
-
border-radius: var(--nc-rounded-md);
|
|
1721
|
-
font-family:
|
|
1722
|
-
Geist,
|
|
1723
|
-
Inter,
|
|
1724
|
-
system-ui,
|
|
1725
|
-
-apple-system,
|
|
1726
|
-
sans-serif;
|
|
1727
|
-
font-size: 12px;
|
|
1728
|
-
font-weight: 500;
|
|
1729
|
-
line-height: 16px;
|
|
1730
|
-
letter-spacing: 0;
|
|
1731
|
-
white-space: nowrap;
|
|
1732
|
-
transition: background-color var(--nc-duration-confirm) var(--nc-ease-out-strong), color var(--nc-duration-confirm) var(--nc-ease-out-strong);
|
|
1733
|
-
}
|
|
1734
|
-
.nc-status-tag[data-tone=gray] {
|
|
1735
|
-
background: var(--nc-canvas-soft-2);
|
|
1736
|
-
color: var(--nc-body);
|
|
1737
|
-
}
|
|
1738
|
-
.nc-status-tag[data-tone=green] {
|
|
1739
|
-
background: var(--nc-link-bg-soft);
|
|
1740
|
-
color: var(--nc-link-deep);
|
|
1741
|
-
}
|
|
1742
|
-
.nc-status-tag[data-tone=red] {
|
|
1743
|
-
background: var(--nc-error-soft);
|
|
1744
|
-
color: var(--nc-error-deep);
|
|
1745
|
-
}
|
|
1746
|
-
.nc-status-tag[data-tone=amber] {
|
|
1747
|
-
background: var(--nc-warning-soft);
|
|
1748
|
-
color: var(--nc-warning-deep);
|
|
1749
|
-
}
|
|
1750
|
-
.nc-status-tag[data-tone=blue] {
|
|
1751
|
-
background: var(--nc-info-soft);
|
|
1752
|
-
color: var(--nc-info-deep);
|
|
1753
|
-
}
|
|
1754
|
-
}
|
|
1755
|
-
|
|
1756
1664
|
/* src/css/components/memory-item.css */
|
|
1757
1665
|
@layer components {
|
|
1758
1666
|
.nc-memory-item {
|
|
@@ -1832,64 +1740,6 @@
|
|
|
1832
1740
|
}
|
|
1833
1741
|
}
|
|
1834
1742
|
|
|
1835
|
-
/* src/css/components/state-row.css */
|
|
1836
|
-
@layer components {
|
|
1837
|
-
.nc-state-row {
|
|
1838
|
-
align-self: stretch;
|
|
1839
|
-
display: flex;
|
|
1840
|
-
align-items: center;
|
|
1841
|
-
gap: 10px;
|
|
1842
|
-
padding: 3px 0;
|
|
1843
|
-
font-family:
|
|
1844
|
-
"Geist Mono",
|
|
1845
|
-
ui-monospace,
|
|
1846
|
-
SFMono-Regular,
|
|
1847
|
-
Menlo,
|
|
1848
|
-
Monaco,
|
|
1849
|
-
monospace;
|
|
1850
|
-
font-size: 11px;
|
|
1851
|
-
line-height: 16px;
|
|
1852
|
-
color: var(--nc-muted);
|
|
1853
|
-
text-transform: uppercase;
|
|
1854
|
-
letter-spacing: 0.04em;
|
|
1855
|
-
}
|
|
1856
|
-
.nc-state-row::before,
|
|
1857
|
-
.nc-state-row::after {
|
|
1858
|
-
content: "";
|
|
1859
|
-
flex: 1;
|
|
1860
|
-
height: var(--nc-guide);
|
|
1861
|
-
background: var(--nc-line);
|
|
1862
|
-
}
|
|
1863
|
-
.nc-state-row-label {
|
|
1864
|
-
display: inline-flex;
|
|
1865
|
-
align-items: center;
|
|
1866
|
-
gap: 6px;
|
|
1867
|
-
white-space: nowrap;
|
|
1868
|
-
}
|
|
1869
|
-
.nc-state-row-dot {
|
|
1870
|
-
width: 6px;
|
|
1871
|
-
height: 6px;
|
|
1872
|
-
border-radius: var(--nc-rounded-full);
|
|
1873
|
-
color: var(--nc-state-running);
|
|
1874
|
-
background: currentColor;
|
|
1875
|
-
}
|
|
1876
|
-
.nc-state-row[data-kind=ready] .nc-state-row-dot {
|
|
1877
|
-
color: var(--nc-state-ready);
|
|
1878
|
-
}
|
|
1879
|
-
.nc-state-row[data-kind=running] .nc-state-row-dot {
|
|
1880
|
-
color: var(--nc-state-running);
|
|
1881
|
-
}
|
|
1882
|
-
.nc-state-row[data-kind=review] .nc-state-row-dot {
|
|
1883
|
-
color: var(--nc-state-review);
|
|
1884
|
-
}
|
|
1885
|
-
.nc-state-row[data-kind=blocked] .nc-state-row-dot {
|
|
1886
|
-
color: var(--nc-state-blocked);
|
|
1887
|
-
}
|
|
1888
|
-
.nc-state-row[data-kind=complete] .nc-state-row-dot {
|
|
1889
|
-
color: var(--nc-state-complete);
|
|
1890
|
-
}
|
|
1891
|
-
}
|
|
1892
|
-
|
|
1893
1743
|
/* src/css/components/usage-meter.css */
|
|
1894
1744
|
@layer components {
|
|
1895
1745
|
.nc-usage-meter {
|
|
@@ -2000,7 +1850,7 @@
|
|
|
2000
1850
|
border-radius: var(--nc-rounded-full);
|
|
2001
1851
|
background: var(--nc-canvas);
|
|
2002
1852
|
box-shadow: 0 0 0 var(--nc-guide) var(--nc-line);
|
|
2003
|
-
color: var(--nc-
|
|
1853
|
+
color: var(--nc-muted);
|
|
2004
1854
|
}
|
|
2005
1855
|
.nc-run-timeline-node::before {
|
|
2006
1856
|
content: "";
|
|
@@ -2043,36 +1893,6 @@
|
|
|
2043
1893
|
line-height: 18px;
|
|
2044
1894
|
color: var(--nc-body);
|
|
2045
1895
|
}
|
|
2046
|
-
.nc-run-timeline-step[data-state=ready] .nc-run-timeline-node {
|
|
2047
|
-
color: var(--nc-state-ready);
|
|
2048
|
-
}
|
|
2049
|
-
.nc-run-timeline-step[data-state=ready] .nc-run-timeline-content {
|
|
2050
|
-
border-left-color: var(--nc-state-ready);
|
|
2051
|
-
}
|
|
2052
|
-
.nc-run-timeline-step[data-state=running] .nc-run-timeline-node {
|
|
2053
|
-
color: var(--nc-state-running);
|
|
2054
|
-
}
|
|
2055
|
-
.nc-run-timeline-step[data-state=running] .nc-run-timeline-content {
|
|
2056
|
-
border-left-color: var(--nc-state-running);
|
|
2057
|
-
}
|
|
2058
|
-
.nc-run-timeline-step[data-state=review] .nc-run-timeline-node {
|
|
2059
|
-
color: var(--nc-state-review);
|
|
2060
|
-
}
|
|
2061
|
-
.nc-run-timeline-step[data-state=review] .nc-run-timeline-content {
|
|
2062
|
-
border-left-color: var(--nc-state-review);
|
|
2063
|
-
}
|
|
2064
|
-
.nc-run-timeline-step[data-state=blocked] .nc-run-timeline-node {
|
|
2065
|
-
color: var(--nc-state-blocked);
|
|
2066
|
-
}
|
|
2067
|
-
.nc-run-timeline-step[data-state=blocked] .nc-run-timeline-content {
|
|
2068
|
-
border-left-color: var(--nc-state-blocked);
|
|
2069
|
-
}
|
|
2070
|
-
.nc-run-timeline-step[data-state=complete] .nc-run-timeline-node {
|
|
2071
|
-
color: var(--nc-state-complete);
|
|
2072
|
-
}
|
|
2073
|
-
.nc-run-timeline-step[data-state=complete] .nc-run-timeline-content {
|
|
2074
|
-
border-left-color: var(--nc-state-complete);
|
|
2075
|
-
}
|
|
2076
1896
|
}
|
|
2077
1897
|
|
|
2078
1898
|
/* src/css/components/image.css */
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
"canvas": "#ffffff",
|
|
15
15
|
"canvas-soft": "#fafafa",
|
|
16
16
|
"canvas-soft-2": "#f5f5f5",
|
|
17
|
+
"material-workspace": "#f7f7f7",
|
|
18
|
+
"material-solid": "#ffffff",
|
|
17
19
|
"line": "#e5e5e5",
|
|
18
20
|
"input": "#757575",
|
|
19
21
|
"seam": "#d4d4d4",
|
|
@@ -73,6 +75,8 @@
|
|
|
73
75
|
"dark-canvas": "#000000",
|
|
74
76
|
"dark-canvas-soft": "#111111",
|
|
75
77
|
"dark-canvas-soft-2": "#1a1a1a",
|
|
78
|
+
"dark-material-workspace": "#000000",
|
|
79
|
+
"dark-material-solid": "#000000",
|
|
76
80
|
"dark-ink": "#ededed",
|
|
77
81
|
"dark-body": "#c7c7c7",
|
|
78
82
|
"dark-muted": "#8f8f8f",
|
|
@@ -136,6 +136,28 @@
|
|
|
136
136
|
"hex": "#f5f5f5"
|
|
137
137
|
}
|
|
138
138
|
},
|
|
139
|
+
"material-workspace": {
|
|
140
|
+
"$value": {
|
|
141
|
+
"colorSpace": "srgb",
|
|
142
|
+
"components": [
|
|
143
|
+
0.969,
|
|
144
|
+
0.969,
|
|
145
|
+
0.969
|
|
146
|
+
],
|
|
147
|
+
"hex": "#f7f7f7"
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"material-solid": {
|
|
151
|
+
"$value": {
|
|
152
|
+
"colorSpace": "srgb",
|
|
153
|
+
"components": [
|
|
154
|
+
1,
|
|
155
|
+
1,
|
|
156
|
+
1
|
|
157
|
+
],
|
|
158
|
+
"hex": "#ffffff"
|
|
159
|
+
}
|
|
160
|
+
},
|
|
139
161
|
"line": {
|
|
140
162
|
"$value": {
|
|
141
163
|
"colorSpace": "srgb",
|
|
@@ -785,6 +807,28 @@
|
|
|
785
807
|
"hex": "#1a1a1a"
|
|
786
808
|
}
|
|
787
809
|
},
|
|
810
|
+
"dark-material-workspace": {
|
|
811
|
+
"$value": {
|
|
812
|
+
"colorSpace": "srgb",
|
|
813
|
+
"components": [
|
|
814
|
+
0,
|
|
815
|
+
0,
|
|
816
|
+
0
|
|
817
|
+
],
|
|
818
|
+
"hex": "#000000"
|
|
819
|
+
}
|
|
820
|
+
},
|
|
821
|
+
"dark-material-solid": {
|
|
822
|
+
"$value": {
|
|
823
|
+
"colorSpace": "srgb",
|
|
824
|
+
"components": [
|
|
825
|
+
0,
|
|
826
|
+
0,
|
|
827
|
+
0
|
|
828
|
+
],
|
|
829
|
+
"hex": "#000000"
|
|
830
|
+
}
|
|
831
|
+
},
|
|
788
832
|
"dark-ink": {
|
|
789
833
|
"$value": {
|
|
790
834
|
"colorSpace": "srgb",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nadicodeai/design-system",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -154,6 +154,8 @@
|
|
|
154
154
|
"lint:design": "design.md lint DESIGN.md",
|
|
155
155
|
"lint": "eslint --max-warnings=0",
|
|
156
156
|
"typecheck": "tsc -p tsconfig.json",
|
|
157
|
+
"check": "npm run lint:design && npm run lint && npm run typecheck",
|
|
158
|
+
"check:static": "npm run check",
|
|
157
159
|
"test": "vitest run",
|
|
158
160
|
"test:visual": "playwright test --config playwright.visual.config.ts",
|
|
159
161
|
"prepublishOnly": "npm run build"
|