@hirobius/design-system 0.21.0 → 0.23.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 (117) hide show
  1. package/AGENTS.md +13 -1
  2. package/CHANGELOG.md +1043 -0
  3. package/CONSUMING.md +25 -11
  4. package/DESIGN.md +24 -24
  5. package/MIGRATIONS.md +603 -0
  6. package/NOTICE.md +1 -1
  7. package/README.md +22 -12
  8. package/UPGRADING.md +243 -0
  9. package/codemods/hds-prefix.mjs +28 -13
  10. package/codemods/jsx-fold.mjs +28 -13
  11. package/codemods/lib/atomic-write.mjs +28 -0
  12. package/codemods/lib/installed-version.mjs +354 -0
  13. package/codemods/lib/project.mjs +395 -0
  14. package/codemods/lib/record.mjs +110 -0
  15. package/codemods/lib/scan.mjs +323 -0
  16. package/codemods/lib/semver.mjs +57 -0
  17. package/codemods/not-found-pattern.mjs +3 -3
  18. package/codemods/patterns-subpath.mjs +28 -12
  19. package/codemods/registry.mjs +67 -0
  20. package/codemods/tile-grid.mjs +3 -3
  21. package/codemods/upgrade.mjs +909 -0
  22. package/dist/chunks/{empty-state-DNoThgfV.js → empty-state-ChC_xZfg.js} +109 -92
  23. package/dist/chunks/{form-By82qZcC.js → form-zCZ_B83I.js} +16 -16
  24. package/dist/css-contract.json +1 -0
  25. package/dist/fonts/ibm-plex-mono-400.woff2 +0 -0
  26. package/dist/fonts.css +5 -5
  27. package/dist/form.js +1 -1
  28. package/dist/hirobius-ui.js +1254 -1181
  29. package/dist/manifest.js +6 -5
  30. package/dist/patterns.js +164 -162
  31. package/dist/styles.css +1 -1
  32. package/dist/tokens.css +1 -1
  33. package/dist/tokens.js +14 -1
  34. package/dist/types/src/app/components/alert-dialog.d.ts +1 -1
  35. package/dist/types/src/app/components/alert.d.ts +1 -1
  36. package/dist/types/src/app/components/asset-img.d.ts +2 -1
  37. package/dist/types/src/app/components/avatar-group.d.ts +1 -1
  38. package/dist/types/src/app/components/avatar.d.ts +1 -1
  39. package/dist/types/src/app/components/badge.d.ts +1 -1
  40. package/dist/types/src/app/components/blockquote.d.ts +1 -1
  41. package/dist/types/src/app/components/breadcrumb.d.ts +1 -1
  42. package/dist/types/src/app/components/button.d.ts +2 -2
  43. package/dist/types/src/app/components/callout.d.ts +3 -2
  44. package/dist/types/src/app/components/card.d.ts +6 -4
  45. package/dist/types/src/app/components/checkbox.d.ts +1 -1
  46. package/dist/types/src/app/components/code-block.d.ts +2 -1
  47. package/dist/types/src/app/components/combobox.d.ts +2 -2
  48. package/dist/types/src/app/components/data-table-section.d.ts +2 -1
  49. package/dist/types/src/app/components/destructive-section.d.ts +2 -1
  50. package/dist/types/src/app/components/dialog.d.ts +1 -1
  51. package/dist/types/src/app/components/disclosure.d.ts +1 -1
  52. package/dist/types/src/app/components/divider.d.ts +2 -2
  53. package/dist/types/src/app/components/empty-state.d.ts +1 -1
  54. package/dist/types/src/app/components/field.d.ts +1 -1
  55. package/dist/types/src/app/components/form-actions.d.ts +2 -1
  56. package/dist/types/src/app/components/form.d.ts +2 -1
  57. package/dist/types/src/app/components/grid.d.ts +1 -1
  58. package/dist/types/src/app/components/hds-tooltip.d.ts +1 -1
  59. package/dist/types/src/app/components/icon.d.ts +2 -2
  60. package/dist/types/src/app/components/inline-link.d.ts +1 -1
  61. package/dist/types/src/app/components/input.d.ts +1 -1
  62. package/dist/types/src/app/components/kbd.d.ts +1 -1
  63. package/dist/types/src/app/components/menu.d.ts +1 -1
  64. package/dist/types/src/app/components/metadata-list.d.ts +1 -1
  65. package/dist/types/src/app/components/metric-tiles.d.ts +3 -1
  66. package/dist/types/src/app/components/page-header.d.ts +1 -0
  67. package/dist/types/src/app/components/page.d.ts +1 -0
  68. package/dist/types/src/app/components/pagination.d.ts +1 -1
  69. package/dist/types/src/app/components/popover.d.ts +1 -1
  70. package/dist/types/src/app/components/progress.d.ts +1 -1
  71. package/dist/types/src/app/components/radio.d.ts +1 -1
  72. package/dist/types/src/app/components/reveal.d.ts +1 -0
  73. package/dist/types/src/app/components/select.d.ts +1 -1
  74. package/dist/types/src/app/components/skeleton.d.ts +1 -1
  75. package/dist/types/src/app/components/slider.d.ts +1 -1
  76. package/dist/types/src/app/components/spinner.d.ts +1 -1
  77. package/dist/types/src/app/components/stack.d.ts +1 -1
  78. package/dist/types/src/app/components/stat.d.ts +1 -1
  79. package/dist/types/src/app/components/status-list-item.d.ts +1 -1
  80. package/dist/types/src/app/components/status-tile.d.ts +1 -1
  81. package/dist/types/src/app/components/table.d.ts +1 -1
  82. package/dist/types/src/app/components/tabs.d.ts +4 -2
  83. package/dist/types/src/app/components/tag.d.ts +1 -1
  84. package/dist/types/src/app/components/text.d.ts +1 -1
  85. package/dist/types/src/app/components/textarea.d.ts +1 -1
  86. package/dist/types/src/app/components/timestamp.d.ts +1 -1
  87. package/dist/types/src/app/components/toast.d.ts +1 -1
  88. package/dist/types/src/app/components/toggle.d.ts +1 -1
  89. package/dist/types/src/app/context/hds-theme.d.ts +1 -1
  90. package/dist/types/src/app/design-system/generated-token-refs.d.ts +13 -0
  91. package/dist/types/src/app/design-system/generated-token-values.d.ts +14 -1
  92. package/dist/types/src/app/hooks/useInteractionState.d.ts +7 -1
  93. package/dist/types/src/index.d.ts +126 -32
  94. package/dist/variables.css +33 -22
  95. package/docs/CONSUMING.md +2 -2
  96. package/hirobius.tokens.json +173 -79
  97. package/llms.txt +29 -7
  98. package/mcp/catalog.mjs +10 -7
  99. package/mcp/core-set.mjs +66 -0
  100. package/mcp/guide.mjs +9 -52
  101. package/package.json +28 -11
  102. package/public/hds-manifest.json +365 -207
  103. package/public/llms/components.txt +1 -1
  104. package/public/llms-full.txt +54 -32
  105. package/public/llms.txt +29 -7
  106. package/src/app/data/component-api.json +104 -71
  107. package/upgrade/index.json +215 -0
  108. package/upgrade/releases/0.17.0.json +962 -0
  109. package/upgrade/releases/0.18.0.json +8 -0
  110. package/upgrade/releases/0.19.0.json +233 -0
  111. package/upgrade/releases/0.19.1.json +8 -0
  112. package/upgrade/releases/0.20.0.json +5108 -0
  113. package/upgrade/releases/0.21.0.json +538 -0
  114. package/upgrade/releases/0.22.0.json +94 -0
  115. package/upgrade/releases/0.23.0.json +259 -0
  116. package/upgrade/schema.json +1102 -0
  117. package/dist/fonts/geist-mono-400.woff2 +0 -0
