aiblueprint-cli 1.4.73 → 1.4.75
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/README.md +7 -0
- package/agents-config/skills/use-style/SKILL.md +54 -0
- package/agents-config/skills/use-style/examples/anthropic.html +400 -0
- package/agents-config/skills/use-style/examples/dusk.html +368 -0
- package/agents-config/skills/use-style/examples/gumroad.html +396 -0
- package/agents-config/skills/use-style/examples/linear.html +389 -0
- package/agents-config/skills/use-style/examples/new-york-times.html +417 -0
- package/agents-config/skills/use-style/examples/raycast.html +402 -0
- package/agents-config/skills/use-style/examples/split-auth.html +366 -0
- package/agents-config/skills/use-style/examples/stripe.html +386 -0
- package/agents-config/skills/use-style/examples/vercel.html +379 -0
- package/agents-config/skills/use-style/styles/anthropic.md +266 -0
- package/agents-config/skills/use-style/styles/dusk.md +269 -0
- package/agents-config/skills/use-style/styles/grid.md +284 -0
- package/agents-config/skills/use-style/styles/gumroad.md +273 -0
- package/agents-config/skills/use-style/styles/linear.md +355 -0
- package/agents-config/skills/use-style/styles/new-york-times.md +277 -0
- package/agents-config/skills/use-style/styles/raycast.md +285 -0
- package/agents-config/skills/use-style/styles/split-auth.md +281 -0
- package/agents-config/skills/use-style/styles/stripe.md +372 -0
- package/agents-config/skills/use-style/styles/vercel-simple.md +322 -0
- package/dist/cli.js +513 -42
- package/package.json +1 -1
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# Dusk Style
|
|
2
|
+
|
|
3
|
+
Refined dark data app floating on a dreamy dusk backdrop. Premium CRM dashboard: a rounded near-black window over a twilight sky, vivid blue data viz, colorful category pills, clean Inter. Calm, expensive, data-rich.
|
|
4
|
+
|
|
5
|
+
**Reference vibe:** Attio (CRM dashboards, reports, company database, inbox).
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Core vibe
|
|
10
|
+
|
|
11
|
+
- **A window, not a page.** The app is a large rounded-corner dark container that *floats* on a photographic dusk/aurora backdrop (twilight gradient + faint stars). Margin of backdrop shows around it.
|
|
12
|
+
- **Near-black, layered.** Inside the window: very dark panels with quiet borders. Depth from subtle elevation and the backdrop, not heavy shadows.
|
|
13
|
+
- **Vivid blue data.** Bar charts and key accents in a bright sky-blue `#38bdf8`; the primary action button is a saturated blue `#3b6eff`.
|
|
14
|
+
- **Colorful data pills.** Category tags carry their own hue (orange, green, blue, purple, pink, teal) as tinted text + border - the one place color runs free.
|
|
15
|
+
- **Clean Inter, mono for numbers.** Sans for everything; mono for deltas, `last 30 days`, IDs, tabular figures.
|
|
16
|
+
- **Dense but airy.** Sidebar + main app shell, KPI strip, 2-col panel grid. Comfortable spacing, large radius, refined.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Color
|
|
21
|
+
|
|
22
|
+
Portable palette. Map to project tokens when available.
|
|
23
|
+
|
|
24
|
+
| Role | Hex | CSS var (suggested) | Usage |
|
|
25
|
+
|------|-----|---------------------|-------|
|
|
26
|
+
| Window canvas | `#0c0c0e` | `--dk-bg` | App container background |
|
|
27
|
+
| Panel | `#151517` | `--dk-panel` | Cards, report panels |
|
|
28
|
+
| Panel raised | `#1c1c1f` | `--dk-raised` | Hover, inputs, KPI strip |
|
|
29
|
+
| Sidebar | `#0e0e10` | `--dk-rail` | Left navigation |
|
|
30
|
+
| Ink | `#f4f4f5` | `--dk-fg` | Headings, primary values |
|
|
31
|
+
| Muted ink | `#8a8a90` | `--dk-muted-fg` | Labels, inactive nav, captions |
|
|
32
|
+
| Subtle ink | `#5c5c62` | `--dk-subtle-fg` | Meta, placeholders |
|
|
33
|
+
| Border | `#232325` | `--dk-border` | Panel borders, dividers |
|
|
34
|
+
| Border soft | `rgba(255,255,255,0.06)` | `--dk-border-soft` | Inner hairlines |
|
|
35
|
+
| Primary | `#3b6eff` | `--dk-primary` | Primary button, active state, links |
|
|
36
|
+
| Data blue | `#38bdf8` | `--dk-data` | Bar charts, the signature data color |
|
|
37
|
+
| Positive | `#36c98d` | `--dk-pos` | Up deltas, owned tags |
|
|
38
|
+
| Negative | `#f76d6d` | `--dk-neg` | Down deltas |
|
|
39
|
+
|
|
40
|
+
### Category pill palette (tinted text + border, transparent fill)
|
|
41
|
+
|
|
42
|
+
| Hue | Hex |
|
|
43
|
+
|-----|-----|
|
|
44
|
+
| Orange | `#f5933b` |
|
|
45
|
+
| Green | `#36c98d` |
|
|
46
|
+
| Blue | `#5b9dff` |
|
|
47
|
+
| Purple | `#a78bfa` |
|
|
48
|
+
| Pink | `#f472b6` |
|
|
49
|
+
| Teal | `#2dd4bf` |
|
|
50
|
+
| Yellow | `#facc15` |
|
|
51
|
+
|
|
52
|
+
### The dusk backdrop
|
|
53
|
+
|
|
54
|
+
Behind the floating window: a twilight gradient (deep navy at top → warm horizon at bottom), optionally a faint starfield. Keep it soft and blurred so the UI stays readable.
|
|
55
|
+
|
|
56
|
+
```css
|
|
57
|
+
background:
|
|
58
|
+
radial-gradient(120% 80% at 50% 0%, #16223f 0%, #20284a 35%, #4a3a5e 70%, #8a5a4e 100%);
|
|
59
|
+
/* faint stars: tiny white radial-gradients at low opacity, top third only */
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Tailwind mapping (when no project tokens)
|
|
63
|
+
|
|
64
|
+
```css
|
|
65
|
+
:root {
|
|
66
|
+
--dk-bg:#0c0c0e; --dk-panel:#151517; --dk-rail:#0e0e10;
|
|
67
|
+
--dk-fg:#f4f4f5; --dk-muted-fg:#8a8a90; --dk-border:#232325;
|
|
68
|
+
--dk-primary:#3b6eff; --dk-data:#38bdf8;
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Rule:** The UI stays near-monochrome dark; vivid blue is the data + action color, and category pills are the only multi-hue element. The dusk backdrop supplies the warmth.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Typography
|
|
77
|
+
|
|
78
|
+
### Font stacks
|
|
79
|
+
|
|
80
|
+
| Role | Stack |
|
|
81
|
+
|------|-------|
|
|
82
|
+
| Sans (everything) | `Inter, "SF Pro Text", ui-sans-serif, system-ui, sans-serif` |
|
|
83
|
+
| Mono (numbers, deltas, IDs) | `"Geist Mono", "Berkeley Mono", ui-monospace, SFMono-Regular, monospace` |
|
|
84
|
+
|
|
85
|
+
### Scale
|
|
86
|
+
|
|
87
|
+
| Level | Pattern |
|
|
88
|
+
|-------|---------|
|
|
89
|
+
| Page / report title | `text-2xl md:text-3xl font-semibold tracking-tight text-[#f4f4f5]` |
|
|
90
|
+
| KPI / metric value | `text-3xl md:text-4xl font-semibold tabular-nums text-[#f4f4f5]` |
|
|
91
|
+
| Panel title | `text-sm font-medium text-[#8a8a90]` |
|
|
92
|
+
| Body | `text-sm md:text-[15px] text-[#c8c8cc]` |
|
|
93
|
+
| Section label (sidebar) | `text-xs font-medium text-[#5c5c62]` (General, Favorites, Searches) |
|
|
94
|
+
| Nav item | `text-sm text-[#c8c8cc]` |
|
|
95
|
+
| Delta / meta | `font-mono text-xs` (`last 30 days`, `+25%`, `12.5%`) |
|
|
96
|
+
|
|
97
|
+
Deltas and `last 30 days` are mono; the percentage is colored (`#36c98d` up / `#f76d6d` down). Big numbers use `tabular-nums`.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Layout tokens
|
|
102
|
+
|
|
103
|
+
| Token | Value |
|
|
104
|
+
|-------|-------|
|
|
105
|
+
| `DK_BACKDROP` | the dusk gradient on `body`, with `padding` so the window floats |
|
|
106
|
+
| `DK_WINDOW` | `rounded-2xl border border-[#232325] bg-[#0c0c0e] overflow-hidden` |
|
|
107
|
+
| `DK_SHELL` | sidebar `w-64` + `main flex-1` |
|
|
108
|
+
| `DK_SECTION` | `p-6 md:p-8` |
|
|
109
|
+
| `DK_PANEL` | `rounded-xl border border-[#232325] bg-[#151517] p-5` |
|
|
110
|
+
| `DK_GAP` | `gap-5` |
|
|
111
|
+
|
|
112
|
+
### Floating window shell
|
|
113
|
+
|
|
114
|
+
```tsx
|
|
115
|
+
<div className="min-h-screen p-4 md:p-8" style={{background:"radial-gradient(120% 80% at 50% 0%,#16223f,#20284a 35%,#4a3a5e 70%,#8a5a4e)"}}>
|
|
116
|
+
<div className="mx-auto flex max-w-[1400px] overflow-hidden rounded-2xl border border-[#232325] bg-[#0c0c0e]">
|
|
117
|
+
<aside className="w-64 shrink-0 border-r border-[#232325] bg-[#0e0e10] p-3">{nav}</aside>
|
|
118
|
+
<main className="flex-1 min-w-0">
|
|
119
|
+
<header className="flex items-center justify-between border-b border-[#232325] px-6 py-3">{breadcrumb + actions}</header>
|
|
120
|
+
<div className="p-6 md:p-8">{content}</div>
|
|
121
|
+
</main>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Component patterns
|
|
129
|
+
|
|
130
|
+
### Sidebar nav
|
|
131
|
+
|
|
132
|
+
Sections (`General`, `Favorites`, `Searches`) as tiny muted labels, items as icon + label, optional count badge, tiny colored favicon for entities.
|
|
133
|
+
|
|
134
|
+
```tsx
|
|
135
|
+
<a className={cn(
|
|
136
|
+
"flex items-center gap-2.5 rounded-md px-2.5 py-1.5 text-sm",
|
|
137
|
+
active ? "bg-[#1c1c1f] text-[#f4f4f5]" : "text-[#c8c8cc] hover:bg-[#1c1c1f]"
|
|
138
|
+
)}>
|
|
139
|
+
<Icon className="size-4 text-[#8a8a90]" />
|
|
140
|
+
<span className="flex-1 truncate">Report</span>
|
|
141
|
+
<span className="font-mono text-xs text-[#5c5c62]">99+</span>
|
|
142
|
+
</a>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### KPI strip
|
|
146
|
+
|
|
147
|
+
A bordered row split into equal cells (provider icon + name, big number, `last 30 days` + colored delta).
|
|
148
|
+
|
|
149
|
+
```tsx
|
|
150
|
+
<div className="grid grid-cols-2 divide-x divide-[#232325] rounded-xl border border-[#232325] bg-[#151517] md:grid-cols-4">
|
|
151
|
+
<div className="p-5">
|
|
152
|
+
<p className="flex items-center gap-2 text-sm text-[#8a8a90]"><Icon/> ChatGPT</p>
|
|
153
|
+
<p className="mt-3 text-4xl font-semibold tabular-nums">213</p>
|
|
154
|
+
<p class="mt-4 flex items-center justify-between font-mono text-xs">
|
|
155
|
+
<span className="text-[#5c5c62]">last 30 days</span>
|
|
156
|
+
<span className="text-[#f76d6d]">12.5%</span>
|
|
157
|
+
</p>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Report panel
|
|
163
|
+
|
|
164
|
+
```tsx
|
|
165
|
+
<div className="rounded-xl border border-[#232325] bg-[#151517] p-5">
|
|
166
|
+
<p className="text-sm text-[#8a8a90]">Unique Visitors</p>
|
|
167
|
+
<p className="mt-1 text-3xl font-semibold tabular-nums">8,451</p>
|
|
168
|
+
<p className="mt-1 font-mono text-xs"><span className="text-[#36c98d]">12.5%</span> <span className="text-[#5c5c62]">last 30 days</span></p>
|
|
169
|
+
<div className="mt-4 h-64"><canvas/></div>
|
|
170
|
+
</div>
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Segmented rank bar
|
|
174
|
+
|
|
175
|
+
A single rounded track split into vivid colored segments, with a dotted legend below.
|
|
176
|
+
|
|
177
|
+
```tsx
|
|
178
|
+
<div className="flex gap-1.5">
|
|
179
|
+
<span className="h-2 rounded-full bg-[#38bdf8]" style={{flex:9.4}} />
|
|
180
|
+
<span className="h-2 rounded-full bg-[#f5933b]" style={{flex:7.8}} />
|
|
181
|
+
<span className="h-2 rounded-full bg-[#facc15]" style={{flex:6.4}} />
|
|
182
|
+
<span className="h-2 rounded-full bg-[#2dd4bf]" style={{flex:3.2}} />
|
|
183
|
+
<span className="h-2 rounded-full bg-[#36c98d]" style={{flex:1.7}} />
|
|
184
|
+
</div>
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Category pill
|
|
188
|
+
|
|
189
|
+
Each category owns a hue: colored text + matching border + transparent fill.
|
|
190
|
+
|
|
191
|
+
```tsx
|
|
192
|
+
<span className="inline-flex rounded-md border border-[#f5933b]/40 px-2 py-0.5 text-xs font-medium text-[#f5933b]">
|
|
193
|
+
Project Management
|
|
194
|
+
</span>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Owned / status tag
|
|
198
|
+
|
|
199
|
+
```tsx
|
|
200
|
+
<span className="rounded-md border border-[#36c98d]/40 px-1.5 py-0.5 text-[11px] font-medium text-[#36c98d]">Owned</span>
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Buttons
|
|
204
|
+
|
|
205
|
+
| Variant | Classes |
|
|
206
|
+
|---------|---------|
|
|
207
|
+
| Primary | `rounded-lg bg-[#3b6eff] px-3.5 py-2 text-sm font-medium text-white hover:bg-[#3361f0]` |
|
|
208
|
+
| Secondary | `rounded-lg border border-[#232325] bg-[#151517] px-3.5 py-2 text-sm text-[#f4f4f5] hover:bg-[#1c1c1f]` |
|
|
209
|
+
| Ask (AI) | secondary + a leading spark `✳` in `#8a8a90`, e.g. `Ask about this "Report"` |
|
|
210
|
+
|
|
211
|
+
### Data table
|
|
212
|
+
|
|
213
|
+
```tsx
|
|
214
|
+
<div className="grid grid-cols-[1fr_auto_auto] gap-y-3 text-sm">
|
|
215
|
+
<span className="flex items-center gap-2"><Icon/> Ace <OwnedTag/></span>
|
|
216
|
+
<span className="text-right font-mono tabular-nums text-[#c8c8cc]">9.4%</span>
|
|
217
|
+
<span className="text-right font-mono tabular-nums text-[#f4f4f5]">212</span>
|
|
218
|
+
</div>
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Charts (vivid data viz)
|
|
224
|
+
|
|
225
|
+
- **Bars in sky-blue `#38bdf8`** - the signature. Rounded tops (`borderRadius:6`), flat fill. Many thin bars for time series (30-day) is on-brand.
|
|
226
|
+
- Line charts: thin teal/green `#36c98d` or `#38bdf8`, no fill, smooth.
|
|
227
|
+
- Multi-series / rank: the category palette (blue, orange, yellow, teal, green).
|
|
228
|
+
- Background = panel `#151517`; gridlines off or very faint `#232325`; axis text mono, muted `#5c5c62`.
|
|
229
|
+
- Tooltip: `#1c1c1f` bg, `#232325` border, white text, `10px` corners.
|
|
230
|
+
|
|
231
|
+
```js
|
|
232
|
+
const DATA="#38bdf8", POS="#36c98d", GRID="#232325";
|
|
233
|
+
const CATS=["#5b9dff","#f5933b","#facc15","#2dd4bf","#36c98d","#a78bfa"];
|
|
234
|
+
Chart.defaults.font.family = "Inter, system-ui, sans-serif";
|
|
235
|
+
Chart.defaults.color = "#5c5c62";
|
|
236
|
+
// bars: backgroundColor:DATA, borderRadius:6
|
|
237
|
+
// grid: { color: GRID } or display:false
|
|
238
|
+
// tooltip: { backgroundColor:"#1c1c1f", borderColor:"#232325", borderWidth:1, cornerRadius:10 }
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Motion & effects
|
|
244
|
+
|
|
245
|
+
- Calm. Hover = panel/row bg lift to `#1c1c1f`, border to softer white. No bounce.
|
|
246
|
+
- The floating window may cast one soft ambient shadow onto the backdrop (`0 30px 80px -30px rgba(0,0,0,.6)`).
|
|
247
|
+
- `transition-colors duration-150`. Charts animate in gently.
|
|
248
|
+
- No neon glow (that's raycast), no hard offset shadow (that's gumroad), no gradient on the UI chrome - the gradient lives in the backdrop only.
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Anti-patterns
|
|
253
|
+
|
|
254
|
+
| Avoid | Why |
|
|
255
|
+
|-------|-----|
|
|
256
|
+
| Flat dark filling the whole viewport edge-to-edge | The app is a rounded window floating on the dusk backdrop |
|
|
257
|
+
| Monochrome category tags | Category pills are intentionally multi-hue |
|
|
258
|
+
| Red glow / neon | That's raycast; dusk is calm with vivid-blue data |
|
|
259
|
+
| Hard offset shadows | That's gumroad; use soft ambient depth |
|
|
260
|
+
| Gradient on buttons/panels | Gradient belongs to the backdrop only; chrome stays flat dark |
|
|
261
|
+
| Serif type | Inter sans throughout; mono for numbers |
|
|
262
|
+
| Pure white `#fff` text | Use `#f4f4f5` warm-white on the dark panels |
|
|
263
|
+
| Bars in muted gray | The signature is bright sky-blue `#38bdf8` |
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Project overrides
|
|
268
|
+
|
|
269
|
+
If the repo defines `.agents/styles/dusk.md` or `.agents/styles/dusk-theme.md`, prefer those tokens and components over this portable spec.
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
# Grid Style
|
|
2
|
+
|
|
3
|
+
Structured, builder-centric landing aesthetic. A technical spec sheet, not a marketing funnel.
|
|
4
|
+
|
|
5
|
+
**Reference implementations:** `/aibuilder`, `/aiblueprint`, `/agents`
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Core vibe
|
|
10
|
+
|
|
11
|
+
- **Blueprint / terminal** look. Reads like a spec sheet, not a soft SaaS funnel.
|
|
12
|
+
- **Square geometry.** Zero border-radius on structural UI.
|
|
13
|
+
- **Line-driven hierarchy.** 1px borders and dividers, never shadows or blur.
|
|
14
|
+
- **Condensed display type** for hero and section titles (Science Gothic or an equivalent condensed grotesk).
|
|
15
|
+
- **Mono for data.** Prices, counts, nav, buttons, and status chips.
|
|
16
|
+
- **Generous whitespace.** Section padding scales with the breakpoint.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Color
|
|
21
|
+
|
|
22
|
+
Use existing design tokens. Do **not** invent a new palette.
|
|
23
|
+
|
|
24
|
+
| Role | Token | Usage |
|
|
25
|
+
|------|-------|-------|
|
|
26
|
+
| Canvas | `--background` | Page and section fill |
|
|
27
|
+
| Ink | `--foreground` | Headlines, primary buttons |
|
|
28
|
+
| Muted ink | `--muted-foreground` | Body, descriptions, sold-out rows |
|
|
29
|
+
| Structure | `--border` | Dividers, boxes, ghost buttons |
|
|
30
|
+
| Accent | `--primary` | Highlights, active tier, CTA emphasis |
|
|
31
|
+
| Accent surface | `--primary/5` | Active pricing row background |
|
|
32
|
+
| Muted surface | `--muted/20` | Sidebar panels |
|
|
33
|
+
| Card | `--card` | Bordered panels |
|
|
34
|
+
|
|
35
|
+
Status (sold out, success) may use the existing destructive/emerald tokens at low opacity.
|
|
36
|
+
|
|
37
|
+
**Codelynx:** wrap pages in `theme-aiblueprint` (or the product theme class). See `.agents/styles/grid-theme.md` for token detail.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Typography
|
|
42
|
+
|
|
43
|
+
| Level | Font | Pattern |
|
|
44
|
+
|-------|------|---------|
|
|
45
|
+
| Hero H1 | Condensed display | `text-2xl sm:text-4xl md:text-5xl lg:text-6xl`, tight tracking, `leading-none` |
|
|
46
|
+
| Section H2 | Condensed display | `text-2xl sm:text-3xl md:text-4xl` |
|
|
47
|
+
| Small display | Condensed display | `text-xl sm:text-2xl` (guarantee blocks, compact titles) |
|
|
48
|
+
| Body | Sans | `text-base sm:text-lg leading-relaxed text-muted-foreground` |
|
|
49
|
+
| Nav / button / data | Mono | `font-mono uppercase tracking-wider text-xs` |
|
|
50
|
+
| Price / count | Mono tabular | `font-mono tabular-nums` |
|
|
51
|
+
|
|
52
|
+
### Title accent syntax
|
|
53
|
+
|
|
54
|
+
`GridThemeSectionTitle` parses `**bold phrase**` inside a string title and wraps it in `<span className="text-primary">`.
|
|
55
|
+
|
|
56
|
+
### Display font loading
|
|
57
|
+
|
|
58
|
+
Scope the display font to the routes that need it (layout + co-located CSS), not globally.
|
|
59
|
+
|
|
60
|
+
**Codelynx:** `GT_DISPLAY_FONT = "font-science-gothic font-normal tracking-tight leading-none"`, loaded via `science-gothic.css`.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Layout tokens
|
|
65
|
+
|
|
66
|
+
Responsive shell and section rhythm. Names vary by repo; the semantics stay the same.
|
|
67
|
+
|
|
68
|
+
| Token | Value (Codelynx) | Purpose |
|
|
69
|
+
|-------|------------------|---------|
|
|
70
|
+
| `GT_SHELL` | `mx-auto max-w-5xl px-3 pb-8 pt-2 sm:max-w-6xl sm:px-6 sm:pt-0 md:px-8 md:pb-10 lg:px-10 lg:pb-14 xl:px-12 xl:pb-16` | Outer page wrapper |
|
|
71
|
+
| `GT_FRAME_X` | `px-5 sm:px-8 md:px-10 lg:px-18 xl:px-20` | Horizontal padding for header and sections |
|
|
72
|
+
| `GT_SECTION` | `GT_FRAME_X` + `py-5 sm:py-8 md:py-10 lg:py-18 xl:py-20` | Section wrapper |
|
|
73
|
+
| `GT_STACK_PADDING` | `px-5 py-5 sm:px-6 sm:py-6 md:px-8 md:py-8 lg:px-10 lg:py-10 xl:px-12 xl:py-12` | Inner card/row padding |
|
|
74
|
+
| `GT_SECTION_TITLE_GAP` | `mb-8 md:mb-10 lg:mb-12` | Margin below section titles |
|
|
75
|
+
| `GT_DIVIDER_NARROW` | `mx-auto max-w-md border-t border-border sm:max-w-lg` | Narrow centered hero divider |
|
|
76
|
+
|
|
77
|
+
### Responsive scale (matches the live tokens above)
|
|
78
|
+
|
|
79
|
+
| Property | base | sm | md | lg | xl |
|
|
80
|
+
|----------|------|----|----|----|----|
|
|
81
|
+
| Shell max-width | max-w-5xl | max-w-6xl | - | - | - |
|
|
82
|
+
| Shell px | px-3 | px-6 | px-8 | px-10 | px-12 |
|
|
83
|
+
| Shell pt | pt-2 | pt-0 | - | - | - |
|
|
84
|
+
| Section py | py-5 | py-8 | py-10 | py-18 | py-20 |
|
|
85
|
+
| Frame px | px-5 | px-8 | px-10 | px-18 | px-20 |
|
|
86
|
+
| Stack padding | px-5 py-5 | px-6 py-6 | px-8 py-8 | px-10 py-10 | px-12 py-12 |
|
|
87
|
+
|
|
88
|
+
**Rule:** Only remove top padding on the outer shell (`sm:pt-0`). Never strip section vertical padding globally.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Page shell
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
+----------------------------------------------- viewport --+
|
|
96
|
+
| GT_SHELL (max-w-5xl/6xl, responsive px) |
|
|
97
|
+
| +-----------------------------------------------------+ |
|
|
98
|
+
| | border-x border-b border-border bg-background | |
|
|
99
|
+
| | - Sticky header (GT_FRAME_X, divider bottom) | |
|
|
100
|
+
| | - Section (GT_SECTION) | |
|
|
101
|
+
| | - Full-bleed section divider | |
|
|
102
|
+
| | - Section ... | |
|
|
103
|
+
| | - Footer | |
|
|
104
|
+
| +-----------------------------------------------------+ |
|
|
105
|
+
+-----------------------------------------------------------+
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
```tsx
|
|
109
|
+
<div className="theme-aiblueprint bg-background text-foreground relative min-h-full overflow-x-hidden">
|
|
110
|
+
<div className={GT_SHELL}>
|
|
111
|
+
<div className="border-x border-b border-border bg-background">
|
|
112
|
+
<PageHeader />
|
|
113
|
+
<SectionA />
|
|
114
|
+
<GridThemeSectionDivider />
|
|
115
|
+
<SectionB />
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Full-bleed divider
|
|
122
|
+
|
|
123
|
+
Breaks out of the bordered frame to the viewport edges:
|
|
124
|
+
|
|
125
|
+
```tsx
|
|
126
|
+
className="relative left-1/2 w-screen -translate-x-1/2 border-t border-border"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Place it between sections inside the bordered frame. The header uses its own bottom divider, so the frame has no top border.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Component patterns
|
|
134
|
+
|
|
135
|
+
Reuse the Codelynx primitives from `grid-theme-primitives.tsx` rather than rebuilding these.
|
|
136
|
+
|
|
137
|
+
| Component | Notes |
|
|
138
|
+
|-----------|-------|
|
|
139
|
+
| `GridThemeSectionTitle` | Props `title`, `description?`, `label?`, `align?`, `size?`. `align="center"` for hero-adjacent sections, `size="sm"` for compact titles. Omit `label` in the main flow. |
|
|
140
|
+
| `GridThemeButton` | Link-styled CTA. Variants `primary` (filled `bg-foreground`) and `ghost` (border only). Square, mono, `h-12 px-6`. |
|
|
141
|
+
| `GridThemeFeatureRow` | Two-column row: square icon box + title/description. No left label column. |
|
|
142
|
+
| `GridThemeBorderedStack` | Outer `border divide-y` container + padded `GridThemeStackSection` children. FAQ stacks, guarantee blocks, feature lists. |
|
|
143
|
+
| `GridThemeCompareTable` | 3-column comparison. Square borders, muted header, highlight column defaults to center/right. |
|
|
144
|
+
| `GridThemeSplitCard` | Two-column card with a vertical divider on `md+`. |
|
|
145
|
+
| `GridThemeBlockquote` | Left-bordered quote (`border-l-2 border-primary`). |
|
|
146
|
+
| `GridThemeStatusBox` / `GridThemePixelProgress` | Batch counter UI with a pixel progress grid. |
|
|
147
|
+
| `GridThemePricingTiers` | Tier list with a batch counter. Parent owns `divide-y`. |
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Grid patterns
|
|
152
|
+
|
|
153
|
+
### Feature grid (gap-px is fine here)
|
|
154
|
+
|
|
155
|
+
Dense icon/tile grid where every cell owns a border:
|
|
156
|
+
|
|
157
|
+
```tsx
|
|
158
|
+
<div className="grid grid-cols-1 gap-px border border-border bg-border sm:grid-cols-2 lg:grid-cols-3">
|
|
159
|
+
{items.map((item) => (
|
|
160
|
+
<div key={item.title} className="bg-background px-5 py-6">...</div>
|
|
161
|
+
))}
|
|
162
|
+
</div>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
`gap-px` + `bg-border` works only when every cell sets `bg-background`.
|
|
166
|
+
|
|
167
|
+
### Image proof grid (no gap-px)
|
|
168
|
+
|
|
169
|
+
Photos sit edge-to-edge. Use `divide-*`, not `gap-px`:
|
|
170
|
+
|
|
171
|
+
```tsx
|
|
172
|
+
// Good: no gray band between images
|
|
173
|
+
<div className="grid grid-cols-1 divide-y divide-border border border-border sm:grid-cols-3 sm:divide-x sm:divide-y-0">
|
|
174
|
+
{images.map((src) => (
|
|
175
|
+
<Image key={src} className="block w-full bg-background" />
|
|
176
|
+
))}
|
|
177
|
+
</div>
|
|
178
|
+
|
|
179
|
+
// Bad: visible gray gutters
|
|
180
|
+
<div className="grid gap-px bg-border">
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Bordered stack
|
|
184
|
+
|
|
185
|
+
```tsx
|
|
186
|
+
<div className="border border-border divide-y divide-border">
|
|
187
|
+
{rows.map(...)}
|
|
188
|
+
</div>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
The parent owns the separators. Child rows must not override with conflicting `py-*` that breaks `first:pt-0`.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Sticky header
|
|
196
|
+
|
|
197
|
+
```tsx
|
|
198
|
+
<header className="sticky top-0 z-50 bg-background">
|
|
199
|
+
<div className={cn("flex h-12 items-center", GT_FRAME_X)}>...</div>
|
|
200
|
+
<GridThemeSectionDivider />
|
|
201
|
+
</header>
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
- Full-width divider under the nav.
|
|
205
|
+
- No top border on the main frame (`border-x border-b` only).
|
|
206
|
+
- Nav links: `font-mono text-[10px] uppercase tracking-wider text-muted-foreground`.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Legacy component integration
|
|
211
|
+
|
|
212
|
+
Wrap existing blocks that cannot be rewritten yet:
|
|
213
|
+
|
|
214
|
+
```tsx
|
|
215
|
+
<div className="overflow-x-hidden [&_*]:!rounded-none [&_*]:!shadow-none">
|
|
216
|
+
<LegacyPricing showDecorativeGlow={false} gridTheme />
|
|
217
|
+
</div>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
| Technique | Effect |
|
|
221
|
+
|-----------|--------|
|
|
222
|
+
| `showDecorativeGlow={false}` | Removes the blur gradient halo |
|
|
223
|
+
| `gridTheme` prop | Switches guarantee/FAQ to grid components |
|
|
224
|
+
| `[&_*]:!rounded-none` | Forces square corners on nested legacy UI |
|
|
225
|
+
| `[&_*]:!shadow-none` | Removes drop shadows from nested legacy UI |
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Charts (blueprint data viz)
|
|
230
|
+
|
|
231
|
+
When charting (e.g. Chart.js), keep it as flat and square as the rest of the UI:
|
|
232
|
+
|
|
233
|
+
- Series in the token grays: `--foreground`, `--muted-foreground`, `--border`, with **one** `--primary` accent for the highlighted series. No rainbow palettes.
|
|
234
|
+
- **Square bars** (`borderRadius: 0`, or 2px max). Flat fills, no gradients, no glow.
|
|
235
|
+
- Gridlines `--border`; axis labels **mono** (`Geist Mono`), uppercase where it fits, muted color.
|
|
236
|
+
- Tooltip: inverted - `--foreground` background, `--background` text, square corners.
|
|
237
|
+
- Doughnut/pie: thin segments separated by a `--background` stroke; legend in mono.
|
|
238
|
+
- Bar category labels use the mono tabular treatment (prices/counts), matching the rest of the data type.
|
|
239
|
+
|
|
240
|
+
```js
|
|
241
|
+
const FG=getVar('--foreground'), MUTED=getVar('--muted-foreground'), BORDER=getVar('--border'), PRIMARY=getVar('--primary');
|
|
242
|
+
Chart.defaults.font.family = "Geist Mono, ui-monospace, monospace";
|
|
243
|
+
// bars: backgroundColor:[MUTED, FG], borderRadius:0
|
|
244
|
+
// grid: { color: BORDER }, ticks: { font:{ family:'Geist Mono' } }
|
|
245
|
+
// tooltip: { backgroundColor: FG, cornerRadius: 0 }
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Motion & effects
|
|
251
|
+
|
|
252
|
+
- No blur halos, glass morphism, or large drop shadows.
|
|
253
|
+
- Hover changes color/background only (`hover:bg-muted`, `hover:bg-foreground/90`).
|
|
254
|
+
- `transition-colors` on interactive elements.
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Anti-patterns
|
|
259
|
+
|
|
260
|
+
| Avoid | Why |
|
|
261
|
+
|-------|-----|
|
|
262
|
+
| `rounded-xl`, `rounded-2xl`, `rounded-full` on structural UI | Breaks the grid aesthetic |
|
|
263
|
+
| `shadow-2xl`, `ring-*`, `backdrop-blur-*` | Replaces line hierarchy with depth |
|
|
264
|
+
| Gradient section backgrounds | Keep flat `bg-background` |
|
|
265
|
+
| `gap-px` + `bg-border` on image grids | Creates gray bands between photos |
|
|
266
|
+
| `last:border-b-0` on tier rows inside a `divide-y` parent | Removes the active tier bottom border |
|
|
267
|
+
| `sm:py-8` on the first stack row | Overrides `first:pt-0` |
|
|
268
|
+
| Global removal of section `py-*` | Breaks vertical rhythm; target the shell only |
|
|
269
|
+
| Mono overline labels everywhere | Use sparingly |
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Codelynx file map
|
|
274
|
+
|
|
275
|
+
When working in `codelynx.dev-v2`, prefer these over reimplementing:
|
|
276
|
+
|
|
277
|
+
| Path | Role |
|
|
278
|
+
|------|------|
|
|
279
|
+
| `.agents/styles/grid-theme.md` | Full project spec (tokens, file paths) |
|
|
280
|
+
| `.agents/styles/grid-theme-migration.md` | Migration playbook |
|
|
281
|
+
| `src/features/product-landings/pages/aibuilder/_landing/grid-theme/` | Primitives + components |
|
|
282
|
+
| `src/features/product-landings/pages/aibuilder/view.tsx` | Reference landing |
|
|
283
|
+
| `src/features/product-landings/pages/aiblueprint/view.tsx` | AI Blueprint landing |
|
|
284
|
+
| `src/features/product-landings/pages/agents/view.tsx` | Agents landing |
|