7k-design-system 1.1.1 → 1.2.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 (61) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/CONSUMER_GUIDE.md +32 -15
  3. package/DESIGN.md +79 -100
  4. package/README.md +17 -17
  5. package/SKILL.md +23 -25
  6. package/build/icons/icon-7kgroup-light.svg +10 -0
  7. package/build/icons/icon-7kgroup.svg +10 -0
  8. package/build/icons/icon-7kminato-light.svg +10 -0
  9. package/build/icons/icon-7kminato.svg +10 -0
  10. package/build/icons/icon-base.svg +10 -0
  11. package/build/icons/icon-inari-light.svg +10 -0
  12. package/build/icons/icon-inari.svg +10 -0
  13. package/dist/7k-design-system.css +1 -1
  14. package/dist/animations.css +1 -1
  15. package/dist/build/icons/icon-7kgroup-light.svg +10 -0
  16. package/dist/build/icons/icon-7kgroup.svg +10 -0
  17. package/dist/build/icons/icon-7kminato-light.svg +10 -0
  18. package/dist/build/icons/icon-7kminato.svg +10 -0
  19. package/dist/build/icons/icon-base.svg +10 -0
  20. package/dist/build/icons/icon-inari-light.svg +10 -0
  21. package/dist/build/icons/icon-inari.svg +10 -0
  22. package/dist/components.css +1 -1
  23. package/dist/projects.css +1 -1
  24. package/dist/react/components/Alert.d.ts +0 -1
  25. package/dist/react/components/Avatar.d.ts +2 -0
  26. package/dist/react/components/Badge.d.ts +0 -1
  27. package/dist/react/components/Button.d.ts +0 -1
  28. package/dist/react/components/Card.d.ts +0 -1
  29. package/dist/react/components/Checkbox.d.ts +0 -1
  30. package/dist/react/components/Drawer.d.ts +0 -1
  31. package/dist/react/components/Icon.d.ts +0 -1
  32. package/dist/react/components/Input.d.ts +0 -1
  33. package/dist/react/components/IsometricBackground.d.ts +0 -1
  34. package/dist/react/components/Listbox.d.ts +2 -0
  35. package/dist/react/components/Modal.d.ts +0 -1
  36. package/dist/react/components/Nav.d.ts +0 -1
  37. package/dist/react/components/Progress.d.ts +2 -0
  38. package/dist/react/components/ProjectIcon.d.ts +6 -0
  39. package/dist/react/components/Radio.d.ts +0 -1
  40. package/dist/react/components/Select.d.ts +0 -1
  41. package/dist/react/components/Skeleton.d.ts +2 -0
  42. package/dist/react/components/Spinner.d.ts +2 -0
  43. package/dist/react/components/Tabs.d.ts +0 -1
  44. package/dist/react/components/TextureOverlay.d.ts +0 -1
  45. package/dist/react/components/Toast.d.ts +0 -1
  46. package/dist/react/components/Toggle.d.ts +0 -1
  47. package/dist/react/components/Tooltip.d.ts +0 -1
  48. package/dist/react/index.cjs +1 -1
  49. package/dist/react/index.d.ts +6 -1
  50. package/dist/react/index.js +1168 -876
  51. package/dist/react/theme/ProjectProvider.d.ts +0 -1
  52. package/dist/react/theme/ThemeContext.d.ts +0 -1
  53. package/dist/react/theme/ThemeProvider.d.ts +0 -1
  54. package/dist/react/theme/projects.d.ts +1 -1
  55. package/dist/react/theme/useProject.d.ts +0 -1
  56. package/dist/react/theme/useTheme.d.ts +0 -1
  57. package/dist/react/types.d.ts +31 -7
  58. package/dist/textures.css +1 -1
  59. package/dist/tokens.css +1 -1
  60. package/package.json +18 -20
  61. package/dist/react/components/MangaPanel.d.ts +0 -3
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [1.2.0](https://github.com/7K-Group/7k-design-system/compare/v1.1.1...v1.2.0) (2026-10-08)
2
+
3
+
4
+ ### Features
5
+
6
+ * modernize design system — naming standardization, Inari project, accent-driven UI ([#65](https://github.com/7K-Group/7k-design-system/issues/65)) ([b160a60](https://github.com/7K-Group/7k-design-system/commit/b160a60b4373c6a8fb1d91446397f8cd6b84ef80))
7
+
1
8
  ## [1.1.1](https://github.com/7K-Group/7k-design-system/compare/v1.1.0...v1.1.1) (2026-08-13)
2
9
 
3
10
 
@@ -31,6 +38,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
31
38
  ## [Unreleased]
32
39
 
33
40
  ### Added
41
+ - `.btn-modern-glow-secondary` variant (cyan/per-project outline + glow) — completes the `glow-secondary` Button variant that React and the consumer guide already referenced
42
+ - `.btn-modern:disabled` / `[aria-disabled='true']` styling (40% opacity, no pointer events, glow removed) for all button variants
43
+ - `.select-native:disabled`, `.checkbox`/`.radio`/`.toggle` disabled styling (`:has(input:disabled)`, 40% opacity)
44
+ - Visible keyboard focus rings for custom `Checkbox`, `Radio`, and `Toggle` controls (`:has(input:focus-visible)`)
45
+ - Missing status variant classes: `.toast-info`, `.alert-info`, `.alert-danger` (the React `Alert` `danger` variant emitted an unstyled class), `.alert-content`, `.alert-close`, `.toast-content`, plus focus-visible styles for dismiss buttons
46
+ - `.card-static:hover` reset so `Card hover={false}` actually disables the hover lift
47
+ - `.spinner-cyan` and `.icon-box-cyan` classes (previously documented but unimplemented)
48
+ - Modal: Escape key closes, Tab focus is trapped inside the dialog while open
49
+ - Drawer: Escape key closes, focus returns to the triggering element
50
+ - Tabs: ARIA APG keyboard support (Arrow/Home/End moves selection, roving tabindex), `TabPanel` is focusable
51
+ - `tests/States.test.tsx` covering the new interaction states
34
52
  - Production-ready build pipeline with Vite, PostCSS, and autoprefixer
35
53
  - TypeScript configuration and type definitions for React UI kit
36
54
  - ESLint, Prettier, and Stylelint configurations for code quality
@@ -44,6 +62,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
44
62
  - Self-hosted Geist font strategy with CDN fallback
45
63
 
46
64
  ### Changed
65
+ - **Contrast (WCAG AA, dark theme):** `--text-tertiary` now maps to `--neutral-400` (was `--neutral-500`, 3.5–3.7:1) and `--text-disabled` to `--neutral-600` (was `--neutral-700`, 1.75:1); `.badge-neutral` uses `--status-neutral`; primary/glow button `:active` text is now white (was magenta on muted fill, 3.0:1). Visual change is subtle but visible — captions and disabled elements read slightly brighter
66
+ - `Input` with an `error` now applies the `.error` class (danger border) in addition to `aria-invalid`
67
+ - Component CSS now consumes semantic tokens instead of raw ramps (`.input:focus` → `--border-focus`; badge/toast/alert status colors → `--status-*`; `.table td`/`.modal-body` → `--text-secondary`)
68
+ - Hard-coded z-index values replaced with `--z-*` tokens in `.tooltip-content`, `.combobox-menu`, and Modal/Drawer/Tooltip inline styles
69
+ - Shimmer animation now uses theme-aware `--texture-*` tokens (works in light theme)
70
+ - Light theme: `--shadow-inset` corrected to a black inner shadow; the `prefers-color-scheme: light` media block now yields to an explicit `data-theme` attribute
71
+ - DESIGN.md, SKILL.md, and CONSUMER_GUIDE.md synced with implemented class names, button variants, modifier names, and token values
47
72
  - Converted React UI kit from plain JS to TypeScript with proper component patterns
48
73
  - Refactored CSS to eliminate hard-coded colors in favor of design tokens
49
74
  - Updated `package.json` with proper `exports`, `engines`, and `types` fields
package/CONSUMER_GUIDE.md CHANGED
@@ -72,9 +72,9 @@ import '7k-design-system/css/animations';
72
72
 
73
73
  ```html
74
74
  <!-- Buttons -->
75
- <button class="btn-modern btn-modern-primary">Primary</button>
76
- <button class="btn-modern btn-modern-secondary">Secondary</button>
77
- <button class="btn-modern btn-modern-ghost">Ghost</button>
75
+ <button class="btn btn-primary">Primary</button>
76
+ <button class="btn btn-secondary">Secondary</button>
77
+ <button class="btn btn-ghost">Ghost</button>
78
78
 
79
79
  <!-- Forms -->
80
80
  <input class="input" placeholder="Enter text" />
@@ -271,12 +271,32 @@ function ThemeAwareComponent() {
271
271
  </Modal>
272
272
  ```
273
273
 
274
+ Accessibility notes: `Modal` closes on **Escape**, traps **Tab** focus inside the dialog while open, and restores focus to the triggering element on close. Always pass `aria-labelledby` (or `aria-label`). `Drawer` supports Escape and focus restoration as well.
275
+
276
+ #### Toast
277
+
278
+ ```tsx
279
+ <Toast
280
+ variant="success" // 'default' | 'success' | 'error' | 'warning' | 'info'
281
+ onDismiss={() => setShow(false)}
282
+ >
283
+ Deployed
284
+ </Toast>
285
+ ```
286
+
287
+ Mount toasts in a fixed container at the top of your app (they use `role="status"`/`role="alert"` and the `slide-up-reveal` animation). Example container:
288
+
289
+ ```tsx
290
+ <div style={{ position: 'fixed', bottom: 24, right: 24, zIndex: 'var(--z-toast)', display: 'grid', gap: 8 }}>
291
+ {toasts.map((t) => <Toast key={t.id} {...t} />)}
292
+ </div>
293
+ ```
294
+
274
295
  #### Layout helpers
275
296
 
276
297
  ```tsx
277
298
  <TextureOverlay texture="halftone" animate>...</TextureOverlay>
278
299
  <IsometricBackground pattern="grid" animated>...</IsometricBackground>
279
- <MangaPanel frame texture="halftone" speedLine="horizontal">...</MangaPanel>
280
300
  ```
281
301
 
282
302
  #### Forms
@@ -286,9 +306,12 @@ function ThemeAwareComponent() {
286
306
  <Radio label="Option" name="group" />
287
307
  <Toggle label="Enable" checked={on} onChange={setOn} />
288
308
  <Select><option>A</option></Select>
309
+ <Listbox options={[{ value: 'a', label: 'A' }]} value={v} onChange={setV} />
289
310
  <Textarea rows={4} />
290
311
  ```
291
312
 
313
+ Form notes: passing `error` to `Input` adds the `.error` class (danger border) and wires `aria-invalid` + an alert-role message automatically (for `Textarea`/`Select`, add the `error` class and `aria-invalid` manually). Custom `Checkbox`/`Radio`/`Toggle` render a visually-hidden native input — keyboard focus shows a magenta focus ring on the custom control via `:focus-visible`. `Tabs` supports full arrow-key / Home / End navigation with roving tabindex per the ARIA tabs pattern.
314
+
292
315
  ---
293
316
 
294
317
  ## Project Customization
@@ -300,20 +323,14 @@ The parent 7K brand uses magenta primary + cyan secondary. Each sub-project can
300
323
  ```css
301
324
  /* project-neon.css */
302
325
  .project-neon {
303
- /* Circle project — cyan secondary accent */
326
+ /* 7KMinato — cyan takes over the full brand chain */
304
327
  --brand-secondary: var(--cyan-500);
305
328
  }
306
329
 
307
- /* project-grid.css */
308
- .project-grid {
309
- /* Grid project — acid green secondary accent */
310
- --brand-secondary: var(--acid-500);
311
- }
312
-
313
- /* project-ember.css */
314
- .project-ember {
315
- /* Line project — orange secondary accent */
316
- --brand-secondary: var(--ember-500);
330
+ /* project-inari.css */
331
+ .project-inari {
332
+ /* Inari — burnt orange takes over the full brand chain */
333
+ --brand-secondary: var(--inari-500);
317
334
  }
318
335
  ```
319
336
 
package/DESIGN.md CHANGED
@@ -20,7 +20,7 @@ Key constraints derived from the source:
20
20
  - **Secondary neon accent** → Cyan by default (`--brand-secondary`), dynamically themable per project via `data-project` or `ProjectProvider`.
21
21
  - **Logo** → Star-burst pattern logo in `build/logos/logo-7k.svg`: a geometric radial pattern with #FF0FF brand accent tones. Light variant at `build/logos/logo-7k-light.svg` (black polygons for light backgrounds). App icon at `build/icons/icon.svg`.
22
22
  - **Dark theme** → All surfaces start from near-black. Light theme is opt-in only.
23
- - **Project differentiation** → Child projects get their own secondary accent (solar, cyan, acid, ember) on the same dark base. The parent 7K brand uses the default cyan secondary; other projects theme `--brand-secondary` to their hue. Each Geist Pixel geometric variant pairs with one accent: Square=magenta, Circle=cyan, Grid=acid, Line=ember, Triangle=solar.
23
+ - **Project differentiation** → Each project gets its own secondary accent on the same dark base: **magenta = 7KGroup** (parent, also `--brand-primary`), **cyan = 7KMinato**, **inari (burnt orange) = Inari**. Projects theme `--brand-secondary` to their hue via `data-project` or `ProjectProvider`.
24
24
  - **Tokyo neon** → High contrast, nocturnal canvas, electric accents, no warm/beige tones.
25
25
  - **1-bit manga influence** → 10-texture background pattern library (scanline, halftone, dot matrix, stripes, crosshatch, checkerboard, noise, vignette). All textures are CSS gradients — no images, no SVG humans.
26
26
  - **Abstract 1-bit animations** → 20+ animation keyframes organized as ambient (continuous) and trigger (burst) categories. Step timing for retro feel, reduced-motion collapse.
@@ -150,7 +150,7 @@ import '7k-design-system/css';
150
150
 
151
151
  Tokyo neon meets manga-influenced 1-bit. The canvas is deep near-black, with sharp white text, electric magenta (`#FF0FF`) as the primary brand accent, and cyan as a secondary project accent. Black-and-white 1-bit textures — scanline overlays, halftone dot noise, glitch keyframes — provide rhythm and atmosphere. The mood is nocturnal, high-contrast, and unapologetically digital.
152
152
 
153
- Company/project differentiation: the parent 7K brand uses vivid magenta (`--brand-primary`). Child projects adopt their own accent (solar, cyan, acid, ember) on the same dark base. Same system, distinct at a glance.
153
+ Company/project differentiation: 7KGroup (parent) uses vivid magenta (`--brand-primary` baseline). Inside a project scope the project accent becomes dominant, overriding the full `--brand-primary` chain: 7KMinato runs cyan, Inari runs burnt orange (Fushimi Inari palette). Same system, distinct at a glance.
154
154
 
155
155
  **Logo:** Star-burst pattern logo in `build/logos/logo-7k.svg` — a geometric radial pattern with #FF0FF brand accent tones. Light variant at `build/logos/logo-7k-light.svg` (light backgrounds). App icon at `build/icons/icon.svg`.
156
156
 
@@ -187,16 +187,16 @@ Company/project differentiation: the parent 7K brand uses vivid magenta (`--bran
187
187
  | Horizontal stripes | `.stripes-h`, `.stripes-h-dense` | 9px/5px pitch | Section rhythm, horizontal dividers |
188
188
  | Vertical stripes | `.stripes-v`, `.stripes-v-dense` | 9px/5px pitch | Sidebar textures, column dividers |
189
189
  | Crosshatch | `.crosshatch`, `.crosshatch-dense` | 7px/4px dual-angle | Dense manga shading, error states |
190
- | Checkerboard | `.checkerboard`, `.checkerboard-onebit` | 12px/16px grid, pure B/W | Retro sections, QR motifs |
190
+ | Checkerboard | `.checkerboard`, `.checkerboard-contrast` | 12px/16px grid, pure B/W | Retro sections, QR motifs |
191
191
  | Noise | `.noise`, `.noise-heavy`, `.noise-animated` | 4%/12% opacity, SVG fractal | CRT grain, analog texture |
192
- | Vignette | `.vignette-onebit`, `.vignette-onebit-sharp` | Soft/sharp radial fade | Panel corner fade, hero-edge vignette |
192
+ | Vignette | `.vignette-ink`, `.vignette-ink-sharp` | Soft/sharp radial fade | Panel corner fade, hero-edge vignette |
193
193
 
194
194
  ### Texture composition rules
195
195
 
196
196
  1. **One texture per section layer.** Apply at most one texture on the background layer and one on the overlay layer (`::after`). Scanline + halftone is the default pair for hero sections.
197
197
  2. **Opacity scales with section density.** Hero/landing sections use lighter textures (5–10% opacity). Data-dense utility sections use stronger textures (10–15% opacity) or none.
198
- 3. **Texture on components is allowed with restraint.** Cards, panels, modals, drawers, and buttons can carry low-opacity texture overlays (`::before`, `pointer-events: none`) as long as the texture sits behind content and does not reduce contrast. Inputs and form controls should remain solid to preserve legibility. Use `.card-halftone`, `.panel-scanline`, `.btn-modern-halftone`, `.modal-noise`, etc.
199
- 4. **Texture as section separator.** When transitioning between full-bleed sections, add a `.separator-onebit` or `.stripes-h` band (40–80px tall) as a visual break — never use shadow or blur transitions.
198
+ 3. **Texture on components is allowed with restraint.** Cards, panels, modals, drawers, and buttons can carry low-opacity texture overlays (`::before`, `pointer-events: none`) as long as the texture sits behind content and does not reduce contrast. Inputs and form controls should remain solid to preserve legibility. Use `.card-halftone`, `.surface-scanline`, `.btn-halftone`, `.modal-noise`, etc.
199
+ 4. **Texture as section separator.** When transitioning between full-bleed sections, add a `.separator-solid` or `.stripes-h` band (40–80px tall) as a visual break — never use shadow or blur transitions.
200
200
  5. **Layering order:** Base color → texture background → content container → optional scanline overlay. The overlay must have `pointer-events: none` and `z-index: 1` so it does not block interaction.
201
201
  6. **Full-bleed hero walls** use scanline + vignette simultaneously: scanline on `::after` for the line pattern, vignette on `::before` for the edge fade. Both get `pointer-events: none`.
202
202
 
@@ -204,21 +204,21 @@ Company/project differentiation: the parent 7K brand uses vivid magenta (`--bran
204
204
 
205
205
  ```
206
206
  Section 1 (hero) — Scanline overlay + noise grain, full-bleed
207
- ↓ separator-onebit
207
+ ↓ separator-solid
208
208
  Section 2 (content) — Solid surface, no texture (reading zone)
209
- ↓ separator-onebit
209
+ ↓ separator-solid
210
210
  Section 3 (stats) — Halftone-md background with accent tint
211
- ↓ separator-onebit
211
+ ↓ separator-solid
212
212
  Section 4 (cta) — Scanline-fast overlay, invert section if 1-bit
213
213
  ```
214
214
 
215
215
  ### 1-bit section variants
216
216
 
217
- - **Full invert section**: swap `--bg-base` with `--onebit-white`, `--text-primary` with `--onebit-black`. Used for CTAs, callout panels, or manga-style splash panels. Add `.diagonal-stripes-negative` for max contrast.
217
+ - **Full invert section**: swap `--bg-base` with `--color-paper`, `--text-primary` with `--color-ink`. Used for CTAs, callout panels, or manga-style splash panels. Add `.diagonal-stripes-negative` for max contrast.
218
218
  - **Scanline hero**: dark canvas, scanline overlay, accent headline with glow. The scanline `::after` sits above the background but below all content (`z-index: 1`). Content gets `position: relative; z-index: 2`.
219
219
  - **Halftone card wall**: grid of cards with `.halftone-sm` or `.halftone-md` on the section container. Each card has solid `.card` background that breaks the texture — texture only lives between cards.
220
220
  - **Noise backdrop**: `.noise` on full-page backgrounds for analog feel. Use `.noise-heavy` only on splash/loading screens where content density is low.
221
- - **Vignette frame**: `.vignette-onebit` on slide/scene containers to draw the eye center. Used in intro animations and splash panels.
221
+ - **Vignette frame**: `.vignette-ink` on slide/scene containers to draw the eye center. Used in intro animations and splash panels.
222
222
 
223
223
  ## 1c. Isometric Backgrounds — CSS-only 3D Perspective Patterns
224
224
 
@@ -253,7 +253,7 @@ Section 4 (cta) — Scanline-fast overlay, invert section if 1-bit
253
253
 
254
254
  The color system has three strict layers:
255
255
 
256
- 1. **Raw ramps** — 11-step scales (50–950) for Neutral, Magenta, Solar, Cyan, Acid, Ember, plus extended below-ramp values (1000, void) and 4 semantic ramps (Success, Warning, Danger, Info). Never reference these directly in components.
256
+ 1. **Raw ramps** — 11-step scales (50–950) for Neutral, Magenta (7KGroup), Cyan (7KMinato), Inari (Inari), plus extended below-ramp values (1000, void) and 4 semantic ramps (Success, Warning, Danger, Info). Never reference these directly in components.
257
257
  2. **Theme role mapping** — `--bg-*`, `--text-*`, `--border-*`, `--brand-*`, `--status-*`, `--accent-*` tokens that map ramp values to functional roles. Remap per dark/light theme. This is the only layer components touch.
258
258
  3. **Semantic colors** — `--status-success/warning/danger/info` tokens bound by **meaning, not decoration**. Use only for actual machine-state indication (badges, toasts, validation). Never use for decorative borders, accent accents, or non-status backgrounds.
259
259
 
@@ -273,8 +273,8 @@ All ramps follow the same 11-step pattern (50 = lightest, 950 = darkest). Two ex
273
273
  | `--neutral-100` | `#EEEEF1` | — | `--bg-elevated` |
274
274
  | `--neutral-200` | `#D7D7DC` | — | `--bg-raised`, `--status-neutral-bg` |
275
275
  | `--neutral-300` | `#B0B0B8` | `--text-secondary` | `--bg-overlay`, `--text-disabled`, `--status-neutral-fg` |
276
- | `--neutral-400` | `#82828A` | `--status-neutral` | `--bg-pressed`, `--text-tertiary`, `--text-placeholder` |
277
- | `--neutral-500` | `#6B6B72` | `--text-tertiary`, `--text-placeholder` | `--text-secondary` |
276
+ | `--neutral-400` | `#82828A` | `--text-tertiary`, `--status-neutral` | `--bg-pressed`, `--text-placeholder` |
277
+ | `--neutral-500` | `#6B6B72` | `--text-placeholder` | `--text-secondary` |
278
278
  | `--neutral-600` | `#50505A` | `--text-disabled` | — |
279
279
  | `--neutral-700` | `#3A3A42` | `--bg-pressed` | — |
280
280
  | `--neutral-800` | `#26262B` | `--bg-overlay`, `--status-neutral-bg` | — |
@@ -301,29 +301,20 @@ All ramps follow the same 11-step pattern (50 = lightest, 950 = darkest). Two ex
301
301
  | `--magenta-900` | `#570057` | — | — |
302
302
  | `--magenta-950` | `#330033` | `--brand-primary-subtle` (dark) | — |
303
303
 
304
- #### Project accent ramps — Solar / Cyan / Acid / Ember
304
+ #### Project accent ramps — 7KMinato (Cyan) / Inari
305
305
 
306
- Each child project gets a single accent hue. Same 11-step structure; only the base (--500) and the theme-mapped hover (--600 in light) differ.
306
+ Each project gets a single accent hue. Same 11-step structure; only the base (--500) and the theme-mapped hover (--600 in light) differ. (7KGroup's accent is the magenta primary ramp above.)
307
307
 
308
- **Solar — Triangle (hue ~50)**
309
-
310
- `--solar-50: #FFFCE5` → `--solar-500: #FFD60A` → `--solar-950: #332B02`.
311
- Accent token: `--accent-triangle`. Dark: `var(--solar-500)`, Light: `var(--solar-600)`.
312
-
313
- **Cyan — Circle (hue ~190)**
308
+ **Cyan — 7KMinato (hue ~190)**
314
309
 
315
310
  `--cyan-50: #E5FBFF` → `--cyan-500: #00E5FF` → `--cyan-950: #002A2E`.
316
- Accent token: `--accent-circle`. Dark: `var(--cyan-500)`, Light: `var(--cyan-600)`.
317
-
318
- **Acid — Grid (hue ~105)**
311
+ Accent token: `--accent-7kminato`. Dark: `var(--cyan-500)`, Light: `var(--cyan-600)`.
319
312
 
320
- `--acid-50: #F2FFE5` → `--acid-500: #7CFF00` → `--acid-950: #172E00`.
321
- Accent token: `--accent-grid`. Dark: `var(--acid-500)`, Light: `var(--acid-600)`.
313
+ **Inari — Inari project (hue ~18, Fushimi Inari palette)**
322
314
 
323
- **Ember — Line (hue ~15)**
324
-
325
- `--ember-50: #FFEEE5` → `--ember-500: #FF6B35` → `--ember-950: #331205`.
326
- Accent token: `--accent-line`. Dark: `var(--ember-500)`, Light: `var(--ember-600)`.
315
+ `--inari-50: #FDEEE7` → `--inari-500: #EE560D` (Orangealicious) → `--inari-950: #2B1C17` (Tetsu-Guro Black).
316
+ Named stops: `--inari-400` Knockout Orange `#E56F3F`, `--inari-600` Red Panda `#C44813`, `--inari-800` Rogan Josh `#8B310D`.
317
+ Accent token: `--accent-inari`. Dark: `var(--inari-500)`, Light: `var(--inari-600)`.
327
318
 
328
319
  #### Semantic ramps (raw)
329
320
 
@@ -338,8 +329,8 @@ Each has a full 11-step scale (50–950). Never use directly — always go throu
338
329
 
339
330
  #### 1-bit primitives
340
331
 
341
- - `--onebit-black: #000000` (`oklch(0% 0 0)`)
342
- - `--onebit-white: #FFFFFF` (`oklch(100% 0 0)`)
332
+ - `--color-ink: #000000` (`oklch(0% 0 0)`)
333
+ - `--color-paper: #FFFFFF` (`oklch(100% 0 0)`)
343
334
 
344
335
  ---
345
336
 
@@ -423,15 +414,13 @@ Each has a full 11-step scale (50–950). Never use directly — always go throu
423
414
 
424
415
  #### Project accent tokens
425
416
 
426
- | Token | Dark base | Light base | Project | Pixel variant |
427
- | ------------------- | --------------- | --------------- | --------- | ------------- |
428
- | `--accent-square` | `--magenta-500` | `--magenta-500` | 7K parent | Square |
429
- | `--accent-triangle` | `--solar-500` | `--solar-600` | Triangle | Triangle |
430
- | `--accent-circle` | `--cyan-500` | `--cyan-600` | Circle | Circle |
431
- | `--accent-grid` | `--acid-500` | `--acid-600` | Grid | Grid |
432
- | `--accent-line` | `--ember-500` | `--ember-600` | Line | Line |
417
+ | Token | Dark base | Light base | Project |
418
+ | ------------------ | --------------- | --------------- | ---------------- |
419
+ | `--accent-7kgroup` | `--magenta-500` | `--magenta-500` | 7KGroup (parent) |
420
+ | `--accent-7kminato` | `--cyan-500` | `--cyan-600` | 7KMinato |
421
+ | `--accent-inari` | `--inari-500` | `--inari-600` | Inari |
433
422
 
434
- These tokens are the canonical hue pairings for Geist Pixel variants. They also feed `--brand-secondary` when a project scope is applied via `data-project` or `ProjectProvider`. Light theme shifts project accents one step darker (500→600) to maintain contrast against the brighter background.
423
+ These tokens are the canonical hue for each project. They also feed `--brand-secondary` when a project scope is applied via `data-project` or `ProjectProvider`. Light theme shifts project accents one step darker (500→600) to maintain contrast against the brighter background.
435
424
 
436
425
  ---
437
426
 
@@ -462,7 +451,7 @@ Semantic colors exist **only** for status indication. Each maps to exactly one m
462
451
  2. **Accent on action, not surface** — Brand appears on primary CTAs, focus rings, active borders, brand typography. Never as a full surface background fill.
463
452
  3. **Semantic = meaning only** — Status hues exist for machine-state communication (badge bg, toast icon, validation message, online/offline dot). If it doesn't communicate a machine state, use the raw ramps instead.
464
453
  4. **Status bg uses `--*-bg`** — Status badges and pills use the `--status-*-bg` token, never the solid `--*-500` as a fill.
465
- 5. **Project scoping** — The parent 7K brand uses magenta primary + cyan secondary. Child projects theme `--brand-secondary` to their own hue (solar, cyan, acid, ember) via `data-project` or `ProjectProvider`. Geist Pixel variant pairings use the `--accent-*` tokens. The neutral ramp stays unchanged.
454
+ 5. **Project scoping** — 7KGroup uses magenta, 7KMinato cyan, Inari burnt orange. Within a project scope (`data-project` or `ProjectProvider`), the project accent takes over the **entire brand chain** — `--brand-primary` and `--brand-secondary` (primary/glow buttons, focus rings, brand borders) — making the project hue more prevalent than the 7KGroup baseline. Magenta only persists in constant identity marks (`--accent-7kgroup`, logo/icon strokes). Semantic status colors and the neutral ramp stay unchanged.
466
455
  6. **No raw ramp references in components** — Always reference role tokens (`--bg-elevated`, `--text-primary`, `--border-default`), never raw ramp tokens (`--neutral-950`, `--neutral-50`, etc.). This is how theme switching works.
467
456
  7. **Dark is default, light is opt-in** — `:root` holds dark token mappings. `@media (prefers-color-scheme: light)` overrides only the role tokens. Primitive ramps are shared and unchanged.
468
457
 
@@ -482,11 +471,11 @@ Semantic colors exist **only** for status indication. Each maps to exactly one m
482
471
 
483
472
  | Variant | Weight | Pairs with | Best for |
484
473
  | ------------ | --------------- | ------------------------ | ------------------------------------ |
485
- | **Square** | 400 (Regular) | Magenta (7K parent) | Body-sized pixel text, data displays |
486
- | **Circle** | 500 (Medium) | Cyan | Buttons, badges, navigation |
487
- | **Grid** | 600 (SemiBold) | Acid (Grid project) | Section titles, stat values |
488
- | **Line** | 700 (Bold) | Ember (Line project) | Display headlines, hero text |
489
- | **Triangle** | 800 (ExtraBold) | Solar (Triangle project) | Hero wordmarks, giant headlines |
474
+ | **Square** | 400 (Regular) | Magenta (7KGroup) | Body-sized pixel text, data displays |
475
+ | **Circle** | 500 (Medium) | Cyan (7KMinato) | Buttons, badges, navigation |
476
+ | **Grid** | 600 (SemiBold) | Neutral | Section titles, stat values |
477
+ | **Line** | 700 (Bold) | Neutral | Display headlines, hero text |
478
+ | **Triangle** | 800 (ExtraBold) | Inari (Inari project) | Hero wordmarks, giant headlines |
490
479
 
491
480
  ### Font stacks
492
481
 
@@ -647,9 +636,9 @@ Sharp (0px) and subtle (2–4px) are preferred for 1-bit elements. 8–12px for
647
636
 
648
637
  - Scanline overlay on hero / full-bleed sections
649
638
  - Halftone dot separators between content blocks
650
- - Full-bleed sections use `.separator-onebit` (2px white line at 25% opacity) as rhythm breaks
639
+ - Full-bleed sections use `.separator-solid` (2px white line at 25% opacity) as rhythm breaks
651
640
  - Texture shift between sections: scanline → solid → halftone → solid → scanline. Never two textured sections adjacent.
652
- - Manga panel composition: content is the "panel" (solid black border), background is the "page" (noise or scanline). Each panel gets a `.vignette-onebit` edge fade.
641
+ - Manga panel composition: content is the "panel" (solid black border), background is the "page" (noise or scanline). Each panel gets a `.vignette-ink` edge fade.
653
642
 
654
643
  ### Product shell layout
655
644
 
@@ -677,29 +666,32 @@ Sharp (0px) and subtle (2–4px) are preferred for 1-bit elements. 8–12px for
677
666
 
678
667
  **Modern neon** — the only button system. All buttons use `mono-label` typography (Geist Mono, 11px, 500 weight, 0.12em uppercase) and 4px border-radius. Accent fills use the brand-primary ramp (500→hover:400→active:600). Button groups, split buttons, and loading state are built on the same base.
679
668
 
680
- | Class | Description |
681
- | ----------------------- | ---------------------------------------------------------------------------------------- |
682
- | `.btn-modern` | Base: mono-label typography, 12px/20px padding, `rounded.sm` (4px) |
683
- | `.btn-modern-primary` | `--brand-primary` (`--magenta-500`) fill, `--brand-primary-hover` on hover + glow shadow |
684
- | `.btn-modern-secondary` | `--bg-raised` fill, `--bg-overlay` on hover |
685
- | `.btn-modern-ghost` | Transparent, `--text-secondary` text, subtle bg on hover |
686
- | `.btn-modern-glow` | `--magenta-500` fill + neon glow, `--magenta-400` on hover |
687
- | `.btn-modern-glow-cyan` | `--cyan-500` fill + cyan glow, `--cyan-400` on hover |
688
- | `.btn-modern-glow-grid` | `--acid-500` fill + acid glow, `--acid-400` on hover |
689
- | `.btn-modern-danger` | Transparent + danger border, danger fill on hover |
690
- | `.btn-modern-sm/lg` | Size variants (8px/16px small, 16px/28px large) |
691
- | `.btn-modern-icon` | 40×40 square icon button |
692
- | `.btn-modern-lg-icon` | 52×52 large icon button |
693
- | `.btn-modern-loading` | Loading state — `onebit-spin` replaces icon |
694
- | `.btn-group` | Inline flex container for grouped buttons (adjacent borders merge) |
695
- | `.btn-split` | Split button trigger — last child gets narrower padding + left border |
669
+ | Class | Description |
670
+ | --------------------------- | ------------------------------------------------------------------------------------------ |
671
+ | `.btn` | Base: mono-label typography, 12px/20px padding, `rounded.sm` (4px) |
672
+ | `.btn-primary` | Magenta outline, `--brand-primary-subtle` fill tint on hover, white text when active |
673
+ | `.btn-secondary` | `--bg-raised` fill, `--bg-overlay` on hover |
674
+ | `.btn-ghost` | Transparent, `--text-secondary` text, subtle bg on hover |
675
+ | `.btn-glow` | Magenta outline + persistent neon glow, intensifies on hover |
676
+ | `.btn-accent` | Dynamic `--brand-secondary` outline + fill tint on hover (per-project accent) |
677
+ | `.btn-glow-accent` | `--brand-secondary` fill + glow (the filled "neon" button; magenta for the parent brand) |
678
+ | `.btn-glow-secondary`| Cyan/`--brand-secondary` outline + glow variant of `.btn-glow` |
679
+ | `.btn-danger` | Transparent + danger border, danger fill on hover |
680
+ | `.btn-sm/lg` | Size variants (8px/16px small, 16px/28px large) |
681
+ | `.btn-icon` | 40×40 square icon button |
682
+ | `.btn-lg-icon` | 52×52 large icon button |
683
+ | `.btn-loading` | Loading state — `spin-steps` replaces icon |
684
+ | `.btn:disabled` | 40% opacity, no pointer events, glow removed — applies to every variant |
685
+ | `.btn-group` | Inline flex container for grouped buttons (adjacent borders merge) |
686
+ | `.btn-split` | Split button trigger — last child gets narrower padding + left border |
696
687
 
697
688
  All variants use standard CSS transitions for interaction states:
698
689
 
699
- - **`:hover`** → fill shifts to `--brand-primary-hover` (`--magenta-400`), optional glow shadow intensifies
690
+ - **`:hover`** → border/fill shifts to the `-hover` step of the variant's ramp, optional glow shadow intensifies
700
691
  - **`:focus-visible`** → outline ring
701
- - **`:active`** → fill shifts to `--brand-primary-active` (`--magenta-600`)
702
- - **`Loading`** → `onebit-spin` (0.6s steps(4) infinite — square frame rotation)
692
+ - **`:active`** → fill shifts to the `-muted` step with `--color-paper` text (keeps contrast ≥ 7:1)
693
+ - **`:disabled`** → 40% opacity, `not-allowed` cursor, no glow
694
+ - **`Loading`** → `spin-steps` (0.6s steps(4) infinite — square frame rotation)
703
695
 
704
696
  ### 6b. Form controls
705
697
 
@@ -708,9 +700,9 @@ All variants use standard CSS transitions for interaction states:
708
700
  | `.input` | Text input: black bg, 2px white border, accent glow on focus |
709
701
  | `.textarea` | Multi-line input, same tokens |
710
702
  | `.select-native` | Custom dropdown, SVG chevron |
711
- | `.checkbox` | 16px square, checked fills white (`.checkbox-accent`: fills magenta) |
712
- | `.radio` | 16px square, selected fills white (`.radio-accent`: fills magenta) |
713
- | `.toggle` | 36x18 switch, on state fills white (`.toggle-accent`: fills magenta) |
703
+ | `.checkbox` | 16px square, checked fills white (`.checkbox-accent`: fills `--brand-secondary`) |
704
+ | `.radio` | 16px square, selected fills white (`.radio-accent`: fills `--brand-secondary`) |
705
+ | `.toggle` | 36x18 switch, on state fills white (`.toggle-accent`: fills `--brand-secondary`) |
714
706
  | `.range` | 6px track, 16px square thumb |
715
707
  | `.form-group` | Flex column with gap |
716
708
  | `.form-label` | Mono uppercase label, 11px |
@@ -776,7 +768,7 @@ All variants use standard CSS transitions for interaction states:
776
768
  | Class | Description |
777
769
  | ----------------------------------- | ------------------------------------------- |
778
770
  | `.progress` | 12px bar, 2px border |
779
- | `.progress-accent` | Magenta fill |
771
+ | `.progress-accent` | `--brand-secondary` (project accent) fill |
780
772
  | `.progress-indeterminate` | Scanning bar animation |
781
773
  | `.progress-striped` | Striped fill overlay |
782
774
  | `.spinner` | 20px square rotating frame, 90° steps |
@@ -816,16 +808,16 @@ All variants use standard CSS transitions for interaction states:
816
808
 
817
809
  These classes add thin color to any 1-bit component without breaking the black/white base. Apply alongside the component class.
818
810
 
819
- | Class | Effect |
820
- | ---------------------------------------------------------------------- | ------------------------------- |
821
- | `.accent-border-top` / `.accent-border-left` / `.accent-border-bottom` | 3px magenta border on one edge |
822
- | `.cyan-border-top` / `.grid-border-top` / `.line-border-top` | 3px colored top border |
823
- | `.accent-underline` / `.cyan-underline` | Colored underline on text |
824
- | `.accent-dot` / `.cyan-dot` / `.grid-dot` | Small colored dot after element |
825
- | `.accent-bar` / `.cyan-bar` / `.grid-bar` / `.line-bar` | Thin colored bar across top |
826
- | `.glow-mod` / `.glow-mod-cyan` | Colored glow shadow |
827
- | `.border-mod-accent` / `.border-mod-cyan` | Border color override |
828
- | `.accent-corner` / `.cyan-corner` | Small colored corner badge |
811
+ | Class | Effect |
812
+ | -------------------------------------------------------------------------------------- | ------------------------------------------------- |
813
+ | `.accent-border-top` / `.accent-border-left` / `.accent-border-bottom` | 3px `--brand-primary` (magenta) border on one edge |
814
+ | `.accent-secondary-border-top` / `-left` / `-bottom` | 3px `--brand-secondary` (per-project) border |
815
+ | `.accent-underline` / `.accent-secondary-underline` | Colored underline on text |
816
+ | `.accent-dot` / `.accent-secondary-dot` | Small colored dot after element |
817
+ | `.accent-bar` / `.accent-secondary-bar` | Thin colored bar across top |
818
+ | `.glow-mod` / `.glow-mod-secondary` | Colored glow shadow |
819
+ | `.border-mod-accent` / `.border-mod-secondary` | Border color override |
820
+ | `.accent-corner` / `.accent-secondary-corner` | Small colored corner badge |
829
821
 
830
822
  ### 1-bit composition rules
831
823
 
@@ -963,10 +955,10 @@ import { Button } from '7k-design-system/react';
963
955
 
964
956
  **CSS classes applied:**
965
957
 
966
- - Base: `.btn-modern`
967
- - Variant: `.btn-modern-{variant}` (e.g., `.btn-modern-primary`)
968
- - Size: `.btn-modern-sm` | `.btn-modern-lg` (md applies no extra class)
969
- - Loading: `.btn-modern-loading` when `loading={true}`
958
+ - Base: `.btn`
959
+ - Variant: `.btn-{variant}` (e.g., `.btn-primary`)
960
+ - Size: `.btn-sm` | `.btn-lg` (md applies no extra class)
961
+ - Loading: `.btn-loading` when `loading={true}`
970
962
 
971
963
  **Behavior:** Forwards ref to `<button>`. Combines `className` prop with generated classes. Sets `aria-busy` when loading.
972
964
 
@@ -1170,18 +1162,6 @@ import { IsometricBackground } from '7k-design-system/react';
1170
1162
 
1171
1163
  **CSS classes applied:** `.isometric-grid`, `.isometric-grid-animated`
1172
1164
 
1173
- ### MangaPanel
1174
-
1175
- ```typescript
1176
- import { MangaPanel } from '7k-design-system/react';
1177
-
1178
- <MangaPanel frame texture="halftone" speedLine="horizontal">
1179
- Splash content
1180
- </MangaPanel>
1181
- ```
1182
-
1183
- **CSS classes applied:** `.panel`, `.panel-frame`, `.panel-halftone`, `.speed-line-horizontal`
1184
-
1185
1165
  ### ThemeToggle
1186
1166
 
1187
1167
  ```typescript
@@ -1361,7 +1341,6 @@ Port: 6006
1361
1341
  | `Components/Badges` (`Components.stories.tsx`) | Badge variants |
1362
1342
  | `Components/Cards` (`Components.stories.tsx`) | Card styles and textures |
1363
1343
  | `Components/TexturedCards` | Textured card variants |
1364
- | `Components/MangaPanels` | Manga panel frames and textures |
1365
1344
  | `Components/Navigation` (`Components.stories.tsx`) | Nav patterns |
1366
1345
  | `Components/Alerts` (`Components.stories.tsx`) | Alert variants |
1367
1346
  | `Components/Toasts` (`Components.stories.tsx`) | Toast variants |
@@ -1417,4 +1396,4 @@ npm run chromatic # Visual regression testing
1417
1396
  | Multiple textures on the same section layer | Max one background + one overlay per section |
1418
1397
  | Continuous animation on UI surfaces | Ambient animations are for hero/landing sections only |
1419
1398
  | Isometric animation on interactive UI | Isometric bg + motion is for hero/splash sections only; never on cards, buttons, or form controls |
1420
- | Mixing 1-bit button patterns into product surfaces | Use the modern button system (.btn-modern\*) for all product surfaces. 1-bit button classes (.btn, .btn-primary, .btn-accent) are removed — do not reintroduce raw invert-hover buttons in place of modern neon buttons. |
1399
+ | Mixing 1-bit button patterns into product surfaces | Use the modern button system (.btn\*) for all product surfaces. 1-bit button classes (.btn, .btn-primary, .btn-accent) are removed — do not reintroduce raw invert-hover buttons in place of modern neon buttons. |
package/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # 7k-design-system
2
2
 
3
- > Dark-first, neon-accented, manga-inflected design system for multi-project tech company 7K.
4
- > Built for midnight. Three-font system. Major neon #FF0FF. Secondary neon cyan (thematic per project). Background textures on components. Manga panels. Isometric animations.
3
+ > Dark-first, neon-accented design system for multi-project tech company 7K.
4
+ > Built for midnight. Three-font system. Major neon #FF0FF. Secondary neon cyan (thematic per project). Background textures on components. Callouts & surfaces. Isometric animations.
5
5
 
6
6
  ## Product Overview
7
7
 
8
- **7k-design-system** is a dark-first dual-theme design system created for 7K, a technology holding company with multiple sub-projects. The system embodies a Tokyo neon atmosphere — high contrast, nocturnal canvas, electric accents — combined with manga-influenced 1-bit visual language using pure black and white textures.
8
+ **7k-design-system** is a dark-first dual-theme design system created for 7K, a technology holding company with multiple sub-projects. The system embodies a Tokyo neon atmosphere — high contrast, nocturnal canvas, electric accents — combined with high-contrast visual language using pure black and white textures.
9
9
 
10
10
  **Source product:** 7K is a technology holding company that builds infrastructure, AI pipelines, and digital products across multiple sub-projects. This design system serves as the visual foundation for 7K and all its child projects, providing a unified design language that differentiates sub-projects through accent color overrides while maintaining consistent typography, spacing, component patterns, and animation systems across all surfaces.
11
11
 
@@ -17,7 +17,7 @@ The design system supports five primary surfaces:
17
17
  | ----------------------- | ------------------------------------------------------------------------ | ---------------------------------------------------------------------- |
18
18
  | **Company Website** | Dark landing pages with scanline heroes, project showcases, stats grids | `DESIGN.md` §1–5, `src/stories/Components.stories.tsx` |
19
19
  | **Product Dashboard** | Data-dense admin interfaces with sidebar nav, tables, status cards | `src/react/components/`, `src/stories/Components.stories.tsx` |
20
- | **Sub-project Landing** | Child project pages with accent hue overrides (cyan, acid, ember, solar) | `DESIGN.md` §2 (accent tokens), `src/css/projects.css` |
20
+ | **Sub-project Landing** | Project pages with accent hue overrides (magenta = 7KGroup, cyan = 7KMinato, inari = Inari) | `DESIGN.md` §2 (accent tokens), `src/css/projects.css` |
21
21
  | **Internal Tools** | CLI-like interfaces, monitoring panels, resource dashboards | `DESIGN.md` §3 (mono labels), `src/stories/Tokens.mdx` |
22
22
  | **Mobile App** | Responsive adaptations with bottom tab nav, touch-friendly targets | `DESIGN.md` §5 (responsive grid), `src/stories/Components.stories.tsx` |
23
23
 
@@ -28,8 +28,8 @@ The system provides these core capabilities:
28
28
  - **Dark-first theming** with opt-in light mode via `data-theme="light"`
29
29
  - **Major neon accent** (#FF0FF magenta) + **secondary neon accent** (cyan by default, thematic per project)
30
30
  - **Three-font system**: Geist Sans (display/body), Geist Mono (labels/code), Geist Pixel (5 geometric variants for ornamental use)
31
- - **Texture categories**: scanline, halftone, dot matrix, stripes, crosshatch, checkerboard, noise, vignette, isometric, manga panels
32
- - **40+ 1-bit components**: zero-radius, 2px white borders, invert-on-hover, thin accent modifiers
31
+ - **Texture categories**: scanline, halftone, dot matrix, stripes, crosshatch, checkerboard, noise, vignette, isometric, surfaces & callouts
32
+ - **40+ components**: sharp geometry, high-contrast borders, invert-on-hover, thin accent modifiers
33
33
  - **Textured component variants**: halftone, scanline, noise, dots, crosshatch on cards, panels, modals, drawers, toasts, buttons
34
34
  - **20+ animations**: ambient (scanline scroll, CRT flicker, neon pulse) and trigger (glitch, pixel-dots, invert-flash)
35
35
  - **Isometric geometry animations**: combined animated background classes (`.isometric-grid-animated`, etc.)
@@ -47,8 +47,8 @@ Every design rule is grounded in the original brand brief (quoted inline in `DES
47
47
  | "Our main brand color is #FF0FF" | Major magenta accent; cyan secondary (thematic per project) |
48
48
  | "Tech company with different projects" | Sub-project accent overrides via `--brand-secondary` and `--accent-*` tokens |
49
49
  | "Tokyo's neon atmosphere" | Dark near-black canvas (`#0A0A0D`), electric accents, no warm/beige tones |
50
- | "Manga-influenced 1-bit" | Pure black/white elements, texture patterns, manga panel utilities, zero radius, 2px borders |
51
- | "Abstract 1-bit animations" | 20+ keyframes with step timing for retro digital feel |
50
+ | "High-contrast textures" | Pure black/white elements, texture patterns, surface & callout utilities, zero radius, 2px borders |
51
+ | "Stepped animations" | 20+ keyframes with step timing for retro digital feel |
52
52
  | "Dark theme for websites" | Dark-first: `--bg-void: #000000`, `--bg-base: #0A0A0D`; light is opt-in |
53
53
 
54
54
  ## Package Contents
@@ -69,9 +69,9 @@ Every design rule is grounded in the original brand brief (quoted inline in `DES
69
69
  ├── fonts/ # Geist Pixel font files (preserved originals)
70
70
  │ ├── GeistPixel-Square.ttf # 400 weight · pairs with magenta (7K parent)
71
71
  │ ├── GeistPixel-Circle.ttf # 500 weight · pairs with cyan
72
- │ ├── GeistPixel-Grid.ttf # 600 weight · pairs with acid
73
- │ ├── GeistPixel-Line.ttf # 700 weight · pairs with ember
74
- │ └── GeistPixel-Triangle.ttf # 800 weight · pairs with solar
72
+ │ ├── GeistPixel-Grid.ttf # 600 weight · neutral
73
+ │ ├── GeistPixel-Line.ttf # 700 weight · neutral
74
+ │ └── GeistPixel-Triangle.ttf # 800 weight · pairs with Inari
75
75
  │
76
76
  ├── src/ # Source code
77
77
  │ ├── css/ # Modular CSS source files
@@ -107,7 +107,7 @@ npm run build-storybook # Static build for deployment
107
107
  | -------------------- | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
108
108
  | **Colors & Tokens** | `src/stories/Tokens.mdx` | Magenta/cyan brand ramps, semantic brand tokens, neutral/status colors, typography scale, spacing, radii, shadows | `src/css/tokens.css`; `DESIGN.md` §2–4 |
109
109
  | **Components** | `src/stories/Components.stories.tsx` | Modern neon button system (primary, glow, secondary, ghost, danger), cards, modals, drawers, toasts, tooltips, alerts, tabs, nav, inputs, toggles, selects, textareas, texture overlays | `src/react/components/`; `src/css/components.css` |
110
- | **Textures** | `src/stories/Textures.stories.tsx` | All texture categories with density variants: scanline, halftone, dot matrix, stripes, crosshatch, checkerboard, noise, vignette, separators, manga panels | `src/css/textures.css`; `src/css/manga.css`; `DESIGN.md` |
110
+ | **Textures** | `src/stories/Textures.stories.tsx` | All texture categories with density variants: scanline, halftone, dot matrix, stripes, crosshatch, checkerboard, noise, vignette, separators, surfaces & callouts | `src/css/textures.css`; `src/css/callouts.css`; `DESIGN.md` |
111
111
  | **Icons & Logos** | `src/stories/Icons.stories.tsx` | Curated icon set, logo variants, brand application rules, contextual previews | `build/` directory; `src/react/components/Icon.tsx` |
112
112
  | **Theme / Projects** | `src/stories/ThemeToggle.stories.tsx` | Light/dark/system theme switching and project accent overrides | `src/react/theme/`; `src/css/projects.css` |
113
113
  | **Overview** | `src/stories/Overview.mdx` | Design principles, voice/tone, anti-patterns, reuse workflow | `DESIGN.md`; `SKILL.md`; `CONSUMER_GUIDE.md` |
@@ -147,11 +147,11 @@ Requires self-hosting the `fonts/` directory for Geist Pixel variants.
147
147
  2. **Bind tokens** — Import `colors_and_type.css` (or `dist/7k-design-system.css` for external use)
148
148
  3. **Override accent** — For child projects, set the appropriate `--accent-*` token:
149
149
  ```css
150
- .project-neon {
151
- --accent-circle: var(--cyan-500);
150
+ .project-7kminato {
151
+ --accent-7kminato: var(--cyan-500);
152
152
  }
153
- .project-grid {
154
- --accent-grid: var(--acid-500);
153
+ .project-inari {
154
+ --accent-inari: var(--inari-500);
155
155
  }
156
156
  ```
157
157
  4. **Preview tokens** — Run `npm run storybook` and open the Colors, Tokens, Textures, and Components stories to verify values render correctly
@@ -172,7 +172,7 @@ Requires self-hosting the `fonts/` directory for Geist Pixel variants.
172
172
  }
173
173
  ```
174
174
  4. **Apply textures** — Add classes like `.scanline`, `.halftone-md`, `.noise` to sections
175
- 5. **Use components** — Apply classes like `.btn-modern-primary`, `.badge-success`, `.input`
175
+ 5. **Use components** — Apply classes like `.btn-primary`, `.badge-success`, `.input`
176
176
 
177
177
  ## File Structure Notes
178
178