package/CONSUMING.md CHANGED
@@ -29,7 +29,7 @@ version keeps the `LucideIcon` type identical).
29
29
  ```tsx
30
30
  import { Button, Card, Dialog } from '@hirobius/design-system';
31
31
  import '@hirobius/design-system/tokens.css'; // required — design tokens as CSS vars
32
- import '@hirobius/design-system/fonts.css'; // optional — the HDS brand fonts (Satoshi, Geist Mono)
32
+ import '@hirobius/design-system/fonts.css'; // optional — the HDS brand fonts (Satoshi, IBM Plex Mono)
33
33
 
34
34
  export function Example() {
35
35
  return (
@@ -45,7 +45,7 @@ Available subpaths:
45
45
  | Import | What |
46
46
  | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
47
47
  | `@hirobius/design-system` | The 43-component core set ([README → What belongs in the system](README.md#what-belongs-in-the-system)), the rest of the allow-list and the templates; the `pattern` tier is only in `/patterns` |
48
- | `@hirobius/design-system/fonts.css` | Optional brand fonts (Satoshi, Geist Mono); woff2 files ship in the package, relative URLs, `font-display: swap` |
48
+ | `@hirobius/design-system/fonts.css` | Optional brand fonts (Satoshi, IBM Plex Mono); woff2 files ship in the package, relative URLs, `font-display: swap` |
49
49
  | `@hirobius/design-system/tokens.css` | Token CSS variables (import once at app root) |
50
50
  | `@hirobius/design-system/tokens` | Token values as TS constants |
51
51
  | `@hirobius/design-system/cn` | `cn()` class-merge helper |
@@ -108,18 +108,32 @@ The same files are served at <https://hirobius-design-system.vercel.app/llms.txt
108
108
 
109
109
  ## 3. Receiving updates
110
110
 
111
- Releases follow [semver](https://semver.org/) and are tracked in
112
- `CHANGELOG.md`. To update:
111
+ Releases follow [semver](https://semver.org/). Below 1.0 a breaking change
112
+ ships in a 0.x minor, which `pnpm update` and a caret range such as `^0.21`
113
+ never pick up, so upgrade to an exact version.
114
+
115
+ From 0.22.0, one command does it:
113
116
 
114
117
  ```bash
