taste-skill / Style guides / Loops style
How to build a UI in the Loops style
Loops (loops.so) reads as Warm Editorial SaaS & Newsreader Serif Craft — Warm ivory #FDFDFC / #F9F9F8 canvas with #E9E8E6 stone borders, #21201C espresso ink, refined 44px Newsreader serif display headlines (-0.02em), and #7D1B0C oxblood / #21201C pill 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://loops.so on 2026-10-26 by the taste-skill extractor. Brand fonts may be proprietary; previews fall back to Inter / system fonts. Loops is a trademark of its owner; this page documents publicly visible styling for reference and is not affiliated with Loops.Live preview with Loops tokens
Loops style · light
Ship the product, not the pixels.
Preview text rendered with the extracted Loops canvas, text, muted and accent tokens.
Card on extracted card recipe
Accent link: #7D1B0C · border
#E9E8E6Color palette (light mode)
| Role | Value | Tailwind | Usage |
|---|---|---|---|
| canvasBg | #FDFDFC | bg-[#FDFDFC] | Primary Loops page canvas |
| surfaceElevated | #F9F9F8 | bg-[#F9F9F8] | Primary elevated card & bento surface |
| surfaceSecondary | #F1F0EF | bg-[#F1F0EF] | Secondary interactive container / hover fill |
| borderPrimary | #E9E8E6 | border-[#E9E8E6] | Primary structural divider (1px solid #E9E8E6) |
| borderSecondary | #DAD9D6 | border-[#DAD9D6] | Secondary nested module or pill border |
| textPrimary | #21201C | text-[#21201C] | Hero H1, section H2 & high-contrast foreground |
| textMuted | #63625E | text-[#63625E] | Lead paragraphs, descriptions & muted labels |
| accentPrimary | #7D1B0C | bg-[#7D1B0C] | Primary interactive CTA & brand highlight (40px (Pill)) |
| accentSecondary | #FDFDFC | text-[#FDFDFC] | Secondary badge, syntax or telemetry highlight |
Typography
Heading Newsreader · body Inter · mono SF Mono
| Level | Computed spec |
|---|---|
| Hero H1 | 44px | line-height 47.5px (leading-[1.08]) | letter-spacing -0.88px (tracking-[-0.02em]) | weight 500 (font-[500]) | color #21201C (text-[#21201C]) | font Newsreader |
| Section H2 (Primary) | 44px | line-height 48px (leading-[1.09]) | letter-spacing -1.6px (tracking-[-0.036em]) | weight 500 (font-[500]) | color #FFF4EC (text-[#FFF4EC]) | font Newsreader |
| Section H2 (Secondary) | 25.3px | line-height 29.1px (leading-[1.15]) | letter-spacing 0px (tracking-[0em]) | weight 500 (font-[500]) | color #21201C (text-[#21201C]) | font Newsreader |
| Card / Feature H3 | 30px | line-height 33.6px (leading-[1.12]) | letter-spacing -0.6px (tracking-[-0.02em]) | weight 400 (font-[400]) | color #21201C (text-[#21201C]) | font ui-serif |
| Body Copy (Paragraph) | 20px | line-height 28px (leading-[1.4]) | letter-spacing -0.2px (tracking-[-0.01em]) | weight 400 (font-[400]) | color #63635E (text-[#63635E]) | font Inter |
| Monospace / Code Block | 13px–14px | line-height 1.5 (leading-relaxed) | font "Fragment Mono" |
Spacing, radius, depth and motion
| Token family | Most frequent values (count on page) |
|---|---|
| Border radius | 6px ×15 · 4px ×6 · 7px ×5 · 8px ×4 · 9px ×3 · 14px ×2 |
| Box shadow | rgba(33, 32, 28, 0.04) 0px 1px 2px 0px ×4 · rgba(255, 255, 255, 0.05) 0px 1px 2px 0px inset, rgba(28, 25, 23, 0.14) 0px 2px 5px 0px, rgba(28, 25, 23, 0.3) 0px 8px 18px -12px ×1 · rgb(218, 217, 214) 0px 0px 0px 1px inset, rgba(33, 32, 28, 0.05) 0px 1px 2px -1px, rgba(33, 32, 28, 0.22) 0px 24px 48px -24px ×1 |
| Grid / flex gap | 10px ×22 · 8px ×6 · 9px ×5 · 2px ×5 · 4px ×2 · 12px ×2 |
| Container max-width | 1296px ×2 · 1000px ×2 · 800px ×2 · 1440px ×1 |
| Section vertical padding | 141px / 34px ×1 · 0px / 89px ×1 |
| Easing | cubic-bezier(0.16, 1, 0.3, 1), cubic-bezier(0.16, 1, 0.3, 1) ×11 · ease ×6 · cubic-bezier(0.12, 0.23, 0.5, 1), cubic-bezier(0.12, 0.23, 0.5, 1), cubic-bezier(0.12, 0.23, 0.5, 1), cubic-bezier(0.12, 0.23, 0.5, 1) ×3 |
| Duration | 0.42s, 0.42s ×11 · 0.15s, 0.15s, 0.15s, 0.15s ×3 · 0.15s, 0.15s ×3 · 0.12s ×3 |
Component recipes
Buttons (10 distinct)
| Rendered | Height | Padding | Radius | Background / Text | Border | Font |
|---|---|---|---|---|---|---|
| Start for free | 44px | 10px 20px | 40px | #21201C#0000EE | none | 12px / 400 |
| Start for free | 52px | 14px 18px | 999px | #FFF4EC#FDFDFC | none | 12px / 400 |
| Start for free | 40px | 8px 14px | 999px | transparent#FDFDFC | none | 12px / 400 |
| Segments and filters | 33px | 7px 13px | 999px | #F9F9F8#63635E | 1px solid #E9E8E6 | 14px / 400 |
| Acquisition | 36px | 0px 12px | 8px | #FDFDFC#21201C | 1px solid #E9E8E6 | 15.5px / 600 |
Cards (3 distinct)
| # | Background | Border | Radius | Padding | Shadow |
|---|---|---|---|---|---|
| 1 | #F1F0EF | 1px solid rgba(38, 38, 26, 0.08) | 12px | 4px 4px | rgba(33, 32, 28, 0.16) 0px 18px 46px 0px, rgba(33, 32, 28, 0.08) 0px 3px 10px 0px |
| 2 | #F9F9F8 | 1px solid #E9E8E6 | 8px | 0px 0px | none |
| 3 | #FDFDFC | 1px solid #E9E8E6 | 14px | 0px 0px | rgba(0, 0, 0, 0.024) 0px 1px 2px 0px, rgba(0, 0, 0, 0.055) 0px 18px 44px 0px, color(srgb 0.992157 0.992157 0.988235 / 0.9) 0px 1px 0px 0px inset |
Rules: what never to do in the Loops style
- NEVER substitute generic uncalibrated gray backgrounds for Loops’s exact
#FDFDFCcanvas and#F9F9F8surface pairing. - NEVER replace
Newsreaderdisplay typography or ignore its signature scale (44px / -0.02em (w500)). - NEVER use thick opaque borders that clash with
#E9E8E6(1px solid #E9E8E6). - NEVER deviate from the signature button geometry (
40px (Pill)) 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 {
/* Loops style — extracted from loops.so by taste-skill */
--canvas: #FDFDFC;
--surface: #F9F9F8;
--text: #21201C;
--text-muted: #63625E;
--accent: #7D1B0C;
--border: #E9E8E6;
--font-heading: Newsreader, Inter, system-ui, -apple-system, sans-serif;
--font-body: Inter, Inter, system-ui, -apple-system, sans-serif;
--font-mono: 'SF Mono', 'JetBrains Mono', ui-monospace, monospace;
--h1-size: 44px;
--h1-tracking: -0.02em;
--h1-weight: 500;
--radius-button: 40px;
--radius-common: 6px;
--shadow-common: rgba(33, 32, 28, 0.04) 0px 1px 2px 0px;
--ease: cubic-bezier(0.16, 1, 0.3, 1), cubic-bezier(0.16, 1, 0.3, 1);
--duration: 0.42s, 0.42s;
}tailwind.config.js
// tailwind.config.js — Loops style tokens (taste-skill)
module.exports = {
theme: {
extend: {
colors: {
canvas: "#FDFDFC",
surface: "#F9F9F8",
ink: "#21201C",
muted: "#63625E",
accent: "#7D1B0C",
line: "#E9E8E6",
},
fontFamily: {
heading: ["Newsreader", 'Inter', 'system-ui', 'sans-serif'],
sans: ["Inter", 'Inter', 'system-ui', 'sans-serif'],
mono: ["SF Mono", 'ui-monospace', 'monospace'],
},
fontSize: { display: ["44px", { letterSpacing: "-0.02em", fontWeight: "500" }] },
borderRadius: { button: "40px", card: "6px" },
boxShadow: { brand: "rgba(33, 32, 28, 0.04) 0px 1px 2px 0px" },
transitionTimingFunction: { brand: "cubic-bezier(0.16, 1, 0.3, 1), cubic-bezier(0.16, 1, 0.3, 1)" },
},
},
};.cursor/skills/loops-style/SKILL.md
--- name: loops-style description: Build UI in the Loops visual style (Warm Editorial SaaS & Newsreader Serif Craft). Use when the user asks for a Loops-like look. --- # Loops Style — Quick Rules (source: loops.so, extracted by taste-skill) ## Tokens - canvasBg: #FDFDFC — Primary Loops page canvas - surfaceElevated: #F9F9F8 — Primary elevated card & bento surface - surfaceSecondary: #F1F0EF — Secondary interactive container / hover fill - borderPrimary: #E9E8E6 — Primary structural divider (1px solid #E9E8E6) - borderSecondary: #DAD9D6 — Secondary nested module or pill border - textPrimary: #21201C — Hero H1, section H2 & high-contrast foreground - textMuted: #63625E — Lead paragraphs, descriptions & muted labels - accentPrimary: #7D1B0C — Primary interactive CTA & brand highlight (40px (Pill)) - accentSecondary: #FDFDFC — Secondary badge, syntax or telemetry highlight ## Typography - Heading font: Newsreader; body: Inter; mono: SF Mono - Hero H1: 44px | line-height 47.5px (leading-[1.08]) | letter-spacing -0.88px (tracking-[-0.02em]) | weight 500 (font-[500]) | color #21201C (text-[#21201C]) | font Newsreader - Section H2 (Primary): 44px | line-height 48px (leading-[1.09]) | letter-spacing -1.6px (tracking-[-0.036em]) | weight 500 (font-[500]) | color #FFF4EC (text-[#FFF4EC]) | font Newsreader - Section H2 (Secondary): 25.3px | line-height 29.1px (leading-[1.15]) | letter-spacing 0px (tracking-[0em]) | weight 500 (font-[500]) | color #21201C (text-[#21201C]) | font Newsreader - Card / Feature H3: 30px | line-height 33.6px (leading-[1.12]) | letter-spacing -0.6px (tracking-[-0.02em]) | weight 400 (font-[400]) | color #21201C (text-[#21201C]) | font ui-serif ## Components - Primary button: height 44px, padding 10px 20px, radius 40px, bg #21201C, text #0000EE, 12px / 400 - Card: bg #F1F0EF, border 1px solid rgba(38, 38, 26, 0.08), radius 12px, padding 4px 4px ## Never - NEVER substitute generic uncalibrated gray backgrounds for Loops’s exact #FDFDFC canvas and #F9F9F8 surface pairing. - NEVER replace Newsreader display typography or ignore its signature scale (44px / -0.02em (w500)). - NEVER use thick opaque borders that clash with #E9E8E6 (1px solid #E9E8E6). - NEVER deviate from the signature button geometry (40px (Pill)) 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/loops/
Or install the full spec
npx taste-skill add loops
Related
Loops full token specLoops ButtonsLoops CardsLoops Pricing TableResend vs LoopsLinear vs LoopsMintlify vs LoopsCal.com vs LoopsDub vs Loops
Similar styles
Get all 30 full SKILL.md specs (Cursor / Claude Code / Codex ready) plus the Pro growth skills.
See taste-skill Pro →