prism-design 2.13.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 (90) hide show
  1. package/CHANGELOG.md +292 -0
  2. package/LICENSE +21 -0
  3. package/README.md +203 -0
  4. package/bin/clone-architect.mjs +476 -0
  5. package/bin/prism.mjs +467 -0
  6. package/catalog/index.json +1155 -0
  7. package/extractions/airbnb.com/DESIGN.md +1068 -0
  8. package/extractions/airbnb.com/tokens.json +507 -0
  9. package/extractions/attio.com/DESIGN.md +1295 -0
  10. package/extractions/attio.com/tokens.json +438 -0
  11. package/extractions/auroxdashboard.com/DESIGN.md +724 -0
  12. package/extractions/auroxdashboard.com/tokens.json +195 -0
  13. package/extractions/careerexplorer.com/DESIGN.md +1178 -0
  14. package/extractions/careerexplorer.com/tokens.json +141 -0
  15. package/extractions/chance.co/DESIGN.md +1209 -0
  16. package/extractions/chance.co/tokens.json +160 -0
  17. package/extractions/choisis-ton-avenir.com/DESIGN.md +1265 -0
  18. package/extractions/choisis-ton-avenir.com/tokens.json +227 -0
  19. package/extractions/example.com/DESIGN.md +436 -0
  20. package/extractions/example.com/tokens.json +91 -0
  21. package/extractions/getdesign.md/DESIGN.md +1009 -0
  22. package/extractions/getdesign.md/tokens.json +219 -0
  23. package/extractions/github.com/DESIGN.md +1130 -0
  24. package/extractions/github.com/tokens.json +2092 -0
  25. package/extractions/hello-charly.com/DESIGN.md +1146 -0
  26. package/extractions/hello-charly.com/tokens.json +322 -0
  27. package/extractions/hyperliquid.xyz/DESIGN.md +779 -0
  28. package/extractions/hyperliquid.xyz/tokens.json +598 -0
  29. package/extractions/instagram.com/DESIGN.md +996 -0
  30. package/extractions/instagram.com/tokens.json +1240 -0
  31. package/extractions/jobirl.com/DESIGN.md +1160 -0
  32. package/extractions/jobirl.com/tokens.json +139 -0
  33. package/extractions/life360.com/DESIGN.md +1133 -0
  34. package/extractions/life360.com/tokens.json +491 -0
  35. package/extractions/lifesum.com/DESIGN.md +965 -0
  36. package/extractions/lifesum.com/tokens.json +170 -0
  37. package/extractions/linear.app/DESIGN.md +1301 -0
  38. package/extractions/linear.app/tokens.json +732 -0
  39. package/extractions/mavoie.org/DESIGN.md +1148 -0
  40. package/extractions/mavoie.org/tokens.json +128 -0
  41. package/extractions/miro.com/DESIGN.md +1237 -0
  42. package/extractions/miro.com/tokens.json +401 -0
  43. package/extractions/notion.so/DESIGN.md +1319 -0
  44. package/extractions/notion.so/tokens.json +906 -0
  45. package/extractions/onetonline.org/DESIGN.md +909 -0
  46. package/extractions/onetonline.org/tokens.json +280 -0
  47. package/extractions/posthog.com/DESIGN.md +1024 -0
  48. package/extractions/posthog.com/tokens.json +197 -0
  49. package/extractions/revolut.com/DESIGN.md +1080 -0
  50. package/extractions/revolut.com/tokens.json +401 -0
  51. package/extractions/stripe.com/DESIGN.md +1272 -0
  52. package/extractions/stripe.com/tokens.json +794 -0
  53. package/extractions/switchcollective.com/DESIGN.md +1040 -0
  54. package/extractions/switchcollective.com/tokens.json +98 -0
  55. package/extractions/truity.com/DESIGN.md +970 -0
  56. package/extractions/truity.com/tokens.json +166 -0
  57. package/extractions/uniquekicks.be/DESIGN.md +1171 -0
  58. package/extractions/uniquekicks.be/tokens.json +237 -0
  59. package/package.json +122 -0
  60. package/scripts/analyze.ts +281 -0
  61. package/scripts/bank-register.ts +379 -0
  62. package/scripts/bank.ts +374 -0
  63. package/scripts/browser-stealth.ts +189 -0
  64. package/scripts/clone.ts +198 -0
  65. package/scripts/compare-vs-gd-final.ts +273 -0
  66. package/scripts/compare-vs-gd.ts +269 -0
  67. package/scripts/compare.ts +405 -0
  68. package/scripts/deploy-site.ts +181 -0
  69. package/scripts/diff-snapshots.ts +340 -0
  70. package/scripts/enrich-catalog.ts +212 -0
  71. package/scripts/extract.ts +2038 -0
  72. package/scripts/extractors/advanced.ts +524 -0
  73. package/scripts/extractors/widgets.ts +711 -0
  74. package/scripts/generate-design-md.ts +5775 -0
  75. package/scripts/generate-final-pdf.ts +274 -0
  76. package/scripts/generate-og-image.ts +87 -0
  77. package/scripts/generate-showcase.ts +1588 -0
  78. package/scripts/generate-site.ts +847 -0
  79. package/scripts/mass-extract.sh +91 -0
  80. package/scripts/post-process-all.sh +55 -0
  81. package/scripts/regen-catalog.ts +203 -0
  82. package/scripts/shared/cache.ts +149 -0
  83. package/scripts/shared/css-helpers.ts +263 -0
  84. package/scripts/shared/logger.ts +57 -0
  85. package/scripts/shared/named-colors.ts +355 -0
  86. package/scripts/shared/types.ts +220 -0
  87. package/scripts/sync-catalog.ts +105 -0
  88. package/scripts/tokenize.ts +988 -0
  89. package/templates/layout-template.md +52 -0
  90. package/templates/tokens-template.json +34 -0
