taste-skill / Style guides / Ashby style
How to build a UI in the Ashby style
Ashby (ashbyhq.com) reads as Analytics-Driven Recruiting SaaS & Royal Indigo TTNormsPro — Bright #FFFFFF / #FCFCFE canvas with #EEEDEF soft lavender-gray borders, 72px TTNormsPro geometric display headings (-0.04em tracking, 575 weight), and #473BCE royal indigo CTAs. This guide turns its extracted computed styles into an implementation kit: a live preview, the exact palette and type scale, real button and card recipes, the rules to avoid, and drop-in CSS variables, Tailwind config and a Cursor / Claude Code SKILL.md snippet.
Source: computed styles extracted from
https://www.ashbyhq.com on 2026-10-26 by the taste-skill extractor. Brand fonts may be proprietary; previews fall back to Inter / system fonts. Ashby is a trademark of its owner; this page documents publicly visible styling for reference and is not affiliated with Ashby.Live preview with Ashby tokens
Ashby style · light
Ship the product, not the pixels.
Preview text rendered with the extracted Ashby canvas, text, muted and accent tokens.
Card on extracted card recipe
Accent link: #473BCE · border
#EEEDEFColor palette (light mode)
| Role | Value | Tailwind | Usage |
|---|---|---|---|
| canvasBg | #FFFFFF | bg-white | Primary Ashby page canvas |
| surfaceElevated | #FCFCFE | bg-[#FCFCFE] | Primary elevated card & bento surface |
| surfaceSecondary | #FFFFFF | bg-white | Secondary interactive container / hover fill |
| borderPrimary | #EEEDEF | border-[#EEEDEF] | Primary structural divider (1px solid #EEEDEF) |
| borderSecondary | #EEEDEF | border-[#EEEDEF] | Secondary nested module or pill border |
| textPrimary | #141415 | text-[#141415] | Hero H1, section H2 & high-contrast foreground |
| textMuted | #717075 | text-[#717075] | Lead paragraphs, descriptions & muted labels |
| accentPrimary | #473BCE | bg-[#473BCE] | Primary interactive CTA & brand highlight (6px) |
| accentSecondary | #473BCE | text-[#473BCE] | Secondary badge, syntax or telemetry highlight |
Typography
Heading TTNormsPro · body TTNormsPro / Inter · mono SF Mono
| Level | Computed spec |
|---|---|
| Hero H1 | 72px | line-height 79.2px (leading-[1.1]) | letter-spacing -2.88px (tracking-[-0.04em]) | weight 575 (font-[575]) | color #141415 (text-[#141415]) | font TTNormsPro |
| Section H2 (Primary) | 44px | line-height 48.4px (leading-[1.1]) | letter-spacing -1.1px (tracking-[-0.025em]) | weight 575 (font-[575]) | color #141415 (text-[#141415]) | font TTNormsPro |
| Card / Feature H3 | 20px | line-height 25px (leading-[1.25]) | letter-spacing -0.5px (tracking-[-0.025em]) | weight 500 (font-[500]) | color #141415 (text-[#141415]) | font TTNormsPro |
| Body Copy (Paragraph) | 20px | line-height 30px (leading-[1.5]) | letter-spacing -0.16px (tracking-[-0.008em]) | weight 400 (font-[400]) | color #717075 (text-[#717075]) | font TTNormsPro |
| Monospace / Code Block | 13px–14px | line-height 1.5 (leading-relaxed) | font Consolas,Monaco,monospace |
Spacing, radius, depth and motion
| Token family | Most frequent values (count on page) |
|---|---|
| Border radius | 6px ×65 · 16px ×6 · 8px ×5 · 12px ×5 · 2px ×3 |
| Box shadow | rgb(255, 255, 255) 0px 0px 0px 4.5px, rgba(0, 0, 0, 0.1) 0px 0px 0px 5.5px ×5 · rgba(20, 20, 21, 0.18) 0px 0px 1px 0px, rgba(20, 20, 21, 0.3) 0px 2px 3px -2px ×4 · rgba(20, 20, 21, 0.16) 0px 0px 0px 1px inset, rgba(255, 255, 255, 0.2) 0px 1px 2px 0px inset ×3 |
| Grid / flex gap | 16px ×19 · 4px ×17 · 32px ×12 · 24px ×10 · 12px ×9 · 8px ×4 |
| Container max-width | 1200px ×6 · 1109.7px ×5 · 1296px ×3 · 730px ×1 |
| Section vertical padding | 64px / 64px ×7 · 128px / 0px ×1 · 72px / 24px ×1 · 48px / 96px ×1 |
| Easing | ease-out, ease-out, ease-out ×38 · cubic-bezier(0.16, 1, 0.3, 1) ×8 · cubic-bezier(0.07, 0.82, 0.57, 1.42) ×4 |
| Duration | 0.12s, 0.12s, 0.12s ×38 · 0.15s ×8 · 0.2s ×8 · 0.5s ×1 |
Component recipes
Buttons (3 distinct)
| Rendered | Height | Padding | Radius | Background / Text | Border | Font |
|---|---|---|---|---|---|---|
| Get in Touch | 36px | 1px 16px | 6px | transparent#FCFCFE | none | 16px / 545 |
| Get in Touch | 44px | 1px 24px | 6px | transparent#FCFCFE | none | 20px / 500 |
| Ashby Platform | 41px | 8px 12px | 6px | #EEEDEF#717075 | none | 16px / 400 |
Cards (3 distinct)
| # | Background | Border | Radius | Padding | Shadow |
|---|---|---|---|---|---|
| 1 | #FFFFFF | 1px solid #F4F4F4 | 6px | 20px 26px | rgba(172, 171, 171, 0.3) 0px -1px 10px 0px |
| 2 | transparent | none | 16px | 64px 64px | rgba(20, 20, 21, 0.18) 0px 0px 1px 0px, rgba(20, 20, 21, 0.3) 0px 2px 3px -2px |
| 3 | transparent | none | 8px | 0px 0px | rgba(20, 20, 21, 0.18) 0px 0px 1px 0px, rgba(20, 20, 21, 0.3) 0px 2px 3px -2px |
Rules: what never to do in the Ashby style
- NEVER substitute generic uncalibrated gray backgrounds for Ashby’s exact
#FFFFFFcanvas and#FCFCFEsurface pairing. - NEVER replace
TTNormsProdisplay typography or ignore its signature scale (72px / -0.04em (w575)). - NEVER use thick opaque borders that clash with
#EEEDEF(1px solid #EEEDEF). - NEVER deviate from the signature button geometry (
6px) or introduce off-brand saturated gradients. - NEVER use default browser monospace when rendering code or telemetry—always pair with
SF Mono.
Copy-paste kit
CSS variables
:root {
/* Ashby style — extracted from ashbyhq.com by taste-skill */
--canvas: #FFFFFF;
--surface: #FCFCFE;
--text: #141415;
--text-muted: #717075;
--accent: #473BCE;
--border: #EEEDEF;
--font-heading: TTNormsPro, Inter, system-ui, -apple-system, sans-serif;
--font-body: 'TTNormsPro / Inter', Inter, system-ui, -apple-system, sans-serif;
--font-mono: 'SF Mono', 'JetBrains Mono', ui-monospace, monospace;
--h1-size: 72px;
--h1-tracking: -0.04em;
--h1-weight: 575;
--radius-button: 6px;
--radius-common: 6px;
--shadow-common: rgb(255, 255, 255) 0px 0px 0px 4.5px, rgba(0, 0, 0, 0.1) 0px 0px 0px 5.5px;
--ease: ease-out, ease-out, ease-out;
--duration: 0.12s, 0.12s, 0.12s;
}tailwind.config.js
// tailwind.config.js — Ashby style tokens (taste-skill)
module.exports = {
theme: {
extend: {
colors: {
canvas: "#FFFFFF",
surface: "#FCFCFE",
ink: "#141415",
muted: "#717075",
accent: "#473BCE",
line: "#EEEDEF",
},
fontFamily: {
heading: ["TTNormsPro", 'Inter', 'system-ui', 'sans-serif'],
sans: ["TTNormsPro / Inter", 'Inter', 'system-ui', 'sans-serif'],
mono: ["SF Mono", 'ui-monospace', 'monospace'],
},
fontSize: { display: ["72px", { letterSpacing: "-0.04em", fontWeight: "575" }] },
borderRadius: { button: "6px", card: "6px" },
boxShadow: { brand: "rgb(255, 255, 255) 0px 0px 0px 4.5px, rgba(0, 0, 0, 0.1) 0px 0px 0px 5.5px" },
transitionTimingFunction: { brand: "ease-out, ease-out, ease-out" },
},
},
};.cursor/skills/ashby-style/SKILL.md
--- name: ashby-style description: Build UI in the Ashby visual style (Analytics-Driven Recruiting SaaS & Royal Indigo TTNormsPro). Use when the user asks for a Ashby-like look. --- # Ashby Style — Quick Rules (source: ashbyhq.com, extracted by taste-skill) ## Tokens - canvasBg: #FFFFFF — Primary Ashby page canvas - surfaceElevated: #FCFCFE — Primary elevated card & bento surface - surfaceSecondary: #FFFFFF — Secondary interactive container / hover fill - borderPrimary: #EEEDEF — Primary structural divider (1px solid #EEEDEF) - borderSecondary: #EEEDEF — Secondary nested module or pill border - textPrimary: #141415 — Hero H1, section H2 & high-contrast foreground - textMuted: #717075 — Lead paragraphs, descriptions & muted labels - accentPrimary: #473BCE — Primary interactive CTA & brand highlight (6px) - accentSecondary: #473BCE — Secondary badge, syntax or telemetry highlight ## Typography - Heading font: TTNormsPro; body: TTNormsPro / Inter; mono: SF Mono - Hero H1: 72px | line-height 79.2px (leading-[1.1]) | letter-spacing -2.88px (tracking-[-0.04em]) | weight 575 (font-[575]) | color #141415 (text-[#141415]) | font TTNormsPro - Section H2 (Primary): 44px | line-height 48.4px (leading-[1.1]) | letter-spacing -1.1px (tracking-[-0.025em]) | weight 575 (font-[575]) | color #141415 (text-[#141415]) | font TTNormsPro - Card / Feature H3: 20px | line-height 25px (leading-[1.25]) | letter-spacing -0.5px (tracking-[-0.025em]) | weight 500 (font-[500]) | color #141415 (text-[#141415]) | font TTNormsPro - Body Copy (Paragraph): 20px | line-height 30px (leading-[1.5]) | letter-spacing -0.16px (tracking-[-0.008em]) | weight 400 (font-[400]) | color #717075 (text-[#717075]) | font TTNormsPro ## Components - Primary button: height 36px, padding 1px 16px, radius 6px, bg transparent, text #FCFCFE, 16px / 545 - Card: bg #FFFFFF, border 1px solid #F4F4F4, radius 6px, padding 20px 26px ## Never - NEVER substitute generic uncalibrated gray backgrounds for Ashby’s exact #FFFFFF canvas and #FCFCFE surface pairing. - NEVER replace TTNormsPro display typography or ignore its signature scale (72px / -0.04em (w575)). - NEVER use thick opaque borders that clash with #EEEDEF (1px solid #EEEDEF). - NEVER deviate from the signature button geometry (6px) or introduce off-brand saturated gradients. - NEVER use default browser monospace when rendering code or telemetry—always pair with SF Mono. Full 120-line spec: https://taste-skill.pages.dev/taste/ashby/
Or install the full spec
npx taste-skill add ashby
Related
Similar styles
Get all 30 full SKILL.md specs (Cursor / Claude Code / Codex ready) plus the Pro growth skills.
See taste-skill Pro →