@beepflow/mcp 2026.7.7 → 2026.7.8
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/DESIGN.md +382 -0
- package/dist/index.js +59 -33
- package/package.json +2 -1
package/DESIGN.md
ADDED
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: alpha
|
|
3
|
+
name: Shopifi-design-analysis
|
|
4
|
+
description: An inspired interpretation of Shopifi's design language — a cinematic commerce platform built on near-black canvases with full-bleed photography of merchants, compact Neue Haas Grotesk display type at thin weights, and a single black-pill CTA stroked in white.
|
|
5
|
+
|
|
6
|
+
colors:
|
|
7
|
+
primary: "#ffffff"
|
|
8
|
+
on-dark: "#ffffff"
|
|
9
|
+
canvas-night: "#000000"
|
|
10
|
+
canvas-night-elevated: "#0a0a0a"
|
|
11
|
+
surface-elevated-dark: "#1e2c31"
|
|
12
|
+
shade-30: "#d4d4d8"
|
|
13
|
+
shade-40: "#a1a1aa"
|
|
14
|
+
shade-50: "#71717a"
|
|
15
|
+
shade-60: "#52525b"
|
|
16
|
+
shade-70: "#3f3f46"
|
|
17
|
+
hairline-dark: "#1e2c31"
|
|
18
|
+
link-cool-1: "#9dabad"
|
|
19
|
+
link-cool-2: "#9797a2"
|
|
20
|
+
link-cool-3: "#bdbdca"
|
|
21
|
+
link-mint: "#99b3ad"
|
|
22
|
+
|
|
23
|
+
typography:
|
|
24
|
+
display-xxl:
|
|
25
|
+
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
|
26
|
+
fontSize: 14px
|
|
27
|
+
fontWeight: 330
|
|
28
|
+
lineHeight: 1.0
|
|
29
|
+
letterSpacing: 0.35px
|
|
30
|
+
fontFeature: ss03
|
|
31
|
+
display-xl:
|
|
32
|
+
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
|
33
|
+
fontSize: 14px
|
|
34
|
+
fontWeight: 330
|
|
35
|
+
lineHeight: 1.0
|
|
36
|
+
letterSpacing: 0
|
|
37
|
+
fontFeature: ss03
|
|
38
|
+
display-lg:
|
|
39
|
+
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
|
40
|
+
fontSize: 14px
|
|
41
|
+
fontWeight: 330
|
|
42
|
+
lineHeight: 1.16
|
|
43
|
+
letterSpacing: 0
|
|
44
|
+
fontFeature: ss03
|
|
45
|
+
display-md:
|
|
46
|
+
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
|
47
|
+
fontSize: 14px
|
|
48
|
+
fontWeight: 330
|
|
49
|
+
lineHeight: 1.14
|
|
50
|
+
letterSpacing: 0
|
|
51
|
+
fontFeature: ss03
|
|
52
|
+
heading-xl:
|
|
53
|
+
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
|
54
|
+
fontSize: 14px
|
|
55
|
+
fontWeight: 500
|
|
56
|
+
lineHeight: 1.28
|
|
57
|
+
letterSpacing: 0.42px
|
|
58
|
+
fontFeature: ss03
|
|
59
|
+
heading-lg:
|
|
60
|
+
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
|
61
|
+
fontSize: 14px
|
|
62
|
+
fontWeight: 400
|
|
63
|
+
lineHeight: 1.14
|
|
64
|
+
letterSpacing: 0.36px
|
|
65
|
+
fontFeature: ss03
|
|
66
|
+
heading-md:
|
|
67
|
+
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
|
68
|
+
fontSize: 13px
|
|
69
|
+
fontWeight: 500
|
|
70
|
+
lineHeight: 1.4
|
|
71
|
+
letterSpacing: 0.3px
|
|
72
|
+
fontFeature: ss03
|
|
73
|
+
heading-sm:
|
|
74
|
+
fontFamily: "NeueHaasGrotesk Display, Helvetica, Arial, sans-serif"
|
|
75
|
+
fontSize: 13px
|
|
76
|
+
fontWeight: 500
|
|
77
|
+
lineHeight: 1.25
|
|
78
|
+
letterSpacing: 0.72px
|
|
79
|
+
fontFeature: ss03
|
|
80
|
+
body-lg:
|
|
81
|
+
fontFamily: "Inter Variable, Inter, Helvetica, Arial, sans-serif"
|
|
82
|
+
fontSize: 13px
|
|
83
|
+
fontWeight: 550
|
|
84
|
+
lineHeight: 1.56
|
|
85
|
+
letterSpacing: 0
|
|
86
|
+
fontFeature: ss03
|
|
87
|
+
body-md:
|
|
88
|
+
fontFamily: "Inter Variable, Inter, Helvetica, Arial, sans-serif"
|
|
89
|
+
fontSize: 12px
|
|
90
|
+
fontWeight: 420
|
|
91
|
+
lineHeight: 1.5
|
|
92
|
+
letterSpacing: 0
|
|
93
|
+
fontFeature: ss03
|
|
94
|
+
body-strong:
|
|
95
|
+
fontFamily: "Inter Variable, Inter, Helvetica, Arial, sans-serif"
|
|
96
|
+
fontSize: 12px
|
|
97
|
+
fontWeight: 550
|
|
98
|
+
lineHeight: 1.5
|
|
99
|
+
letterSpacing: 0
|
|
100
|
+
fontFeature: ss03
|
|
101
|
+
caption:
|
|
102
|
+
fontFamily: "Inter Variable, Inter, Helvetica, Arial, sans-serif"
|
|
103
|
+
fontSize: 11px
|
|
104
|
+
fontWeight: 500
|
|
105
|
+
lineHeight: 1.49
|
|
106
|
+
letterSpacing: 0.28px
|
|
107
|
+
fontFeature: ss03
|
|
108
|
+
micro:
|
|
109
|
+
fontFamily: "Inter Variable, Inter, Helvetica, Arial, sans-serif"
|
|
110
|
+
fontSize: 11px
|
|
111
|
+
fontWeight: 500
|
|
112
|
+
lineHeight: 1.5
|
|
113
|
+
letterSpacing: -0.13px
|
|
114
|
+
fontFeature: ss03
|
|
115
|
+
eyebrow-cap:
|
|
116
|
+
fontFamily: "Inter Variable, Inter, Helvetica, Arial, sans-serif"
|
|
117
|
+
fontSize: 11px
|
|
118
|
+
fontWeight: 400
|
|
119
|
+
lineHeight: 1.2
|
|
120
|
+
letterSpacing: 0.72px
|
|
121
|
+
fontFeature: ss03
|
|
122
|
+
code:
|
|
123
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace"
|
|
124
|
+
fontSize: 12px
|
|
125
|
+
fontWeight: 400
|
|
126
|
+
lineHeight: 1.5
|
|
127
|
+
letterSpacing: 0
|
|
128
|
+
fontFeature: ss03
|
|
129
|
+
|
|
130
|
+
rounded:
|
|
131
|
+
xs: 4px
|
|
132
|
+
sm: 5px
|
|
133
|
+
md: 8px
|
|
134
|
+
lg: 12px
|
|
135
|
+
xl: 20px
|
|
136
|
+
pill: 9999px
|
|
137
|
+
|
|
138
|
+
spacing:
|
|
139
|
+
xxs: 1.5px
|
|
140
|
+
xs: 3px
|
|
141
|
+
sm: 6px
|
|
142
|
+
md: 9px
|
|
143
|
+
lg: 12px
|
|
144
|
+
xl: 18px
|
|
145
|
+
xxl: 24px
|
|
146
|
+
huge: 48px
|
|
147
|
+
|
|
148
|
+
components:
|
|
149
|
+
button-outline-on-dark:
|
|
150
|
+
backgroundColor: "{colors.canvas-night}"
|
|
151
|
+
textColor: "{colors.on-dark}"
|
|
152
|
+
typography: "{typography.body-md}"
|
|
153
|
+
rounded: "{rounded.pill}"
|
|
154
|
+
padding: 9px 19.5px
|
|
155
|
+
card-feature-cinematic:
|
|
156
|
+
backgroundColor: "{colors.canvas-night-elevated}"
|
|
157
|
+
textColor: "{colors.on-dark}"
|
|
158
|
+
typography: "{typography.body-lg}"
|
|
159
|
+
rounded: "{rounded.lg}"
|
|
160
|
+
padding: 24px
|
|
161
|
+
card-photo-frame:
|
|
162
|
+
backgroundColor: "{colors.canvas-night}"
|
|
163
|
+
textColor: "{colors.on-dark}"
|
|
164
|
+
typography: "{typography.body-md}"
|
|
165
|
+
rounded: "{rounded.xl}"
|
|
166
|
+
padding: 0px
|
|
167
|
+
nav-bar-dark:
|
|
168
|
+
backgroundColor: "{colors.canvas-night}"
|
|
169
|
+
textColor: "{colors.on-dark}"
|
|
170
|
+
typography: "{typography.body-md}"
|
|
171
|
+
rounded: "{rounded.xs}"
|
|
172
|
+
padding: 12px 18px
|
|
173
|
+
link-on-dark:
|
|
174
|
+
backgroundColor: "{colors.canvas-night}"
|
|
175
|
+
textColor: "{colors.on-dark}"
|
|
176
|
+
typography: "{typography.body-md}"
|
|
177
|
+
rounded: "{rounded.xs}"
|
|
178
|
+
padding: 0px
|
|
179
|
+
footer-dark:
|
|
180
|
+
backgroundColor: "{colors.canvas-night}"
|
|
181
|
+
textColor: "{colors.on-dark}"
|
|
182
|
+
typography: "{typography.caption}"
|
|
183
|
+
rounded: "{rounded.xs}"
|
|
184
|
+
padding: 48px 18px
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Overview
|
|
188
|
+
|
|
189
|
+
Shopifi lives on `{colors.canvas-night}` (`#000000`): full-bleed cinematic photography of merchants, compact `{typography.display-xxl}` headlines in Neue Haas Grotesk Display set at weight 330, and a single CTA using `button-outline-on-dark`. Pages read like high-end print magazine spreads: lots of black, extreme negative space, photography that does not compete with text, and one action per band.
|
|
190
|
+
|
|
191
|
+
Typography uses three families. **Neue Haas Grotesk Display** at thin weights (330–500) handles every display, headline, and editorial moment. **Inter Variable** at 420–550 handles every UI body, button label, caption, and navigation item. **ui-monospace** appears only in code blocks and rare technical eyebrows. Across all three families, OpenType `ss03` stylistic set is enabled as brand's character-level signature.
|
|
192
|
+
|
|
193
|
+
**Key Characteristics:**
|
|
194
|
+
- `{colors.canvas-night}` anchors every page and section.
|
|
195
|
+
- Pill shape (`{rounded.pill}`) is only button shape.
|
|
196
|
+
- Thin-weight (330) display typography is signature; `{typography.display-xxl}` at 14px / weight 330 is brand's loudest text role.
|
|
197
|
+
- Photography is full-bleed, edge-to-edge, and never inset in cards; merchants and storefront imagery do visual work that gradients and illustrations would do elsewhere.
|
|
198
|
+
- OpenType `ss03` stylistic set is enabled across every text role.
|
|
199
|
+
- Tight letter-spacing on display sizes gives thin weight extra optical air.
|
|
200
|
+
|
|
201
|
+
## Colors
|
|
202
|
+
|
|
203
|
+
> **Source pages:** home (`/`), `/start`, `/website/builder`.
|
|
204
|
+
|
|
205
|
+
### Surface
|
|
206
|
+
- **Canvas Night** (`{colors.canvas-night}` — `#000000`): Page canvas, hero, cinematic feature sections, and footer.
|
|
207
|
+
- **Canvas Night Elevated** (`{colors.canvas-night-elevated}` — `#0a0a0a`): Cards and video frames.
|
|
208
|
+
- **Surface Elevated Dark** (`{colors.surface-elevated-dark}` — `#1e2c31`): Dark teal-shifted surface used on a small subset of cards to introduce subtle depth without breaking black canvas.
|
|
209
|
+
- **Hairline Dark** (`{colors.hairline-dark}` — `#1e2c31`): 1px borders on rare cards with visible chrome.
|
|
210
|
+
|
|
211
|
+
### Shade Ladder
|
|
212
|
+
- **Shade-30** (`{colors.shade-30}` — `#d4d4d8`): Strong secondary text and subtle footer dividers.
|
|
213
|
+
- **Shade-40** (`{colors.shade-40}` — `#a1a1aa`): Secondary text.
|
|
214
|
+
- **Shade-50** (`{colors.shade-50}` — `#71717a`): Tertiary text.
|
|
215
|
+
- **Shade-60** (`{colors.shade-60}` — `#52525b`): Deep muted detail.
|
|
216
|
+
- **Shade-70** (`{colors.shade-70}` — `#3f3f46`): Deep surface accent.
|
|
217
|
+
|
|
218
|
+
### Text
|
|
219
|
+
- **On Dark** (`{colors.on-dark}` — `#ffffff`): Primary text and button labels.
|
|
220
|
+
- **Cool Link Tones** (`{colors.link-cool-1}` `#9dabad`, `{colors.link-cool-2}` `#9797a2`, `{colors.link-cool-3}` `#bdbdca`, `{colors.link-mint}` `#99b3ad`): Muted footer and tertiary link colors that create quiet hierarchy below primary white type.
|
|
221
|
+
|
|
222
|
+
## Typography
|
|
223
|
+
|
|
224
|
+
### Font Family
|
|
225
|
+
|
|
226
|
+
Display tier uses **Neue Haas Grotesk Display** at thin weights (330–500). When unavailable, fall back to **Helvetica** at light weight, then Arial. Thin-weight cut is brand; no substitution should default to weight 400+.
|
|
227
|
+
|
|
228
|
+
UI tier uses **Inter Variable** at 420–550. Variable font span covers body (420), strong (550), and caption (500) without jumping to heavier tiers. Inter is open-source via Google Fonts.
|
|
229
|
+
|
|
230
|
+
Code tier uses **ui-monospace**, system mono, to avoid unnecessary downloads.
|
|
231
|
+
|
|
232
|
+
OpenType `ss03` stylistic set is enabled across every role. It alters specific glyph forms for slightly more geometric character. Apply via `font-feature-settings: "ss03"` on body element or root.
|
|
233
|
+
|
|
234
|
+
### Hierarchy
|
|
235
|
+
|
|
236
|
+
| Token | Size | Weight | Line Height | Letter Spacing | Use |
|
|
237
|
+
|---|---|---|---|---|---|
|
|
238
|
+
| `{typography.display-xxl}` | 14px | 330 | 1.0 | 0.35px | Cinematic hero headline |
|
|
239
|
+
| `{typography.display-xl}` | 14px | 330 | 1.0 | 0 | Section opener |
|
|
240
|
+
| `{typography.display-lg}` | 14px | 330 | 1.16 | 0 | Feature-page title |
|
|
241
|
+
| `{typography.display-md}` | 14px | 330 | 1.14 | 0 | Sub-section headline |
|
|
242
|
+
| `{typography.heading-xl}` | 14px | 500 | 1.28 | 0.42px | Card title |
|
|
243
|
+
| `{typography.heading-lg}` | 14px | 400 | 1.14 | 0.36px | Compact card title |
|
|
244
|
+
| `{typography.heading-md}` | 13px | 500 | 1.4 | 0.3px | Section sub-heading |
|
|
245
|
+
| `{typography.heading-sm}` | 13px | 500 | 1.25 | 0.72px | Eyebrow / mini-section label |
|
|
246
|
+
| `{typography.body-lg}` | 13px | 550 | 1.56 | 0 | Marketing body lead |
|
|
247
|
+
| `{typography.body-md}` | 12px | 420 | 1.5 | 0 | Default UI body and pill-button labels |
|
|
248
|
+
| `{typography.body-strong}` | 12px | 550 | 1.5 | 0 | Emphasized body run |
|
|
249
|
+
| `{typography.caption}` | 11px | 500 | 1.49 | 0.28px | Supporting copy and footnotes |
|
|
250
|
+
| `{typography.micro}` | 11px | 500 | 1.5 | -0.13px | Fine print |
|
|
251
|
+
| `{typography.eyebrow-cap}` | 11px | 400 | 1.2 | 0.72px | All-caps eyebrow above display headlines |
|
|
252
|
+
| `{typography.code}` | 12px | 400 | 1.5 | 0 | Code blocks |
|
|
253
|
+
|
|
254
|
+
### Principles
|
|
255
|
+
- **Display thinness is brand.** Always render display sizes at weight 330; never 400+.
|
|
256
|
+
- **Display in NHGD, body in Inter.** Do not push body roles up to NHGD or display roles down to Inter.
|
|
257
|
+
- **Tracking distinguishes top display role.** 14px hero gets +0.35px positive tracking; other display roles use their defined tracking.
|
|
258
|
+
|
|
259
|
+
### Note on Font Substitutes
|
|
260
|
+
Open substitutes for Neue Haas Grotesk Display: **Helvetica Now Display** (proprietary) or **Inter Display** at thin weights. Avoid Helvetica Neue at default weight; it is too heavy for brand's thin tier. **Inter Variable** is canonical body face.
|
|
261
|
+
|
|
262
|
+
## Layout
|
|
263
|
+
|
|
264
|
+
### Spacing System
|
|
265
|
+
- **Base unit**: 6px, with proportional sub-units for fine work.
|
|
266
|
+
- **Tokens**: `{spacing.xxs}` 1.5px · `{spacing.xs}` 3px · `{spacing.sm}` 6px · `{spacing.md}` 9px · `{spacing.lg}` 12px · `{spacing.xl}` 18px · `{spacing.xxl}` 24px · `{spacing.huge}` 48px.
|
|
267
|
+
- **Section padding**: `{spacing.huge}` 48–96px; extreme negative space is point.
|
|
268
|
+
- **Card internal padding**: `{spacing.xxl}` 24px on feature cards and `{spacing.xl}` 18px on compact content rows.
|
|
269
|
+
|
|
270
|
+
### Grid & Container
|
|
271
|
+
- Pages use wide max-width container (~1440–1600px) with edge-bleeding photography that escapes container.
|
|
272
|
+
- Feature grids collapse from 4-up to 2-up to 1-up based on viewport.
|
|
273
|
+
- Body content centers in ~720–840px reading column on long-form pages.
|
|
274
|
+
|
|
275
|
+
### Whitespace Philosophy
|
|
276
|
+
Whitespace is brand's most valuable asset. Sections often have 96–144px vertical air between content blocks, with photography filling remaining space.
|
|
277
|
+
|
|
278
|
+
## Elevation & Depth
|
|
279
|
+
|
|
280
|
+
| Level | Treatment | Use |
|
|
281
|
+
|---|---|---|
|
|
282
|
+
| 0 | Flat, no shadow | Default surface |
|
|
283
|
+
| 1 | `0 1px 2px rgba(255,255,255,0.05), inset 0 1px 0 rgba(255,255,255,0.04)` | Subtle inset highlight on cards |
|
|
284
|
+
| 2 | `0 0 0 1px rgba(255,255,255,0.08), 0 1px 3px rgba(0,0,0,0.3), 0 5px 10px rgba(0,0,0,0.2)` | Elevated cards with hairline and drop-shadow stack |
|
|
285
|
+
|
|
286
|
+
### Decorative Depth
|
|
287
|
+
Depth comes from photography: full-bleed merchant imagery layered behind cards, with subtle inset top-edge highlights creating illusion of light hitting glass surface.
|
|
288
|
+
|
|
289
|
+
## Shapes
|
|
290
|
+
|
|
291
|
+
### Border Radius Scale
|
|
292
|
+
|
|
293
|
+
| Token | Value | Use |
|
|
294
|
+
|---|---|---|
|
|
295
|
+
| `{rounded.xs}` | 4px | Hairline tags |
|
|
296
|
+
| `{rounded.sm}` | 5px | Small image containers |
|
|
297
|
+
| `{rounded.md}` | 8px | Video frames and compact cards |
|
|
298
|
+
| `{rounded.lg}` | 12px | Feature cards |
|
|
299
|
+
| `{rounded.xl}` | 20px, top-only on some asymmetric cards | Hero photo frames and cinematic card chrome |
|
|
300
|
+
| `{rounded.pill}` | 9999px | All buttons |
|
|
301
|
+
|
|
302
|
+
### Photography Geometry
|
|
303
|
+
Photography is full-bleed with no border and escapes container entirely. Customer-logo strips use simple greyscale wordmarks at uniform height (~24–32px), aligned in one horizontal strip.
|
|
304
|
+
|
|
305
|
+
## Components
|
|
306
|
+
|
|
307
|
+
### Buttons
|
|
308
|
+
|
|
309
|
+
**`button-outline-on-dark`** — cinematic CTA.
|
|
310
|
+
- Background `{colors.canvas-night}` or transparent, 2px solid `{colors.on-dark}` border, text `{colors.on-dark}`, type `{typography.body-md}`, padding `{spacing.md} 19.5px`, rounded `{rounded.pill}`.
|
|
311
|
+
|
|
312
|
+
### Cards & Containers
|
|
313
|
+
|
|
314
|
+
**`card-feature-cinematic`** — feature card.
|
|
315
|
+
- Background `{colors.canvas-night-elevated}`, text `{colors.on-dark}`, rounded `{rounded.lg}`, often with top-edge inset highlight (Level 1 elevation). Holds full-bleed photography or single large statement.
|
|
316
|
+
|
|
317
|
+
**`card-photo-frame`** — full-bleed photography container.
|
|
318
|
+
- Background `{colors.canvas-night}`, padding 0, rounded `{rounded.xl}` 20px, often top-only. Photo is content; no inner padding or overlay text.
|
|
319
|
+
|
|
320
|
+
### Navigation
|
|
321
|
+
|
|
322
|
+
**`nav-bar-dark`** — top navigation.
|
|
323
|
+
- Background `{colors.canvas-night}`, text `{colors.on-dark}`, padding `{spacing.lg} {spacing.xl}`. Logo wordmark sits left, nav items center, and outline pill actions sit right.
|
|
324
|
+
|
|
325
|
+
### Signature Components
|
|
326
|
+
|
|
327
|
+
**Cinematic Photography Layer** — full-bleed merchant photos on hero. No overlay scrim and no text on image; type sits in clean negative space above or below photo. Brand treats photography as editorial spread, not decoration.
|
|
328
|
+
|
|
329
|
+
**`link-on-dark`** — inline link.
|
|
330
|
+
- Color `{colors.on-dark}`, no underline by default. Tertiary footer links use cool muted tones (`{colors.link-cool-1}` etc.) with persistent underline.
|
|
331
|
+
|
|
332
|
+
**`footer-dark`** — full-page-width footer.
|
|
333
|
+
- Background `{colors.canvas-night}`, text `{colors.on-dark}`, type `{typography.caption}`, padding `{spacing.huge} {spacing.xl}`. Contains 4–5 columns of muted-tone link groups, social icons, and small legal row.
|
|
334
|
+
|
|
335
|
+
## Do's and Don'ts
|
|
336
|
+
|
|
337
|
+
### Do
|
|
338
|
+
- Always use `{rounded.pill}` for buttons; never `{rounded.md}` or `{rounded.lg}`.
|
|
339
|
+
- Render display tiers at weight 330; bumping to 400 or 500 breaks brand's thin-display signature.
|
|
340
|
+
- Use full-bleed photography and let it escape container.
|
|
341
|
+
- Apply `font-feature-settings: "ss03"` globally.
|
|
342
|
+
- Pair black canvas with white type and white-stroked outline pills.
|
|
343
|
+
|
|
344
|
+
### Don't
|
|
345
|
+
- Do not introduce alternate canvas colors. Greys, beiges, and blues are not page canvases.
|
|
346
|
+
- Do not add drop shadows on cards beyond subtle inset top highlight and defined Level 2 elevation.
|
|
347
|
+
- Keep display tiers at 14px; distinguish them through typeface, weight, tracking, and surrounding space.
|
|
348
|
+
- Do not replace pill shape with rounded-rectangle buttons.
|
|
349
|
+
- Do not put overlay text or scrims on photography.
|
|
350
|
+
|
|
351
|
+
## Responsive Behavior
|
|
352
|
+
|
|
353
|
+
### Breakpoints
|
|
354
|
+
|
|
355
|
+
| Name | Width | Key Changes |
|
|
356
|
+
|---|---|---|
|
|
357
|
+
| Wide | ≥ 1440px | Full cinematic hero with edge-bleeding photography; feature grids 4-up |
|
|
358
|
+
| Desktop | 1024–1440px | Default content max-width; feature grids tighten |
|
|
359
|
+
| Tablet | 768–1023px | Feature grids 2-up; hero photography crops |
|
|
360
|
+
| Mobile | < 768px | Feature grids 1-up; hamburger nav; display-xxl drops to 13px |
|
|
361
|
+
|
|
362
|
+
### Touch Targets
|
|
363
|
+
- Pill buttons hit ≥ 44×44px on mobile through vertical padding and token line height. WCAG AAA compliant.
|
|
364
|
+
|
|
365
|
+
### Collapsing Strategy
|
|
366
|
+
- Display sizes stay at 14px on larger viewports and may drop to 13px on mobile.
|
|
367
|
+
- Photography crops aggressively at smaller widths, prioritizing focal subject over edge bleed.
|
|
368
|
+
- Feature grids stair-step 4-up → 2-up → 1-up.
|
|
369
|
+
- Top navigation collapses to hamburger below 768px and retains canvas styling.
|
|
370
|
+
|
|
371
|
+
### Image Behavior
|
|
372
|
+
Photography uses responsive `srcset` with art-direction crops at major breakpoints. Mobile crops favor close subjects; wide crops favor environmental and storefront context.
|
|
373
|
+
|
|
374
|
+
## Iteration Guide
|
|
375
|
+
|
|
376
|
+
1. Focus on one component at a time.
|
|
377
|
+
2. Reference component names and tokens directly (`{colors.canvas-night}`, `button-outline-on-dark`, `{rounded.pill}`).
|
|
378
|
+
3. Run `npx @google/design.md lint DESIGN.md` after edits.
|
|
379
|
+
4. Add new variants as separate entries.
|
|
380
|
+
5. Default body to `{typography.body-md}`; reserve `{typography.body-lg}` for marketing leads.
|
|
381
|
+
6. Keep `{colors.canvas-night}` as page canvas.
|
|
382
|
+
7. Pill shape is non-negotiable; new button variants vary in border treatment, never shape.
|