musememory 1.11.0 → 2.0.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/archive/.gitkeep +0 -0
- package/.agents/artifacts/.gitkeep +0 -0
- package/.agents/brand/a11y.md +32 -0
- package/.agents/brand/bem-conventions.md +42 -0
- package/.agents/brand/design.md +45 -0
- package/.agents/brand/screenshots/.gitkeep +0 -0
- package/.agents/brand/screenshots/README.md +9 -0
- package/.agents/brand/tokens/base.css +139 -0
- package/.agents/brand/tokens/colors.json +127 -0
- package/.agents/brand/tokens/motion.json +61 -0
- package/.agents/brand/tokens/radii.json +36 -0
- package/.agents/brand/tokens/shadows.json +27 -0
- package/.agents/brand/tokens/spacing.json +68 -0
- package/.agents/brand/tokens/typography.json +79 -0
- package/.agents/context/architecture.md +137 -0
- package/.agents/context/brand.md +19 -0
- package/.agents/context/current.md +41 -0
- package/.agents/context/decisions.md +25 -0
- package/.agents/context/index.md +16 -0
- package/.agents/context/product.md +94 -0
- package/.agents/context/roadmap.md +12 -0
- package/.agents/goals/.gitkeep +0 -0
- package/.agents/research/research-brief-agent-memory-migrator.md +245 -0
- package/.agents/standards/backend-workers-hono.md +41 -0
- package/.agents/standards/council-roles.md +36 -0
- package/.agents/standards/dox-hierarchy.md +80 -0
- package/.agents/standards/execution-kernel.md +122 -0
- package/.agents/standards/frontend-astro.md +50 -0
- package/.agents/standards/frontend-nextjs.md +93 -0
- package/.agents/standards/git-workflow.md +98 -0
- package/.agents/standards/memory-context.md +60 -0
- package/.agents/standards/security-vibeguard.md +41 -0
- package/.agents/standards/system-design.md +67 -0
- package/.agents/standards/tech-stacks.md +52 -0
- package/.agents/standards/workflows.md +54 -0
- package/.agents/workflows/.gitkeep +0 -0
- package/README.md +31 -14
- package/dist/index.js +15502 -10147
- package/package.json +1 -1
- package/schema.json +120 -2
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# ♿ Accessibility (A11y) Baseline Standard
|
|
2
|
+
|
|
3
|
+
> **Target Standard**: WCAG 2.2 Level AA · Principle Zero: Accessibility is a pre-condition for use.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Core Mandates
|
|
8
|
+
|
|
9
|
+
1. **Semantic HTML First**: Always prefer native elements (`<button>`, `<a>`, `<dialog>`, `<details>`, `<label>`). Never use `<div onClick=...>` or `<span onClick=...>`.
|
|
10
|
+
2. **Color Contrast (SC 1.4.3, 1.4.11)**:
|
|
11
|
+
- Body & Normal Text: Minimum **4.5:1** contrast ratio against background.
|
|
12
|
+
- Large Text (≥18px / 14px bold) & UI Elements: Minimum **3:1** contrast ratio.
|
|
13
|
+
- Never convey state with color alone; use **Icon + Text + Color**.
|
|
14
|
+
3. **Keyboard & Focus Management (SC 2.1.1, 2.4.7)**:
|
|
15
|
+
- 100% of interactive flows must be operable via Tab / Enter / Space / Arrow keys.
|
|
16
|
+
- Visible focus ring (minimum 2px thickness with 3:1 contrast) on every interactive element.
|
|
17
|
+
- Never suppress focus (`outline: none` without a high-contrast replacement is forbidden).
|
|
18
|
+
4. **Modals & Dialogs**:
|
|
19
|
+
- Use native `<dialog>` with `showModal()` or trap focus inside custom modals.
|
|
20
|
+
- Focus moves into modal on open and returns to triggering element upon close.
|
|
21
|
+
5. **Touch Targets (SC 2.5.8)**:
|
|
22
|
+
- Minimum interactive hit area of **24×24 CSS pixels** (WCAG AA floor); **44×44 CSS pixels** recommended as the agency ergonomic standard.
|
|
23
|
+
6. **Forms & Labels**:
|
|
24
|
+
- Every input must have a programmatically linked `<label>` via `id`/`htmlFor` or direct element wrapping.
|
|
25
|
+
- Visible error messages with `aria-describedby` linkage.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 2. Automated & Verification Checkpoints
|
|
30
|
+
|
|
31
|
+
- **Zero Axe-Core Violations**: All automated test suites and page builds must pass `axe-core` audits with zero critical or serious violations.
|
|
32
|
+
- **Screen Reader Parity**: Accessible names (`aria-label`, visible text) must accurately describe control actions without duplicating visible strings awkwardly.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# 📐 Semantic BEM CSS Class Architecture
|
|
2
|
+
|
|
3
|
+
> **Purpose**: Standardized Block-Element-Modifier convention for modular, self-documenting, conflict-free styling.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Naming Structure
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
.block → Standalone component root (e.g., .card, .navbar, .modal)
|
|
11
|
+
.block__element → Child part of block (e.g., .card__title, .navbar__item)
|
|
12
|
+
.block--modifier → Variant of block (e.g., .card--featured, .btn--primary)
|
|
13
|
+
.block__element--modifier → Variant of element (e.g., .navbar__link--active)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 2. Core Rules
|
|
19
|
+
|
|
20
|
+
1. **Block**: Lowercase, hyphen-separated for multi-word names (`.pricing-table`, `.hero-banner`).
|
|
21
|
+
2. **Element**: Separated by double underscore (`__`) (`.pricing-table__tier`, `.hero-banner__heading`).
|
|
22
|
+
3. **Modifier**: Separated by double hyphen (`--`) (`.pricing-table--highlighted`, `.btn--danger`).
|
|
23
|
+
4. **Shallow Depth**: Never nest elements beyond one level (`.block__element` ONLY; never `.block__element__subelement`).
|
|
24
|
+
5. **Separation of Concerns**: Avoid using tag selectors (`div`, `p`, `span`) directly in stylesheets. Target explicit BEM classes.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 3. Reference Implementation
|
|
29
|
+
|
|
30
|
+
```html
|
|
31
|
+
<article class="card card--featured">
|
|
32
|
+
<img class="card__image" src="/img/coffee.webp" alt="Artisan blend coffee bag" />
|
|
33
|
+
<div class="card__body">
|
|
34
|
+
<h3 class="card__title">Signature Dark Roast</h3>
|
|
35
|
+
<p class="card__description">Notes of dark chocolate, toasted hazelnut, and caramel.</p>
|
|
36
|
+
<div class="card__footer">
|
|
37
|
+
<span class="card__price">$18.00</span>
|
|
38
|
+
<button class="btn btn--primary btn--sm">Add to Cart</button>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
</article>
|
|
42
|
+
```
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# 🎨 Brand Identity, Design Tokens & UI Architecture
|
|
2
|
+
|
|
3
|
+
> **Purpose**: Single source of truth for visual identity, design tokens, component states, and responsive styling.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Token Architecture
|
|
8
|
+
|
|
9
|
+
All design tokens are defined in `./.agents/brand/tokens/` in W3C DTCG format and mapped to CSS custom properties.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
.agents/brand/tokens/
|
|
13
|
+
├── colors.json # OKLCH color palettes (Light & Dark modes)
|
|
14
|
+
├── typography.json # Fluid typography scales via clamp()
|
|
15
|
+
├── spacing.json # 4px/8px baseline grid
|
|
16
|
+
├── radii.json # Border radii tokens
|
|
17
|
+
├── shadows.json # Elevation & depth layers
|
|
18
|
+
├── motion.json # Durations, easings, spring configs
|
|
19
|
+
└── base.css # Compiled CSS Custom Properties
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 2. The 7 Non-Negotiable UI Component States
|
|
25
|
+
|
|
26
|
+
Every interactive component and page must explicitly handle and render all 7 states:
|
|
27
|
+
|
|
28
|
+
| State | Design & Engineering Requirement |
|
|
29
|
+
| :--- | :--- |
|
|
30
|
+
| **1. Default** | Clean resting state with tokenized colors, padding, and typography. |
|
|
31
|
+
| **2. Loading** | **Full Skeleton UI** mirroring actual content layout. Never render a raw isolated spinner. |
|
|
32
|
+
| **3. Empty** | Friendly, helpful empty-state copy with an immediate primary CTA (e.g., *"Create your first order"*). |
|
|
33
|
+
| **4. Error** | **Inline error message with a retry button**. Do not rely on evanescent toasts alone; never swallow errors. |
|
|
34
|
+
| **5. Focus** | **2px high-contrast visible focus ring** (`outline: 2px solid var(--color-primary); outline-offset: 2px;`). Never `outline: none`. |
|
|
35
|
+
| **6. Disabled** | `opacity: 0.6`, `cursor: not-allowed`, pointer events suppressed, zero hover animations. |
|
|
36
|
+
| **7. Mobile (<640px)** | Stacks vertically, full-width touch-friendly CTAs (minimum 44×44px hit area). |
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 3. Visual Density & Styling Rules
|
|
41
|
+
|
|
42
|
+
- **Tokens Only**: Never introduce arbitrary hex codes (`#1a2b3c`) or ad-hoc pixel values (`margin: 13px`). Use CSS variables (`var(--color-primary)`) or UnoCSS/Tailwind theme tokens.
|
|
43
|
+
- **Fluid Typography**: Use `clamp()` for responsive font sizes (14px–16px body, 24px–32px headings).
|
|
44
|
+
- **Surface Elevation**: Layer cards and elevated modals using `--color-surface-elevated` and `--shadow-md`.
|
|
45
|
+
- **Reference Screenshots**: Reference UI mocks, wireframes, and design snapshots are stored in `./.agents/brand/screenshots/`. Agents inspect these images before constructing or styling matching views.
|
|
File without changes
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 📸 Reference Screenshots & UI Mockups
|
|
2
|
+
|
|
3
|
+
Drop reference screenshots, Figma exports, wireframes, and design snapshots into this folder.
|
|
4
|
+
|
|
5
|
+
## How AI Agents Use This Directory
|
|
6
|
+
1. **Visual Fidelity**: Vision-capable coding agents inspect files in this directory before styling pages, hero sections, pricing tables, or complex dashboards.
|
|
7
|
+
2. **Naming Convention**:
|
|
8
|
+
- `[page-or-component-name]-[breakpoint-or-variant].png` (e.g., `hero-desktop.png`, `checkout-mobile.png`, `pricing-card-dark.png`).
|
|
9
|
+
3. **Format**: PNG, JPG, or WebP.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# CSS Custom Properties
|
|
2
|
+
|
|
3
|
+
/* base.css — Design tokens as CSS custom properties */
|
|
4
|
+
/* Import all token files, export as :root variables */
|
|
5
|
+
|
|
6
|
+
:root {
|
|
7
|
+
/* Colors — Primary */
|
|
8
|
+
--color-primary: oklch(0.45 0.12 60);
|
|
9
|
+
--color-primary-light: oklch(0.55 0.10 60);
|
|
10
|
+
--color-primary-dark: oklch(0.35 0.14 60);
|
|
11
|
+
|
|
12
|
+
/* Colors — Secondary & Accent */
|
|
13
|
+
--color-secondary: oklch(0.65 0.08 150);
|
|
14
|
+
--color-accent: oklch(0.70 0.15 45);
|
|
15
|
+
|
|
16
|
+
/* Colors — Surface */
|
|
17
|
+
--color-surface: oklch(0.98 0.01 85);
|
|
18
|
+
--color-surface-elevated: oklch(1.00 0.00 0);
|
|
19
|
+
|
|
20
|
+
/* Colors — Text */
|
|
21
|
+
--color-text-primary: oklch(0.20 0.02 60);
|
|
22
|
+
--color-text-secondary: oklch(0.45 0.02 60);
|
|
23
|
+
--color-text-tertiary: oklch(0.60 0.01 60);
|
|
24
|
+
|
|
25
|
+
/* Colors — Border */
|
|
26
|
+
--color-border: oklch(0.88 0.01 85);
|
|
27
|
+
--color-border-strong: oklch(0.78 0.02 85);
|
|
28
|
+
|
|
29
|
+
/* Colors — Semantic */
|
|
30
|
+
--color-success: oklch(0.65 0.18 145);
|
|
31
|
+
--color-error: oklch(0.55 0.20 25);
|
|
32
|
+
--color-warning: oklch(0.75 0.15 80);
|
|
33
|
+
--color-info: oklch(0.65 0.12 250);
|
|
34
|
+
|
|
35
|
+
/* Typography — Font Family */
|
|
36
|
+
--font-heading: 'Inter', system-ui, -apple-system, sans-serif;
|
|
37
|
+
--font-body: 'Inter', system-ui, -apple-system, sans-serif;
|
|
38
|
+
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
|
|
39
|
+
|
|
40
|
+
/* Typography — Sizes (fluid) */
|
|
41
|
+
--text-xs: clamp(0.625rem, 0.5rem + 0.25vw, 0.75rem);
|
|
42
|
+
--text-sm: clamp(0.75rem, 0.65rem + 0.25vw, 0.875rem);
|
|
43
|
+
--text-base: clamp(0.875rem, 0.8rem + 0.2vw, 1rem);
|
|
44
|
+
--text-lg: clamp(1rem, 0.9rem + 0.3vw, 1.125rem);
|
|
45
|
+
--text-xl: clamp(1.125rem, 1rem + 0.5vw, 1.25rem);
|
|
46
|
+
--text-2xl: clamp(1.25rem, 1rem + 1vw, 1.5rem);
|
|
47
|
+
--text-3xl: clamp(1.5rem, 1.2rem + 1.5vw, 2rem);
|
|
48
|
+
--text-4xl: clamp(1.875rem, 1.5rem + 2vw, 2.5rem);
|
|
49
|
+
--text-5xl: clamp(2.25rem, 1.8rem + 2.5vw, 3rem);
|
|
50
|
+
|
|
51
|
+
/* Typography — Weight */
|
|
52
|
+
--font-regular: 400;
|
|
53
|
+
--font-medium: 500;
|
|
54
|
+
--font-semibold: 600;
|
|
55
|
+
--font-bold: 700;
|
|
56
|
+
|
|
57
|
+
/* Typography — Line Height */
|
|
58
|
+
--leading-tight: 1.2;
|
|
59
|
+
--leading-snug: 1.375;
|
|
60
|
+
--leading-normal: 1.5;
|
|
61
|
+
--leading-relaxed: 1.625;
|
|
62
|
+
|
|
63
|
+
/* Spacing (fluid) */
|
|
64
|
+
--space-0: 0;
|
|
65
|
+
--space-1: clamp(0.25rem, 0.2rem + 0.1vw, 0.25rem);
|
|
66
|
+
--space-2: clamp(0.5rem, 0.4rem + 0.2vw, 0.5rem);
|
|
67
|
+
--space-3: clamp(0.75rem, 0.6rem + 0.3vw, 0.75rem);
|
|
68
|
+
--space-4: clamp(1rem, 0.8rem + 0.4vw, 1rem);
|
|
69
|
+
--space-5: clamp(1.25rem, 1rem + 0.5vw, 1.25rem);
|
|
70
|
+
--space-6: clamp(1.5rem, 1.2rem + 0.6vw, 1.5rem);
|
|
71
|
+
--space-8: clamp(2rem, 1.6rem + 0.8vw, 2rem);
|
|
72
|
+
--space-10: clamp(2.5rem, 2rem + 1vw, 2.5rem);
|
|
73
|
+
--space-12: clamp(3rem, 2.4rem + 1.2vw, 3rem);
|
|
74
|
+
--space-16: clamp(4rem, 3.2rem + 1.6vw, 4rem);
|
|
75
|
+
--space-20: clamp(5rem, 4rem + 2vw, 5rem);
|
|
76
|
+
--space-24: clamp(6rem, 4.8rem + 2.4vw, 6rem);
|
|
77
|
+
|
|
78
|
+
/* Radius */
|
|
79
|
+
--radius-none: 0;
|
|
80
|
+
--radius-sm: 0.25rem;
|
|
81
|
+
--radius-md: 0.5rem;
|
|
82
|
+
--radius-lg: 0.75rem;
|
|
83
|
+
--radius-xl: 1rem;
|
|
84
|
+
--radius-full: 9999px;
|
|
85
|
+
|
|
86
|
+
/* Shadows */
|
|
87
|
+
--shadow-sm: 0 1px 2px oklch(0 0 0 / 0.05);
|
|
88
|
+
--shadow-md: 0 4px 6px -1px oklch(0 0 0 / 0.07), 0 2px 4px -2px oklch(0 0 0 / 0.05);
|
|
89
|
+
--shadow-lg: 0 10px 15px -3px oklch(0 0 0 / 0.08), 0 4px 6px -4px oklch(0 0 0 / 0.04);
|
|
90
|
+
--shadow-xl: 0 20px 25px -5px oklch(0 0 0 / 0.1), 0 8px 10px -6px oklch(0 0 0 / 0.04);
|
|
91
|
+
|
|
92
|
+
/* Motion — Duration */
|
|
93
|
+
--duration-instant: 0ms;
|
|
94
|
+
--duration-fast: 100ms;
|
|
95
|
+
--duration-normal: 200ms;
|
|
96
|
+
--duration-slow: 350ms;
|
|
97
|
+
--duration-slower: 500ms;
|
|
98
|
+
|
|
99
|
+
/* Motion — Easing */
|
|
100
|
+
--ease-default: cubic-bezier(0.4, 0, 0.2, 1);
|
|
101
|
+
--ease-in: cubic-bezier(0.4, 0, 1, 1);
|
|
102
|
+
--ease-out: cubic-bezier(0, 0, 0.2, 1);
|
|
103
|
+
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* Dark mode overrides */
|
|
107
|
+
[data-theme="dark"] {
|
|
108
|
+
--color-surface: oklch(0.15 0.01 60);
|
|
109
|
+
--color-surface-elevated: oklch(0.20 0.01 60);
|
|
110
|
+
--color-text-primary: oklch(0.95 0.01 85);
|
|
111
|
+
--color-text-secondary: oklch(0.75 0.01 85);
|
|
112
|
+
--color-text-tertiary: oklch(0.55 0.01 85);
|
|
113
|
+
--color-border: oklch(0.25 0.01 60);
|
|
114
|
+
--color-border-strong: oklch(0.35 0.01 60);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* System preference fallback */
|
|
118
|
+
@media (prefers-color-scheme: dark) {
|
|
119
|
+
:root:not([data-theme="light"]) {
|
|
120
|
+
--color-surface: oklch(0.15 0.01 60);
|
|
121
|
+
--color-surface-elevated: oklch(0.20 0.01 60);
|
|
122
|
+
--color-text-primary: oklch(0.95 0.01 85);
|
|
123
|
+
--color-text-secondary: oklch(0.75 0.01 85);
|
|
124
|
+
--color-text-tertiary: oklch(0.55 0.01 85);
|
|
125
|
+
--color-border: oklch(0.25 0.01 60);
|
|
126
|
+
--color-border-strong: oklch(0.35 0.01 60);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* Reduced motion */
|
|
131
|
+
@media (prefers-reduced-motion: reduce) {
|
|
132
|
+
*,
|
|
133
|
+
*::before,
|
|
134
|
+
*::after {
|
|
135
|
+
animation-duration: 0.01ms !important;
|
|
136
|
+
animation-iteration-count: 1 !important;
|
|
137
|
+
transition-duration: 0.01ms !important;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Color Tokens
|
|
2
|
+
|
|
3
|
+
{
|
|
4
|
+
"$schema": "https://design-tokens.github.io/community-group/format/",
|
|
5
|
+
"color": {
|
|
6
|
+
"primary": {
|
|
7
|
+
"default": {
|
|
8
|
+
"$type": "color",
|
|
9
|
+
"$value": "oklch(0.45 0.12 60)",
|
|
10
|
+
"$description": "Brand brown — CTAs, key actions"
|
|
11
|
+
},
|
|
12
|
+
"light": {
|
|
13
|
+
"$type": "color",
|
|
14
|
+
"$value": "oklch(0.55 0.10 60)",
|
|
15
|
+
"$description": "Hover states, lighter accents"
|
|
16
|
+
},
|
|
17
|
+
"dark": {
|
|
18
|
+
"$type": "color",
|
|
19
|
+
"$value": "oklch(0.35 0.14 60)",
|
|
20
|
+
"$description": "Active states, dark accents"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"secondary": {
|
|
24
|
+
"$type": "color",
|
|
25
|
+
"$value": "oklch(0.65 0.08 150)",
|
|
26
|
+
"$description": "Secondary brand, supporting elements"
|
|
27
|
+
},
|
|
28
|
+
"accent": {
|
|
29
|
+
"$type": "color",
|
|
30
|
+
"$value": "oklch(0.70 0.15 45)",
|
|
31
|
+
"$description": "Warm accent, highlights, offers"
|
|
32
|
+
},
|
|
33
|
+
"surface": {
|
|
34
|
+
"default": {
|
|
35
|
+
"$type": "color",
|
|
36
|
+
"$value": "oklch(0.98 0.01 85)",
|
|
37
|
+
"$description": "Page background"
|
|
38
|
+
},
|
|
39
|
+
"elevated": {
|
|
40
|
+
"$type": "color",
|
|
41
|
+
"$value": "oklch(1.00 0.00 0)",
|
|
42
|
+
"$description": "Cards, modals, elevated layers"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"text": {
|
|
46
|
+
"primary": {
|
|
47
|
+
"$type": "color",
|
|
48
|
+
"$value": "oklch(0.20 0.02 60)",
|
|
49
|
+
"$description": "Headings, primary text"
|
|
50
|
+
},
|
|
51
|
+
"secondary": {
|
|
52
|
+
"$type": "color",
|
|
53
|
+
"$value": "oklch(0.45 0.02 60)",
|
|
54
|
+
"$description": "Body text, descriptions"
|
|
55
|
+
},
|
|
56
|
+
"tertiary": {
|
|
57
|
+
"$type": "color",
|
|
58
|
+
"$value": "oklch(0.60 0.01 60)",
|
|
59
|
+
"$description": "Placeholders, captions"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"border": {
|
|
63
|
+
"default": {
|
|
64
|
+
"$type": "color",
|
|
65
|
+
"$value": "oklch(0.88 0.01 85)"
|
|
66
|
+
},
|
|
67
|
+
"strong": {
|
|
68
|
+
"$type": "color",
|
|
69
|
+
"$value": "oklch(0.78 0.02 85)"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"semantic": {
|
|
73
|
+
"success": {
|
|
74
|
+
"$type": "color",
|
|
75
|
+
"$value": "oklch(0.65 0.18 145)",
|
|
76
|
+
"$description": "Confirmations, in-stock"
|
|
77
|
+
},
|
|
78
|
+
"error": {
|
|
79
|
+
"$type": "color",
|
|
80
|
+
"$value": "oklch(0.55 0.20 25)",
|
|
81
|
+
"$description": "Errors, destructive actions"
|
|
82
|
+
},
|
|
83
|
+
"warning": {
|
|
84
|
+
"$type": "color",
|
|
85
|
+
"$value": "oklch(0.75 0.15 80)",
|
|
86
|
+
"$description": "Warnings, attention"
|
|
87
|
+
},
|
|
88
|
+
"info": {
|
|
89
|
+
"$type": "color",
|
|
90
|
+
"$value": "oklch(0.65 0.12 250)",
|
|
91
|
+
"$description": "Informational, links"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"dark": {
|
|
95
|
+
"surface": {
|
|
96
|
+
"$type": "color",
|
|
97
|
+
"$value": "oklch(0.15 0.01 60)"
|
|
98
|
+
},
|
|
99
|
+
"surface-elevated": {
|
|
100
|
+
"$type": "color",
|
|
101
|
+
"$value": "oklch(0.20 0.01 60)"
|
|
102
|
+
},
|
|
103
|
+
"text-primary": {
|
|
104
|
+
"$type": "color",
|
|
105
|
+
"$value": "oklch(0.95 0.01 85)"
|
|
106
|
+
},
|
|
107
|
+
"text-secondary": {
|
|
108
|
+
"$type": "color",
|
|
109
|
+
"$value": "oklch(0.75 0.01 85)"
|
|
110
|
+
},
|
|
111
|
+
"text-tertiary": {
|
|
112
|
+
"$type": "color",
|
|
113
|
+
"$value": "oklch(0.55 0.01 85)"
|
|
114
|
+
},
|
|
115
|
+
"border": {
|
|
116
|
+
"$type": "color",
|
|
117
|
+
"$value": "oklch(0.25 0.01 60)"
|
|
118
|
+
},
|
|
119
|
+
"border-strong": {
|
|
120
|
+
"$type": "color",
|
|
121
|
+
"$value": "oklch(0.35 0.01 60)"
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Motion Tokens
|
|
2
|
+
|
|
3
|
+
{
|
|
4
|
+
"$schema": "https://design-tokens.github.io/community-group/format/",
|
|
5
|
+
"motion": {
|
|
6
|
+
"duration": {
|
|
7
|
+
"instant": {
|
|
8
|
+
"$type": "duration",
|
|
9
|
+
"$value": "0ms",
|
|
10
|
+
"$description": "No animation"
|
|
11
|
+
},
|
|
12
|
+
"fast": {
|
|
13
|
+
"$type": "duration",
|
|
14
|
+
"$value": "100ms",
|
|
15
|
+
"$description": "Hover, focus, micro-interactions"
|
|
16
|
+
},
|
|
17
|
+
"normal": {
|
|
18
|
+
"$type": "duration",
|
|
19
|
+
"$value": "200ms",
|
|
20
|
+
"$description": "Transitions, reveals"
|
|
21
|
+
},
|
|
22
|
+
"slow": {
|
|
23
|
+
"$type": "duration",
|
|
24
|
+
"$value": "350ms",
|
|
25
|
+
"$description": "Modals, drawers, page transitions"
|
|
26
|
+
},
|
|
27
|
+
"slower": {
|
|
28
|
+
"$type": "duration",
|
|
29
|
+
"$value": "500ms",
|
|
30
|
+
"$description": "Complex sequences, hero animations"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"easing": {
|
|
34
|
+
"default": {
|
|
35
|
+
"$type": "cubicBezier",
|
|
36
|
+
"$value": "cubic-bezier(0.4, 0, 0.2, 1)",
|
|
37
|
+
"$description": "Standard easing"
|
|
38
|
+
},
|
|
39
|
+
"in": {
|
|
40
|
+
"$type": "cubicBezier",
|
|
41
|
+
"$value": "cubic-bezier(0.4, 0, 1, 1)",
|
|
42
|
+
"$description": "Accelerate"
|
|
43
|
+
},
|
|
44
|
+
"out": {
|
|
45
|
+
"$type": "cubicBezier",
|
|
46
|
+
"$value": "cubic-bezier(0, 0, 0.2, 1)",
|
|
47
|
+
"$description": "Decelerate"
|
|
48
|
+
},
|
|
49
|
+
"spring": {
|
|
50
|
+
"$type": "cubicBezier",
|
|
51
|
+
"$value": "cubic-bezier(0.34, 1.56, 0.64, 1)",
|
|
52
|
+
"$description": "Bouncy spring for playful elements"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"reducedMotion": {
|
|
56
|
+
"$type": "string",
|
|
57
|
+
"$value": "prefers-reduced-motion: reduce",
|
|
58
|
+
"$description": "All motion respects user preference"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Border Radius Tokens
|
|
2
|
+
|
|
3
|
+
{
|
|
4
|
+
"$schema": "https://design-tokens.github.io/community-group/format/",
|
|
5
|
+
"radius": {
|
|
6
|
+
"none": {
|
|
7
|
+
"$type": "dimension",
|
|
8
|
+
"$value": "0"
|
|
9
|
+
},
|
|
10
|
+
"sm": {
|
|
11
|
+
"$type": "dimension",
|
|
12
|
+
"$value": "0.25rem",
|
|
13
|
+
"$description": "Buttons, inputs — 4px"
|
|
14
|
+
},
|
|
15
|
+
"md": {
|
|
16
|
+
"$type": "dimension",
|
|
17
|
+
"$value": "0.5rem",
|
|
18
|
+
"$description": "Cards, containers — 8px"
|
|
19
|
+
},
|
|
20
|
+
"lg": {
|
|
21
|
+
"$type": "dimension",
|
|
22
|
+
"$value": "0.75rem",
|
|
23
|
+
"$description": "Modals, large cards — 12px"
|
|
24
|
+
},
|
|
25
|
+
"xl": {
|
|
26
|
+
"$type": "dimension",
|
|
27
|
+
"$value": "1rem",
|
|
28
|
+
"$description": "Hero cards, feature blocks — 16px"
|
|
29
|
+
},
|
|
30
|
+
"full": {
|
|
31
|
+
"$type": "dimension",
|
|
32
|
+
"$value": "9999px",
|
|
33
|
+
"$description": "Pills, avatars, circular"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Shadow Tokens
|
|
2
|
+
|
|
3
|
+
{
|
|
4
|
+
"$schema": "https://design-tokens.github.io/community-group/format/",
|
|
5
|
+
"shadow": {
|
|
6
|
+
"sm": {
|
|
7
|
+
"$type": "shadow",
|
|
8
|
+
"$value": "0 1px 2px oklch(0 0 0 / 0.05)",
|
|
9
|
+
"$description": "Subtle lift"
|
|
10
|
+
},
|
|
11
|
+
"md": {
|
|
12
|
+
"$type": "shadow",
|
|
13
|
+
"$value": "0 4px 6px -1px oklch(0 0 0 / 0.07), 0 2px 4px -2px oklch(0 0 0 / 0.05)",
|
|
14
|
+
"$description": "Cards, dropdowns"
|
|
15
|
+
},
|
|
16
|
+
"lg": {
|
|
17
|
+
"$type": "shadow",
|
|
18
|
+
"$value": "0 10px 15px -3px oklch(0 0 0 / 0.08), 0 4px 6px -4px oklch(0 0 0 / 0.04)",
|
|
19
|
+
"$description": "Modals, popovers"
|
|
20
|
+
},
|
|
21
|
+
"xl": {
|
|
22
|
+
"$type": "shadow",
|
|
23
|
+
"$value": "0 20px 25px -5px oklch(0 0 0 / 0.1), 0 8px 10px -6px oklch(0 0 0 / 0.04)",
|
|
24
|
+
"$description": "Floating elements"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Spacing Tokens
|
|
2
|
+
|
|
3
|
+
{
|
|
4
|
+
"$schema": "https://design-tokens.github.io/community-group/format/",
|
|
5
|
+
"space": {
|
|
6
|
+
"0": { "$type": "dimension", "$value": "0" },
|
|
7
|
+
"1": {
|
|
8
|
+
"$type": "dimension",
|
|
9
|
+
"$value": "clamp(0.25rem, 0.2rem + 0.1vw, 0.25rem)",
|
|
10
|
+
"$description": "Tight gaps"
|
|
11
|
+
},
|
|
12
|
+
"2": {
|
|
13
|
+
"$type": "dimension",
|
|
14
|
+
"$value": "clamp(0.5rem, 0.4rem + 0.2vw, 0.5rem)",
|
|
15
|
+
"$description": "Small gaps"
|
|
16
|
+
},
|
|
17
|
+
"3": {
|
|
18
|
+
"$type": "dimension",
|
|
19
|
+
"$value": "clamp(0.75rem, 0.6rem + 0.3vw, 0.75rem)",
|
|
20
|
+
"$description": "Default gaps"
|
|
21
|
+
},
|
|
22
|
+
"4": {
|
|
23
|
+
"$type": "dimension",
|
|
24
|
+
"$value": "clamp(1rem, 0.8rem + 0.4vw, 1rem)",
|
|
25
|
+
"$description": "Medium gaps"
|
|
26
|
+
},
|
|
27
|
+
"5": {
|
|
28
|
+
"$type": "dimension",
|
|
29
|
+
"$value": "clamp(1.25rem, 1rem + 0.5vw, 1.25rem)",
|
|
30
|
+
"$description": "Section spacing"
|
|
31
|
+
},
|
|
32
|
+
"6": {
|
|
33
|
+
"$type": "dimension",
|
|
34
|
+
"$value": "clamp(1.5rem, 1.2rem + 0.6vw, 1.5rem)",
|
|
35
|
+
"$description": "Large gaps"
|
|
36
|
+
},
|
|
37
|
+
"8": {
|
|
38
|
+
"$type": "dimension",
|
|
39
|
+
"$value": "clamp(2rem, 1.6rem + 0.8vw, 2rem)",
|
|
40
|
+
"$description": "Section margins"
|
|
41
|
+
},
|
|
42
|
+
"10": {
|
|
43
|
+
"$type": "dimension",
|
|
44
|
+
"$value": "clamp(2.5rem, 2rem + 1vw, 2.5rem)",
|
|
45
|
+
"$description": "Large section margins"
|
|
46
|
+
},
|
|
47
|
+
"12": {
|
|
48
|
+
"$type": "dimension",
|
|
49
|
+
"$value": "clamp(3rem, 2.4rem + 1.2vw, 3rem)",
|
|
50
|
+
"$description": "Hero spacing"
|
|
51
|
+
},
|
|
52
|
+
"16": {
|
|
53
|
+
"$type": "dimension",
|
|
54
|
+
"$value": "clamp(4rem, 3.2rem + 1.6vw, 4rem)",
|
|
55
|
+
"$description": "Page section gaps"
|
|
56
|
+
},
|
|
57
|
+
"20": {
|
|
58
|
+
"$type": "dimension",
|
|
59
|
+
"$value": "clamp(5rem, 4rem + 2vw, 5rem)",
|
|
60
|
+
"$description": "Major section breaks"
|
|
61
|
+
},
|
|
62
|
+
"24": {
|
|
63
|
+
"$type": "dimension",
|
|
64
|
+
"$value": "clamp(6rem, 4.8rem + 2.4vw, 6rem)",
|
|
65
|
+
"$description": "Page-level spacing"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Typography Tokens
|
|
2
|
+
|
|
3
|
+
{
|
|
4
|
+
"$schema": "https://design-tokens.github.io/community-group/format/",
|
|
5
|
+
"fontFamily": {
|
|
6
|
+
"heading": {
|
|
7
|
+
"$type": "fontFamily",
|
|
8
|
+
"$value": "'Inter', system-ui, -apple-system, sans-serif"
|
|
9
|
+
},
|
|
10
|
+
"body": {
|
|
11
|
+
"$type": "fontFamily",
|
|
12
|
+
"$value": "'Inter', system-ui, -apple-system, sans-serif"
|
|
13
|
+
},
|
|
14
|
+
"mono": {
|
|
15
|
+
"$type": "fontFamily",
|
|
16
|
+
"$value": "'JetBrains Mono', ui-monospace, monospace"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"fontSize": {
|
|
20
|
+
"xs": {
|
|
21
|
+
"$type": "dimension",
|
|
22
|
+
"$value": "clamp(0.625rem, 0.5rem + 0.25vw, 0.75rem)",
|
|
23
|
+
"$description": "Captions, badges — 10-12px"
|
|
24
|
+
},
|
|
25
|
+
"sm": {
|
|
26
|
+
"$type": "dimension",
|
|
27
|
+
"$value": "clamp(0.75rem, 0.65rem + 0.25vw, 0.875rem)",
|
|
28
|
+
"$description": "Small text, labels — 12-14px"
|
|
29
|
+
},
|
|
30
|
+
"base": {
|
|
31
|
+
"$type": "dimension",
|
|
32
|
+
"$value": "clamp(0.875rem, 0.8rem + 0.2vw, 1rem)",
|
|
33
|
+
"$description": "Body text — 14-16px"
|
|
34
|
+
},
|
|
35
|
+
"lg": {
|
|
36
|
+
"$type": "dimension",
|
|
37
|
+
"$value": "clamp(1rem, 0.9rem + 0.3vw, 1.125rem)",
|
|
38
|
+
"$description": "Large body, intro — 16-18px"
|
|
39
|
+
},
|
|
40
|
+
"xl": {
|
|
41
|
+
"$type": "dimension",
|
|
42
|
+
"$value": "clamp(1.125rem, 1rem + 0.5vw, 1.25rem)",
|
|
43
|
+
"$description": "Subheadings — 18-20px"
|
|
44
|
+
},
|
|
45
|
+
"2xl": {
|
|
46
|
+
"$type": "dimension",
|
|
47
|
+
"$value": "clamp(1.25rem, 1rem + 1vw, 1.5rem)",
|
|
48
|
+
"$description": "Section headings — 20-24px"
|
|
49
|
+
},
|
|
50
|
+
"3xl": {
|
|
51
|
+
"$type": "dimension",
|
|
52
|
+
"$value": "clamp(1.5rem, 1.2rem + 1.5vw, 2rem)",
|
|
53
|
+
"$description": "Page headings — 24-32px"
|
|
54
|
+
},
|
|
55
|
+
"4xl": {
|
|
56
|
+
"$type": "dimension",
|
|
57
|
+
"$value": "clamp(1.875rem, 1.5rem + 2vw, 2.5rem)",
|
|
58
|
+
"$description": "Hero headings — 30-40px"
|
|
59
|
+
},
|
|
60
|
+
"5xl": {
|
|
61
|
+
"$type": "dimension",
|
|
62
|
+
"$value": "clamp(2.25rem, 1.8rem + 2.5vw, 3rem)",
|
|
63
|
+
"$description": "Display headings — 36-48px"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"fontWeight": {
|
|
67
|
+
"regular": { "$type": "fontWeight", "$value": 400 },
|
|
68
|
+
"medium": { "$type": "fontWeight", "$value": 500 },
|
|
69
|
+
"semibold": { "$type": "fontWeight", "$value": 600 },
|
|
70
|
+
"bold": { "$type": "fontWeight", "$value": 700 }
|
|
71
|
+
},
|
|
72
|
+
"lineHeight": {
|
|
73
|
+
"tight": { "$type": "number", "$value": 1.2, "$description": "Headings" },
|
|
74
|
+
"snug": { "$type": "number", "$value": 1.375, "$description": "Subheadings" },
|
|
75
|
+
"normal": { "$type": "number", "$value": 1.5, "$description": "Body text" },
|
|
76
|
+
"relaxed": { "$type": "number", "$value": 1.625, "$description": "Long-form content" }
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|