115
- pnpm update @hirobius/design-system # latest within your version range
118
+ npx @hirobius/design-system@latest upgrade
116
119
  ```
117
120
 
118
- For a breaking release, bump the version explicitly and review the CHANGELOG
119
- entry. Before 1.0 a breaking change (a removed export or token) ships in a 0.x
120
- minor, which a caret range such as `^0.19` never picks up; from 1.0 on it ships
121
- in a major. Each removal is listed in [MIGRATIONS.md](MIGRATIONS.md) with its
122
- replacement and, where one applies, a codemod (ADR-014).
121
+ It finds the version you have, moves you to the newest release, runs the
122
+ codemods and lists what is left to do by hand.
123
+
124
+ Until then, upgrade by hand with [UPGRADING.md](UPGRADING.md), which also ships
125
+ in the package:
126
+
127
+ 1. Install the exact version: `pnpm add @hirobius/design-system@<version>`.
128
+ 2. For each release you cross, run the codemods UPGRADING.md lists under
129
+ "Fixed for you".
130
+ 3. Work through its "Do by hand" list.
131
+
132
+ UPGRADING.md covers every release after 0.16.0. From an older version, first
133
+ reach 0.16.0 with the notes in [CHANGELOG.md](CHANGELOG.md);
134
+ [MIGRATIONS.md](MIGRATIONS.md) has longer guides for the big releases.
135
+ `CHANGELOG.md` has the full notes, and each section from 0.22.0 on opens with
136
+ an Upgrade block.
123
137
 
124
138
  ---
125
139
 
@@ -127,7 +141,7 @@ replacement and, where one applies, a codemod (ADR-014).
127
141
 
128
142
  ```bash
