@nadicodeai/design-system 0.10.1 → 0.11.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.
Files changed (51) hide show
  1. package/AGENTS.md +30 -101
  2. package/CONTEXT.md +75 -0
  3. package/DESIGN.md +180 -345
  4. package/README.md +27 -54
  5. package/dist/assets/logo-mark.svg +6 -0
  6. package/dist/assets/logo-wordmark.svg +4 -0
  7. package/dist/assets/nadia-canonical-face.png +0 -0
  8. package/dist/css/chat-autoplay.js +18 -27
  9. package/dist/css/index.css +2540 -56
  10. package/dist/favicon/apple-touch-icon.png +0 -0
  11. package/dist/favicon/favicon.ico +0 -0
  12. package/dist/favicon/favicon.svg +6 -16
  13. package/dist/favicon/icon-192.png +0 -0
  14. package/dist/favicon/icon-512.png +0 -0
  15. package/dist/favicon/site.webmanifest +2 -2
  16. package/dist/tailwind/nadicode.tailwind.json +98 -143
  17. package/dist/tokens/nadicode.dtcg.json +413 -908
  18. package/package.json +19 -11
  19. package/src/assets/logo-geometry.d.ts +27 -0
  20. package/src/assets/logo-geometry.js +204 -0
  21. package/src/assets/nadia-canonical-face.d.ts +2 -0
  22. package/dist/css/components/.gitkeep +0 -0
  23. package/dist/css/components/agent-avatar.css +0 -52
  24. package/dist/css/components/approval-gate.css +0 -145
  25. package/dist/css/components/artifact-preview.css +0 -81
  26. package/dist/css/components/chat-bubble-agent.css +0 -63
  27. package/dist/css/components/chat-bubble-user.css +0 -28
  28. package/dist/css/components/chat-thread.css +0 -159
  29. package/dist/css/components/handoff-banner.css +0 -37
  30. package/dist/css/components/image.css +0 -87
  31. package/dist/css/components/memory-item.css +0 -36
  32. package/dist/css/components/run-timeline.css +0 -160
  33. package/dist/css/components/state-row.css +0 -64
  34. package/dist/css/components/state-tag.css +0 -67
  35. package/dist/css/components/status-tag.css +0 -101
  36. package/dist/css/components/tool-call-trace.css +0 -36
  37. package/dist/css/components/typing-dots.css +0 -54
  38. package/dist/css/components/usage-meter.css +0 -63
  39. package/dist/css/foundation.css +0 -177
  40. package/dist/css/layout.css +0 -657
  41. package/dist/css/motion.css +0 -225
  42. package/dist/css/primitives.css +0 -333
  43. package/dist/css/reset.css +0 -22
  44. package/dist/css/tokens.generated.css +0 -349
  45. package/dist/css/tokens.local.css +0 -11
  46. package/dist/tailwind/nadicode.theme.css +0 -596
  47. package/src/assets/favicon.svg +0 -17
  48. package/src/assets/logo-mark.svg +0 -15
  49. package/src/assets/logo-wordmark.svg +0 -26
  50. package/src/assets/nadia.d.ts +0 -9
  51. package/src/assets/nadia.png +0 -0
