ai · ecommerce · product-photography · saas · freemium · playful · warm · geometric · pill-cta

DESIGN.md inspired by Picoko

Warm-white canvas, weight-900 Outfit, and one blazing pink — product photography reimagined in seconds.

By webdesignhot · www.picoko.com
$ npx @webdesignhot/design-md add picoko
Learn more about the CLI
Compare to…
try on →
theme
1440 × 900
mobile · 390 × 844
Tokens webdesignhot/0.1
theme: light
  • bg #fbfaf8
  • bg-alt #f5f3f0
  • surface #ffffff
  • surface-soft #f9f8f6
  • surface-elevated #ffffff
  • text AAA · 18.1 #121110
  • text-strong #0a0909
  • text-muted #6b6663
  • text-soft #9c9793
  • text-faint — · 1.8 #c3bfbb
  • brand AA·LG · 3.6 #fe1c71
  • brand-deep #e5005c
  • brand-soft rgba(254, 28, 113, 0.10)
  • on-brand #ffffff
  • link #121110
  • link-hover #fe1c71
  • selected-bg rgba(254, 28, 113, 0.08)
  • disabled #c3bfbb
  • border — · 1.2 rgba(18, 17, 16, 0.08)
  • border-strong — · 1.4 rgba(18, 17, 16, 0.16)
  • border-subtle rgba(18, 17, 16, 0.04)
  • border-brand rgba(254, 28, 113, 0.30)
  • success-bg rgba(34, 197, 94, 0.10)
  • success-text #15803d
  • warning-bg rgba(234, 179, 8, 0.12)
  • warning-text #a16207
  • danger-bg rgba(239, 68, 68, 0.10)
  • danger-text #b91c1c
  • info-bg rgba(254, 28, 113, 0.08)
  • info-text #c0004e
theme: dark
  • bg #0d0c0b
  • bg-alt #171614
  • surface #1f1e1c
  • surface-soft #272523
  • surface-elevated #2e2c2a
  • text AAA · 17.8 #f5f4f2
  • text-strong #ffffff
  • text-muted #9c9793
  • text-soft #6b6663
  • text-faint — · 1.8 #3d3b39
  • brand AA · 5.2 #fe1c71
  • brand-deep #e5005c
  • brand-soft rgba(254, 28, 113, 0.15)
  • on-brand #ffffff
  • link #f5f4f2
  • link-hover #fe1c71
  • selected-bg rgba(254, 28, 113, 0.12)
  • disabled #3d3b39
  • border — · 1.2 rgba(245, 244, 242, 0.08)
  • border-strong — · 1.5 rgba(245, 244, 242, 0.16)
  • border-subtle rgba(245, 244, 242, 0.04)
  • border-brand rgba(254, 28, 113, 0.40)
  • success-bg rgba(34, 197, 94, 0.12)
  • success-text #86efac
  • warning-bg rgba(234, 179, 8, 0.12)
  • warning-text #fde047
  • danger-bg rgba(239, 68, 68, 0.12)
  • danger-text #fca5a5
  • info-bg rgba(254, 28, 113, 0.10)
  • info-text #ff7aad
Typography
Ship faster than ever.
display-hero "Outfit" 72px w900 -0.03em
Ship faster than ever.
display-lg "Outfit" 56px w800 -0.025em
Ship faster than ever.
h1 "Outfit" 48px w800 -0.02em
Built for teams that ship.
h2 "Outfit" 36px w700 -0.015em
A complete kit
h3 "Outfit" 28px w700 -0.01em
The quick brown fox jumps over the lazy dog.
h4 "Outfit" 22px w600 -0.005em
The quick brown fox jumps over the lazy dog.
h5 "Outfit" 18px w600 0
The quick brown fox jumps over the lazy dog.
body-large "Outfit" 18px w400 0
The quick brown fox jumps over the lazy dog.
body "Outfit" 16px w400 0
The quick brown fox jumps over the lazy dog.
body-medium "Outfit" 16px w500 0
The quick brown fox jumps over the lazy dog.
body-small "Outfit" 14px w400 0
OUR DESIGN SYSTEM
label "Outfit" 13px w500 0
npx @webdesignhot/design-md add stripe
code ui-monospace 13px w400 0
The quick brown fox jumps over the lazy dog.
eyebrow "Outfit" 12px w600 0.1em
OUR DESIGN SYSTEM
caption "Outfit" 12px w500 0.02em
OUR DESIGN SYSTEM
caption-tabular ui-monospace 12px w500 0
Spacing
  • step-0 0px
  • step-1 4px
  • step-2 8px
  • step-3 12px
  • step-4 16px
  • step-5 24px
  • step-6 32px
  • step-7 48px
  • step-8 64px
  • step-9 96px
  • step-10 128px
  • step-11 160px
Radius
  • micro 2px
  • sm 4px
  • md 8px
  • lg 16px
  • card 16px
  • modal 16px
  • xl 24px
  • pill 32px
  • full 9999px
Components
Text link →
Card preview A complete kit — everything your product needs. Hero, pricing, FAQ, dashboard, docs — every layout your product needs.
New Stable v1.0
Design roles 7/8 mapped · webdesignhot/0.1

Maps the 8 canonical role names to this entry's actual tokens. Use these to plug the design into role-aware tools — shadcn/ui themes, role-aware Tailwind plugins, atelier-lint — without hard-coding token names.

  • background bg
  • foreground text
  • primary brand
  • primary-foreground on-brand
  • accent
  • muted text-muted
  • border border
  • ring border-strong
Lineage & influences

Picoko inherits the joyful-SaaS playbook that Luma, Framer, and early Linear refined: geometric sans at maximum weight, a single electric brand colour reserved entirely for primary actions, and a warm near-white canvas that reads approachable rather than corporate. The 32px pill CTA is the same shape language used across modern B2C SaaS (Notion, Pitch, Framer). Outfit as the type system — Google Fonts' rounded geometric grotesque — places Picoko closer to consumer fintech and lifestyle apps than to the austere design-tool register of Krea or Linear. The before-after image slider is lifted from photography and image-editing SaaS playbooks (Luminar, Canva). What Picoko rejects: dark canvases, monochrome restraint, editorial neutrality, and AI-tech purple gradients. It leans into warm, bright, and fast.

  • AI image-generation SaaS peer; similar single-accent discipline applied to opposite palette (dark → light)
  • Reference for AI image-generation brand positioning and before-after showcase patterns
  • Primary distribution platform for Picoko''s end-customers; Polaris design language informs e-commerce UI conventions
  • The display and body typeface — geometric grotesque with rounded stems; chosen for friendly-SaaS warmth at heavy weights
  • Modern playful-SaaS aesthetic reference — pill CTAs, warm canvas, heavy geometric sans, freemium conversion UX
  • Before-after image comparison interaction patterns; approachable creative-tool register for non-designer e-commerce sellers
Export 4 formats · paste-ready
Tailwind

theme.extend block for tailwind.config.js

tailwind.config.js
CSS variables

:root { --bg, --text, --brand, … } you can paste anywhere

design.css
DTCG JSON

W3C Design Tokens Community Group format

design.tokens.json
Figma Variables

Importable into Figma → Variables → Import

figma-variables.json
The file
---
name: Picoko
tagline: Warm-white canvas, weight-900 Outfit, and one blazing pink — product photography reimagined in seconds.
updated_at: 2026-05-28T23:37:00.340Z
published_at: 2026-05-28T23:37:00.340Z
author: webdesignhot
source_url: https://www.picoko.com
spec: webdesignhot/0.1
quality: curated
featured: false
categories: [ai, saas, ecommerce]
tags: [ai, ecommerce, product-photography, saas, freemium, playful, warm, geometric, pill-cta]
preview_swatch: ['#fbfaf8', '#fe1c71', '#121110']
related: [krea]
description: 'Picoko is an AI product-photography and video SaaS for e-commerce sellers — generate studio-quality product shots, on-model images, and background-edited scenes in seconds, ready for Shopify, Amazon, and TikTok Shop. The canvas is a warm near-white `#fbfaf8`; the single chromatic signature is a blazing hot-magenta-pink `#fe1c71`, used for every primary CTA. Display type is **Outfit** at 72px / weight 900 — unapologetically heavy, instantly joyful. Radii run from 8px on nav chips to 32px pill CTAs, landing the brand in a playful-yet-confident SaaS register. Picoko ships a light + dark theme toggle; the default probed surface is light. The product is a sibling brand in the WebDesignHot portfolio.'


# Canonical 8-role aliases (bg / text / brand / border / accent / muted / surface / danger).
# Maps role names to this entry's actual token names so role-aware
# downstream tools resolve `theme.background` → entry's `bg`, etc.
# Auto-generated by scripts/add-aliases.mjs — do not edit manually;
# regenerate after changing color token names.
aliases:
  background: bg
  foreground: text
  primary: brand
  primary-foreground: on-brand
  muted: text-muted
  border: border
  ring: border-strong
themes:
  default: light
  available: [light, dark]
  switch-via: 'Toggle button in the nav persists preference to localStorage; OS prefers-color-scheme is the initial fallback. data-theme attribute on <html> drives all CSS custom property swaps.'

colors:
  light:
    bg: '#fbfaf8'                  # warm near-white canvas — live-probed authoritative
    bg-alt: '#f5f3f0'              # slightly deeper warm-white for inset zones
    surface: '#ffffff'             # pure white cards on warm-white ground
    surface-soft: '#f9f8f6'        # feather-light panel surface
    surface-elevated: '#ffffff'    # raised popover / modal
    text: '#121110'                # near-black — live-probed
    text-strong: '#0a0909'         # deepest black for hero display
    text-muted: '#6b6663'          # warm mid-grey captions
    text-soft: '#9c9793'           # quiet helper labels
    text-faint: '#c3bfbb'          # disabled, placeholder echo
    brand: '#fe1c71'               # hot magenta-pink — live-probed; THE signature CTA colour
    brand-deep: '#e5005c'          # pressed / active state — ~12% darker
    brand-soft: 'rgba(254, 28, 113, 0.10)' # pink wash for badges, hover tints
    on-brand: '#ffffff'            # white text on pink CTA
    link: '#121110'                # inline links stay near-black in light mode
    link-hover: '#fe1c71'          # brand pink on hover
    selected-bg: 'rgba(254, 28, 113, 0.08)' # selected nav / filter chip
    disabled: '#c3bfbb'            # faint warm-grey disabled
    border: 'rgba(18, 17, 16, 0.08)'       # 8% near-black hairline — warm tinted
    border-strong: 'rgba(18, 17, 16, 0.16)'
    border-subtle: 'rgba(18, 17, 16, 0.04)'
    border-brand: 'rgba(254, 28, 113, 0.30)' # pink ring on focused inputs
    success-bg: 'rgba(34, 197, 94, 0.10)'
    success-text: '#15803d'
    warning-bg: 'rgba(234, 179, 8, 0.12)'
    warning-text: '#a16207'
    danger-bg: 'rgba(239, 68, 68, 0.10)'
    danger-text: '#b91c1c'
    info-bg: 'rgba(254, 28, 113, 0.08)'
    info-text: '#c0004e'

  dark:
    # Derived inversion — Picoko's dark mode was not deep-probed; these are principled
    # counterparts: near-black warm canvas, near-white text, same #fe1c71 brand pink.
    bg: '#0d0c0b'                  # near-black warm canvas (derived)
    bg-alt: '#171614'              # slightly lighter alternative ground
    surface: '#1f1e1c'             # warm-dark raised card
    surface-soft: '#272523'        # panel surface
    surface-elevated: '#2e2c2a'    # popover / modal
    text: '#f5f4f2'                # near-white on dark (derived)
    text-strong: '#ffffff'
    text-muted: '#9c9793'          # warm mid-grey
    text-soft: '#6b6663'
    text-faint: '#3d3b39'          # disabled
    brand: '#fe1c71'               # same hot pink — invariant across themes
    brand-deep: '#e5005c'
    brand-soft: 'rgba(254, 28, 113, 0.15)'
    on-brand: '#ffffff'
    link: '#f5f4f2'
    link-hover: '#fe1c71'
    selected-bg: 'rgba(254, 28, 113, 0.12)'
    disabled: '#3d3b39'
    border: 'rgba(245, 244, 242, 0.08)'
    border-strong: 'rgba(245, 244, 242, 0.16)'
    border-subtle: 'rgba(245, 244, 242, 0.04)'
    border-brand: 'rgba(254, 28, 113, 0.40)'
    success-bg: 'rgba(34, 197, 94, 0.12)'
    success-text: '#86efac'
    warning-bg: 'rgba(234, 179, 8, 0.12)'
    warning-text: '#fde047'
    danger-bg: 'rgba(239, 68, 68, 0.12)'
    danger-text: '#fca5a5'
    info-bg: 'rgba(254, 28, 113, 0.10)'
    info-text: '#ff7aad'

