Internal · Builders Only

Component Gallery

Read the Guide, Copy the Markup

Every section below shows a component rendered exactly as site.css defines it, followed by a collapsed Markup panel with the literal HTML to copy. The law for this system is docs/parishes/st-isidore/GUIDE-design-system-st-isidore.md — this page is a rendering of that doc, not a replacement for it. When in doubt, copy the canonical sibling page instead of assembling from scratch (see the guide’s New-Page Checklist).

Tokens

The full palette and type scale. Use these everywhere — never hardcode a hex value or a font size that isn’t on this list.

Heroes

Three distinct hero shapes exist — not merged into one. Pick the one matching the page type. All shown below with a navy gradient placeholder in place of a real photo.

Section Bands

When to use: every content section on a page. Alternate cream / white / navy full-bleed bands; inner content constrained to ~900px (or 1100px with .section__inner--wide). Anointing’s modifier-class pattern (.section__heading--cream / --navy) is canonical.

Detail Block

When to use: an expanded sub-topic inside a section — a schedule explanation, a named program detail. White box, gold left border, stackable (.detail + .detail gets top margin).

Card Grids

Two distinct grids, both hairline-bordered on navy, both collapse to 1-col ≤768px.

Buttons & CTA

Sharp corners on every control. Hover = gold↔navy swap. Three CTA shapes below, each for a different context.

Contact Blocks

Two distinct patterns — not the same component. .contact-block names a specific staff person; .contact-cta (shown above in §7c) is a general closing call-to-action.

Story Quote (.story-quote)

Added 2026-08-19 for /stories. A modest in-body pull-quote for one strong line inside first-person parishioner story text — left-aligned with a gold left rule, not centered. Distinct from .edge-tagline (that's a section-level motto, used once under a heading); .story-quote sits inline in body copy and may appear once per story where a line earns it.

CTA Box (.cta-box)

Navy “take the first step” panel with one solid gold button and a contact line. Same look as the inline box on /sacraments/ocia (that page keeps its own inline copy). Placed right under a .section__heading it drops its top margin.

Video Banner (.page-hero__video)

A 6–8 second silent loop behind a page title, in place of the photo (Bulletin). Poster frame as the banner background; reduced-motion visitors see the still. Crop square around the action, about 1–2 MB, served with byte ranges.

<div class="page-hero__image"><video class="page-hero__video" autoplay muted loop playsinline poster="/shared-assets/heroes/NAME.jpg" aria-hidden="true" style="object-position:center 60%;"><source src="/shared-assets/heroes/NAME.mp4" type="video/mp4"></video></div>

Site Form (.si-form)

Public form used by /prayer-requests and /website-updates. site-form.js posts the named fields as JSON to data-endpoint and swaps in the data-done message. Always include the hidden website honeypot. Pages using it link site.css?v=2026-09-24c.

Motto / Tagline (.edge-tagline)

Playfair italic, used once under a section heading as a motto, optionally repeated centered as a section closer.

Row Index (.row-index)

Added 2026-09-25 for /ministries. A section landing page as editorial rows: serif titles, hairline rules, gold "View →" that nudges on hover. Use for a short list of titles only. Items with a description each, or many items, keep the white boxes (see /events): on phones the boxes read as buttons.

Video Embed (.video-embed)

Added 2026-08-27 for /ministries/teen-confirmation. A responsive 16:9 frame for a hosted video (YouTube/Vimeo iframe inside). Sharp corners, dark chrome ground while the player loads; works on cream and navy bands. Only for parish-owned or parish-channel video — no autoplay, ever (motion doctrine).

Program Calendar (.cal-grid / .cal-rows)

Added 2026-09-18 for /ministries/teen-confirmation. A full program year in two shapes: a numbered grid for the recurring sessions, and date/description rows for one-off obligations. Use when a program publishes a whole year at once and families compare the page against a printed handout — the session numbers exist so the two agree at a glance. For two or three dates, use .info-list instead; this is for a dozen or more.

State is automatic: each tile carries a data-date and a small page script grays what's past (--past, which stays on the grid so the numbering still matches the handout) and marks the coming one (--next). Don't hand-set those classes. Add .cal-row__pill to any date the parish has not actually confirmed. A tentative date must look tentative — never print an unconfirmed date as a promise. On a navy band add --dark to the grid and to each row.