getrelay 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.
Files changed (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/bin/relay.js +362 -0
  4. package/design-md/airbnb/DESIGN.md +545 -0
  5. package/design-md/airbnb/README.md +5 -0
  6. package/design-md/airtable/DESIGN.md +554 -0
  7. package/design-md/airtable/README.md +5 -0
  8. package/design-md/apple/DESIGN.md +562 -0
  9. package/design-md/apple/README.md +5 -0
  10. package/design-md/binance/DESIGN.md +634 -0
  11. package/design-md/binance/README.md +5 -0
  12. package/design-md/bmw/DESIGN.md +544 -0
  13. package/design-md/bmw/README.md +5 -0
  14. package/design-md/bmw-m/DESIGN.md +503 -0
  15. package/design-md/bmw-m/README.md +5 -0
  16. package/design-md/bugatti/DESIGN.md +454 -0
  17. package/design-md/bugatti/README.md +5 -0
  18. package/design-md/cal/DESIGN.md +542 -0
  19. package/design-md/cal/README.md +5 -0
  20. package/design-md/claude/DESIGN.md +589 -0
  21. package/design-md/claude/README.md +5 -0
  22. package/design-md/clay/DESIGN.md +541 -0
  23. package/design-md/clay/README.md +5 -0
  24. package/design-md/clickhouse/DESIGN.md +544 -0
  25. package/design-md/clickhouse/README.md +5 -0
  26. package/design-md/cohere/DESIGN.md +451 -0
  27. package/design-md/cohere/README.md +5 -0
  28. package/design-md/coinbase/DESIGN.md +570 -0
  29. package/design-md/coinbase/README.md +5 -0
  30. package/design-md/composio/DESIGN.md +506 -0
  31. package/design-md/composio/README.md +5 -0
  32. package/design-md/cursor/DESIGN.md +537 -0
  33. package/design-md/cursor/README.md +5 -0
  34. package/design-md/elevenlabs/DESIGN.md +504 -0
  35. package/design-md/elevenlabs/README.md +5 -0
  36. package/design-md/expo/DESIGN.md +526 -0
  37. package/design-md/expo/README.md +5 -0
  38. package/design-md/ferrari/DESIGN.md +531 -0
  39. package/design-md/ferrari/README.md +5 -0
  40. package/design-md/figma/DESIGN.md +578 -0
  41. package/design-md/figma/README.md +5 -0
  42. package/design-md/framer/DESIGN.md +544 -0
  43. package/design-md/framer/README.md +5 -0
  44. package/design-md/hashicorp/DESIGN.md +575 -0
  45. package/design-md/hashicorp/README.md +5 -0
  46. package/design-md/ibm/DESIGN.md +550 -0
  47. package/design-md/ibm/README.md +5 -0
  48. package/design-md/intercom/DESIGN.md +546 -0
  49. package/design-md/intercom/README.md +5 -0
  50. package/design-md/kraken/DESIGN.md +125 -0
  51. package/design-md/kraken/README.md +5 -0
  52. package/design-md/lamborghini/DESIGN.md +288 -0
  53. package/design-md/lamborghini/README.md +5 -0
  54. package/design-md/linear.app/DESIGN.md +548 -0
  55. package/design-md/linear.app/README.md +5 -0
  56. package/design-md/lovable/DESIGN.md +298 -0
  57. package/design-md/lovable/README.md +5 -0
  58. package/design-md/mastercard/DESIGN.md +365 -0
  59. package/design-md/mastercard/README.md +5 -0
  60. package/design-md/meta/DESIGN.md +683 -0
  61. package/design-md/meta/README.md +5 -0
  62. package/design-md/minimax/DESIGN.md +746 -0
  63. package/design-md/minimax/README.md +5 -0
  64. package/design-md/mintlify/DESIGN.md +852 -0
  65. package/design-md/mintlify/README.md +5 -0
  66. package/design-md/miro/DESIGN.md +825 -0
  67. package/design-md/miro/README.md +5 -0
  68. package/design-md/mistral.ai/DESIGN.md +773 -0
  69. package/design-md/mistral.ai/README.md +5 -0
  70. package/design-md/mongodb/DESIGN.md +767 -0
  71. package/design-md/mongodb/README.md +5 -0
  72. package/design-md/nike/DESIGN.md +575 -0
  73. package/design-md/nike/README.md +5 -0
  74. package/design-md/notion/DESIGN.md +821 -0
  75. package/design-md/notion/README.md +5 -0
  76. package/design-md/nvidia/DESIGN.md +640 -0
  77. package/design-md/nvidia/README.md +5 -0
  78. package/design-md/ollama/DESIGN.md +539 -0
  79. package/design-md/ollama/README.md +5 -0
  80. package/design-md/opencode.ai/DESIGN.md +521 -0
  81. package/design-md/opencode.ai/README.md +5 -0
  82. package/design-md/pinterest/DESIGN.md +597 -0
  83. package/design-md/pinterest/README.md +5 -0
  84. package/design-md/playstation/DESIGN.md +661 -0
  85. package/design-md/playstation/README.md +5 -0
  86. package/design-md/posthog/DESIGN.md +690 -0
  87. package/design-md/posthog/README.md +5 -0
  88. package/design-md/raycast/DESIGN.md +669 -0
  89. package/design-md/raycast/README.md +5 -0
  90. package/design-md/renault/DESIGN.md +589 -0
  91. package/design-md/renault/README.md +5 -0
  92. package/design-md/replicate/DESIGN.md +616 -0
  93. package/design-md/replicate/README.md +5 -0
  94. package/design-md/resend/DESIGN.md +585 -0
  95. package/design-md/resend/README.md +5 -0
  96. package/design-md/revolut/DESIGN.md +636 -0
  97. package/design-md/revolut/README.md +5 -0
  98. package/design-md/runwayml/DESIGN.md +244 -0
  99. package/design-md/runwayml/README.md +5 -0
  100. package/design-md/sanity/DESIGN.md +357 -0
  101. package/design-md/sanity/README.md +5 -0
  102. package/design-md/sentry/DESIGN.md +551 -0
  103. package/design-md/sentry/README.md +5 -0
  104. package/design-md/shopify/DESIGN.md +516 -0
  105. package/design-md/shopify/README.md +5 -0
  106. package/design-md/slack/DESIGN.md +482 -0
  107. package/design-md/spacex/DESIGN.md +363 -0
  108. package/design-md/spacex/README.md +5 -0
  109. package/design-md/spotify/DESIGN.md +246 -0
  110. package/design-md/spotify/README.md +5 -0
  111. package/design-md/starbucks/DESIGN.md +580 -0
  112. package/design-md/starbucks/README.md +5 -0
  113. package/design-md/stripe/DESIGN.md +487 -0
  114. package/design-md/stripe/README.md +5 -0
  115. package/design-md/supabase/DESIGN.md +462 -0
  116. package/design-md/supabase/README.md +5 -0
  117. package/design-md/superhuman/DESIGN.md +448 -0
  118. package/design-md/superhuman/README.md +5 -0
  119. package/design-md/tesla/DESIGN.md +286 -0
  120. package/design-md/tesla/README.md +5 -0
  121. package/design-md/theverge/DESIGN.md +339 -0
  122. package/design-md/theverge/README.md +5 -0
  123. package/design-md/together.ai/DESIGN.md +633 -0
  124. package/design-md/together.ai/README.md +5 -0
  125. package/design-md/uber/DESIGN.md +636 -0
  126. package/design-md/uber/README.md +5 -0
  127. package/design-md/vercel/DESIGN.md +736 -0
  128. package/design-md/vercel/README.md +5 -0
  129. package/design-md/vodafone/DESIGN.md +538 -0
  130. package/design-md/vodafone/README.md +5 -0
  131. package/design-md/voltagent/DESIGN.md +521 -0
  132. package/design-md/voltagent/README.md +5 -0
  133. package/design-md/warp/DESIGN.md +526 -0
  134. package/design-md/warp/README.md +5 -0
  135. package/design-md/webflow/DESIGN.md +588 -0
  136. package/design-md/webflow/README.md +5 -0
  137. package/design-md/wired/DESIGN.md +497 -0
  138. package/design-md/wired/README.md +5 -0
  139. package/design-md/wise/DESIGN.md +544 -0
  140. package/design-md/wise/README.md +5 -0
  141. package/design-md/x.ai/DESIGN.md +465 -0
  142. package/design-md/x.ai/README.md +5 -0
  143. package/design-md/zapier/DESIGN.md +537 -0
  144. package/design-md/zapier/README.md +5 -0
  145. package/package.json +31 -0
@@ -0,0 +1,544 @@
1
+ ---
2
+ version: alpha
3
+ name: Framer
4
+ description: "A confident dark-canvas builder marketing site that treats the page like a working artboard — pure black surfaces, white display type set in GT Walsheim Medium with aggressive negative tracking, and a single confident blue (#0099ff) reserved for hyperlinks and selection states. The page rhythm is broken by oversized vibrant gradient atmosphere panels — magenta, violet, orange spotlights — that act as living showcase tiles, not decoration. Every CTA is a white pill on dark; every card is a translucent or charcoal surface; every section title pulls letter-spacing tight enough to feel like a poster."
5
+
6
+ colors:
7
+ primary: "#ffffff"
8
+ on-primary: "#000000"
9
+ accent-blue: "#0099ff"
10
+ ink: "#ffffff"
11
+ ink-muted: "#999999"
12
+ canvas: "#090909"
13
+ surface-1: "#141414"
14
+ surface-2: "#1c1c1c"
15
+ hairline: "#262626"
16
+ hairline-soft: "#1a1a1a"
17
+ inverse-canvas: "#ffffff"
18
+ inverse-ink: "#000000"
19
+ gradient-magenta: "#d44df0"
20
+ gradient-violet: "#6a4cf5"
21
+ gradient-orange: "#ff7a3d"
22
+ gradient-coral: "#ff5577"
23
+ semantic-success: "#22c55e"
24
+
25
+ typography:
26
+ display-xxl:
27
+ fontFamily: GT Walsheim Framer Medium
28
+ fontSize: 110px
29
+ fontWeight: 500
30
+ lineHeight: 0.85
31
+ letterSpacing: -5.5px
32
+ display-xl:
33
+ fontFamily: GT Walsheim Medium
34
+ fontSize: 85px
35
+ fontWeight: 500
36
+ lineHeight: 0.95
37
+ letterSpacing: -4.25px
38
+ fontFeature: ss02
39
+ display-lg:
40
+ fontFamily: GT Walsheim Medium
41
+ fontSize: 62px
42
+ fontWeight: 500
43
+ lineHeight: 1.00
44
+ letterSpacing: -3.1px
45
+ fontFeature: ss02
46
+ display-md:
47
+ fontFamily: GT Walsheim Medium
48
+ fontSize: 32px
49
+ fontWeight: 500
50
+ lineHeight: 1.13
51
+ letterSpacing: -1.0px
52
+ headline:
53
+ fontFamily: Inter
54
+ fontSize: 22px
55
+ fontWeight: 700
56
+ lineHeight: 1.20
57
+ letterSpacing: -0.8px
58
+ fontFeature: cv05
59
+ subhead:
60
+ fontFamily: Inter Variable
61
+ fontSize: 24px
62
+ fontWeight: 400
63
+ lineHeight: 1.30
64
+ letterSpacing: -0.01px
65
+ fontFeature: cv11
66
+ body-lg:
67
+ fontFamily: Inter Variable
68
+ fontSize: 18px
69
+ fontWeight: 400
70
+ lineHeight: 1.30
71
+ letterSpacing: -0.18px
72
+ fontFeature: cv11
73
+ body:
74
+ fontFamily: Inter Variable
75
+ fontSize: 15px
76
+ fontWeight: 400
77
+ lineHeight: 1.30
78
+ letterSpacing: -0.15px
79
+ fontFeature: cv11
80
+ body-sm:
81
+ fontFamily: Inter Variable
82
+ fontSize: 14px
83
+ fontWeight: 500
84
+ lineHeight: 1.40
85
+ letterSpacing: -0.14px
86
+ fontFeature: cv11
87
+ caption:
88
+ fontFamily: Inter Variable
89
+ fontSize: 13px
90
+ fontWeight: 500
91
+ lineHeight: 1.20
92
+ letterSpacing: -0.13px
93
+ fontFeature: cv11
94
+ micro:
95
+ fontFamily: Inter Variable
96
+ fontSize: 12px
97
+ fontWeight: 400
98
+ lineHeight: 1.20
99
+ letterSpacing: -0.12px
100
+ fontFeature: cv11
101
+ button:
102
+ fontFamily: Inter Variable
103
+ fontSize: 14px
104
+ fontWeight: 500
105
+ lineHeight: 1.0
106
+ letterSpacing: -0.14px
107
+ fontFeature: cv11
108
+
109
+ rounded:
110
+ xs: 4px
111
+ sm: 6px
112
+ md: 10px
113
+ lg: 15px
114
+ xl: 20px
115
+ xxl: 30px
116
+ pill: 100px
117
+ full: 9999px
118
+
119
+ spacing:
120
+ hair: 1px
121
+ xxs: 4px
122
+ xs: 8px
123
+ sm: 12px
124
+ md: 15px
125
+ lg: 20px
126
+ xl: 30px
127
+ xxl: 40px
128
+ section: 96px
129
+
130
+ components:
131
+ button-primary:
132
+ backgroundColor: "{colors.primary}"
133
+ textColor: "{colors.on-primary}"
134
+ typography: "{typography.button}"
135
+ rounded: "{rounded.pill}"
136
+ padding: 10px 15px
137
+ button-primary-pressed:
138
+ backgroundColor: "{colors.primary}"
139
+ textColor: "{colors.on-primary}"
140
+ typography: "{typography.button}"
141
+ rounded: "{rounded.pill}"
142
+ button-secondary:
143
+ backgroundColor: "{colors.surface-1}"
144
+ textColor: "{colors.ink}"
145
+ typography: "{typography.button}"
146
+ rounded: "{rounded.pill}"
147
+ padding: 10px 15px
148
+ button-translucent:
149
+ backgroundColor: "{colors.surface-2}"
150
+ textColor: "{colors.ink}"
151
+ typography: "{typography.button}"
152
+ rounded: "{rounded.xxl}"
153
+ padding: 8px 14px
154
+ button-icon-circular:
155
+ backgroundColor: "{colors.surface-1}"
156
+ textColor: "{colors.ink}"
157
+ typography: "{typography.button}"
158
+ rounded: "{rounded.full}"
159
+ size: 40px
160
+ pricing-tab-default:
161
+ backgroundColor: "{colors.canvas}"
162
+ textColor: "{colors.ink-muted}"
163
+ typography: "{typography.button}"
164
+ rounded: "{rounded.pill}"
165
+ padding: 8px 14px
166
+ pricing-tab-selected:
167
+ backgroundColor: "{colors.surface-2}"
168
+ textColor: "{colors.ink}"
169
+ typography: "{typography.button}"
170
+ rounded: "{rounded.pill}"
171
+ padding: 8px 14px
172
+ text-input:
173
+ backgroundColor: "{colors.surface-1}"
174
+ textColor: "{colors.ink}"
175
+ typography: "{typography.body}"
176
+ rounded: "{rounded.md}"
177
+ padding: 10px 14px
178
+ text-input-focused:
179
+ backgroundColor: "{colors.surface-1}"
180
+ textColor: "{colors.ink}"
181
+ typography: "{typography.body}"
182
+ rounded: "{rounded.md}"
183
+ padding: 10px 14px
184
+ pricing-card:
185
+ backgroundColor: "{colors.surface-1}"
186
+ textColor: "{colors.ink}"
187
+ typography: "{typography.body}"
188
+ rounded: "{rounded.xl}"
189
+ padding: 24px
190
+ pricing-card-featured:
191
+ backgroundColor: "{colors.surface-2}"
192
+ textColor: "{colors.ink}"
193
+ typography: "{typography.body}"
194
+ rounded: "{rounded.xl}"
195
+ padding: 24px
196
+ template-card:
197
+ backgroundColor: "{colors.surface-1}"
198
+ textColor: "{colors.ink}"
199
+ typography: "{typography.body-sm}"
200
+ rounded: "{rounded.lg}"
201
+ padding: 12px
202
+ gradient-spotlight-card:
203
+ backgroundColor: "{colors.gradient-violet}"
204
+ textColor: "{colors.ink}"
205
+ typography: "{typography.subhead}"
206
+ rounded: "{rounded.xl}"
207
+ padding: 32px
208
+ gradient-spotlight-card-magenta:
209
+ backgroundColor: "{colors.gradient-magenta}"
210
+ textColor: "{colors.ink}"
211
+ typography: "{typography.subhead}"
212
+ rounded: "{rounded.xl}"
213
+ padding: 32px
214
+ gradient-spotlight-card-orange:
215
+ backgroundColor: "{colors.gradient-orange}"
216
+ textColor: "{colors.ink}"
217
+ typography: "{typography.subhead}"
218
+ rounded: "{rounded.xl}"
219
+ padding: 32px
220
+ product-mockup-tile:
221
+ backgroundColor: "{colors.surface-1}"
222
+ textColor: "{colors.ink}"
223
+ typography: "{typography.body-sm}"
224
+ rounded: "{rounded.xl}"
225
+ padding: 16px
226
+ feature-row:
227
+ backgroundColor: "{colors.canvas}"
228
+ textColor: "{colors.ink}"
229
+ typography: "{typography.body}"
230
+ rounded: "{rounded.xs}"
231
+ comparison-row:
232
+ backgroundColor: "{colors.canvas}"
233
+ textColor: "{colors.ink-muted}"
234
+ typography: "{typography.body-sm}"
235
+ rounded: "{rounded.xs}"
236
+ top-nav:
237
+ backgroundColor: "{colors.canvas}"
238
+ textColor: "{colors.ink}"
239
+ typography: "{typography.body-sm}"
240
+ rounded: "{rounded.xs}"
241
+ height: 56px
242
+ faq-row:
243
+ backgroundColor: "{colors.canvas}"
244
+ textColor: "{colors.ink}"
245
+ typography: "{typography.body}"
246
+ rounded: "{rounded.md}"
247
+ padding: 24px
248
+ footer:
249
+ backgroundColor: "{colors.canvas}"
250
+ textColor: "{colors.ink-muted}"
251
+ typography: "{typography.caption}"
252
+ rounded: "{rounded.xs}"
253
+ padding: 64px 32px
254
+ ---
255
+
256
+ ## Overview
257
+
258
+ Framer's marketing canvas is a near-pure black artboard. The dominant surface is `{colors.canvas}` — almost pure black with a faint warmth — and on top of it sits oversized white display type set in **GT Walsheim Medium** with letter-spacing pulled to extreme negative values (-5.5px on the 110px display, -4.25px on the 85px hero). The page reads like a poster: one assertive statement per band, generous breathing room above and below.
259
+
260
+ The single accent is `{colors.accent-blue}` — used scarcely, mostly for hyperlinks, selection halos, and a subtle blue-tinted shadow ring on focused inputs. The brand chrome itself is monochrome: white pill buttons, charcoal cards, gray secondary text. What makes Framer distinctive is the rhythm break — every few sections the page drops in a **vibrant gradient atmosphere card**: a magenta-violet spotlight, a sunset-orange wash, a coral-pink panel. These aren't section backgrounds; they're individual cards arranged in a card grid, each one a small living poster that shows what Framer can produce.
261
+
262
+ Body type is **Inter Variable**, with Framer leaning hard into Inter's character variants (`cv01`, `cv05`, `cv09`, `cv11`, `ss03`, `ss07`, `dlig`) — the result is a body voice that feels custom-tuned, with single-storey "a", straight-leg "l", and tabular figures. There's no light mode on the marketing site; the brand IS dark.
263
+
264
+ **Key Characteristics:**
265
+ - Black-canvas marketing system: `{colors.canvas}` is the surface for hero, body, pricing, FAQ, and footer alike — no light interludes.
266
+ - Massive negative letter-spacing on display sizes (-5.5px / -4.25px / -3.1px) creates a poster-grade headline cadence.
267
+ - White pill (`{components.button-primary}`) is the only primary CTA shape across the site; secondary actions live as charcoal pills (`{components.button-secondary}`) or text links.
268
+ - Oversized **gradient spotlight cards** (violet, magenta, orange, coral) act as showcase tiles inside the dark grid; they are individual cards, not section backgrounds.
269
+ - Inter Variable with bespoke OpenType character variants (`cv01/05/09/11`, `ss03/ss07`, `dlig`) used everywhere body type appears — the typographic voice is unmistakable.
270
+ - Border radius scale runs from 4px utility chips up to 100px pills and full circles, with 15–20px the default for cards and 30px for atmospheric gradient cards.
271
+ - A single chromatic accent `{colors.accent-blue}` reserved for hyperlinks, focus, and selection — never decorative.
272
+
273
+ ## Colors
274
+
275
+ > Source pages: framer.com (home), /ai/, /startups/, /marketplace/templates/nudge/, /gallery/a16z-speedrun-×-tonik, /pricing.
276
+
277
+ ### Brand & Accent
278
+ - **Pure White** ({colors.primary}): The brand primary surface. Every primary CTA pill, every display headline, every body line on canvas.
279
+ - **Sky Blue** ({colors.accent-blue}): The single chromatic accent. Hyperlinks, focused-input rings, and a few selection states. Never used for backgrounds or as a brand fill.
280
+
281
+ ### Surface
282
+ - **Canvas** ({colors.canvas}): Default page background — near-black with a faint warmth. Footer, pricing, hero, and FAQ all sit on it.
283
+ - **Surface 1** ({colors.surface-1}): One step above canvas — pricing cards, secondary buttons, mockup tiles.
284
+ - **Surface 2** ({colors.surface-2}): Two steps above — featured pricing card, hero pill backdrop, selected pricing tab.
285
+ - **Hairline** ({colors.hairline}): 1px borders on input groups, comparison-table dividers.
286
+ - **Hairline Soft** ({colors.hairline-soft}): Subtler dividers — between FAQ rows and footer column rules.
287
+ - **Inverse Canvas** ({colors.inverse-canvas}): Pure white — used as the surface of light-on-dark pill CTAs and a small set of light-mode template thumbnails embedded in the showcase grid.
288
+
289
+ ### Text
290
+ - **Ink** ({colors.ink}): All headline and emphasized body type — pure white.
291
+ - **Ink Muted** ({colors.ink-muted}): Secondary type — gray (#999999) used for meta info, footer columns, comparison-row labels, deselected pricing tabs. Hierarchy on the dark canvas is carried by ink → ink-muted contrast, not by weight changes.
292
+
293
+ ### Semantic
294
+ - **Success Green** ({colors.semantic-success}): Pricing comparison-table checkmarks. Glyph fill, not surface.
295
+
296
+ ### Brand Gradient (signature)
297
+ - **Gradient Magenta** ({colors.gradient-magenta}): Spotlight card variant.
298
+ - **Gradient Violet** ({colors.gradient-violet}): Spotlight card variant — most common.
299
+ - **Gradient Orange** ({colors.gradient-orange}): Spotlight card variant — sunset wash.
300
+ - **Gradient Coral** ({colors.gradient-coral}): Spotlight card variant — coral/pink.
301
+
302
+ These four sit as oversized atmospheric tiles inside otherwise monochrome card grids — a dark canvas with one or two glowing spotlight cards is a recurring page signature.
303
+
304
+ ## Typography
305
+
306
+ ### Font Family
307
+
308
+ - **GT Walsheim Framer Medium** / **GT Walsheim Medium** — Framer's display typeface. Geometric, slightly humanist, very confident at large sizes with extreme negative tracking. Fallbacks: `GT Walsheim Medium Placeholder` system font.
309
+ - **Inter Variable** — System body typeface. Used with extensive OpenType character variants: `cv01` (alternate "1"), `cv05` (alternate "g"), `cv09` (alternate "i" / "l"), `cv11` (alternate "0"), `ss03` / `ss07` stylistic sets, `dlig` discretionary ligatures, and `tnum` for numerics in tabular contexts. The result is a body voice that feels bespoke without commissioning a custom face.
310
+ - **Inter** — Used selectively for `{typography.headline}` (the 22px / 20px tier). The non-variable cut catches small tracking targets that the variable file rounds.
311
+
312
+ ### Hierarchy
313
+
314
+ | Token | Size | Weight | Line Height | Letter Spacing | Use |
315
+ |---|---|---|---|---|---|
316
+ | `{typography.display-xxl}` | 110px | 500 | 0.85 | -5.5px | Largest hero headline (home, AI page) |
317
+ | `{typography.display-xl}` | 85px | 500 | 0.95 | -4.25px | Section opener headlines |
318
+ | `{typography.display-lg}` | 62px | 500 | 1.00 | -3.1px | Sub-section openers |
319
+ | `{typography.display-md}` | 32px | 500 | 1.13 | -1.0px | Card titles, smaller display |
320
+ | `{typography.headline}` | 22px | 700 | 1.20 | -0.8px | Pricing tier headlines, FAQ category titles |
321
+ | `{typography.subhead}` | 24px | 400 | 1.30 | -0.01px | Lead body next to display headlines |
322
+ | `{typography.body-lg}` | 18px | 400 | 1.30 | -0.18px | Hero subhead, lead paragraphs |
323
+ | `{typography.body}` | 15px | 400 | 1.30 | -0.15px | Default body, card descriptions |
324
+ | `{typography.body-sm}` | 14px | 500 | 1.40 | -0.14px | Pricing comparison rows, dense data |
325
+ | `{typography.caption}` | 13px | 500 | 1.20 | -0.13px | Eyebrows, footer columns, meta |
326
+ | `{typography.micro}` | 12px | 400 | 1.20 | -0.12px | Disclaimer, footnote |
327
+ | `{typography.button}` | 14px | 500 | 1.0 | -0.14px | Pill buttons |
328
+
329
+ ### Principles
330
+
331
+ - **Letter-spacing scales with size, hard.** Display-xxl pulls -5.5px (5% of size); body sticks to about -1% (-0.15px on 15px). The result: posters at the top, comfortable reading at body.
332
+ - **OpenType character variants are the brand voice.** Switching off `cv11`, `ss03`, etc. visibly changes the body voice — the brand depends on them.
333
+ - **Weight stays in a narrow band.** Display sits at 500, body at 400, body-sm/caption at 500. Hierarchy is carried by size + tracking, not by 700/900 ramps.
334
+ - **Tight line-heights everywhere.** Even body runs at 1.30 — Framer's editorial tone is denser than typical SaaS marketing.
335
+
336
+ ### Note on Font Substitutes
337
+
338
+ If implementing without GT Walsheim Medium, suitable open-source substitutes include **Mona Sans**, **Geist**, or **Inter** at weight 600–700 with manually tightened tracking. Mona Sans's hairline weights at 100–300 are particularly close to Framer's cleaner section openers. Inter Variable is open-source — keep it as-is and preserve the documented OpenType variants.
339
+
340
+ ## Layout
341
+
342
+ ### Spacing System
343
+
344
+ - **Base unit**: 5px (Framer uses non-standard 5/10/15/20/30 increments rather than the more common 4/8/16/24).
345
+ - **Tokens (front matter)**: `{spacing.hair}` 1px · `{spacing.xxs}` 4px · `{spacing.xs}` 8px · `{spacing.sm}` 12px · `{spacing.md}` 15px · `{spacing.lg}` 20px · `{spacing.xl}` 30px · `{spacing.xxl}` 40px · `{spacing.section}` 96px.
346
+ - Card interior padding: `{spacing.lg}` 20px on pricing cards; `{spacing.xl}` 30px on gradient spotlight cards.
347
+ - Pill button padding: 10px vertical · 15px horizontal — `{components.button-primary}`.
348
+ - Section padding (vertical): roughly `{spacing.section}` 96px on home; tighter (~64px) on pricing comparison.
349
+
350
+ ### Grid & Container
351
+
352
+ - Max content width sits around the 1199px breakpoint, with side gutters that scale toward `{spacing.xl}` on desktop.
353
+ - Card grids on the home gallery use 2-up at desktop, collapsing to 1-up below 810px.
354
+ - Pricing tier grid is 4-up across the documented breakpoints; comparison table beneath it uses fixed-width left column with horizontally scrolling tier columns at narrow widths.
355
+
356
+ ### Whitespace Philosophy
357
+
358
+ The dark canvas IS the whitespace. Where lighter brands lean on white air to separate sections, Framer leans on long stretches of black with a single oversized statement floating in the middle. Sections separate by mode change: a band of charcoal cards, then a band of black with a gradient spotlight, then back to charcoal — like cuts in a dark film.
359
+
360
+ ## Elevation & Depth
361
+
362
+ | Level | Treatment | Use |
363
+ |---|---|---|
364
+ | 0 (flat) | No shadow, no border | Default for canvas-mounted display type, FAQ rows, footer |
365
+ | 1 (charcoal) | `{colors.surface-1}` lift on canvas | Pricing cards, mockup tiles, secondary buttons |
366
+ | 2 (light-edge) | `rgba(255,255,255,0.10)` 0.5px top edge + `rgba(0,0,0,0.25)` 0px 10px 30px drop | Floating product cards, modal cards |
367
+ | 3 (selected) | `rgba(0,153,255,0.15)` 0px 0px 0px 1px ring | Focused inputs, selected option |
368
+
369
+ Four shadow signatures recur across the homepage: a 1px subtle drop, a translucent blue ring, a thick near-black 2px outline (used as the active-element marker on sub-nav), and the layered light-edge + drop-shadow used for floating cards.
370
+
371
+ ### Decorative Depth
372
+
373
+ - **Gradient spotlight cards** are the dominant depth device — color saturation against black canvas substitutes for shadow-driven elevation.
374
+ - **Layered product mockups** (browser frames containing live Framer-built sites) sit inside `{colors.surface-1}` cards with the level-2 light-edge treatment.
375
+ - **Subtle blue ring (focus / selected)** is the only chromatic depth signal — used to mark the active state of input groups and pricing tier toggles without changing the underlying surface.
376
+
377
+ ## Shapes
378
+
379
+ ### Border Radius Scale
380
+
381
+ Framer's extracted radius set is unusually granular (1px, 4px, 5px, 6px, 8px, 10px, 12px, 15px, 20px, 30px, 40px, 100px). The named scale below picks the levels the marketing surface actually consumes.
382
+
383
+ | Token | Value | Use |
384
+ |---|---|---|
385
+ | `{rounded.xs}` | 4px | Small chip / utility radius |
386
+ | `{rounded.sm}` | 6px | Inline tag, badge |
387
+ | `{rounded.md}` | 10px | Form input, list item |
388
+ | `{rounded.lg}` | 15px | Template card thumbnails |
389
+ | `{rounded.xl}` | 20px | Pricing cards, mockup tiles |
390
+ | `{rounded.xxl}` | 30px | Gradient spotlight cards, oversized panels |
391
+ | `{rounded.pill}` | 100px | All primary text CTAs |
392
+ | `{rounded.full}` | 9999px | Circular icon buttons, avatar circles |
393
+
394
+ ### Photography & Illustration Geometry
395
+
396
+ - Embedded site mockups (browser-chromed previews of Framer-built sites) sit in `{rounded.xl}` 20px tiles with `{spacing.md}` 15px interior padding.
397
+ - Gradient spotlight cards use `{rounded.xxl}` 30px corners — softer than the 20px content cards by design, to make them feel like atmospheric panels rather than tighter UI.
398
+ - Icon glyphs and sub-nav glyphs render in `{rounded.full}` circles at 32–40px sizes.
399
+
400
+ ## Components
401
+
402
+ ### Buttons
403
+
404
+ **`button-primary`** — White pill on dark canvas. The primary CTA across home, pricing, AI, and gallery pages.
405
+ - Background `{colors.primary}`, text `{colors.on-primary}`, type `{typography.button}`, padding 10px 15px, rounded `{rounded.pill}`.
406
+ - Pressed state lives in `button-primary-pressed` (the live site uses a transform-scale shrink rather than a darkened fill).
407
+
408
+ **`button-secondary`** — Charcoal pill. Used for secondary navigation actions ("Sign in", "Talk to sales") and as the visual counterpart to the primary pill.
409
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.button}`, padding 10px 15px, rounded `{rounded.pill}`.
410
+
411
+ **`button-translucent`** — Translucent / lifted secondary used on top of busy backgrounds (gallery hero, gradient cards).
412
+ - Background `{colors.surface-2}`, text `{colors.ink}`, type `{typography.button}`, rounded `{rounded.xxl}`, padding 8px 14px.
413
+
414
+ **`button-icon-circular`** — 40px circle for inline icon actions (carousel arrows, social links).
415
+ - Background `{colors.surface-1}`, text `{colors.ink}`, rounded `{rounded.full}`, size 40px.
416
+
417
+ ### Pricing Tabs
418
+
419
+ **`pricing-tab-default`** + **`pricing-tab-selected`** — The pill-toggle that switches between Basic / Pro / Business / Enterprise on `/pricing`.
420
+ - Default: `{colors.canvas}` background, `{colors.ink-muted}` text, rounded `{rounded.pill}`.
421
+ - Selected: `{colors.surface-2}` background, `{colors.ink}` text — selected = lift, not color. Surface depth communicates "active" without needing a chromatic fill.
422
+
423
+ ### Inputs & Forms
424
+
425
+ **`text-input`** + **`text-input-focused`** — Form fields on `/pricing` (seat-count, currency switcher) and the in-product preview surfaces.
426
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.md}`, padding 10px 14px.
427
+ - Focused state retains the same surface; the focus ring is the level-3 blue-tinted shadow `rgba(0,153,255,0.15)` 0 0 0 1px.
428
+
429
+ ### Cards & Containers
430
+
431
+ **`pricing-card`** — Each tier on `/pricing`.
432
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.xl}`, padding 24px.
433
+
434
+ **`pricing-card-featured`** — The Pro tier (visually emphasized).
435
+ - Background `{colors.surface-2}`, otherwise identical structure. The lift is one surface step up — no chromatic outline.
436
+
437
+ **`template-card`** — Thumbnail tile in the home "Built with Framer" gallery and `/marketplace`.
438
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body-sm}`, rounded `{rounded.lg}`, padding 12px.
439
+
440
+ **`product-mockup-tile`** — Larger tile that frames a live product UI mock (Framer canvas, Workshop video, AI translate panel).
441
+ - Background `{colors.surface-1}`, text `{colors.ink}`, type `{typography.body-sm}`, rounded `{rounded.xl}`, padding 16px.
442
+
443
+ ### Gradient Spotlight Cards (signature)
444
+
445
+ The defining decorative surface of Framer's marketing — oversized atmospheric tiles dropped into otherwise monochrome card grids. Variants:
446
+
447
+ **`gradient-spotlight-card`** — violet ground (most common).
448
+ - Background `{colors.gradient-violet}`, text `{colors.ink}`, type `{typography.subhead}`, rounded `{rounded.xl}`, padding 32px. (The on-site card often pushes to `{rounded.xxl}` 30px when it spans a wider tile.)
449
+
450
+ **`gradient-spotlight-card-magenta`** — magenta-pink ground.
451
+ - Background `{colors.gradient-magenta}`, otherwise identical.
452
+
453
+ **`gradient-spotlight-card-orange`** — sunset-orange wash.
454
+ - Background `{colors.gradient-orange}`, otherwise identical.
455
+
456
+ (Coral pink follows the same shape with `{colors.gradient-coral}`.)
457
+
458
+ ### Comparison & FAQ
459
+
460
+ **`feature-row`** + **`comparison-row`** — Single rows inside the pricing comparison table.
461
+ - `feature-row`: `{colors.canvas}` background, `{colors.ink}` text. Header rows.
462
+ - `comparison-row`: `{colors.canvas}` background, `{colors.ink-muted}` text. Data rows with `{typography.body-sm}` and 1px `{colors.hairline-soft}` underlines.
463
+
464
+ **`faq-row`** — Each accordion line in the pricing-page FAQ.
465
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body}`, rounded `{rounded.md}`, padding 24px.
466
+
467
+ ### Navigation
468
+
469
+ **`top-nav`** — Sticky bar on `{colors.canvas}` with the Framer wordmark left, primary nav links centered, and a `button-secondary` ("Sign in") + `button-primary` ("Get started for free") pair right.
470
+ - Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body-sm}`, height 56px.
471
+ - Mobile: collapses primary links into a hamburger; the two pill CTAs collapse into a single primary pill on the bar.
472
+
473
+ ### Footer
474
+
475
+ **`footer`** — Dense link grid on `{colors.canvas}` with the Framer wordmark left and 5–6 columns of caption-sized links.
476
+ - Background `{colors.canvas}`, text `{colors.ink-muted}`, type `{typography.caption}`, padding 64px 32px.
477
+
478
+ ## Do's and Don'ts
479
+
480
+ ### Do
481
+
482
+ - Reserve `{colors.primary}` (white) and `{colors.canvas}` (near-black) as the system's two anchor surfaces. Every band of the page chooses one or the other.
483
+ - Push display-size letter-spacing aggressively negative — `{typography.display-xxl}` at -5.5px is the brand signature, not a stylistic accident.
484
+ - Use `{colors.accent-blue}` only for hyperlinks, focus rings, and selected indicators. Never as a background or button fill.
485
+ - Drop one or two `gradient-spotlight-card` variants into a card grid; they are the brand's atmosphere device. Don't overdo it — three or more in the same viewport reads as a moodboard, not a system.
486
+ - Compose every CTA as a pill (`{rounded.pill}`); secondary actions live as charcoal pills, never as bordered ghost buttons.
487
+ - Keep body type Inter Variable with character variants `cv01`, `cv05`, `cv09`, `cv11`, `ss03`, `ss07` enabled — the brand voice depends on them.
488
+ - Use surface lift (canvas → surface-1 → surface-2) to mark hierarchy on dark, not opacity changes on white type.
489
+
490
+ ### Don't
491
+
492
+ - Don't ship a light-mode marketing page. Framer's identity is dark.
493
+ - Don't introduce mid-tone gray text outside `{colors.ink-muted}`. The hierarchy is binary: `ink` or `ink-muted`.
494
+ - Don't use `{colors.accent-blue}` as a brand fill (e.g., a blue CTA pill). The blue is a signal color, not a surface.
495
+ - Don't square off CTAs. Pill (`{rounded.pill}`) or full circle is the brand vocabulary.
496
+ - Don't reduce the negative letter-spacing on display sizes "for accessibility". The compression is intrinsic to the brand voice; reduce the SIZE if needed, but keep the percentage.
497
+ - Don't apply gradient backgrounds to whole sections. Gradients are CARDS, not section grounds.
498
+ - Don't combine more than one chromatic accent. The palette is monochrome plus one blue plus the gradient family — not "blue, green, and red".
499
+
500
+ ## Responsive Behavior
501
+
502
+ ### Breakpoints
503
+
504
+ | Name | Width | Key Changes |
505
+ |---|---|---|
506
+ | Desktop | 1199px | Default desktop layout |
507
+ | Tablet | 810px | Card grids collapse 4-up → 2-up; nav becomes hamburger |
508
+ | Mobile-Lg | 809px | Pricing comparison table becomes per-tier accordion |
509
+ | Mobile-XS | 98px | Smallest documented breakpoint — single-column everything |
510
+
511
+ ### Touch Targets
512
+
513
+ - Pill buttons (`button-primary`, `button-secondary`) maintain a minimum 44px tap height across all viewports — combine `{typography.button}` 14px line-height with the documented 10px vertical padding.
514
+ - Circular icon buttons (`button-icon-circular`) are 40px on desktop and grow to 44px on touch viewports.
515
+ - Pricing-tab pills hold ≥40px tap height; below 810px they may collapse into a horizontal-scroll row instead of stacking.
516
+
517
+ ### Collapsing Strategy
518
+
519
+ - **Nav**: horizontal nav with a centered link group + right-anchored pill pair collapses to a hamburger overlay below 810px. The `button-primary` stays visible on the bar.
520
+ - **Card grids**: the gallery and template-card grids go 2-up on desktop → 1-up on mobile. Gradient spotlight cards retain `{rounded.xxl}` corners at every viewport — they don't bleed.
521
+ - **Pricing comparison table**: collapses into per-tier accordions below 810px to avoid horizontal scroll.
522
+ - **Display type**: `{typography.display-xxl}` 110px scales down toward `{typography.display-lg}` 62px on tablet and `{typography.display-md}` 32px on mobile, preserving the percentage-negative letter-spacing.
523
+
524
+ ### Image Behavior
525
+
526
+ - Embedded product mockups (browser frames containing live Framer-built sites) maintain their aspect ratio and never crop.
527
+ - Gradient spotlight cards keep their gradient orientations across breakpoints — the gradient direction is part of the brand spec.
528
+
529
+ ## Iteration Guide
530
+
531
+ 1. Focus on ONE component at a time and reference it by its `components:` token name (e.g., `{components.button-primary}`, `{components.gradient-spotlight-card}`).
532
+ 2. When introducing a new section on the dark canvas, decide first which surface lift it lives on — `{colors.canvas}` for hero/FAQ, `{colors.surface-1}` for cards, `{colors.surface-2}` for featured cards. The depth choice is the most consequential decision.
533
+ 3. Default body to `{typography.body}` with all the documented OpenType variants; reach for `{typography.subhead}` only inside spotlight cards.
534
+ 4. Run `npx @google/design.md lint DESIGN.md` after edits — `broken-ref`, `contrast-ratio`, and `orphaned-tokens` warnings flag issues automatically.
535
+ 5. Add new variants as separate component entries (`-pressed`, `-featured`, `-selected`) — do not bury them in prose.
536
+ 6. Treat `{colors.accent-blue}` as a single-shot signal color: hyperlinks, focus, and selection — that's it. If you find yourself reaching for a second blue, the brand is drifting.
537
+ 7. Gradient spotlight cards are scarce by design. One or two per long page is the spec; three is a moodboard.
538
+
539
+ ## Known Gaps
540
+
541
+ - The exact gradient stops for the spotlight cards are derived from screenshot pixels rather than from CSS variables — the production gradients are likely defined as `linear-gradient` strings on individual elements rather than as design tokens. Treat the documented `{colors.gradient-*}` hex values as base anchors, not as exact gradient specs.
542
+ - Form-field validation / error styling is not visible on the inspected pages because no error states render in the static screenshots.
543
+ - Dark mode is the only mode — no light-mode adaptation is documented because the marketing site does not ship one.
544
+ - The marketplace template detail page returned sparser CSS variable data than the other pages; surface tokens for that page were inferred from the matching home / gallery treatment rather than extracted directly.
@@ -0,0 +1,5 @@
1
+ # Framer Inspired Design System
2
+
3
+ Design system details have been moved to: https://getdesign.md/framer/design-md
4
+
5
+ You can also view previews, dark mode examples, and download options on getdesign.md.