Brik Design System
Theming

Blueprints

The Blueprints Theming Dimension — named layout + interaction patterns that ground AI mockup generation with concrete structural constraints.

Named layout + interaction patterns that ground AI mockup generation with concrete structural constraints. BDS owns the canonical data; portal design_blueprints is a downstream seed.

See blueprints/ARCHITECTURE.md for the two-taxonomy model, bridge rules, and v1 / v2 coexistence.

Two taxonomies

Authors hand-write match tags (moods, industries). Client-axis projections (personality, visual_style, industry_slugs) are derived at load time via the bridges — never stored in source JSON, never authored by hand.

Mood → Personality

Derived by MOOD_TO_PERSONALITY in content-system/blueprints/bridges.ts — never hand-authored on blueprints.

MoodPersonality projection
boldBold
minimalMinimal
warmWarm
corporateCorporate
playfulPlayful
luxuryLuxury · Refined
trustworthyTrustworthy
energeticEnergetic
professionalProfessional
modernModern
approachableApproachable

Mood → Visual Style

Derived by MOOD_TO_VISUAL_STYLE in content-system/blueprints/bridges.ts. Moods with no visual correlate (warm, trustworthy, professional, approachable) project to an empty set — explicit, not a gap.

MoodVisual Style projection
boldBold
minimalMinimal
warm
corporateClassic
playfulPlayful
luxuryLuxurious
trustworthy
energeticColorful
professional
modernModern
approachable

Industry tag → Industry pack slug

TagPack slug
dentaldental
real_estatereal-estate-rv-mhc
wellnesssmall-business (until graduated)
legalsmall-business (until graduated)
universaluniversal sentinel — no pack lookup

Catalog

The full enumerated library — every blueprint with moods, industries, layout spec, CSS hints, version, last-reviewed dates — rendered live from @brikdesigns/bds/blueprints/library.json. Coverage matrix shows section type × mood density at a glance; cells with · are gaps to author.

Library version1.0.0
Last reviewed2026-04-18
Review cadencequarterly
Blueprint count32
Section types10

Coverage matrix

Cell value = blueprint count for that section / mood combination. Empty cells (·) are gaps — opportunities to author.

Sectionapproachableboldcorporateenergeticluxuryminimalmodernplayfulprofessionaltrustworthywarm
cta311···1·443
faq·····11·11·
features32232141433
gallery·1··1·11··1
hero13211241442
nav111·2221211
services113···4·431
stats1111··1·111
team2·······222
testimonials11··1···221

Library

Grouped by section type. Expand any blueprint for moods, industries, layout spec, and CSS hints.

cta (4)

Dark Centered CTActa_dark_centered
Moods: boldprofessionalmoderntrustworthycorporate
Industries: universal
Layout spec:

Dark background (near-black or brand dark). Radial gradient glow behind content (accent color, low opacity). All content centered. Eyebrow label (uppercase, accent). Heading: 2 lines max, 52–64px, 800 weight. Single subheading sentence (muted, max 50 chars). Two CTAs centered: primary filled + ghost outlined. No body paragraph.

CSS hints
.cta-section { position: relative; } .cta-section::before { content: ""; position: absolute; inset: 0; background: radial-gradient(ellipse 70% 50% at 50% 50%, rgba(var(--accent-rgb), 0.15) 0%, transparent 70%); }
Tier: internal · Source: Vale demo · v1.0.0 · reviewed 2026-04-18
Support Plan Callout — Illustration + Plan Card Splitsupport_plan_callout_split
Moods: approachablewarmprofessionaltrustworthy
Industries: universalsaasecommercecorporate
Layout spec:

