* feat(web): add brand design systems, card thumbnails, and DESIGN.md side-by-side preview - Add 7 new brand design systems (arc, canva, discord, duolingo, github, huggingface, openai) - Show live showcase HTML thumbnails on Design Systems cards - Add toggleable DESIGN.md side panel in preview modal with syntax-highlighted spec view - Make preview iframe responsive: render at fixed design viewport and scale to fit so opening the side panel never reflows showcases into broken breakpoints - Add floating collapse/expand handles on the sidebar boundary for direct hide/show Co-authored-by: Cursor <cursoragent@cursor.com> * fix(web): guard ResizeObserver and re-fire sidebar lazy-load on content swap - Guard `new ResizeObserver(...)` in PreviewModal so the modal mounts in jsdom (the existing preview-modal-fullscreen test was failing with `ReferenceError: ResizeObserver is not defined`) and in older embedded WebViews. Fall back to a window resize listener when the constructor is unavailable. - Add a `contentKey` hint to PreviewSidebar so the lazy-load `onToggle` callback re-fires when the underlying side-panel source swaps while the sidebar stays open. Wire `system.id` through from DesignSystemPreviewModal so swapping design systems with the spec panel open primes a fresh DESIGN.md fetch instead of leaving it stuck. Generated-By: looper 0.4.0 (runner=fixer, agent=claude-code) * fix(web/i18n): add missing ds/preview keys to hu locale The Validate workspace check failed after main's hu.ts landed without the four i18n keys introduced by this PR (ds.specToggle, ds.specLoading, preview.showSidebar, preview.hideSidebar). Generated-By: looper 0.4.0 (runner=fixer, agent=claude-code) --------- Co-authored-by: Cursor <cursoragent@cursor.com>
6.4 KiB
Design System Inspired by Canva
Category: Design & Creative Visual creation platform. Vivid purple-blue gradient, generous spacing, friendly geometry.
1. Visual Theme & Atmosphere
Canva is the friendly face of design tools — the brand makes a point of looking inviting where Adobe looks intimidating. The page is built on a clean white canvas (#ffffff) with a signature purple-to-blue gradient (#7d2ae8 → #00c4cc) used in the brand mark, hero buttons, and Pro/Magic moments. Surfaces are generously padded, edges are gently rounded (8–16px), and shadows are soft and cool-toned.
Typography uses Canva Sans (a custom geometric sans) for chrome and prose, with rounded letterforms that share DNA with brands like Airbnb and Asana. Weight contrast does the heavy lifting — 800 for hero display, 700 for section heads, 400 for body — while size hierarchy is more compressed than typical product brands so cards and templates read at a glance.
The shape system is ultra-soft: 12px on most cards, 16–20px on larger panels, 9999px on chips. Buttons are rectangles with a subtle elevation shadow (0 2px 8px rgba(0,0,0,0.06)) that grows on hover. Iconography is filled and rounded, never line-only — Canva's icons speak the same shape language as its UI.
Key Characteristics:
- White canvas with a violet-to-cyan gradient (
#7d2ae8→#00c4cc) - Canva Sans (rounded geometric) for everything; weight contrast over color
- 12–20px radii everywhere; 9999px pills for chips and tags
- Soft cool-toned shadows that grow on hover
- Filled rounded iconography — never outlined
- Vibrant secondary palette (coral, mint, tangerine) for category tags
- Pro/Magic moments lit by a static gradient — no animation
2. Color Palette & Roles
Brand Gradient
- Canva Purple (
#7d2ae8): Brand primary; gradient origin. - Canva Cyan (
#00c4cc): Brand secondary; gradient terminus. - Canva Pink (
#ff5757): Tertiary brand accent (Magic Studio).
Surface
- Canvas (
#ffffff): Primary background. - Surface Subtle (
#f4f5f7): Section break, sidebar. - Surface Inset (
#e8eaed): Disabled, inset block. - Surface Cool (
#eef0fc): Hover tint on purple-themed cards.
Ink & Text
- Ink Primary (
#0e1318): Primary text. - Ink Secondary (
#3c4043): Body prose. - Ink Muted (
#5f6368): Captions, descriptions. - Ink Faint (
#9aa0a6): Placeholder, disabled label.
Semantic
- Success (
#00b894): Saved, exported. - Warning (
#ffb020): Storage limit, advisory. - Error (
#ff5757): Validation, destructive. - Info (
#0d99ff): Tip, link.
Category Accents (Template Tags)
- Coral (
#ff7059): Social posts. - Tangerine (
#ff9633): Marketing. - Mint (
#48c997): Education. - Sky (
#3ea6ff): Business. - Lavender (
#9b87f5): Personal.
Border
- Border Default (
#e1e3e6): Standard hairline. - Border Strong (
#c7cdd3): Emphasized border, hover state.
3. Typography Rules
Font Family
- Display / UI / Body:
Canva Sans, with fallback:'YS Text', system-ui, -apple-system, sans-serif - Editorial (rare):
Canva Sans Display, with fallback:'Canva Sans', sans-serif - Code (devtools only):
JetBrains Mono, with fallback:ui-monospace, Menlo, Consolas, monospace
Hierarchy
| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|---|---|---|---|---|---|---|
| Hero | Canva Sans | 64px (4rem) | 800 | 1.05 | -0.02em | Marketing hero, "Design anything." |
| H1 | Canva Sans | 36px (2.25rem) | 700 | 1.15 | -0.01em | Page heading |
| H2 | Canva Sans | 24px (1.5rem) | 700 | 1.2 | -0.005em | Section heading |
| H3 | Canva Sans | 18px (1.125rem) | 600 | 1.3 | normal | Sub-section, card title |
| Body Large | Canva Sans | 16px (1rem) | 400 | 1.55 | normal | Lede, marketing body |
| Body | Canva Sans | 14px (0.875rem) | 400 | 1.5 | normal | Standard UI prose |
| Caption | Canva Sans | 12px (0.75rem) | 500 | 1.4 | 0.005em | Metadata, hint text |
| Button | Canva Sans | 14px (0.875rem) | 600 | 1.2 | normal | Default button label |
| Tag | Canva Sans | 11px (0.6875rem) | 600 | 1.2 | 0.04em | Uppercase category chip |
Principles
- Weight contrast over color contrast: hierarchy steps via 800→700→600→400; the surface stays neutral.
- Tight line-height for cards: card titles use 1.15–1.2 so a 3-line title still fits a 4:3 thumbnail.
- No display serif: Canva is sans-only across all surfaces; serifs appear only as user-selectable template fonts inside the editor.
4. Component Stylings
Buttons
Primary (Gradient)
- Background:
linear-gradient(135deg, #7d2ae8, #00c4cc) - Text:
#ffffff - Padding: 12px 20px
- Radius: 8px
- Shadow:
0 2px 8px rgba(125, 42, 232, 0.2) - Hover: shadow grows to
0 4px 14px rgba(125, 42, 232, 0.3) - Use: hero CTAs, "Try Canva Pro"
Primary (Solid Purple)
- Background:
#7d2ae8 - Text:
#ffffff - Padding: 12px 20px
- Radius: 8px
- Hover:
#6815d4
Secondary
- Background:
#ffffff - Text:
#0e1318 - Border: 1px solid
#e1e3e6 - Radius: 8px
- Hover: background
#f4f5f7, border#c7cdd3
Subtle / Tertiary
- Background:
rgba(125, 42, 232, 0.08) - Text:
#7d2ae8 - Hover: background
rgba(125, 42, 232, 0.14)
Cards / Template Tiles
- Background:
#ffffff - Border: 1px solid
#e1e3e6 - Radius: 12px
- Shadow at rest:
0 1px 3px rgba(0,0,0,0.04) - Shadow on hover:
0 8px 24px rgba(0,0,0,0.08), lift 2px - Aspect ratio: thumbnail respects template (1:1, 4:3, 9:16)
Inputs
- Background:
#ffffff - Border: 1px solid
#e1e3e6 - Radius: 8px
- Padding: 10px 14px
- Focus: border
#7d2ae8, ring0 0 0 3px rgba(125, 42, 232, 0.16)
Chips / Tags
- Background: category-tinted soft.
- Text: matching strong category color.
- Padding: 4px 10px
- Radius: 9999px
- Font: 11px / 600 / uppercase
Pro Badge
- Background:
linear-gradient(135deg, #7d2ae8, #ff5757) - Text:
#ffffff - Padding: 2px 8px
- Radius: 9999px
- Font: 10px / 700 / uppercase
5. Spacing & Layout
- Base unit: 4px. Scale: 4, 8, 12, 16, 24, 32, 48, 64, 96.
- Container: max 1320px, 32px gutter.
- Sidebar (editor): 320px wide; collapses to 56px icons.
- Card grid gap: 16px on mobile, 24px on desktop.
6. Motion
- Duration: 180ms for hover; 280ms for menu open; 420ms for editor sidebar collapse.
- Easing:
cubic-bezier(0.4, 0, 0.2, 1)(Material-style). - Card lift: translateY(-2px) + shadow grow on hover, single transition.