@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.
- package/AGENTS.md +13 -1
- package/CHANGELOG.md +1043 -0
- package/CONSUMING.md +25 -11
- package/DESIGN.md +24 -24
- package/MIGRATIONS.md +603 -0
- package/NOTICE.md +1 -1
- package/README.md +22 -12
- package/UPGRADING.md +243 -0
- package/codemods/hds-prefix.mjs +28 -13
- package/codemods/jsx-fold.mjs +28 -13
- package/codemods/lib/atomic-write.mjs +28 -0
- package/codemods/lib/installed-version.mjs +354 -0
- package/codemods/lib/project.mjs +395 -0
- package/codemods/lib/record.mjs +110 -0
- package/codemods/lib/scan.mjs +323 -0
- package/codemods/lib/semver.mjs +57 -0
- package/codemods/not-found-pattern.mjs +3 -3
- package/codemods/patterns-subpath.mjs +28 -12
- package/codemods/registry.mjs +67 -0
- package/codemods/tile-grid.mjs +3 -3
- package/codemods/upgrade.mjs +909 -0
- package/dist/chunks/{empty-state-DNoThgfV.js → empty-state-ChC_xZfg.js} +109 -92
- package/dist/chunks/{form-By82qZcC.js → form-zCZ_B83I.js} +16 -16
- package/dist/css-contract.json +1 -0
- package/dist/fonts/ibm-plex-mono-400.woff2 +0 -0
- package/dist/fonts.css +5 -5
- package/dist/form.js +1 -1
- package/dist/hirobius-ui.js +1254 -1181
- package/dist/manifest.js +6 -5
- package/dist/patterns.js +164 -162
- package/dist/styles.css +1 -1
- package/dist/tokens.css +1 -1
- package/dist/tokens.js +14 -1
- package/dist/types/src/app/components/alert-dialog.d.ts +1 -1
- package/dist/types/src/app/components/alert.d.ts +1 -1
- package/dist/types/src/app/components/asset-img.d.ts +2 -1
- package/dist/types/src/app/components/avatar-group.d.ts +1 -1
- package/dist/types/src/app/components/avatar.d.ts +1 -1
- package/dist/types/src/app/components/badge.d.ts +1 -1
- package/dist/types/src/app/components/blockquote.d.ts +1 -1
- package/dist/types/src/app/components/breadcrumb.d.ts +1 -1
- package/dist/types/src/app/components/button.d.ts +2 -2
- package/dist/types/src/app/components/callout.d.ts +3 -2
- package/dist/types/src/app/components/card.d.ts +6 -4
- package/dist/types/src/app/components/checkbox.d.ts +1 -1
- package/dist/types/src/app/components/code-block.d.ts +2 -1
- package/dist/types/src/app/components/combobox.d.ts +2 -2
- package/dist/types/src/app/components/data-table-section.d.ts +2 -1
- package/dist/types/src/app/components/destructive-section.d.ts +2 -1
- package/dist/types/src/app/components/dialog.d.ts +1 -1
- package/dist/types/src/app/components/disclosure.d.ts +1 -1
- package/dist/types/src/app/components/divider.d.ts +2 -2
- package/dist/types/src/app/components/empty-state.d.ts +1 -1
- package/dist/types/src/app/components/field.d.ts +1 -1
- package/dist/types/src/app/components/form-actions.d.ts +2 -1
- package/dist/types/src/app/components/form.d.ts +2 -1
- package/dist/types/src/app/components/grid.d.ts +1 -1
- package/dist/types/src/app/components/hds-tooltip.d.ts +1 -1
- package/dist/types/src/app/components/icon.d.ts +2 -2
- package/dist/types/src/app/components/inline-link.d.ts +1 -1
- package/dist/types/src/app/components/input.d.ts +1 -1
- package/dist/types/src/app/components/kbd.d.ts +1 -1
- package/dist/types/src/app/components/menu.d.ts +1 -1
- package/dist/types/src/app/components/metadata-list.d.ts +1 -1
- package/dist/types/src/app/components/metric-tiles.d.ts +3 -1
- package/dist/types/src/app/components/page-header.d.ts +1 -0
- package/dist/types/src/app/components/page.d.ts +1 -0
- package/dist/types/src/app/components/pagination.d.ts +1 -1
- package/dist/types/src/app/components/popover.d.ts +1 -1
- package/dist/types/src/app/components/progress.d.ts +1 -1
- package/dist/types/src/app/components/radio.d.ts +1 -1
- package/dist/types/src/app/components/reveal.d.ts +1 -0
- package/dist/types/src/app/components/select.d.ts +1 -1
- package/dist/types/src/app/components/skeleton.d.ts +1 -1
- package/dist/types/src/app/components/slider.d.ts +1 -1
- package/dist/types/src/app/components/spinner.d.ts +1 -1
- package/dist/types/src/app/components/stack.d.ts +1 -1
- package/dist/types/src/app/components/stat.d.ts +1 -1
- package/dist/types/src/app/components/status-list-item.d.ts +1 -1
- package/dist/types/src/app/components/status-tile.d.ts +1 -1
- package/dist/types/src/app/components/table.d.ts +1 -1
- package/dist/types/src/app/components/tabs.d.ts +4 -2
- package/dist/types/src/app/components/tag.d.ts +1 -1
- package/dist/types/src/app/components/text.d.ts +1 -1
- package/dist/types/src/app/components/textarea.d.ts +1 -1
- package/dist/types/src/app/components/timestamp.d.ts +1 -1
- package/dist/types/src/app/components/toast.d.ts +1 -1
- package/dist/types/src/app/components/toggle.d.ts +1 -1
- package/dist/types/src/app/context/hds-theme.d.ts +1 -1
- package/dist/types/src/app/design-system/generated-token-refs.d.ts +13 -0
- package/dist/types/src/app/design-system/generated-token-values.d.ts +14 -1
- package/dist/types/src/app/hooks/useInteractionState.d.ts +7 -1
- package/dist/types/src/index.d.ts +126 -32
- package/dist/variables.css +33 -22
- package/docs/CONSUMING.md +2 -2
- package/hirobius.tokens.json +173 -79
- package/llms.txt +29 -7
- package/mcp/catalog.mjs +10 -7
- package/mcp/core-set.mjs +66 -0
- package/mcp/guide.mjs +9 -52
- package/package.json +28 -11
- package/public/hds-manifest.json +365 -207
- package/public/llms/components.txt +1 -1
- package/public/llms-full.txt +54 -32
- package/public/llms.txt +29 -7
- package/src/app/data/component-api.json +104 -71
- package/upgrade/index.json +215 -0
- package/upgrade/releases/0.17.0.json +962 -0
- package/upgrade/releases/0.18.0.json +8 -0
- package/upgrade/releases/0.19.0.json +233 -0
- package/upgrade/releases/0.19.1.json +8 -0
- package/upgrade/releases/0.20.0.json +5108 -0
- package/upgrade/releases/0.21.0.json +538 -0
- package/upgrade/releases/0.22.0.json +94 -0
- package/upgrade/releases/0.23.0.json +259 -0
- package/upgrade/schema.json +1102 -0
- 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,
|
|
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,
|
|
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/)
|
|
112
|
-
|
|
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
|
-
|
|
118
|
+
npx @hirobius/design-system@latest upgrade
|
|
116
119
|
```
|
|
117
120
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
|
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 —
|
|
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** (`#
|
|
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**:
|
|
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 | `
|
|
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 `
|
|
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
|
|
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
|
|
160
|
-
| ------------------------ |
|
|
161
|
-
| Background | `var(--semantic-color-surface-raised)`
|
|
162
|
-
| Border | `1px solid
|
|
163
|
-
| Border radius | `rounded-lg` (`role.radius` + 4 px: 12 px by default, follows the tenant)
|
|
164
|
-
| Padding | `var(--semantic-space-component-padding)` or `<HdsSurface padding="component">`
|
|
165
|
-
| Shadow | Resting cards: none (`elevation.flat`). Interactive lifted state: `shadow.subtle` via `elevation.raised`
|
|
166
|
-
| Title | `hds.typeStyles.title` / `<Text variant="title">`
|
|
167
|
-
| Subtitle / meta | `hds.typeStyles.caption` + `var(--semantic-color-content-secondary)`
|
|
168
|
-
| Hover (interactive only) | `transform: scale(1.02)`
|
|
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
|
|
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` (
|
|
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 -->
|