Skip to content

Now in the official shadcn registry directory.

Start free
Back to gallery
design tools · saas

Maze

The user-research platform that decided its homepage should read like the publication it serves rather than the dashboard it sells. Maze runs a custom Phonic neo-grotesque at weight 300 across the entire display tier on a near-pure-white canvas, anchors a scroll-pinned three-state hero composition, and lets a single semantic accent green appear as a printer's mark — never as a CTA fill. Linear-eased opacity transitions and a non-Tailwind spacing scale (with 22 and 26 px increments tuned for Phonic's x-height) signal an editorial-research register where most B2B SaaS marketing settles for stock-photo enterprise tone.

maze.coAdded 2026-04-29
Maze - Desktop

Editorial disclaimer

Editorial note

This entry documents observable design-language patterns for educational transfer and AI-agent briefing. Screenshots and trademarks are property of their respective owners. AI2 Design is not affiliated with or endorsed by the featured brand. Inspiration here is about language and rhythm - do not reproduce brand identity, logo, product copy, or proprietary features.

Fair Use & Gallery Policy
FreePrompt kit

Copy the full design language into your agent

A typed, paste-ready design system brief - philosophy, tokens, rules, techniques, and fitness checks. Drop it into Claude, Cursor, v0 or any coding agent and it builds in Maze’s language, not just a screenshot.