Light section. Centered section header (heading + subhead) above. Below: two-column split, content-region (illustration block) left, plan card right. Illustration block: persona/scene composition with floating UI elements (chat bubble, message tile, optional photo) — composed via the BDS MarketingIllustration primitive (PR #484), NOT a baked image. Plan card: surface-secondary background, rounded-lg corners, padded generously. Card content: plan name (heading/sm), 2-sentence description (body/sm, on light), 'Learn more' primary CTA (size md). Two-column collapses to stacked at <992px (illustration goes above card on mobile). Section also supports an 'illustration-omitted' variant where the card centers max-width 720px.

CSS hints
.support-plan-callout { padding-block: clamp(var(--padding-xl), 9vw, var(--padding-huge)); background: var(--page-primary); } .support-plan-callout__split { display: grid; grid-template-columns: 1fr 1fr; gap: var(--gap-xl); align-items: center; } .support-plan-callout__card { background: var(--surface-secondary); border-radius: var(--border-radius-lg); padding: var(--padding-xl); display: flex; flex-direction: column; gap: var(--gap-md); align-items: flex-start; } @media (max-width: 991.98px) { .support-plan-callout__split { grid-template-columns: 1fr; } }
Tier: internal · Source: brikdesigns.com /services/{slug} 'Monthly support services' cross-sell section (PR #477 spec) · v1.0.0 · reviewed 2026-05-09
Split CTA with Contactcta_split_contact
Moods: approachablewarmprofessionaltrustworthy
Industries: universalhealthcarelegalreal_estatebeauty
Required facts: phoneemail
Layout spec:

Light background. Two-column layout. Left: heading (2 lines, 40px), 1-sentence subheading, primary CTA button. Right: contact details (phone number large, email, optional address), each with a small icon. Separated by a thin vertical rule. Conveys "we are real, reachable people" rather than just a form prompt.

CSS hints
.cta-split { display: grid; grid-template-columns: 1fr 1px 1fr; gap: 64px; align-items: center; } .cta-divider { background: var(--rule-light); align-self: stretch; }
Tier: internal · Source: Original research · v1.0.0 · reviewed 2026-04-18
Contact — Form + Info Splitcontact_form_split
Moods: professionaltrustworthywarmapproachable
Industries: universalhealthcarelegaldentalreal_estatefinancecorporate
Required facts: phoneemailaddress
Layout spec:

Two-column contact section: left 45% contains contact information — H2 heading, short reassurance sentence (muted), then stacked contact details as icon + label rows (phone, email, address, hours). Optional embedded Google Maps iframe at bottom of left column. Right 55% is the contact form: name, email, phone (optional), message textarea, and large primary submit button full-width. Form fields have clear label above, 48px height inputs, 8px radius. No floating labels.

CSS hints
.contact-split { display: grid; grid-template-columns: 45fr 55fr; gap: 80px; align-items: start; } .contact-info .detail { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 16px; } form input, form textarea { width: 100%; border: 1.5px solid var(--border-primary); border-radius: 8px; padding: 12px 16px; font-size: 15px; } form textarea { min-height: 140px; resize: vertical; }
Tier: internal · Source: Original research · v1.0.0 · reviewed 2026-04-18

faq (1)

FAQ — Grouped Accordionfaq_accordion_grouped
Moods: professionaltrustworthymodernminimal
Industries: universalhealthcaredentallegalfinancesaasecommerce
Layout spec:

Full-width FAQ section. Section heading centered at top with optional subheading. Below: optional category tabs or pill filters (if multiple FAQ categories). FAQ items as accordion rows — question in bold (15px, 600 weight), expand chevron right-aligned, answer text (14px, muted, line-height 1.65) revealed on click with smooth max-height transition. Items separated by 1px bottom border. 20–30% narrower than full container width, centered, for readability. Open state: chevron rotates 180°, border-left 2px accent color.

CSS hints
.faq-list { max-width: 720px; margin: 0 auto; } .faq-item { border-bottom: 1px solid var(--rule-light); } .faq-trigger { display: flex; justify-content: space-between; align-items: center; padding: 20px 0; cursor: pointer; } .faq-content { overflow: hidden; transition: max-height 0.3s ease; } .faq-item.open .faq-trigger { color: var(--text-brand); }
Tier: internal · Source: Original research · v1.0.0 · reviewed 2026-04-18

features (7)

3-Column Icon Feature Gridfeatures_3col_icon_grid
Moods: modernapproachablewarmenergeticplayful
Industries: universalsaasecommercehealthcarebeauty
Layout spec:

Light background section. 3-column grid of feature cards. Each card: icon or number (40px, accent color) top-left, feature title (18–20px, 700 weight) below, 1-sentence description (muted, max 80 chars). Cards have no visible border at rest — on hover: translateY(-4px) + subtle shadow. Section header: eyebrow + heading left or center aligned. Optional subheading (1 sentence max). Grid gap is generous (24–32px).

CSS hints
.features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; } .feature-card { padding: 32px 28px; transition: transform 0.25s ease, box-shadow 0.25s; } .feature-card:hover { transform: translateY(-4px); box-shadow: 0 16px 40px rgba(0,0,0,0.08); }
Tier: internal · Source: Original research · v1.0.0 · reviewed 2026-04-18
3-Column Brand-Colored Card Grid on Darkfeatures_3col_branded_dark
Moods: boldmodernluxuryenergetic
Industries: universalsaasecommercecorporate
Layout spec:

Dark section background (page-inverse). 3-column grid of cards, each filled with its own brand color via [data-audience='X'] scope binding (re-binds --background-brand-primary per card). Card layout: oversized illustration top (1:1 aspect, ~60-70% of card height, padded inside the brand color), then card body with high-contrast title (heading/sm, font-weight bold for AA on saturated bg), 1-sentence description (body/sm at 16px regular for large-text 3:1 threshold), and 'Learn more' affordance with arrow. Cards rounded-lg, full-bleed image at top, body padding generous. Section header centered above grid in light text on dark surface. Optional eyebrow above heading. Cards collapse to 2-col at <992px, 1-col at <768px. Each card establishes its own data-audience subtree binding so its --brand-primary cascades correctly per the BDS scope-binding pattern (consumer site defines [data-audience='X'] cascade rules).

CSS hints
.features-branded-dark { background: var(--page-inverse); padding-block: clamp(var(--padding-xl), 9vw, var(--padding-huge)); color: var(--text-on-color-dark); } .features-branded-dark__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--gap-lg); } .features-branded-dark__card { background: var(--background-brand-primary); border-radius: var(--border-radius-lg); overflow: hidden; } .features-branded-dark__media { aspect-ratio: 1; padding: var(--padding-xl); display: flex; align-items: center; justify-content: center; } .features-branded-dark__body { padding: var(--padding-lg); display: flex; flex-direction: column; gap: var(--gap-md); }
Tier: internal · Source: brikdesigns.com /services/{slug} 'Other Service Lines' cross-sell module (PR #477 spec) · v1.0.0 · reviewed 2026-05-09
Alternating Content Splitsfeatures_alternating_split
Moods: approachablewarmprofessionaltrustworthy
Industries: universalhealthcarereal_estatelegalbeautysalon
Layout spec:

Alternating left/right layout. Each feature is a two-column row: one side is text (eyebrow, heading, 1-sentence body, optional CTA), other side is image, illustration, or abstract visual. Odd rows: text left, visual right. Even rows: visual left, text right. Generous vertical padding between rows (80–100px). Light section background with subtle background color variation between rows.

CSS hints
.feature-row { display: grid; grid-template-columns: 1fr 1fr; gap: 80px; align-items: center; padding: 80px 0; } .feature-row:nth-child(even) .feature-text { order: 2; } .feature-row:nth-child(even) .feature-visual { order: 1; }
Tier: internal · Source: Framer - Mentara · v1.0.0 · reviewed 2026-04-18
Asymmetric Bento Gridfeatures_bento_asymmetric
Moods: boldmodernenergeticluxury
Industries: universalsaasecommercereal_estatehospitality
Layout spec:

CSS grid with asymmetric column sizes (2fr 1fr 1fr). Two rows. Top-left card spans both rows (featured card — large photography or dark card with big stat). Remaining cards are equal-size: photography cards with overlay text bottom-left, one stat card in accent background color. All cards have border-radius: 12px and overflow: hidden. Photography cards: image with dark gradient overlay, label and title bottom-left. Stat card: large number (52px, 800 weight) and short descriptor.

CSS hints
.bento { display: grid; grid-template-columns: 2fr 1fr 1fr; grid-template-rows: 280px 280px; gap: 12px; } .bento-featured { grid-row: span 2; } .bento-card { border-radius: 12px; overflow: hidden; position: relative; }
Tier: internal · Source: Vale demo · v1.0.0 · reviewed 2026-04-18
About — Story Splitabout_story_split
Moods: warmtrustworthyapproachableprofessional
Industries: universalhealthcarelegaldentalveterinaryreal_estatefinance
Layout spec:

Two-column layout for About / Story sections: left 55% is body content — eyebrow label, H2 headline (36–44px, 700 weight), 2–3 short paragraphs, optional values list as small icon + label rows. Right 45% is a single portrait or team photo in a tall card with rounded corners (16px radius), optional overlapping stat chip (e.g. "12 years in business") positioned bottom-left of the photo. Vertical rhythm: section is 100–120px tall padding.

CSS hints
.about-split { display: grid; grid-template-columns: 55fr 45fr; gap: 64px; align-items: center; } .about-photo { border-radius: 16px; overflow: hidden; position: relative; } .stat-chip { position: absolute; bottom: -20px; left: 24px; background: white; border-radius: 10px; padding: 12px 20px; box-shadow: 0 4px 20px rgba(0,0,0,0.12); }
Tier: internal · Source: Original research · v1.0.0 · reviewed 2026-04-18
Legal / Utility — Centered Contentcontent_legal_centered
Moods: minimalprofessionalcorporate
Industries: universal
Layout spec:

Long-form text content layout for Privacy Policy, Terms of Service, 404, and utility pages. Content column centered at 700–760px max-width. Section heading H1 (32–40px). Content uses H2 (22px) for major sections, H3 (18px) for subsections, body paragraphs (15px, 1.75 line-height). Ordered lists for numbered rules, unordered lists for items. Subtle left border (3px, accent-muted) on key callouts. No images, no CTAs except at very bottom. Quiet background (off-white or surface-secondary). Last-updated date shown near top in muted small text.

CSS hints
.legal-content { max-width: 760px; margin: 0 auto; padding: 64px 0; } .legal-content h2 { font-size: 22px; font-weight: 700; margin-top: 48px; margin-bottom: 12px; } .legal-content p, .legal-content li { font-size: 15px; line-height: 1.75; color: var(--text-secondary); } .legal-content .callout { border-left: 3px solid var(--border-brand); padding-left: 16px; color: var(--text-muted); }
Tier: internal · Source: Original research · v1.0.0 · reviewed 2026-04-18
Process Grid — 4-Step Numberedprocess_grid_4step_numberedinactive
Moods: professionaltrustworthycorporatemodern
Industries: universalreal_estatelegalcorporatefinance
Layout spec:

Four-column grid explaining a process in ordered steps. Each cell contains: a large step number (1–4, 56–64px, bold, brand accent), a short step title (H4, 16px, heading font), and a 2-sentence body description (14px, body font, muted color). Optional divider arrows between cells on desktop (hidden on mobile). Background: surface-primary or brand-dark for contrast. No images in cells — numbers carry the visual weight. Used for commercial transactions, brokerage processes, or any trust-building sequence. Collapses to 2×2 on tablet, single column on mobile.

Tier: internal · Source: Vale Partners commercial real-estate — transaction process pattern · v0.1.0 · reviewed 2026-04-23

gallery (1)

Masonry Portfolio Gridgallery_masonry_3col
Moods: luxurymodernboldwarmplayful
Industries: real_estatebeautysalonhospitalityecommerce
Layout spec:

3-column masonry or CSS grid with mixed aspect ratios. Photography cards with overlay that appears on hover: dark overlay, label (uppercase, small), title (20px, white). Cards have border-radius: 8–12px and overflow: hidden. Hover: image scale(1.04) with transition, overlay fades in. Section header left-aligned above grid.

CSS hints
.gallery-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; } .gallery-card { overflow: hidden; border-radius: 10px; position: relative; cursor: pointer; } .gallery-card img { transition: transform 0.6s ease; } .gallery-card:hover img { transform: scale(1.05); }
Tier: internal · Source: Framer - VistaHaven · v1.0.0 · reviewed 2026-04-18