typography:
  display:
    family: '"Outfit", ui-sans-serif, system-ui, -apple-system, sans-serif'
    weights: [400, 500, 600, 700, 800, 900]
    opentype-features: ['kern', 'liga']
  body:
    family: '"Outfit", ui-sans-serif, system-ui, -apple-system, sans-serif'
    weights: [400, 500, 600]
    opentype-features: ['kern']
  mono:
    family: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace'
    weights: [400, 500]
    opentype-features: ['tnum', 'zero']
  scale:
    display-hero:    { size: 72, weight: 900, lineHeight: 1.0,  tracking: '-0.03em',  family: display, opentype: 'kern liga', notes: 'Hero h1 — live-probed 72px / 900; "Get studio-quality product photos in seconds"' }
    display-lg:      { size: 56, weight: 800, lineHeight: 1.05, tracking: '-0.025em', family: display, opentype: 'kern liga' }
    h1:              { size: 48, weight: 800, lineHeight: 1.08, tracking: '-0.02em',  family: display }
    h2:              { size: 36, weight: 700, lineHeight: 1.15, tracking: '-0.015em', family: display }
    h3:              { size: 28, weight: 700, lineHeight: 1.2,  tracking: '-0.01em',  family: display }
    h4:              { size: 22, weight: 600, lineHeight: 1.3,  tracking: '-0.005em', family: display }
    h5:              { size: 18, weight: 600, lineHeight: 1.35, tracking: '0',        family: display }
    eyebrow:         { size: 12, weight: 600, lineHeight: 1.4,  tracking: '0.1em',   family: display, transform: uppercase }
    body-large:      { size: 18, weight: 400, lineHeight: 1.6,  tracking: '0',        family: body }
    body:            { size: 16, weight: 400, lineHeight: 1.55, tracking: '0',        family: body }
    body-medium:     { size: 16, weight: 500, lineHeight: 1.5,  tracking: '0',        family: body, notes: 'UI body emphasis — nav links, card labels' }
    body-small:      { size: 14, weight: 400, lineHeight: 1.5,  tracking: '0',        family: body }
    label:           { size: 13, weight: 500, lineHeight: 1.4,  tracking: '0',        family: body }
    caption:         { size: 12, weight: 500, lineHeight: 1.4,  tracking: '0.02em',  family: body }
    caption-tabular: { size: 12, weight: 500, lineHeight: 1.4,  tracking: '0',        family: mono, opentype: 'tnum' }
    code:            { size: 13, weight: 400, lineHeight: 1.55, tracking: '0',        family: mono, opentype: 'tnum zero' }

radius:
  micro: 2
  sm: 4
  md: 8
  lg: 16
  xl: 24
  card: 16
  modal: 16
  pill: 32
  full: 9999

spacing:
  base: 4
  scale: [0, 4, 8, 12, 16, 24, 32, 48, 64, 96, 128, 160]

layout:
  page-width: 1280
  prose-width: 720
  site-gutter: 'clamp(20px, 4vw, 56px)'
  header-height: 64
  grid-columns: 12
  hero-layout: 'left headline + right before-after image panel; split ~55/45 on desktop'
  section-rhythm: '80-128px'

components:
  button-primary:
    background: '#fe1c71'
    text: '#ffffff'
    padding: '12px 28px'
    radius: 32
    border: 'none'
    font: 'Outfit 600 / 16px'
    hover-bg: '#e5005c'
    active-bg: '#cc0052'
    focus-ring: '0 0 0 3px rgba(254, 28, 113, 0.35)'
    use: 'Primary CTA — pill shape 32px radius; "Get started", "Try for free", "Generate now".'
  button-secondary:
    background: 'transparent'
    text: '#121110'
    padding: '12px 28px'
    radius: 32
    border: '1.5px solid rgba(18, 17, 16, 0.20)'
    font: 'Outfit 600 / 16px'
    hover-bg: 'rgba(18, 17, 16, 0.05)'
    hover-border: 'rgba(18, 17, 16, 0.35)'
    use: 'Outline twin — pill shape, near-black border. "See how it works", "Compare plans".'
  button-ghost:
    background: 'transparent'
    text: '#121110'
    padding: '8px 16px'
    radius: 8
    font: 'Outfit 500 / 15px'
    hover-bg: 'rgba(18, 17, 16, 0.05)'
    use: 'Quiet utility — nav links, inline secondary actions, footer links.'
  button-icon:
    background: '#ffffff'
    text: '#121110'
    padding: '10px'
    radius: 8
    border: '1px solid rgba(18, 17, 16, 0.10)'
    font: 'Outfit 500 / 14px'
    hover-bg: '#f5f3f0'
    use: 'Icon-only trigger — zoom controls on before-after panels, social share.'
  card:
    background: '#ffffff'
    border: '1px solid rgba(18, 17, 16, 0.08)'
    radius: 16
    padding: '24px'
    shadow: 'rgba(18, 17, 16, 0.06) 0 2px 12px'
    use: 'Feature card, pricing tier, testimonial block — white lift on warm-white canvas.'
  card-before-after:
    background: '#ffffff'
    border: '1px solid rgba(18, 17, 16, 0.10)'
    radius: 16
    padding: '0'
    aspect-ratio: '1 / 1'
    use: 'Before / after image comparison panel — hero and feature sections; images bleed to radius.'
  input:
    background: '#ffffff'
    border: '1px solid rgba(18, 17, 16, 0.16)'
    radius: 8
    padding: '10px 14px'
    font: 'Outfit 400 / 16px'
    placeholder-color: '#9c9793'
    focus-ring: '0 0 0 3px rgba(254, 28, 113, 0.20)'
    focus-border: '#fe1c71'
    use: 'Sign up, onboarding, settings fields.'
  badge-pill:
    background: 'rgba(254, 28, 113, 0.10)'
    text: '#c0004e'
    padding: '4px 12px'
    radius: 9999
    font: 'Outfit 600 / 12px'
    use: '"Free plan", "New", "Beta" — brand-pink wash, dark-pink text.'
  badge-neutral:
    background: 'rgba(18, 17, 16, 0.06)'
    text: '#6b6663'
    padding: '4px 10px'
    radius: 9999
    font: 'Outfit 500 / 12px'
    use: 'Platform tag: "Shopify", "Amazon", "TikTok Shop".'
  nav-link:
    background: 'transparent'
    text: '#121110'
    padding: '6px 12px'
    radius: 8
    font: 'Outfit 500 / 15px'
    hover-bg: 'rgba(18, 17, 16, 0.05)'
    active-bg: 'rgba(254, 28, 113, 0.08)'
    active-text: '#fe1c71'

motion:
  ease-standard: 'cubic-bezier(0.4, 0, 0.2, 1)'
  ease-emphasized: 'cubic-bezier(0.2, 0, 0, 1)'
  ease-spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)'
  duration-fast: 120
  duration-standard: 200
  duration-slow: 320
  duration-page: 400
  reduced-motion: 'respects prefers-reduced-motion: reduce — all transforms collapse to opacity-only; before-after drag disables animation; durations halve.'

breakpoints:
  mobile: 640
  tablet: 1024
  desktop: 1280
  wide: 1536

shadows:
  none: 'none'
  ambient: 'rgba(18, 17, 16, 0.05) 0 1px 3px'
  standard: 'rgba(18, 17, 16, 0.08) 0 4px 16px'
  elevated: 'rgba(18, 17, 16, 0.12) 0 8px 32px -4px'
  modal: 'rgba(18, 17, 16, 0.20) 0 20px 48px -8px'
  ring: '0 0 0 3px rgba(254, 28, 113, 0.25)'

accessibility:
  contrast-text-on-bg: 12.6       # #121110 on #fbfaf8 — AAA
  contrast-text-muted-on-bg: 5.1  # #6b6663 on #fbfaf8 — AA at body sizes
  contrast-brand-on-bg: 3.3       # #fe1c71 on #fbfaf8 — AA large / UI; FAIL at small body text
  contrast-white-on-brand: 3.3    # #ffffff on #fe1c71 — AA large only; use for CTAs ≥18px or bold ≥14px
  contrast-text-on-surface: 13.2  # #121110 on #ffffff — AAA
  focus-ring: '0 0 0 3px rgba(254, 28, 113, 0.35) — pink ring with 2px offset on all interactive elements'
  reduced-motion-honored: true
  keyboard-nav: 'tab order: skip-link → masthead → primary CTA → before-after panel controls → pricing → footer; Esc dismisses modals and dropdowns.'
  prose-line-length: 'capped at 720px on text pages.'

dark-mode: optional               # light is default; dark toggle ships in the nav.
colors-dark: see colors.dark      # derived inversion with invariant brand pink #fe1c71.

lineage:
  summary: 'Picoko inherits the joyful-SaaS playbook that Luma, Framer, and early Linear refined: geometric sans at maximum weight, a single electric brand colour reserved entirely for primary actions, and a warm near-white canvas that reads approachable rather than corporate. The 32px pill CTA is the same shape language used across modern B2C SaaS (Notion, Pitch, Framer). Outfit as the type system — Google Fonts'' rounded geometric grotesque — places Picoko closer to consumer fintech and lifestyle apps than to the austere design-tool register of Krea or Linear. The before-after image slider is lifted from photography and image-editing SaaS playbooks (Luminar, Canva). What Picoko rejects: dark canvases, monochrome restraint, editorial neutrality, and AI-tech purple gradients. It leans into warm, bright, and fast.'
  influences:
    - name: Krea
      role: AI image-generation SaaS peer; similar single-accent discipline applied to opposite palette (dark → light)
      url: https://krea.ai
    - name: Midjourney
      role: Reference for AI image-generation brand positioning and before-after showcase patterns
      url: https://www.midjourney.com
    - name: Shopify
      role: Primary distribution platform for Picoko''s end-customers; Polaris design language informs e-commerce UI conventions
      url: https://www.shopify.com
    - name: Outfit (Google Fonts)
      role: The display and body typeface — geometric grotesque with rounded stems; chosen for friendly-SaaS warmth at heavy weights
      url: https://fonts.google.com/specimen/Outfit
    - name: Framer
      role: Modern playful-SaaS aesthetic reference — pill CTAs, warm canvas, heavy geometric sans, freemium conversion UX
      url: https://www.framer.com
    - name: Canva
      role: Before-after image comparison interaction patterns; approachable creative-tool register for non-designer e-commerce sellers
      url: https://www.canva.com
---

## 1. Visual Theme & Atmosphere

Picoko opens on a warm near-white canvas — `#fbfaf8`, a shade of off-white with just enough warmth to avoid clinical sterility. Against that ground, pure white cards (`#ffffff`) feel slightly lifted rather than flat, the difference between a studio wall and a sheet of paper. The headline is set in **Outfit** at 72px / weight 900, tracking at -0.03em — unapologetically heavy, a shout not a whisper. "Get studio-quality product photos in seconds." The type doesn't hedge; neither does the product.

The single chromatic moment is `#fe1c71` — a blazing hot magenta-pink that reads like neon on warm white. It belongs exclusively to primary CTAs and brand marks. Nothing else on the page is pink. The discipline is intentional: by quarantining the colour, every appearance of `#fe1c71` reads as an invitation to act. Picoko is solving the e-commerce seller's oldest problem — product photography is slow, expensive, and requires equipment nobody has — so the brand needs to feel fast, confident, and slightly electric. The pink delivers that in a 50×50px swatch.

The hero layout is a split composition: a left column carries the headline, sub-headline, and a 32px pill primary CTA; the right side is a before-after image comparison panel with a 16px radius, showing the transformation from a snapshot to a polished studio shot. The before-after reveal is the product's thesis made visible in a single scroll-above-the-fold moment. Radii move from 8px on nav chips to 16px on cards and comparison panels, finally to 32px on pill CTAs — a deliberate escalation that maps visual importance to roundness.

The page flows through a series of clean white-card feature blocks sitting on the warm canvas, each section separated by generous vertical rhythm (80–128px). Platform badges — "Shopify", "Amazon", "TikTok Shop" — appear as neutral pill tags. Testimonial cards use the standard white-surface pattern. Pricing tiers sit on white cards with a brand-pink border on the featured tier. Throughout, the warm canvas does the connective tissue work; the white surfaces do the lifting.

