This document defines the visual identity of the Stack-and-Flow Design System. It is inspired by the Agent Teams landing style — a high-precision dark interface that combines technical minimalism with the energy of a professional tool. It serves as the design reference for tokens, components, and visual decisions.
Stack-and-Flow should feel like the inside of a precision instrument. The background is not merely dark — it is a deep blue-black (#060C13) that behaves like a void with a perceptible cold tint, allowing content to emerge with clarity and a coherent visual temperature.
The visual signature is the combination of opaque surfaces and blurred transparency — some cards are solid and raised, others are translucent with backdrop-filter: blur(), creating layered depth without dramatic shadows. The crimson red accent (#db143c in light, #ff0036 in dark) does not dominate — it punctuates. It appears in button gradients, subtle glows, and active states.
The defining differentiator is the subtle background grid — translucent 40×40px lines that give the canvas a drafting-sheet texture without interfering with content. Combined with the navbar backdrop-filter, it creates the feeling of working inside a native tool instead of browsing a marketing site.
Key characteristics:
- Deep blue-black (
#060C13) as the base background — Palette A, H215 S50, perceptible cold tint without losing darkness - Subtle background grid (low-opacity
rgbalines) over the main canvas - Floating navbar with
backdrop-filter: blur(16px)andbackground: rgba(6,12,19,0.75)— glass effect with a cold tint - Crimson red as a punctuation accent, never as a general fill
- Primary buttons with a multi-layer neon glow — red gradient + outer halo
- Secondary buttons with a semi-transparent border and contained glow
- Opaque cards vs. translucent cards — both coexist in the same system
- Space Grotesk Variable in all contexts — weight 500 as baseline, 700 in headings
The brand color. Two values depending on the mode:
| Context | Token | Value |
|---|---|---|
| Light mode | --color-brand-primary |
#db143c |
| Dark mode | --color-brand-primary |
#ff0036 |
Full scale (light):
| Token | Value | Usage |
|---|---|---|
primary |
#db143c |
Brand, buttons, active states |
primary-dark |
#c41136 |
Hover pressed |
primary-darker |
#b60f32 |
Active/pressed |
primary-darkest |
#8c0b26 |
Extra emphasis, accents |
primary-light |
#e63358 |
Hover lifted |
primary-lighter |
#ea4566 |
Hover elevated |
primary-lightest |
#f07a92 |
Tints, highlighted text |
Full scale (dark — more vibrant):
| Token | Value | Usage |
|---|---|---|
primary |
#ff0036 |
Brand, buttons, active states |
primary-dark |
#e60030 |
Hover pressed |
primary-darker |
#cc002b |
Active/pressed |
primary-darkest |
#990020 |
Extra emphasis, accents |
primary-light |
#ff335e |
Hover lifted |
primary-lighter |
#ff4d72 |
Hover elevated |
primary-lightest |
#ff809b |
Tints, highlighted text |
Why two values: in dark mode the red needs more vibrancy to maintain contrast and stand out against the blue-slate background.
#ff0036has more presence than#db143cand keeps an AA ratio (4.96:1) over the#060C13canvas.
Palette A — Blue-slate: H215 S50, perceptible cold tint. Verified accessible with
#FF0036on canvas (4.96:1) and surface (4.71:1).
| Token | Dark | Light | Usage |
|---|---|---|---|
background |
#060C13 |
Docusaurus default (white) | Main canvas |
background-surface |
#0B131E |
— | Solid cards, code blocks |
background-surface-raised |
#0F1824 |
— | Table headers, subtle emphasis |
navbar-bg |
rgba(6,12,19,0.75) |
rgba(255,255,255,0.7) |
Navbar with backdrop blur |
sidebar-mobile-bg |
rgba(6,12,19,1.0) |
#ffffff |
Mobile sidebar |
dropdown-bg |
#0B131E |
#ffffff |
Dropdown menus |
| Token | Dark | Usage |
|---|---|---|
surface-raised |
#0F1824 |
Table headers, subtle backgrounds |
border |
#172230 |
Standard borders, separators |
border-strong |
#202C3C |
Borders for interactive components |
| Role | Dark | Light | Approx. contrast |
|---|---|---|---|
| Primary (headings) | #ffffff |
#000000 |
21:1 ✅ |
| Secondary (body) | #cccccc |
system | ~7:1 over #060C13 ✅ |
| Tertiary (labels, nav) | #888888 |
system | ~5:1 over #060C13 ✅ |
| Active sidebar | #adadad |
— | ~6:1 over #060C13 ✅ |
| Disabled / muted | #6a6b6c |
— | ~4.5:1 — disabled, WCAG exempt ✅ |
| Role | Token | Dark | Light |
|---|---|---|---|
| Error / Danger | --color-error |
#ff0036 |
#db143c |
| Success | --color-success |
#22c55e |
#16a34a |
| Warning | --color-warning |
#fbbf24 |
#d97706 |
| Info | --color-info |
#55b3ff |
#0077cc |
Used in overlays, glows, and interactive states:
| Role | Value |
|---|---|
| Red glow base | rgba(255, 0, 54, 0.15) |
| Red glow active | rgba(255, 0, 54, 0.30) |
| Red menu active bg | rgba(255, 0, 54, 0.10) |
| Red menu hover bg | rgba(255, 255, 255, 0.05) |
| Red tinted surface | rgba(255, 0, 54, 0.06) |
| Warm amber glow | rgba(255, 185, 0, 0.12) |
| White overlay subtle | rgba(255, 255, 255, 0.05) |
| White overlay medium | rgba(255, 255, 255, 0.07) |
| White border faint | rgba(255, 255, 255, 0.06) |
| Black overlay heavy | rgba(0, 0, 0, 0.60) |
Space Grotesk Variable — a geometric humanist family with all weights in a single variable font file. It reduces CLS (Cumulative Layout Shift) by avoiding font swaps.
@import '@fontsource-variable/space-grotesk';
font-family: 'Space Grotesk Variable', 'Space Grotesk', system-ui, -apple-system, sans-serif;Space Grotesk replaces Inter in every context. It is used for headings, body text, buttons, captions, UI code, and navigation.
Monospace: system font (ui-monospace, SFMono-Regular, Menlo) for technical code blocks.
| Weight | Usage |
|---|---|
400 |
Secondary text, light captions, fine print |
500 |
Body baseline — the system's working weight |
600 |
Buttons, badges, emphasis labels, bold captions |
700 |
Headings — all h1–h6 |
Principle: weight 500 as the baseline (not 400) adds extra heft that improves readability on dark backgrounds. Weight 400 is reserved for contexts that need stronger visual hierarchy contrast.
| Role | Size | Weight | Line Height | Letter Spacing | Notes |
|---|---|---|---|---|---|
| Display Hero | 56–64px | 700 | 1.10 | 0px | Landing headings |
| Section Heading | 36–48px | 700 | 1.15 | 0px | Main sections |
| Card Heading | 22–24px | 700 | 1.20 | 0px | Card titles |
| Sub-heading | 18–20px | 600 | 1.40 | 0.1px | Subtitles, features |
| Body Large | 18px | 500 | 1.60 | 0.2px | Prominent paragraphs |
| Body | 16px | 500 | 1.60 | 0.2px | Primary body text |
| Body Small | 14px | 500 | 1.50 | 0.1px | UI labels, nav links sidebar |
| Button | 16px | 600 | 1.15 | 0.01em | letter-spacing: 0.01em |
| Nav Link | 16px | 600 | 1.40 | 0.01em | Main navbar links |
| Caption | 14px | 500 | 1.40 | 0.2px | Metadata, labels |
| Badge / Tag | 10–12px | 600–700 | 1.40 | 0.02em | Micro-labels, "New" badges |
| Code (UI) | 93% | 500 | 1.60 | 0.3px | Inline code, snippets |
| Announcement | 13–14px | 500 | — | 0.01em | Announcement banners |
- Positive tracking in dark mode: +0.01em–+0.2px in body text compensates for white bloom on black
- 700 only in headings: headings consistently use bold (700) — never body text
- No
font-style: italicfor emphasis — use weight or color instead - Space Grotesk everywhere: do not mix it with other families except system monospace for code
Unlike a shadow-based elevation system, Stack-and-Flow uses an opacity and blur system that distinguishes layers by their transparency level.
| Level | Type | Treatment | Usage |
|---|---|---|---|
| Base | Opaque | background: #060C13 + subtle grid |
Page canvas |
| Raised | Opaque | background: #0B131E + border: 1px solid #172230 |
Solid cards, code blocks, dropdowns |
| Frosted | Translucent | background: rgba(6,12,19,0.75) + backdrop-filter: blur(16px) |
Navbar, floating overlays |
| Frosted Light | Translucent | background: rgba(255,255,255,0.7) + backdrop-filter: blur(16px) |
Navbar in light mode |
| Tinted | Tinted translucent | background: rgba(255,0,54,0.06–0.15) |
Secondary buttons, hover states, active menus |
| Overlay | Dark translucent | background: rgba(0,0,0,0.6) + backdrop-filter: blur(4px) |
Modal backgrounds, sidebar backdrop |
Opaque card — use for structured content, tables, and code snippets:
background: #0B131E;
border: 1px solid #172230;
border-radius: 8px;Frosted card — use for elements that float above content (navbar, tooltips, popovers):
background: rgba(6, 12, 19, 0.75);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: 8px;Tinted card — use for active states or accent-emphasis elements:
background: rgba(255, 0, 54, 0.08);
border: 1px solid rgba(255, 0, 54, 0.2);
border-radius: 8px;Only elements that literally float above others (navbar, mobile sidebar, modals, tooltips) use backdrop-filter. Content cards do not — they are opaque. This distinction is intentional: blur means “I am floating,” opaque means “I am content.”
Primary — Neon Gradient:
background: linear-gradient(135deg, #ff1a4b 0%, #cc0030 100%);
border: none;
border-radius: 9999px; /* pill */
color: #ffffff;
font-weight: 500;
letter-spacing: 0.01em;
box-shadow:
0 0 0 1.5px rgba(255, 60, 90, 0.5),
0 0 16px 4px rgba(255, 0, 54, 0.45),
0 0 40px 6px rgba(255, 0, 54, 0.18),
inset 0 1px 0 rgba(255, 255, 255, 0.15);Hover: stronger gradient + amplified outer glow.
Secondary — Ghost with contained glow:
background: rgba(255, 0, 54, 0.06);
border: 1.5px solid rgba(255, 0, 54, 0.5);
border-radius: 9999px;
color: #ffffff;
box-shadow:
0 0 8px 2px rgba(255, 0, 54, 0.15),
0 0 24px 4px rgba(255, 0, 54, 0.07),
inset 0 0 10px rgba(255, 0, 54, 0.04);Light mode: color: #cc0030, opaque border.
Transition: box-shadow 0.25s ease, background 0.25s ease — never an instant color change.
Shape: all buttons are pill-shaped (border-radius: 9999px) — no rectangular buttons in the main UI.
background: rgba(6, 12, 19, 0.75);
backdrop-filter: blur(16px);
border-bottom: 1px solid #172230;- Links:
color: #9c9c9d→#ffffffon hover, optionaltext-decoration: underline - CTA button at the end: primary pill button
- Sticky at the top, smooth transition on scroll
- Mobile: hamburger → sidebar with fade + slide (
translateX(-16px)→0)
Three coexisting variants:
- Opaque (
#0B131E+#172230border) — content, docs, features - Frosted (rgba + blur) — floating elements
- Tinted red (
rgba(255,0,54,0.06–0.10)+ semi-transparent red border) — active states, accent highlights
Standard border-radius: 8px. Large cards: 12px.
background: rgba(22, 163, 74, 1); /* success */
/* or */
background: rgba(255, 0, 54, 1); /* brand */
color: #ffffff; /* dark: use #000 for green */
border-radius: 3px;
padding: 1px 6px;
font-size: 10px;
font-weight: 700;
letter-spacing: 0.02em;“New” badge: green (#16a34a light, #22c55e dark with color: #000).
background: #0B131E;
border: 1px solid #202C3C;
border-radius: 8px;
color: #f9f9f9;Focus: brighter border + box-shadow: 0 0 0 3px rgba(255,0,54,0.12).
Placeholder: #6a6b6c.
background: #0B131E;
border: 1px solid #172230;
border-radius: 8px;
font-size: 93%; /* --ifm-code-font-size */Highlighted line: rgba(219,20,60,0.10) (light) / rgba(255,0,54,0.15) (dark).
Reusable pattern for any badge with a numeric metric:
- Left section:
rgba(255,255,255,0.05)+ icon - Divider:
1px solid #262626 - Right section:
rgba(255,185,0,0.07)+ number in#fbbf24 - Hover: golden border
rgba(255,185,0,0.55)+box-shadow: 0 0 0 3px rgba(255,185,0,0.12)
border-bottom: 1px solid rgba(255, 0, 54, 0.35);
font-size: 0.85rem;
font-weight: 500;
letter-spacing: 0.01em;Links: #ff4d6d → #ff8099 on hover, with border-bottom: 1px solid rgba for a subtle underline.
Some components use borders with variable intensity — not a flat border but a gradient border with a highlight flare. The effect simulates directional lighting across the edge of the component.
Technique (pseudo-element):
/* The element needs position: relative, a solid background, and border: 1px solid transparent */
.gradient-border {
position: relative;
border: 1.5px solid transparent;
background-clip: padding-box;
}
.gradient-border::before {
content: '';
position: absolute;
inset: -1.5px;
border-radius: inherit;
background: linear-gradient(
135deg,
rgba(255, 255, 255, 0.18) 0%,
rgba(255, 0, 54, 0.55) 40%,
rgba(255, 0, 54, 0.15) 100%
);
z-index: -1;
}Secondary variant (ghost button with accent glow):
.gradient-border::before {
background: linear-gradient(
135deg,
rgba(255, 255, 255, 0.12) 0%,
rgba(255, 0, 54, 0.45) 45%,
rgba(255, 0, 54, 0.08) 100%
);
}Usage rule: only on interactive elements that need border emphasis — secondary buttons, focused inputs, active cards. Never on structural borders (separators, tables).
Three columns of links over the base background (#060C13). No cards, no borders — the content floats directly on the canvas.
footer {
background: #060C13;
border-top: 1px solid #172230;
padding: 48px 0 24px;
}Structure:
- Columns: Documentation / Community / More (or whatever the product defines)
- Column titles: 14px Space Grotesk 600,
#ffffff - Links: 14px Space Grotesk 500,
#888888→#ccccccon hover - Copyright: 12px Space Grotesk 400,
#6a6b6c, centered - Column gap:
32px–48px - No
backdrop-filter, no cards, no shadows — opaque and clean
The main canvas uses a double-line grid as a technical texture:
Dark:
background:
linear-gradient(rgba(255, 255, 255, 0.025) 1px, transparent 1px) 0 0 / 40px 40px,
linear-gradient(90deg, rgba(255, 255, 255, 0.025) 1px, transparent 1px) 0 0 / 40px 40px,
#060C13;Light:
background:
linear-gradient(rgba(0, 0, 0, 0.035) 1px, transparent 1px) 0 0 / 40px 40px,
linear-gradient(90deg, rgba(0, 0, 0, 0.035) 1px, transparent 1px) 0 0 / 40px 40px,
var(--background);Rule: the grid appears on the docs and landing canvas. Not inside modals, dropdowns, or cards.
| Name | Value | Usage |
|---|---|---|
| Base glow | 0 4px 20px rgba(219,20,60,0.15) |
Light: hover for branded elements |
| Active glow | 0 8px 30px rgba(219,20,60,0.30) |
Light: active states |
| Base glow dark | 0 4px 20px rgba(255,0,54,0.15) |
Dark: hover for branded elements |
| Active glow dark | 0 8px 30px rgba(255,0,54,0.30) |
Dark: active states |
| Amber stars glow | 0 0 0 3px rgba(255,185,0,0.12) |
GitHub stars badge hover |
.fade-in-section {
opacity: 0;
transform: translateY(12px);
transition:
opacity 560ms cubic-bezier(.2,.8,.2,1),
transform 560ms cubic-bezier(.2,.8,.2,1);
will-change: opacity, transform;
}
/* When entering the viewport: */
.fade-in-visible {
opacity: 1;
transform: translateY(0);
}Curve cubic-bezier(.2,.8,.2,1) — a soft ease-out with a slight initial overshoot.
Stack-and-Flow provides two animated background primitives as independent components. They are not one component with a theme prop — they are separate engines with different responsibilities.
A 2D particle physics engine. It manages particle position, velocity, acceleration, and pulsing through requestAnimationFrame.
What changes per theme (declarative configuration):
type CanvasTheme = {
orbs: {
count: { mobile: number; desktop: number }
color: string // e.g. '255, 0, 54'
minRadius: number
maxRadius: number
}
sparks: {
count: { mobile: number; desktop: number }
color: string
}
foci: Array<{
baseX: number // relative position 0–1
baseY: number
color: string
speed: number
range: number
}>
ambient: {
color: string
opacity: number
}
fps: { mobile: number; desktop: number }
}What does NOT change (internal engine logic): particle physics, horizontal wrap, resize handler, frame throttling.
Included themes:
bokeh— diffuse red orbs + halo sparks, dynamic foci. Inspired by photographic lens bokeh.
Usage:
<CanvasEngine theme="bokeh" className="absolute inset-0" aria-hidden />Scalability: a new theme = a themes/aurora.ts file with configuration. If the new effect needs different physics (for example particles following the cursor), it is a new engine — not another prop.
Component for animated SVGs with declarative interpolation (opacity, transform, path morph). It is a completely different engine from CanvasEngine — they do not share code.
<SvgAnimation src={LogoSvg} animation="fade-pulse" />Available animations:
fade-pulse— soft cyclical opacity (0.4 → 1.0 → 0.4)float— smooth translateY (-6px → 0 → -6px)spin-slow— full rotation in 8s
Layout wrapper that positions any background primitive. Products use it as a container — the design system does not dictate what goes inside.
// Canvas only
<BackgroundSlot>
<CanvasEngine theme="bokeh" />
</BackgroundSlot>
// SVG only
<BackgroundSlot>
<SvgAnimation src={LogoSvg} animation="fade-pulse" />
</BackgroundSlot>
// Free composition
<BackgroundSlot>
<CanvasEngine theme="bokeh" />
<SvgAnimation src={LogoSvg} animation="fade-pulse" />
</BackgroundSlot>CSS:
.background-slot {
position: absolute;
inset: 0;
overflow: hidden;
pointer-events: none;
z-index: 0;
}Hero is NOT a design-system component — each product defines its own visual narrative. The design system provides the primitives used to build it.
Recommended pattern:
<section className="relative overflow-hidden">
{/* Layer 0 — animated background */}
<BackgroundSlot>
<CanvasEngine theme="bokeh" />
</BackgroundSlot>
{/* Layer 1 — content */}
<div className="relative z-10 max-w-[1200px] mx-auto px-6 md:px-10 lg:px-16 py-20 md:py-32">
<h1>…</h1>
<p>…</p>
<div className="flex gap-4">
<Button variant="primary" rounded>Get Started</Button>
<Button variant="secondary" rounded>View on GitHub</Button>
</div>
</div>
</section>Rule: the background grid (section 6) and CanvasEngine coexist — the grid is CSS, the canvas sits above it with optional mix-blend-mode: screen so glows can interact with the grid.
8px — all measurements are multiples of 8 or 4.
1 · 2 · 3 · 4 · 8 · 10 · 12 · 16 · 20 · 24 · 32 · 40 · 48 · 64 · 80 · 96 · 120
- Max-width:
1200px, centered withmargin: 0 auto - Padding horizontal:
24px(mobile) →40px(tablet) →64px(desktop)
- Vertical padding between sections:
80px–120px - Internal card padding:
16px–32px - Gap between related elements:
8px–16px
- Hero: one centered column
- Features: 2–3 columns on desktop, 1 column on mobile
- Docs: fixed sidebar + content + optional TOC
| Value | Usage |
|---|---|
3px |
Badges micro, "New" labels |
6px |
Dropdown items, menu links |
8px |
Input fields, standard cards, secondary buttons, code blocks |
9999px |
Pill buttons (CTA, nav CTA) — maximum circular shape |
12px |
Large cards, pagination nav links |
All text values on their respective backgrounds meet at least WCAG AA (4.5:1). Primary text values meet AAA (7:1+).
| Combination | Contrast | Level |
|---|---|---|
#ffffff over #060C13 |
~21:1 | AAA ✅ |
#cccccc over #060C13 |
~7.5:1 | AAA ✅ |
#888888 over #060C13 |
~5.1:1 | AA ✅ |
#adadad over #060C13 |
~6.1:1 | AA ✅ |
#ff0036 over #060C13 |
~4.96:1 | AA ✅ |
#ff0036 over #0B131E |
~4.71:1 | AA ✅ |
#ff0036 over #0F1824 |
~4.51:1 | AA ✅ |
#ff335e over #0F1824 |
~5.00:1 | AA ✅ (use for links/icons on raised surfaces) |
#db143c over #ffffff |
~4.7:1 | AA ✅ |
#cc0030 over #ffffff |
~5.4:1 | AA ✅ |
#22c55e over #060C13 |
~6.8:1 | AA ✅ |
#000000 over #22c55e |
~6.8:1 | AA ✅ (badge dark) |
⚠️ Never use#ff0036as text color on#ffffffin light mode — insufficient contrast. Always use#cc0030or darker in light mode.⚠️ #6a6b6c(disabled/muted) does not meet AA on dark backgrounds — that is acceptable: WCAG explicitly exemptsdisabledstates from the contrast requirement.
- Pill buttons: default minimum height
44px - Action scale
xs | sm | md | lg:xsis the dense compact variant forButton,IconButton, and CTALink(button/outlined), with lower height and padding; usesmor above when you need to preserve the44pxtarget Linkregularremains typographic and inline; CTAsmand above keep the minimum44pxarea- Nav links: minimum
44pxheight including padding - Menu items: minimum
padding: 7px 12pxwith 14px font
- All interactive elements use
focus-visiblewithbox-shadow: 0 0 0 3px rgba(255,0,54,0.4)in dark mode andbox-shadow: 0 0 0 3px rgba(219,20,60,0.35)in light mode - Never
outline: nonewithout a visible alternative
- Transitions: maximum
560ms. Respectprefers-reduced-motion:
@media (prefers-reduced-motion: reduce) {
.fade-in-section {
transition: none;
opacity: 1;
transform: none;
}
}- Use
#060C13as the base dark background — deep blue-slate with a cold H215 S50 tint - Apply the background grid (opacity 0.025–0.035) on the main canvas with
#060C13as the base color - Distinguish
backdrop-filter: blur(floating elements) frombackground: #0B131E(content) - Use the more vibrant red in dark mode (
#ff0036) and the calmer one in light mode (#db143c) - For links/icons on
surface-raised(#0F1824) use#ff335e— it keeps an exact 5:1 ratio - Build primary buttons with a gradient + multi-layer glow — the neon treatment is part of the signature
- Keep secondary text at
#cccccc(dark) for ~7.5:1 contrast - Use
border-radius: 9999pxexclusively on primary CTA buttons - Apply
transition: box-shadow 0.25s ease, background 0.25s easeto all interactive elements - Use
font-weight: 700only on headings (h1–h6), never body text - Add
will-change: opacity, transformto entrance animations to avoid jank
- Do not use pure black
#000000as the dark background — the approved palette is blue-slate#060C13 - Do not apply
backdrop-filter: blurto content cards — only to floating elements - Do not use weights below 500 for body text in dark mode — 400 feels too thin
- Do not create decorative shadows without purpose — depth comes from surface contrast, not from box-shadows
- Do not mix pill buttons with rectangular buttons in the same section
- Do not omit the
border: 1px solidon dark cards — without it, the cards blend into the background - Do not place the background grid inside cards, modals, or dropdowns — only on the root canvas
- Do not apply arbitrary colors outside the defined palette — every new color needs contrast justification
- Do not animate layout-forcing properties (
width,height,top,left) — onlyopacity,transform,box-shadow
Dark background: #060C13
Dark surface: #0B131E
Dark surface-raised: #0F1824
Dark border: #172230
Dark border-strong: #202C3C
Brand red (dark): #ff0036
Brand red-light (dark): #ff335e ← use on surface-raised
Brand red (light): #db143c
Primary text (dark): #ffffff
Secondary text (dark): #cccccc
Tertiary text (dark): #888888
Success (dark): #22c55e
Warning (dark): #fbbf24
Navbar bg (dark): rgba(6, 12, 19, 0.75) + blur(16px)
Hero section:
"Create a hero section with
#060C13background, a 40px line grid usingrgba(255,255,255,0.025), a 64px Space Grotesk 700 heading in#ffffff, 18px weight-500 description text in#cccccc, and two pill buttons: primary with#ff1a4b → #cc0030gradient and multi-layer neon glow, secondary withrgba(255,0,54,0.5)border andrgba(255,0,54,0.06)background"
Feature card:
"Design a feature card with
#0B131Ebackground,1px solid #172230border,border-radius: 8px, a 22px Space Grotesk 700 heading, 16px weight-500 body text in#cccccc, and an icon in#ff0036in the top-left corner"
Navbar:
"Build a sticky navbar with
background: rgba(6,12,19,0.75),backdrop-filter: blur(16px),border-bottom: 1px solid #172230, links in#888888→#ffffffon hover, and a pill CTA button with a red gradient on the right"
Active sidebar state:
"Apply active state with
background: rgba(255,0,54,0.10),color: #ff0036,font-weight: 500,border-radius: 8px— no extra border"
Badge "New":
"Badge with
background: #22c55e(dark) /#16a34a(light),color: #000(dark) /#fff(light),border-radius: 3px,padding: 1px 6px, 10px Space Grotesk 700,letter-spacing: 0.02em"
- Is the background
#060C13(blue-slate) — not pure black#000000, not dark gray? - Do cards have
1px solid #172230borders — without them they blend into the background? - Is
backdrop-filter: blurused only on floating elements (navbar, modals)? - Is the secondary text
#cccccc— not#999999or lower contrast? - Do primary buttons use gradient + glow instead of a flat color?
- Are buttons pill-shaped (
border-radius: 9999px) — not rectangular? - Is the red in light mode
#db143cor darker — never#ff0036? - Is Space Grotesk Variable loaded as a variable font — not as multiple static weights?
- Do entrance animations use
cubic-bezier(.2,.8,.2,1)withwill-change? - Is
prefers-reduced-motionpresent for scroll animations?