hero (6)

Split Hero 60/40hero_split_60_40
Moods: professionalboldtrustworthymodern
Industries: universalhealthcarereal_estatelegalfinancesaas
Required facts: hero_image_url
Layout spec:

Two-column layout: left 60% contains eyebrow label (12px uppercase, accent color, line before text), display headline (72–96px, font-weight 800, letter-spacing -0.04em, line-height 1.02), single subheading (1 sentence, 17px, muted color), and two CTAs side by side (primary filled + ghost outlined). Right 40% is full-height photography with dark gradient overlay bleeding from left edge. Trust signal (small text, very muted) sits below CTAs separated by a horizontal rule. No body paragraph.

CSS hints
grid-template-columns: 1fr 1fr; .hero-photo { position: relative; overflow: hidden; } .hero-photo img { height: 100%; object-fit: cover; } .hero-photo::after { content: ""; position: absolute; inset: 0; background: linear-gradient(to right, var(--ink) 0%, transparent 30%); }
Tier: internal · Source: Framer - Buildaxa / Vale demo · v1.0.0 · reviewed 2026-04-18
Split Hero with Image Card + Price Overlayhero_split_image_card_overlay
Moods: approachablemodernwarmtrustworthy
Industries: universal
Layout spec:

Two-column 58/42 split on a soft audience-tinted background. Left column (vertical flex stack, gap-md): optional breadcrumb trail (3-5 items, brand-primary text color, '/' separators, last item aria-current=page); optional eyebrow label (uppercase, label-sm, primary text); h1 headline (display, weight bold); optional 1-3 line body paragraph (body-md, secondary text, max-width 55ch); optional single dark CTA button (small padding, dark background, white label — NOT a paired CTA group). Right column: white surface-primary card (radius-lg, soft shadow, padding-md) containing a 4:3 image-frame and an optional price overlay block underneath (label 'Starting at' / display price / brand-primary CTA button). Background tinting comes from `[data-audience='X'] { --background-brand-primary-soft: ... }` cascade declared by the consumer site — BDS ships the slot, not the values. Drives interior service-detail and similar 'page lives under a category' templates.