@@ -1,101 +0,0 @@
1
- /*
2
- * status-tag — the entity-status system (DESIGN.md `status-tag-*` family).
3
- * Sibling of `state-tag`, not a replacement: `state-tag` stays the run-state
4
- * rail (ready/running/review/blocked/complete), carried by a 3px border-left
5
- * on a neutral canvas. `status-tag` is the entity-status vocabulary — agent,
6
- * credential, activation, customer, invitation, subscription, and health
7
- * values that live on records, not on a run. It carries state a different
8
- * way: a subtle tinted rectangle where BOTH the background and the text
9
- * shift together, never a border-left rail, and it never touches the
10
- * `--nc-state-*` token family.
11
- *
12
- * Shape: a small sans rectangle (`{rounded.md}`, not a capsule), never
13
- * Geist Mono. Tone comes from `[data-tone]` (gray/green/red/amber/blue), not
14
- * BEM modifiers, and each tone is a full background+text ramp pair pulled
15
- * directly from the color ramps (gray/green-italia/red-italia/amber/
16
- * blue-cobalto) rather than through a semantic alias — status-tag consumes
17
- * ramp steps directly, matching `state-tag`'s "shape carries meaning, color
18
- * carries variant" discipline but expressed as a bg/text pair instead of a
19
- * border.
20
- *
21
- * Doctrine: gray is the default tone. Color is reserved for marking health
22
- * and exceptions — every terminal/no-action state renders gray. Subtle-only
23
- * (no solid/filled variants), no icons inside the badge, no text-transform,
24
- * labels render verbatim from the i18n dictionary that owns them.
25
- */
26
- .nc-status-tag {
27
- display: inline-flex;
28
- align-items: center;
29
- height: 24px;
30
- padding: 0 10px;
31
- border: 0;
32
- border-radius: var(--nc-rounded-md);
33
- font-family: Geist, Inter, system-ui, -apple-system, sans-serif;
34
- font-size: 12px;
35
- font-weight: 500;
36
- line-height: 16px;
37
- letter-spacing: 0;
38
- white-space: nowrap;
39
- /* Confirm move: state transitions at the 150–200 ms feedback band, same as
40
- state-tag — color arrives WITH the meaning, never before it. */
41
- transition:
42
- background-color var(--nc-duration-confirm) var(--nc-ease-out-strong),
43
- color var(--nc-duration-confirm) var(--nc-ease-out-strong);
44
- }
45
-
46
- .nc-status-tag[data-tone="gray"] {
47
- background: var(--nc-gray-200);
48
- color: var(--nc-gray-900);
49
- }
50
-
51
- .nc-status-tag[data-tone="green"] {
52
- background: var(--nc-green-italia-200);
53
- color: var(--nc-green-italia-900);
54
- }
55
-
56
- .nc-status-tag[data-tone="red"] {
57
- background: var(--nc-red-italia-200);
58
- color: var(--nc-red-italia-900);
59
- }
60
-
61
- .nc-status-tag[data-tone="amber"] {
62
- background: var(--nc-amber-200);
63
- color: var(--nc-amber-900);
64
- }
65
-
66
- .nc-status-tag[data-tone="blue"] {
67
- background: var(--nc-blue-cobalto-200);
68
- color: var(--nc-blue-cobalto-900);
69
- }
70
-
71
- /*
72
- * Dark console: each tone flips to its own dark-ramp pair rather than a
73
- * shared canvas/ink remap (unlike state-tag's neutral chip), because tone
74
- * here is carried by a full bg+text pair, not a single border-left accent.
75
- * Scoped per tone so gray's pair (dark-canvas-soft-2/gray-600) does not
76
- * collide with the chromatic tones' 1000/400 pairs.
77
- */
78
- .dark .nc-status-tag[data-tone="gray"] {
79
- background: var(--nc-dark-canvas-soft-2);
80
- color: var(--nc-gray-600);
81
- }
82
-
83
- .dark .nc-status-tag[data-tone="green"] {
84
- background: var(--nc-green-italia-1000);
85
- color: var(--nc-green-italia-400);
86
- }
87
-
88
- .dark .nc-status-tag[data-tone="red"] {
89
- background: var(--nc-red-italia-1000);
90
- color: var(--nc-red-italia-400);
91
- }
92
-
93
- .dark .nc-status-tag[data-tone="amber"] {
94
- background: var(--nc-amber-1000);
95
- color: var(--nc-amber-400);
96
- }
97
-
98
- .dark .nc-status-tag[data-tone="blue"] {
99
- background: var(--nc-blue-cobalto-1000);
100
- color: var(--nc-blue-cobalto-400);
101
- }
@@ -1,36 +0,0 @@
1
- /*
2
- * tool-call-trace — compact mono trace row (DESIGN.md `tool-call-trace`).
3
- * Graduated from the `base.css` `.nc-tool-call-trace` shim + `chat-anim.jsx`
4
- * ToolTrace. Left-aligned soft-surface code row; use only when tool use is
5
- * relevant to the explanation. A leading `›` marker (mono, muted) prefixes the
6
- * trace. Message atom → carries the M5 rise-in. Color is `var(--nc-*)` only;
7
- * the radius reads `var(--nc-rounded-*)`; spacing/font are literals.
8
- */
9
- .nc-tool-call-trace {
10
- align-self: flex-start;
11
- width: fit-content;
12
- max-width: 92%;
13
- padding: 6px 10px;
14
- border: var(--nc-guide) solid var(--nc-line);
15
- border-radius: var(--nc-rounded-sm);
16
- background: var(--nc-canvas-soft-2);
17
- color: var(--nc-body);
18
- font-family: "Geist Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, monospace;
19
- font-size: 12px;
20
- line-height: 17px;
21
- animation-name: nc-msg-in;
22
- }
23
-
24
- /* Leading invocation marker — Lucide chevron-right, painted via CSS mask so it
25
- tints with the muted token. */
26
- .nc-tool-call-trace::before {
27
- content: "";
28
- display: inline-block;
29
- width: 13px;
30
- height: 13px;
31
- margin-right: 8px;
32
- vertical-align: -2px;
33
- background-color: var(--nc-muted);
34
- -webkit-mask: url("../../icons/chevron-right.svg") center / contain no-repeat;
35
- mask: url("../../icons/chevron-right.svg") center / contain no-repeat;
36
- }
@@ -1,54 +0,0 @@
1
- /*
2
- * typing-dots — CSS-internal atom (NO DESIGN.md contract entry; D8/D14).
3
- * Graduated from `chat-anim.jsx` TypingDots. An agent-shaped bubble shell
4
- * (canvas surface, hairline border, 3px accent stripe consuming `--nc-accent`)
5
- * holding three muted dots. Each dot opts into the M5 `.nc-anim-typing` hook in
6
- * markup and staggers via `--nc-anim-delay` (e.g. `calc(var(--i) *
7
- * var(--nc-duration-stagger))`); reduced-motion is inherited from that hook.
8
- * The 3px stripe consumes `--nc-accent`, switchable via `[data-accent]` from the
9
- * same AC-016 map as `chat-bubble-agent`/`agent-avatar` so the typing shell
10
- * tracks the agent's accent (matching the prototype's `TypingDots accent`).
11
- * Color is `var(--nc-*)` only; the shell radius reads `var(--nc-rounded-*)`
12
- * (the round dots keep an off-scale literal — no `rounded` token matches);
13
- * spacing/font are literals.
14
- */
15
- .nc-typing-dots {
16
- /* AC-016 accent: default green; switchable via [data-accent]. */
17
- --nc-accent: var(--nc-link);
18
- align-self: flex-start;
19
- display: inline-flex;
20
- gap: 4px;
21
- align-items: center;
22
- width: fit-content;
23
- padding: 10px 14px 10px 15px;
24
- border: var(--nc-guide) solid var(--nc-line);
25
- border-radius: var(--nc-rounded-md);
26
- box-shadow: inset 3px 0 0 0 var(--nc-accent);
27
- background: var(--nc-canvas);
28
- }
29
-
30
- /* AC-016 accent map → existing --nc-* tokens; identical to chat-bubble-agent and
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
- .nc-typing-dots[data-accent="green"] {
34
- --nc-accent: var(--nc-link);
35
- }
36
- .nc-typing-dots[data-accent="cyan"] {
37
- --nc-accent: var(--nc-info);
38
- }
39
- .nc-typing-dots[data-accent="amber"] {
40
- --nc-accent: var(--nc-warning-deep);
41
- }
42
- .nc-typing-dots[data-accent="ink"] {
43
- --nc-accent: var(--nc-ink);
44
- }
45
- .nc-typing-dots[data-accent="red"] {
46
- --nc-accent: var(--nc-error);
47
- }
48
-
49
- .nc-typing-dots-dot {
50
- width: 5px;
51
- height: 5px;
52
- border-radius: var(--nc-rounded-full);
53
- background: var(--nc-muted);
54
- }
@@ -1,63 +0,0 @@
1
- /*
2
- * usage-meter — token / cost / latency / run-count display (DESIGN.md
3
- * `usage-meter`). Graduated from `chat-anim.jsx` ChatFooter. A compact
4
- * caption-mono meter: a meta row (model · steps · percent, separated by hairline
5
- * pipes) over an optional thin progress track. The fill width is data, set via
6
- * `--nc-usage` (0–100%) in markup; its 360ms settle uses the M5 transition
7
- * tokens (no re-typed magic numbers). Color is `var(--nc-*)` only;
8
- * the radius reads `var(--nc-rounded-*)`; spacing/font are literals.
9
- */
10
- .nc-usage-meter {
11
- display: flex;
12
- flex-direction: column;
13
- gap: 8px;
14
- padding: 4px 8px;
15
- border-radius: var(--nc-rounded-sm);
16
- background: var(--nc-canvas);
17
- color: var(--nc-body);
18
- font-family: "Geist Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, monospace;
19
- font-size: 11px;
20
- line-height: 16px;
21
- }
22
-
23
- .nc-usage-meter-meta {
24
- display: flex;
25
- align-items: center;
26
- gap: 10px;
27
- color: var(--nc-muted);
28
- text-transform: uppercase;
29
- letter-spacing: 0.04em;
30
- white-space: nowrap;
31
- }
32
-
33
- /* Hairline pipe separators between meta fields. */
34
- .nc-usage-meter-sep {
35
- color: var(--nc-line);
36
- }
37
-
38
- /* Push the trailing field (percent) to the right edge. */
39
- .nc-usage-meter-spacer {
40
- flex: 1;
41
- }
42
-
43
- .nc-usage-meter-track {
44
- position: relative;
45
- height: 2px;
46
- overflow: hidden;
47
- background: var(--nc-line);
48
- }
49
-
50
- .nc-usage-meter-fill {
51
- position: absolute;
52
- inset: 0;
53
- right: auto;
54
- width: var(--nc-usage, 0%);
55
- background: var(--nc-ink);
56
- transition: width var(--nc-duration-transition) var(--nc-ease-emphasized);
57
- }
58
-
59
- @media (prefers-reduced-motion: reduce) {
60
- .nc-usage-meter-fill {
61
- transition: none;
62
- }
63
- }
@@ -1,177 +0,0 @@
1
- /* foundation layer — .nc-page / .nc-frame (split from old foundation per D10). */
2
-
3
- /* Document-level sans stack. Without this, text outside .nc-copy-stack /
4
- .nc-type-* scopes renders in UA Times. Family only — size/weight/line-height
5
- stay scoped to the type-scale utilities below. Font stacks are not tokens in
6
- this kit (see page-recipes.css precedent); the stack mirrors every sans
7
- --nc-type-*-font-family token value exactly. */
8
- body {
9
- font-family: Geist, Inter, system-ui, -apple-system, sans-serif;
10
- }
11
-
12
- .nc-page {
13
- width: 100%;
14
- max-width: var(--nc-page-max);
15
- margin-inline: auto;
16
- padding-inline: var(--nc-page-pad);
17
- }
18
-
19
- .nc-frame {
20
- width: 100%;
21
- max-width: var(--nc-frame-max);
22
- margin-inline: auto;
23
- }
24
-
25
- /* Type-scale utility classes.
26
- Deliberate layer move: these classes formerly lived in the generated token
27
- layer (tokens.generated.css). The faithful-projection rewrite (ADR 0005)
28
- makes the generated layer a 1:1 value projection only — it emits the
29
- per-property --nc-type-<scale>-* tokens and emits no classes. The class API
30
- is restored here in the foundation layer, each class composing the five
31
- per-property tokens. reset.css sets no typographic property (font-family /
32
- font-size / font-weight / line-height / letter-spacing), so this tokens ->
33
- foundation precedence flip has zero rendered delta today; the move is
34
- intentional and recorded so a future reset rule cannot silently win. */
35
- .nc-type-display-xl {
36
- font-family: var(--nc-type-display-xl-font-family);
37
- font-size: var(--nc-type-display-xl-font-size);
38
- font-weight: var(--nc-type-display-xl-font-weight);
39
- line-height: var(--nc-type-display-xl-line-height);
40
- letter-spacing: var(--nc-type-display-xl-letter-spacing);
41
- }
42
-
43
- .nc-type-display-lg {
44
- font-family: var(--nc-type-display-lg-font-family);
45
- font-size: var(--nc-type-display-lg-font-size);
46
- font-weight: var(--nc-type-display-lg-font-weight);
47
- line-height: var(--nc-type-display-lg-line-height);
48
- letter-spacing: var(--nc-type-display-lg-letter-spacing);
49
- }
50
-
51
- .nc-type-display-md {
52
- font-family: var(--nc-type-display-md-font-family);
53
- font-size: var(--nc-type-display-md-font-size);
54
- font-weight: var(--nc-type-display-md-font-weight);
55
- line-height: var(--nc-type-display-md-line-height);
56
- letter-spacing: var(--nc-type-display-md-letter-spacing);
57
- }
58
-
59
- .nc-type-display-sm {
60
- font-family: var(--nc-type-display-sm-font-family);
61
- font-size: var(--nc-type-display-sm-font-size);
62
- font-weight: var(--nc-type-display-sm-font-weight);
63
- line-height: var(--nc-type-display-sm-line-height);
64
- letter-spacing: var(--nc-type-display-sm-letter-spacing);
65
- }
66
-
67
- .nc-type-title-lg {
68
- font-family: var(--nc-type-title-lg-font-family);
69
- font-size: var(--nc-type-title-lg-font-size);
70
- font-weight: var(--nc-type-title-lg-font-weight);
71
- line-height: var(--nc-type-title-lg-line-height);
72
- letter-spacing: var(--nc-type-title-lg-letter-spacing);
73
- }
74
-
75
- .nc-type-title-md {
76
- font-family: var(--nc-type-title-md-font-family);
77
- font-size: var(--nc-type-title-md-font-size);
78
- font-weight: var(--nc-type-title-md-font-weight);
79
- line-height: var(--nc-type-title-md-line-height);
80
- letter-spacing: var(--nc-type-title-md-letter-spacing);
81
- }
82
-
83
- .nc-type-title-sm {
84
- font-family: var(--nc-type-title-sm-font-family);
85
- font-size: var(--nc-type-title-sm-font-size);
86
- font-weight: var(--nc-type-title-sm-font-weight);
87
- line-height: var(--nc-type-title-sm-line-height);
88
- letter-spacing: var(--nc-type-title-sm-letter-spacing);
89
- }
90
-
91
- .nc-type-body-lg {
92
- font-family: var(--nc-type-body-lg-font-family);
93
- font-size: var(--nc-type-body-lg-font-size);
94
- font-weight: var(--nc-type-body-lg-font-weight);
95
- line-height: var(--nc-type-body-lg-line-height);
96
- letter-spacing: var(--nc-type-body-lg-letter-spacing);
97
- }
98
-
99
- .nc-type-body-md {
100
- font-family: var(--nc-type-body-md-font-family);
101
- font-size: var(--nc-type-body-md-font-size);
102
- font-weight: var(--nc-type-body-md-font-weight);
103
- line-height: var(--nc-type-body-md-line-height);
104
- letter-spacing: var(--nc-type-body-md-letter-spacing);
105
- }
106
-
107
- .nc-type-body-md-strong {
108
- font-family: var(--nc-type-body-md-strong-font-family);
109
- font-size: var(--nc-type-body-md-strong-font-size);
110
- font-weight: var(--nc-type-body-md-strong-font-weight);
111
- line-height: var(--nc-type-body-md-strong-line-height);
112
- letter-spacing: var(--nc-type-body-md-strong-letter-spacing);
113
- }
114
-
115
- .nc-type-body-sm {
116
- font-family: var(--nc-type-body-sm-font-family);
117
- font-size: var(--nc-type-body-sm-font-size);
118
- font-weight: var(--nc-type-body-sm-font-weight);
119
- line-height: var(--nc-type-body-sm-line-height);
120
- letter-spacing: var(--nc-type-body-sm-letter-spacing);
121
- }
122
-
123
- .nc-type-body-sm-strong {
124
- font-family: var(--nc-type-body-sm-strong-font-family);
125
- font-size: var(--nc-type-body-sm-strong-font-size);
126
- font-weight: var(--nc-type-body-sm-strong-font-weight);
127
- line-height: var(--nc-type-body-sm-strong-line-height);
128
- letter-spacing: var(--nc-type-body-sm-strong-letter-spacing);
129
- }
130
-
131
- .nc-type-caption {
132
- font-family: var(--nc-type-caption-font-family);
133
- font-size: var(--nc-type-caption-font-size);
134
- font-weight: var(--nc-type-caption-font-weight);
135
- line-height: var(--nc-type-caption-line-height);
136
- letter-spacing: var(--nc-type-caption-letter-spacing);
137
- }
138
-
139
- .nc-type-caption-strong {
140
- font-family: var(--nc-type-caption-strong-font-family);
141
- font-size: var(--nc-type-caption-strong-font-size);
142
- font-weight: var(--nc-type-caption-strong-font-weight);
143
- line-height: var(--nc-type-caption-strong-line-height);
144
- letter-spacing: var(--nc-type-caption-strong-letter-spacing);
145
- }
146
-
147
- .nc-type-caption-mono {
148
- font-family: var(--nc-type-caption-mono-font-family);
149
- font-size: var(--nc-type-caption-mono-font-size);
150
- font-weight: var(--nc-type-caption-mono-font-weight);
151
- line-height: var(--nc-type-caption-mono-line-height);
152
- letter-spacing: var(--nc-type-caption-mono-letter-spacing);
153
- }
154
-
155
- .nc-type-code {
156
- font-family: var(--nc-type-code-font-family);
157
- font-size: var(--nc-type-code-font-size);
158
- font-weight: var(--nc-type-code-font-weight);
159
- line-height: var(--nc-type-code-line-height);
160
- letter-spacing: var(--nc-type-code-letter-spacing);
161
- }
162
-
163
- .nc-type-button-md {
164
- font-family: var(--nc-type-button-md-font-family);
165
- font-size: var(--nc-type-button-md-font-size);
166
- font-weight: var(--nc-type-button-md-font-weight);
167
- line-height: var(--nc-type-button-md-line-height);
168
- letter-spacing: var(--nc-type-button-md-letter-spacing);
169
- }
170
-
171
- .nc-type-button-lg {
172
- font-family: var(--nc-type-button-lg-font-family);
173
- font-size: var(--nc-type-button-lg-font-size);
174
- font-weight: var(--nc-type-button-lg-font-weight);
175
- line-height: var(--nc-type-button-lg-line-height);
176
- letter-spacing: var(--nc-type-button-lg-letter-spacing);
177
- }