Skip to main content

Internal reference

Marketing design system

The section-primitive kit every marketing page is built on. Warm, tactile and orange-led by default, with navy reserved for focused technical moments.
  • Tokens only
  • SSR-visible
  • JavaScript optional
typescript
import {
  MarketingSection,
  NeuCard,
  SectionHeading,
} from '@/components/features/marketing/system';

MarketingSection shapes

Flat for reading. Rounded for chapter changes.

The shared responsive radius supports flat, cap-top, cap-bottom and rounded transitions without turning every section into a card.

flat
cap-top
cap-bottom
rounded

tone="light"

Light tone

Every primitive below resolves its ink and neumorphic shadows from this section's tone — no per-component dark variants.

NeuCard

The signature surface. Lifts on hover, presses on click; both CSS-only and disabled under reduced motion.

NeuCard (static)

interactive=false for decorative cards — no lift, no press.

NeuPanel

Quieter sibling for secondary surfaces. Pass pressed for an inset well.

692
REST endpoints
468
Webhook event types
28
Embeddable widgets

tone="warm"

Warm tone

Every primitive below resolves its ink and neumorphic shadows from this section's tone — no per-component dark variants.

NeuCard

The signature surface. Lifts on hover, presses on click; both CSS-only and disabled under reduced motion.

NeuCard (static)

interactive=false for decorative cards — no lift, no press.

NeuPanel

Quieter sibling for secondary surfaces. Pass pressed for an inset well.

692
REST endpoints
468
Webhook event types
28
Embeddable widgets

tone="dark"

Dark tone

Every primitive below resolves its ink and neumorphic shadows from this section's tone — no per-component dark variants.

NeuCard

The signature surface. Lifts on hover, presses on click; both CSS-only and disabled under reduced motion.

NeuCard (static)

interactive=false for decorative cards — no lift, no press.

NeuPanel

Quieter sibling for secondary surfaces. Pass pressed for an inset well.

692
REST endpoints
468
Webhook event types
28
Embeddable widgets

typography.ts

Type scale

One Inter-led scale with tighter tracking at display sizes. Consume via SectionHeading or MARKETING_TYPE.

Hero — Inter display

Heading 1 — Inter display

Heading 2 — Inter display

Heading 3 — Inter display

Body — Inter. The quick brown fox jumps over the lazy dog.

Caption — Inter. Fine print, labels, table captions.

Eyebrow — kicker

<SectionHeading eyebrow title subcopy level='h1|h2|h3' align='left|center' /> — or MARKETING_TYPE.hero/h1/h2/h3/body/caption/eyebrow for bespoke heroes.

BrowserFrame / DeviceFrame

Product mockup frames

Every screenshot-style mockup sits in consistent chrome. Synthetic demo domain only — never a real tenant's.

demo-studio.bookingbible.com

Admin schedule mockup goes here.

Client app mockup.

<BrowserFrame url='demo-studio.bookingbible.com'>…</BrowserFrame> · <DeviceFrame label='…'>…</DeviceFrame>

CodeBlock

Code samples

Always dark-canvas, JetBrains Mono, language tag, copy button. Renders and hand-copies without JS.

bash
curl https://demo-studio.bookingbible.com/api/v1/schedule \
  -H "X-API-Key: bb_live_xxxxxxxxxxxx"

LogoMarquee

Logo marquee

CSS-only infinite scroll — paused on hover, static under reduced motion.

  • Example Studio
  • Demo Gym
  • Sample Spa
  • Placeholder Pilates
  • Fixture Fitness

ComparisonTable

Comparison table

Neumorphic surface, sticky row labels, mobile swipe, accessible yes/no cells.

Example platform comparison
FeatureBOOKING BIBLELegacy platform
Free planYesNo
Hybrid classesYesAdd-on
AI assistantYesNo

FAQAccordion

FAQ accordion

Native <details> — opens with JavaScript disabled, answers crawlable in the SSR HTML.

Does this work without JavaScript?
Yes — it is a native details/summary pair; the CSS only rotates the chevron.
Where do the answers render?
In the SSR HTML, collapsed but present — crawlers and screen readers get everything.