CSS hints
grid-template-columns: 58fr 42fr; gap: var(--gap-huge); .media-card { background: var(--surface-primary); border-radius: var(--border-radius-lg); padding: var(--padding-md); box-shadow: var(--shadow-md); } .image-frame { aspect-ratio: 4 / 3; overflow: hidden; border-radius: var(--border-radius-md); } [data-audience] { /* consumer-defined cascade */ }
Tier: internal · Source: brikdesigns.com /service/{slug} pages — verified 2026-05-09 audit · v1.0.0 · reviewed 2026-05-09
Centered Hero on Gradienthero_centered_gradient
Moods: boldmodernenergeticplayful
Industries: universalsaasecommercebeautysalon
Layout spec:

Full-width section with mesh gradient or radial glow background (not solid color). All content centered. Display headline (80px, 800 weight) spans 2–3 lines with a color-highlighted word or phrase. Single subheading sentence below (muted). Two CTAs centered. Floating stat cards or social proof badges positioned left and right of the heading using absolute positioning. No body paragraph.

CSS hints
background: radial-gradient(ellipse 80% 60% at 50% 40%, var(--accent-dim) 0%, transparent 70%); text-align: center; .stat-float { position: absolute; background: rgba(255,255,255,0.08); backdrop-filter: blur(12px); border: 1px solid rgba(255,255,255,0.12); border-radius: 12px; padding: 12px 16px; }
Tier: internal · Source: Framer - Mentara · v1.0.0 · reviewed 2026-04-18
Full-Bleed Photo Herohero_fullbleed_photo
Moods: luxuryboldprofessionalwarm
Industries: real_estatehospitalityrestaurantluxuryhealthcare
Required facts: hero_image_url
Layout spec:

Full-viewport-height section. Background is a high-quality photography fill (object-fit: cover) with a dark gradient overlay (linear-gradient bottom-left to transparent). Content positioned bottom-left or center-left at 30% from bottom. Eyebrow label, then large display headline (3–4 words max, 80px+), then single CTA. A glassmorphism stat card (blurred dark background, white text) is pinned bottom-right or bottom-left as a secondary visual anchor.

CSS hints
.hero { min-height: 100vh; position: relative; } .hero-bg { position: absolute; inset: 0; } .hero-bg img { width: 100%; height: 100%; object-fit: cover; filter: brightness(0.65); } .hero-overlay { position: absolute; inset: 0; background: linear-gradient(135deg, rgba(10,13,20,0.85) 0%, transparent 60%); }
Tier: internal · Source: Framer - VistaHaven / Vale demo · v1.0.0 · reviewed 2026-04-18
Dark Minimal Herohero_dark_minimal
Moods: corporateminimaltrustworthyprofessional
Industries: universallegalfinancecorporate
Layout spec:

Dark background (near-black). Left-aligned content. Eyebrow label in accent color with a short horizontal line before it. Headline is 3–5 words maximum, 64–80px, 800 weight, white. No subheading — rely on a single short stat or trust line instead. One primary CTA only. Right side is either empty (letting the headline breathe) or contains a single abstract geometric shape or minimal illustration.

CSS hints
background: var(--ink); color: #fff; .eyebrow::before { content: ""; display: inline-block; width: 20px; height: 1px; background: currentColor; margin-right: 8px; vertical-align: middle; }
Tier: internal · Source: Original research · v1.0.0 · reviewed 2026-04-18
Interior Page Hero — Minimal Bannerhero_interior_minimal
Moods: professionalminimaltrustworthymoderncorporate
Industries: universalhealthcarelegalfinancesaascorporatedental
Layout spec:

Compact banner hero for interior pages (About, Services, Contact). Full-width section, 200–280px tall. Left-aligned breadcrumb (very small, muted) above a large page headline (48–60px, 800 weight, ink color). Optional one-sentence subheading below (muted, 16px). No CTA. Background is either solid brand-light fill or subtle diagonal stripe texture. Transitions page context before the main content area begins.

CSS hints
.interior-hero { padding: 56px 0 40px; background: var(--surface-brand-subtle, var(--surface-secondary)); } .interior-hero h1 { font-size: clamp(40px, 5vw, 60px); font-weight: 800; letter-spacing: -0.03em; } .breadcrumb { font-size: 12px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 12px; }
Tier: internal · Source: Original research · v1.0.0 · reviewed 2026-04-18

nav (3)

Sticky Blur Navnav_sticky_blur
Moods: modernboldprofessionalminimalluxury
Industries: universal
Layout spec:

Fixed position, full-width. Dark semi-transparent background (rgba ~0.82 opacity) with backdrop-filter blur(12–16px). Logo left (text or image, height 36px). Nav links centered or right (14px, 500 weight, muted white, hover to white). Primary CTA button right (filled, accent color). Border-bottom: 1px hairline rule (very subtle). Transitions smoothly on scroll.

CSS hints
nav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; background: rgba(10,13,20,0.82); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); border-bottom: 1px solid rgba(255,255,255,0.07); height: 68px; }
Tier: internal · Source: Vale demo / Buildaxa · v1.0.0 · reviewed 2026-04-18
Light Clean Navnav_light_clean
Moods: minimalwarmapproachableplayfulluxury
Industries: universalbeautysalonecommercehospitality
Layout spec:

Fixed or sticky, light/white background with subtle bottom border (1px, rule color). Logo left. Nav links centered (14px, 500 weight, ink color, hover to accent). Optional: pill-shaped CTA right in accent color. Clean, no blur effect. Works on light-background sites.

CSS hints
nav { background: rgba(255,255,255,0.92); backdrop-filter: blur(8px); border-bottom: 1px solid var(--rule-light); }
Tier: internal · Source: Original research · v1.0.0 · reviewed 2026-04-18
Mega Nav — Audience Pathwaysnav_mega_audience_pathwaysinactive
Moods: professionalcorporatetrustworthymodern
Industries: real_estatehealthcarelegalcorporate
Layout spec:

3-column mega-menu drop-down triggered from a primary nav link. Each column represents a distinct audience pathway (e.g. Healthcare / Land / Investors for commercial real-estate; can generalize to any 3-audience vertical). Column header is the audience label (14px uppercase, letter-spacing 0.08em, brand accent color). Below the header: 3–5 deep-link items, each with a label (15px, heading font) and an optional one-line note (13px, muted). Each column carries a distinct accent color token from `audienceAccents[]` and an optional icon from `audienceIcons[]` displayed beside the column header. Mega-menu opens on hover/focus of the trigger; closes on Esc or click-outside. Mobile: collapses to accordion — one expand per audience. No featured card in this variant (audience pathways are the feature).