Dark mode inverts the canvas to near-black (`#0d0c0b`, warm-tinted to match the light palette's temperature) and the body copy to near-white (`#f5f4f2`). The brand pink `#fe1c71` is invariant — it doesn't need to change, because the contrast ratio on both backgrounds is sufficient for CTAs (large text / UI) and the electric quality is the point regardless of theme.

**Key Characteristics**
- Warm near-white canvas `#fbfaf8` — not paper-white, not cold grey, a considered warmth
- Single brand accent `#fe1c71` — hot magenta-pink, reserved exclusively for primary CTAs and brand marks
- Outfit at 72px / weight 900 — heavy geometric grotesque; the loudest headline in the SaaS tier
- 32px pill primary CTAs — the signature shape, consumer-SaaS register
- 16px card and panel radius — before-after comparison panels, feature cards, pricing tiers
- 8px nav-chip radius — smaller, tighter, purposeful
- Before-after image slider hero — the product thesis demonstrated at first scroll
- White-surface cards on warm canvas — subtle lift without shadows at rest
- Light-first with a genuine dark mode toggle — both themes carry the brand pink
- Platform-badge vocabulary — "Shopify / Amazon / TikTok Shop" tags anchor the e-commerce context

## 2. Color Palette & Roles

### Primary

- **bg** `#fbfaf8` — warm near-white canvas; live-probed. The slightly warm tint — not `#ffffff`, not `#f5f5f5` — is the canvas temperature that makes pure white cards feel lifted without shadows.
- **text** `#121110` — near-black body copy; live-probed. Warm-shifted slightly from neutral `#111111`.
- **surface** `#ffffff` — pure white cards, panels, and comparison frame. Sits visibly above the `#fbfaf8` canvas.
- **bg-alt** `#f5f3f0` — slightly deeper warm-white for inset zones, footer bands, and subtle section dividers.

### Brand & Accent

- **brand** `#fe1c71` — hot magenta-pink; THE signature colour. Primary CTAs only. Do not use as a background fill larger than a button or badge.
- **brand-deep** `#e5005c` — pressed / active state; approximately 12% darker in perceived value, maintains the pink family.
- **brand-soft** `rgba(254, 28, 113, 0.10)` — pink wash for badge backgrounds, hover tints on selected nav items.
- **on-brand** `#ffffff` — white text on pink CTAs; 3.3:1 contrast (AA large / UI, flag for small text — see Section 9).

### Interactive

- **link** `#121110` — inline links match body copy in light mode; underlined for affordance.
- **link-hover** `#fe1c71` — brand pink on hover; the only chromatic shift in inline copy.
- **selected-bg** `rgba(254, 28, 113, 0.08)` — active nav state, selected filter chip.
- **disabled** `#c3bfbb` — faint warm-grey for disabled inputs and buttons.

### Neutral Scale (Warm-tinted)

- **#121110** — near-black body copy.
- **#6b6663** — warm mid-grey for captions, helper text.
- **#9c9793** — quiet labels, placeholder copy.
- **#c3bfbb** — disabled, faint echo text.
- **#e5e2de** — light warm-grey hairlines and dividers.
- **#f5f3f0** — alt canvas, inset zones.
- **#fbfaf8** — canvas ground.
- **#ffffff** — surface (card, panel).

All neutral steps are warm-tinted (red channel ≥ blue channel) to maintain palette cohesion with the warm canvas and the pink brand.

### Surface & Borders

- **surface-0 (canvas)** — `#fbfaf8` warm near-white.
- **surface-1 (card)** — `#ffffff` pure white.
- **surface-2 (elevated)** — `#ffffff` + `rgba(18, 17, 16, 0.08) 0 4px 16px` shadow.
- **border** — `rgba(18, 17, 16, 0.08)` — 8% near-black hairline, warm-tinted.
- **border-strong** — `rgba(18, 17, 16, 0.16)` — emphasized rule, inputs at rest.
- **border-brand** — `rgba(254, 28, 113, 0.30)` — focus ring on inputs.

### Shadow Colors

Picoko's shadows use warm near-black at low opacity. The warm canvas absorbs shadows gently, so elevation is read primarily as surface step (`#fbfaf8` → `#ffffff`) plus a subtle blur for floating elements. Brand-pink shadows are not used; the pink stays in fills.

### Semantic

- **success** — bg `rgba(34, 197, 94, 0.10)`, text `#15803d` (green-700 on light).
- **warning** — bg `rgba(234, 179, 8, 0.12)`, text `#a16207` (amber-700 on light).
- **danger** — bg `rgba(239, 68, 68, 0.10)`, text `#b91c1c` (red-700 on light).
- **info** — bg `rgba(254, 28, 113, 0.08)`, text `#c0004e` — borrows the brand pink at low saturation.

## 3. Typography Rules

### Font Family

- **Display & Body**: `"Outfit", ui-sans-serif, system-ui, -apple-system, sans-serif` — Google Fonts' geometric grotesque. Outfit has rounded stems and open apertures that read as friendly and confident; at weight 900 it is explosive; at 400 it is clean and legible. One family carries the entire system.
- **Mono**: `ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace` — for numeric data in pricing tables, file size stats, and rare inline code.
- **OpenType features**: `kern` and `liga` always enabled. `tnum` (tabular figures) and `zero` enabled in mono.

### Hierarchy

| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|---|---|---|---|---|---|---|
| Display Hero | Outfit | 72px | 900 | 1.0 | -0.03em | Live-probed hero h1; "in seconds" punchline |
| Display LG | Outfit | 56px | 800 | 1.05 | -0.025em | Section hero headlines |
| H1 | Outfit | 48px | 800 | 1.08 | -0.02em | Page-level title |
| H2 | Outfit | 36px | 700 | 1.15 | -0.015em | Major section heading |
| H3 | Outfit | 28px | 700 | 1.2 | -0.01em | Feature group heading |
| H4 | Outfit | 22px | 600 | 1.3 | -0.005em | Card heading, pricing tier name |
| H5 | Outfit | 18px | 600 | 1.35 | 0 | Sub-card heading, nav section label |
| Eyebrow | Outfit | 12px | 600 | 1.4 | 0.1em | Uppercase pre-label: "FOR SHOPIFY SELLERS" |
| Body Large | Outfit | 18px | 400 | 1.6 | 0 | Hero lede, feature sub-headline |
| Body | Outfit | 16px | 400 | 1.55 | 0 | Default body copy |
| Body Medium | Outfit | 16px | 500 | 1.5 | 0 | UI body — nav links, card labels |
| Body Small | Outfit | 14px | 400 | 1.5 | 0 | Compact UI, helper text |
| Label | Outfit | 13px | 500 | 1.4 | 0 | Form labels, table headers |
| Caption | Outfit | 12px | 500 | 1.4 | 0.02em | Image captions, footnotes |
| Caption Tabular | mono | 12px | 500 | 1.4 | 0 | Price numbers, credit counts |
| Code | mono | 13px | 400 | 1.55 | 0 | Rare inline code |

### Principles

- **Weight 900 at 72px is the brand's loudest statement.** Outfit at black weight is unusual in SaaS — most brands cap at 700. Picoko uses it to signal that the product does something dramatic (transforming amateur snaps into studio shots).
- **Single-family discipline.** Outfit from eyebrow to body caption — no mixing with a serif or secondary sans. Consistency is the brand's quiet confidence.
- **Negative tracking only at display sizes.** -0.03em at 72px, tapering to 0 by h4. Below h4, tracking is neutral or slightly open for captions.
- **Optical sizing matters at 900.** At maximum weight, letter spacing must be tighter than the font's default — the -0.03em on the hero prevents the glyphs from feeling crowded against the heavy strokes.
- **400 body, never lighter.** Outfit at 300 loses the brand's warmth and reads as generic. Body stays at 400; UI emphasis steps to 500.
- **Eyebrow at 0.1em tracking.** Wider than most SaaS peers (0.05–0.08em) — the extra air at 12px makes the all-caps label feel designed rather than defaulted.
- **Mono only for numeric data.** Credit counts, file sizes, pricing figures benefit from `tnum` (tabular figures) to align columns; body numbers use Outfit's default proportional figures.
- **No italics in display.** Italic weight is reserved for inline body emphasis and testimonial quotes. Never in headlines or CTAs.

## 4. Component Stylings

### Buttons

**Primary (Hot Pink Pill)**
- Background: `#fe1c71`. Text: `#ffffff`, Outfit 600 / 16px.
- Padding: `12px 28px`. Radius: `32px` (pill). No border.
- Hover: bg → `#e5005c`; transition `200ms ease-standard`.
- Active: bg → `#cc0052`.
- Focus: `0 0 0 3px rgba(254, 28, 113, 0.35)`.
- Use: Every primary CTA — *Get started, Try for free, Generate now, See plans.* The pill shape is non-negotiable.

**Secondary (Outline Pill)**
- Background: transparent. Text: `#121110`, Outfit 600 / 16px.
- Border: `1.5px solid rgba(18, 17, 16, 0.20)`.
- Padding: `12px 28px`. Radius: `32px` (pill).
- Hover: bg → `rgba(18, 17, 16, 0.05)`, border → `rgba(18, 17, 16, 0.35)`.
- Focus: `0 0 0 3px rgba(18, 17, 16, 0.15)`.
- Use: Twin to primary — *See how it works, Watch demo, Compare plans.*

**Ghost (Quiet)**
- Background: transparent. Text: `#121110`, Outfit 500 / 15px.
- Padding: `8px 16px`. Radius: `8px`. No border.
- Hover: bg → `rgba(18, 17, 16, 0.05)`.
- Use: Nav links, inline secondary actions, footer utility links.

**Icon Button**
- Background: `#ffffff`. Text/icon: `#121110`.
- Padding: `10px`. Radius: `8px`. Border: `1px solid rgba(18, 17, 16, 0.10)`.
- Hover: bg → `#f5f3f0`.
- Use: Before-after panel zoom, social share, copy, close.

### Cards

**Feature Card**
- Background: `#ffffff`. Border: `1px solid rgba(18, 17, 16, 0.08)`. Radius: `16px`. Padding: `24px`.
- Shadow: `rgba(18, 17, 16, 0.06) 0 2px 12px` at rest; `rgba(18, 17, 16, 0.10) 0 6px 24px` on hover.
- Use: Capability tiles, feature highlights, platform icons.

**Before-After Panel**
- Background: `#ffffff`. Border: `1px solid rgba(18, 17, 16, 0.10)`. Radius: `16px`. Padding: `0`.
- Aspect ratio: `1 / 1` on square product images; `4 / 3` on scene-mode wider shots.
- Images bleed to the 16px corner radius. Drag handle is brand pink.
- Use: Hero and feature-section image comparison — the product's primary demonstration.

**Pricing Card**
- Background: `#ffffff`. Radius: `16px`. Padding: `28px 24px`.
- Default: border `1px solid rgba(18, 17, 16, 0.08)`.
- Featured: border `2px solid #fe1c71`; optional brand-pink eyebrow "Most popular".
- Shadow on featured: `rgba(254, 28, 113, 0.12) 0 8px 32px -4px`.

**Testimonial Card**
- Background: `#ffffff`. Border: `1px solid rgba(18, 17, 16, 0.06)`. Radius: `16px`. Padding: `20px 24px`.
- Avatar: 40px circle. Quote text: Outfit 400 / 16px in `#121110`. Attribution: Outfit 500 / 13px in `#6b6663`.

### Badges, Tags, Pills

**Brand Badge** — bg `rgba(254, 28, 113, 0.10)`, text `#c0004e`, Outfit 600 / 12px, padding `4px 12px`, radius `9999`. Use: "Free plan", "New", "Beta".

**Neutral Tag** — bg `rgba(18, 17, 16, 0.06)`, text `#6b6663`, Outfit 500 / 12px, padding `4px 10px`, radius `9999`. Use: Platform names — "Shopify", "Amazon", "TikTok Shop".

**Eyebrow Label** — no chrome; Outfit 600 / 12px / uppercase / 0.1em tracking, colour `#9c9793`. Use: Section pre-label ("TRUSTED BY 10,000+ SELLERS").

### Inputs / Forms

**Text Input**
- Background: `#ffffff`. Border: `1px solid rgba(18, 17, 16, 0.16)`. Radius: `8px`. Padding: `10px 14px`.
- Font: Outfit 400 / 16px. Placeholder: `#9c9793`.
- Focus: `0 0 0 3px rgba(254, 28, 113, 0.20)` ring; border → `#fe1c71`.
- Error: border → `#b91c1c`, helper text in `#b91c1c` below.
- Use: Sign-up email, onboarding fields, settings.

**Select / Dropdown**
- Same appearance as text input at rest.
- Open: `#ffffff` bg, `1px solid rgba(18, 17, 16, 0.12)` border, `16px` radius on the dropdown panel.
- Option hover: bg → `rgba(254, 28, 113, 0.06)`.

### Navigation

- Header height `64px`. Background `rgba(251, 250, 248, 0.90)` with `backdrop-filter: blur(16px)` — lets the warm canvas bleed through on scroll.
- Logo: Picoko wordmark in `#121110`, Outfit 700.
- Nav links: Outfit 500 / 15px, colour `#121110`, padding `6px 12px`, radius `8px`. Hover: bg → `rgba(18, 17, 16, 0.05)`.
- Right-side: ghost "Sign in" + brand pink pill "Get started" (Outfit 600 / 15px).
- Mobile (<640px): hamburger collapses nav to a full-height sheet; links stack at 18px / 600. CTA remains visible at bottom of sheet.

### Optional Components

**Dropdown Menu** — bg `#ffffff`, border `1px solid rgba(18, 17, 16, 0.08)`, radius `12px`, shadow `rgba(18, 17, 16, 0.12) 0 8px 24px -4px`. Items: Outfit 400 / 15px, hover bg `rgba(254, 28, 113, 0.06)`.

**Tooltip** — bg `#121110`, text `#ffffff`, radius `6px`, padding `6px 10px`, font Outfit 500 / 12px.

**Toast** — bg `#ffffff`, border `1px solid rgba(18, 17, 16, 0.10)`, radius `10px`, padding `12px 16px`, shadow `rgba(18, 17, 16, 0.12) 0 6px 24px -4px`. Icon-left pattern: success green, warning amber, error red.

**Modal** — bg `#ffffff`, radius `16px`, shadow `rgba(18, 17, 16, 0.20) 0 20px 48px -8px`, max-width `540px`. Backdrop: `rgba(18, 17, 16, 0.50)`. Brand-pink close button on destructive actions.

## 5. Layout Principles

### Spacing System

- **Base unit**: 4px.
- **Scale**: 0, 4, 8, 12, 16, 24, 32, 48, 64, 96, 128, 160.
- **Density**: Chrome-level spacing is medium-dense (64–96px section rhythm); within-card spacing is tight (16–24px). The page reads approachable, not airy — a SaaS tool that respects the seller's time.

### Grid & Container

- **Page max width**: `1280px` — standard SaaS frame.
- **Site gutter**: `clamp(20px, 4vw, 56px)` — comfortable on all viewports.
- **Grid**: 12 columns with 24px gutters on desktop; collapses to 4 columns on tablet, 1 column on mobile.
- **Hero layout**: 55/45 left/right split — headline and CTA left, before-after panel right. Below tablet, stacks vertically: headline → CTA → comparison panel.
- **Prose width**: 720px maximum on text-heavy sections.

### Whitespace Philosophy

Picoko's whitespace is **purposeful but not sparing**. Section rhythm runs 80–128px between major blocks — generous enough to let each section breathe and register, tight enough to maintain urgency (the product is fast; the page should feel fast). Card padding is consistently 24px. Internal card spacing is 16px between elements. The warm canvas creates visual air even when spacing is moderate.

### Section Cadence

- Hero (split headline + before-after panel) → Platform logos band (Shopify, Amazon, TikTok Shop) → How it works (3-step feature ladder) → Before-after gallery grid → Testimonials (card strip) → Pricing (3-tier cards) → Final CTA band (pink-accented) → Footer.
- The page alternates between warm-canvas ground and white-card clusters. Section breaks use vertical space; no horizontal rules. The pink CTA band near the footer uses `#fe1c71` as a background — one of the rare instances where the brand colour fills a full-width surface (using `#ffffff` text above it).

## 6. Shapes & Radius Scale

| Tier | Value | Use |
|---|---|---|
| Micro | 2px | Decorative dividers, progress bar caps |
| Standard (sm) | 4px | Small badges, compact chips, tag inner radius |
| Comfortable (md) | 8px | Nav links, icon buttons, text inputs, dropdowns |
| Featured (lg) | 16px | Cards, comparison panels, pricing tiers, modals |
| Large (xl) | 24px | Hero panels on wide viewports, pricing featured highlight |
| Pill (CTAs) | 32px | Primary and secondary call-to-action buttons — the signature |
| Full | 9999px | Avatar circles, status dots, badge-neutral pills |

Picoko's signature shape tension is the **contrast between 8px utility elements and 32px pill CTAs**. The nav links and inputs sit at 8px — functional, unobtrusive. The moment you look at a CTA, the 32px pill asserts "this is the action." Cards at 16px sit in the middle register: friendly but structured. The before-after comparison panels also use 16px — the image content is editorial, not form-field utility.

There are no zero-radius surfaces at any user-visible level. Even progress bars cap their ends at `9999px`. The brand has committed to roundness as a signal of approachability — a deliberate contrast to the sharp-cornered default of Shopify admin and Amazon Seller Central, where Picoko's users spend their day.

## 7. Depth & Elevation

| Level | Treatment | Use |
|---|---|---|
| 0 | Flat — canvas `#fbfaf8` | Page background, hero ground |
| 1 | Surface step — `#ffffff` | Cards, comparison panels, nav bar (no shadow) |
| 2 | `rgba(18,17,16,0.06) 0 2px 12px` | Default card shadow at rest |
| 3 | `rgba(18,17,16,0.10) 0 6px 24px` | Hovered cards, sticky nav on scroll |
| 4 | `rgba(18,17,16,0.14) 0 8px 32px -4px` | Dropdowns, tooltips, toasts |
| 5 | `rgba(18,17,16,0.20) 0 20px 48px -8px` | Modals, overlays |

### Shadow Philosophy

Picoko's primary depth cue is **surface stepping** (`#fbfaf8` canvas → `#ffffff` card) — the same move as Krea's tonal stepping, but in the warm-light register. Shadows appear as a secondary reinforcement: cards carry a faint 2px / 12px shadow at rest to give a paper-on-paper lift. On hover, the shadow deepens rather than the card scaling. Brand-pink shadows are used sparingly and only on the featured pricing tier, where a subtle `rgba(254, 28, 113, 0.12)` glow reinforces the recommended-plan hierarchy.

## 8. Interaction & Motion

### Easing Curves

- **`ease-standard`**: `cubic-bezier(0.4, 0, 0.2, 1)` — default for hover, focus, colour transitions.
- **`ease-emphasized`**: `cubic-bezier(0.2, 0, 0, 1)` — modal entry, drawer slide.
- **`ease-spring`**: `cubic-bezier(0.34, 1.56, 0.64, 1)` — slight overshoot for the before-after drag handle snap; badge pop on first render.

### Duration Buckets

- **Fast (120ms)** — colour transitions, border-colour focus, link hover tint.
- **Standard (200ms)** — button hover (bg, border), card shadow deepening, nav backdrop.
- **Slow (320ms)** — modal enter/exit, drawer slide, page section fade-in.
- **Page (400ms)** — route transitions, hero section reveal on load.

### Per-Component Micro-States

- **Primary button hover**: bg `#fe1c71` → `#e5005c` over 200ms; no transform, no scale.
- **Secondary button hover**: border opacity 0.20 → 0.35; bg fills to 5% near-black — both over 200ms.
- **Card hover**: shadow `0 2px 12px` → `0 6px 24px` over 200ms; border opacity barely shifts.
- **Before-after drag**: drag handle snaps to position with `ease-spring`, 120ms. Image reveal is `clip-path: inset(0 X% 0 0)` updating on `pointermove` — no easing (direct tracking); snap to final position on release uses `ease-spring` 200ms.
- **Input focus**: pink ring fades in over 120ms; border shifts to `#fe1c71` simultaneously.
- **Badge pop**: on first appearance (New, Beta), badge scales `0.8 → 1.0` with `ease-spring` over 240ms.
- **Nav hover**: bg fill `0 → rgba(18,17,16,0.05)` over 120ms.

### Page Transitions

Below-fold sections use `IntersectionObserver` to fade in at 85% viewport, 320ms duration, 8px translate-up. No looping animations at rest. The before-after hero panel may auto-reveal on load (slides from 100% to 50% coverage) using `ease-emphasized` over 800ms — a one-shot demo of the product.

### Reduced Motion

`@media (prefers-reduced-motion: reduce)` — all transforms collapse to opacity-only; before-after auto-reveal skips the slide and cuts to final position; `ease-spring` replaced with `ease-standard`; durations halve.

## 9. Accessibility & A11y

### Contrast Pairs

- **`#121110` on `#fbfaf8`** (body text on canvas): ~12.6:1 — **AAA** at all sizes.
- **`#121110` on `#ffffff`** (body on card): ~13.2:1 — **AAA** at all sizes.
- **`#6b6663` on `#fbfaf8`** (muted captions on canvas): ~5.1:1 — **AA** at body sizes.
- **`#9c9793` on `#ffffff`** (soft helper on card): ~3.8:1 — **AA large** only; keep at 14px+ or not relied on for essential info.
- **`#ffffff` on `#fe1c71`** (on-brand text): ~3.3:1 — **AA large / UI** (passes for text ≥18px normal or ≥14px bold, and for UI components). **Fails for small body text (<18px / <14px bold)**. Use `#fe1c71` as a CTA fill with white text only at the button's `16px / 600` size or larger. Never as a background for small paragraph text.
- **`#fe1c71` on `#ffffff`** (pink text on white): ~3.3:1 — same caveat. Acceptable for large display labels and icon glyphs; not for 12px body copy.
- **`#c0004e` on `#ffffff`** (info-text on card): ~5.5:1 — **AA** at body sizes. Prefer `#c0004e` over `#fe1c71` wherever pink text appears at small sizes.

### Focus Indicators

- Default ring: `0 0 0 3px rgba(254, 28, 113, 0.35)` with 2px offset on all interactive elements.
- Inputs: ring expands from the border — border shifts to `#fe1c71`, ring adds at 3px / 20% opacity.
- All interactive surfaces show a visible focus state. The pink ring provides clear contrast on both the warm canvas and white card surfaces.

### ARIA Patterns

- **Navigation**: `<nav aria-label="Main">` with skip-link to `#main-content`.
- **Before-after slider**: `<div role="slider" aria-label="Before / after comparison" aria-valuemin="0" aria-valuemax="100" aria-valuenow="50">` — drag handle keyboard-operable with arrow keys.
- **Before image**: `<img alt="Product photo before: original smartphone snapshot on wooden table">`.
- **After image**: `<img alt="Product photo after: studio-quality white background with professional lighting">`.
- **Dialog**: `role="dialog" aria-modal="true" aria-labelledby` with focus trap and Esc-to-close.
- **Live regions**: `aria-live="polite"` for generation-complete status messages.

### Keyboard Navigation

- Tab order: skip-link → masthead nav → primary CTA → before-after panel drag handle → feature section → pricing → footer.
- Before-after slider: Left/Right arrow keys adjust reveal by 5%; Home/End go to 0%/100%.
- Esc closes dropdowns, modals, and the mobile nav sheet.

### Screen Reader Hints

- Before-after panels carry descriptive `alt` text on both images.
- Icon-only buttons carry `aria-label`.
- The brand-pink featured pricing badge carries `aria-label="Recommended plan"`.

### Reduced Motion

Honoured globally. Before-after auto-reveal skips animation; all translate-up fades collapse to opacity-only; badge pop removes the scale.

## 10. Responsive Behavior

### Breakpoints

| Name | Width | Use |
|---|---|---|
| Mobile | < 640px | Single-column stack; full-bleed comparison panels |
| Tablet | 640–1024px | 2-column feature grid; headline above panel stacked |
| Desktop | 1024–1280px | Full split hero; 3-column feature grid; full nav |
| Wide | > 1280px | Page locks at 1280px; gutters expand |

### Touch Targets

- Minimum tap target: 44×44px on all interactive elements.
- Primary pill CTAs on mobile: full-width (100%) at 48px height minimum.
- Before-after drag handle: 44px touch area regardless of visual handle size.
- Nav hamburger: 44×44px minimum.

### Collapsing Strategy

- **Header**: full nav at ≥1024px; hamburger sheet below. Primary CTA always visible — on mobile it migrates to the bottom of the hamburger sheet and bottom of the hero section.
- **Hero**: 55/45 split → headline-first stack (headline → CTA → comparison panel) on mobile.
- **Headline**: 72px → 52px → 40px across desktop / tablet / mobile.
- **Feature grid**: 3-up → 2-up → 1-up across breakpoints.
- **Section spacing**: 128px → 96px → 64px across sizes.
- **Card padding**: 24px → 20px on mobile.

### Image Behavior

- Before-after panels: serve `srcset` with 2× resolution assets for Retina; aspect ratio locked via CSS `aspect-ratio`. On mobile, height is capped at `100vw` (square).
- Feature images: native lazy-loading; descriptive `alt`.
- Hero panel: may use a static image on initial paint, swapping to interactive comparison on `load` event.

### Container Queries

Used inside feature cards to switch icon-top to icon-left layout when the card container width crosses 280px — allows the 3-column grid to reflow gracefully without global breakpoint coupling.

## 11. Content & Voice

### Tone

**Fast, confident, and seller-first.** Picoko writes for the Shopify merchant or Amazon seller who is juggling product launches with zero budget for a photographer. The copy is direct, quantified where possible ("studio-quality photos in seconds"), and never condescending. No AI hype jargon ("harness the power of…"); just the outcome the seller cares about.

### Microcopy Patterns

- **Button verbs**: "Get started," "Try for free," "Generate photos," "See plans," "Upload product." Never "Begin your journey" or "Unlock AI power."
- **Eyebrows / labels**: "FOR SHOPIFY SELLERS," "USED BY 10,000+ BRANDS," "NO PHOTOGRAPHER NEEDED." Plain, uppercase, factual.
- **Feature descriptions**: one sentence — the capability, then the benefit. "Remove backgrounds in one click — your product, ready for any platform."
- **Error messages**: "Couldn't generate that image. Try a different background or upload a clearer photo." — diagnose, suggest, move on.
- **Success confirmations**: "Photo generated. Download or edit." Brief, actionable.
- **Loading states**: "Generating…" with a subtle pink progress bar. No "Our AI is thinking magical thoughts…"

### Empty States

- *"Upload your first product photo to get started."* — clear invitation, no guilt.
- *"No generated photos yet. Try 'Studio background' to create your first batch."* — point to a specific action.
- Never uses "Oops!" Never implies the user did something wrong unless they actually did.

### CTA Verb Conventions

- Primary hero: "Get started free," "Generate photos now," "Try Picoko"
- Secondary hero: "See how it works," "Watch a demo"
- Pricing: "Start free," "Choose Pro," "Contact sales"
- Footer: "Pricing," "Integrations," "Blog," "Help"

The voice is **outcome-first**: tell the seller what they'll have (studio-quality photos, in seconds, for Shopify), not what Picoko is doing internally. The product is the magic; the copy is the shortcut to the result.

## 12. Dark Mode & Theming

Picoko ships a genuine light + dark theme toggle — a first-class UI element in the nav, not an afterthought. The live-probed default is **light** (the warm near-white canvas `#fbfaf8`). Dark mode inverts to a warm near-black canvas (`#0d0c0b`) with near-white body copy (`#f5f4f2`).

### What Changes in Dark Mode

- **Canvas**: `#fbfaf8` → `#0d0c0b`. Warm temperature maintained in the dark shift (warm near-black, not cool neutral).
- **Surface**: `#ffffff` → `#1f1e1c`. Cards remain visibly lighter than the canvas.
- **Text**: `#121110` → `#f5f4f2`. Body copy stays near-white, not full white, to avoid harshness.
- **Borders**: `rgba(18,17,16,0.08)` → `rgba(245,244,242,0.08)`. Same 8% opacity, flipped channel.
- **Shadows**: warm-dark at low opacity replace the warm-light versions.

### What Does Not Change

- **Brand pink** `#fe1c71` — invariant across both themes. The contrast ratio on dark canvas (`#0d0c0b`) is approximately 3.9:1 — slightly higher than on light, still AA-large for CTAs. The electric quality of the pink is maintained and arguably enhanced against the dark ground.
- **Radius scale** — unchanged.
- **Typography** — unchanged; Outfit at all weights and sizes is stable across themes.
- **Motion** — unchanged.

### Theme Persistence

Preference is written to `localStorage` under a key (e.g. `picoko-theme`). On next visit, the stored value is applied before first paint (inline script in `<head>`) to prevent flash of wrong theme. `data-theme="light"` or `data-theme="dark"` on `<html>` drives all CSS custom property swaps via `:root[data-theme="dark"] { ... }` blocks. `prefers-color-scheme` is the initial fallback when no localStorage key exists.

### Before-After Panels in Dark Mode

The comparison images themselves are unaffected by theme (they show the user's product). The panel frame — border, drag handle — flips to dark-theme tokens. The brand-pink drag handle remains `#fe1c71` in both themes.

## 13. Lineage & Influences

Picoko inherits the joyful-SaaS playbook refined by Framer, Luma, and modern freemium B2C tools: a geometric sans at maximum weight, a single electric accent colour quarantined to primary actions, and a warm canvas that reads approachable rather than corporate. The 32px pill CTA places Picoko in the same shape language as Notion, Pitch, and early Framer — a register that says "this is a tool people choose, not enterprise software people are assigned."

Outfit as the type system is the key differentiator from the design-tool SaaS tier (which defaults to Inter, Söhne, or Suisse Intl). Outfit's rounded stems and open apertures read as warm and friendly at 400; at 900 they become bold without feeling aggressive. The choice signals that Picoko's user is a Shopify merchant, not a design-system engineer.

The before-after comparison slider is a well-established pattern in image-editing SaaS — Luminar, Lightroom mobile, Canva's background remover — and Picoko uses it as the hero's primary product demonstration. It's a borrowed pattern, executed at 16px radius with a brand-pink drag handle to make it distinctly Picoko.

What Picoko rejects: dark canvases (Krea, Midjourney, Runway), monochrome restraint (Linear, Vercel), editorial neutrality (Stripe), and AI-purple gradients (every third AI startup). The brand wants to be unmistakably warm, bright, and fast — the opposite register from the creative-AI gallery aesthetic.

**Named influences:**

- **Krea** — AI image-generation SaaS peer; Picoko applies similar single-accent discipline to the opposite palette (warm light instead of absolute dark). *https://krea.ai*
- **Midjourney** — reference for AI image-generation brand positioning; Picoko explicitly differentiates by going warm/light where Midjourney goes dark/editorial. *https://www.midjourney.com*
- **Shopify** — primary distribution platform for Picoko's end-customers; Polaris design language informs e-commerce UI conventions that sellers already know. *https://www.shopify.com*
- **Outfit (Google Fonts)** — the typeface that carries the entire system; geometric grotesque with rounded stems chosen for friendly-SaaS warmth at heavy weights. *https://fonts.google.com/specimen/Outfit*
- **Framer** — modern playful-SaaS aesthetic reference: pill CTAs, warm canvas, heavy geometric sans, freemium conversion UX patterns. *https://www.framer.com*
- **Canva** — before-after image comparison patterns; approachable creative-tool register aimed at non-designer users. *https://www.canva.com*

## 14. Do's and Don'ts

### Do

- **Do** use `#fe1c71` for every primary CTA — and only for primary CTAs and brand marks. One use, one role, maximum impact.
- **Do** set hero headlines in Outfit weight 900 at 72px with -0.03em tracking. The heaviness is the brand's loudest signal.
- **Do** maintain the warm canvas temperature. `#fbfaf8` is not `#f5f5f5` or `#fafafa` — the warmth matters.
- **Do** use 32px pill shape for primary and secondary CTAs. Never 8px or straight-edge for a primary action.
- **Do** use 16px radius on cards and comparison panels — the brand's mid-tier signature shape.
- **Do** keep white cards (`#ffffff`) on the warm canvas (`#fbfaf8`) — the surface step is the primary depth cue.
- **Do** use `#c0004e` (darker pink) for small-size pink text where contrast matters — never `#fe1c71` at body size.
- **Do** show a before-after image comparison as the hero's right-column content — it demonstrates the product thesis in a single glance.
- **Do** add the `aria-label` and keyboard controls on the before-after slider — it's a non-standard interactive element.
- **Do** keep the brand pink invariant across light and dark themes.
- **Do** pace sections at 80–128px vertical rhythm. The page should feel fast but not anxious.
- **Do** write CTA verbs in outcome-first imperative: "Get studio-quality photos," "Generate now," "See plans."

### Don't

- **Don't** use `#fe1c71` as a background for a full-width section unless it is an intentional CTA band (bottom of page). A pink hero canvas would overwhelm.
- **Don't** use `#fe1c71` as body text at small sizes — the 3.3:1 contrast fails WCAG AA for text below 18px normal / 14px bold.
- **Don't** mix a second accent colour into the system. The pink's impact depends on isolation.
- **Don't** use weights below 600 for CTAs, or below 400 for body. Outfit at 300 loses brand warmth.
- **Don't** use a dark canvas for the marketing surface — the product's visual brand is warm, light, and fast.
- **Don't** use shadow-only depth — always pair with the surface step (`#fbfaf8` → `#ffffff`).
- **Don't** apply negative tracking below h4 — Outfit's openness at body sizes is part of its warmth; closing the tracking looks forced.
- **Don't** use sharp 0px or 4px radius on CTAs — pill shape is the non-negotiable signature.
- **Don't** use purple, indigo, or gradient-mesh AI aesthetics — Picoko differentiates by being the warm, fast, approachable tool in the category.
- **Don't** add exclamation marks or hyperbole to CTA copy. The product's value is self-evident; the copy just names the outcome.
- **Don't** use Outfit weight 900 below 36px — it becomes too heavy and loses legibility at body scales.
- **Don't** ignore the warm temperature shift in the dark palette. Dark mode uses warm near-black (`#0d0c0b`), not neutral cool dark (`#111111`).

## 15. Agent Prompt Guide

### Quick Color Reference

```
Light theme:
bg: #fbfaf8
bg-alt: #f5f3f0
surface: #ffffff
text: #121110
text-muted: #6b6663
text-soft: #9c9793
brand: #fe1c71
brand-deep: #e5005c
on-brand: #ffffff
border: rgba(18, 17, 16, 0.08)
border-strong: rgba(18, 17, 16, 0.16)

Dark theme (derived):
bg: #0d0c0b
surface: #1f1e1c
text: #f5f4f2
text-muted: #9c9793
brand: #fe1c71  ← same
border: rgba(245, 244, 242, 0.08)
```

### Example Component Prompts

1. **"Create a Picoko-style hero — warm near-white `#fbfaf8` canvas split 55/45. Left column: 72px headline in Outfit weight 900, tracking -0.03em, colour `#121110`; 18px / 400 sub-headline in `#6b6663`; one hot-pink `#fe1c71` pill CTA 'Get started free' at 32px radius / Outfit 600 / 16px / padding `12px 28px`. Right column: 1:1 before-after image comparison panel, white background, 16px radius, brand-pink drag handle at centre."**

2. **"Design a Picoko feature card — `#ffffff` background on `#fbfaf8` canvas, `1px solid rgba(18,17,16,0.08)` border, 16px radius, 24px padding, `rgba(18,17,16,0.06) 0 2px 12px` shadow. Icon at top (48px, brand-pink). Heading: Outfit 700 / 22px / `#121110`. Body: Outfit 400 / 16px / `#6b6663`. On hover, shadow deepens to `0 6px 24px`."**

3. **"Build a Picoko pricing tier — 3 cards in a row on `#fbfaf8` canvas. Default cards: `#ffffff`, 16px radius, `1px solid rgba(18,17,16,0.08)` border, 28px×24px padding. Featured (Pro) card: `2px solid #fe1c71` border, `rgba(254,28,113,0.12) 0 8px 32px -4px` shadow, pink eyebrow 'Most popular' at Outfit 600 / 12px / uppercase. Plan price: Outfit 800 / 48px. CTA: full-width pink pill 'Choose Pro' 32px radius."**

4. **"Compose a Picoko navigation — 64px header, `rgba(251,250,248,0.90)` background with `backdrop-filter: blur(16px)`. Wordmark left: Outfit 700 / `#121110`. Links centre: Outfit 500 / 15px / `#121110`, 8px radius hover fill `rgba(18,17,16,0.05)`. Right: ghost 'Sign in' + pink pill 'Get started' at `#fe1c71` / `#ffffff` / Outfit 600 / 15px / 32px radius / `12px 24px` padding."**

5. **"Render a Picoko before-after comparison panel — `#ffffff` surface, 16px radius, 1:1 aspect ratio, no padding (images bleed to radius). Left half shows original product snapshot; right half shows AI-generated studio shot on white background. Vertical drag handle at 50% position: 40px tall, `#fe1c71` pill-shaped bar, white arrow icons. Hover hint: 'Drag to compare' in Outfit 500 / 12px / `#9c9793` fading in at 500ms."**

6. **"Create a Picoko platform badge row — 3 neutral pill badges in a horizontal flex. Each: bg `rgba(18,17,16,0.06)`, text `#6b6663`, Outfit 500 / 12px, padding `6px 14px`, radius 9999. Labels: 'Shopify', 'Amazon', 'TikTok Shop'. Preceded by an eyebrow label 'WORKS WITH' in Outfit 600 / 12px / uppercase / 0.1em tracking / `#9c9793`."**

### Iteration Guide

1. **Start with the warm canvas.** If you're using `#f5f5f5` or `#fafafa`, it's cold. Picoko's `#fbfaf8` has a faint red-green warmth — run it through a colour picker and verify the R channel is ≥ the B channel.
2. **Brand pink once per visual unit.** In a hero, `#fe1c71` should appear once — the primary CTA. In a card grid, once per card at most (the CTA or a badge). The moment pink appears twice at similar visual weight, the hierarchy collapses.
3. **Weight 900 means weight 900.** If your Outfit headline is rendering at 800 or 700, the brand's signature loudness is gone. Confirm via DevTools computed styles that font-weight resolves to 900.
4. **32px radius on CTAs is non-negotiable.** An 8px or 12px radius on the primary CTA loses the consumer-SaaS register. If the design system forces a global radius, override it for CTAs specifically.
5. **Surface step before shadow.** Add the `#ffffff` card on `#fbfaf8` canvas first — that surface step delivers most of the depth. Add shadow (`0 2px 12px`) as a secondary reinforcer, not the primary depth cue.
6. **Keep `#c0004e` in your palette for pink text.** Whenever you need to write pink text at body size (12–16px), switch from `#fe1c71` to `#c0004e` — darker enough to pass WCAG AA on white while still clearly brand-adjacent.
7. **Dark mode: warm the near-black.** Don't use `#111111` or `#0f0f0f`. Picoko's dark canvas is `#0d0c0b` — the warmth matches the light palette's temperature. A cool dark ground creates a jarring inconsistency when the user toggles.
8. **CTA verbs: outcome, not process.** Replace "Try our AI" with "Generate photos." Replace "Sign up today" with "Start free." Every CTA should complete the sentence "I want to ___."

---

*Theme-toggle audit: score=7, signals=[theme-toggle-button-text, prefers-color-scheme-css, tailwind-dark-class]*
Prose

1. Visual Theme & Atmosphere

Picoko opens on a warm near-white canvas — #fbfaf8, a shade of off-white with just enough warmth to avoid clinical sterility. Against that ground, pure white cards (#ffffff) feel slightly lifted rather than flat, the difference between a studio wall and a sheet of paper. The headline is set in Outfit at 72px / weight 900, tracking at -0.03em — unapologetically heavy, a shout not a whisper. “Get studio-quality product photos in seconds.” The type doesn’t hedge; neither does the product.

The single chromatic moment is #fe1c71 — a blazing hot magenta-pink that reads like neon on warm white. It belongs exclusively to primary CTAs and brand marks. Nothing else on the page is pink. The discipline is intentional: by quarantining the colour, every appearance of #fe1c71 reads as an invitation to act. Picoko is solving the e-commerce seller’s oldest problem — product photography is slow, expensive, and requires equipment nobody has — so the brand needs to feel fast, confident, and slightly electric. The pink delivers that in a 50×50px swatch.

The hero layout is a split composition: a left column carries the headline, sub-headline, and a 32px pill primary CTA; the right side is a before-after image comparison panel with a 16px radius, showing the transformation from a snapshot to a polished studio shot. The before-after reveal is the product’s thesis made visible in a single scroll-above-the-fold moment. Radii move from 8px on nav chips to 16px on cards and comparison panels, finally to 32px on pill CTAs — a deliberate escalation that maps visual importance to roundness.

The page flows through a series of clean white-card feature blocks sitting on the warm canvas, each section separated by generous vertical rhythm (80–128px). Platform badges — “Shopify”, “Amazon”, “TikTok Shop” — appear as neutral pill tags. Testimonial cards use the standard white-surface pattern. Pricing tiers sit on white cards with a brand-pink border on the featured tier. Throughout, the warm canvas does the connective tissue work; the white surfaces do the lifting.

Dark mode inverts the canvas to near-black (#0d0c0b, warm-tinted to match the light palette’s temperature) and the body copy to near-white (#f5f4f2). The brand pink #fe1c71 is invariant — it doesn’t need to change, because the contrast ratio on both backgrounds is sufficient for CTAs (large text / UI) and the electric quality is the point regardless of theme.

Key Characteristics

  • Warm near-white canvas #fbfaf8 — not paper-white, not cold grey, a considered warmth
  • Single brand accent #fe1c71 — hot magenta-pink, reserved exclusively for primary CTAs and brand marks
  • Outfit at 72px / weight 900 — heavy geometric grotesque; the loudest headline in the SaaS tier
  • 32px pill primary CTAs — the signature shape, consumer-SaaS register
  • 16px card and panel radius — before-after comparison panels, feature cards, pricing tiers
  • 8px nav-chip radius — smaller, tighter, purposeful
  • Before-after image slider hero — the product thesis demonstrated at first scroll
  • White-surface cards on warm canvas — subtle lift without shadows at rest
  • Light-first with a genuine dark mode toggle — both themes carry the brand pink
  • Platform-badge vocabulary — “Shopify / Amazon / TikTok Shop” tags anchor the e-commerce context

2. Color Palette & Roles

Primary

  • bg #fbfaf8 — warm near-white canvas; live-probed. The slightly warm tint — not #ffffff, not #f5f5f5 — is the canvas temperature that makes pure white cards feel lifted without shadows.
  • text #121110 — near-black body copy; live-probed. Warm-shifted slightly from neutral #111111.
  • surface #ffffff — pure white cards, panels, and comparison frame. Sits visibly above the #fbfaf8 canvas.
  • bg-alt #f5f3f0 — slightly deeper warm-white for inset zones, footer bands, and subtle section dividers.

Brand & Accent

  • brand #fe1c71 — hot magenta-pink; THE signature colour. Primary CTAs only. Do not use as a background fill larger than a button or badge.
  • brand-deep #e5005c — pressed / active state; approximately 12% darker in perceived value, maintains the pink family.
  • brand-soft rgba(254, 28, 113, 0.10) — pink wash for badge backgrounds, hover tints on selected nav items.
  • on-brand #ffffff — white text on pink CTAs; 3.3:1 contrast (AA large / UI, flag for small text — see Section 9).

Interactive

  • link #121110 — inline links match body copy in light mode; underlined for affordance.
  • link-hover #fe1c71 — brand pink on hover; the only chromatic shift in inline copy.
  • selected-bg rgba(254, 28, 113, 0.08) — active nav state, selected filter chip.
  • disabled #c3bfbb — faint warm-grey for disabled inputs and buttons.

Neutral Scale (Warm-tinted)

  • #121110 — near-black body copy.
  • #6b6663 — warm mid-grey for captions, helper text.
  • #9c9793 — quiet labels, placeholder copy.
  • #c3bfbb — disabled, faint echo text.
  • #e5e2de — light warm-grey hairlines and dividers.
  • #f5f3f0 — alt canvas, inset zones.
  • #fbfaf8 — canvas ground.
  • #ffffff — surface (card, panel).

All neutral steps are warm-tinted (red channel ≥ blue channel) to maintain palette cohesion with the warm canvas and the pink brand.

Surface & Borders

  • surface-0 (canvas)#fbfaf8 warm near-white.
  • surface-1 (card)#ffffff pure white.
  • surface-2 (elevated)#ffffff + rgba(18, 17, 16, 0.08) 0 4px 16px shadow.
  • borderrgba(18, 17, 16, 0.08) — 8% near-black hairline, warm-tinted.
  • border-strongrgba(18, 17, 16, 0.16) — emphasized rule, inputs at rest.
  • border-brandrgba(254, 28, 113, 0.30) — focus ring on inputs.

Shadow Colors

Picoko’s shadows use warm near-black at low opacity. The warm canvas absorbs shadows gently, so elevation is read primarily as surface step (#fbfaf8#ffffff) plus a subtle blur for floating elements. Brand-pink shadows are not used; the pink stays in fills.

Semantic

  • success — bg rgba(34, 197, 94, 0.10), text #15803d (green-700 on light).
  • warning — bg rgba(234, 179, 8, 0.12), text #a16207 (amber-700 on light).
  • danger — bg rgba(239, 68, 68, 0.10), text #b91c1c (red-700 on light).
  • info — bg rgba(254, 28, 113, 0.08), text #c0004e — borrows the brand pink at low saturation.

3. Typography Rules

Font Family

  • Display & Body: "Outfit", ui-sans-serif, system-ui, -apple-system, sans-serif — Google Fonts’ geometric grotesque. Outfit has rounded stems and open apertures that read as friendly and confident; at weight 900 it is explosive; at 400 it is clean and legible. One family carries the entire system.
  • Mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace — for numeric data in pricing tables, file size stats, and rare inline code.
  • OpenType features: kern and liga always enabled. tnum (tabular figures) and zero enabled in mono.

Hierarchy

RoleFontSizeWeightLine HeightLetter SpacingNotes
Display HeroOutfit72px9001.0-0.03emLive-probed hero h1; “in seconds” punchline
Display LGOutfit56px8001.05-0.025emSection hero headlines
H1Outfit48px8001.08-0.02emPage-level title
H2Outfit36px7001.15-0.015emMajor section heading
H3Outfit28px7001.2-0.01emFeature group heading
H4Outfit22px6001.3-0.005emCard heading, pricing tier name
H5Outfit18px6001.350Sub-card heading, nav section label
EyebrowOutfit12px6001.40.1emUppercase pre-label: “FOR SHOPIFY SELLERS”
Body LargeOutfit18px4001.60Hero lede, feature sub-headline
BodyOutfit16px4001.550Default body copy
Body MediumOutfit16px5001.50UI body — nav links, card labels
Body SmallOutfit14px4001.50Compact UI, helper text
LabelOutfit13px5001.40Form labels, table headers
CaptionOutfit12px5001.40.02emImage captions, footnotes
Caption Tabularmono12px5001.40Price numbers, credit counts
Codemono13px4001.550Rare inline code

Principles

  • Weight 900 at 72px is the brand’s loudest statement. Outfit at black weight is unusual in SaaS — most brands cap at 700. Picoko uses it to signal that the product does something dramatic (transforming amateur snaps into studio shots).
  • Single-family discipline. Outfit from eyebrow to body caption — no mixing with a serif or secondary sans. Consistency is the brand’s quiet confidence.
  • Negative tracking only at display sizes. -0.03em at 72px, tapering to 0 by h4. Below h4, tracking is neutral or slightly open for captions.
  • Optical sizing matters at 900. At maximum weight, letter spacing must be tighter than the font’s default — the -0.03em on the hero prevents the glyphs from feeling crowded against the heavy strokes.
  • 400 body, never lighter. Outfit at 300 loses the brand’s warmth and reads as generic. Body stays at 400; UI emphasis steps to 500.
  • Eyebrow at 0.1em tracking. Wider than most SaaS peers (0.05–0.08em) — the extra air at 12px makes the all-caps label feel designed rather than defaulted.
  • Mono only for numeric data. Credit counts, file sizes, pricing figures benefit from tnum (tabular figures) to align columns; body numbers use Outfit’s default proportional figures.
  • No italics in display. Italic weight is reserved for inline body emphasis and testimonial quotes. Never in headlines or CTAs.

4. Component Stylings

Buttons

Primary (Hot Pink Pill)

  • Background: #fe1c71. Text: #ffffff, Outfit 600 / 16px.
  • Padding: 12px 28px. Radius: 32px (pill). No border.
  • Hover: bg → #e5005c; transition 200ms ease-standard.
  • Active: bg → #cc0052.
  • Focus: 0 0 0 3px rgba(254, 28, 113, 0.35).
  • Use: Every primary CTA — Get started, Try for free, Generate now, See plans. The pill shape is non-negotiable.

Secondary (Outline Pill)

  • Background: transparent. Text: #121110, Outfit 600 / 16px.
  • Border: 1.5px solid rgba(18, 17, 16, 0.20).
  • Padding: 12px 28px. Radius: 32px (pill).
  • Hover: bg → rgba(18, 17, 16, 0.05), border → rgba(18, 17, 16, 0.35).
  • Focus: 0 0 0 3px rgba(18, 17, 16, 0.15).
  • Use: Twin to primary — See how it works, Watch demo, Compare plans.

Ghost (Quiet)

  • Background: transparent. Text: #121110, Outfit 500 / 15px.
  • Padding: 8px 16px. Radius: 8px. No border.
  • Hover: bg → rgba(18, 17, 16, 0.05).
  • Use: Nav links, inline secondary actions, footer utility links.

Icon Button

  • Background: #ffffff. Text/icon: #121110.
  • Padding: 10px. Radius: 8px. Border: 1px solid rgba(18, 17, 16, 0.10).
  • Hover: bg → #f5f3f0.
  • Use: Before-after panel zoom, social share, copy, close.

Cards

Feature Card

  • Background: #ffffff. Border: 1px solid rgba(18, 17, 16, 0.08). Radius: 16px. Padding: 24px.
  • Shadow: rgba(18, 17, 16, 0.06) 0 2px 12px at rest; rgba(18, 17, 16, 0.10) 0 6px 24px on hover.
  • Use: Capability tiles, feature highlights, platform icons.

Before-After Panel

  • Background: #ffffff. Border: 1px solid rgba(18, 17, 16, 0.10). Radius: 16px. Padding: 0.
  • Aspect ratio: 1 / 1 on square product images; 4 / 3 on scene-mode wider shots.
  • Images bleed to the 16px corner radius. Drag handle is brand pink.
  • Use: Hero and feature-section image comparison — the product’s primary demonstration.

Pricing Card

  • Background: #ffffff. Radius: 16px. Padding: 28px 24px.
  • Default: border 1px solid rgba(18, 17, 16, 0.08).
  • Featured: border 2px solid #fe1c71; optional brand-pink eyebrow “Most popular”.
  • Shadow on featured: rgba(254, 28, 113, 0.12) 0 8px 32px -4px.

Testimonial Card

  • Background: #ffffff. Border: 1px solid rgba(18, 17, 16, 0.06). Radius: 16px. Padding: 20px 24px.
  • Avatar: 40px circle. Quote text: Outfit 400 / 16px in #121110. Attribution: Outfit 500 / 13px in #6b6663.

Badges, Tags, Pills

Brand Badge — bg rgba(254, 28, 113, 0.10), text #c0004e, Outfit 600 / 12px, padding 4px 12px, radius 9999. Use: “Free plan”, “New”, “Beta”.

Neutral Tag — bg rgba(18, 17, 16, 0.06), text #6b6663, Outfit 500 / 12px, padding 4px 10px, radius 9999. Use: Platform names — “Shopify”, “Amazon”, “TikTok Shop”.

Eyebrow Label — no chrome; Outfit 600 / 12px / uppercase / 0.1em tracking, colour #9c9793. Use: Section pre-label (“TRUSTED BY 10,000+ SELLERS”).

Inputs / Forms

Text Input

  • Background: #ffffff. Border: 1px solid rgba(18, 17, 16, 0.16). Radius: 8px. Padding: 10px 14px.
  • Font: Outfit 400 / 16px. Placeholder: #9c9793.
  • Focus: 0 0 0 3px rgba(254, 28, 113, 0.20) ring; border → #fe1c71.
  • Error: border → #b91c1c, helper text in #b91c1c below.
  • Use: Sign-up email, onboarding fields, settings.

Select / Dropdown

  • Same appearance as text input at rest.
  • Open: #ffffff bg, 1px solid rgba(18, 17, 16, 0.12) border, 16px radius on the dropdown panel.
  • Option hover: bg → rgba(254, 28, 113, 0.06).
  • Header height 64px. Background rgba(251, 250, 248, 0.90) with backdrop-filter: blur(16px) — lets the warm canvas bleed through on scroll.
  • Logo: Picoko wordmark in #121110, Outfit 700.
  • Nav links: Outfit 500 / 15px, colour #121110, padding 6px 12px, radius 8px. Hover: bg → rgba(18, 17, 16, 0.05).
  • Right-side: ghost “Sign in” + brand pink pill “Get started” (Outfit 600 / 15px).
  • Mobile (<640px): hamburger collapses nav to a full-height sheet; links stack at 18px / 600. CTA remains visible at bottom of sheet.

Optional Components

Dropdown Menu — bg #ffffff, border 1px solid rgba(18, 17, 16, 0.08), radius 12px, shadow rgba(18, 17, 16, 0.12) 0 8px 24px -4px. Items: Outfit 400 / 15px, hover bg rgba(254, 28, 113, 0.06).

Tooltip — bg #121110, text #ffffff, radius 6px, padding 6px 10px, font Outfit 500 / 12px.

Toast — bg #ffffff, border 1px solid rgba(18, 17, 16, 0.10), radius 10px, padding 12px 16px, shadow rgba(18, 17, 16, 0.12) 0 6px 24px -4px. Icon-left pattern: success green, warning amber, error red.

Modal — bg #ffffff, radius 16px, shadow rgba(18, 17, 16, 0.20) 0 20px 48px -8px, max-width 540px. Backdrop: rgba(18, 17, 16, 0.50). Brand-pink close button on destructive actions.

5. Layout Principles

Spacing System

  • Base unit: 4px.
  • Scale: 0, 4, 8, 12, 16, 24, 32, 48, 64, 96, 128, 160.
  • Density: Chrome-level spacing is medium-dense (64–96px section rhythm); within-card spacing is tight (16–24px). The page reads approachable, not airy — a SaaS tool that respects the seller’s time.

Grid & Container

  • Page max width: 1280px — standard SaaS frame.
  • Site gutter: clamp(20px, 4vw, 56px) — comfortable on all viewports.
  • Grid: 12 columns with 24px gutters on desktop; collapses to 4 columns on tablet, 1 column on mobile.
  • Hero layout: 55/45 left/right split — headline and CTA left, before-after panel right. Below tablet, stacks vertically: headline → CTA → comparison panel.
  • Prose width: 720px maximum on text-heavy sections.

Whitespace Philosophy

Picoko’s whitespace is purposeful but not sparing. Section rhythm runs 80–128px between major blocks — generous enough to let each section breathe and register, tight enough to maintain urgency (the product is fast; the page should feel fast). Card padding is consistently 24px. Internal card spacing is 16px between elements. The warm canvas creates visual air even when spacing is moderate.

Section Cadence

  • Hero (split headline + before-after panel) → Platform logos band (Shopify, Amazon, TikTok Shop) → How it works (3-step feature ladder) → Before-after gallery grid → Testimonials (card strip) → Pricing (3-tier cards) → Final CTA band (pink-accented) → Footer.
  • The page alternates between warm-canvas ground and white-card clusters. Section breaks use vertical space; no horizontal rules. The pink CTA band near the footer uses #fe1c71 as a background — one of the rare instances where the brand colour fills a full-width surface (using #ffffff text above it).

6. Shapes & Radius Scale

TierValueUse
Micro2pxDecorative dividers, progress bar caps
Standard (sm)4pxSmall badges, compact chips, tag inner radius
Comfortable (md)8pxNav links, icon buttons, text inputs, dropdowns
Featured (lg)16pxCards, comparison panels, pricing tiers, modals
Large (xl)24pxHero panels on wide viewports, pricing featured highlight
Pill (CTAs)32pxPrimary and secondary call-to-action buttons — the signature
Full9999pxAvatar circles, status dots, badge-neutral pills

Picoko’s signature shape tension is the contrast between 8px utility elements and 32px pill CTAs. The nav links and inputs sit at 8px — functional, unobtrusive. The moment you look at a CTA, the 32px pill asserts “this is the action.” Cards at 16px sit in the middle register: friendly but structured. The before-after comparison panels also use 16px — the image content is editorial, not form-field utility.

There are no zero-radius surfaces at any user-visible level. Even progress bars cap their ends at 9999px. The brand has committed to roundness as a signal of approachability — a deliberate contrast to the sharp-cornered default of Shopify admin and Amazon Seller Central, where Picoko’s users spend their day.

7. Depth & Elevation

LevelTreatmentUse
0Flat — canvas #fbfaf8Page background, hero ground
1Surface step — #ffffffCards, comparison panels, nav bar (no shadow)
2rgba(18,17,16,0.06) 0 2px 12pxDefault card shadow at rest
3rgba(18,17,16,0.10) 0 6px 24pxHovered cards, sticky nav on scroll
4rgba(18,17,16,0.14) 0 8px 32px -4pxDropdowns, tooltips, toasts
5rgba(18,17,16,0.20) 0 20px 48px -8pxModals, overlays

Shadow Philosophy

Picoko’s primary depth cue is surface stepping (#fbfaf8 canvas → #ffffff card) — the same move as Krea’s tonal stepping, but in the warm-light register. Shadows appear as a secondary reinforcement: cards carry a faint 2px / 12px shadow at rest to give a paper-on-paper lift. On hover, the shadow deepens rather than the card scaling. Brand-pink shadows are used sparingly and only on the featured pricing tier, where a subtle rgba(254, 28, 113, 0.12) glow reinforces the recommended-plan hierarchy.

8. Interaction & Motion

Easing Curves

  • ease-standard: cubic-bezier(0.4, 0, 0.2, 1) — default for hover, focus, colour transitions.
  • ease-emphasized: cubic-bezier(0.2, 0, 0, 1) — modal entry, drawer slide.
  • ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1) — slight overshoot for the before-after drag handle snap; badge pop on first render.

Duration Buckets

  • Fast (120ms) — colour transitions, border-colour focus, link hover tint.
  • Standard (200ms) — button hover (bg, border), card shadow deepening, nav backdrop.
  • Slow (320ms) — modal enter/exit, drawer slide, page section fade-in.
  • Page (400ms) — route transitions, hero section reveal on load.

Per-Component Micro-States

  • Primary button hover: bg #fe1c71#e5005c over 200ms; no transform, no scale.
  • Secondary button hover: border opacity 0.20 → 0.35; bg fills to 5% near-black — both over 200ms.
  • Card hover: shadow 0 2px 12px0 6px 24px over 200ms; border opacity barely shifts.
  • Before-after drag: drag handle snaps to position with ease-spring, 120ms. Image reveal is clip-path: inset(0 X% 0 0) updating on pointermove — no easing (direct tracking); snap to final position on release uses ease-spring 200ms.
  • Input focus: pink ring fades in over 120ms; border shifts to #fe1c71 simultaneously.
  • Badge pop: on first appearance (New, Beta), badge scales 0.8 → 1.0 with ease-spring over 240ms.
  • Nav hover: bg fill 0 → rgba(18,17,16,0.05) over 120ms.

Page Transitions

Below-fold sections use IntersectionObserver to fade in at 85% viewport, 320ms duration, 8px translate-up. No looping animations at rest. The before-after hero panel may auto-reveal on load (slides from 100% to 50% coverage) using ease-emphasized over 800ms — a one-shot demo of the product.

Reduced Motion

@media (prefers-reduced-motion: reduce) — all transforms collapse to opacity-only; before-after auto-reveal skips the slide and cuts to final position; ease-spring replaced with ease-standard; durations halve.

9. Accessibility & A11y

Contrast Pairs

  • #121110 on #fbfaf8 (body text on canvas): ~12.6:1 — AAA at all sizes.
  • #121110 on #ffffff (body on card): ~13.2:1 — AAA at all sizes.
  • #6b6663 on #fbfaf8 (muted captions on canvas): ~5.1:1 — AA at body sizes.
  • #9c9793 on #ffffff (soft helper on card): ~3.8:1 — AA large only; keep at 14px+ or not relied on for essential info.
  • #ffffff on #fe1c71 (on-brand text): ~3.3:1 — AA large / UI (passes for text ≥18px normal or ≥14px bold, and for UI components). Fails for small body text (<18px / <14px bold). Use #fe1c71 as a CTA fill with white text only at the button’s 16px / 600 size or larger. Never as a background for small paragraph text.
  • #fe1c71 on #ffffff (pink text on white): ~3.3:1 — same caveat. Acceptable for large display labels and icon glyphs; not for 12px body copy.
  • #c0004e on #ffffff (info-text on card): ~5.5:1 — AA at body sizes. Prefer #c0004e over #fe1c71 wherever pink text appears at small sizes.

Focus Indicators

  • Default ring: 0 0 0 3px rgba(254, 28, 113, 0.35) with 2px offset on all interactive elements.
  • Inputs: ring expands from the border — border shifts to #fe1c71, ring adds at 3px / 20% opacity.
  • All interactive surfaces show a visible focus state. The pink ring provides clear contrast on both the warm canvas and white card surfaces.

ARIA Patterns

  • Navigation: <nav aria-label="Main"> with skip-link to #main-content.
  • Before-after slider: <div role="slider" aria-label="Before / after comparison" aria-valuemin="0" aria-valuemax="100" aria-valuenow="50"> — drag handle keyboard-operable with arrow keys.
  • Before image: <img alt="Product photo before: original smartphone snapshot on wooden table">.
  • After image: <img alt="Product photo after: studio-quality white background with professional lighting">.
  • Dialog: role="dialog" aria-modal="true" aria-labelledby with focus trap and Esc-to-close.
  • Live regions: aria-live="polite" for generation-complete status messages.

Keyboard Navigation

  • Tab order: skip-link → masthead nav → primary CTA → before-after panel drag handle → feature section → pricing → footer.
  • Before-after slider: Left/Right arrow keys adjust reveal by 5%; Home/End go to 0%/100%.
  • Esc closes dropdowns, modals, and the mobile nav sheet.

Screen Reader Hints

  • Before-after panels carry descriptive alt text on both images.
  • Icon-only buttons carry aria-label.
  • The brand-pink featured pricing badge carries aria-label="Recommended plan".

Reduced Motion

Honoured globally. Before-after auto-reveal skips animation; all translate-up fades collapse to opacity-only; badge pop removes the scale.

10. Responsive Behavior

Breakpoints

NameWidthUse
Mobile< 640pxSingle-column stack; full-bleed comparison panels
Tablet640–1024px2-column feature grid; headline above panel stacked
Desktop1024–1280pxFull split hero; 3-column feature grid; full nav
Wide> 1280pxPage locks at 1280px; gutters expand

Touch Targets

  • Minimum tap target: 44×44px on all interactive elements.
  • Primary pill CTAs on mobile: full-width (100%) at 48px height minimum.
  • Before-after drag handle: 44px touch area regardless of visual handle size.
  • Nav hamburger: 44×44px minimum.

Collapsing Strategy

  • Header: full nav at ≥1024px; hamburger sheet below. Primary CTA always visible — on mobile it migrates to the bottom of the hamburger sheet and bottom of the hero section.
  • Hero: 55/45 split → headline-first stack (headline → CTA → comparison panel) on mobile.
  • Headline: 72px → 52px → 40px across desktop / tablet / mobile.
  • Feature grid: 3-up → 2-up → 1-up across breakpoints.
  • Section spacing: 128px → 96px → 64px across sizes.
  • Card padding: 24px → 20px on mobile.

Image Behavior

  • Before-after panels: serve srcset with 2× resolution assets for Retina; aspect ratio locked via CSS aspect-ratio. On mobile, height is capped at 100vw (square).
  • Feature images: native lazy-loading; descriptive alt.
  • Hero panel: may use a static image on initial paint, swapping to interactive comparison on load event.

Container Queries

Used inside feature cards to switch icon-top to icon-left layout when the card container width crosses 280px — allows the 3-column grid to reflow gracefully without global breakpoint coupling.

11. Content & Voice

Tone

Fast, confident, and seller-first. Picoko writes for the Shopify merchant or Amazon seller who is juggling product launches with zero budget for a photographer. The copy is direct, quantified where possible (“studio-quality photos in seconds”), and never condescending. No AI hype jargon (“harness the power of…”); just the outcome the seller cares about.

Microcopy Patterns

  • Button verbs: “Get started,” “Try for free,” “Generate photos,” “See plans,” “Upload product.” Never “Begin your journey” or “Unlock AI power.”
  • Eyebrows / labels: “FOR SHOPIFY SELLERS,” “USED BY 10,000+ BRANDS,” “NO PHOTOGRAPHER NEEDED.” Plain, uppercase, factual.
  • Feature descriptions: one sentence — the capability, then the benefit. “Remove backgrounds in one click — your product, ready for any platform.”
  • Error messages: “Couldn’t generate that image. Try a different background or upload a clearer photo.” — diagnose, suggest, move on.
  • Success confirmations: “Photo generated. Download or edit.” Brief, actionable.
  • Loading states: “Generating…” with a subtle pink progress bar. No “Our AI is thinking magical thoughts…”

Empty States

  • “Upload your first product photo to get started.” — clear invitation, no guilt.
  • “No generated photos yet. Try ‘Studio background’ to create your first batch.” — point to a specific action.
  • Never uses “Oops!” Never implies the user did something wrong unless they actually did.

CTA Verb Conventions

  • Primary hero: “Get started free,” “Generate photos now,” “Try Picoko”
  • Secondary hero: “See how it works,” “Watch a demo”
  • Pricing: “Start free,” “Choose Pro,” “Contact sales”
  • Footer: “Pricing,” “Integrations,” “Blog,” “Help”

The voice is outcome-first: tell the seller what they’ll have (studio-quality photos, in seconds, for Shopify), not what Picoko is doing internally. The product is the magic; the copy is the shortcut to the result.

12. Dark Mode & Theming

Picoko ships a genuine light + dark theme toggle — a first-class UI element in the nav, not an afterthought. The live-probed default is light (the warm near-white canvas #fbfaf8). Dark mode inverts to a warm near-black canvas (#0d0c0b) with near-white body copy (#f5f4f2).

What Changes in Dark Mode

  • Canvas: #fbfaf8#0d0c0b. Warm temperature maintained in the dark shift (warm near-black, not cool neutral).
  • Surface: #ffffff#1f1e1c. Cards remain visibly lighter than the canvas.
  • Text: #121110#f5f4f2. Body copy stays near-white, not full white, to avoid harshness.
  • Borders: rgba(18,17,16,0.08)rgba(245,244,242,0.08). Same 8% opacity, flipped channel.
  • Shadows: warm-dark at low opacity replace the warm-light versions.

What Does Not Change

  • Brand pink #fe1c71 — invariant across both themes. The contrast ratio on dark canvas (#0d0c0b) is approximately 3.9:1 — slightly higher than on light, still AA-large for CTAs. The electric quality of the pink is maintained and arguably enhanced against the dark ground.
  • Radius scale — unchanged.
  • Typography — unchanged; Outfit at all weights and sizes is stable across themes.
  • Motion — unchanged.

Theme Persistence

Preference is written to localStorage under a key (e.g. picoko-theme). On next visit, the stored value is applied before first paint (inline script in <head>) to prevent flash of wrong theme. data-theme="light" or data-theme="dark" on <html> drives all CSS custom property swaps via :root[data-theme="dark"] { ... } blocks. prefers-color-scheme is the initial fallback when no localStorage key exists.

Before-After Panels in Dark Mode

The comparison images themselves are unaffected by theme (they show the user’s product). The panel frame — border, drag handle — flips to dark-theme tokens. The brand-pink drag handle remains #fe1c71 in both themes.

13. Lineage & Influences

Picoko inherits the joyful-SaaS playbook refined by Framer, Luma, and modern freemium B2C tools: a geometric sans at maximum weight, a single electric accent colour quarantined to primary actions, and a warm canvas that reads approachable rather than corporate. The 32px pill CTA places Picoko in the same shape language as Notion, Pitch, and early Framer — a register that says “this is a tool people choose, not enterprise software people are assigned.”

Outfit as the type system is the key differentiator from the design-tool SaaS tier (which defaults to Inter, Söhne, or Suisse Intl). Outfit’s rounded stems and open apertures read as warm and friendly at 400; at 900 they become bold without feeling aggressive. The choice signals that Picoko’s user is a Shopify merchant, not a design-system engineer.

The before-after comparison slider is a well-established pattern in image-editing SaaS — Luminar, Lightroom mobile, Canva’s background remover — and Picoko uses it as the hero’s primary product demonstration. It’s a borrowed pattern, executed at 16px radius with a brand-pink drag handle to make it distinctly Picoko.

What Picoko rejects: dark canvases (Krea, Midjourney, Runway), monochrome restraint (Linear, Vercel), editorial neutrality (Stripe), and AI-purple gradients (every third AI startup). The brand wants to be unmistakably warm, bright, and fast — the opposite register from the creative-AI gallery aesthetic.

Named influences:

  • Krea — AI image-generation SaaS peer; Picoko applies similar single-accent discipline to the opposite palette (warm light instead of absolute dark). https://krea.ai
  • Midjourney — reference for AI image-generation brand positioning; Picoko explicitly differentiates by going warm/light where Midjourney goes dark/editorial. https://www.midjourney.com
  • Shopify — primary distribution platform for Picoko’s end-customers; Polaris design language informs e-commerce UI conventions that sellers already know. https://www.shopify.com
  • Outfit (Google Fonts) — the typeface that carries the entire system; geometric grotesque with rounded stems chosen for friendly-SaaS warmth at heavy weights. https://fonts.google.com/specimen/Outfit
  • Framer — modern playful-SaaS aesthetic reference: pill CTAs, warm canvas, heavy geometric sans, freemium conversion UX patterns. https://www.framer.com
  • Canva — before-after image comparison patterns; approachable creative-tool register aimed at non-designer users. https://www.canva.com

14. Do’s and Don’ts

Do

  • Do use #fe1c71 for every primary CTA — and only for primary CTAs and brand marks. One use, one role, maximum impact.
  • Do set hero headlines in Outfit weight 900 at 72px with -0.03em tracking. The heaviness is the brand’s loudest signal.
  • Do maintain the warm canvas temperature. #fbfaf8 is not #f5f5f5 or #fafafa — the warmth matters.
  • Do use 32px pill shape for primary and secondary CTAs. Never 8px or straight-edge for a primary action.
  • Do use 16px radius on cards and comparison panels — the brand’s mid-tier signature shape.
  • Do keep white cards (#ffffff) on the warm canvas (#fbfaf8) — the surface step is the primary depth cue.
  • Do use #c0004e (darker pink) for small-size pink text where contrast matters — never #fe1c71 at body size.
  • Do show a before-after image comparison as the hero’s right-column content — it demonstrates the product thesis in a single glance.
  • Do add the aria-label and keyboard controls on the before-after slider — it’s a non-standard interactive element.
  • Do keep the brand pink invariant across light and dark themes.
  • Do pace sections at 80–128px vertical rhythm. The page should feel fast but not anxious.
  • Do write CTA verbs in outcome-first imperative: “Get studio-quality photos,” “Generate now,” “See plans.”

Don’t

  • Don’t use #fe1c71 as a background for a full-width section unless it is an intentional CTA band (bottom of page). A pink hero canvas would overwhelm.
  • Don’t use #fe1c71 as body text at small sizes — the 3.3:1 contrast fails WCAG AA for text below 18px normal / 14px bold.
  • Don’t mix a second accent colour into the system. The pink’s impact depends on isolation.
  • Don’t use weights below 600 for CTAs, or below 400 for body. Outfit at 300 loses brand warmth.
  • Don’t use a dark canvas for the marketing surface — the product’s visual brand is warm, light, and fast.
  • Don’t use shadow-only depth — always pair with the surface step (#fbfaf8#ffffff).
  • Don’t apply negative tracking below h4 — Outfit’s openness at body sizes is part of its warmth; closing the tracking looks forced.
  • Don’t use sharp 0px or 4px radius on CTAs — pill shape is the non-negotiable signature.
  • Don’t use purple, indigo, or gradient-mesh AI aesthetics — Picoko differentiates by being the warm, fast, approachable tool in the category.
  • Don’t add exclamation marks or hyperbole to CTA copy. The product’s value is self-evident; the copy just names the outcome.
  • Don’t use Outfit weight 900 below 36px — it becomes too heavy and loses legibility at body scales.
  • Don’t ignore the warm temperature shift in the dark palette. Dark mode uses warm near-black (#0d0c0b), not neutral cool dark (#111111).

15. Agent Prompt Guide

Quick Color Reference

Light theme:
bg: #fbfaf8
bg-alt: #f5f3f0
surface: #ffffff
text: #121110
text-muted: #6b6663
text-soft: #9c9793
brand: #fe1c71
brand-deep: #e5005c
on-brand: #ffffff
border: rgba(18, 17, 16, 0.08)
border-strong: rgba(18, 17, 16, 0.16)

Dark theme (derived):
bg: #0d0c0b
surface: #1f1e1c
text: #f5f4f2
text-muted: #9c9793
brand: #fe1c71  ← same
border: rgba(245, 244, 242, 0.08)

Example Component Prompts

  1. “Create a Picoko-style hero — warm near-white #fbfaf8 canvas split 55/45. Left column: 72px headline in Outfit weight 900, tracking -0.03em, colour #121110; 18px / 400 sub-headline in #6b6663; one hot-pink #fe1c71 pill CTA ‘Get started free’ at 32px radius / Outfit 600 / 16px / padding 12px 28px. Right column: 1:1 before-after image comparison panel, white background, 16px radius, brand-pink drag handle at centre.”

  2. “Design a Picoko feature card — #ffffff background on #fbfaf8 canvas, 1px solid rgba(18,17,16,0.08) border, 16px radius, 24px padding, rgba(18,17,16,0.06) 0 2px 12px shadow. Icon at top (48px, brand-pink). Heading: Outfit 700 / 22px / #121110. Body: Outfit 400 / 16px / #6b6663. On hover, shadow deepens to 0 6px 24px.”

  3. “Build a Picoko pricing tier — 3 cards in a row on #fbfaf8 canvas. Default cards: #ffffff, 16px radius, 1px solid rgba(18,17,16,0.08) border, 28px×24px padding. Featured (Pro) card: 2px solid #fe1c71 border, rgba(254,28,113,0.12) 0 8px 32px -4px shadow, pink eyebrow ‘Most popular’ at Outfit 600 / 12px / uppercase. Plan price: Outfit 800 / 48px. CTA: full-width pink pill ‘Choose Pro’ 32px radius.”

  4. “Compose a Picoko navigation — 64px header, rgba(251,250,248,0.90) background with backdrop-filter: blur(16px). Wordmark left: Outfit 700 / #121110. Links centre: Outfit 500 / 15px / #121110, 8px radius hover fill rgba(18,17,16,0.05). Right: ghost ‘Sign in’ + pink pill ‘Get started’ at #fe1c71 / #ffffff / Outfit 600 / 15px / 32px radius / 12px 24px padding.”

  5. “Render a Picoko before-after comparison panel — #ffffff surface, 16px radius, 1:1 aspect ratio, no padding (images bleed to radius). Left half shows original product snapshot; right half shows AI-generated studio shot on white background. Vertical drag handle at 50% position: 40px tall, #fe1c71 pill-shaped bar, white arrow icons. Hover hint: ‘Drag to compare’ in Outfit 500 / 12px / #9c9793 fading in at 500ms.”

  6. “Create a Picoko platform badge row — 3 neutral pill badges in a horizontal flex. Each: bg rgba(18,17,16,0.06), text #6b6663, Outfit 500 / 12px, padding 6px 14px, radius 9999. Labels: ‘Shopify’, ‘Amazon’, ‘TikTok Shop’. Preceded by an eyebrow label ‘WORKS WITH’ in Outfit 600 / 12px / uppercase / 0.1em tracking / #9c9793.”

Iteration Guide

  1. Start with the warm canvas. If you’re using #f5f5f5 or #fafafa, it’s cold. Picoko’s #fbfaf8 has a faint red-green warmth — run it through a colour picker and verify the R channel is ≥ the B channel.
  2. Brand pink once per visual unit. In a hero, #fe1c71 should appear once — the primary CTA. In a card grid, once per card at most (the CTA or a badge). The moment pink appears twice at similar visual weight, the hierarchy collapses.
  3. Weight 900 means weight 900. If your Outfit headline is rendering at 800 or 700, the brand’s signature loudness is gone. Confirm via DevTools computed styles that font-weight resolves to 900.
  4. 32px radius on CTAs is non-negotiable. An 8px or 12px radius on the primary CTA loses the consumer-SaaS register. If the design system forces a global radius, override it for CTAs specifically.
  5. Surface step before shadow. Add the #ffffff card on #fbfaf8 canvas first — that surface step delivers most of the depth. Add shadow (0 2px 12px) as a secondary reinforcer, not the primary depth cue.
  6. Keep #c0004e in your palette for pink text. Whenever you need to write pink text at body size (12–16px), switch from #fe1c71 to #c0004e — darker enough to pass WCAG AA on white while still clearly brand-adjacent.
  7. Dark mode: warm the near-black. Don’t use #111111 or #0f0f0f. Picoko’s dark canvas is #0d0c0b — the warmth matches the light palette’s temperature. A cool dark ground creates a jarring inconsistency when the user toggles.
  8. CTA verbs: outcome, not process. Replace “Try our AI” with “Generate photos.” Replace “Sign up today” with “Start free.” Every CTA should complete the sentence “I want to ___.”

Theme-toggle audit: score=7, signals=[theme-toggle-button-text, prefers-color-scheme-css, tailwind-dark-class]

Ship with this

Drop picoko into your project, then ship the actual sections in an afternoon.

1 · install design
npx @webdesignhot/design-md add picoko
2 · ship landing page
npx agentkit init --design picoko
How AgentKit reads DESIGN.md