Skip to content

Now in the official shadcn registry directory.

Start free
Back to gallery
developer tools · saas

PostHog

A brand that decided the B2B SaaS marketing rulebook was written by people it never wanted as customers — orange-red signature, multi-colour brand system, Squeak font. Anti-corporate product analytics.

posthog.comAdded 2026-06-23
PostHog - 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 PostHog’s language, not just a screenshot.

Paste into your agent. No signup, no cost.
Light-first warm-paper playfulness with engineering rigor underneath. The canvas is an off-white cream (#ffffff body, #fdfdf8 / #e1d7c2 warm sections); olive-tinted near-blacks (#1a1a1a → #4d4f46 → #65675e) carry text instead of clinical blue-grays. A signature orange-red (#f54e00) owns every primary action, while a deliberately loud secondary set — yellow #f7a501, blue #2f80fa, teal #30abc6, purple #b62ad9, green #36c46f — appears as small joyful punctuation, never as fills. Rounded display + rounded body typography softens every edge. Motion is split: one fast interactive curve (cubic-bezier(0.4, 0, 0.2, 1) at 0.15s) plus slow ambient floats (4–7.6s ease-in-out) for background life. Personality over polish, warmth over authority, but every whimsical choice sits on a strict 1px-border, 2px-base-spacing grid.
Main prompt
Use this capture as a design language transfer brief for my project. Adopt the palette (light-first warm-paper backgrounds #ffffff / #fdfdf8 / #e1d7c2 + olive-tinted near-black text ramp #1a1a1a / #4d4f46 / #65675e + a single dominant orange-red action color #f54e00 + a loud-but-rationed secondary accent set of yellow / blue / teal / purple / green used as punctuation), rounded typographic voice (Squeak-style display + Open Runde-style rounded body, weight range 400–800), 2px-base spacing scale, border-first delimitation (1px solid hairlines, soft 2–6px radii), the primary cubic-bezier(0.4, 0, 0.2, 1) 0.15s interactive motion curve plus slow ambient float loops for atmosphere, and a light-first / playful-but-structured posture across every page and component I ship. Treat this as my project's constitution — any new component I author should pass as if crafted in the same studio: friendly, warm, developer-first, structurally disciplined. Apply the language, not the source brand's specific copy, mascot, 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
Modular
Content width
Bounded
Framing
Textured
Grid strength
Strong

Light-first warm-paper canvas — #ffffff body paired with cream #fdfdf8 / #fffefe and warm tan #e1d7c2 section panels doing the surface work. Text descends through an olive-tinted ramp #1a1a1a → #4d4f46 → #65675e → #374151 rather than cold blue-grays, keeping the page hand-made rather than templated. A single signature orange-red #f54e00 owns every primary action; a deliberately loud secondary set — yellow #f7a501, blue #2f80fa, teal #30abc6, purple #b62ad9, green #36c46f — appears as small joyful punctuation, never as flat fills. Borders are warm gray #9ea096 / #bfc1b7 hairlines.

Mode strategylight-first
  • Olive-tinted near-black #1a1a1a / #4d4f46 (warm gray primary, ~1101 measured surface occurrences) for body and headings — the dominant reading layer, never a cold blue-black
  • Warm-paper background ramp #ffffff (body) → #fdfdf8 / #fffefe (cream cards) → #e1d7c2 (warm tan feature panels) for gentle section separation without shadow
  • Olive gray descender #65675e / #374151 / #9ea096 for captions, metadata, de-emphasized labels — warm, never clinical
  • Signature orange-red #f54e00 reserved for primary CTAs and key interactive accents (the --squeak-button-color / swiper-pagination brand token) — one dominant action color
  • Loud secondary accents #f7a501 (yellow) / #2f80fa (blue) / #30abc6 (teal) / #b62ad9 (purple) / #36c46f (green) used as small punctuation — illustration highlights, tags, decorative marks — never as large flat fills, total accent surface kept well under ~10%
  • Warm gray hairline borders #9ea096 / #bfc1b7 (1px solid) do the structural delimiting on the light canvas

Gradients (paste-ready)

linear-gradient(90deg, rgb(1, 67, 203), rgb(43, 111, 244) 24.04%, rgb(210, 52, 1) 46.63%, rgb(255, 101, 31) 65.87%, rgb(251, 160, 0) 83.17%, rgb(1, 67, 203))
  • Display family: Squeak (PostHog's custom rounded display face, self-hosted + preloaded from /fonts/squeak-bold-webfont.woff2). Use a friendly rounded display fallback (e.g. a rounded grotesque) if Squeak is unavailable — the rounded character is the signature, not the specific file.
  • Body / heading family: Open Runde (soft rounded geometric sans). UI labels lean on IBM Plex Sans Variable. The rounded letterforms carry the playful tone before any illustration does — never substitute a sharp grotesque.
  • Monospace: Source Code Pro (self-hosted, display: swap) with ui-monospace fallback for code, kbd, and tabular numerics.
  • Weight range is full and expressive: 400 (reading) / 500 (UI labels) / 600 (emphasis) / 700 (subheads) / 800 (hero display). Unlike a stepped-ladder system, PostHog uses the standard weight ramp end-to-end — heavy 800 display is part of the loud, confident voice.
  • Body type: 15px / line-height 25.71px (Open Runde) and 16px / 24px (IBM Plex). Generous line-height (~1.5–1.7) keeps the warm, breathable feel — do not tighten body leading.
  • Headings: heading-1 24px / line-height 32px / letter-spacing -0.6px (Open Runde 600); heading-2 21.43px / 30px / -0.5357px (Open Runde 700). Negative tracking only at heading sizes, in px; body stays at letter-spacing: normal.
  • Small / caption sizes: 12 / 13 / 14px at line-heights 16–21px for metadata, labels, and dense UI. Paragraph measure ~50–65 ch at body 15–16px.
  • 2px base unit. Scale: 2 / 4 / 6 / 8 / 10 / 12 / 14 / 17 / 20 / 24 / 32 / 34 px — note the 17px step (a measured optical value), not a clean 16. Pick from scale values; no magic numbers.
  • Dominant rhythm sits on 4 / 8 / 17 px (the highest-frequency measured paddings); the 2px floor handles micro-corrections inside dense controls.
  • Gutter values for flex/grid: 1 / 2 / 4 / 6 / 8 / 16 px — tight clusters at 2–6px, looser column gaps at 16px.
  • Card padding: 12–24px on desktop, 8–17px on mobile. Feature panels lean to the 17 / 24 / 32 range for generous warm breathing room.
  • Section vertical rhythm: 32–34px base steps scale up through generous multiples; the page breathes, it is not dense for density's sake.
Surface styleElevated
  • Primary delimitation is a 1px solid warm-gray hairline border (#9ea096 / #bfc1b7) — the highest-frequency border treatment (263 measured 1px occurrences). Reach for borders before shadows.
  • Real (not invisible) drop shadows exist for genuinely floating elements: a soft large-blur lift `rgba(0,0,0,0.25) 0 25px 50px -12px` for modals/popovers, and a tighter `rgba(14,18,22,0.35) 0 10px 38px -10px` for menus. Unlike a flat dark-mode system, light-first PostHog uses honest elevation.
  • Layering depth comes from background-shift across the warm-paper ramp (#ffffff → #fdfdf8 → #e1d7c2) plus border weight, with drop shadow reserved for true overlays.
  • Focus and hover use border-color and background-color shifts on the 0.15s curve — keep it warm and gentle, not a hard ring.

Techniques

Warm hairline card on paper

Cards default to `background: #fdfdf8; border: 1px solid #bfc1b7; border-radius: 6px` on the #ffffff body. Hover shifts border to #9ea096 and may nudge background toward warm tan. Stay border-first; only promote to drop shadow when the element genuinely floats above the page.

Floating overlay shadow

Modals, popovers, and dropdowns lift off the paper with `box-shadow: rgba(0,0,0,0.25) 0 25px 50px -12px` (large soft) or `rgba(14,18,22,0.35) 0 10px 38px -10px, rgba(14,18,22,0.2) 0 10px 20px -15px` (menu). Honest, soft, warm-tinted — never a hard halo.

Ambient floating illustration

Decorative mascot/illustration elements drift with a `scattered-float` keyframe at 4 / 4.9 / 5.8 / 6.7 / 7.6s ease-in-out (staggered durations create organic, non-synchronized motion). Purely atmospheric, behind/beside content, always behind a useReducedMotion guard.

Radii2 / 4 / 5 / 6 / 8Icon treatmentHand-drawnIcon setsLucide, Remix Icon, Phosphor
  • Radius scale is soft and small: 2 / 4 / 5 / 6 / 8 px. The 4px and 6px steps dominate (49 and 19 measured occurrences) — gentle rounding, never sharp corners, never large pill bubbles except for badges.
  • Buttons default to 6px radius, inputs 4–6px, cards 6px, small chips 4px. Avoid `rounded-full` except for avatars, status dots, and indicator badges.
  • Icons lean hand-drawn / friendly-stroke at ~1.5–2px weight to match the rounded type and mascot; no rigid geometric or duotone sets.
  • Border widths: 1px hairline default, 2px for emphasis/focus, 4px reserved for rare heavy decorative frames. Style is solid (4392 measured) — dashed appears only 4 times, treat it as decorative-only.
  • Tap targets minimum 40×40px on pointer, 44×44px on touch.
  • button-primary
    backgroundColor
    #f54e00
    textColor
    #ffffff
    radius
    6px
    padding
    8px 17px
    border
    1px solid transparent
    boxShadow
    none
    fontFamily
    Open Runde
    fontWeight
    600
    fontSize
    15px
    lineHeight
    22.5px

    Tailwind

    inline-flex min-h-[40px] items-center gap-2 rounded-[6px] bg-[#f54e00] px-[17px] py-2 text-[15px] font-semibold leading-[22.5px] text-white transition-colors duration-150 ease-[cubic-bezier(0.4,0,0.2,1)] hover:bg-[#d23401] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#f54e00] focus-visible:ring-offset-2 focus-visible:ring-offset-[#fdfdf8]
  • button-secondary
    backgroundColor
    #fdfdf8
    textColor
    #1a1a1a
    radius
    6px
    padding
    8px 17px
    border
    1px solid #bfc1b7
    boxShadow
    none
    fontFamily
    Open Runde
    fontWeight
    500
    fontSize
    15px

    Tailwind

    inline-flex min-h-[40px] items-center gap-2 rounded-[6px] border border-[#bfc1b7] bg-[#fdfdf8] px-[17px] py-2 text-[15px] font-medium text-[#1a1a1a] transition-colors duration-150 ease-[cubic-bezier(0.4,0,0.2,1)] hover:border-[#9ea096] hover:bg-[#e1d7c2] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#f54e00] focus-visible:ring-offset-2 focus-visible:ring-offset-[#ffffff]
  • card-surface
    backgroundColor
    #fdfdf8
    textColor
    #4d4f46
    radius
    6px
    padding
    24px
    border
    1px solid #bfc1b7
    boxShadow
    none

    Tailwind

    rounded-[6px] border border-[#bfc1b7] bg-[#fdfdf8] p-6 text-[#4d4f46] transition-[border-color,background-color] duration-150 ease-[cubic-bezier(0.4,0,0.2,1)] hover:border-[#9ea096]
  • input-field
    backgroundColor
    #ffffff
    textColor
    #1a1a1a
    radius
    4px
    padding
    8px 12px
    border
    1px solid #9ea096
    boxShadow
    none
    fontFamily
    IBM Plex Sans Variable
    fontWeight
    400
    fontSize
    16px
    lineHeight
    24px

    Tailwind

    w-full rounded-[4px] border border-[#9ea096] bg-white px-3 py-2 text-[16px] leading-6 text-[#1a1a1a] placeholder:text-[#65675e] transition-colors duration-150 ease-[cubic-bezier(0.4,0,0.2,1)] focus-visible:border-[#f54e00] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#f54e00]/30
  • badge-accent
    backgroundColor
    #e1d7c2
    textColor
    #b17816
    radius
    4px
    padding
    2px 8px
    border
    1px solid transparent
    fontFamily
    IBM Plex Sans Variable
    fontWeight
    600
    fontSize
    12px
    lineHeight
    16px

    Tailwind

    inline-flex items-center gap-1 rounded-[4px] bg-[#e1d7c2] px-2 py-0.5 text-[12px] font-semibold leading-4 text-[#b17816]
  • link-inline
    color
    #f54e00
    textDecoration
    underline
    textDecorationColor
    #f54e00
    textDecorationThickness
    1px
    textUnderlineOffset
    2px
    transition
    color 0.15s cubic-bezier(0.4, 0, 0.2, 1)

    Tailwind

    font-medium text-[#f54e00] underline decoration-[#f54e00] decoration-1 underline-offset-2 transition-colors duration-150 ease-[cubic-bezier(0.4,0,0.2,1)] hover:text-[#d23401] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#f54e00]/40
LevelexpressiveDurations0.15s / 0.3s / 3s / 4s / 4.9s / 5.8s / 6.7s / 7.6s

Easings

cubic-bezier(0.4, 0, 0.2, 1)cubic-bezier(0.16, 1, 0.3, 1)ease-in-outlinear
Hovercolor / background-color / border-color shift (0.15s on cubic-bezier(0.4, 0, 0.2, 1)) — the dominant interactive transition (35+ measured occurrences), text-decoration-color + fill + stroke shift bundled into the same 0.15s curve

Scroll patterns

  • Ambient `scattered-float` illustration drift at 4 / 4.9 / 5.8 / 6.7 / 7.6s ease-in-out — staggered durations produce organic, non-synchronized floating mascot/decoration motion
  • Long linear loops for progress and gradient text: `hero-carousel-progress` 5s linear, `text-gradient-wizard-scroll` 3s linear, `grow` / `grow-sm` 2–3s linear
  • `slideIn` reveal at 0.15s on cubic-bezier(0.16, 1, 0.3, 1) — the one expressive overshoot curve, used for menus/popovers entering
  • No heavy parallax — depth comes from layered floating illustrations, not scroll-jacking
  • Primary interactive easing: cubic-bezier(0.4, 0, 0.2, 1) (Material standard ease) at 0.15s — carries virtually every hover/focus color and border transition.
  • Secondary easing: cubic-bezier(0.16, 1, 0.3, 1) (ease-out-expo overshoot) for `slideIn` entrances only; ease-in-out for ambient floats; linear for loops and progress bars.
  • Two motion tiers: fast interactive (0.15s, occasionally 0.3s) for affordance, and slow ambient (3–7.6s) for atmospheric floating life. Never animate affordance on the slow tier or float on the fast tier.
  • Staggered float durations (4 / 4.9 / 5.8 / 6.7 / 7.6s) are intentional — synchronized floating reads as mechanical; the offset is the charm.
  • useReducedMotion mandatory: interactive transitions collapse to instant/opacity, ambient floats disable entirely.
  • Spring animations forbidden — deterministic cubic-bezier / ease-in-out / linear only.
  • Loop animations restricted to explicit ambient illustration and progress indicators.
  • Tabs / segmented controls for product-area and pricing switching — friendly rounded pills, not toggle switches.
  • Accordion: single-open for FAQ; multi-open for deep documentation trees.
  • Tooltips reveal on hover + focus; dismiss on blur. Keep copy short and human.
  • Modals/popovers float with honest drop shadow (rgba(0,0,0,0.25) large-blur) and enter via slideIn (0.15s, cubic-bezier(0.16,1,0.3,1)).
  • Form validation: inline below field on blur; warm error color, never red-only color signaling.
  • Empty states lean into personality — a small mascot/illustration + one-line human copy + a primary #f54e00 action. Whimsy is allowed here.
  • Loading states: skeleton shimmer for content; the orange-red progress accent for determinate bars. Avoid full-page spinners.
Approachdesktop-first

Desktop-first because the core audience is developers on wide displays evaluating an analytics product, but the page reflows fully to mobile without hiding controls. PostHog's measured breakpoints are non-standard — sm 425 / md 768 / lg 900 / xl 1160 / 2xl 1536 — reflecting a content-driven rather than framework-default ladder. The warm-paper, rounded, playful language stays identical at every width; only the column count and type scale change.

  • Breakpoints (measured): sm 425 / md 768 / lg 900 / xl 1160 / 2xl 1536 px. These are content-driven, not the generic Tailwind ladder — honor the 900 and 1160 mid-tiers.
  • Bounded content with generous warm margins; primary reading column stays comfortable rather than edge-to-edge.
  • Hide-on-mobile is banned — every desktop control reaches mobile via reflow.
  • Tap target minimum 44×44 on touch; 40×40 on pointer.
  • Typography scales gently: hero display drops from 800-weight large sizes toward heading-1 24px, headings shed tracking as they shrink (less negative at smaller sizes). Body stays 15–16px across tiers.
  • focus-visible: 2px #f54e00 ring with a 2px offset against the warm-paper background — mandatory on every interactive element, warm rather than a default blue ring.
  • All interactive elements reachable via Tab in logical reading order; never rely on hover (or floating illustrations) to expose actions.
  • Color contrast on light: #1a1a1a on #ffffff ≈ 17:1 (AAA); warm gray #4d4f46 on #ffffff ≈ 8.5:1 (AAA); #65675e on #ffffff ≈ 5.5:1 (AA). Verify the orange-red #f54e00 on #ffffff (~4.0:1) — pass it for large text / UI only, and pair with white text on the orange for buttons (#ffffff on #f54e00 ≈ 4.3:1, AA large/UI).
  • Never signal state with the loud accent palette alone — pair color punctuation with text or icon; many accents (#f7a501, #36c46f) fail body-text contrast on white.
  • ARIA labels on icon-only and mascot-decorative controls (decorative illustrations get alt="" / aria-hidden); aria-expanded on collapsibles; aria-live='polite' on toasts.
  • Motion respects prefers-reduced-motion — interactive transitions go instant, ambient floats disable entirely.
  • Tap targets minimum 44×44 on touch; 40×40 on pointer.
  • Form errors announced via aria-describedby on the associated input; never color-only signaling on the warm palette.
CSS keyframesNext/ImageLucide

No JS animation library was detected in the extract (libraries: []) — motion is CSS-keyframe-driven (scattered-float, slideIn, grow, hero-carousel-progress) plus 0.15s CSS transitions on cubic-bezier(0.4, 0, 0.2, 1). Custom fonts (Squeak preloaded; Open Runde, IBM Plex Sans Variable, Source Code Pro all display: swap) are self-hosted. Illustrations and the hedgehog mascot are the primary graphical payload.

  • CSS @keyframes for ambient motion: `scattered-float` with per-element animation-duration of 4 / 4.9 / 5.8 / 6.7 / 7.6s and ease-in-out, `slideIn` 0.15s cubic-bezier(0.16,1,0.3,1) for entrances
  • Plain CSS transitions for interactivity: `transition: color, background-color, border-color, text-decoration-color, fill, stroke 0.15s cubic-bezier(0.4, 0, 0.2, 1)` — constants only
  • useReducedMotion (or a prefers-reduced-motion media query) guards every keyframe and float — no exceptions
  • Next/Image with `sizes` always set, `priority` only on the LCP hero illustration; decorative mascots lazy-load
  • Self-host fonts: preload the bold display face (Squeak) woff2; display: swap on body/UI/mono families. No WebGL, no Lottie — illustration-and-keyframe, not engine-driven
  • Lead with the warm-paper canvas (#ffffff / #fdfdf8 / #e1d7c2) and the olive-tinted text ramp — warmth is the first impression.
  • Let one dominant action color (#f54e00) do the structural work; ration the loud secondary accents (#f7a501 / #2f80fa / #30abc6 / #b62ad9 / #36c46f) to small joyful punctuation.
  • Round everything — display (Squeak-style), body (Open Runde-style), corners (4–6px), icons (hand-drawn stroke). The rounding is the personality.
  • Default to the primary cubic-bezier(0.4, 0, 0.2, 1) 0.15s curve for interactive transitions; reserve the slow 3–7.6s ambient floats for background life only.
  • Reach for 1px warm-gray hairline borders before drop shadow; use honest soft shadows only for genuinely floating overlays.
  • Stagger ambient float durations (4 / 4.9 / 5.8 / 6.7 / 7.6s) so motion reads organic, not mechanical.
  • Pass every page through useReducedMotion before shipping — floats off, transitions instant.
  • Never go dark-first — PostHog's contrarian identity is the bright warm-paper canvas; flipping to near-black erases the brand thesis.
  • Never let the loud accents become large flat fills — yellow/blue/teal/purple/green are punctuation, not surface color. Spread them across whole sections and the page reads as a clown car.
  • Never swap the rounded families for a sharp grotesque — the soft letterforms carry the personality before any illustration does.
  • Never use cold blue-grays for text — the warm olive ramp (#1a1a1a / #4d4f46 / #65675e) is what keeps the page hand-made; clinical grays make it generic.
  • Never animate affordance on the slow tier or float UI on the fast tier — the two motion tiers (0.15s interactive vs 3–7.6s ambient) must not cross.
  • Never introduce a spring or a sixth easing beyond {cubic-bezier(0.4, 0, 0.2, 1), cubic-bezier(0.16, 1, 0.3, 1), ease-in-out, linear}.
  • Never coarsen the spacing scale by dropping the measured 17px step to a clean 16 — the 17 is part of the observed optical rhythm.
  • Tailwind v4 @theme inline only — no runtime style concatenation, no CSS-in-JS.
  • Light-first: #ffffff body, #fdfdf8 / #fffefe cream, #e1d7c2 warm tan panels; olive text ramp #1a1a1a / #4d4f46 / #65675e / #374151.
  • Brand color #f54e00 owns primary actions; secondary accent set {#f7a501, #2f80fa, #30abc6, #b62ad9, #36c46f} rationed as punctuation.
  • Spacing base 2px, scale 2/4/6/8/10/12/14/17/20/24/32/34 (keep the 17 step).
  • Radius scale: 2 / 4 / 5 / 6 / 8 px. Border widths 1 / 2 / 4 px, style solid.
  • Fonts: Squeak (display) + Open Runde (body/heading) + IBM Plex Sans Variable (UI) + Source Code Pro (mono); weights 400–800.
  • Motion: durations {0.15, 0.3, 3, 4, 4.9, 5.8, 6.7, 7.6}s, easings {cubic-bezier(0.4, 0, 0.2, 1) primary, cubic-bezier(0.16, 1, 0.3, 1), ease-in-out, linear}. No springs.
  • Breakpoints (measured, non-standard): sm 425 / md 768 / lg 900 / xl 1160 / 2xl 1536 px.
  • Background audit: page surfaces draw from {#ffffff, #fdfdf8, #fffefe, #e1d7c2} — light-first, warm; no near-black canvas.
  • Text color grep: body/heading colors come from the olive ramp {#1a1a1a, #4d4f46, #65675e, #374151} — no cold blue-gray (#374151 is the coolest allowed).
  • Action color audit: every primary CTA uses #f54e00; secondary accents appear only as small punctuation (total accent surface well under ~10%).
  • Spacing grep: no values outside the 2/4/6/8/10/12/14/17/20/24/32/34 ladder — the 17px step is present.
  • Radius grep: corner radii draw from {2, 4, 5, 6, 8}px — no sharp 0 corners, no large pills except badges/avatars.
  • Font grep: display is Squeak-style rounded, body is Open Runde-style rounded, mono is Source Code Pro; weights within 400–800.
  • Transition grep: interactive `transition-timing-function` is cubic-bezier(0.4, 0, 0.2, 1) at 0.15s; ambient keyframes use ease-in-out at 4–7.6s.
  • Border audit: 1px solid warm-gray hairlines (#9ea096 / #bfc1b7) do the delimiting; drop shadows reserved for floating overlays only.
  • Motion-tier audit: no affordance on the 3–7.6s tier, no UI floating on the 0.15s tier; ambient float durations are staggered.
  • Contrast audit: body text on white ≥ 4.5:1 (AA); white text on #f54e00 buttons treated as large/UI (≈4.3:1); accents never used as the sole state signal.
  • Reduced-motion audit: prefers-reduced-motion disables floats and collapses transitions.

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. 7 nodes across 7 levels, shallow to deep by color.

  • body1
    • div (×3)1
      • div1
        • div1
          • div1
            • div1
              • Aside

Accessibility

Contrast matrix

292 combinations - 116 pass AA - 68 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
#000000
bg
#FFFEFE
APCA Lc
+106
Use
foreground on background
Normal text passes AAALarge text passes AAA
fg
#FFFEFE
bg
#000000
APCA Lc
-107
Use
background on foreground
Normal text passes AAALarge text passes AAA
fg
#000000
bg
#FDFDF8
APCA Lc
+105
Use
foreground on background
Normal text passes AAALarge text passes AAA
fg
#FDFDF8
bg
#000000
APCA Lc
-106
Use
background on foreground
Normal text passes AAALarge text passes AAA
fg
#111827
bg
#FFFFFF
APCA Lc
+105
Use
foreground on background
Normal text passes AAALarge text passes AAA
fg
#FFFFFF
bg
#111827
APCA Lc
-107
Use
background on foreground
Normal text passes AAALarge text passes AAA
fg
#111827
bg
#FFFEFE
APCA Lc
+104
Use
foreground on background

Images

Image strategy

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

Total images
12
Lazy loaded
0%
Format mix
  • unknown12 · 100%

Hero image

https://res.cloudinary.com/dmukukwp6/image/upload/c_scale,w_1401/keyboard_garden_light_opt_compressed_5094746caf
Format
UNKNOWN
Dimensions
1401x1400
Loading
auto
srcset
no
Industry
developer-tools
Industry
saas
Theme
Light
Added
2026-06-23

FAQ

Questions people ask about PostHog

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