Tier: internal · Source: Vale Partners commercial real-estate — 3-audience navigation pattern · v0.1.0 · reviewed 2026-04-23

services (4)

Numbered Service Rowsservices_numbered_rows
Moods: professionalcorporatetrustworthyboldmodern
Industries: universalreal_estatelegalfinancehealthcaresaas
Layout spec:

Full-width section (dark background preferred). Each service is a horizontal row spanning full width, separated by 1px hairline rules. Row layout: 2-digit number left (01–05, small, muted accent), service name center-left (20–24px, 700 weight, white), 1-sentence description center (muted, max 120 chars), and an arrow icon right. On hover: entire row shifts left 8–12px with transition, number changes to accent color, arrow changes color. Section header above: eyebrow + large heading left-aligned.

CSS hints
.service-row { display: flex; align-items: center; gap: 40px; padding: 32px 0; border-bottom: 1px solid rgba(255,255,255,0.07); transition: padding-left 0.25s cubic-bezier(0.16,1,0.3,1); cursor: default; } .service-row:hover { padding-left: 12px; }
Tier: internal · Source: Framer - Buildaxa / Vale demo · v1.0.0 · reviewed 2026-04-18
Services Detail — Two Column Gridservices_detail_two_column
Moods: professionaltrustworthymoderncorporate
Industries: universalhealthcaredentallegalfinancereal_estatesaascorporate
Layout spec:

Services or offerings detail layout. Section heading + subheading centered at top. Below: 2-column grid of service cards (3–6 cards typical). Each card: icon top-left (32px, accent color), service name (18px, 600 weight), 2-sentence description (14px, muted), optional price or tier badge bottom-right, optional "Learn more" text link at bottom. Cards have subtle border (1px rule color), 16px radius, 28px internal padding. Hover: elevate with box-shadow transition.

CSS hints
.services-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; } .service-card { border: 1px solid var(--border-primary); border-radius: 16px; padding: 28px; transition: box-shadow 0.2s; } .service-card:hover { box-shadow: 0 8px 32px rgba(0,0,0,0.08); }
Tier: internal · Source: Original research · v1.0.0 · reviewed 2026-04-18
3-Column Service Card Gridservices_3col_card_grid
Moods: approachableprofessionalmodernwarm
Industries: universalsaasecommercecorporate
Layout spec:

Light background section. Centered section header (eyebrow optional + heading + optional one-line subhead). 3-column grid of service cards below. Each card: top image area (3:2 aspect) showing service-specific 3D illustration or photo on a light backdrop; below, a small ServiceTag (icon variant, accent color) + service name (heading/sm, 700 weight) + 1-2 sentence description (body/sm, on light) + 'Learn more' ghost-variant link-button. Optional 'Has Options' positive-status badge anchored top-right of card when the service exposes multiple offerings. Cards have rounded corners (border-radius-md), no border at rest, optional subtle hover lift. Grid gap is generous (24-28px). Collapses to 2-col at <992px, 1-col at <768px.