129
143
  pnpm changeset add # record a patch/minor/major bump + notes
130
- pnpm changeset:version # apply bumps + regenerate CHANGELOG.md + refresh docs/api/api-baseline.json
144
+ pnpm changeset:version # apply bumps, regenerate CHANGELOG.md, record the release (scripts/upgrade/compile.mjs) and refresh docs/api/api-baseline.json
131
145
  # commit + push to main → the Release workflow publishes to public npm
132
146
  ```
133
147
 
package/DESIGN.md CHANGED
@@ -6,14 +6,14 @@ A machine- and human-readable specification of the Hirobius Design System for AI
6
6
 
7
7
  ## Overview
8
8
 
9
- Hirobius is a clean, systems-first visual language that bridges digital precision and physical fabrication through a high-contrast monochromatic palette and a single accent that each tenant sets — neutral by default (#208). Its personality is disciplined, tactile, and quietly technical: structure is explicit, motion is purposeful, and visual noise is stripped away. Whitespace is treated as material, not leftover space, so every screen should feel deliberate, breathable, and exact.
9
+ Hirobius is a clean, systems-first visual language that bridges digital precision and physical fabrication through a high-contrast monochromatic neutral palette and a single accent that each tenant sets — a bright apple green by default. Its personality is disciplined, tactile, and quietly technical: structure is explicit, motion is purposeful, and visual noise is stripped away. Whitespace is treated as material, not leftover space, so every screen should feel deliberate, breathable, and exact.
10
10
 
11
11
  ## Colors
12
12
 
13
13
  <!-- auto:start:colors -->
14
14
  **One accent — one neutral system.**
15
15
 
16
- - **Accent** (`#111111`): CTAs, active states, selected focus rings, and the single brand accent. `semantic.accent.rest` — a per-tenant knob, not a fixed hue (#208).
16
+ - **Accent** (`#66B239`): CTAs, active states, selected focus rings, and the single brand accent. `semantic.accent.rest` — a per-tenant knob, not a fixed hue (#208).
17
17
  - **Neutral**: backgrounds, surfaces, borders, text. True monochromatic — `primitive.color.neutral.50` through `950`. Use `semantic.color.surface.*`, `semantic.color.content.*`, `semantic.color.border.*`; never reach directly for primitives in components.
18
18
  - **Feedback — Error** (`#B91C1C`): destructive confirms, error banners, validation failures. `semantic.color.feedback.error`.
19
19
  - **Feedback — Success** (`#047857`): positive confirmations, completed states. `semantic.color.feedback.success`.
@@ -30,7 +30,7 @@ HDS ships three typefaces — each with a distinct and exclusive role:
30
30
 
31
31
  - **Display / Heading font**: Satoshi. Bound exclusively to the `display` and `title` styles. Never used for body copy or UI labels.
32
32
  - **Body / UI font**: Satoshi. All prose, labels, small text, captions, and UI copy.
33
- - **Mono font**: Geist Mono. Reserved for tokens, code, technical callouts, and metric readouts.
33
+ - **Mono font**: IBM Plex Mono. Reserved for tokens, code, technical callouts, and metric readouts.
34
34
 
35
35
  Weights declared: `400` regular, `500` medium, `700` bold. Heading styles (display · title) use `700` bold; body, UI, and caption use `400` regular / `500` medium.
36
36
 
@@ -92,14 +92,14 @@ Depth is communicated through 4 elevation roles bundled by `semantic.elevation.*
92
92
 
93
93
  ### Elevation roles
94
94
 
95
- | Surface | Role token | Background | Shadow | Border |
96
- | -------------------------------------- | ----------------------------- | ----------------- | ----------------- | ------------------- |
97
- | Card / panel resting | `semantic.elevation.flat` | `surface.page` | none | `border.subtle` 1px |
98
- | Card / panel lifted (interactive only) | `semantic.elevation.raised` | `surface.raised` | `shadow.subtle` | none |
99
- | Popover / dropdown / tooltip | `semantic.elevation.floating` | `surface.raised` | `shadow.floating` | none |
100
- | Dialog / sheet / modal | `semantic.elevation.overlay` | `surface.overlay` | `shadow.overlay` | none |
95
+ | Surface | Role token | Background | Shadow | Border |
96
+ | -------------------------------------- | ----------------------------- | ----------------- | ----------------- | -------------------------------------------------------- |
97
+ | Card / panel resting | `semantic.elevation.flat` | `surface.page` | none | none by default; opt-in 1px (`bordered`/`tone`/`accent`) |
98
+ | Card / panel lifted (interactive only) | `semantic.elevation.raised` | `surface.raised` | `shadow.subtle` | none |
99
+ | Popover / dropdown / tooltip | `semantic.elevation.floating` | `surface.raised` | `shadow.floating` | none |
100
+ | Dialog / sheet / modal | `semantic.elevation.overlay` | `surface.overlay` | `shadow.overlay` | none |
101
101
 
102
- Cards default to `flat`. They lift to `raised` only on interactive hover or when explicitly elevated above siblings. Never combine `raised` with a border — depth is one mechanism (border OR shadow), not both stacked.
102
+ Cards default to `flat`. They lift to `raised` only on interactive hover or when explicitly elevated above siblings. Never combine `raised` with a border — depth is one mechanism (border OR shadow), not both stacked. The default `Card` variant is **borderless** (12d-3 outline rule: repeated outlined cards crowd a layout, so the edge is not the default) — a resting 1px border is **opt-in** via `bordered`, a feedback `tone`, or the `accent` variant (`border.default` / feedback color / `border.accent` respectively). Rely on whitespace, dividers, and rails for grouping; reach for `bordered` only for a genuinely discrete standalone object.
103
103
 
104
104
  Overlays (Dialog, AlertDialog, Menu, Popover, Select, Tooltip) portal into the nearest `data-hds` scope, so they inherit its theme (for example `<div data-hds data-theme="dark">`); pass `container` on the Content part to override.
105
105
 
@@ -142,9 +142,9 @@ Default most interactive feedback to `productive` (150ms, decelerate). Reserve `
142
142
  | --- | --- | --- | --- |
143
143
  | **Buttons** (`Button`) | `8px` (`semantic.radius.action`) | default · hover · focus · active · disabled · loading | Three variants: primary (accent-filled), secondary (outline), tertiary (ghost). Primary uses `semantic.accent.*` ramp per state. Pressed is a 5% `semantic.color.state.pressed.overlay` wash over the fill (`role.pressed-overlay`: black in light, white in dark), not a brightness filter. Icon-only buttons (`iconOnly`) follow the same token surface. Icon-only actions use `Button iconOnly` with a `label` and an `Icon` from `@hirobius/design-system/icons` in `iconLeft`. |
144
144
  | **Inputs** (`Input`) | `8px` (`semantic.radius.action`) | default · focus · filled · error · disabled · loading | Border-driven treatment; no filled background by default. Focus uses `semantic.color.border.accent` plus a 2px outline offset. Error swaps to `component.input.borderError`. |
145
- | **Cards** (`Card`) | `12px` (`rounded-lg`, role radius + 4px) | default · hover (optional parallax) · pressed (when interactive) | Cards default to `elevation.flat` (1px border `border.subtle`, no shadow). Interactive cards lift to `elevation.raised` (shadow.subtle, no border) on hover. Bind via `semantic.elevation.{role}` — never raw box-shadow values. Radius: `rounded-lg` (role radius + 4 px, follows the tenant knob) — never a hard-coded value. Padding: `var(--semantic-space-surface-padding)`. Title: `heading3`. Meta: `caption` + `var(--semantic-color-content-secondary)`. Hover (interactive): `scale(1.02)` transform + lift to raised. Never: gradients, glow, frosted glass, tinted surfaces, decorative overlays, or inner shadows. |
145
+ | **Cards** (`Card`) | `12px` (`rounded-lg`, role radius + 4px) | default · hover (optional parallax) · pressed (when interactive) | Cards default to `elevation.flat` (borderless by default; an opt-in 1px border via `bordered`/`tone`/`accent`, no shadow). Interactive cards lift to `elevation.raised` (shadow.subtle, no border) on hover. Bind via `semantic.elevation.{role}` — never raw box-shadow values. Radius: `rounded-lg` (role radius + 4 px, follows the tenant knob) — never a hard-coded value. Padding: `var(--semantic-space-surface-padding)`. Title: `heading3`. Meta: `caption` + `var(--semantic-color-content-secondary)`. Hover (interactive): `scale(1.02)` transform + lift to raised. Never: gradients, glow, frosted glass, tinted surfaces, decorative overlays, or inner shadows. |
146
146
  | **Badges** (`Badge`) | `8px` (`primitive.radius.4`) | neutral · accent · feedback (error/success/warning/info) | Single-line status markers. Feedback colors come from `semantic.color.feedback.*`. Never used as decorative chrome. |
147
- | **Alerts** (`Alert`) | `8px` (via `hds.borderRadius.4`) | info · success · warning · error | Inline banner pattern with icon + message + optional action. Tone is carried by left-border color, not by tinted fills. |
147
+ | **Alerts** (`Alert`) | `8px` (via `hds.borderRadius.4`) | info · success · warning · error | Inline banner pattern with icon + message + optional action. Tone is carried by a tinted feedback fill (`bg-feedback-bg-*`, matching Badge), NOT a left-border stripe. Callout shares this fill language and differs only by role (no icon, no status role, optional italic). |
148
148
  | **Disclosures** (`Disclosure`) | `8px` (`hds.borderRadius.action`) | collapsed · expanded · hover · focus | Accordion primitive. Expansion uses `semantic.motion.productive`; no spring bounce. Dividers follow `semantic.color.border.subtle`. |
149
149
  | **Toggles** (`Toggle`) | `full` (pill track + circular thumb) | off · on · focus · disabled | Accent-filled track in the on state; neutral track otherwise. Track + thumb transitions share `semantic.motion.productive`. |
150
150
  | **Segmented Control** (`SegmentedControl`) | Outer `12px` · inner segments `8px` | rest · hover · selected · disabled | Selected segment fills with the accent; unselected segments are transparent. Use for 2–5 mutually exclusive options; beyond that, prefer `Select`. |
@@ -156,16 +156,16 @@ See `public/hds-manifest.json` and `src/app/data/component-api.json` for the ful
156
156
 
157
157
  Every HDS card surface must conform to this anatomy exactly. No creative interpretation is permitted on any of these properties.
158
158
 
159
- | Property | Required value | Forbidden |
160
- | ------------------------ | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
161
- | Background | `var(--semantic-color-surface-raised)` | Any gradient, tinted fill, or custom color |
162
- | Border | `1px solid var(--semantic-color-border-default)` | `box-shadow` as an elevation substitute |
163
- | Border radius | `rounded-lg` (`role.radius` + 4 px: 12 px by default, follows the tenant) | `var(--component-card-radius)`, `rounded-full`, or any hard-coded value |
164
- | Padding | `var(--semantic-space-component-padding)` or `<HdsSurface padding="component">` | Raw pixel values or ad hoc insets |
165
- | Shadow | Resting cards: none (`elevation.flat`). Interactive lifted state: `shadow.subtle` via `elevation.raised` | Raw `box-shadow` values, `drop-shadow`, glow, or any depth effect not bound to a role token |
166
- | Title | `hds.typeStyles.title` / `<Text variant="title">` | Any other type style for the primary card heading |
167
- | Subtitle / meta | `hds.typeStyles.caption` + `var(--semantic-color-content-secondary)` | Primary content color or body size for secondary text |
168
- | Hover (interactive only) | `transform: scale(1.02)` | Background fill change, border color shift, or opacity fade on hover |
159
+ | Property | Required value | Forbidden |
160
+ | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
161
+ | Background | `var(--semantic-color-surface-raised)` | Any gradient, tinted fill, or custom color |
162
+ | Border | Default variant: **borderless**. Opt-in (`bordered`/`tone`/`accent`): 1px solid the matching token (`border.default` / feedback color / `border.accent`). Never border + shadow together. | `box-shadow` as an elevation substitute; a border on the default variant (use `bordered`) |
163
+ | Border radius | `rounded-lg` (`role.radius` + 4 px: 12 px by default, follows the tenant) | `var(--component-card-radius)`, `rounded-full`, or any hard-coded value |
164
+ | Padding | `var(--semantic-space-component-padding)` or `<HdsSurface padding="component">` | Raw pixel values or ad hoc insets |
165
+ | Shadow | Resting cards: none (`elevation.flat`). Interactive lifted state: `shadow.subtle` via `elevation.raised` | Raw `box-shadow` values, `drop-shadow`, glow, or any depth effect not bound to a role token |
166
+ | Title | `hds.typeStyles.title` / `<Text variant="title">` | Any other type style for the primary card heading |
167
+ | Subtitle / meta | `hds.typeStyles.caption` + `var(--semantic-color-content-secondary)` | Primary content color or body size for secondary text |
168
+ | Hover (interactive only) | `transform: scale(1.02)` | Background fill change, border color shift, or opacity fade on hover |
169
169
 
170
170
  Never use on any card surface: gradient backgrounds, glow effects, frosted glass (`backdrop-filter: blur`), decorative overlays, gradient borders, colored or tinted backgrounds, inner shadows, patterned fills, shimmer or noise effects.
171
171
 
@@ -209,7 +209,7 @@ Three more needs are props on an existing component, not components of their own
209
209
  ## Do's and Don'ts
210
210
 
211
211
  - Don't invent new corner behavior for interactive controls; buttons, inputs, disclosures, and similar action surfaces should follow the shared action radius (`semantic.radius.action`).
212
- - Don't introduce additional accent hues; Hirobius uses exactly one accent, resolved from `semantic.accent.rest`, over a true monochromatic neutral system. The accent is a per-tenant knob (#208) and defaults to neutral — read the token, never assume a hue.
212
+ - Don't introduce additional accent hues; Hirobius uses exactly one accent, resolved from `semantic.accent.rest`, over a true monochromatic neutral system. The accent is a per-tenant knob (#208) and defaults to a bright apple green — read the token, never assume a hue.
213
213
  - Don't tint neutrals warm or cool; greys should remain genuinely neutral and high-contrast.
214
214
  - Don't reach for shadow values directly — bind to a `semantic.elevation.*` role so surface + shadow + border stay paired. Cards default to `flat` (border, no shadow). Popovers/tooltips/dropdowns use `floating`. Dialogs/sheets use `overlay`.
215
215
  - Don't hardcode colors, spacing, radius, or typography values when governed tokens already exist.
@@ -228,6 +228,6 @@ Unresolved rules that the live repo cannot yet answer confidently are tracked in
228
228
  <!-- auto:start:build-meta -->
229
229
  ---
230
230
 
231
- > Generated from `hirobius.tokens.json` (389 tokens) and `public/hds-manifest.json` by `scripts/build-design-md.mjs`.
231
+ > Generated from `hirobius.tokens.json` (400 tokens) and `public/hds-manifest.json` by `scripts/build-design-md.mjs`.
232
232
  > Hand-edit `DESIGN.source.md`; this file (`DESIGN.md`) is overwritten by `pnpm tokens`.
233
233
  <!-- auto:end:build-meta -->