7k-design-system 1.2.0 → 1.3.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/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ # [1.3.0](https://github.com/7K-Group/7k-design-system/compare/v1.2.0...v1.3.0) (2026-10-13)
2
+
3
+
4
+ ### Features
5
+
6
+ * data-display components, u-* utilities, legacy class conformance, edge releases ([441ec7b](https://github.com/7K-Group/7k-design-system/commit/441ec7b72993d75899127ed803d273965434fb16))
7
+
8
+ # [1.3.0](https://github.com/7K-Group/7k-design-system/compare/v1.2.0...v1.3.0) (2026-10-08)
9
+
10
+
11
+ ### Features
12
+
13
+ * add `Stat`, `EmptyState`, and `DataTable` React components (`.stat`/`.empty`/`.table` compositions with loading skeletons, sortable headers, and a mobile stacked-card transform) plus `.banner-count`/`.banner-link` banner slots ([3eae951](https://github.com/7K-Group/7k-design-system/commit/3eae951))
14
+ * add token-based `u-*` utility classes (`utilities.css`): text/background/border helpers with explicit opacity and hover variants
15
+
16
+ ### Breaking Changes
17
+
18
+ * rename legacy class families for consistency: `isometric-*` → `iso-*`, bare texture classes → `bg-*` (e.g. `.scanline` → `.bg-scanline`), `.pixel-*` → `.font-pixel-*`, `.pixel-fade-in`/`.pixel-dots` → `.step-fade-in`/`.step-dots`; `TextureOverlay` prop `animate` → `animated`; the conflicting duplicate `.texture-overlay` in isometric.css is now `.overlay-fill`
19
+
1
20
  # [1.2.0](https://github.com/7K-Group/7k-design-system/compare/v1.1.1...v1.2.0) (2026-10-08)
2
21
 
3
22
 
package/CONSUMER_GUIDE.md CHANGED
@@ -310,6 +310,29 @@ Mount toasts in a fixed container at the top of your app (they use `role="status
310
310
  <Textarea rows={4} />
311
311
  ```
312
312
 
313
+ #### Data display (1.3.0)
314
+
315
+ ```tsx
316
+ <Stat value="24" label="Clusters" accent trend="+2" />
317
+ <EmptyState title="No clusters" body="Register one to get started" action={<Button variant="accent">Register</Button>} />
318
+ <DataTable
319
+ columns={[
320
+ { key: 'name', label: 'Name' },
321
+ { key: 'status', label: 'Status', mono: true, sortable: true },
322
+ ]}
323
+ rows={rows}
324
+ rowKey="id"
325
+ loading={isLoading} // renders skeleton rows
326
+ empty={<EmptyState title="No rows" />}
327
+ onSort={(key) => sort(key)}
328
+ sortKey={sortKey}
329
+ sortDirection="asc"
330
+ pagination={<div className="pagination">…</div>}
331
+ />
332
+ ```
333
+
334
+ `DataTable` composes the `.table` classes: mono uppercase headers, sortable-column buttons, skeleton rows while `loading`, an `empty` slot when there are no rows, and a stacked-card transform on narrow viewports (≤640px, each cell labelled via `data-label`).
335
+
313
336
  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
337
 
315
338
  ---
@@ -390,7 +413,7 @@ function App() {
390
413
 
391
414
  - **Don't hard-code colors** — Avoid hex values; use design tokens
392
415
  - **Don't import CSS in components** — Import once at app level
393
- - **Don't mix textures** — Don't put `.scanline` inside `.halftone`
416
+ - **Don't mix textures** — Don't put `.bg-scanline` inside `.halftone`
394
417
  - **Don't override component internals** — Style via props or wrapper classes
395
418
  - **Don't forget data-theme** — Light mode requires `data-theme="light"` on <html>
396
419
 
package/DESIGN.md CHANGED
@@ -162,7 +162,7 @@ Company/project differentiation: 7KGroup (parent) uses vivid magenta (`--brand-p
162
162
  - **Diagonal stripes**: 45° hatch lines at 7px or 4px pitch. Negative variant overlays pure white-on-black for high-contrast sections.
163
163
  - **Horizontal / vertical stripes**: Linear parallel lines at 9px or 5px pitch for directional motion cues.
164
164
  - **Crosshatch**: Dual-angle hatch (45° + -45°) for dense shading in manga panel style. Standard and dense variants.
165
- - **Checkerboard**: 12px alternating squares for pixel-art motifs. One-bit variant uses pure black/white for retro game sections.
165
+ - **Checkerboard**: 12px alternating squares for pixel-art motifs. High-contrast variant uses pure black/white.
166
166
  - **Noise**: SVG fractal noise overlay at 128px tile, 4%–12% opacity for analog CRT grain. Animatable with translate keyframes.
167
167
  - **Vignette**: Radial gradient from transparent center to black edge. Sharp variant clips tighter for manga panel corner fade.
168
168
 
@@ -180,23 +180,23 @@ Company/project differentiation: 7KGroup (parent) uses vivid magenta (`--brand-p
180
180
 
181
181
  | Category | Classes | Density variants | Use case |
182
182
  | ------------------ | ---------------------------------------------------------------------------- | -------------------------------- | -------------------------------------- |
183
- | Scanline | `.scanline`, `.scanline-fast` | slow (8s), fast (3s) | Hero sections, full-bleed walls |
184
- | Halftone dots | `.halftone-sm`, `.halftone-md`, `.halftone-lg`, `.halftone-accent` | 4px/6px/10px grid, accent-tinted | Manga panel backgrounds, card surfaces |
185
- | Dot matrix | `.dot-matrix-dense`, `.dot-matrix`, `.dot-matrix-sparse` | 3px/6px/12px grid | Texture depth behind text, dividers |
186
- | Diagonal stripes | `.diagonal-stripes`, `.diagonal-stripes-dense`, `.diagonal-stripes-negative` | 7px/4px pitch, pure B/W | Directional cues, loading areas |
187
- | Horizontal stripes | `.stripes-h`, `.stripes-h-dense` | 9px/5px pitch | Section rhythm, horizontal dividers |
188
- | Vertical stripes | `.stripes-v`, `.stripes-v-dense` | 9px/5px pitch | Sidebar textures, column dividers |
189
- | Crosshatch | `.crosshatch`, `.crosshatch-dense` | 7px/4px dual-angle | Dense manga shading, error states |
190
- | Checkerboard | `.checkerboard`, `.checkerboard-contrast` | 12px/16px grid, pure B/W | Retro sections, QR motifs |
191
- | Noise | `.noise`, `.noise-heavy`, `.noise-animated` | 4%/12% opacity, SVG fractal | CRT grain, analog texture |
192
- | Vignette | `.vignette-ink`, `.vignette-ink-sharp` | Soft/sharp radial fade | Panel corner fade, hero-edge vignette |
183
+ | Scanline | `.bg-scanline`, `.bg-scanline-fast` | slow (8s), fast (3s) | Hero sections, full-bleed walls |
184
+ | Halftone dots | `.bg-halftone-sm`, `.bg-halftone-md`, `.bg-halftone-lg`, `.bg-halftone-accent` | 4px/6px/10px grid, accent-tinted | Manga panel backgrounds, card surfaces |
185
+ | Dot matrix | `.bg-dot-matrix-dense`, `.bg-dot-matrix`, `.bg-dot-matrix-sparse` | 3px/6px/12px grid | Texture depth behind text, dividers |
186
+ | Diagonal stripes | `.bg-diagonal-stripes`, `.bg-diagonal-stripes-dense`, `.bg-diagonal-stripes-negative` | 7px/4px pitch, pure B/W | Directional cues, loading areas |
187
+ | Horizontal stripes | `.bg-stripes-h`, `.bg-stripes-h-dense` | 9px/5px pitch | Section rhythm, horizontal dividers |
188
+ | Vertical stripes | `.bg-stripes-v`, `.bg-stripes-v-dense` | 9px/5px pitch | Sidebar textures, column dividers |
189
+ | Crosshatch | `.bg-crosshatch`, `.bg-crosshatch-dense` | 7px/4px dual-angle | Dense manga shading, error states |
190
+ | Checkerboard | `.bg-checkerboard`, `.bg-checkerboard-contrast` | 12px/16px grid, pure B/W | Retro sections, QR motifs |
191
+ | Noise | `.bg-noise`, `.bg-noise-heavy`, `.bg-noise-animated` | 4%/12% opacity, SVG fractal | CRT grain, analog texture |
192
+ | Vignette | `.bg-vignette-ink`, `.bg-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
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.
199
+ 4. **Texture as section separator.** When transitioning between full-bleed sections, add a `.bg-separator-solid` or `.bg-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
 
@@ -214,11 +214,11 @@ Section 4 (cta) — Scanline-fast overlay, invert section if 1-bit
214
214
 
215
215
  ### 1-bit section variants
216
216
 
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.
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 `.bg-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
- - **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
- - **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-ink` on slide/scene containers to draw the eye center. Used in intro animations and splash panels.
219
+ - **Halftone card wall**: grid of cards with `.bg-halftone-sm` or `.bg-halftone-md` on the section container. Each card has solid `.card` background that breaks the texture — texture only lives between cards.
220
+ - **Noise backdrop**: `.bg-noise` on full-page backgrounds for analog feel. Use `.bg-noise-heavy` only on splash/loading screens where content density is low.
221
+ - **Vignette frame**: `.bg-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
 
@@ -228,17 +228,17 @@ Section 4 (cta) — Scanline-fast overlay, invert section if 1-bit
228
228
 
229
229
  | Class | Description | Technique |
230
230
  | ------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------- |
231
- | `.isometric-grid` | Diamond tiling from dual 30°/-30° hatch lines at 24px pitch | `repeating-linear-gradient(30deg)` + `(-30deg)` |
232
- | `.isometric-grid-dense` | Tighter 12px diamond grid | Same technique, denser pitch |
233
- | `.isometric-grid-accent` | Magenta-tinted 24px diamond grid | Same, with `--magenta-500 / 0.12` stroke |
234
- | `.isometric-cubes` | 3-face cube wall: right (150°), top (-30°), left (30°) faces at 40px | 3 `repeating-linear-gradient` layers with face-specific opacity |
235
- | `.isometric-cubes-dense` | 20px cube wall | Same, finer resolution |
236
- | `.isometric-cubes-accent` | Magenta-tinted cube wall | Same, with accent hue fills |
237
- | `.isometric-pyramid` | Ascending zigzag steps: 150° + -30° gradients | Dual gradient with offset phase |
238
- | `.isometric-hex` | Honeycomb hex grid from 60°/-60°/0° overlapping | 3 `repeating-linear-gradient` layers |
239
- | `.isometric-pipes` | Converging tunnel perspective: left/right walls (30°/-30°) + floor (0°) | 3-gradient tunnel simulation |
240
- | `.isometric-pipes-fast` | Denser tunnel, 8px walls | Same, tighter spacing |
241
- | `.isometric-terrain` | Multi-layer depth: horizontal + 30° + -30° zigzag | 3-layer parallax-ready composition |
231
+ | `.iso-grid` | Diamond tiling from dual 30°/-30° hatch lines at 24px pitch | `repeating-linear-gradient(30deg)` + `(-30deg)` |
232
+ | `.iso-grid-dense` | Tighter 12px diamond grid | Same technique, denser pitch |
233
+ | `.iso-grid-accent` | Magenta-tinted 24px diamond grid | Same, with `--magenta-500 / 0.12` stroke |
234
+ | `.iso-cubes` | 3-face cube wall: right (150°), top (-30°), left (30°) faces at 40px | 3 `repeating-linear-gradient` layers with face-specific opacity |
235
+ | `.iso-cubes-dense` | 20px cube wall | Same, finer resolution |
236
+ | `.iso-cubes-accent` | Magenta-tinted cube wall | Same, with accent hue fills |
237
+ | `.iso-pyramid` | Ascending zigzag steps: 150° + -30° gradients | Dual gradient with offset phase |
238
+ | `.iso-hex` | Honeycomb hex grid from 60°/-60°/0° overlapping | 3 `repeating-linear-gradient` layers |
239
+ | `.iso-pipes` | Converging tunnel perspective: left/right walls (30°/-30°) + floor (0°) | 3-gradient tunnel simulation |
240
+ | `.iso-pipes-fast` | Denser tunnel, 8px walls | Same, tighter spacing |
241
+ | `.iso-terrain` | Multi-layer depth: horizontal + 30° + -30° zigzag | 3-layer parallax-ready composition |
242
242
 
243
243
  ### Composition rules
244
244
 
@@ -636,9 +636,9 @@ Sharp (0px) and subtle (2–4px) are preferred for 1-bit elements. 8–12px for
636
636
 
637
637
  - Scanline overlay on hero / full-bleed sections
638
638
  - Halftone dot separators between content blocks
639
- - Full-bleed sections use `.separator-solid` (2px white line at 25% opacity) as rhythm breaks
639
+ - Full-bleed sections use `.bg-separator-solid` (2px white line at 25% opacity) as rhythm breaks
640
640
  - Texture shift between sections: scanline → solid → halftone → solid → scanline. Never two textured sections adjacent.
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.
641
+ - Manga panel composition: content is the "panel" (solid black border), background is the "page" (noise or scanline). Each panel gets a `.bg-vignette-ink` edge fade.
642
642
 
643
643
  ### Product shell layout
644
644
 
@@ -851,8 +851,8 @@ These classes add thin color to any 1-bit component without breaking the black/w
851
851
 
852
852
  | Animation | Class | Duration | Type | Description |
853
853
  | --------------- | ---------------------------------- | ---------------------------- | ------- | ------------------------------------------------------------------------- |
854
- | Scanline scroll | `.scanline` (::after) | 8s linear infinite | Ambient | Horizontal lines scroll down — signature 7K texture |
855
- | Scanline fast | `.scanline-fast` (::after) | 3s linear infinite | Ambient | Faster variant for high-energy sections |
854
+ | Scanline scroll | `.bg-scanline` (::after) | 8s linear infinite | Ambient | Horizontal lines scroll down — signature 7K texture |
855
+ | Scanline fast | `.bg-scanline-fast` (::after) | 3s linear infinite | Ambient | Faster variant for high-energy sections |
856
856
  | Basic glitch | `.glitch` | 0.3s, 3 iterations | Trigger | Translate jitter on 5 random frames |
857
857
  | Complex glitch | `.glitch-complex` | 0.8s, 2 iterations | Trigger | Multi-axis + skew + clip-path splits |
858
858
  | Glitch accent | `.glitch-accent` | 0.4s, 2 iterations | Trigger | Glitch with magenta glow trail |
@@ -860,11 +860,11 @@ These classes add thin color to any 1-bit component without breaking the black/w
860
860
  | Binary blink | `.blink` / `.blink-fast` | 1s / 0.4s step-end | Ambient | Sharp on/off toggle |
861
861
  | Typewriter | `.typewriter` | 1.5s (30 steps) | Trigger | Text reveal from left |
862
862
  | Neon pulse | `.neon-pulse` / `.neon-pulse-cyan` | 2s ease-in-out | Ambient | Accent glow oscillation |
863
- | Noise shift | `.noise-animated` | 0.5s, steps(5) | Ambient | SVG noise translates in discrete positions |
863
+ | Noise shift | `.bg-noise-animated` | 0.5s, steps(5) | Ambient | SVG noise translates in discrete positions |
864
864
  | Scan reveal | `.scan-reveal` | 2s, 1 iteration | Trigger | White bar sweeps down |
865
- | Pixel fade-in | `.pixel-fade-in` | 0.6s, steps(8) | Trigger | Left-to-right reveal in pixel steps |
865
+ | Pixel fade-in | `.step-fade-in` | 0.6s, steps(8) | Trigger | Left-to-right reveal in stepped frames |
866
866
  | Invert flash | `.invert-flash` | 0.15s, 2 iterations | Trigger | Full filter inversion burst |
867
- | Pixel dots | `.pixel-dots` / `.pixel-dots-fast` | 0.3s, steps(4), 2 iterations | Trigger | Small black squares scatter at random positions — 1-bit corruption effect |
867
+ | Pixel dots | `.step-dots` / `.step-dots-fast` | 0.3s, steps(4), 2 iterations | Trigger | Small black squares scatter at random positions — stepped corruption effect |
868
868
  | Progress scan | `.progress-indeterminate` | 1.5s | Loading | Bar sweeps left-to-right |
869
869
  | Skeleton pulse | `.skeleton` | 1.2s ease-in-out | Loading | Opacity pulse |
870
870
  | Slide-up reveal | `.slide-up-reveal` | 0.5s ease-out | Trigger | Content rises with clip-path |
@@ -891,7 +891,7 @@ These classes add thin color to any 1-bit component without breaking the black/w
891
891
 
892
892
  1. **One ambient + one trigger.** At most one ambient animation (scanline, noise, flicker, shimmer, iso-grid-scroll) runs continuously. Triggered animations (glitch, invert-flash, scan-reveal, iso-assemble, iso-perspective-dolly) fire on interaction.
893
893
  2. **Glitch is a burst, not a loop.** Basic glitch runs exactly 3 iterations (0.9s total) on the class utility. Pixel-dots runs 2 iterations (0.6s) for a quick corruption scatter. Never loop glitch infinitely.
894
- 3. **Scanline is the default ambient.** Every hero/full-bleed section should evaluate whether `.scanline` adds atmosphere. UI content sections (dashboard, settings) must not use ambient animation.
894
+ 3. **Scanline is the default ambient.** Every hero/full-bleed section should evaluate whether `.bg-scanline` adds atmosphere. UI content sections (dashboard, settings) must not use ambient animation.
895
895
  4. **Cascade: reduced-motion wins.** All animations collapse to 0.01ms at `prefers-reduced-motion: reduce`. No exceptions.
896
896
  5. **Step timing for pixel-perfect animation.** Keyframes that simulate digital/retro effects use `steps()` timing instead of `ease`. This preserves sharp on/off quality.
897
897
  6. **Overlay animations must have `pointer-events: none`.** Scanline, vignette, noise, and scan-reveal use `::before`/`::after` pseudo-elements.
@@ -900,11 +900,11 @@ These classes add thin color to any 1-bit component without breaking the black/w
900
900
 
901
901
  | Surface | Ambient animation | Trigger animation |
902
902
  | -------------------------- | ------------------------- | ------------------------------ |
903
- | Landing / marketing hero | `.scanline` (8s) | `.scan-reveal` on load |
903
+ | Landing / marketing hero | `.bg-scanline` (8s) | `.scan-reveal` on load |
904
904
  | Dashboard / app shell | None | `.glitch` on filter change |
905
905
  | Loading state | `.skeleton` or `.shimmer` | None |
906
906
  | Error state | None | `.glitch-complex` on container |
907
- | 1-bit splash / manga panel | `.scanline-fast` (3s) | `.invert-flash` on page enter |
907
+ | 1-bit splash / manga panel | `.bg-scanline-fast` (3s) | `.invert-flash` on page enter |
908
908
  | Toast / notification | None | `.slide-up-reveal` on mount |
909
909
  | Button (accent) | None | Color transition on hover |
910
910
  | Accent text | `.accent-flicker` | None |
@@ -1160,7 +1160,7 @@ import { IsometricBackground } from '7k-design-system/react';
1160
1160
  </IsometricBackground>
1161
1161
  ```
1162
1162
 
1163
- **CSS classes applied:** `.isometric-grid`, `.isometric-grid-animated`
1163
+ **CSS classes applied:** `.iso-grid`, `.iso-grid-animated`
1164
1164
 
1165
1165
  ### ThemeToggle
1166
1166
 
@@ -1269,7 +1269,7 @@ The CSS is split into 10 source files under `src/css/`, compiled into `dist/7k-d
1269
1269
  | `isometric.css` | ~12.5KB | 11 isometric patterns: grid, cubes, pyramid, hex, pipes, terrain + animation variants |
1270
1270
  | `components.css` | ~36KB | 40+ component classes: buttons, forms, nav, data display, overlays, feedback, media, misc |
1271
1271
  | `modifiers.css` | ~2.2KB | Accent layer modifiers: border-top, underline, dot, bar, glow, corner |
1272
- | `animations.css` | ~15.8KB | 20+ keyframe animations: glitch, flicker, blink, typewriter, neon-pulse, scan-reveal, pixel-fade, iso-float |
1272
+ | `animations.css` | ~15.8KB | 20+ keyframe animations: glitch, flicker, blink, typewriter, neon-pulse, scan-reveal, step-fade, iso-float |
1273
1273
  | `accessibility.css` | ~0.6KB | `prefers-reduced-motion` collapse, `:focus-visible` rings, `prefers-contrast` support, screen-reader utilities |
1274
1274
 
1275
1275
  ### PostCSS Pipeline
package/README.md CHANGED
@@ -31,8 +31,8 @@ The system provides these core capabilities:
31
31
  - **Texture categories**: scanline, halftone, dot matrix, stripes, crosshatch, checkerboard, noise, vignette, isometric, surfaces & callouts
32
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
- - **20+ animations**: ambient (scanline scroll, CRT flicker, neon pulse) and trigger (glitch, pixel-dots, invert-flash)
35
- - **Isometric geometry animations**: combined animated background classes (`.isometric-grid-animated`, etc.)
34
+ - **20+ animations**: ambient (scanline scroll, CRT flicker, neon pulse) and trigger (glitch, step-dots, invert-flash)
35
+ - **Isometric geometry animations**: combined animated background classes (`.iso-grid-animated`, etc.)
36
36
  - **Engineering-blueprint aesthetic**: mono labels as "connective tissue" throughout all surfaces
37
37
  - **React UI kit**: 20+ TypeScript components wrapping the CSS system
38
38
 
@@ -171,7 +171,7 @@ Requires self-hosting the `fonts/` directory for Geist Pixel variants.
171
171
  font-family: var(--font-sans);
172
172
  }
173
173
  ```
174
- 4. **Apply textures** — Add classes like `.scanline`, `.halftone-md`, `.noise` to sections
174
+ 4. **Apply textures** — Add classes like `.bg-scanline`, `.bg-halftone-md`, `.bg-noise` to sections
175
175
  5. **Use components** — Apply classes like `.btn-primary`, `.badge-success`, `.input`
176
176
 
177
177
  ## File Structure Notes