CSS hints
.services-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--gap-lg); } .service-card { background: var(--surface-primary); border-radius: var(--border-radius-md); overflow: hidden; position: relative; } .service-card__media { aspect-ratio: 3/2; background: var(--surface-secondary); } .service-card__body { padding: var(--padding-lg); display: flex; flex-direction: column; gap: var(--gap-md); } .service-card__has-options { position: absolute; top: var(--gap-md); right: var(--gap-md); }
Tier: internal · Source: brikdesigns.com /services/{slug} index pages — service-line card grid pattern (PR #477 spec) · v1.0.0 · reviewed 2026-05-09
Services Numbered Accordionservices_numbered_accordioninactive
Moods: professionaltrustworthycorporatemodern
Industries: universalreal_estatehealthcarelegalcorporate
Layout spec:

Numbered list of services rendered as an accordion. Each row shows a large ordinal number (80–100px, ultra-light weight, brand accent color), the service name (H3, 20px, heading font), and a one-line descriptor. Clicking a row expands a panel containing a 2–3 sentence description plus optional sub-items or a CTA link. Numbers remain visible when expanded. Max 6–8 items to avoid scroll fatigue. Background: surface-secondary. Used for professional-services and commercial real-estate verticals where a feature-grid feels too casual.

Tier: internal · Source: Vale Partners commercial real-estate — audience pathway pattern · v0.1.0 · reviewed 2026-04-23

stats (2)

Dark Stats Barstats_dark_bar
Moods: boldprofessionaltrustworthycorporate
Industries: universalreal_estatelegalfinancehealthcare
Layout spec:

Full-width dark background strip (sits between hero and first content section). 4 metrics in equal columns separated by 1px vertical rules. Each metric: large number (40–48px, 800 weight, white) with colored accent suffix (+ % B yr), label below in small muted text (2 lines max, 13px). No heading — the numbers speak. Counter animation on scroll-into-view.

CSS hints
.stats-bar { display: grid; grid-template-columns: repeat(4, 1fr); } .stat-col { padding: 32px 24px; border-right: 1px solid rgba(255,255,255,0.07); } .stat-col:last-child { border-right: none; } .stat-num { font-size: clamp(28px, 3vw, 44px); font-weight: 800; }
Tier: internal · Source: Vale demo / Buildaxa · v1.0.0 · reviewed 2026-04-18
Centered Stats on Lightstats_centered_light
Moods: approachablemodernwarmenergetic
Industries: universalsaasbeautyecommercesalon
Layout spec:

Light background section. 3 or 4 metrics centered horizontally with generous spacing between. Each metric: very large display number (64px+, accent color), short label below. Optional short section heading above the metrics. No divider lines between stats — rely on spacing alone. Counter animation on scroll.

CSS hints
.stats-centered { display: flex; justify-content: center; gap: clamp(48px, 8vw, 120px); text-align: center; } .stat-num { font-size: clamp(48px, 6vw, 80px); font-weight: 800; color: var(--accent); }
Tier: internal · Source: Framer - Mentara · v1.0.0 · reviewed 2026-04-18

team (2)

Team Cards Centeredteam_cards_centered
Moods: approachablewarmprofessionaltrustworthy
Industries: universallegalfinancehealthcarebeauty
Layout spec:

Light background. 3 or 4-column grid of team member cards. Each card: circular avatar photo (120px), name (18px, 700 weight) centered, role/title (muted, 13px) centered, optional social icon links. Cards are minimal — no border, no shadow at rest. On hover: subtle lift. Section centered heading above.

CSS hints
.team-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 40px; text-align: center; } .team-avatar { width: 100px; height: 100px; border-radius: 50%; object-fit: cover; margin: 0 auto 16px; }
Tier: internal · Source: Framer - Mentara · v1.0.0 · reviewed 2026-04-18
Team — Bio Gridteam_bio_grid
Moods: trustworthywarmprofessionalapproachable
Industries: universalhealthcaredentallegalfinancereal_estateveterinary
Layout spec:

3-column (or 4-column for large teams) grid of team member cards. Each card: circular portrait photo top (120–160px diameter), name (16px, 700 weight) below, title/role (13px, muted), optional 1-sentence bio, optional LinkedIn icon link. Cards are card-less (no border, no background) — white space provides separation. Mobile collapses to 2 columns. Featured member (lead/owner) shown larger at top using a 2-column span card.

CSS hints
.team-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 48px 32px; } .team-card { text-align: center; } .team-photo { width: 140px; height: 140px; border-radius: 50%; object-fit: cover; margin: 0 auto 16px; } .team-card.featured { grid-column: span 2; display: grid; grid-template-columns: 200px 1fr; gap: 32px; text-align: left; }
Tier: internal · Source: Original research · v1.0.0 · reviewed 2026-04-18

testimonials (2)

3-Column Testimonial Cardstestimonials_3col_cards
Moods: approachablewarmtrustworthyprofessional
Industries: universal
Layout spec:

Light or white background. 3-column card grid. Each card: star rating (5 stars, accent color) top, quote text (italic, 15px, 3–4 lines max), then author row at bottom with avatar (40px circle from UI Avatars), name (700 weight, 14px), and role/company below (muted, 12px). Cards have a subtle border (1px, rule color), border-radius: 12px, and lift on hover (translateY -4px, shadow). Section heading centered above.

CSS hints
.testimonials-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; } .testimonial-card { padding: 32px 28px; border: 1px solid var(--rule); border-radius: 12px; transition: transform 0.25s ease, box-shadow 0.25s; } .testimonial-card:hover { transform: translateY(-4px); }
Tier: internal · Source: Vale demo · v1.0.0 · reviewed 2026-04-18
Featured Large Testimonialtestimonials_featured_large
Moods: luxuryboldprofessionaltrustworthy
Industries: universalluxuryreal_estatelegal
Layout spec:

Dark or accent-tinted background. Single large testimonial centered. Quote mark (large decorative, accent color, 80px). Quote text is large (20–24px, light weight, italic, white, max 2 lines). Author avatar (60px circle), name, and title below. Optional: 2–3 smaller secondary quotes in a row below the featured quote at smaller size.

CSS hints
.testimonial-featured { text-align: center; max-width: 720px; margin: 0 auto; } .quote-mark { font-size: 80px; line-height: 1; color: var(--accent); font-family: Georgia, serif; } .quote-text { font-size: clamp(18px, 2vw, 24px); font-style: italic; font-weight: 300; }
Tier: internal · Source: Original research · v1.0.0 · reviewed 2026-04-18

Implementation — @brikdesigns/bds/blueprints-astro

The Astro render surface the Theming tenet has always pointed at. Each blueprint key with a shipped Astro component is exported from this package; consumer Astro sites import the components directly or dispatch by key via <BlueprintDispatcher>.

See BLUEPRINTS-ASTRO-PACKAGE.md for the architecture contract, versioning policy, and scale-at-100-clients deployment topology.