Paste into your agent. No signup, no cost.
Light-first typographic-monolith aesthetic on a near-pure-white canvas (#ffffff, 33 measured background occurrences) with #000000 as the dominant reading layer (1571 text occurrences) and #212121 carrying secondary emphasis (138 occurrences). Single-family display discipline: Phonic neo-grotesque at weight 300 (Light) across all hero/section headlines (12-58 px, line-heights tight at 1.05-1.1). Body text in ui-sans-serif fallback at weight 400. No chromatic brand accent — the marketing surface refuses a paint color for CTAs; the only saturated hex on the page is a one-element inline link blue (#1863dc) reserved for body prose. Motion is GSAP timeline-driven (runtime evidence: `window._gsap`); easings mix linear + cubic-bezier(0.4, 0, 0.2, 1) + cubic-bezier(0, 0, 0.2, 1) + ease-in-out; durations span 0.15s / 0.25s / 0.4s / 0.5s for interactive feedback alongside long ambient drift up to 60s. Custom non-Tailwind spacing scale (1 / 4 / 8 / 10 / 12 / 16 / 20 / 22 px dominant; 22 is the signature off-grid step). Container max 1280 px with narrow tiers anchored on the captured layout. Sticky-pinned multi-frame hero composition (h:200vh container) drives the storytelling.
Main prompt
Use this capture as a design language transfer brief for my project. Adopt the palette (near-pure-white #ffffff canvas + #000000 dominant text + #212121 secondary text + #d0d5d2 muted surfaces + a single reserved inline-link #1863dc — and no other chromatic accent, no brand paint, no gradient hero), typographic discipline (Phonic Light weight 300 for display only, ui-sans-serif fallback for body and UI in 400/700 weights), 1-22 px-anchored custom spacing scale (preserve the 22 px off-grid step for editorial rhythm), 1280 px max container with the captured narrow tiers, GSAP timeline-driven motion with mixed easings (linear + cubic-bezier(0.4, 0, 0.2, 1) + cubic-bezier(0, 0, 0.2, 1) + ease-in-out) and 0.15s / 0.25s / 0.4s / 0.5s timing signatures, and sticky-pinned multi-frame hero composition pattern across every page and component I ship. Treat this as my project's constitution — any new component I author should feel like it ships from the same studio. Apply the language, not the source brand's specific copy or identity. When I ask you to build a page or component, enforce these rules by default, and call out any decision that deviates.
Layout
Grid
Content width
Bounded
Framing
Flat
Grid strength
Medium

Light-first canvas (#ffffff with 33 measured background occurrences) paired with #000000 doing the dominant reading layer (1571 text occurrences) and #212121 carrying secondary text emphasis (138 occurrences). Cool gray #d0d5d2 (5 occurrences) for muted surfaces, dividers, input borders. The marketing surface refuses a chromatic brand accent — no paint hex carries CTAs or hero ornament. The only saturated hex measured is #1863dc, a one-element inline link reserved for body prose. The single gradient captured is incidental, not a brand vehicle.

Mode strategylight-first
  • Pure black #000000 (weights 300/400) — primary reading text and display, 1571 measured text occurrences
  • Slate dark #212121 — secondary text emphasis, 138 measured text occurrences
  • Off-white #ffffff — primary canvas background, 33 measured surface occurrences
  • Cool gray #d0d5d2 — muted surfaces, dividers, input borders, 5 measured surface occurrences
  • Reserved blue #1863dc — inline link only, never a fill or button (1 measured text occurrence)
  • No chromatic brand accent — buttons resolve as black-on-white or white-on-black; no brand paint, no gradient hero

Gradients (paste-ready)

One incidental gradient captured in the layout — not a brand atmosphere vehicle. The marketing register depends on flat color and typographic weight, not gradient warmth.
  • Single display family: Phonic (custom neo-grotesque, self-hosted). Body fallback: ui-sans-serif system stack at weight 400/700.
  • Display weight discipline: weight 300 (Light) is the entire display tier from 22 px to 58 px headlines. Do not substitute Phonic Medium or Bold for display — the light-weight commitment is the brand's posture.
  • Display sizes captured: 22 / 28 / 46 / 58 px on hero and section headlines. Line-heights tight at 1.05-1.1.
  • Body sizes: 14 / 16 / 17 px ui-sans-serif. Body line-height generous at 1.4-1.7.
  • Bold reserved for body emphasis only (weight 700 ui-sans-serif). Phonic never appears in bold.
  • No italic in display or body — italic is not part of the brand's typographic vocabulary.
  • Paragraph max 55-65 ch at 16 px body; hero copy holds 35-45 ch at 46-58 px Phonic Light for editorial pacing.
  • Custom non-Tailwind scale: 1 / 4 / 8 / 10 / 12 / 16 / 20 / 22 px dominate the captured layout, with 24 / 26 / 32 / 40 px appearing at lower frequency. The 22 px increment is the signature off-grid step that breaks the 4 px utility rhythm.
  • Container max-width 1280 px, with narrow content tiers captured for mobile clusters, body paragraphs, and editorial pull-quotes.
  • Section vertical rhythm: editorial pacing rather than fixed cadence — driven by argument structure, not section count.
  • Card and pull-quote padding: 16-22 px on desktop (use the 22 px off-grid step for editorial rhythm), 8-16 px on mobile.
  • Gutter values for flex/grid: 4 / 8 / 12 / 16 px — tighter than typical Tailwind, supporting the typographic-first composition.
Surface styleFlat
  • Primary elevation is no elevation — the brand depends on flat type-on-paper reading register. Cards differentiate via 1 px borders or background shift, not drop shadow.
  • Border-driven differentiation: 1 px solid borders at #d0d5d2 for card outlines, no rounded shadow stacks.
  • Layering depth comes from typographic scale and whitespace placement, not from blur or elevation tokens.
  • Focus state uses a 2 px solid ring on #000000 — high-contrast, no blur, no glow.

Techniques

Border-only card delimiter

Cards default to `border: 1px solid #d0d5d2; background: #ffffff`. Hover holds the same border with no fill change. Never switch to drop-shadow for elevation — stay flat.

Whitespace-driven section break

Sections separate via vertical whitespace + a 1 px hairline rule, never via shadow or background-color shift. The reading pace stays uninterrupted.

Radii4 / 8 / 12 / 16 / 20Icon treatmentOutline + filled mix — line icons for nav and UI; outlined SVG glyphs for product method illustrationsIcon setsCustom Maze icon families (maze-sm-icons, maze-m-icons, maze-lg-icons — self-hosted woff2), Lucide-style line icons for navigation
  • Pick radius from the 4 / 8 / 12 / 16 / 20 px scale; never half-pixel or magic values.
  • Buttons and inputs: 8-12 px radius (medium); cards and pull-quotes: 16-20 px (the upper end of the scale, for editorial weight).
  • Avoid pill / fully-rounded shapes outside of method-tag chips — Maze's geometry is rectangular-with-corners-softened, not stadium-rounded.
  • Icons stay 16-22 px in UI; method-tag chips at 14 px text + 4 px vertical padding.
  • Hero CTA button (primary dark)
    background
    #000000
    color
    #ffffff
    padding
    12px 22px
    borderRadius
    8px
    fontSize
    14px
    fontWeight
    400
    fontFamily
    ui-sans-serif, system-ui, sans-serif
    transition
    opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1)

    Tailwind

    inline-flex items-center justify-center rounded-lg bg-black px-[22px] py-3 font-sans text-sm font-normal text-white transition-opacity duration-300 ease-[cubic-bezier(0.4,0,0.2,1)] hover:opacity-80
  • Hero CTA button (secondary outline)
    background
    transparent
    color
    #000000
    padding
    12px 22px
    borderRadius
    8px
    border
    1px solid #d0d5d2
    fontSize
    14px
    fontWeight
    400
    fontFamily
    ui-sans-serif, system-ui, sans-serif
    transition
    background-color 0.25s cubic-bezier(0.4, 0, 0.2, 1)

    Tailwind

    inline-flex items-center justify-center rounded-lg border border-[#d0d5d2] bg-transparent px-[22px] py-3 font-sans text-sm font-normal text-black transition-colors duration-300 ease-[cubic-bezier(0.4,0,0.2,1)] hover:bg-[#f7f7f7]
  • Hero display headline (Phonic Light)
    fontFamily
    Phonic, ui-sans-serif, system-ui, sans-serif
    fontStyle
    normal
    fontSize
    58px
    fontWeight
    300
    lineHeight
    63.8px
    letterSpacing
    0
    color
    #000000

    Tailwind

    font-[Phonic] text-[58px] font-light leading-[63.8px] tracking-normal text-black
  • Inline link (reserved blue)
    display
    inline
    color
    #1863dc
    textDecoration
    underline
    textUnderlineOffset
    2px
    fontWeight
    400

    Tailwind

    inline text-[#1863dc] underline underline-offset-2 font-normal
  • Method tag chip (Recruit / Research / Analyze)
    display
    inline-flex
    padding
    4px 12px
    borderRadius
    20px
    background
    #ffffff
    border
    1px solid #d0d5d2
    color
    #000000
    fontSize
    14px
    fontWeight
    400
    fontFamily
    ui-sans-serif, system-ui, sans-serif

    Tailwind

    inline-flex items-center rounded-full border border-[#d0d5d2] bg-white px-3 py-1 font-sans text-sm font-normal text-black
LevelexpressiveDurations0.15s / 0.25s / 0.4s / 0.5s

Easings

linearcubic-bezier(0.4, 0, 0.2, 1)cubic-bezier(0, 0, 0.2, 1)ease-in-out
HoverOpacity transitions on links/buttons: 0.25s cubic-bezier(0.4, 0, 0.2, 1) — material-style smooth feedback., Background and border color transitions: 0.4-0.5s with cubic-bezier(0, 0, 0.2, 1) — slow ease-out for editorial register., All hover motion strictly opacity or color — no transform, no scale, no translate on micro-interactions.

Scroll patterns

  • Sticky-pinned multi-frame hero (h:200vh container) — multiple absolute-positioned hero state divs cross-fade via GSAP timeline as scroll progresses.
  • Section reveals: opacity fade-in, 0.5s linear or ease-in-out, triggered by IntersectionObserver. Translate is reserved for hero choreography only.
  • Atmospheric backgrounds (illustration cards behind hero) drift continuously via long-cycle linear motion (durations up to 60s) — slow ambient, not stutter.
  • Two timing tiers: interactive feedback (0.15-0.25s) and section-level reveals (0.4-0.5s). A separate ambient tier reaches 60s for hero atmospheric drift.
  • Easing mix: linear for ambient drift, cubic-bezier(0.4, 0, 0.2, 1) and (0, 0, 0.2, 1) for interactive feedback, ease-in-out for section reveals. The mix is intentional — single-easing systems feel mechanical at this composition.
  • GSAP runtime is required for the sticky-pinned hero choreography (`window._gsap` evidence in capture). CSS-only transitions cannot stitch the multi-frame timeline reliably.
  • Respect `prefers-reduced-motion` — opacity transitions become instant, sticky-pinned hero snaps to its first frame, ambient drifts pause.
  • Buttons confirm with a 0.25s opacity dim — not a translate or scale. Motion is for reveal, not affordance.
  • Links underline on hover with the reserved #1863dc inline-link blue — never an accent shift on display text.
  • Method-tag chips on hover hold their #d0d5d2 border, no fill change — the chip is a label, not a button.
  • Cursor stays default on body content; pointer reserved for genuine interactives.
Approachmobile-first

Bootstrap-legacy adjacent: sm=576 (not Tailwind 640) / md=768 / lg=1024 / xl=1280 / 2xl=1536. Container narrows on mobile to the captured tiers and expands to 1024-1280 on desktop. The sticky-pinned hero remains pinned across all breakpoints; states stack vertically on the smallest screens (no horizontal scroll).

  • Mobile (< 576 px): single column, narrow container, vertical rhythm 40-64 px between sections, hero condensed to a single headline state on the smallest screens.
  • Tablet (576-1024 px): two-column hero permitted; method tags wrap to two rows.
  • Desktop (> 1024 px): full grid, 1280 px max container, sticky-pinned hero plays at full h:200vh through GSAP timeline.
  • Phonic Light display sizes: 58 px hero / 46 px section / 28 px sub on desktop; 40 / 32 / 22 px on mobile.
  • Pure black #000000 on near-pure-white #ffffff yields ~21:1 contrast — exceeds WCAG AAA. Maintain this ratio for body reading; never drop body text below #212121 (~16:1, AAA).
  • Focus ring is 2 px solid #000000 — high-visibility, no blur. Never remove `:focus-visible` outline in favor of a color-only cue, since the brand has no chromatic accent to lean on.
  • Phonic Light at weight 300 only used for sizes ≥ 22 px to maintain readability; never set body or UI text in Phonic Light.
  • Reserved inline-link #1863dc on white yields ~7:1 contrast — passes AAA. Use it only for inline body links, never as a button or fill.
  • Sticky-pinned hero must respect `prefers-reduced-motion` — snap to first frame, no scroll-driven opacity fade, ambient drifts pause.
  • Method-tag chips include both visual icon and text label; never style a raw `<div>` as a tag without a semantic role.
Next.js (likely)Tailwind-adjacent CSS with custom spacing scalePhonic custom font self-hosted (along with Roobert and Roobert Pro families on the same surface)Custom Maze icon font families (maze-sm-icons, maze-m-icons, maze-lg-icons — self-hosted woff2)GSAP runtime for sticky-pinned hero choreography

Phonic, Roobert, and Roobert Pro all self-hosted (45 @font-face declarations captured in total — Phonic carries display, Roobert variants supplement body/UI roles, three Maze-specific icon font families carry product glyphs). Tailwind-adjacent setup with custom spacing tokens including the 22 px off-grid step. Sticky-pinned hero composition implemented via CSS sticky positioning on an h:200vh container with multiple absolute children whose opacity is animated by a GSAP scroll timeline.

  • Self-host Phonic via `next/font/local`; preload only Phonic Light (weight 300). Body/UI uses ui-sans-serif fallback (no body font preload needed).
  • Define Tailwind-adjacent theme with custom spacing tokens including --space-22 alongside the 4 px utility scale. Use the 22 px tier for editorial rhythm.
  • Sticky-pinned hero: CSS `<section class="sticky h-[200vh]">` containing absolute-positioned hero state divs. Drive opacity transitions via GSAP timeline tied to scroll progress (ScrollTrigger plugin recommended).
  • Method-tag chips: CSS `<span>` with rounded-full + 1 px border. Hover via `transition: border-color 0.4s cubic-bezier(0, 0, 0.2, 1)`.
  • Reserve Phonic Light weight 300 for display only (sizes ≥ 22 px) — hero, section titles, editorial pull-quotes.
  • Resolve buttons and CTAs as black-on-white or white-on-black — no chromatic brand accent.
  • Pull spacing values from the 1-22 px-anchored custom scale; preserve the 22 px off-grid step.
  • Use sticky-pinned multi-frame hero only when copy is genuinely three-act; otherwise stick to a single-frame hero.
  • Drive scroll choreography through GSAP timelines, not chained CSS transitions, when the composition requires multi-state cross-fade.
  • Treat every section as an editorial spread — typography first, illustration second.
  • Don't use Phonic Light in dashboard, transactional UI, or product surfaces — Light weight belongs to display only.
  • Don't add a chromatic brand accent — Maze's identity is the refusal of paint color. Adding even one CTA hex erases the typographic-monolith register.
  • Don't replicate the GSAP timeline on micro-interactions inside the product — for hover states and form feedback, native CSS ease-out feels expected.
  • Don't add transform / scale / translate to hover micro-interactions — Maze's hover vocabulary is opacity and color only.
  • Don't pill-round buttons (border-radius > 20 px on rectangles) — Maze's geometry is rectangular-with-soft-corners.
  • Don't drop body text contrast below 16:1 — Maze's near-pure-white canvas demands high-contrast reading layers.
  • Near-pure-white #ffffff background only — no off-white (#fafafa, #f7f7f7) substitutions for the primary canvas. The brand depends on the literal #ffffff.
  • Single-family display discipline is non-negotiable — substituting Phonic with Inter or another sans dilutes the typographic-monolith tone.
  • Custom spacing scale must include the 22 px off-grid step — replacing it with strict 4 px utility increments breaks the editorial rhythm.
  • Container max-width 1280 px — wider compositions break the editorial pacing.
  • Sticky-pinned multi-frame hero requires h:200vh container with sticky positioning and a GSAP scroll timeline — half-measures break the typographic argument.
  • Background grep: `#ffffff` appears as `bg-white` or `background-color: rgb(255, 255, 255)` on body and section wrappers; no other primary canvas color.
  • Font-family grep: `Phonic` appears only on `display`, `hero`, or `editorial` selectors at weight 300; body and UI use the `ui-sans-serif` system stack.
  • No-accent grep: no saturated brand-paint hex appears as `bg-*` or fills on CTAs; the only saturated hex on the page is `#1863dc` reserved for inline links.
  • Spacing grep: every padding/margin/gap value belongs to {1, 4, 8, 10, 12, 16, 20, 22}px primarily, with {24, 26, 32, 40}px appearing only at low frequency.
  • Border-radius grep: every value belongs to {4, 8, 12, 16, 20}px.
  • Motion grep: `transition-duration` values come from {0.15s, 0.25s, 0.4s, 0.5s}; ambient drifts may extend up to 60s. Easings are drawn from {linear, cubic-bezier(0.4, 0, 0.2, 1), cubic-bezier(0, 0, 0.2, 1), ease-in-out}.
  • GSAP detection: runtime probe finds `window._gsap` defined (sticky-pinned hero choreography requires it).
  • Sticky-pinned grep: hero `<section>` has `position: sticky` + `h-[200vh]`; child hero states are positioned absolutely with opacity animated via GSAP timeline.

Design tokens

Observed token system

Color, type, spacing, gradients, and stacking order captured from the live page and rendered here as living, paste-ready previews.

Inspector

Observable layers

Structure, breakpoints, motion, fonts, and images captured from the live page and kept paste-ready alongside the tokens.

Depth-first walk of the meaningful sections. 3 nodes across 2 levels, shallow to deep by color.

  • body2
    • div (×3)region
    • img

Accessibility

Contrast matrix

24 combinations - 12 pass AA - 8 pass AAA. Each pair is previewed with its real foreground on background; APCA Lc sits alongside the WCAG 2.1 ratio for draft WCAG 3 awareness.

Normal text passes AAALarge text passes AAA
fg
#000000
bg
#FFFFFF
APCA Lc
+106
Use
foreground on background
Normal text passes AAALarge text passes AAA
fg
#FFFFFF
bg
#000000
APCA Lc
-108
Use
background on foreground
Normal text passes AAALarge text passes AAA
fg
#212121
bg
#FFFFFF
APCA Lc
+103
Use
foreground on background
Normal text passes AAALarge text passes AAA
fg
#FFFFFF
bg
#212121
APCA Lc
-106
Use
background on foreground
Normal text passes AAALarge text passes AAA
fg
#000000
bg
#D0D5D2
APCA Lc
+81
Use
foreground on background
Normal text passes AAALarge text passes AAA
fg
#D0D5D2
bg
#000000
APCA Lc
-80
Use
background on foreground
Normal text passes AAALarge text passes AAA
fg
#212121
bg
#D0D5D2
APCA Lc
+78
Use
foreground on background
Normal text passes AAALarge text passes AAA
fg
#D0D5D2
bg
#212121
APCA Lc
-78
Use
background on foreground
Normal text passes AALarge text passes AAA
fg
#FFFFFF
bg
#1863DC
APCA Lc
-82
Use
background on accent

Images

Image strategy

Observable image posture - total count, lazy-loading ratio, and format mix. The hero image is measured above the fold.

Total images
30
Lazy loaded
88%
Format mix
  • svg37 · 64%
  • png11 · 19%
  • jpg9 · 16%
  • gif1 · 2%

Hero image

https://www.datocms-assets.com/38511/1762726681-intro-report-min.png?auto=format&dpr=0.56&fit=max&w=1440
Format
PNG
Dimensions
806x721
Loading
eager
srcset
yes
srcset descriptor
https://www.datocms-assets.com/38511/1762726681-intro-report-min.png?auto=format&dpr=0.14&fit=max&w=1440 200w,https://www.datocms-assets.com/38511/1762726681-intro-report-min.png?auto=format&dpr=0.28&fit=max&w=1440 400w,https://www.datocms-assets.com/38511/1762726681-intro-report-min.png?auto=format&dpr=0.56&fit=max&w=1440 800w
Industry
design-tools
Industry
saas
Theme
Light
Added
2026-04-29

FAQ

Questions people ask about Maze

3questions

Answers are pulled from the curator verdict and design brief - the same text your AI agent sees when it paste-reads this page.

Compare this with