@@ -0,0 +1,965 @@
1
+ ---
2
+ version: alpha
3
+ name: lifesum.com
4
+ description: "Light product system built on #ffffff with #21ba3a as the primary CTA accent. Type anchored in TTNormsPro at 64px / weight 700. Extracted automatically from https://lifesum.com/ — rendered styles via getComputedStyle() + CSS custom properties (token-only values may not be painted)."
5
+ narrative: |
6
+ lifesum.com is built on a pure-white canvas (rgb(255,255,255)).
7
+ The system uses rgb(33, 186, 58) as the high-saturation accent for primary actions.
8
+ Sharp 0px corners on CTAs — architectural restraint, engineering precision alongside TTNormsPro as the primary typeface.
9
+ TTNormsPro is paired with Roboto for secondary roles.
10
+ A restrained elevation system (2 distinct shadows) — shadows reserved for the few elements that must lift off the page.
11
+ Motion is a first-class concern — 27 keyframe animations plus transition-driven interactions.
12
+
13
+ colors:
14
+ background: "#ffffff"
15
+ surface-1: "#ffffff"
16
+ surface-2: "rgba(255, 255, 255, 0)"
17
+ ink: "#0e0e0e"
18
+ ink-muted: "rgba(14, 14, 14, 0.65)"
19
+ ink-subtle: "#5c5c5c"
20
+ primary: "#21ba3a"
21
+ on-primary: "#111111"
22
+ primary-hover: "#3caae6"
23
+ hairline: "#363636"
24
+ primary-focus: "#ffffff"
25
+ semantic-warning: "#f24e41"
26
+
27
+ typography:
28
+ display-xl:
29
+ fontFamily: "TTNormsPro"
30
+ fontSize: 64px
31
+ fontWeight: 700
32
+ lineHeight: 1.18
33
+ letterSpacing: -0.4px
34
+ display-md:
35
+ fontFamily: "TTNormsPro"
36
+ fontSize: 17px
37
+ fontWeight: 600
38
+ lineHeight: 1.58
39
+ letterSpacing: 1.36px
40
+ headline:
41
+ fontFamily: "TTNormsPro"
42
+ fontSize: 24px
43
+ fontWeight: 600
44
+ lineHeight: 1.35
45
+ letterSpacing: 0
46
+ body:
47
+ fontFamily: "TTNormsPro"
48
+ fontSize: 20px
49
+ fontWeight: 400
50
+ lineHeight: 1.35
51
+ letterSpacing: 0
52
+ button:
53
+ fontFamily: "TTNormsPro"
54
+ fontSize: 15px
55
+ fontWeight: 400
56
+ lineHeight: 1.5
57
+ letterSpacing: 0.1px
58
+
59
+ rounded:
60
+ none: 0px
61
+ xs: 8px
62
+ sm: 8px
63
+ md: 8px
64
+ lg: 8px
65
+ xl: 40px
66
+ pill: 9999px
67
+
68
+ spacing:
69
+ xxs: 2px
70
+ xs: 12px
71
+ sm: 20px
72
+ md: 28px
73
+ lg: 24px
74
+ xl: 32px
75
+ xxl: 64px
76
+ section: 80px
77
+
78
+ components:
79
+ button-primary-brand:
80
+ backgroundColor: "{colors.primary}"
81
+ textColor: "{colors.primary-focus}"
82
+ typography: "{typography.button}"
83
+ rounded: "{rounded.xs}"
84
+ padding: 16px 32px
85
+ navigation-main-nav:
86
+ backgroundColor: "{colors.surface-2}"
87
+ typography: "{typography.body}"
88
+ rounded: "{rounded.none}"
89
+ padding: 0px 12px
90
+
91
+ extracted_at: "2026-05-31T04:14:32.335Z"
92
+ completeness: 59
93
+ scoreVersion: "v2"
94
+
95
+ ---
96
+
97
+ # Design System — lifesum.com
98
+ > Extracted automatically by Prism from https://lifesum.com
99
+ > Date: 2026-05-31
100
+ > Viewport: Desktop 1440x900 + Mobile 390x844
101
+ > Values are extracted, not hand-written: rendered styles via getComputedStyle() + colors declared in CSS custom properties (token-only values are marked `(token)` and may not be painted).
102
+
103
+ > **🤖 TL;DR for AI agents** (read this first — saves you scanning the full doc):
104
+ >
105
+ > - **Canvas**: `rgb(255,255,255)` is the page background. Every component composits against this.
106
+ > - **Accent**: `rgb(33, 186, 58)` for primary CTAs ONLY. Never decorative.
107
+ > - **Body type**: 20px (token: `typography.body`). Default for ALL text not in a heading role.
108
+ > - **Section rhythm**: 48px between major bands. Card padding: 24px.
109
+ > - **Default radius**: 8px on buttons/inputs. Pills (`9999px`) only for icon-buttons or status chips.
110
+ >
111
+ > **Before generating UI**: import this DESIGN.md, scan §2 (Color Palette) + §4 (Components) + §10 (Agent Guide). Skip §11–12 unless extending.
112
+
113
+ ## 1. Visual Theme & Atmosphere
114
+
115
+ lifesum.com uses a pure-white canvas (`#ffffff`), letting typography, color and imagery carry the visual weight.
116
+
117
+ Typography is anchored in **TTNormsPro**. Headlines use weight 700 for confident, assertive presence — the brand wants to be heard. Negative letter-spacing at display sizes (-0.4px at 64px) compresses headlines into engineered blocks, dense and precise.
118
+
119
+ Body text reads in Jet Black (`#0e0e0e`) — softened from pure black, a small but deliberate detail that lowers reading friction. **Success Green** (`#21ba3a`) is the single high-saturation color in the system — it earns its presence only on interactive elements, making CTAs and links the unmistakable focal points against the otherwise neutral palette. Elevation is built from multi-layer shadow stacks — each level combines several blurred layers at varying offsets to simulate how light falls on stacked surfaces.
120
+ Motion design uses smooth easing curves for polished state transitions.
121
+
122
+ **Key Characteristics:**
123
+ - Background: Pure White (`#ffffff`)
124
+ - Primary typeface: TTNormsPro
125
+ - Primary text: Jet Black (`#0e0e0e`)
126
+ - Accent: Success Green (`#21ba3a`)
127
+ - Display: 64px weight 700, letter-spacing -0.4px
128
+ - Shadow system: 2 distinct elevation levels
129
+ - Custom fonts loaded: TTNormsPro, QuincyCF-Regular
130
+
131
+ ## 2. Color Palette & Roles
132
+
133
+ ### Background & Surface
134
+ - **Pure White** (`#ffffff`): Page background (primary)
135
+ - **Beige** (`#f5ebe1`): Surface / elevated background
136
+ - **Transparent** (`transparent`): Surface / elevated background
137
+ - **Warm Cream** (`#faf5f0`): Surface / elevated background
138
+ - **#d9d9d9** (`#d9d9d9`): Surface / elevated background
139
+
140
+ ### Text & Content
141
+ - **Jet Black** (`#0e0e0e`): Primary body text
142
+ - **Pure Black** (`#000000`): Secondary text
143
+ - **Charcoal** (`#363636`): Secondary text
144
+ - **#0000ee** (`#0000ee`): Secondary text
145
+ - **Jet Black** (`#141414`): Secondary text
146
+
147
+ ### Accent & Interactive
148
+ - **Success Green** (`#21ba3a`): Interactive / accent
149
+
150
+ ### Full Extracted Palette
151
+ **12 colors rendered on the page** + **15** more declared in design tokens (CSS custom properties — not necessarily painted). (11 categorized above + 16 additional below.)
152
+ Rendered values are read via `getComputedStyle()`; token values come from CSS variable declarations. Third-party logo colors are filtered out.
153
+
154
+ - `#5c5c5c` — Dim Gray
155
+ - `#767676` — Stone
156
+ - `#ebf2ff` — Light Gray *(token)*
157
+ - `#3caae6` — #3caae6 *(token)*
158
+ - `#f0f0f0` — Light Gray *(token)*
159
+ - `#d84a8a` — #d84a8a *(token)*
160
+ - `#37b97d` — Emerald *(token)*
161
+ - `#f59132` — Coral *(token)*
162
+ - `#ef4235` — Vermillion *(token)*
163
+ - `#e9e2db` — Light Gray *(token)*
164
+ - `#fafaf5` — Off-Cream *(token)*
165
+ - `#dbdbdb` — #dbdbdb *(token)*
166
+ - `#8278c8` — Amethyst *(token)*
167
+ - `#f24e41` — Vermillion *(token)*
168
+ - `#e1f7ed` — Light Gray *(token)*
169
+ - `#b1b1b1` — Cool Gray *(token)*
170
+
171
+ ### CSS Custom Properties (Design Tokens)
172
+
173
+ **Shadow Token**
174
+ - `--tw-ring-offset-shadow`: `0 0 #0000`
175
+ - `--tw-ring-shadow`: `0 0 #0000`
176
+ - `--tw-drop-shadow`: ``
177
+ - `--tw-shadow`: `0 0 #0000`
178
+
179
+ **Spacing Token**
180
+ - `--tw-numeric-spacing`: ``
181
+ - `--tw-border-spacing-x`: `0`
182
+ - `--tw-border-spacing-y`: `0`
183
+
184
+ **Other tokens**
185
+ - `--color--BgInfo`: `#ebf2ff`
186
+ - `--color--AccentBlue`: `#3caae6`
187
+ - `--color--BorderSub`: `#f0f0f0`
188
+ - `--color--AccentMagenta`: `#d84a8a`
189
+ - `--tw-ring-color`: `#3b82f680`
190
+ - `--color--Type`: `#0e0e0e`
191
+ - `--color--BrandDark`: `#37b97d`
192
+ - `--tw-ring-offset-color`: `#fff`
193
+
194
+ ## 3. Typography Rules
195
+
196
+ ### Font Families
197
+ - **Primary**: `TTNormsPro`
198
+ - **Secondary**: `QuincyCF-Regular`
199
+
200
+ ### Custom Fonts Loaded
201
+ - **TTNormsPro** weight 400 (normal)
202
+ - **TTNormsPro** weight 600 (normal)
203
+ - **TTNormsPro** weight 700 (normal)
204
+ - **QuincyCF-Regular** weight 400 (normal)
205
+
206
+ ### Typography Hierarchy
207
+
208
+ | Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
209
+ |------|------|------|--------|-------------|----------------|-------|
210
+ | Display Hero | TTNormsPro | 64px | 700 | 1.18 | -0.4px | Main headline (h1) |
211
+ | Label Heading | TTNormsPro | 24px | 600 | 1.35 | normal | Small heading (H4) |
212
+ | Body | TTNormsPro | 20px | 400 | 1.35 | normal | Standard reading text |
213
+ | Sub-heading | TTNormsPro | 17px | 600 | 1.58 | 1.36px | Third-level heading (h3) |
214
+ | Button | TTNormsPro | 15px | 400 | 1.5 | 0.1px | Button label (15px) |
215
+ | Button | TTNormsPro | 14px | 600 | 1.35 | normal | Button label (14px) |
216
+
217
+ ### Full Font Size Scale
218
+
219
+ Sizes detected in the design (descending): `64px`, `56px`, `32px`, `24px`, `20px`, `17px`, `15px`, `14px`
220
+
221
+ > 2 size(s) detected outside the sampled hierarchy (56px, 32px). These appear on elements not in the sampled set — likely additional display sizes, marketing-section overrides, or third-party-widget styles.
222
+
223
+ ## 4. Component Stylings
224
+
225
+ ### Buttons
226
+
227
+ **Primary Brand**
228
+ - Background: `#21ba3a` `{colors.primary}`
229
+ - Text: `#ffffff` `{colors.primary-focus}`
230
+ - Padding: 16px 32px
231
+ - Radius: 8px
232
+ - Shadow: `rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(159, 13...`
233
+ - Font: 14px weight 600
234
+ - Use: Primary CTA / brand action
235
+ - Hover: color: `#fdfdfd`, borderColor: `#e6e6e6`, outline: `rgb(253, 253, 253) none 3px`
236
+ - Focus: borderColor: `rgba(230, 230, 230, 0.008)`
237
+
238
+ ### Navigation
239
+
240
+ **Main Nav**
241
+ - Background: `transparent` `{colors.surface-2}`
242
+ - Padding: 0px 12px
243
+ - Radius: none
244
+ - Font: 20px weight 400
245
+ - Use: Static block nav — N/A items
246
+ - Hover: borderColor: `transparent`
247
+
248
+
249
+ ## 4b. Component Behaviors (State Matrix)
250
+
251
+ ### Interaction State Narrative
252
+
253
+ - **Button**:
254
+ - **hover:** text #ffffff → #fdfdfd
255
+
256
+ *State transitions extracted via Playwright simulation — exact values in the YAML matrix below.*
257
+
258
+ ```yaml
259
+ component-behaviors:
260
+ button:
261
+ default:
262
+ bg: "rgba(0, 0, 0, 0)"
263
+ fg: "rgb(255, 255, 255)"
264
+ hover:
265
+ bg: "rgba(0, 0, 0, 0)"
266
+ fg: "rgb(253, 253, 253)"
267
+ focus:
268
+ bg: "rgba(0, 0, 0, 0)"
269
+ fg: "rgb(255, 255, 255)"
270
+ link:
271
+ default:
272
+ bg: "rgba(0, 0, 0, 0)"
273
+ fg: "rgb(255, 255, 255)"
274
+ hover:
275
+ bg: "rgba(0, 0, 0, 0)"
276
+ fg: "rgb(255, 255, 255)"
277
+ navLink:
278
+ default:
279
+ bg: "rgba(0, 0, 0, 0)"
280
+ fg: "rgb(255, 255, 255)"
281
+ hover:
282
+ bg: "rgba(0, 0, 0, 0)"
283
+ fg: "rgb(255, 255, 255)"
284
+ footerLink:
285
+ default:
286
+ bg: "rgba(0, 0, 0, 0)"
287
+ fg: "rgb(0, 0, 238)"
288
+ hover:
289
+ bg: "rgba(0, 0, 0, 0)"
290
+ fg: "rgb(0, 0, 238)"
291
+ ```
292
+
293
+ **Agent usage**: Validate generated components against this matrix. If your output's `:hover` state changes properties not listed here, you are off-brand.
294
+
295
+
296
+ ## 4c. Component Vocabulary (Closed System)
297
+
298
+ *This brand uses ONLY the following component vocabulary. Introducing new variants without justification breaks the system's tonal coherence.*
299
+
300
+ ### Buttons
301
+ - **1 shape(s)** in this system: `Primary Brand`
302
+ - **DO NOT introduce new buttons variants** without justification
303
+
304
+ ### Navigation
305
+ - **1 shape(s)** in this system: `Main Nav`
306
+ - **DO NOT introduce new navigation variants** without justification
307
+
308
+ ## 5. Layout Principles
309
+
310
+ ### Layout Type
311
+ **top-nav + content**
312
+
313
+ ### Grid
314
+ Single column, centered content
315
+
316
+ ### Max Width
317
+ 1200px
318
+
319
+ ### Spacing System
320
+ Compact spacing — information density prioritized
321
+
322
+ | Token | Value |
323
+ |-------|-------|
324
+ | xxs | 2px |
325
+ | xs | 12px |
326
+ | sm | 20px |
327
+ | md | 28px |
328
+ | base | 16px |
329
+ | lg | 24px |
330
+ | xl | 32px |
331
+ | 2xl | 48px |
332
+ | 3xl | 64px |
333
+
334
+ ### Border Radius Scale
335
+ | Name | Value | Use |
336
+ |------|-------|-----|
337
+ | None | 0px | No rounding |
338
+ | Xs | 8px | Tiny corners (badges, micro elements) |
339
+ | Sm | 8px | Buttons, inputs, small elements |
340
+ | Md | 8px | Cards, containers |
341
+ | Lg | 8px | Large rounded elements, pill segments |
342
+ | Xl | 40px | Category strips, featured containers |
343
+ | Full | 9999px | Pills, avatars, circular elements |
344
+
345
+ ### Shape Language
346
+
347
+ | Component | Border Radius |
348
+ |-----------|---------------|
349
+ | Buttons | `8px` |
350
+ | Navigation | `none` |
351
+ | Page Body | `0px` |
352
+
353
+ **Shape Personality**: Moderate Rounding — Medium corners (4–12px). Modern SaaS standard, neither sharp nor pill.
354
+
355
+ **Full Radius Spectrum**: 8px, 40px (from `allBorderRadii` scan)
356
+
357
+
358
+ ## 5b. Spacing Rhythm Names
359
+
360
+ **Measured section rhythm**: bands use ~76px vertical padding (up to 96px) — **generous**. Reproduce this generous vertical breathing room; cramped spacing is the #1 tell of a cheap clone.
361
+
362
+ *Named spacing tokens with explicit use cases. Use these names in YOUR code instead of raw pixels for consistency.*
363
+
364
+ | Name | Value | Use case |
365
+ |------|-------|----------|
366
+ | **hero** | `64px` | Top/bottom of full-bleed hero sections |
367
+ | **section** | `32px` | Between major bands (color change, content shift) |
368
+ | **subsection** | `24px` | Within a section, between content groups |
369
+ | **card** | `28px` | Card padding, list-item spacing |
370
+ | **compact** | `20px` | Form fields, tight clusters, badge padding |
371
+ | **micro** | `12px` | Icon-text gap, tag inner padding |
372
+
373
+ **Agent rule**: NEVER hardcode raw pixel values for spacing in generated UI. Always reference these named tokens (`spacing-rhythm.section`, etc.).
374
+
375
+ ## 5c. Widget & Structure Library
376
+
377
+ Structural patterns extracted from the page DOM — these are the **blueprints** an agent should follow to reproduce the page architecture (not just CSS values).
378
+
379
+ **5/8 structural patterns detected.**
380
+
381
+ ### Hero Pattern
382
+
383
+ - **Composition:** background-pattern — Background pattern/gradient — decorative background fills the section, content overlaid on top.
384
+ - **Viewport coverage:** full-viewport hero (≥70% screen height)
385
+ - **Heading:** "Une alimentation saine. En toute simplicité." — 64px left-aligned
386
+ - **Subheading:** "La nutrition est la clé d’un poids santé, d’une meilleure humeur, d’un sommeil réparateur et d'une espérance de vie plus longue."
387
+ - **CTAs:** 2 (primary: "Télécharger")
388
+ - **Clone instruction:** Reproduce the **background-pattern** layout. Use the heading font-size token at the documented size. No imagery needed for hero — text-driven.
389
+
390
+ ### Navigation Pattern
391
+
392
+ - **Position:** static (scrolls with page)
393
+ - **Layout:** unknown — Layout not classified
394
+ - **Height:** 46px
395
+ - **Logo:** ✗ absent
396
+ - **Nav links:** 2 primary items
397
+ - **CTAs in nav:** 1
398
+ - **Clone instruction:** Build a static unknown navigation. Reserve 1 slot for primary CTA.
399
+
400
+ ### Card Grid Pattern
401
+
402
+ - **Card count:** 5 cards detected
403
+ - **Columns (desktop):** 1-up grid
404
+ - **Card dimensions:** 1280×778px (aspect 1.64:1)
405
+ - **Gap:** 188px between cards
406
+ - **Content:** ✓ image
407
+ - **Image position:** top
408
+ - **Clone instruction:** Build a 1-column grid (desktop) with cards at ~1.64:1 aspect ratio. Each card has an image at the top.
409
+
410
+ ### Testimonial Pattern
411
+
412
+ - **Count:** 3 testimonial blocks
413
+ - **Layout:** list
414
+ - **Avg quote length:** 331 chars (long-form story)
415
+ - **Includes:** ✗ no avatars | ✗ no logos | ✗ no ratings
416
+ - **Clone instruction:** Build a list of 3 testimonials.
417
+
418
+ ### Footer Pattern
419
+
420
+ - **Columns:** 3
421
+ - **Links:** 16 total
422
+ - **Height:** 619px
423
+ - **Includes:** ✗ no newsletter | ✓ social icons |
424
+ - **Clone instruction:** Build a 3-column footer with ~5 links per column, social media links.
425
+
426
+ ## 6. Depth & Elevation
427
+
428
+ | Level | Treatment | Use |
429
+ |-------|-----------|-----|
430
+ | Flat (Level 0) | No shadow | Page background, content blocks |
431
+ | Layered (Level 1) | <br>`rgba(0, 0, 0, 0) 0px 0px 0px 0px`,<br>`rgba(0, 0, 0, 0) 0px 0px 0px 0px`,<br>`rgba(159, 138, 119, 0.2) 0px 0px 8px 0px` | Cards, elevated surfaces |
432
+ | Layered (Level 2) | <br>`rgba(0, 0, 0, 0.15) 0px 4px 16px 0px` | Cards, elevated surfaces |
433
+
434
+ **Shadow Philosophy**: Multi-layered shadow system creating natural, atmospheric depth. Each shadow level combines multiple layers for realistic elevation.
435
+
436
+ ## 7. Motion & Interaction
437
+
438
+ ### Dominant Easing Curves
439
+
440
+ | Curve | Semantic Name |
441
+ |-------|---------------|
442
+ | `ease-in` | Ease In — Accelerating |
443
+ | `ease` | CSS ease — Default |
444
+
445
+ ### Duration Scale
446
+
447
+ | Value | Tier | Typical Use |
448
+ |-------|------|-------------|
449
+ | `200ms` | Normal | Panel open/close, navigation |
450
+ | `300ms` | Normal | Panel open/close, navigation |
451
+
452
+ ### Copy-Paste Transition Snippets
453
+
454
+ **Opacity**
455
+ ```css
456
+ transition: opacity 0.3s ease-in, border-radius 0.2s ease-in;
457
+ ```
458
+
459
+ **Opacity**
460
+ ```css
461
+ transition: opacity 0.3s, transform 0.3s;
462
+ ```
463
+
464
+ **All Props**
465
+ ```css
466
+ transition: 0.2s ease-in;
467
+ ```
468
+
469
+ ### Keyframe Animation Catalog
470
+
471
+ | Animation Name | Type | Animated Props | Use Hint |
472
+ |----------------|------|----------------|----------|
473
+ | `fade-in` | Fade + Move | opacity, transform | Element entrance |
474
+ | `pulse-check` | Scale | transform, box-shadow | Attention / status |
475
+ | `confetti-slow` | Rotate / Spin | transform | UI transition |
476
+ | `confetti-medium` | Rotate / Spin | transform | UI transition |
477
+ | `confetti-fast` | Rotate / Spin | transform | UI transition |
478
+ | `confetti-fade` | Fade | opacity | UI transition |
479
+ | `move-pay-label-small` | Fade + Move | margin-top, opacity, transform | UI transition |
480
+ | `move-pay-label` | Fade + Move | margin-top, opacity, transform | UI transition |
481
+ | `pulse-radio` | Scale | transform, box-shadow | Attention / status |
482
+ | `fade-out` | Fade | opacity | Element exit |
483
+ | `draw-line` | Custom | width | UI transition |
484
+ | `move-label` | Fade + Move | margin-top, opacity, transform | UI transition |
485
+ | `levitate` | Slide | transform | UI transition |
486
+ | `levitate-shadow` | Fade + Move | opacity, transform | UI transition |
487
+ | `slideshow-from-left-to-top` | Scale | transform, z-index | UI transition |
488
+ | `slideshow-from-right-to-top` | Scale | transform, z-index | UI transition |
489
+ | `slideshow-from-top-to-left` | Scale | transform, z-index | UI transition |
490
+ | `slideshow-from-top-to-right` | Scale | transform, z-index | UI transition |
491
+ | `slideshow-left-to-right` | Scale | transform | UI transition |
492
+ | `slideshow-right-to-left` | Scale | transform | UI transition |
493
+
494
+ > *7 additional animations omitted (repetitive variants). See raw keyframes in `raw-css.json`.*
495
+
496
+ ### Motion Fingerprint
497
+
498
+ - **Speed Character**: Deliberate & Calm (median duration: `300ms`)
499
+ - **Dominant Easing**: custom cubic-bezier curves
500
+ - **Animation Library**: 27 unique animations (27 total including variants)
501
+
502
+ > This design moves with deliberate & calm timing using custom cubic-bezier curves, creating a UI that feels calm and controlled.
503
+
504
+ ## 8. Do's and Don'ts
505
+
506
+ ### Do
507
+ - Use Jet Black (`#0e0e0e`) for text — not pure black, it's warmer and more readable
508
+ - Use TTNormsPro as the primary typeface — it defines the brand personality
509
+ - Use negative letter-spacing (-0.4px) at display sizes for compressed, editorial headlines
510
+ - Use the extracted shadow patterns for elevation — they are tuned to match the brand palette
511
+ - Use Success Green (`#21ba3a`) as the primary accent — it's the brand's signature interactive color
512
+ - Use 8px border-radius on buttons — the standard corner rounding for interactive elements
513
+ - Maintain nav height at 46.3438px — consistent vertical space for the navigation bar
514
+ - Make the hero full-viewport (≥70% screen height) — this design uses an immersive hero, not a tall navbar
515
+ - Include exactly 2 CTAs in the hero (primary + secondary) — this design pattern is multi-action, not single-purpose
516
+ - Each card includes a top image — imagery is part of the card identity, not optional
517
+
518
+ ### Don't
519
+ - Don't use pure black (`#000000`) for text — the near-black adds warmth
520
+ - Don't substitute with generic sans-serif or serif — the custom font carries the brand
521
+ - Don't increase letter-spacing on headings — the type is designed to run tight at scale
522
+ - Don't invent new shadow values — use only the extracted shadow levels
523
+ - Don't introduce additional saturated accent colors — the palette is intentionally controlled
524
+ - Don't collapse or hide the nav on scroll without an explicit scroll-triggered animation — the design uses fixed nav presence
525
+ - Don't make the nav sticky — this design lets it scroll away to maximize content focus
526
+
527
+
528
+ ## 7b. Enforceable Brand Rules
529
+
530
+ *Structured Do/Don't with reasoning and validation tests. Agents can programmatically verify generated UI.*
531
+
532
+ ```yaml
533
+ rules:
534
+ - id: brand-canvas-001
535
+ type: do
536
+ rule: "Always use the page background `rgb(255,255,255)` as the base canvas"
537
+ why: "Every component is designed to composit against this exact tone"
538
+ test: "document.body.style.backgroundColor === 'rgb(255,255,255)'"
539
+ - id: brand-accent-001
540
+ type: do
541
+ rule: "Reserve `rgb(33, 186, 58)` for primary CTAs and brand-mark signals only"
542
+ why: "Single chromatic assertion device — overuse dilutes meaning"
543
+ test: "querySelectorAll('[style*=\"rgb(33, 186, 58)\"]').length <= 3 per fold"
544
+ ```
545
+
546
+ ## 9. Responsive Behavior
547
+
548
+ ### Breakpoints
549
+ | Name | Width | Key Changes |
550
+ |------|-------|-------------|
551
+ | Mobile | 350px | Single column, compact spacing |
552
+ | Mobile | 451px | Single column, compact spacing |
553
+ | Mobile Large | 599px | Expanded mobile layout |
554
+ | Tablet | 999px | Multi-column grids begin |
555
+ | Desktop | 1280px | Full feature layout |
556
+ | Large Desktop | 1399px | Maximum content width |
557
+
558
+ ### Token Diff — Desktop vs Mobile
559
+
560
+ | Element | Property | Desktop | Mobile |
561
+ |---------|----------|---------|--------|
562
+ | heading | font-size | `64px` | `48px` |
563
+ | heading | line-height | `75.2px` | `56.4px` |
564
+ | body | font-size | `20px` | `17px` |
565
+ | body | line-height | `27px` | `22.95px` |
566
+ | nav | padding | `0px 12px` | `0px` |
567
+ | nav | height | `46.3438px` | `27.9688px` |
568
+ | button | font-size | `20px` | `17px` |
569
+ | button | width | `40px` | `35px` |
570
+
571
+ ### Collapsing Strategy
572
+ - Headlines: 64px → 48px on mobile
573
+ - Navigation: horizontal links → hamburger menu on mobile
574
+ - Cards: multi-column → stacked vertical on mobile
575
+ - Footer: multi-column → stacked single column on mobile
576
+
577
+ ### Touch Targets
578
+ - Buttons: 0px padding
579
+ - Navigation: adequate spacing between items
580
+ - Interactive elements: minimum 44px touch target recommended
581
+
582
+ ### Collapsing Narrative
583
+
584
+ How the structural patterns adapt from desktop to mobile (extracted from both viewport extractions):
585
+
586
+ - **Hero CTAs:** 2 on desktop → 1 on mobile (secondary CTAs dropped on small screens).
587
+ - **Navigation collapses to hamburger** — 2 links visible on desktop, 0 on mobile (the rest hide behind a menu toggle).
588
+ - **Nav CTAs reduced** on mobile (1 → 0) — the design prioritizes content over conversion buttons at small sizes.
589
+ - **Footer columns collapse:** 3 columns (desktop) → 2 columns (mobile).
590
+
591
+
592
+ ## 7c. Visual Effects & Dynamic Behavior
593
+
594
+ *The live/dynamic layer beyond static CSS — reproduce these, not flat substitutes. This is often what separates a faithful clone from a wireframe.*
595
+
596
+ - **Clip-path shapes** — 1 non-rectangular cut(s).
597
+
598
+ > **Motion fingerprint**: non-rectangular shapes (1)
599
+
600
+ ## 9b. Visual Tone & Photography
601
+
602
+ **Tone:** Mixed photography + illustration
603
+
604
+ A balanced mix of photographic content and vector graphics. Photos likely carry product/lifestyle context while SVG handles icons, logos, and decorative accents.
605
+
606
+ **Hero Image (above-fold dominant visual):**
607
+ - Aspect: 0.83:1 (portrait / vertical)
608
+ - Rendered size: 610×735px
609
+ - *Use this aspect ratio + composition for your clone's hero — mimicking the proportion preserves the visual hierarchy.*
610
+
611
+ **Aspect Ratio Distribution:**
612
+ - Landscape (1.15–2.3): 3 (19%)
613
+ - Portrait (<0.87): 7 (44%)
614
+ - Square (0.87–1.15): 2 (13%)
615
+ - Ultra-wide (>2.3): 4 (25%)
616
+
617
+ **Media Format Mix:**
618
+ - JPG: 1 (typically photographic content)
619
+ - PNG: 13 (logos, transparent UI elements, mockups)
620
+ - SVG: 4 (icons, illustrations, decorative geometry)
621
+
622
+ **Average rendered image size:** 508×457px
623
+ **Above-fold image count:** 1 / 16
624
+
625
+ **Decorative Patterns Detected:**
626
+ - 2 large decorative SVG shapes (≥200×200px, non-icon) — likely blob/illustration accents
627
+
628
+ **Clone instruction for decorative work:** Decorative details are subtle — don't over-style; the design relies on restraint.
629
+
630
+ **Imagery Guidance for clones:**
631
+ - Mix photography and illustration intentionally: photos for product/context, vectors for icons + decorative accents.
632
+ - Respect the format split — replacing JPGs with illustrations (or vice versa) will shift the brand tone.
633
+
634
+ ## 10. Agent Prompt Guide
635
+
636
+ ### Quick Reference
637
+ - Background: Pure White (`#ffffff`)
638
+ - Primary text: Jet Black (`#0e0e0e`)
639
+ - Accent: Success Green (`#21ba3a`)
640
+ - Border: Charcoal (`#363636`)
641
+ - Font: TTNormsPro
642
+ - Body: 20px weight 400
643
+
644
+ ### Example Component Prompts
645
+ - "Create a hero section on Pure White background (#ffffff). Headline at 64px TTNormsPro weight 700, line-height 1.18, letter-spacing -0.4px, color #0e0e0e."
646
+ - "Create the primary CTA button: `#21ba3a` background, `#ffffff` text, 8px border-radius, 16px 32px padding, 600 weight, TTNormsPro font."
647
+ - "Build navigation: static on `#ffffff`. TTNormsPro 20px weight 400 for links."
648
+
649
+ ### Iteration Guide
650
+ 1. **Canvas**: Set the light canvas to Pure White (`#ffffff`) — every component is composited against this exact base.
651
+ 2. **Typography**: All type in TTNormsPro, weight range 400–700. Never exceed 700 — heavier weights break the brand's tonal restraint.
652
+ 3. **Accent**: Success Green (`#21ba3a`) is the sole interactive color. On hover → #3caae6 (`#3caae6`). Use CSS transitions, not opacity/brightness filters.
653
+ 4. **Shape**: CTAs at `0px`. Apply border-radius from the extracted scale only — don't invent intermediate values.
654
+ 5. **Spacing**: Use the `--ca-space-*` token scale (12px–32px). All padding, margin, and gap values are multiples from this scale — no magic numbers.
655
+ 6. **Tokens**: Import from §11 CSS Export (`--ca-*` vars). Never hardcode hex values — always reference a token so theming remains consistent.
656
+
657
+ ## 11. CSS Design Tokens Raw Export
658
+
659
+ *Copy-paste ready `:root {}` block — all values extracted directly from the live site.*
660
+
661
+ ```css
662
+ /* Colors */
663
+ :root {
664
+ --ca-primary-focus: #ffffff;
665
+ --ca-surface-2: transparent;
666
+ --ca-ink-muted: #0e0e0e;
667
+ --ca-ink-subtle: #5c5c5c;
668
+ --ca-primary: #21ba3a;
669
+ --ca-on-primary: #111111;
670
+ --ca-primary-hover: #3caae6;
671
+ --ca-hairline: #363636;
672
+ --ca-semantic-warning: #f24e41;
673
+ }
674
+
675
+ /* Typography */
676
+ :root {
677
+ --ca-font-primary: "TTNormsPro", system-ui, sans-serif;
678
+ --ca-text-display: 64px;
679
+ --ca-text-body: 20px;
680
+ --ca-text-button: 15px;
681
+ }
682
+
683
+ /* Spacing & Radius */
684
+ :root {
685
+ --ca-space-xxs: 2px;
686
+ --ca-space-xs: 12px;
687
+ --ca-space-sm: 20px;
688
+ --ca-space-md: 28px;
689
+ --ca-space-base: 16px;
690
+ --ca-space-lg: 24px;
691
+ --ca-space-xl: 32px;
692
+ --ca-space-2xl: 48px;
693
+ --ca-space-3xl: 64px;
694
+ --ca-radius-none: 0px;
695
+ --ca-radius-xs: 8px;
696
+ --ca-radius-sm: 8px;
697
+ --ca-radius-md: 8px;
698
+ --ca-radius-lg: 8px;
699
+ --ca-radius-xl: 40px;
700
+ --ca-radius-full: 9999px;
701
+ }
702
+ ```
703
+
704
+
705
+ ## 13. Page Structure Skeleton
706
+
707
+ *The actual layout the source site uses. Reproduce these sections in order to match the site structure.*
708
+
709
+ ```yaml
710
+ page-skeleton:
711
+ - section: hero
712
+ tag: div
713
+ height: 12428px
714
+ width: full-bleed
715
+ layout: block
716
+ children: 1
717
+ tone: dark
718
+ contains: chart/canvas (reproduce as live data-viz, not a flat image)
719
+ - section: hero
720
+ tag: div
721
+ classes: ["page-home-hero-background", "min-h-[92vh]", "bg-cover", "pt-24"]
722
+ height: 720px
723
+ width: full-bleed
724
+ layout: block
725
+ children: 2
726
+ bg-treatment: image
727
+ tone: dark
728
+ contains: chart/canvas (reproduce as live data-viz, not a flat image)
729
+ padding: "36px 0px 0px"
730
+ - section: content-section
731
+ tag: div
732
+ classes: ["px-16", "pb-24", "md:px-64", "lg:px-80"]
733
+ height: 902px
734
+ width: full-bleed
735
+ layout: block
736
+ children: 1
737
+ tone: dark
738
+ vertical-padding: ~60px (generous)
739
+ contains: chart/canvas (reproduce as live data-viz, not a flat image)
740
+ padding: "96px 80px 24px"
741
+ - section: unknown
742
+ tag: div
743
+ classes: ["px-16", "pb-24", "md:px-64", "lg:px-80"]
744
+ height: 329px
745
+ width: full-bleed
746
+ layout: block
747
+ children: 1
748
+ tone: dark
749
+ vertical-padding: ~96px (airy)
750
+ contains: chart/canvas (reproduce as live data-viz, not a flat image)
751
+ padding: "128px 80px 64px"
752
+ - section: unknown
753
+ tag: hgroup
754
+ height: 207px
755
+ width: 896px
756
+ layout: block
757
+ children: 2
758
+ tone: dark
759
+ - section: gallery-grid
760
+ tag: li
761
+ classes: ["relative", "mb-80", "grid", "grid-cols-8"]
762
+ height: 691px
763
+ width: 1280px
764
+ layout: grid: 8-col gap=60px
765
+ children: 3
766
+ tone: dark
767
+ - section: gallery-grid
768
+ tag: li
769
+ classes: ["relative", "mb-80", "grid", "grid-cols-8"]
770
+ height: 876px
771
+ width: 1280px
772
+ layout: grid: 8-col gap=60px
773
+ children: 3
774
+ tone: dark
775
+ - section: gallery-grid
776
+ tag: li
777
+ classes: ["relative", "mb-80", "grid", "grid-cols-8"]
778
+ height: 856px
779
+ width: 1280px
780
+ layout: grid: 8-col gap=60px
781
+ children: 3
782
+ tone: dark
783
+ - section: gallery-grid
784
+ tag: li
785
+ classes: ["relative", "mb-80", "grid", "grid-cols-8"]
786
+ height: 919px
787
+ width: 1280px
788
+ layout: grid: 8-col gap=60px
789
+ children: 3
790
+ tone: dark
791
+ - section: gallery-grid
792
+ tag: li
793
+ classes: ["relative", "mb-80", "grid", "grid-cols-8"]
794
+ height: 551px
795
+ width: 1280px
796
+ layout: grid: 8-col gap=60px
797
+ children: 4
798
+ tone: dark
799
+ - section: testimonials
800
+ tag: hgroup
801
+ height: 282px
802
+ width: 896px
803
+ layout: block
804
+ children: 2
805
+ tone: dark
806
+ - section: card-grid
807
+ tag: ul
808
+ classes: ["relative", "mb-80", "grid", "grid-cols-8"]
809
+ height: 2236px
810
+ width: 1280px
811
+ layout: grid: 8-col gap=60px
812
+ children: 3
813
+ tone: dark
814
+ - section: unknown
815
+ tag: div
816
+ classes: ["px-16", "pb-24", "md:px-64", "lg:px-80"]
817
+ height: 261px
818
+ width: full-bleed
819
+ layout: block
820
+ children: 1
821
+ tone: dark
822
+ padding: "0px 80px 24px"
823
+ - section: logo-strip
824
+ tag: section
825
+ classes: ["text-center"]
826
+ height: 109px
827
+ width: 1280px
828
+ layout: block
829
+ children: 2
830
+ tone: dark
831
+ - section: content-section
832
+ tag: div
833
+ classes: ["px-16", "pb-24", "md:px-64", "lg:px-80"]
834
+ height: 1228px
835
+ width: full-bleed
836
+ layout: block
837
+ children: 1
838
+ bg: "rgb(250, 245, 240)"
839
+ bg-treatment: image
840
+ vertical-padding: ~76px (generous)
841
+ padding: "128px 80px 24px"
842
+ - section: footer
843
+ tag: footer
844
+ classes: ["relative", "text-grey-darkest"]
845
+ height: 619px
846
+ width: full-bleed
847
+ layout: block
848
+ children: 1
849
+ tone: dark
850
+ vertical-padding: ~32px
851
+ contains: chart/canvas (reproduce as live data-viz, not a flat image)
852
+ ```
853
+
854
+ **Agent rule**: rebuild sections in this order (sorted by vertical position). Match the layout primitive (grid N-col / flex direction / block).
855
+
856
+
857
+ ## 14. Copy Library (Real Content from Source)
858
+
859
+ *Actual text content extracted from the live page. Use these strings verbatim when reproducing the site — they carry the brand voice.*
860
+
861
+ ```yaml
862
+ copy:
863
+ sub-headings:
864
+ - "TRAVAILLER CHEZ LIFESUM"
865
+ - "SE CONNECTER"
866
+ ctas:
867
+ - "Language:
868
+ FR"
869
+ - "OBTENEZ L'APPLI LIFESUM GRATUITE"
870
+ navigation:
871
+ - "Articles"
872
+ - "For Work"
873
+ - "TÉLÉCHARGER"
874
+ footer-links:
875
+ - "Lifesum.com start page"
876
+ - "Carrière"
877
+ - "Faites un don"
878
+ ```
879
+
880
+ **Agent rule**: reuse these exact strings when generating UI. Do NOT translate or rephrase — brand voice is preserved through the original wording.
881
+
882
+
883
+ ## 15. Asset Inventory (Image Roles & Ratios)
884
+
885
+ *Image inventory classified by role and aspect ratio. When reproducing the site, allocate this number of assets per role.*
886
+
887
+ ```yaml
888
+ assets:
889
+ logo:
890
+ count: 1
891
+ avg-ratio: 3.17
892
+ common-aspect: "~16:6 banner"
893
+ sample-alts:
894
+ - "Download on the App Store"
895
+ product:
896
+ count: 2
897
+ avg-ratio: 1.07
898
+ common-aspect: "~1:1 square"
899
+ ```
900
+
901
+ **Agent rule**: when generating placeholder images, match these counts and aspect ratios. Use neutral placeholder backgrounds for `product` (e.g. `#f5f5f5`), full-color photography hints for `hero` and `editorial`.
902
+
903
+
904
+ ## 16. Component HTML Templates
905
+
906
+ *Suggested HTML markup for reproducing the key components — based on what was detected in the source DOM.*
907
+
908
+ ### Button (primary action)
909
+ ```html
910
+ <button class="btn btn-primary">
911
+ Language:
912
+ FR
913
+ </button>
914
+ ```
915
+ _Source pattern detected: padding `0px` · radius `0px` · weight `400`_
916
+
917
+ **Agent rule**: use these markup skeletons as the structural baseline. Apply tokens from §2-3 for visual styling.
918
+
919
+
920
+ ## 12. Known Extraction Gaps
921
+
922
+ *Auto-detected limitations of this extraction — understand before building:*
923
+
924
+ - **Sparse component extraction** — fewer than 5 component types detected. Highly dynamic sections (modals, datepickers, carousels) require interaction to render and are not captured in a static pass.
925
+ - **1 parasitic shadow(s) detected** — colored box-shadows (not near-black) found in allShadows. These likely originate from browser extensions or third-party injected widgets (e.g. Grammarly, chat overlays), not from the site's own design system. Discard them when building.
926
+
927
+
928
+ ---
929
+ ## Extraction Completeness: 59/100 (D)
930
+
931
+ | Category | Score | Max | Detail |
932
+ |----------|-------|-----|--------|
933
+ | Colors & Palette | 15 | 25 | 11 named colors |
934
+ | Typography | 15 | 20 | 6 roles defined |
935
+ | Components | 8 | 20 | 2 specs extracted |
936
+ | Motion & Interaction | 12 | 15 | Keyframes present |
937
+ | CSS Custom Properties | 3 | 10 | 68 vars |
938
+ | Responsive Breakpoints | 5 | 5 | 6 breakpoints |
939
+ | Variable Fonts | 0 | 5 | None detected |
940
+
941
+ ## 12. Known Gaps & Confidence
942
+
943
+ Explicit list of what this extraction could NOT capture. Agents should not invent values for these — either skip the feature or use the documented baseline + heuristic fallback.
944
+
945
+ | Category | What's missing | Fallback strategy |
946
+ |----------|----------------|-------------------|
947
+ | **Form inputs** | No text input fields detected on this page | Use the documented border-radius + accent border on focus; 12-16px padding inside |
948
+
949
+ ### Per-section confidence
950
+
951
+ | Section | Confidence | Reason |
952
+ |---------|------------|--------|
953
+ | §1 Visual Theme | High | Body bg extracted via getComputedStyle() |
954
+ | §2 Colors | High | 68 CSS vars (semantic naming requires ≥20 for high) |
955
+ | §3 Typography | High | 6 typography roles inferred |
956
+ | §4 Components | Low | 2 component variants captured |
957
+ | §7 Motion | High | Keyframes + transitions |
958
+ | §8 Do's/Don'ts | High | 17 rules generated; design-decisions.json has evidence per rule |
959
+ | §9 Responsive | High | 6 breakpoints detected |
960
+ | §9b Photography | High | 16 images, hero present |
961
+
962
+ ---
963
+ *Generated by Prism — automated Playwright extraction + design analysis.*
964
+ *Source: https://lifesum.com | 2026-05-31T04:14:32.346Z*
965
+ *Values extracted via getComputedStyle() (rendered) + CSS custom properties (tokens, marked `(token)`). Token-only values may not be painted — verify against the live site before shipping.*