Package exports

---
// Consumer Astro page — the intended import shape.
import {
  SiteHeader,
  BlueprintDispatcher,
  // Individual blueprints if you want direct imports:
  HeroSplit6040,
  // Types:
  type BlueprintProps,
  type ClientFacts,
  type ResolvedTheme,
} from '@brikdesigns/bds/blueprints-astro';
---
<SiteHeader archetype={...} brandName={...} navItems={[...]} />
<main>
  <BlueprintDispatcher sections={page.sections}
                       clientFacts={clientFacts}
                       theme={theme} />
</main>

Types-only entry for contexts without the Astro runtime (e.g. the portal's scaffold task that plans compositions):

import type { BlueprintSection, KnownBlueprintKey }
  from '@brikdesigns/bds/blueprints-astro/types';

Dispatch surface (v0.1)

ComponentPurposeProps shape
<BlueprintDispatcher>Reads visualNotes.blueprintKey per section and renders the matching component. Unknown keys fall through to <BlueprintFallback>.{ sections, clientFacts, theme }
<BlueprintFallback>Loud visible stub for unknown blueprint keys. Emits data-blueprint-unknown-key — CI greps client-repo builds for this attribute.BlueprintProps
<SiteHeader>Site-shell nav. Dispatches on the navigation archetype prop. v0.1 fully implements editorial-transparent; other archetypes render with a data-unimplemented-archetype attribute.{ archetype, brandName, navItems, phone?, primaryCta?, currentPath? }

Shipped blueprints (v0.1)

Eight components — the set needed for Vale's first scaffold run via the small-business pack. Each follows the same BlueprintProps contract (section + clientFacts + theme).

ComponentLibrary keySection type
<HeroSplit6040>hero_split_60_40hero
<HeroInteriorMinimal>hero_interior_minimalhero
<StatsDarkBar>stats_dark_barstats
<ServicesDetailTwoColumn>services_detail_two_columnservices
<AboutStorySplit>about_story_splitabout
<TestimonialsFeaturedLarge>testimonials_featured_largetestimonials
<CtaSplitContact>cta_split_contactcta
<CtaDarkCentered>cta_dark_centeredcta

Unshipped keys render <BlueprintFallback> when the dispatcher encounters them — expected during the v0.1 → v1.0 incremental ramp. Each follow-up PR adds one or more components and removes its key from the fallback case.

Contract per blueprint

Every blueprint component accepts the same props shape:

interface BlueprintProps {
  section: BlueprintSection;      // content: heading, body, items, cta, visualNotes
  clientFacts: ClientFacts;       // per-client: brandName, phone, heroImageUrl, etc.
  theme: ResolvedTheme;           // archetypes + atmosphere + theme mode
}

This uniformity is deliberate — the dispatcher is trivial (one lookup, one pass-through), every blueprint's surface is identical for authoring / review, and per-client customization happens through ClientFacts + CSS custom properties (not per-component props).

Per-client CSS overrides

Each blueprint exposes documented CSS custom properties for per-client tuning — for example:

.bp-hero-split-60-40 {
  --bp-hero-split-eyebrow-color: ...;
  --bp-hero-split-accent-line: ...;
  --bp-hero-split-image-radius: ...;
  /* ... more, see each component's header comment */
}

Per-client overrides MUST live in the client repo's src/styles/client-overrides.css with a /* BDS-ISSUE: <url> */ comment on the preceding line. CI in each client repo enforces the comment requirement. See spec §6.3 for rationale.

Non-hallucinatable content

Blueprints with required_facts render a visible data-content-needed="<field>" stub when the fact is null at render time — CI grep blocks publish. This is defense-in-depth; the portal's dev_scaffold_site task preflights required_facts before generating the client repo, so a missing fact should never reach the build stage.

Verification

The package has a dedicated verification script at scripts/verify-blueprints-astro-exports.mjs that runs on every BDS pre-push:

  1. Packs a tarball matching a real publish.
  2. Creates a scratch Astro 5 project, installs the tarball.
  3. astro check — type + import resolver.
  4. astro build — SSR render to static HTML.
  5. Asserts rendered HTML markers per blueprint.
  6. @axe-core/playwright scan against every built page (WCAG 2.1 AA).
  7. Confirms all expected files shipped in the tarball.

Any failure blocks the PR.

Authoring

Blueprint edits flow through BDS. Portal admin edits (if kept) are drafts — landed changes flow back through a BDS PR. Full rules in Architecture.

  1. Edit blueprints/blueprint-library.json on a task branch.
  2. Run npm run validate:blueprints (also runs as part of npm run validate).
  3. Bump version on the affected blueprint(s) and the library envelope if the set changes. Update last_reviewed on confirmed-accurate passes.
  4. Open a PR. Bridge edits, schema changes, and data additions stay separate.
  5. After merge: publish the new BDS version and regenerate the portal seed migration via npx tsx scripts/generate-blueprint-seed.mts in brik-client-portal.

On this page