@hewnui/themes 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +33 -2
- package/dist/authoring/css-vars.d.ts +10 -0
- package/dist/authoring/css-vars.js +83 -0
- package/dist/authoring/derive.d.ts +9 -0
- package/dist/authoring/derive.js +79 -0
- package/dist/authoring/export-css.d.ts +8 -0
- package/dist/authoring/export-css.js +60 -0
- package/dist/authoring/export-design-md.d.ts +5 -0
- package/dist/authoring/export-design-md.js +113 -0
- package/dist/authoring/export-dtcg.d.ts +6 -0
- package/dist/authoring/export-dtcg.js +85 -0
- package/dist/authoring/export-figma.d.ts +27 -0
- package/dist/authoring/export-figma.js +76 -0
- package/dist/authoring/export-formats.d.ts +27 -0
- package/dist/authoring/export-formats.js +62 -0
- package/dist/authoring/export-skill.d.ts +5 -0
- package/dist/authoring/export-skill.js +75 -0
- package/dist/authoring/export-sticker.d.ts +6 -0
- package/dist/authoring/export-sticker.js +54 -0
- package/dist/authoring/export-style-dictionary.d.ts +3 -0
- package/dist/authoring/export-style-dictionary.js +52 -0
- package/dist/authoring/figma-kit.d.ts +16 -0
- package/dist/authoring/figma-kit.js +41 -0
- package/dist/authoring/index.d.ts +21 -0
- package/dist/authoring/index.js +18 -0
- package/dist/authoring/oklch.d.ts +11 -0
- package/dist/authoring/oklch.js +116 -0
- package/dist/authoring/override-map.d.ts +9 -0
- package/dist/authoring/override-map.js +150 -0
- package/dist/authoring/pack-def.d.ts +7 -0
- package/dist/authoring/pack-def.js +3 -0
- package/dist/authoring/pack-meta.d.ts +10 -0
- package/dist/authoring/pack-meta.js +58 -0
- package/dist/authoring/packs-dual.d.ts +129 -0
- package/dist/authoring/packs-dual.js +130 -0
- package/dist/authoring/packs-single.d.ts +87 -0
- package/dist/authoring/packs-single.js +88 -0
- package/dist/authoring/packs.d.ts +8 -0
- package/dist/authoring/packs.js +26 -0
- package/dist/authoring/pro-apply.d.ts +8 -0
- package/dist/authoring/pro-apply.js +107 -0
- package/dist/authoring/propose.d.ts +21 -0
- package/dist/authoring/propose.js +162 -0
- package/dist/authoring/ramps.d.ts +13 -0
- package/dist/authoring/ramps.js +40 -0
- package/dist/authoring/status-ramps.d.ts +13 -0
- package/dist/authoring/status-ramps.js +76 -0
- package/dist/authoring/token-entries.d.ts +10 -0
- package/dist/authoring/token-entries.js +52 -0
- package/dist/authoring/types.d.ts +110 -0
- package/dist/authoring/types.js +11 -0
- package/exports/clay/DESIGN.md +138 -0
- package/exports/clay/SKILL.md +94 -0
- package/exports/clay/theme.css +37 -0
- package/exports/clay/tokens.dtcg.json +200 -0
- package/exports/dune/DESIGN.md +138 -0
- package/exports/dune/SKILL.md +94 -0
- package/exports/dune/theme.css +37 -0
- package/exports/dune/tokens.dtcg.json +200 -0
- package/exports/ember/DESIGN.md +138 -0
- package/exports/ember/SKILL.md +94 -0
- package/exports/ember/theme.css +37 -0
- package/exports/ember/tokens.dtcg.json +200 -0
- package/exports/forest/DESIGN.md +138 -0
- package/exports/forest/SKILL.md +94 -0
- package/exports/forest/theme.css +67 -0
- package/exports/forest/tokens.dtcg.json +348 -0
- package/exports/graphite/DESIGN.md +138 -0
- package/exports/graphite/SKILL.md +94 -0
- package/exports/graphite/theme.css +67 -0
- package/exports/graphite/tokens.dtcg.json +348 -0
- package/exports/index.json +45 -0
- package/exports/tide/DESIGN.md +138 -0
- package/exports/tide/SKILL.md +94 -0
- package/exports/tide/theme.css +67 -0
- package/exports/tide/tokens.dtcg.json +348 -0
- package/figma/README.md +16 -0
- package/figma/hewn.tokens.json +1308 -0
- package/figma/sticker-sheet.svg +93 -0
- package/package.json +98 -4
- package/src/authoring/css-vars.ts +92 -0
- package/src/authoring/derive.ts +106 -0
- package/src/authoring/export-css.ts +86 -0
- package/src/authoring/export-design-md.ts +134 -0
- package/src/authoring/export-dtcg.ts +116 -0
- package/src/authoring/export-figma.ts +109 -0
- package/src/authoring/export-formats.ts +101 -0
- package/src/authoring/export-skill.ts +93 -0
- package/src/authoring/export-sticker.ts +60 -0
- package/src/authoring/export-style-dictionary.ts +67 -0
- package/src/authoring/figma-kit.ts +60 -0
- package/src/authoring/index.ts +61 -0
- package/src/authoring/oklch.ts +137 -0
- package/src/authoring/override-map.ts +191 -0
- package/src/authoring/pack-def.ts +11 -0
- package/src/authoring/pack-meta.ts +66 -0
- package/src/authoring/packs-dual.ts +131 -0
- package/src/authoring/packs-single.ts +89 -0
- package/src/authoring/packs.ts +43 -0
- package/src/authoring/pro-apply.ts +156 -0
- package/src/authoring/propose.ts +181 -0
- package/src/authoring/ramps.ts +62 -0
- package/src/authoring/status-ramps.ts +98 -0
- package/src/authoring/token-entries.ts +59 -0
- package/src/authoring/types.ts +133 -0
- package/src/glass-buttons.css +46 -0
- package/src/glass.css +266 -0
- package/src/motion.css +60 -0
- package/src/packs/clay.css +45 -0
- package/src/packs/dune.css +45 -0
- package/src/packs/ember.css +45 -0
- package/src/packs/forest.css +80 -0
- package/src/packs/graphite.css +79 -0
- package/src/packs/tide.css +79 -0
- package/src/radius.css +25 -0
- package/src/tokens.css +104 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Graphite — Design brief
|
|
2
|
+
|
|
3
|
+
> Generated from Hewn curated theme packs. Semantic OKLCH tokens; do not edit by hand.
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
|
|
7
|
+
Technical neutral and restrained steel-blue.
|
|
8
|
+
|
|
9
|
+
- **Pack id:** `graphite`
|
|
10
|
+
- **Base pack:** `graphite`
|
|
11
|
+
- **Supported modes:** light, dark
|
|
12
|
+
- **Color scheme (primary):** light
|
|
13
|
+
|
|
14
|
+
## Palette
|
|
15
|
+
|
|
16
|
+
| Token | Role | light | dark |
|
|
17
|
+
|---|---|---|---|
|
|
18
|
+
| `background` | Page and app canvas | `oklch(0.965 0.005 255)` | `oklch(0.17 0.012 255)` |
|
|
19
|
+
| `foreground` | Primary text and icons | `oklch(0.23 0.02 255)` | `oklch(0.93 0.01 255)` |
|
|
20
|
+
| `surface` | Cards, panels, and elevated chrome | `oklch(0.99 0.003 255)` | `oklch(0.21 0.015 255)` |
|
|
21
|
+
| `surface-raised` | Overlays and nested elevation | `oklch(1 0 0)` | `oklch(0.25 0.018 255)` |
|
|
22
|
+
| `muted` | Subtle fills and disabled wells | `oklch(0.925 0.008 255)` | `oklch(0.27 0.016 255)` |
|
|
23
|
+
| `muted-foreground` | Secondary text and captions | `oklch(0.47 0.02 255)` | `oklch(0.715 0.015 255)` |
|
|
24
|
+
| `accent` | Primary actions and focus accents | `oklch(0.48 0.06 250)` | `oklch(0.7 0.07 245)` |
|
|
25
|
+
| `accent-foreground` | Text/icons on accent | `oklch(0.98 0.01 250)` | `oklch(0.985 0.008 255)` |
|
|
26
|
+
| `border` | Separators and control outlines | `oklch(0.34 0.02 255 / 14%)` | `oklch(0.85 0.012 255 / 12%)` |
|
|
27
|
+
| `ring` | Focus ring | `oklch(0.55 0.07 250)` | `oklch(0.7 0.07 245)` |
|
|
28
|
+
| `danger` | Destructive and error states | `oklch(0.55 0.17 27)` | `oklch(0.68 0.16 27)` |
|
|
29
|
+
| `danger-foreground` | danger-foreground | `oklch(0.985 0.01 27)` | `oklch(0.985 0.01 27)` |
|
|
30
|
+
| `danger-subtle` | danger-subtle | `oklch(0.94 0.035 27)` | `oklch(0.32 0.05 27)` |
|
|
31
|
+
| `danger-border` | danger-border | `oklch(0.56 0.12 27 / 40%)` | `oklch(0.72 0.1 27 / 40%)` |
|
|
32
|
+
| `success` | success | `oklch(0.55 0.15 150)` | `oklch(0.72 0.14 150)` |
|
|
33
|
+
| `success-foreground` | success-foreground | `oklch(0.985 0.01 150)` | `oklch(0.985 0.01 150)` |
|
|
34
|
+
| `success-subtle` | success-subtle | `oklch(0.94 0.035 150)` | `oklch(0.32 0.045 150)` |
|
|
35
|
+
| `success-border` | success-border | `oklch(0.55 0.12 150 / 40%)` | `oklch(0.72 0.1 150 / 40%)` |
|
|
36
|
+
| `warning` | warning | `oklch(0.75 0.14 75)` | `oklch(0.78 0.12 75)` |
|
|
37
|
+
| `warning-foreground` | warning-foreground | `oklch(0.25 0.05 75)` | `oklch(0.22 0.04 75)` |
|
|
38
|
+
| `warning-subtle` | warning-subtle | `oklch(0.94 0.04 75)` | `oklch(0.34 0.04 75)` |
|
|
39
|
+
| `warning-border` | warning-border | `oklch(0.72 0.12 75 / 40%)` | `oklch(0.78 0.1 75 / 40%)` |
|
|
40
|
+
| `info` | info | `oklch(0.52 0.11 250)` | `oklch(0.72 0.1 250)` |
|
|
41
|
+
| `info-foreground` | info-foreground | `oklch(0.985 0.01 250)` | `oklch(0.985 0.01 250)` |
|
|
42
|
+
| `info-subtle` | info-subtle | `oklch(0.94 0.03 250)` | `oklch(0.32 0.035 250)` |
|
|
43
|
+
| `info-border` | info-border | `oklch(0.52 0.09 250 / 40%)` | `oklch(0.72 0.08 250 / 40%)` |
|
|
44
|
+
| `glass-tint` | Tinted frosted glass material | `oklch(0.7 0.06 250 / 26%)` | `oklch(0.58 0.07 245 / 22%)` |
|
|
45
|
+
|
|
46
|
+
## Typography
|
|
47
|
+
|
|
48
|
+
| Role | Stack | Usage |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| Sans | IBM Plex Sans, ui-sans-serif, system-ui | UI chrome, body, headings |
|
|
51
|
+
| Mono | IBM Plex Mono, ui-monospace | Labels, code, tabular metrics |
|
|
52
|
+
| Display | Space Grotesk → sans | Marketing hero H1 and brand wordmark ≥18px only |
|
|
53
|
+
|
|
54
|
+
Body text uses pretty wrapping; headings use balanced wrapping; dynamic numbers use `tabular-nums`.
|
|
55
|
+
|
|
56
|
+
## Radius & density
|
|
57
|
+
|
|
58
|
+
- `radius-sm`: `0.4rem`
|
|
59
|
+
- `radius-md`: `0.6rem`
|
|
60
|
+
- `radius-lg`: `0.85rem`
|
|
61
|
+
- `radius-panel`: `0.85rem`
|
|
62
|
+
- `density`: `1.05`
|
|
63
|
+
- `motion-duration`: `220ms`
|
|
64
|
+
- `motion-stiffness`: `420`
|
|
65
|
+
- `motion-damping`: `32`
|
|
66
|
+
|
|
67
|
+
Density scales control spacing rhythm. Panel radius (`radius-panel`) caps menus and dialogs so they never go full-pill.
|
|
68
|
+
|
|
69
|
+
## Motion
|
|
70
|
+
|
|
71
|
+
- Duration: `220ms`
|
|
72
|
+
- Spring stiffness: `420`
|
|
73
|
+
- Spring damping: `32`
|
|
74
|
+
- Reduced motion always wins over global motion toggles.
|
|
75
|
+
- Prefer transform / opacity / filter; never animate layout properties continuously.
|
|
76
|
+
|
|
77
|
+
## Material
|
|
78
|
+
|
|
79
|
+
- `solid` — structured product surfaces and separators
|
|
80
|
+
- `glass` — accent-tinted frosted surfaces (blur, saturation, refraction, opaque fallback)
|
|
81
|
+
|
|
82
|
+
## Do
|
|
83
|
+
|
|
84
|
+
- Use semantic OKLCH tokens (`--kp-*` / `--color-*`); never hard-code theme hues.
|
|
85
|
+
- Typography: IBM Plex Sans (UI), IBM Plex Mono (code/labels), Space Grotesk only for marketing hero H1 and brand wordmark ≥18px.
|
|
86
|
+
- Icons: Phosphor. Interactive hit targets ≥40×40px; press feedback `scale(0.96)`.
|
|
87
|
+
- Motion: animate transform, opacity, and filter; reduced motion always wins.
|
|
88
|
+
- Radius: concentric scale; panels use `--kp-radius-panel` (never full-pill menus/dialogs).
|
|
89
|
+
- Glass is a global material — tint, blur, saturation, refraction edge, opaque fallback.
|
|
90
|
+
|
|
91
|
+
## Don't
|
|
92
|
+
|
|
93
|
+
- No purple/lila defaults, neon glow, pure black, Inter, emoji, or generic centered heroes.
|
|
94
|
+
- Never `transition: all` — list exact properties.
|
|
95
|
+
- Never `h-screen` for full-height sections — use `min-h-[100dvh]`.
|
|
96
|
+
- No per-component `glass` prop; material is global.
|
|
97
|
+
- Do not invent unsupported light/dark combinations for a pack.
|
|
98
|
+
- Do not put Space Grotesk in UI chrome, forms, or dense product copy.
|
|
99
|
+
|
|
100
|
+
## Token reference (primary mode)
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
--kp-background: oklch(0.965 0.005 255);
|
|
104
|
+
--kp-foreground: oklch(0.23 0.02 255);
|
|
105
|
+
--kp-surface: oklch(0.99 0.003 255);
|
|
106
|
+
--kp-surface-raised: oklch(1 0 0);
|
|
107
|
+
--kp-muted: oklch(0.925 0.008 255);
|
|
108
|
+
--kp-muted-foreground: oklch(0.47 0.02 255);
|
|
109
|
+
--kp-accent: oklch(0.48 0.06 250);
|
|
110
|
+
--kp-accent-foreground: oklch(0.98 0.01 250);
|
|
111
|
+
--kp-border: oklch(0.34 0.02 255 / 14%);
|
|
112
|
+
--kp-ring: oklch(0.55 0.07 250);
|
|
113
|
+
--kp-danger: oklch(0.55 0.17 27);
|
|
114
|
+
--kp-danger-foreground: oklch(0.985 0.01 27);
|
|
115
|
+
--kp-danger-subtle: oklch(0.94 0.035 27);
|
|
116
|
+
--kp-danger-border: oklch(0.56 0.12 27 / 40%);
|
|
117
|
+
--kp-success: oklch(0.55 0.15 150);
|
|
118
|
+
--kp-success-foreground: oklch(0.985 0.01 150);
|
|
119
|
+
--kp-success-subtle: oklch(0.94 0.035 150);
|
|
120
|
+
--kp-success-border: oklch(0.55 0.12 150 / 40%);
|
|
121
|
+
--kp-warning: oklch(0.75 0.14 75);
|
|
122
|
+
--kp-warning-foreground: oklch(0.25 0.05 75);
|
|
123
|
+
--kp-warning-subtle: oklch(0.94 0.04 75);
|
|
124
|
+
--kp-warning-border: oklch(0.72 0.12 75 / 40%);
|
|
125
|
+
--kp-info: oklch(0.52 0.11 250);
|
|
126
|
+
--kp-info-foreground: oklch(0.985 0.01 250);
|
|
127
|
+
--kp-info-subtle: oklch(0.94 0.03 250);
|
|
128
|
+
--kp-info-border: oklch(0.52 0.09 250 / 40%);
|
|
129
|
+
--kp-glass-tint: oklch(0.7 0.06 250 / 26%);
|
|
130
|
+
--kp-radius-sm: 0.4rem;
|
|
131
|
+
--kp-radius-md: 0.6rem;
|
|
132
|
+
--kp-radius-lg: 0.85rem;
|
|
133
|
+
--kp-radius-panel: 0.85rem;
|
|
134
|
+
--kp-density: 1.05;
|
|
135
|
+
--kp-motion-duration: 220ms;
|
|
136
|
+
--kp-motion-stiffness: 420;
|
|
137
|
+
--kp-motion-damping: 32;
|
|
138
|
+
```
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hewn-graphite-theme
|
|
3
|
+
description: Apply the Hewn Graphite theme tokens, typography, motion, and design rules when building or restyling UI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Graphite theme (Hewn)
|
|
7
|
+
|
|
8
|
+
Technical neutral and restrained steel-blue.
|
|
9
|
+
|
|
10
|
+
Use this skill whenever generating UI that should match the **Graphite** pack
|
|
11
|
+
(`graphite`). Supported modes: **light, dark**.
|
|
12
|
+
|
|
13
|
+
## Quick rules
|
|
14
|
+
|
|
15
|
+
- Use semantic OKLCH tokens (`--kp-*` / `--color-*`); never hard-code theme hues.
|
|
16
|
+
- Typography: IBM Plex Sans (UI), IBM Plex Mono (code/labels), Space Grotesk only for marketing hero H1 and brand wordmark ≥18px.
|
|
17
|
+
- Icons: Phosphor. Interactive hit targets ≥40×40px; press feedback `scale(0.96)`.
|
|
18
|
+
- Motion: animate transform, opacity, and filter; reduced motion always wins.
|
|
19
|
+
- Radius: concentric scale; panels use `--kp-radius-panel` (never full-pill menus/dialogs).
|
|
20
|
+
- Glass is a global material — tint, blur, saturation, refraction edge, opaque fallback.
|
|
21
|
+
|
|
22
|
+
## Never
|
|
23
|
+
|
|
24
|
+
- No purple/lila defaults, neon glow, pure black, Inter, emoji, or generic centered heroes.
|
|
25
|
+
- Never `transition: all` — list exact properties.
|
|
26
|
+
- Never `h-screen` for full-height sections — use `min-h-[100dvh]`.
|
|
27
|
+
- No per-component `glass` prop; material is global.
|
|
28
|
+
- Do not invent unsupported light/dark combinations for a pack.
|
|
29
|
+
- Do not put Space Grotesk in UI chrome, forms, or dense product copy.
|
|
30
|
+
|
|
31
|
+
## How to apply
|
|
32
|
+
|
|
33
|
+
1. Set `data-theme="graphite"` and `data-mode="{light|dark}"` on a root element (or import the generated `@theme` CSS).
|
|
34
|
+
2. Prefer semantic utilities / CSS variables (`bg-background`, `text-foreground`, `bg-accent`, `border-border`, `--kp-*`).
|
|
35
|
+
3. Respect reduced motion — disable springs/shimmers when `prefers-reduced-motion: reduce`.
|
|
36
|
+
4. Keep glass as a global material toggle; do not add per-component glass props.
|
|
37
|
+
|
|
38
|
+
## Color tokens (primary mode: light)
|
|
39
|
+
|
|
40
|
+
| Token | Role | Value |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| `--kp-background` / `--color-background` | Page and app canvas | `oklch(0.965 0.005 255)` |
|
|
43
|
+
| `--kp-foreground` / `--color-foreground` | Primary text and icons | `oklch(0.23 0.02 255)` |
|
|
44
|
+
| `--kp-surface` / `--color-surface` | Cards, panels, and elevated chrome | `oklch(0.99 0.003 255)` |
|
|
45
|
+
| `--kp-surface-raised` / `--color-surface-raised` | Overlays and nested elevation | `oklch(1 0 0)` |
|
|
46
|
+
| `--kp-muted` / `--color-muted` | Subtle fills and disabled wells | `oklch(0.925 0.008 255)` |
|
|
47
|
+
| `--kp-muted-foreground` / `--color-muted-foreground` | Secondary text and captions | `oklch(0.47 0.02 255)` |
|
|
48
|
+
| `--kp-accent` / `--color-accent` | Primary actions and focus accents | `oklch(0.48 0.06 250)` |
|
|
49
|
+
| `--kp-accent-foreground` / `--color-accent-foreground` | Text/icons on accent | `oklch(0.98 0.01 250)` |
|
|
50
|
+
| `--kp-border` / `--color-border` | Separators and control outlines | `oklch(0.34 0.02 255 / 14%)` |
|
|
51
|
+
| `--kp-ring` / `--color-ring` | Focus ring | `oklch(0.55 0.07 250)` |
|
|
52
|
+
| `--kp-danger` / `--color-danger` | Destructive and error states | `oklch(0.55 0.17 27)` |
|
|
53
|
+
| `--kp-danger-foreground` / `--color-danger-foreground` | danger-foreground | `oklch(0.985 0.01 27)` |
|
|
54
|
+
| `--kp-danger-subtle` / `--color-danger-subtle` | danger-subtle | `oklch(0.94 0.035 27)` |
|
|
55
|
+
| `--kp-danger-border` / `--color-danger-border` | danger-border | `oklch(0.56 0.12 27 / 40%)` |
|
|
56
|
+
| `--kp-success` / `--color-success` | success | `oklch(0.55 0.15 150)` |
|
|
57
|
+
| `--kp-success-foreground` / `--color-success-foreground` | success-foreground | `oklch(0.985 0.01 150)` |
|
|
58
|
+
| `--kp-success-subtle` / `--color-success-subtle` | success-subtle | `oklch(0.94 0.035 150)` |
|
|
59
|
+
| `--kp-success-border` / `--color-success-border` | success-border | `oklch(0.55 0.12 150 / 40%)` |
|
|
60
|
+
| `--kp-warning` / `--color-warning` | warning | `oklch(0.75 0.14 75)` |
|
|
61
|
+
| `--kp-warning-foreground` / `--color-warning-foreground` | warning-foreground | `oklch(0.25 0.05 75)` |
|
|
62
|
+
| `--kp-warning-subtle` / `--color-warning-subtle` | warning-subtle | `oklch(0.94 0.04 75)` |
|
|
63
|
+
| `--kp-warning-border` / `--color-warning-border` | warning-border | `oklch(0.72 0.12 75 / 40%)` |
|
|
64
|
+
| `--kp-info` / `--color-info` | info | `oklch(0.52 0.11 250)` |
|
|
65
|
+
| `--kp-info-foreground` / `--color-info-foreground` | info-foreground | `oklch(0.985 0.01 250)` |
|
|
66
|
+
| `--kp-info-subtle` / `--color-info-subtle` | info-subtle | `oklch(0.94 0.03 250)` |
|
|
67
|
+
| `--kp-info-border` / `--color-info-border` | info-border | `oklch(0.52 0.09 250 / 40%)` |
|
|
68
|
+
| `--kp-glass-tint` / `--color-glass-tint` | Tinted frosted glass material | `oklch(0.7 0.06 250 / 26%)` |
|
|
69
|
+
|
|
70
|
+
## Structure
|
|
71
|
+
|
|
72
|
+
- `--kp-radius-sm`: `0.4rem`
|
|
73
|
+
- `--kp-radius-md`: `0.6rem`
|
|
74
|
+
- `--kp-radius-lg`: `0.85rem`
|
|
75
|
+
- `--kp-radius-panel`: `0.85rem`
|
|
76
|
+
- `--kp-density`: `1.05`
|
|
77
|
+
- `--kp-motion-duration`: `220ms`
|
|
78
|
+
- `--kp-motion-stiffness`: `420`
|
|
79
|
+
- `--kp-motion-damping`: `32`
|
|
80
|
+
|
|
81
|
+
## Typography
|
|
82
|
+
|
|
83
|
+
- **Sans:** IBM Plex Sans — UI and body
|
|
84
|
+
- **Mono:** IBM Plex Mono — labels, code, metrics (`tabular-nums`)
|
|
85
|
+
- **Display:** Space Grotesk — hero H1 / brand wordmark ≥18px only
|
|
86
|
+
|
|
87
|
+
## Export companions
|
|
88
|
+
|
|
89
|
+
- `DESIGN.md` — full design brief
|
|
90
|
+
- `tokens.dtcg.json` — DTCG (`$value` / `$type`) with light/dark modes
|
|
91
|
+
- `theme.css` — Tailwind v4 `@theme` block
|
|
92
|
+
|
|
93
|
+
When unsure, re-read `DESIGN.md` for this pack and keep accents within the
|
|
94
|
+
curated ramp — do not invent a new hue family.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/* graphite — Tailwind v4 @theme */
|
|
2
|
+
@theme {
|
|
3
|
+
--color-background: oklch(0.965 0.005 255);
|
|
4
|
+
--color-foreground: oklch(0.23 0.02 255);
|
|
5
|
+
--color-surface: oklch(0.99 0.003 255);
|
|
6
|
+
--color-surface-raised: oklch(1 0 0);
|
|
7
|
+
--color-muted: oklch(0.925 0.008 255);
|
|
8
|
+
--color-muted-foreground: oklch(0.47 0.02 255);
|
|
9
|
+
--color-accent: oklch(0.48 0.06 250);
|
|
10
|
+
--color-accent-foreground: oklch(0.98 0.01 250);
|
|
11
|
+
--color-border: oklch(0.34 0.02 255 / 14%);
|
|
12
|
+
--color-ring: oklch(0.55 0.07 250);
|
|
13
|
+
--color-danger: oklch(0.55 0.17 27);
|
|
14
|
+
--color-danger-foreground: oklch(0.985 0.01 27);
|
|
15
|
+
--color-danger-subtle: oklch(0.94 0.035 27);
|
|
16
|
+
--color-danger-border: oklch(0.56 0.12 27 / 40%);
|
|
17
|
+
--color-success: oklch(0.55 0.15 150);
|
|
18
|
+
--color-success-foreground: oklch(0.985 0.01 150);
|
|
19
|
+
--color-success-subtle: oklch(0.94 0.035 150);
|
|
20
|
+
--color-success-border: oklch(0.55 0.12 150 / 40%);
|
|
21
|
+
--color-warning: oklch(0.75 0.14 75);
|
|
22
|
+
--color-warning-foreground: oklch(0.25 0.05 75);
|
|
23
|
+
--color-warning-subtle: oklch(0.94 0.04 75);
|
|
24
|
+
--color-warning-border: oklch(0.72 0.12 75 / 40%);
|
|
25
|
+
--color-info: oklch(0.52 0.11 250);
|
|
26
|
+
--color-info-foreground: oklch(0.985 0.01 250);
|
|
27
|
+
--color-info-subtle: oklch(0.94 0.03 250);
|
|
28
|
+
--color-info-border: oklch(0.52 0.09 250 / 40%);
|
|
29
|
+
--color-glass-tint: oklch(0.7 0.06 250 / 26%);
|
|
30
|
+
--radius-sm: 0.4rem;
|
|
31
|
+
--radius-md: 0.6rem;
|
|
32
|
+
--radius-lg: 0.85rem;
|
|
33
|
+
--radius-panel: 0.85rem;
|
|
34
|
+
--font-sans: var(--font-plex-sans, "IBM Plex Sans"), ui-sans-serif, system-ui, sans-serif;
|
|
35
|
+
--font-mono: var(--font-plex-mono, "IBM Plex Mono"), ui-monospace, monospace;
|
|
36
|
+
--font-display: var(--font-space-grotesk, "Space Grotesk"), var(--font-sans);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
[data-theme="graphite"][data-mode="dark"] {
|
|
40
|
+
--color-background: oklch(0.17 0.012 255);
|
|
41
|
+
--color-foreground: oklch(0.93 0.01 255);
|
|
42
|
+
--color-surface: oklch(0.21 0.015 255);
|
|
43
|
+
--color-surface-raised: oklch(0.25 0.018 255);
|
|
44
|
+
--color-muted: oklch(0.27 0.016 255);
|
|
45
|
+
--color-muted-foreground: oklch(0.715 0.015 255);
|
|
46
|
+
--color-accent: oklch(0.7 0.07 245);
|
|
47
|
+
--color-accent-foreground: oklch(0.985 0.008 255);
|
|
48
|
+
--color-border: oklch(0.85 0.012 255 / 12%);
|
|
49
|
+
--color-ring: oklch(0.7 0.07 245);
|
|
50
|
+
--color-danger: oklch(0.68 0.16 27);
|
|
51
|
+
--color-danger-foreground: oklch(0.985 0.01 27);
|
|
52
|
+
--color-danger-subtle: oklch(0.32 0.05 27);
|
|
53
|
+
--color-danger-border: oklch(0.72 0.1 27 / 40%);
|
|
54
|
+
--color-success: oklch(0.72 0.14 150);
|
|
55
|
+
--color-success-foreground: oklch(0.985 0.01 150);
|
|
56
|
+
--color-success-subtle: oklch(0.32 0.045 150);
|
|
57
|
+
--color-success-border: oklch(0.72 0.1 150 / 40%);
|
|
58
|
+
--color-warning: oklch(0.78 0.12 75);
|
|
59
|
+
--color-warning-foreground: oklch(0.22 0.04 75);
|
|
60
|
+
--color-warning-subtle: oklch(0.34 0.04 75);
|
|
61
|
+
--color-warning-border: oklch(0.78 0.1 75 / 40%);
|
|
62
|
+
--color-info: oklch(0.72 0.1 250);
|
|
63
|
+
--color-info-foreground: oklch(0.985 0.01 250);
|
|
64
|
+
--color-info-subtle: oklch(0.32 0.035 250);
|
|
65
|
+
--color-info-border: oklch(0.72 0.08 250 / 40%);
|
|
66
|
+
--color-glass-tint: oklch(0.58 0.07 245 / 22%);
|
|
67
|
+
}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$description": "Hewn graphite theme — DTCG design tokens (light / dark).",
|
|
3
|
+
"meta": {
|
|
4
|
+
"packId": {
|
|
5
|
+
"$type": "string",
|
|
6
|
+
"$value": "graphite"
|
|
7
|
+
},
|
|
8
|
+
"basePackId": {
|
|
9
|
+
"$type": "string",
|
|
10
|
+
"$value": "graphite"
|
|
11
|
+
},
|
|
12
|
+
"supportedModes": {
|
|
13
|
+
"$type": "string",
|
|
14
|
+
"$value": "light,dark"
|
|
15
|
+
},
|
|
16
|
+
"colorScheme": {
|
|
17
|
+
"$type": "string",
|
|
18
|
+
"$value": "light"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"typography": {
|
|
22
|
+
"fontFamily": {
|
|
23
|
+
"sans": {
|
|
24
|
+
"$type": "fontFamily",
|
|
25
|
+
"$value": [
|
|
26
|
+
"IBM Plex Sans",
|
|
27
|
+
"ui-sans-serif",
|
|
28
|
+
"system-ui",
|
|
29
|
+
"sans-serif"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"mono": {
|
|
33
|
+
"$type": "fontFamily",
|
|
34
|
+
"$value": [
|
|
35
|
+
"IBM Plex Mono",
|
|
36
|
+
"ui-monospace",
|
|
37
|
+
"monospace"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"display": {
|
|
41
|
+
"$type": "fontFamily",
|
|
42
|
+
"$value": [
|
|
43
|
+
"Space Grotesk",
|
|
44
|
+
"IBM Plex Sans",
|
|
45
|
+
"sans-serif"
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"modes": {
|
|
51
|
+
"light": {
|
|
52
|
+
"color": {
|
|
53
|
+
"background": {
|
|
54
|
+
"$type": "color",
|
|
55
|
+
"$value": "oklch(0.965 0.005 255)"
|
|
56
|
+
},
|
|
57
|
+
"foreground": {
|
|
58
|
+
"$type": "color",
|
|
59
|
+
"$value": "oklch(0.23 0.02 255)"
|
|
60
|
+
},
|
|
61
|
+
"surface": {
|
|
62
|
+
"$type": "color",
|
|
63
|
+
"$value": "oklch(0.99 0.003 255)"
|
|
64
|
+
},
|
|
65
|
+
"surface-raised": {
|
|
66
|
+
"$type": "color",
|
|
67
|
+
"$value": "oklch(1 0 0)"
|
|
68
|
+
},
|
|
69
|
+
"muted": {
|
|
70
|
+
"$type": "color",
|
|
71
|
+
"$value": "oklch(0.925 0.008 255)"
|
|
72
|
+
},
|
|
73
|
+
"muted-foreground": {
|
|
74
|
+
"$type": "color",
|
|
75
|
+
"$value": "oklch(0.47 0.02 255)"
|
|
76
|
+
},
|
|
77
|
+
"accent": {
|
|
78
|
+
"$type": "color",
|
|
79
|
+
"$value": "oklch(0.48 0.06 250)"
|
|
80
|
+
},
|
|
81
|
+
"accent-foreground": {
|
|
82
|
+
"$type": "color",
|
|
83
|
+
"$value": "oklch(0.98 0.01 250)"
|
|
84
|
+
},
|
|
85
|
+
"border": {
|
|
86
|
+
"$type": "color",
|
|
87
|
+
"$value": "oklch(0.34 0.02 255 / 14%)"
|
|
88
|
+
},
|
|
89
|
+
"ring": {
|
|
90
|
+
"$type": "color",
|
|
91
|
+
"$value": "oklch(0.55 0.07 250)"
|
|
92
|
+
},
|
|
93
|
+
"danger": {
|
|
94
|
+
"$type": "color",
|
|
95
|
+
"$value": "oklch(0.55 0.17 27)"
|
|
96
|
+
},
|
|
97
|
+
"danger-foreground": {
|
|
98
|
+
"$type": "color",
|
|
99
|
+
"$value": "oklch(0.985 0.01 27)"
|
|
100
|
+
},
|
|
101
|
+
"danger-subtle": {
|
|
102
|
+
"$type": "color",
|
|
103
|
+
"$value": "oklch(0.94 0.035 27)"
|
|
104
|
+
},
|
|
105
|
+
"danger-border": {
|
|
106
|
+
"$type": "color",
|
|
107
|
+
"$value": "oklch(0.56 0.12 27 / 40%)"
|
|
108
|
+
},
|
|
109
|
+
"success": {
|
|
110
|
+
"$type": "color",
|
|
111
|
+
"$value": "oklch(0.55 0.15 150)"
|
|
112
|
+
},
|
|
113
|
+
"success-foreground": {
|
|
114
|
+
"$type": "color",
|
|
115
|
+
"$value": "oklch(0.985 0.01 150)"
|
|
116
|
+
},
|
|
117
|
+
"success-subtle": {
|
|
118
|
+
"$type": "color",
|
|
119
|
+
"$value": "oklch(0.94 0.035 150)"
|
|
120
|
+
},
|
|
121
|
+
"success-border": {
|
|
122
|
+
"$type": "color",
|
|
123
|
+
"$value": "oklch(0.55 0.12 150 / 40%)"
|
|
124
|
+
},
|
|
125
|
+
"warning": {
|
|
126
|
+
"$type": "color",
|
|
127
|
+
"$value": "oklch(0.75 0.14 75)"
|
|
128
|
+
},
|
|
129
|
+
"warning-foreground": {
|
|
130
|
+
"$type": "color",
|
|
131
|
+
"$value": "oklch(0.25 0.05 75)"
|
|
132
|
+
},
|
|
133
|
+
"warning-subtle": {
|
|
134
|
+
"$type": "color",
|
|
135
|
+
"$value": "oklch(0.94 0.04 75)"
|
|
136
|
+
},
|
|
137
|
+
"warning-border": {
|
|
138
|
+
"$type": "color",
|
|
139
|
+
"$value": "oklch(0.72 0.12 75 / 40%)"
|
|
140
|
+
},
|
|
141
|
+
"info": {
|
|
142
|
+
"$type": "color",
|
|
143
|
+
"$value": "oklch(0.52 0.11 250)"
|
|
144
|
+
},
|
|
145
|
+
"info-foreground": {
|
|
146
|
+
"$type": "color",
|
|
147
|
+
"$value": "oklch(0.985 0.01 250)"
|
|
148
|
+
},
|
|
149
|
+
"info-subtle": {
|
|
150
|
+
"$type": "color",
|
|
151
|
+
"$value": "oklch(0.94 0.03 250)"
|
|
152
|
+
},
|
|
153
|
+
"info-border": {
|
|
154
|
+
"$type": "color",
|
|
155
|
+
"$value": "oklch(0.52 0.09 250 / 40%)"
|
|
156
|
+
},
|
|
157
|
+
"glass-tint": {
|
|
158
|
+
"$type": "color",
|
|
159
|
+
"$value": "oklch(0.7 0.06 250 / 26%)"
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"radius": {
|
|
163
|
+
"sm": {
|
|
164
|
+
"$type": "dimension",
|
|
165
|
+
"$value": "0.4rem"
|
|
166
|
+
},
|
|
167
|
+
"md": {
|
|
168
|
+
"$type": "dimension",
|
|
169
|
+
"$value": "0.6rem"
|
|
170
|
+
},
|
|
171
|
+
"lg": {
|
|
172
|
+
"$type": "dimension",
|
|
173
|
+
"$value": "0.85rem"
|
|
174
|
+
},
|
|
175
|
+
"panel": {
|
|
176
|
+
"$type": "dimension",
|
|
177
|
+
"$value": "0.85rem"
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
"motion": {
|
|
181
|
+
"duration": {
|
|
182
|
+
"$type": "duration",
|
|
183
|
+
"$value": "220ms"
|
|
184
|
+
},
|
|
185
|
+
"stiffness": {
|
|
186
|
+
"$type": "number",
|
|
187
|
+
"$value": 420
|
|
188
|
+
},
|
|
189
|
+
"damping": {
|
|
190
|
+
"$type": "number",
|
|
191
|
+
"$value": 32
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
"density": {
|
|
195
|
+
"$type": "number",
|
|
196
|
+
"$value": 1.05
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
"dark": {
|
|
200
|
+
"color": {
|
|
201
|
+
"background": {
|
|
202
|
+
"$type": "color",
|
|
203
|
+
"$value": "oklch(0.17 0.012 255)"
|
|
204
|
+
},
|
|
205
|
+
"foreground": {
|
|
206
|
+
"$type": "color",
|
|
207
|
+
"$value": "oklch(0.93 0.01 255)"
|
|
208
|
+
},
|
|
209
|
+
"surface": {
|
|
210
|
+
"$type": "color",
|
|
211
|
+
"$value": "oklch(0.21 0.015 255)"
|
|
212
|
+
},
|
|
213
|
+
"surface-raised": {
|
|
214
|
+
"$type": "color",
|
|
215
|
+
"$value": "oklch(0.25 0.018 255)"
|
|
216
|
+
},
|
|
217
|
+
"muted": {
|
|
218
|
+
"$type": "color",
|
|
219
|
+
"$value": "oklch(0.27 0.016 255)"
|
|
220
|
+
},
|
|
221
|
+
"muted-foreground": {
|
|
222
|
+
"$type": "color",
|
|
223
|
+
"$value": "oklch(0.715 0.015 255)"
|
|
224
|
+
},
|
|
225
|
+
"accent": {
|
|
226
|
+
"$type": "color",
|
|
227
|
+
"$value": "oklch(0.7 0.07 245)"
|
|
228
|
+
},
|
|
229
|
+
"accent-foreground": {
|
|
230
|
+
"$type": "color",
|
|
231
|
+
"$value": "oklch(0.985 0.008 255)"
|
|
232
|
+
},
|
|
233
|
+
"border": {
|
|
234
|
+
"$type": "color",
|
|
235
|
+
"$value": "oklch(0.85 0.012 255 / 12%)"
|
|
236
|
+
},
|
|
237
|
+
"ring": {
|
|
238
|
+
"$type": "color",
|
|
239
|
+
"$value": "oklch(0.7 0.07 245)"
|
|
240
|
+
},
|
|
241
|
+
"danger": {
|
|
242
|
+
"$type": "color",
|
|
243
|
+
"$value": "oklch(0.68 0.16 27)"
|
|
244
|
+
},
|
|
245
|
+
"danger-foreground": {
|
|
246
|
+
"$type": "color",
|
|
247
|
+
"$value": "oklch(0.985 0.01 27)"
|
|
248
|
+
},
|
|
249
|
+
"danger-subtle": {
|
|
250
|
+
"$type": "color",
|
|
251
|
+
"$value": "oklch(0.32 0.05 27)"
|
|
252
|
+
},
|
|
253
|
+
"danger-border": {
|
|
254
|
+
"$type": "color",
|
|
255
|
+
"$value": "oklch(0.72 0.1 27 / 40%)"
|
|
256
|
+
},
|
|
257
|
+
"success": {
|
|
258
|
+
"$type": "color",
|
|
259
|
+
"$value": "oklch(0.72 0.14 150)"
|
|
260
|
+
},
|
|
261
|
+
"success-foreground": {
|
|
262
|
+
"$type": "color",
|
|
263
|
+
"$value": "oklch(0.985 0.01 150)"
|
|
264
|
+
},
|
|
265
|
+
"success-subtle": {
|
|
266
|
+
"$type": "color",
|
|
267
|
+
"$value": "oklch(0.32 0.045 150)"
|
|
268
|
+
},
|
|
269
|
+
"success-border": {
|
|
270
|
+
"$type": "color",
|
|
271
|
+
"$value": "oklch(0.72 0.1 150 / 40%)"
|
|
272
|
+
},
|
|
273
|
+
"warning": {
|
|
274
|
+
"$type": "color",
|
|
275
|
+
"$value": "oklch(0.78 0.12 75)"
|
|
276
|
+
},
|
|
277
|
+
"warning-foreground": {
|
|
278
|
+
"$type": "color",
|
|
279
|
+
"$value": "oklch(0.22 0.04 75)"
|
|
280
|
+
},
|
|
281
|
+
"warning-subtle": {
|
|
282
|
+
"$type": "color",
|
|
283
|
+
"$value": "oklch(0.34 0.04 75)"
|
|
284
|
+
},
|
|
285
|
+
"warning-border": {
|
|
286
|
+
"$type": "color",
|
|
287
|
+
"$value": "oklch(0.78 0.1 75 / 40%)"
|
|
288
|
+
},
|
|
289
|
+
"info": {
|
|
290
|
+
"$type": "color",
|
|
291
|
+
"$value": "oklch(0.72 0.1 250)"
|
|
292
|
+
},
|
|
293
|
+
"info-foreground": {
|
|
294
|
+
"$type": "color",
|
|
295
|
+
"$value": "oklch(0.985 0.01 250)"
|
|
296
|
+
},
|
|
297
|
+
"info-subtle": {
|
|
298
|
+
"$type": "color",
|
|
299
|
+
"$value": "oklch(0.32 0.035 250)"
|
|
300
|
+
},
|
|
301
|
+
"info-border": {
|
|
302
|
+
"$type": "color",
|
|
303
|
+
"$value": "oklch(0.72 0.08 250 / 40%)"
|
|
304
|
+
},
|
|
305
|
+
"glass-tint": {
|
|
306
|
+
"$type": "color",
|
|
307
|
+
"$value": "oklch(0.58 0.07 245 / 22%)"
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
"radius": {
|
|
311
|
+
"sm": {
|
|
312
|
+
"$type": "dimension",
|
|
313
|
+
"$value": "0.4rem"
|
|
314
|
+
},
|
|
315
|
+
"md": {
|
|
316
|
+
"$type": "dimension",
|
|
317
|
+
"$value": "0.6rem"
|
|
318
|
+
},
|
|
319
|
+
"lg": {
|
|
320
|
+
"$type": "dimension",
|
|
321
|
+
"$value": "0.85rem"
|
|
322
|
+
},
|
|
323
|
+
"panel": {
|
|
324
|
+
"$type": "dimension",
|
|
325
|
+
"$value": "0.85rem"
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
"motion": {
|
|
329
|
+
"duration": {
|
|
330
|
+
"$type": "duration",
|
|
331
|
+
"$value": "220ms"
|
|
332
|
+
},
|
|
333
|
+
"stiffness": {
|
|
334
|
+
"$type": "number",
|
|
335
|
+
"$value": 420
|
|
336
|
+
},
|
|
337
|
+
"damping": {
|
|
338
|
+
"$type": "number",
|
|
339
|
+
"$value": 32
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
"density": {
|
|
343
|
+
"$type": "number",
|
|
344
|
+
"$value": 1.05
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"generated": true,
|
|
3
|
+
"packs": [
|
|
4
|
+
"forest",
|
|
5
|
+
"tide",
|
|
6
|
+
"graphite",
|
|
7
|
+
"dune",
|
|
8
|
+
"clay",
|
|
9
|
+
"ember"
|
|
10
|
+
],
|
|
11
|
+
"formats": [
|
|
12
|
+
{
|
|
13
|
+
"id": "design-md",
|
|
14
|
+
"label": "DESIGN.md",
|
|
15
|
+
"description": "Human- and AI-readable design brief with OKLCH roles and rules",
|
|
16
|
+
"tier": "free",
|
|
17
|
+
"basename": "DESIGN.md",
|
|
18
|
+
"pathTemplate": "/themes/{packId}/DESIGN.md"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "dtcg",
|
|
22
|
+
"label": "DTCG tokens",
|
|
23
|
+
"description": "W3C Design Tokens JSON ($value / $type) with light and dark modes",
|
|
24
|
+
"tier": "free",
|
|
25
|
+
"basename": "tokens.dtcg.json",
|
|
26
|
+
"pathTemplate": "/themes/{packId}/tokens.dtcg.json"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "tailwind-theme",
|
|
30
|
+
"label": "Tailwind @theme",
|
|
31
|
+
"description": "Tailwind CSS v4 @theme file with mode remaps",
|
|
32
|
+
"tier": "free",
|
|
33
|
+
"basename": "theme.css",
|
|
34
|
+
"pathTemplate": "/themes/{packId}/theme.css"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "skill-md",
|
|
38
|
+
"label": "Agent skill",
|
|
39
|
+
"description": "SKILL.md instructions for coding agents using this theme",
|
|
40
|
+
"tier": "free",
|
|
41
|
+
"basename": "SKILL.md",
|
|
42
|
+
"pathTemplate": "/themes/{packId}/SKILL.md"
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|