● v2  ● Live  Design system preview Bulevar self-hosted · per-word outline · 2px stroke Source: outthe.re

Creator economy · Light Mode · v2

Level Up! Dominate The Game.

Stream. Link. Repeat. The light-mode translation keeps the brand's gig-poster voice — the real Bulevar face, the source's 0.75 line-height, and a single outlined word as the rhythm beat.

New
Featured creator
@retroren

v2 · Hero slider headlines

One mechanic, seven slides

All seven source slider headlines, with the per-word outline pattern. Specs locked to the live source: Bulevar Webfont · weight 400 · 234px / 175.5px (0.75 ratio) · letter-spacing normal · uppercase · 2px stroke on outlined words. Slides 3, 5, 7 use two-word phrases; the rest use a single word. Hover any outlined word to see it fill with the lime accent (#DFF352) — 200ms ease-out fade across fill, stroke, and color.

Serve Up Your Content Up Hot!

slide-01 outline word: Content
single-word accent on the noun

Code. Compile. Share. Connect.

slide-02 outline word: Share.
single-word accent on the verb

Paying Too Much Tax? Sorted...

slide-03 outline phrase: Too Much
two-word accent — adverb + adjective pair

Break The Mold, Link Your World

slide-04 outline word: Mold,
single-word accent on the object

Flex Your Links. Fuel Your Brand.

slide-05 outline phrase: Your Links.
two-word accent — possessive + noun

Level Up! Dominate The Game.

slide-06 outline word: Dominate
single-word accent on the verb

Shine. Link Smarter. Be Seen.

slide-07 outline phrase: Link Smarter.
two-word accent — verb + adverb

Identity · official mark

Brand mark

The OutThere logo is a two-colour SVG. The tag glyph uses --accent (lime); the wordmark + decoration use --text (warm white). Source is at ./v2/assets/weareoutthere-logo.png · viewBox 480×203 · aspect ratio ≈ 2.36 : 1.

Lime-token note · two siblings. The logo's tag was historically #DFFF17 (a brighter neon-yellow lime). The current system uses #DFF352 (= oklch(92% .18 116), sourced from the lovable reference) as the canonical --accent. These are sibling lime tokens with the same hue range but ~2pt different lightness. The SVG declares fill: var(--accent, #DFF352), so the logo inherits whichever value you bind to --accent. To go back to the original brighter neon-yellow, override the variable in the host page: :root { --accent: #DFFF17; }

Palette · canonical tokens

Stage & rooms

Brand fills always pair with text-inverse, never white.

Surface (the stage)
#0E1114

background

Page base

#161A1E

surface

Default section

#1D2125

surface-raised

Cards / inputs

#2A3237

surface-strong

Hover / divider

#231F20

surface-ink

Footer ink

#2C333A

border

Hairline

Brand (the rooms)
#FF5D7D

primary

Hot pink — focus / CTA hover

#30D1C8

secondary

Teal — secondary action

#DFF352

accent / neon

Lime · highlight + glow (oklch 92% .18 116)

#FF7A3A

accent-orange

Warm room

#00C5E0

accent-cyan

Cyan card

#F2B4F2

accent-pink

FAQ / content rooms

#FFDEDE

accent-soft-pink

Quiet warm room

#FBF5E5

accent-cream

Editorial room

#16213C

accent-navy

Technical / quote room

Text
#F4F1EA

text

Default body on dark

#B7BBC2

text-muted

Secondary copy

#7E848C

text-subtle

Tertiary / meta

#0E1114

text-inverse

On bright fills

Type · Bulevar + Roboto Flex

Type does the talking

Display is the real Bulevar Webfont at weight 400 (it ships at one weight only). Body is Roboto Flex; app/UI titles are Plus Jakarta Sans. Letter-spacing is normal on display, +0.02 to +0.06em uppercase on labels.

DISPLAY · ONCE PER PAGE

display-2xl

234px / 0.75 · Bulevar 400
Break the mold
DISPLAY · SECTION OPENER

display-xl

160px / 0.78 · Bulevar 400
Link your world
DISPLAY · SECONDARY

display-lg

112px / 0.80 · Bulevar 400
Share boldly. Stay loud.
HEADLINE

headline-lg

80px / 0.82 · Bulevar 400
Serve up your content hot
HEADLINE

headline-md

48px / 0.86 · Bulevar 400
Ready to get out there?
UI / APP TITLE

title-lg

Plus Jakarta · 28px / 700
Dashboard overview
UI / APP TITLE

title-md

Plus Jakarta · 20px / 700
Recent activity
BODY

body-lg

Roboto Flex · 20px / 1.5
From recipes to reviews, we'll link it all. The dark-mode translation of OutThere keeps every colour band — just brings the stage down to a deeper near-black so the brand pops harder.
BODY

body-md

Roboto Flex · 16px / 1.5
Default reading size for paragraphs, captions on content cards, and most form input text. Generous 1.5 line height keeps copy breathable against saturated colour bands.
BODY

body-sm

Roboto Flex · 14px / 1.45
Secondary copy, helper text, and metadata. Always one rung quieter than the body it supports.
LABEL

label-lg

16px / 600 / +0.02em / UPPER
Create Account · Learn More · More Options
CAPTION

caption

12px / 400
8 min read · OutThere Chronicles · Updated yesterday
CODE / DATA

code

JetBrains Mono · 13px
const palette = { primary: "#FF5D7D", accent: "#DFF352" };

Geometry · spacing & radius

Spacing & radius

Two-radius doctrine: brand rooms are sharp (zero radius); interactive controls are maximally round (64px pill). The lg / md / sm rungs are reserved for non-brand surfaces like cards, FAQs, and tooltips.

Spacing

2xs

2px

xs

4px

sm

8px

md

16px

lg

24px

xl

32px

2xl

48px

3xl

64px

4xl

96px

section-y

96px (desktop)

Radius

none

0px · brand rooms

sm

8px · FAQ / tooltip

md

12px · alerts / small surfaces

lg

16px · cards / modals

pill

64px · buttons / inputs

full

9999px · avatars

v2 Stroke on a coloured room

Universal Freedom Without Restrictions

Outlined words on a brand room flip stroke colour to text-inverse. Same 2px width.

Learn More
Featured

100% Link Control

No throttle. No paywall. No filter you didn't set yourself.

Brand band · soft pink

Share Boldly. Stay In Control.

The contour treatment keeps the brand voice loud without saturating the eye. One word is the beat.

More Options
Testimonial

"This is what gigging was meant to look like."

— Amaya R., touring chef & creator

Category cards

Zero radius, full saturation

Single-fill, hard-edge, ink-dark text. Never apply shadow or border. The colour edge is the boundary.

@CodeMonkeyAI

Coding the future with AI

Latest AI projects, drops & tutorials.
@FoodieFiona

Slow recipes, fast life

From mise to muse — daily food drops.
@RetroRen

90s gaming, future tense

Speedruns, mods & the occasional rant.
@TideTeller

Surf log · 24/7

Daily swell, tide windows, and gear.

Controls · pills + tags + signals

Buttons, chips & alerts

Every interactive control is a pill. Primary on dark = light fill, ink label. Hover flips to hot pink. Lime is the system accent — reserve it for highlights and one-of-a-kind CTAs.

Buttons

Primary Primary · hover Secondary Ghost link Accent · Lime Accent · Pink Small pill Large pill Disabled

Chips & badges

Default Featured ● Published ● Action needed Category Topic

Alerts & toasts

Link copied

Your OutThere URL is on the clipboard.

Verify your handle

One more step to publish your profile.

Payment declined

We couldn't process this card. Try another.

Discover creators

Carousel

Cards sit on surface-raised, never tinted by accent colour.

Top creator

@codemonkeyai

AI · Code · Tutorials

@foodiefiona

Food · Recipes

New

@retroren

Gaming · Retro

@tideteller

Surf · Outdoors

Chronicles · editorial

Article cards

Image at top, 16:10 ratio. Category tag is the lime --accent chip — the one place we let lime touch a dark card.

Product

Why we built OutThere in the open

The story behind the launch — from the first dirty Figma to the loudest landing page we could imagine.

8 min read · OutThere Chronicles
Creator

10 link-in-bio mistakes you're still making

Stop hiding your best content under a generic grid. A practical guide for creators who actually ship.

6 min read · OutThere Chronicles
Design

Designing for loud, in light mode

How we kept the saturation of a gig-poster site while moving the whole stage down to near-black.

12 min read · OutThere Chronicles

Product · app surfaces

Inside the product

When you cross from marketing to the app, density doubles. Type drops to Plus Jakarta Sans titles + Roboto Flex body. Buttons keep their pills. Numbers use tabular numerals.

Overview · Last 30 days

Profile views

42,318

↑ 12.4% vs prev

Link clicks

9,471

↑ 6.1% vs prev

Avg. CTR

22.4%

↓ 0.8% vs prev
LinkClicksCTRStatus
Spring recipe drop2,14831.2%Live
Behind the scenes — episode 41,51224.0%Live
Sponsor: ColdBrew Co.98814.6%Pending
Q&A signup73411.9%Live

Forms · surfaces · focus

Inputs, focus, modals

Single-line inputs are full-pill (64px). Focus ring is hot pink at 4px translucent. Textareas drop to --r-lg (16px) — a pill would be wrong on a multi-line field.

Sign in to OutThere

Welcome back. Pill the action through.

We'll never share it. Promise.

Choose a plan from the dropdown above.

Focus state demo

Focus uses --focus ring at 4px translucent. Same colour as --primary.

Tooltip / popover

Tip — pill all the way down

FAQ band · current

Frequently Asked

01 — 04 What makes OutThere different from a typical link-in-bio?
We don't gate links behind subscriptions or throttle reach. OutThere is yours: the page, the data, and the design. Pair any link with any room colour, and ship.
02 — 04 Can I bring my own domain?
03 — 04 Is there a free tier?
04 — 04 How do payouts work for creators?

v2 New Pattern · FAQ proposal

FAQ — style alternatives

The current "Small print" FAQ on home, profile, and link pages reads as generic dark-card UI — it doesn't carry any of the v2 brand voice (Bulevar display, hairline-and-flat-colour depth, two-radius doctrine, per-word outline mechanic). Below are three on-brand alternatives. Pick one and we'll port it through every page.

Option A · Index

The small print.

Editorial poster / newsprint layout. No card chrome — hairlines do the work. Numbered rows, Bulevar question, thin + glyph. Open state lifts the hairlines + numeral to lime.

01 — 06 Who can knock before doors open?

Anyone earning, or paying, creators directly. We're vouch-first, so knocks attached to an existing member move faster — but cold knocks are read, every one.

02 — 06 How does the 5% actually settle?

Every connected platform reports gross earnings to OutThere monthly. We attribute, calculate 5% of attributable revenue, and pay on the 15th of the following month — bank transfer, no held funds.

03 — 06 What counts as "every platform"?

If a creator earns on it and we can read the rev report, it counts. Currently: OnlyFans, Patreon, Substack, YouTube, Twitch, Whop, Beacons, Stan, and any custom Stripe-billed page.

04 — 06 Is there a cliff, an expiry, or a clawback?

No cliff, no expiry. The 5% stands as long as the creator is on the platform you referred them to. Clawback only applies to chargebacks > £500 in the first 60 days.

01 Who can knock before doors open? +

Anyone earning, or paying, creators directly. We're vouch-first, so knocks attached to an existing member move faster — but cold knocks are read, every one.

02 How does the 5% actually settle? +

Every connected platform reports gross earnings monthly. We attribute, calculate 5% of attributable revenue, and pay on the 15th.

03 What counts as "every platform"? +

If a creator earns on it and we can read the rev report, it counts. OnlyFans, Patreon, Substack, YouTube, Twitch, Whop, Beacons, Stan, and any custom Stripe page.

04 Is there a cliff, an expiry, or a clawback? +

No cliff, no expiry. Clawback only applies to chargebacks > £500 in the first 60 days.

Option B · Stripe

The small print.

Sharp-cornered tinted rows (brand-room doctrine). Numbered column on the left, mono. Open row becomes a full lime "room" with ink text — carries the same hover doctrine as the band sections.

Option C · Headline

The small print.

Most on-brand. Each question is a full-bleed Bulevar headline using the per-word outline mechanic. Hover / open fills the outlined word lime — the same beat used on the hero, link pills, and stat eyebrows.

Who can knock before doors open?

— close

Anyone earning, or paying, creators directly. We're vouch-first, so knocks attached to an existing member move faster — but cold knocks are read, every one.

How does the 5% actually settle?

+ open

Every connected platform reports gross earnings to OutThere monthly. We attribute, calculate 5% of attributable revenue, and pay on the 15th of the following month — bank transfer, no held funds.

What counts as every platform?

+ open

If a creator earns on it and we can read the rev report, it counts. OnlyFans, Patreon, Substack, YouTube, Twitch, Whop, Beacons, Stan, and any custom Stripe-billed page.

Is there a cliff, an expiry, or a clawback?

+ open

No cliff, no expiry. The 5% stands as long as the creator is on the platform you referred them to. Clawback only applies to chargebacks > £500 in the first 60 days.

Trade-offs

Option Voice Density Brand fit
A · IndexEditorialMedium★★★★☆
B · StripeUI / utilityHigh★★★★☆
C · HeadlinePosterLow★★★★★

Recommendation

C · Headline carries the most v2 brand voice — it reuses the per-word outline mechanic that already runs the hero, link pills, and stat eyebrows. A · Index is the safest mid-density alternative if Bulevar at headline scale per row is too loud. B · Stripe works best on dense FAQ pages (10+ items) where you want a "settings list" feel.

Common contract

All three use native <details> markup — no JS required. Toggle the demos to verify behaviour. Once you pick, we'll port through home / profile / light / bg variants.

v2 New Pattern · Animated

Split-flap ticker board

Solari / airport-style flap cards for live or one-shot numbers. Two scales share one keyframe — `rotateX(0 → -90deg)` with `transform-origin: bottom center` over 420ms, fading out in the last 20%.

Large · hero countdown · ticks 1 Hz

0
0
0
0
0
0
Days
0
0
0
0
0
0
Hours
0
0
0
0
0
0
Minutes
0
0
0
0
0
0
Seconds

Small · profile stat strip · one-shot intro roll-in

Same Solari card chrome as the large countdown — scaled down to 30 × 44, digit 46px / line 44. Hydrated from .stat-flaps[data-value]; cascades in from 0 to its target with a 70 ms stagger.

222...444MMM
Following
999
Platforms
£££888222000kkk
Tracked '26
'''222666
Member since

When to use

✓ Live countdowns (hero, presale, launch banners).
✓ Stats on profile / member pages — first-time arrival flourish.
✓ Anything mechanical: money tracked, votes counted, room capacity.

When not to use

✗ Pure body copy — Bulevar at small sizes already provides display energy.
✗ Inputs / form fields — flaps imply read-only.
✗ More than one large-scale ticker per page (small-scale strips can repeat).

API

Markup — each card carries a static top + bottom half and an animating top-flap leaf.

<span class="flap-lg" data-d="9">
  <span class="half top"><span>9</span></span>
  <span class="half bottom"><span>9</span></span>
  <span class="flap-leaf"><span>9</span></span>
</span>

Small-scale hydration — render flaps from a string.

<span class="stat-flaps" data-value="£820k"></span>

v2 New Pattern · Composition

Profile composition

Linktree-style profile pattern built on existing tokens. Reuses the hug-centre hero treatment, lime verified chip, ticker-driven stats, pill-row link list, and ghost-chip tip row. See profile-rebecca-crow.html for the full page.

Member 001 · Founder · London, UK Verified

Rebecca
Crow.

outthe.re / rebeccacrow

Founder of OutThere. Every link runs on the 5% mechanic — paid, attributed, settled on the first Monday of each month.

Following
Platforms
Tracked

Link-row anatomy

Icon variants — by platform family

Colour-coded circular icons signal platform family using existing v2 tokens.

VariantTokenMeaning
.brand-accent--accentPinned / featured
.brand-pink--primaryYouTube, Twitch
.brand-cyan--accent-cyanTikTok, video
.brand-orange--accent-orangeSubstack, mail
.brand-magenta--accent-pinkInstagram, image-social
.brand-soft--accent-soft-pinkOnlyFans, paid-creator
(default)--surface-strongUtility (booking, contact)

Hug-centre hero technique

Keeps a cut-out portrait flush with the wrap's right edge on wide viewports; flush-right on narrow ones.

background-position:
  right max(0px, calc(50% - 640px)) center;

v2 New Pattern · Nav

Scroll-aware nav

Both home.html and profile-rebecca-crow.html open with a 72px logo nudged translate(-6px, 6px) and an 18px row padding. Once scrollY > 24, the nav adds .is-scrolled and the logo snaps back to 36px with 12px row padding. 220ms transitions across the board. The preview's own top nav is wired to this mechanic — scroll the page to see it in action.

States

State Logo height Logo offset Row padding
At rest72pxtranslate(-6px, 6px)18px 0
.is-scrolled36pxtranslate(0, 0)12px 0

Rules

1 · Scope the overrides to .site-nav .row .brand-logo so the body-level 96px .brand-logo--lg demos aren't affected.
2 · Don't animate the position: sticky itself — only the inner padding + logo size change.
3 · Keep the threshold low (24px) so the shrink fires inside the first scroll gesture.

CSS contract

.site-nav .row {
  padding: 18px 0;
  transition: padding 220ms ease;
}
.site-nav .row .brand-logo {
  transform: translate(-6px, 6px);
  transition: transform 220ms ease;
}
.site-nav .row .brand-logo img {
  height: 72px;
  transition: height 220ms ease;
}
.site-nav.is-scrolled .row { padding: 12px 0; }
.site-nav.is-scrolled .row .brand-logo {
  transform: translate(0, 0);
}
.site-nav.is-scrolled .row .brand-logo img {
  height: 36px;
}

JS contract

(function () {
  var nav = document.querySelector('.site-nav');
  if (!nav) return;
  function update() {
    if (window.scrollY > 24) nav.classList.add('is-scrolled');
    else nav.classList.remove('is-scrolled');
  }
  update();
  window.addEventListener('scroll', update,
    { passive: true });
})();

v2 New Pattern · Hero image

Hero image variants

Two hero treatments. Hug-centre (§3) keeps a cut-out portrait flush with the centred content edge and uses a single asymmetric wash. Full-bleed pinned (§4) fills the band with the un-cropped photo, pins it to the viewport with background-attachment: fixed, and stacks two overlays for legibility. Either variant flips to a pink edition with a five-line token swap.

§3 · Lime · hug-centre

Doors open.

home.html · hero-bg-2-cutout.png · single left wash

§3 · Pink · hug-centre

Doors open.

home-pink.html · token swap · same layout

§4 · Lime · full-bleed pinned

Doors open.

home-bg.html · hero-bg-2.png · cover + fixed · 2 overlays

§4 · Pink · full-bleed pinned

Doors open.

home-bg-pink.html · pink + parallax

Variant matrix

Four shipped variants. The accent swap is orthogonal to the hero treatment.

FileTreatmentAccent
home.htmlHug-centre cut-out (§3)#DFF352
home-pink.htmlHug-centre cut-out (§3)#FF5D7D
home-bg.htmlFull-bleed pinned (§4)#DFF352
home-bg-pink.htmlFull-bleed pinned (§4)#FF5D7D

Asset table

VariantImageSizing
§3 hug-centrehero-bg-2-cutout.pngauto 100%
§4 full-bleedhero-bg-2.pngcover

Pink edition · token swap

Five lines, no structural changes. Works for either hero treatment and for the profile / Linktree composition.

:root {
  --accent: #FF5D7D;   /* was #DFF352 */
  --neon:   #FF5D7D;   /* alias */
}
.btn-accent:hover {
  background: #FF7A93; /* was #EAFF4F */
}
.flap .half span,
.flap .flap-leaf span {
  text-shadow:
    0 0 18px rgba(255,93,125,0.26);
  /* was rgba(255,93,125, 0.20); alpha bumped */
}

Caveat: the PNG brushstroke logo bakes the lime into the artwork and is not token-reactive. The SVG sibling (assets/logo.svg) would re-colour automatically if swapped in.

§4 · Four implementation rules

1 · Drop glow-hero from the hero <section>. Its ::before injects height: 720px and opacity: 0.22 onto the same pseudo-element we use for the flat dim, silently clipping it.

2 · Under background-attachment: fixed, cover sizes the image to the viewport not the hero. Framing shifts a touch on tall windows.

3 · iOS Safari fallback to scroll is automatic and acceptable. The effect degrades gracefully.

4 · Don't put a transform, filter, or will-change: transform on any ancestor of the hero — that creates a new containing block and breaks the viewport-anchored attachment.

CSS contract · §4

.hero {
  background-image: url('/assets/hero-bg-2.png');
  background-size: cover;
  background-position: right center;
  background-attachment: fixed;
  overflow: hidden;
}
.hero::before {
  content: ""; position: absolute; inset: 0;
  background: rgba(251,245,229, 0.66);   /* flat dim */
  z-index: 0;
}
.hero::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(90deg,
    rgba(251,245,229, 0.78) 0%,
    rgba(251,245,229, 0.55) 35%,
    rgba(251,245,229, 0.18) 65%,
    rgba(251,245,229, 0)    100%);
  z-index: 0;
}
.hero > * { position: relative; z-index: 1; }

Guardrails · v2 deltas in bold

Do & Don't

The doctrine that keeps the brand legible. Bolded items are the load-bearing rules — break them last.

Do

  • Use real Bulevar. Self-host from ./fonts/bulevar-regular-webfont.woff2.
  • Apply the per-word outline as a one- or two-word accent using .heading_outline.
  • Keep stroke width at 2px regardless of headline size.
  • Match line-height 0.75 at hero scale.
  • Use one brand accent per section. The colour is the room.
  • Oversize display type — display-xl and above should feel almost too big.
  • Keep buttons pill-shaped at every size.
  • Place dark pill buttons on bright brand bands.
  • Honour the two-radius doctrine: zero for rooms, pill for controls.
  • Reserve hot pink for the single most important action per section.

Don't

  • Don't stroke an entire line. The outline mechanic is a one- or two-word accent, never a triple-stroke wall.
  • Don't fill outlined words with a colour — keep transparent.
  • Don't scale stroke width with font size. 2px at every step.
  • Don't synthesise extra Bulevar weights — only 400 ships.
  • Apply rounded corners to brand-colour section cards.
  • Add shadows on brand-accent surfaces — edges only.
  • Pair two saturated brand accents touching directly.
  • Use white text on lime, cream, soft pink, or cyan.
  • Sentence-case buttons or nav. Uppercase is the brand voice.
  • Introduce neon glow, glassmorphism, or multi-stop gradients.

Tokens · Tailwind / CSS

Tailwind / CSS bindings

Paste-ready cheatsheet for downstream agents. Every token here is sourced verbatim from DESIGN.md. Lime is `#DFF352` (lovable-aligned). Override --accent once to swing the whole system (including the logo's tag glyph).

Tailwind theme.extend

colors: {
  bg:        '#0E1114',
  surface:   { DEFAULT: '#161A1E', raised: '#1D2125', strong: '#2A3237', ink: '#231F20' },
  border:    { DEFAULT: '#2C333A', strong: '#3D464F' },
  text:      { DEFAULT: '#F4F1EA', muted: '#B7BBC2', subtle: '#7E848C', inverse: '#0E1114' },
  primary:   { DEFAULT: '#FF5D7D', hover: '#FF7A93', active: '#E84A6A' },
  secondary: '#30D1C8',
  accent:    { DEFAULT: '#DFF352', orange: '#FF7A3A', cyan: '#00C5E0',
               pink: '#F2B4F2', softPink: '#FFDEDE', cream: '#FBF5E5', navy: '#16213C' },
  neon:      '#DFF352',  // alias of accent
  success: '#3DD68C', warning: '#F5B400', error: '#FF5A5A', focus: '#FF5D7D',
},
borderRadius: { none: 0, sm: '8px', md: '12px', lg: '16px', pill: '64px', full: '9999px' },
fontFamily: {
  display: ['Bulevar', 'Anton', 'Bebas Neue', 'Druk Wide', 'sans-serif'],
  body:    ['Roboto Flex', 'Inter', 'sans-serif'],
  app:     ['Plus Jakarta Sans', 'Inter', 'sans-serif'],
}

CSS :root.dark · canonical

:root.dark {
  --bg:              #0E1114;
  --surface:         #161A1E;
  --surface-raised:  #1D2125;
  --surface-strong:  #2A3237;
  --surface-ink:     #231F20;
  --border:          #2C333A;
  --text:            #F4F1EA;
  --text-muted:      #B7BBC2;
  --text-inverse:    #0E1114;
  --primary:         #FF5D7D;
  --secondary:       #30D1C8;
  --accent:          #DFF352;   /* lime · oklch(92% .18 116) */
  --neon:            #DFF352;   /* alias */
  --focus:           #FF5D7D;
  --radius-pill:     64px;
  --radius-lg:       16px;
}

/* Light edition — drop-in override. Hot pink replaces lime as the
   canonical highlight. Coloured-room bands stay unchanged. */
:root.light {
  --bg:              #FBF5E5;
  --surface:         #FFFFFF;
  --surface-raised:  #FFFFFF;
  --surface-strong:  #F1ECDC;
  --surface-ink:     #FBF5E5;
  --border:          #E6DFCB;
  --text:            #16213C;
  --text-muted:      #4D5870;
  --text-inverse:    #FFFFFF;
  --primary:         #FF5D7D;
  --secondary:       #30D1C8;
  --accent:          #FF5D7D;   /* hot pink — was lime in dark */
  --neon:            #FF5D7D;   /* alias */
  --focus:           #FF5D7D;
}

Component map (selected)

ComponentBackgroundTextRadiusPadding
button-primarytext (#F4F1EA)text-inversepill (64px)20px 32px
button-secondarytransparent + text bordertextpill18px 30px
input-defaultsurfacetextpill14px 20px
textareasurfacetextlg (16px)14px 18px
card-defaultsurface-raisedtextlg24px
category-cardaccent-*text-inversenone (0)24px
article-cardsurface-raisedtextlg0 0 24px 0
feature-band-limeaccent (#DFF352)text-inversenone96px 32px
faq-rowaccent-pinktext-inversesm (8px)20px 24px
modal-surfacesurface-raisedtextlg28px
alertsurface-raised + stripetextmd (12px)16px 20px
footersurface-ink (#231F20)textnone64px 32px