Block reference
Inspect the shipped block contracts and implementation-side authoring details.
- Owner
- Foundry Core
- Source
core/docs/BLOCKS.md- Ref
v0.1.24- Policy
- release-bound
Component pins for v0.2.6
| Component | Role | Version |
|---|---|---|
| core | runtime | v0.1.24 |
| theme-shield | theme | v0.1.15 |
| starter | reference | v0.1.3 |
| docs | reference | v0.1.4 |
| distribution | tooling | v0.3.4 |
| restricted-component-1 | consumer-reference | v0.1.22 |
| restricted-component-2 | consumer-reference | v1.1.21 |
Block Index
accordion | audio-player | author-bio | before-after | callout | case-studies | certification-badges | columns | coming-soon-cta | coming-soon-footer | coming-soon-hero | coming-soon-trust | comparison-table | contact-split | content-feed | content-sidebar-nav | cta | cta-button-list | cta-image-paragraph | divider | embed | faq-accordion | faq-cta | features | founder-profile | full-bleed-split | gallery | hero | icon-grid | illustration-panel | image-feature | lead-magnet | logo-trust | logos | managed-form | map-coverage | masonry-gallery | media-break | media-sequence | media-text | motion-hero | newsletter-inline | onboarding-timeline | page-list | pinned-media-story | post-hero | post-list | pricing-comparison | pricing-tiers | property-amenities | property-cards | property-hero | property-photo-tour | prose-panel | pullquote | quote | related-posts | resource-downloads | rich-text | search | section-header | slideshow | social-preview-grid | social-share | stats-band | stats-grid | steps | table-of-contents | tabs | team-grid | testimonials | testimonials-carousel | timeline | topic-chip-nav | trust-badges | video-embed | video-hero
How blocks work
Foundry pages define an ordered sections array in front matter. The render pipeline is:
layouts/partials/framework/render-sections.htmliteratessections.- It resolves each
blockname throughdata/foundry/block-registry.yaml. - The mapped partial in
layouts/partials/blocks/is rendered with{ page, section }context. - The block partial reads
content,design, andid, then renders BEM-structured HTML.
sections:
- block: hero
id: homepage-hero
content:
title: "Build with Foundry"
text: "Composable Hugo blocks rendered from front matter."
primary_action:
text: "Get Started"
url: "/contact/"
design:
variant: centered
css_class: ""
Block families
Family ownership is machine-checked in data/foundry/block-family-manifest.json.
Each family exists because it solves a reusable shared job, not because the
blocks happened to look similar during implementation.
| Family | Why it exists | Representative blocks |
|---|---|---|
heroes-intros | Shared page-opening and section-opening surfaces so sites do not fork hero logic locally. | hero, post-hero, section-header, video-hero, motion-hero, coming-soon-hero |
property-hospitality | Dedicated property and hospitality storytelling surfaces instead of hiding them inside generic media/layout groups. | property-hero, property-amenities, property-photo-tour, property-cards |
layout-flow | Reusable section rhythm and composition-shape controls that belong above any one visual theme. | divider, columns, full-bleed-split |
search-discovery | Shared search and discovery mechanics that should stay framework-owned. | search, content-feed, topic-chip-nav |
lists-collections | Reusable collection renderers for posts, pages, and related content. | page-list, post-list, related-posts |
narrative-editorial | Text-first editorial and annotation surfaces that go beyond raw markdown output. | rich-text, prose-panel, quote, pullquote, callout |
navigation-disclosure | In-page wayfinding and controlled-disclosure patterns with predictable shared behavior. | content-sidebar-nav, table-of-contents, tabs, accordion, faq-accordion |
media-gallery | Core visual storytelling primitives across image, video, audio, embeds, and guided media sequences. | media-text, media-break, media-sequence, pinned-media-story, slideshow, image-feature, masonry-gallery, gallery, video-embed, audio-player, embed, illustration-panel, before-after |
features-highlights | Quick-scan benefit and capability framing distinct from trust, pricing, or CTA surfaces. | features, icon-grid, resource-downloads, logo-trust |
trust-authority | Proof, credibility, and amplification surfaces that should stay distinct from features and bios. | trust-badges, testimonials, testimonials-carousel, logos, case-studies, certification-badges, social-share |
social-presence | Static-first social, channel, and public activity surfaces that do not require provider API access. | social-preview-grid |
process-data | Sequential, temporal, metric, and map-like explanatory surfaces. | steps, timeline, onboarding-timeline, stats-band, stats-grid, map-coverage |
conversion-cta | Shared prompt and next-step surfaces that move a visitor toward action. | newsletter-inline, cta, faq-cta, lead-magnet, cta-image-paragraph, cta-button-list |
forms-contact | Contact capture and managed form surfaces with integration implications. | managed-form, contact-split |
pricing-comparison | Decision-support surfaces whose semantics differ from generic feature or card modules. | comparison-table, pricing-tiers, pricing-comparison |
people-profiles | Shared person/profile patterns that are not interchangeable with testimonials or logos. | author-bio, team-grid, founder-profile |
launch-coming-soon | A lightweight temporary-launch lane so pre-release experiences do not devolve into throwaway one-offs. | coming-soon-cta, coming-soon-trust, coming-soon-footer |
Some stable blocks are intentionally more specialized and do not yet have a repo
starter, composition, or fixture proof. Those cases are tracked explicitly in
data/foundry/block-governance.json so “unproven” does not silently turn into
“unowned”.
Social & Presence contract
Social & Presence blocks render normalized foundry.social_item.v1 items.
Blocks do not call provider APIs and do not require connected accounts.
Supported source modes:
curated: editor-selected media, caption, date, permalink, and platform.embed: public URL or embeddable URL with a fallback link/card.static-import: importer output that has already been materialized as normal site data.api: connected-account output that has already been materialized as normal site data.
Recommended shared data file shape:
schema: foundry.social_item_collection.v1
items:
- id: studio-process-2026-05
source_mode: curated
platform: instagram
kind: image
title: Studio process
caption: A short editor-owned caption.
published_at: 2026-05-18
permalink: https://www.instagram.com/p/example/
media:
- src: /images/social/studio-process.jpg
type: image
alt: Artist preparing wax work in the studio.
rights: client-owned-or-permitted
Use content.items for small inline sets or content.items_data for a dot-path
reference such as presence.studio-rss.
Block standards (BEM, CSS vars, context extraction)
Every block follows the same context extraction contract:
{{ $section := .section }}
{{ $content := index $section "content" | default dict }}
{{ $design := index $section "design" | default dict }}
{{ $id := index $section "id" | default "" }}
{{ $class := index $design "css_class" | default "" }}
{{ $ui := index site.Data.foundry "classes" | default dict }}
BEM naming convention:
- Block root:
foundry-[block-name] - Elements:
foundry-[block-name]__[element] - Modifiers:
foundry-[block-name]--[modifier]
Example (media-text): foundry-media-text, foundry-media-text__inner, foundry-media-text__title, foundry-media-text__actions.
Color theming uses CSS variables via inline style attributes (not utility class overrides):
<h2 class="foundry-example__title" style="color: var(--foundry-text, #0f172a)">Title</h2>
<p class="foundry-example__text" style="color: var(--foundry-text-muted, #475569)">Body copy</p>
<div class="foundry-example__panel" style="background: var(--foundry-surface, #ffffff); border-color: var(--foundry-border, #e2e8f0)"></div>
CSS variable system
assets/css/foundry-base.css defines neutral fallback tokens. Theme modules (for example theme-shield) override these at runtime.
| Variable | Purpose | Base value |
|---|---|---|
--foundry-bg | Page background color. | #ffffff |
--foundry-border | Default border color. | #e2e8f0 |
--foundry-border-strong | High-contrast border color. | #cbd5e1 |
--foundry-brand-accent | Secondary accent color. | #3b82f6 |
--foundry-brand-primary | Primary brand accent used for key UI elements. | #0f172a |
--foundry-duration-base | Base motion duration token. | 200ms |
--foundry-ease-standard | Default easing curve for transitions. | cubic-bezier(0.2, 0, 0, 1) |
--foundry-radius | Default radius token. | 1rem |
--foundry-radius-lg | Large radius token. | 1.5rem |
--foundry-radius-sm | Small radius token. | 0.5rem |
--foundry-shadow-md | Medium elevation shadow token. | 0 4px 12px rgba(0, 0, 0, 0.1) |
--foundry-shadow-sm | Small elevation shadow token. | 0 1px 3px rgba(0, 0, 0, 0.1) |
--foundry-surface | Primary surface/card background. | #ffffff |
--foundry-surface-soft | Subtle section and muted surface background. | #f8fafc |
--foundry-text | Primary text color. | #0f172a |
--foundry-text-muted | Secondary/muted text color. | #475569 |
Motion CSS variables
assets/css/foundry-motion.css defines additional motion-specific tokens.
| Variable | Purpose | Default |
|---|---|---|
--foundry-motion-distance | Default reveal translate distance. | 16px |
--foundry-motion-duration | Resolved animation duration token. | var(--foundry-duration-base, 200ms) |
--foundry-motion-ease | Resolved easing curve for reveal transitions. | var(--foundry-ease-standard, cubic-bezier(0.2, 0, 0, 1)) |
--foundry-motion-kb-duration | Ken Burns animation duration. | 12s |
--foundry-motion-kb-scale | Ken Burns target scale value. | 1.06 |
--foundry-motion-marquee-pause-state | Default marquee animation play state. | running |
--foundry-motion-opacity-start | Starting opacity for reveal/stagger items. | 0 |
--foundry-motion-parallax-max | Maximum parallax translate clamp (px). | 80px |
--foundry-motion-scale-start | Starting scale for zoom reveals. | 0.98 |
--foundry-motion-scroll-cue-duration | Scroll cue animation duration. | 2000ms |
--foundry-motion-scroll-cue-distance | Scroll cue bob distance. | 5px |
--foundry-motion-scroll-cue-line-height | Scroll cue line height for side cues. | 3rem |
--foundry-motion-scroll-cue-opacity | Scroll cue default opacity. | 0.72 |
--foundry-motion-stagger-step | Delay step between staggered children. | 80ms |
Motion attributes
The Motion Toolkit loader lives at layouts/partials/framework/foundry-motion.html and activates in sites that include the body-end hook.
| Attribute | Engine | Accepted values | Behavior |
|---|---|---|---|
data-motion-kenburns | Engine E: Ken Burns | Boolean attribute | Enables image zoom/pan crossfade behavior. |
data-motion-kenburns-interval | Engine E: Ken Burns | Milliseconds (default 6000) | Sets crossfade interval for multi-image containers. |
data-motion-marquee | Engine D: Marquee | Boolean attribute | Initializes seamless marquee track cloning and animation. |
data-motion-marquee-dir | Engine D: Marquee | left (default), right, up, down | Controls marquee animation direction. |
data-motion-marquee-pause | Engine D: Marquee | hover | Pauses animation on hover/focus when set to hover. |
data-motion-marquee-speed | Engine D: Marquee | Positive number (px/sec, default 40) | Controls marquee travel speed. |
data-motion-parallax | Engine B: Parallax | Float 0.0 to 0.8 (default 0.35) | Parallax translateY multiplier, clamped by --foundry-motion-parallax-max. |
data-motion-parallax-dir | Engine B: Parallax | up/1 (default) or down/-1 | Controls parallax direction. |
data-motion-reveal | Engine A: Reveal | fade-up (default), fade-in, slide-left, slide-right, zoom-in | Applies entry animation; is-in-view is added by observer. |
data-motion-scrub | Engine C: Scrub | Conventionally progress | Enables scroll-linked scrub behavior on target element. |
data-motion-scrub-prop | Engine C: Scrub | width (default), height, scaleX, opacity | Selects property controlled by section scroll progress. |
data-motion-stagger | Engine A: Stagger | Boolean attribute | Applies stagger delay to direct children when parent enters viewport. |
Creative display patterns
data/foundry/motion-manifest.json also catalogs governed display patterns.
These are productized ways to use existing blocks, presets, and motion
capabilities without adding site-local framework code. They are not raw
data-motion-* primitives.
| Pattern | Status | Canonical blocks | Notes |
|---|---|---|---|
media-led-hero | stable | motion-hero, property-hero, video-hero | Media-led page opening with reveal, parallax, Ken Burns, and optional scroll cue behavior. |
pinned-story | stable | pinned-media-story, media-break | One deliberate scroll-led chapter story with static reduced-motion fallback. |
story-work-reel | stable | media-sequence, slideshow, gallery | Selected work or mixed-media sequence; use media-sequence reel variants and presets before adding a new block. |
chapter-index | stable | content-sidebar-nav, table-of-contents, media-sequence | Editorial wayfinding and progress affordance for long creative or journal pages; use chapter-index variants before adding a new block. |
proof-marquee | stable | logos | Low-criticality repeated proof rail; use static variants when motion would reduce clarity. |
slideshow-card-stack | stable | slideshow | Block-local fade, slide, and card-stack transitions with accessible controls. |
stats-counter-band | stable | stats-band | Numeric counter and optional scrub behavior; values must remain pure numeric strings. |
scroll-cue | stable | motion-hero, property-hero | First-viewport affordance with shared CSS and reduced-motion-safe static behavior. |
Block catalog (alphabetical)
accordion
Minimum required: items — everything else is optional.
Expandable content panels with optional single-open enforcement.
sections:
- block: accordion
id: accordion-example
content:
items:
- title: Item title
text: Item description.
text: Example supporting text.
title: Example title
design:
variant: bordered
allow_multiple: true
css_class: ''
Design options
| Field | Details |
|---|---|
variants | bordered, minimal, cards |
variant | bordered | minimal | cards — accordion container style |
allow_multiple | true | false — allow opening more than one item |
css_class | extra CSS classes on outer section |
BEM classes
foundry-accordionfoundry-accordion__bodyfoundry-accordion__emptyfoundry-accordion__innerfoundry-accordion__itemfoundry-accordion__listfoundry-accordion__subtitlefoundry-accordion__summaryfoundry-accordion__title
audio-player
Minimum required: url, title — everything else is optional.
Custom audio player block with progress, speed, and transcript support.
sections:
- block: audio-player
id: audio-player-example
content:
date: '2026-02-22'
description: Short descriptive paragraph.
download: true
duration: '42:17'
image: "/images/example.jpg"
show: Example Group
title: Example title
transcript: Transcript excerpt goes here.
url: https://example.com
design:
variant: card
css_class: ''
Design options
| Field | Details |
|---|---|
variants | card, minimal, podcast |
variant | card | minimal | podcast — audio player presentation |
css_class | extra CSS classes on outer section |
BEM classes
foundry-audio-playerfoundry-audio-player__contentfoundry-audio-player__controlsfoundry-audio-player__coverfoundry-audio-player__descriptionfoundry-audio-player__downloadfoundry-audio-player__emptyfoundry-audio-player__innerfoundry-audio-player__layoutfoundry-audio-player__metafoundry-audio-player__primaryfoundry-audio-player__progressfoundry-audio-player__secondaryfoundry-audio-player__shellfoundry-audio-player__showfoundry-audio-player__speedfoundry-audio-player__timefoundry-audio-player__timelinefoundry-audio-player__titlefoundry-audio-player__togglefoundry-audio-player__transcriptfoundry-audio-player__volume
author-bio
Minimum required: name, bio — everything else is optional.
Compact author profile block for article footers and about sections.
sections:
- block: author-bio
id: author-bio-example
content:
bio: Example value
company: Example Group
image: "/images/example.jpg"
links:
- platform: linkedin
url: https://example.com
more_from:
text: Learn more
url: "/contact/"
name: Example value
role: Role or title
design:
variant: card
css_class: ''
Design options
| Field | Details |
|---|---|
variants | card, inline, minimal |
variant | card | inline | minimal — author module layout |
css_class | extra CSS classes on outer section |
BEM classes
foundry-author-biofoundry-author-bio__cardfoundry-author-bio__emptyfoundry-author-bio__innerfoundry-author-bio__links
before-after
Minimum required: before, after — everything else is optional.
Comparison block for before/after state storytelling.
sections:
- block: before-after
id: before-after-example
content:
after: Example value
before: Example value
subtitle: Example value
title: Example title
design:
reveal: fade-up
parallax: true
parallax_speed: "0.16"
parallax_dir: up
kenburns: true
kenburns_preset: in
kenburns_interval: 7200
kenburns_transition: 1400
scroll_cue: false
css_class: ''
Design options
| Field | Details |
|---|---|
variant | cards | table | stacked — cards: 2-col side-by-side (default); table: 3-col comparison using rows[]{label,before,after}; stacked: vertical before→after with arrow divider |
row_label | header label for the label column in table variant (default: Feature) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-before-afterfoundry-before-after__arrowfoundry-before-after__innerfoundry-before-after__labelfoundry-before-after__panelsfoundry-before-after__stackfoundry-before-after__tablefoundry-before-after__title
callout
Minimum required: text — everything else is optional.
Inline semantic notice block for info, warning, success, and related states.
sections:
- block: callout
id: callout-example
content:
text: Example supporting text.
title: Example title
design:
type: default
icon: default
css_class: ''
Design options
| Field | Details |
|---|---|
variant | inline | banner | subtle — inline: left accent border card (default); banner: full-width announcement strip with optional CTA button; subtle: no border, light tint, less intrusive |
type | info | tip | warning | danger | note | success — semantic intent style (controls color and default icon) |
icon | icon name override (optional) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-calloutfoundry-callout-accentfoundry-callout-bgfoundry-callout__boxfoundry-callout__contentfoundry-callout__iconfoundry-callout__innerfoundry-callout__textfoundry-callout__title
case-studies
Minimum required: cases — everything else is optional.
Case study list/grid block with outcomes and project context.
sections:
- block: case-studies
id: case-studies-example
content:
cases: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
reveal | fade-up | fade-in | slide-left | slide-right | zoom-in | none — hero copy/media reveal style (default: fade-up) |
parallax | true | false | {speed 0.0-0.35} — enable/disable media-card parallax (default: false) |
parallax_speed | 0.0-0.35 — media-card parallax speed (default: 0.16) |
parallax_dir | up | down | 1 | -1 — media-card parallax direction (default: up) |
kenburns | true | false — enable/disable Ken Burns image cycling when fallback images are provided |
kenburns_preset | in | out | in-left | in-right | out-left | out-right — default Ken Burns preset for images without item presets |
kenburns_interval | milliseconds between image crossfades (default: 7200) |
kenburns_transition | milliseconds for crossfade duration between images (default: 1400) |
scroll_cue | true | false — show/hide reduced-motion-safe scroll cue (default: false) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-case-studiesfoundry-case-studies__badgefoundry-case-studies__cardfoundry-case-studies__case-titlefoundry-case-studies__gridfoundry-case-studies__innerfoundry-case-studies__result-iconfoundry-case-studies__result-itemfoundry-case-studies__result-textfoundry-case-studies__resultsfoundry-case-studies__sectionfoundry-case-studies__section--problemfoundry-case-studies__section--resultsfoundry-case-studies__section--solutionfoundry-case-studies__section-textfoundry-case-studies__section-titlefoundry-case-studies__title
certification-badges
Minimum required: badges — everything else is optional.
Certification and credential badge display block.
sections:
- block: certification-badges
id: certification-badges-example
content:
badges: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-certification-badgesfoundry-certification-badges__gridfoundry-certification-badges__innerfoundry-certification-badges__itemfoundry-certification-badges__title
columns
Minimum required: columns — everything else is optional.
Free-form multi-column markdown content block.
sections:
- block: columns
id: columns-example
content:
columns:
- heading: Column heading
text: Column markdown content.
- heading: Column heading
text: Column markdown content.
design:
count: '3'
gap: md
dividers: true
align: center
css_class: ''
Design options
| Field | Details |
|---|---|
variants | prose, feature, stat |
variant | prose | feature | stat — prose: markdown content (default); feature: icon + heading + text; stat: large value + label |
count | 2 | 3 — column count |
gap | sm | md | lg — column gap |
dividers | true | false — vertical separators between columns |
align | top | center — vertical alignment of column content |
css_class | extra CSS classes on outer section |
BEM classes
foundry-columnsfoundry-columns__columnfoundry-columns__emptyfoundry-columns__gridfoundry-columns__inner
coming-soon-cta
Minimum required: title — everything else is optional.
Coming-soon CTA block for waitlist or early access capture.
sections:
- block: coming-soon-cta
id: coming-soon-cta-example
content:
images:
- src: "/images/example-hero-1.jpg"
alt: Example hero image
kenburns_preset: in-left
- src: "/images/example-hero-2.jpg"
alt: Example alternate hero image
kenburns_preset: out-right
primary_action:
text: Learn more
url: "/contact/"
secondary_action:
text: Learn more
url: "/contact/"
support_note: Example value
text: Example supporting text.
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-coming-soon-ctafoundry-coming-soon-cta__actionsfoundry-coming-soon-cta__innerfoundry-coming-soon-cta__textfoundry-coming-soon-cta__title
coming-soon-footer
Minimum required: (none) — everything else is optional. Minimal coming-soon footer block with links and legal copy.
sections:
- block: coming-soon-footer
id: coming-soon-footer-example
content:
address_lines: Example value
bottom_note: Example value
contact_title: Example value
copyright: Example value
email: Example value
email_url: Example value
legal_note: Example value
legal_title: Example value
likestyle_url: Example value
logo: Example value
phone: Example value
phone_url: Example value
preview_label: Example value
preview_url: Example value
privacy_url: Example value
tagline: Example value
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-coming-soon-footerfoundry-coming-soon-footer__brandfoundry-coming-soon-footer__copyfoundry-coming-soon-footer__innerfoundry-coming-soon-footer__links
coming-soon-hero
Minimum required: title — everything else is optional.
Coming-soon hero block with launch positioning and signup focus.
sections:
- block: coming-soon-hero
id: coming-soon-hero-example
content:
badge_text: Example value
email_label: Example value
email_placeholder: Example value
first_name_label: Example value
first_name_placeholder: Example value
form_action: "/api/submit"
form_headline: Example value
form_name: Example value
likestyle_cta: Example value
likestyle_kicker: Example value
likestyle_meta: Example value
likestyle_text: Example value
likestyle_url: Example value
logo: Example value
privacy_text: Example value
submit_text: Example value
subtitle: Example value
title: Example title
trust_badges: Example value
design:
css_class: ''
Legacy mode uses form_action.
Managed mode uses content.form and the same Foundry Control contract as managed-form.
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-coming-soon-herofoundry-coming-soon-hero__formfoundry-coming-soon-hero__innerfoundry-coming-soon-hero__textfoundry-coming-soon-hero__title
coming-soon-trust
Minimum required: logos — everything else is optional.
Coming-soon trust signal block for early credibility.
sections:
- block: coming-soon-trust
id: coming-soon-trust-example
content:
badges: Example value
logos:
- name: Partner Name
stats:
- label: Metric
value: 95%
subtitle: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-coming-soon-trustfoundry-coming-soon-trust__innerfoundry-coming-soon-trust__itemfoundry-coming-soon-trust__itemsfoundry-coming-soon-trust__title
comparison-table
Minimum required: rows — everything else is optional.
Feature comparison table block across options or providers.
sections:
- block: comparison-table
id: comparison-table-example
content:
footnote: Example value
headers: Example value
rows: Example value
subtitle: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-comparison-tablefoundry-comparison-table__cellfoundry-comparison-table__innerfoundry-comparison-table__rowfoundry-comparison-table__tablefoundry-comparison-table__title
contact-split
Minimum required: none — everything else is optional. Two-column contact block with details and either a legacy inline form or a managed Foundry Control form.
sections:
- block: contact-split
id: contact-split-example
content:
address: Example value
email: Example value
fields: Example value
form_action: "/api/submit"
form:
mode: managed
form_key: contact-intake
form_method: Example value
form_text: Example value
form_title: Example value
hours: Example value
phone: Example value
privacy_note: No spam. Unsubscribe anytime.
submit_text: Example value
subtitle: Example value
title: Example title
design:
preset: creative-inquiry-form
variant: split
css_class: ''
Legacy mode uses form_action, form_method, fields, and submit_text.
Managed mode uses content.form with the same stable contract as the managed-form block and resolves base_url / site_key from site.Params.foundry.control when not provided inline.
Creative starters use the creative-inquiry-form preset for the split inquiry
surface before adding site-local contact wrappers.
Design options
| Field | Details |
|---|---|
variant | split | centered | minimal — split: 2-col left meta+form (default); centered: stacked headline+chips+form, max-w-2xl; minimal: form only, no meta panel, max-w-xl |
css_class | extra CSS classes on outer section |
BEM classes
foundry-contact-splitfoundry-contact-split--centeredfoundry-contact-split--minimalfoundry-contact-split--splitfoundry-contact-split__contentfoundry-contact-split__controlfoundry-contact-split__control--textareafoundry-contact-split__fieldfoundry-contact-split__formfoundry-contact-split__form-panelfoundry-contact-split__form-textfoundry-contact-split__form-titlefoundry-contact-split__innerfoundry-contact-split__meta-cardfoundry-contact-split__meta-card--addressfoundry-contact-split__meta-card--emailfoundry-contact-split__meta-card--hoursfoundry-contact-split__meta-card--phonefoundry-contact-split__meta-labelfoundry-contact-split__meta-linkfoundry-contact-split__meta-listfoundry-contact-split__meta-valuefoundry-contact-split__privacyfoundry-contact-split__submitfoundry-contact-split__subtitlefoundry-contact-split__title
content-sidebar-nav
Minimum required: items — everything else is optional.
Content layout block with sidebar anchor/navigation area. Use the
chapter-index variant when the block is acting as governed long-page
wayfinding with active chapter tracking and decorative progress. Use
checklist for scan-first anchored lists and timeline when the same content
needs a process-like vertical rhythm.
sections:
- block: content-sidebar-nav
id: content-sidebar-nav-example
content:
items:
- title: Item title
id: item-title
text: Item description.
subtitle: Example value
title: Example title
design:
variant: chapter-index
numbered: true
mobile: compact
progress: true
sticky: true
item_reveal: fade-up
css_class: ''
Design options
| Field | Details |
|---|---|
variants | default, chapter-index, checklist, timeline |
variant | default | chapter-index | checklist | timeline — anchored content layout, governed chapter index, compact checklist wayfinding, or process-like vertical narrative |
numbered | true | false — show chapter numbers in the navigation and chapter bodies |
mobile | compact | expanded — mobile chapter navigation presentation |
progress | true | false — show active progress rail in chapter-index mode |
sticky | true | false — pin the chapter index on larger viewports |
item_reveal | fade-up | fade-in | slide-left | slide-right | zoom-in | none — per-chapter reveal in chapter-index mode |
css_class | extra CSS classes on outer section |
BEM classes
foundry-content-sidebar-navfoundry-content-sidebar-nav__chapterfoundry-content-sidebar-nav__chapter-indexfoundry-content-sidebar-nav__contentfoundry-content-sidebar-nav__innerfoundry-content-sidebar-nav__navfoundry-content-sidebar-nav__nav-itemfoundry-content-sidebar-nav__panelfoundry-content-sidebar-nav__subtitlefoundry-content-sidebar-nav__timeline-dotfoundry-content-sidebar-nav__titlefoundry-content-sidebar-nav__toc
cta
Minimum required: title — everything else is optional.
Focused call-to-action block with copy and action buttons.
sections:
- block: cta
id: cta-example
content:
primary_action:
text: Learn more
url: "/contact/"
secondary_action:
text: Learn more
url: "/contact/"
text: Example supporting text.
title: Example title
design:
preset: creative-inquiry
variant: centered
css_class: ''
Creative starters use the creative-inquiry preset for route-level inquiry and
commission CTAs.
Design options
| Field | Details |
|---|---|
variants | centered, left |
variant | centered | left — text and action alignment |
css_class | extra CSS classes on outer section |
BEM classes
foundry-ctafoundry-cta--centeredfoundry-cta--leftfoundry-cta__actionsfoundry-cta__innerfoundry-cta__panelfoundry-cta__textfoundry-cta__title
cta-button-list
Minimum required: buttons — everything else is optional.
CTA block presenting multiple button actions as a grouped list.
sections:
- block: cta-button-list
id: cta-button-list-example
content:
buttons: Example value
subtitle: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-cta-button-listfoundry-cta-button-list__gridfoundry-cta-button-list__innerfoundry-cta-button-list__itemfoundry-cta-button-list__textfoundry-cta-button-list__title
cta-image-paragraph
Minimum required: items — everything else is optional.
CTA block pairing image support with concise conversion copy.
sections:
- block: cta-image-paragraph
id: cta-image-paragraph-example
content:
items:
- title: Item title
text: Item description.
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-cta-image-paragraphfoundry-cta-image-paragraph__actionsfoundry-cta-image-paragraph__contentfoundry-cta-image-paragraph__innerfoundry-cta-image-paragraph__mediafoundry-cta-image-paragraph__textfoundry-cta-image-paragraph__title
divider
Minimum required: (none) — everything else is optional. Visual separator block for rhythm and transitions between sections.
sections:
- block: divider
id: divider-example
content:
text: Example supporting text.
design:
variant: line
spacing: md
css_class: ''
Design options
| Field | Details |
|---|---|
variants | line, gradient, wave, spacer |
variant | line | gradient | wave | spacer — divider style |
spacing | sm | md | lg | xl — vertical rhythm |
css_class | extra CSS classes on divider wrapper |
BEM classes
foundry-dividerfoundry-divider__inner
embed
Minimum required: url — everything else is optional.
Safe iframe embed block for maps, tools, and third-party widgets.
sections:
- block: embed
id: embed-example
content:
fallback_text: Open source link
fallback_url: https://example.com/fallback
text: Example supporting text.
title: Example title
url: https://example.com
design:
variant: card
aspect: '16:9'
height: default
css_class: ''
Design options
| Field | Details |
|---|---|
variants | card, flush, minimal |
variant | card | flush | minimal — iframe wrapper style |
aspect | 16:9 | 4:3 | 1:1 | map — default ratio when height is unset |
height | fixed height value (for example: 450px), overrides aspect |
css_class | extra CSS classes on outer section |
BEM classes
foundry-embedfoundry-embed__emptyfoundry-embed__fallbackfoundry-embed__figurefoundry-embed__framefoundry-embed__frame-wrapfoundry-embed__innerfoundry-embed__shellfoundry-embed__subtitlefoundry-embed__title
faq-accordion
Minimum required: items — everything else is optional.
FAQ-specific accordion block with question/answer structure.
sections:
- block: faq-accordion
id: faq-accordion-example
content:
items:
- title: Item title
text: Item description.
subtitle: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | cards, flush, grouped |
variant | cards | flush | grouped — cards: rounded card per item (default); flush: divider-only, no card backgrounds; grouped: items with optional group field rendered as section headings |
css_class | extra CSS classes on outer section |
For grouped, add a group field to each item to place it under a heading. Items without a group are rendered first with no heading.
BEM classes
foundry-faq-accordionfoundry-faq-accordion__answerfoundry-faq-accordion__groupfoundry-faq-accordion__innerfoundry-faq-accordion__itemfoundry-faq-accordion__listfoundry-faq-accordion__questionfoundry-faq-accordion__title
faq-cta
Minimum required: items, cta_title, cta_action — everything else is optional.
FAQ companion CTA block used to drive follow-up actions.
sections:
- block: faq-cta
id: faq-cta-example
content:
cta_action: Example value
cta_secondary_action: Example value
cta_text: Example value
cta_title: Example value
items:
- title: Item title
text: Item description.
subtitle: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-faq-ctafoundry-faq-cta__actionsfoundry-faq-cta__innerfoundry-faq-cta__textfoundry-faq-cta__title
features
Minimum required: items — everything else is optional.
Feature list/grid block with optional card presentation, linked-card support,
and icon support.
sections:
- block: features
id: features-example
content:
eyebrow: Example eyebrow
items:
- name: Item title
description: Item description.
url: /about/
cta: Read more
css_class: example-item
text: Example supporting text.
title: Example title
design:
variant: linked-cards
columns: '3'
css_class: ''
Content fields
eyebroworkickerfor a small label above the title- item
nameortitle - item
descriptionortext - item
urlandctafor thelinked-cardsvariant - item
css_classfor per-card styling hooks
Design options
| Field | Details |
|---|---|
variants | cards, plain, linked-cards |
variant | cards | plain | linked-cards — card styling, borderless, or linked CTA cards |
columns | 2 | 3 | 4 — grid columns (default: 3) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-featuresfoundry-features__eyebrowfoundry-features__gridfoundry-features__innerfoundry-features__itemfoundry-features__item-ctafoundry-features__item-iconfoundry-features__item-linkfoundry-features__item-textfoundry-features__item-titlefoundry-features__textfoundry-features__title
founder-profile
Minimum required: name — everything else is optional.
Founder spotlight/profile block with media and narrative copy.
sections:
- block: founder-profile
id: founder-profile-example
content:
contact_email_href: Example value
contact_email_label: Example value
contact_phone_href: Example value
contact_phone_label: Example value
highlights: Example value
image: "/images/example.jpg"
image_alt: Descriptive alt text
image_height: Example value
image_sizes: Example value
image_srcset: Example value
image_webp_srcset: Example value
image_width: Example value
name: Example value
paragraphs: Example value
role: Role or title
subtitle: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-founder-profilefoundry-founder-profile__contentfoundry-founder-profile__innerfoundry-founder-profile__mediafoundry-founder-profile__textfoundry-founder-profile__title
gallery
Minimum required: images — everything else is optional.
Uniform image grid with optional captions and lightbox navigation.
sections:
- block: gallery
id: gallery-example
content:
images:
- src: "/images/gallery-1.jpg"
alt: Gallery image
caption: Optional caption
images_data: "site.section.images"
text: Example supporting text.
title: Example title
design:
columns: '3'
gap: md
aspect: '16:9'
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
columns | 2 | 3 | 4 — gallery columns |
gap | sm | md | lg — spacing between items |
aspect | square | landscape | auto — thumbnail ratio |
css_class | extra CSS classes on outer section |
BEM classes
foundry-galleryfoundry-gallery__closefoundry-gallery__dialogfoundry-gallery__dialog-actionsfoundry-gallery__dialog-captionfoundry-gallery__dialog-imagefoundry-gallery__dialog-innerfoundry-gallery__dialog-metafoundry-gallery__emptyfoundry-gallery__gridfoundry-gallery__imagefoundry-gallery__innerfoundry-gallery__itemfoundry-gallery__openfoundry-gallery__subtitlefoundry-gallery__title
hero
Minimum required: title — everything else is optional.
Primary hero section with headline, supporting copy, and one or two CTAs.
sections:
- block: hero
id: hero-example
content:
primary_action:
text: Learn more
url: "/contact/"
secondary_action:
text: Learn more
url: "/contact/"
text: Example supporting text.
title: Example title
design:
variant: centered
css_class: ''
Design options
| Field | Details |
|---|---|
variants | centered, left |
variant | centered | left — text and action alignment |
css_class | extra CSS classes on outer section |
BEM classes
foundry-herofoundry-hero__actionsfoundry-hero__innerfoundry-hero__textfoundry-hero__title
icon-grid
Minimum required: items — everything else is optional.
Icon-led capability grid with configurable columns and card styles.
sections:
- block: icon-grid
id: icon-grid-example
content:
items:
- title: Item title
text: Item description.
text: Example supporting text.
title: Example title
design:
variant: plain
columns: '3'
css_class: ''
Design options
| Field | Details |
|---|---|
variants | plain, cards, centered |
variant | plain | cards | centered — plain: icon left + content right (default); cards: card background per item; centered: icon centered above content, centered text |
columns | 2 | 3 | 4 — grid columns |
css_class | extra CSS classes on outer section |
BEM classes
foundry-icon-gridfoundry-icon-grid__contentfoundry-icon-grid__gridfoundry-icon-grid__iconfoundry-icon-grid__innerfoundry-icon-grid__itemfoundry-icon-grid__item-innerfoundry-icon-grid__item-textfoundry-icon-grid__item-titlefoundry-icon-grid__subtitlefoundry-icon-grid__title
illustration-panel
Minimum required: image — everything else is optional.
Panel block that combines illustration media with explanatory text.
sections:
- block: illustration-panel
id: illustration-panel-example
content:
caption: Optional caption text.
image: "/images/example.jpg"
image_alt: Descriptive alt text
panel_width: Example value
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-illustration-panelfoundry-illustration-panel__contentfoundry-illustration-panel__innerfoundry-illustration-panel__mediafoundry-illustration-panel__text
image-feature
Minimum required: src, alt — everything else is optional.
Single editorial image block with layout, caption, and lightbox options.
sections:
- block: image-feature
id: image-feature-example
content:
alt: Descriptive alt text
caption: Optional caption text.
credit: 'Photo: Team'
src: "/images/example.jpg"
design:
variant: contained
aspect: '16:9'
rounded: true
shadow: true
lightbox: true
css_class: ''
Design options
| Field | Details |
|---|---|
variants | contained, wide, full-bleed, float-left, float-right |
variant | contained | wide | full-bleed | float-left | float-right — image placement |
aspect | 16:9 | 4:3 | 3:2 | square | auto — media aspect ratio |
rounded | true | false — rounded corners on media |
shadow | true | false — shadow on media frame |
lightbox | true | false — open image in dialog lightbox |
css_class | extra CSS classes on outer section |
BEM classes
foundry-image-featurefoundry-image-feature__captionfoundry-image-feature__closefoundry-image-feature__dialogfoundry-image-feature__dialog-innerfoundry-image-feature__emptyfoundry-image-feature__figurefoundry-image-feature__innerfoundry-image-feature__media
lead-magnet
Minimum required: offer_title — everything else is optional.
Lead magnet signup block combining offer copy and form capture.
sections:
- block: lead-magnet
id: lead-magnet-example
content:
download_url: Example value
fields: Example value
form_action: "/api/submit"
form_method: Example value
form_text: Example value
form_title: Example value
offer_text: Example value
offer_title: Example value
privacy_note: No spam. Unsubscribe anytime.
submit_text: Example value
subtitle: Example value
title: Example title
design:
css_class: ''
Legacy mode uses form_action.
Managed mode uses content.form and resolves base_url / site_key from site.Params.foundry.control when available.
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-lead-magnetfoundry-lead-magnet__formfoundry-lead-magnet__innerfoundry-lead-magnet__textfoundry-lead-magnet__title
logo-trust
Minimum required: logos, badges — everything else is optional.
Hybrid trust block combining logos with supporting credibility chips.
sections:
- block: logo-trust
id: logo-trust-example
content:
badges: Example value
logos:
- name: Partner Name
subtitle: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-logo-trustfoundry-logo-trust__badgesfoundry-logo-trust__gridfoundry-logo-trust__imagefoundry-logo-trust__innerfoundry-logo-trust__itemfoundry-logo-trust__namefoundry-logo-trust__subtitlefoundry-logo-trust__title
logos
Minimum required: logos — everything else is optional.
Logo wall block for clients, partners, or agencies.
sections:
- block: logos
id: logos-example
content:
logos:
- name: Partner Name
subtitle: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | grid, strip, pill |
variant | grid | strip | pill — grid: 3-col card grid (default); strip: flat inline row with dividers; pill: compact pill chips |
marquee | true | false — enable scrolling marquee (overrides variant layout) |
marquee_speed | scroll speed in px/s (default: 55) |
marquee_dir | left | right — scroll direction (default: left) |
marquee_pause | hover | none — pause behavior (default: hover) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-logosfoundry-logos__gridfoundry-logos__innerfoundry-logos__itemfoundry-logos__title
map-coverage
Minimum required: stats - everything else is optional.
Geographic coverage block combining map visuals, service-area links, and
supporting text. Use list when the coverage story is area-first and no map art
is available.
sections:
- block: map-coverage
id: map-coverage-example
content:
image: "/images/example.jpg"
image_alt: Descriptive alt text
markers: Example value
note: Example value
stats:
- label: Metric
value: 95%
subtitle: Example value
title: Example title
design:
variant: split
image_position: right
stat_style: cards
area_style: chips
map_frame: card
css_class: ''
Design options
| Field | Details |
|---|---|
variants | split, panel, list |
variant | split | panel | list — split: copy and visual side by side; panel: stacked explanatory panel; list: area-first coverage list for routes without map art |
image_position | left | right — media/coverage panel side on large screens |
stat_style | cards | inline — framed stat cards or tighter inline metrics |
area_style | chips | list — coverage area display treatment |
map_frame | card | soft | flush — map/image frame treatment |
css_class | extra CSS classes on outer section |
BEM classes
foundry-map-coveragefoundry-map-coverage__areafoundry-map-coverage__areasfoundry-map-coverage__copyfoundry-map-coverage__imagefoundry-map-coverage__innerfoundry-map-coverage__mapfoundry-map-coverage__markersfoundry-map-coverage__placeholderfoundry-map-coverage__statfoundry-map-coverage__statsfoundry-map-coverage__textfoundry-map-coverage__title
masonry-gallery
Minimum required: one of images or images_data — everything else is optional.
Responsive masonry-style image gallery with optional lightbox.
sections:
- block: masonry-gallery
id: masonry-gallery-example
content:
images:
- src: "/images/gallery-1.jpg"
alt: Gallery image
caption: Optional caption
images_data: "site.section.images"
text: Example supporting text.
title: Example title
design:
columns: '3'
gap: md
lightbox: true
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
columns | 2 | 3 | 4 — desktop masonry columns |
gap | sm | md | lg — spacing between items |
lightbox | true | false — open images in dialog lightbox |
css_class | extra CSS classes on outer section |
Notes
- Use
imagesfor inline page-specific galleries. - Use
images_datato point at a shared data slice such assite.section.imageswhen multiple pages should reuse the same curated image set. limitcan trim a shared image slice for teaser use on home or landing pages.
BEM classes
foundry-masonry-galleryfoundry-masonry-gallery__columnsfoundry-masonry-gallery__dialogfoundry-masonry-gallery__dialog-innerfoundry-masonry-gallery__emptyfoundry-masonry-gallery__innerfoundry-masonry-gallery__itemfoundry-masonry-gallery__openfoundry-masonry-gallery__subtitlefoundry-masonry-gallery__title
managed-form
Minimum required: form.form_key — everything else is optional.
Managed form mount point for Foundry-connected intake, lead, and CTA flows.
sections:
- block: managed-form
id: managed-form-example
content:
eyebrow: Example value
title: Example title
text: Supporting copy for the form.
loading_text: Loading form...
privacy_note: No spam. Unsubscribe anytime.
form:
mode: managed
form_key: contact-intake
cta_key: primary-cta
base_url: https://control.example.com
site_key: regulated-production-proof-site
design:
css_class: ''
The block renders a managed form shell and resolves the final configuration
through layouts/partials/framework/form-config.html. When base_url or
site_key are omitted inline, the shared Foundry control settings can supply
them.
Design options
| Field | Details |
|---|---|
variant | narrow | wide | panel — narrow: max-w-3xl centered (default); wide: max-w-5xl for multi-field forms; panel: framed card with surface background |
css_class | extra CSS classes on outer section |
BEM classes
foundry-managed-formfoundry-managed-form__eyebrowfoundry-managed-form__innerfoundry-managed-form__privacyfoundry-managed-form__statusfoundry-managed-form__textfoundry-managed-form__title
media-break
Minimum required: src, alt — everything else is optional.
Full-bleed image or MP4 video break for editorial pages: use it between prose
sections for Munich-style fixed image moments, or as a slower-than-scroll
parallax visual beat with optional overlay copy.
sections:
- block: media-break
id: consultation-room-break
content:
src: "/images/consultation-room.jpg"
alt: high-consideration service proof site consultation room
eyebrow: Consultation
title: The room slows down.
text: A visual pause can sit between article sections without becoming a full pinned chapter.
caption: Optional caption text.
design:
behavior: parallax
height: 88svh
min_height: 30rem
overlay: medium
content_align: left
title_tag: h2
position: center 42%
parallax_speed: "0.12"
parallax_dir: up
css_class: ''
Use behavior: fixed for a desktop background-attachment: fixed image break
that feels locked behind the page as the visitor scrolls through it. Use
behavior: parallax when the image should drift upward more slowly than the
scroll rate. Use behavior: still for a quiet full-bleed image or video break
with no scroll-linked motion.
Design options
| Field | Details |
|---|---|
variants | parallax, fixed, still |
behavior | parallax | fixed | still — parallax drifts the media slower than scroll, fixed uses desktop background-attachment, still renders a static full-bleed media break |
height | CSS length for section height (default: 88svh) |
min_height | CSS length for section minimum height (default: 28rem) |
overlay | none | light | medium | strong — media shade behind optional copy |
content_align | left | center | right — optional overlay copy alignment |
title_tag | h1 | h2 — optional overlay title element for hero vs in-page use (default: h2) |
position | CSS object-position/background-position value (default: center center) |
parallax_speed | 0.0-0.35 — viewport fraction used for slower-than-scroll drift (default: 0.14) |
parallax_dir | up | down — media drift direction as the visitor scrolls (default: up) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-media-breakfoundry-media-break__actionfoundry-media-break__assetfoundry-media-break__captionfoundry-media-break__contentfoundry-media-break__copyfoundry-media-break__emptyfoundry-media-break__eyebrowfoundry-media-break__fixed-bgfoundry-media-break__layerfoundry-media-break__mediafoundry-media-break__shadefoundry-media-break__textfoundry-media-break__title
media-sequence
Minimum required: items — everything else is optional.
Mixed image/video/text storytelling block for creative pages, showcases, and
editorial case-study sequences.
sections:
- block: media-sequence
id: media-sequence-example
content:
text: Example supporting text.
title: Example title
items:
- type: image
title: First frame
text: Supporting description.
src: "/images/example.jpg"
alt: Descriptive alt text
caption: Caption text
credit: Photo credit
- type: video
title: Motion frame
text: Supporting description.
url: "/video/example.mp4"
poster: "/images/example-poster.jpg"
caption: Video caption
- type: quote
quote: This sequence should feel authored, not templated.
author: Example author
- type: credits
title: Project credits
credits:
- label: Series
value: Selected works
- label: Medium
value: Still image / mixed media
design:
variant: story-reel
media_ratio: wide
media_surface: flush
spacing: md
show_progress: true
stagger_items: true
css_class: ''
Use story-reel for mixed-media editorial sequences and work-reel for
selected work lists that benefit from item indexing. Both variants emit the
story-work-reel display pattern and keep progress indicators decorative so
reduced-motion and no-JavaScript states preserve source-order reading.
Content options
| Field | Details |
|---|---|
items[].caption | optional caption rendered below image/video media |
items[].credit | optional credit line rendered below caption |
items[].credits | array of label/value credit rows for type: credits items |
Design options
| Field | Details |
|---|---|
variants | editorial, alternating, cinematic, story-reel, work-reel |
variant | editorial | alternating | cinematic | story-reel | work-reel — mixed-media storytelling layout |
media_ratio | landscape | square | portrait | wide | auto — default media aspect ratio |
media_surface | framed | flush | soft — default media frame treatment |
spacing | sm | md | lg — vertical rhythm between sequence items |
show_progress | true | false — show a reduced-motion-safe scroll progress rail for reel variants (default: true on story-reel/work-reel) |
show_index | true | false — show two-digit item indexes (default: true on work-reel) |
stagger_items | true | false — stagger reel items when item_reveal is not explicitly set (default: true on story-reel/work-reel) |
item_reveal | fade-up | fade-in | slide-left | slide-right | zoom-in | none — explicit per-item reveal style; overrides default reel stagger |
css_class | extra CSS classes on outer section |
BEM classes
foundry-media-sequencefoundry-media-sequence__bodyfoundry-media-sequence__credits-itemfoundry-media-sequence__eyebrowfoundry-media-sequence__galleryfoundry-media-sequence__imagefoundry-media-sequence__indexfoundry-media-sequence__innerfoundry-media-sequence__introfoundry-media-sequence__itemfoundry-media-sequence__itemsfoundry-media-sequence__mediafoundry-media-sequence__media-shellfoundry-media-sequence__progressfoundry-media-sequence__progress-barfoundry-media-sequence__quotefoundry-media-sequence__text-itemfoundry-media-sequence__title
pinned-media-story
Minimum required: items — everything else is optional.
Full-viewport scroll story where each image or MP4 video pins to the back of
the viewport while its chapter copy scrolls over it.
sections:
- block: pinned-media-story
id: city-scroll-story
content:
eyebrow: City guide
title: A day in motion
text: Pair each chapter with the visual that should lock behind it.
primary_action:
text: Plan a visit
url: /visit/
items:
- type: video
title: Morning arrival
text: The opening chapter scrolls while the video remains fixed behind it.
src: "/video/arrival.mp4"
poster: "/images/arrival-poster.jpg"
caption: Short contextual caption.
- type: image
title: Market streets
text: Images use the same pinned treatment as video.
images:
- src: "/images/market-01.jpg"
alt: People walking through a city market
kenburns_preset: in-left
position: center center
- src: "/images/market-02.jpg"
alt: Vendor arranging goods at a city market
kenburns_preset: out-right
position: 55% center
panels:
- eyebrow: First stop
title: Market streets
text: The same pinned media can hold more than one scroll-over text beat.
- eyebrow: Second stop
title: Still the same visual
text: Use panels when one image or rotator should stay locked behind several content moments.
credit: Photo credit
design:
variant: dark
min_height: 120vh
overlay: medium
content_align: left
intro_title_tag: h2
pinned: true
show_progress: true
parallax: true
parallax_speed: "0.14"
parallax_dir: up
kenburns: true
kenburns_interval: 7200
css_class: ''
Design options
| Field | Details |
|---|---|
variants | dark, light, editorial |
variant | dark | light | editorial — pinned full-viewport media storytelling palette |
min_height | CSS length for each chapter scroll span (default: 120vh) |
overlay | none | light | medium | strong — media shade behind copy |
content_align | left | center | right — chapter text alignment |
intro_title_tag | h1 | h2 — intro title element for top-hero vs in-page section use (default: h2) |
pinned | true | false — keep media sticky while chapter panels scroll; false renders the same content as a static chapter stack (default: true) |
show_progress | true | false — show a decorative chapter progress rail scoped to each pinned chapter (default: false) |
parallax | true | false | {speed 0.0-0.35} — normalized alias for media_parallax; item-level parallax can override |
parallax_speed | 0.0-0.35 — normalized alias for media_parallax_speed (default: 0.16) |
parallax_dir | up | down — normalized alias for media_parallax_dir (default: up) |
kenburns | true | false — enable/disable Ken Burns rotation for image chapters; item-level kenburns can override |
kenburns_interval | milliseconds between chapter image crossfades (default: 7200) |
kenburns_transition | milliseconds for crossfade duration between chapter images (default: 1400) |
media_parallax | true | false — compatibility alias for parallax |
media_parallax_speed | 0.0-0.35 — compatibility alias for parallax_speed |
media_parallax_dir | up | down — compatibility alias for parallax_dir |
css_class | extra CSS classes on outer section |
Item-level panels can be used when one pinned image, image rotator, or MP4
should carry several scroll-over text moments. If panels is omitted, the item
renders one panel from its own eyebrow, title, text, caption, credit,
and action fields.
For the Munich-style rhythm of text block, fixed/slower image, then next text
box, prefer media-break. Use pinned-media-story when chapter copy should
scroll over a media plane, or when one image/rotator should remain locked
behind several text beats. Start with min_height: 115vh to 135vh for a
single-panel chapter. Each additional panel adds another full-viewport text
beat over the same pinned image; increase the item min_height only when the
image should linger after the last panel. Use parallax_dir: up for the natural
image-upward drift while scrolling; parallax_speed: "0.10" to "0.16" is
editorial and subtle, while "0.20" to "0.28" is more obvious. Use
show_progress: true only when the progress rail helps orient a longer
chaptered story; it is decorative and hidden under reduced motion.
BEM classes
foundry-pinned-media-storyfoundry-pinned-media-story__actionsfoundry-pinned-media-story__assetfoundry-pinned-media-story__captionfoundry-pinned-media-story__chapterfoundry-pinned-media-story__chapter-eyebrowfoundry-pinned-media-story__chapter-textfoundry-pinned-media-story__chapter-titlefoundry-pinned-media-story__chaptersfoundry-pinned-media-story__contentfoundry-pinned-media-story__creditfoundry-pinned-media-story__eyebrowfoundry-pinned-media-story__introfoundry-pinned-media-story__mediafoundry-pinned-media-story__panelfoundry-pinned-media-story__panel-stackfoundry-pinned-media-story__parallax-layerfoundry-pinned-media-story__rotatorfoundry-pinned-media-story__shadefoundry-pinned-media-story__textfoundry-pinned-media-story__title
media-text
Minimum required: title, text, image - everything else is optional.
Split layout block pairing media with descriptive copy and actions. Named
variants provide stable presets over the lower-level layout knobs.
sections:
- block: media-text
id: media-text-example
content:
eyebrow: Section label
image: "/images/example.jpg"
image_alt: Descriptive alt text
items:
- title: Item title
text: Item description.
kicker: Example value
media_caption: Example value
primary_action:
text: Learn more
url: "/contact/"
secondary_action:
text: Learn more
url: "/contact/"
text: Example supporting text.
title: Example title
design:
variant: split
density: normal
frame: card
layout: balanced
media_fit: cover
media_position: left
media_ratio: landscape
text_measure: normal
vertical_align: center
css_class: ''
Design options
| Field | Details |
|---|---|
variants | split, editorial, feature-panel |
variant | split | editorial | feature-panel — split: balanced media/copy default; editorial: roomier content-led story rhythm; feature-panel: framed copy panel with stronger media emphasis |
media_position | left | right - media placement |
media_ratio | landscape | square | portrait | wide - media aspect ratio |
layout | balanced | media-wide | content-wide | stacked - media/content column balance |
vertical_align | center | start | end - vertical alignment between media and copy |
text_measure | normal | narrow | wide - copy width constraint |
density | normal | compact | spacious - vertical spacing and grid gap |
frame | card | plain | borderless - media frame treatment |
media_fit | cover | contain - image fit inside the media frame |
motion_parallax | number string - optional parallax speed for the media column |
motion_parallax_dir | 1 | -1 - optional media column parallax direction |
css_class | extra CSS classes on outer section |
Non-default layout example
sections:
- block: media-text
id: media-text-editorial-example
content:
title: Editorial image with wider copy
text: Use additive design fields when the same media/copy pattern needs a different balance or rhythm.
image: "/images/example-editorial.jpg"
image_alt: Editorial detail image
design:
variant: editorial
layout: content-wide
vertical_align: start
text_measure: wide
density: spacious
frame: plain
media_fit: contain
BEM classes
foundry-media-textfoundry-media-text__actionsfoundry-media-text__captionfoundry-media-text__contentfoundry-media-text__eyebrowfoundry-media-text__imagefoundry-media-text__innerfoundry-media-text__itemfoundry-media-text__item-iconfoundry-media-text__itemsfoundry-media-text__mediafoundry-media-text__media-framefoundry-media-text__textfoundry-media-text__title
newsletter-inline
Minimum required: none — everything else is optional. Inline email signup form for lead capture inside content flow.
sections:
- block: newsletter-inline
id: newsletter-inline-example
content:
button_text: Submit
form_action: "/api/submit"
placeholder: you@example.com
privacy_note: No spam. Unsubscribe anytime.
text: Example supporting text.
title: Example title
design:
variant: card
css_class: ''
Legacy mode uses form_action.
Managed mode uses content.form and the standard Foundry Control public form API.
Design options
| Field | Details |
|---|---|
variants | card, banner, minimal |
variant | card | banner | minimal — form presentation |
css_class | extra CSS classes on outer section |
BEM classes
foundry-newsletter-inlinefoundry-newsletter-inline__inner
onboarding-timeline
Minimum required: steps — everything else is optional.
Structured onboarding sequence block with phase milestones.
sections:
- block: onboarding-timeline
id: onboarding-timeline-example
content:
steps:
- title: Step title
text: Step detail.
subtitle: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-onboarding-timelinefoundry-onboarding-timeline__contentfoundry-onboarding-timeline__innerfoundry-onboarding-timeline__itemfoundry-onboarding-timeline__listfoundry-onboarding-timeline__numberfoundry-onboarding-timeline__title
page-list
Minimum required: section — everything else is optional.
Generic content listing block for section pages with card/list/compact modes.
sections:
- block: page-list
id: page-list-example
content:
limit: 6
section: blog
sort: date
text: Example supporting text.
title: Example title
design:
preset: creative-journal-feed
view: list
columns: '3'
show_date: true
show_summary: true
show_image: false
css_class: ''
Creative journal indexes use the creative-journal-feed preset. Listing display
flags (show_date, show_summary, show_image) belong under design because
the block reads them as presentation choices.
Design options
| Field | Details |
|---|---|
variants | cards, list, compact |
view | cards | list | compact — listing layout mode |
columns | 2 | 3 — grid columns for cards mode |
show_date | true | false — show publish date |
show_summary | true | false — show excerpt text |
show_image | true | false — show thumbnails |
css_class | extra CSS classes on outer section |
BEM classes
foundry-page-listfoundry-page-list--cardsfoundry-page-list--compactfoundry-page-list--listfoundry-page-list__actionsfoundry-page-list__bodyfoundry-page-list__cardfoundry-page-list__compactfoundry-page-list__compact-itemfoundry-page-list__emptyfoundry-page-list__gridfoundry-page-list__imagefoundry-page-list__image-linkfoundry-page-list__innerfoundry-page-list__item-titlefoundry-page-list__listfoundry-page-list__list-itemfoundry-page-list__list-layoutfoundry-page-list__metafoundry-page-list__subtitlefoundry-page-list__summaryfoundry-page-list__title
post-hero
Minimum required: title — everything else is optional.
Article-oriented hero with metadata, author context, and optional featured image.
sections:
- block: post-hero
id: post-hero-example
content:
author_image: "/images/example.jpg"
author_name: Author Name
author_role: Example value
category: Example Group
date: '2026-02-22'
image: "/images/example.jpg"
image_alt: Descriptive alt text
read_time: 5 min read
tags:
- compliance
- operations
text: Example supporting text.
title: Example title
design:
variant: centered
css_class: ''
Design options
| Field | Details |
|---|---|
variants | centered, split, stacked |
variant | centered | split | stacked — article hero layout |
css_class | extra CSS classes on outer section |
BEM classes
foundry-post-herofoundry-post-hero__authorfoundry-post-hero__contentfoundry-post-hero__datefoundry-post-hero__imagefoundry-post-hero__innerfoundry-post-hero__mediafoundry-post-hero__metafoundry-post-hero__read-timefoundry-post-hero__splitfoundry-post-hero__standfirstfoundry-post-hero__tagsfoundry-post-hero__title
post-list
Minimum required: section — everything else is optional.
Enhanced blog list block with featured item support and richer card layouts.
sections:
- block: post-list
id: post-list-example
content:
cta:
text: Learn more
url: "/contact/"
featured_first: true
limit: 6
section: blog
sort: date
text: Example supporting text.
title: Example title
design:
view: default
columns: '3'
show_date: true
show_summary: true
show_image: true
show_category: true
css_class: ''
Design options
| Field | Details |
|---|---|
variants | cards, list, magazine |
view | cards | list | magazine — listing layout mode |
columns | 2 | 3 — grid columns for cards mode |
show_date | true | false — show publish date |
show_summary | true | false — show excerpt text |
show_image | true | false — show thumbnails |
show_category | true | false — show category badge |
css_class | extra CSS classes on outer section |
BEM classes
foundry-post-listfoundry-post-list__cardfoundry-post-list__ctafoundry-post-list__emptyfoundry-post-list__featuredfoundry-post-list__gridfoundry-post-list__innerfoundry-post-list__listfoundry-post-list__list-itemfoundry-post-list__magazinefoundry-post-list__magazine-itemfoundry-post-list__magazine-leadfoundry-post-list__magazine-stackfoundry-post-list__subtitlefoundry-post-list__title
content-feed
Minimum required: none — query fields are optional but recommended. Query-driven discovery feed that filters pages using normalized discovery metadata instead of section-only listing.
sections:
- block: content-feed
id: content-feed-example
content:
eyebrow: Discover
title: Latest Articles for Operators
text: Curated from shared discovery metadata.
empty_text: No matching content yet.
cta:
text: View all articles
url: "/blog/"
query:
kinds: [article]
sections: [blog]
topics: []
audience: []
series: []
categories: []
tags: []
languages: []
featured_only: false
exclude_current: true
limit: 3
sort: newest
design:
view: cards
columns: '3'
show_image: true
show_summary: true
show_date: true
show_kind: true
show_topics: false
show_audience: false
css_class: ''
Query semantics
- OR within a field
- AND across different fields
- empty
languagesdefaults to the current page language
Supported query fields
kindssectionstopicsaudienceseriescategoriestagslanguagesfeatured_onlyexclude_currentlimitsort
Sort values
newestoldesttitlefeaturedmanual
manual sorts by search.order, then page weight, then newest date.
Design options
| Field | Details |
|---|---|
view | cards | list | compact — feed layout mode |
columns | 2 | 3 | 4 — cards grid columns |
show_image | true | false — show thumbnails |
show_summary | true | false — show excerpt text |
show_date | true | false — show publish date |
show_kind | true | false — show kind badge |
show_topics | true | false — show topic badges |
show_audience | true | false — show audience badge |
css_class | extra CSS classes on outer section |
BEM classes
foundry-content-feedfoundry-content-feed__compactfoundry-content-feed__compact-itemfoundry-content-feed__ctafoundry-content-feed__cardfoundry-content-feed__emptyfoundry-content-feed__eyebrowfoundry-content-feed__gridfoundry-content-feed__innerfoundry-content-feed__listfoundry-content-feed__list-itemfoundry-content-feed__textfoundry-content-feed__title
pricing-comparison
Minimum required: plans — everything else is optional.
Pricing comparison matrix block across plans or competitors.
sections:
- block: pricing-comparison
id: pricing-comparison-example
content:
plans: Example value
subtitle: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-pricing-comparisonfoundry-pricing-comparison__cellfoundry-pricing-comparison__innerfoundry-pricing-comparison__rowfoundry-pricing-comparison__tablefoundry-pricing-comparison__tierfoundry-pricing-comparison__title
pricing-tiers
Minimum required: tiers — everything else is optional.
Tiered pricing card block with features and emphasis controls.
sections:
- block: pricing-tiers
id: pricing-tiers-example
content:
tiers: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | grid, featured, stacked |
variant | grid | featured | stacked — grid: 3 equal cards (default); featured: tier with featured: true gets brand-accent elevated treatment; stacked: full-width rows with feature list |
css_class | extra CSS classes on outer section |
Set featured: true on a tier to elevate it in the featured variant.
BEM classes
foundry-pricing-tiersfoundry-pricing-tiers__cardfoundry-pricing-tiers__featuresfoundry-pricing-tiers__gridfoundry-pricing-tiers__innerfoundry-pricing-tiers__pricefoundry-pricing-tiers__title
prose-panel
Minimum required: text — everything else is optional.
Contained prose block for narrative or explainer content.
sections:
- block: prose-panel
id: prose-panel-example
content:
text: Example supporting text.
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-prose-panelfoundry-prose-panel__contentfoundry-prose-panel__inner
pullquote
Minimum required: quote — everything else is optional.
Editorial pull-quote emphasis block for long-form content.
sections:
- block: pullquote
id: pullquote-example
content:
author: Author Name
quote: A representative quote for this block.
role: Role or title
design:
variant: accent-bar
align: center
css_class: ''
Design options
| Field | Details |
|---|---|
variants | accent-bar, filled, oversized, minimal |
variant | accent-bar | filled | oversized | minimal — pullquote styling |
align | center | left — quote alignment |
css_class | extra CSS classes on outer section |
BEM classes
foundry-pullquotefoundry-pullquote__attributionfoundry-pullquote__boxfoundry-pullquote__innerfoundry-pullquote__quote
quote
Minimum required: quote — everything else is optional.
Standalone quotation block for prominent statements with attribution.
sections:
- block: quote
id: quote-example
content:
author: Author Name
image: "/images/example.jpg"
quote: A representative quote for this block.
role: Role or title
design:
variant: centered
css_class: ''
Design options
| Field | Details |
|---|---|
variants | centered, left, large |
variant | centered | left | large — quote presentation |
css_class | extra CSS classes on outer section |
BEM classes
foundry-quotefoundry-quote__author-textfoundry-quote__author-wrapfoundry-quote__figurefoundry-quote__innerfoundry-quote__markfoundry-quote__metafoundry-quote__text
related-posts
Minimum required: section — everything else is optional.
Related content recommendation block sourced from a section.
sections:
- block: related-posts
id: related-posts-example
content:
exclude_current: true
limit: 6
section: blog
title: Example title
design:
view: default
css_class: ''
Design options
| Field | Details |
|---|---|
variants | cards, compact |
view | cards | compact — related links layout |
css_class | extra CSS classes on outer section |
BEM classes
foundry-related-postsfoundry-related-posts__cardfoundry-related-posts__compactfoundry-related-posts__gridfoundry-related-posts__innerfoundry-related-posts__title
resource-downloads
Minimum required: resources — everything else is optional.
Download resource listing block with item metadata.
sections:
- block: resource-downloads
id: resource-downloads-example
content:
email_placeholder: Example value
form_action: "/api/submit"
form_title: Example value
privacy_note: No spam. Unsubscribe anytime.
resources: Example value
submit_text: Example value
subtitle: Example value
title: Example title
design:
css_class: ''
Legacy mode uses form_action.
Managed mode uses content.form and the standard Foundry Control public form API.
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-resource-downloadsfoundry-resource-downloads__gridfoundry-resource-downloads__innerfoundry-resource-downloads__itemfoundry-resource-downloads__linkfoundry-resource-downloads__title
rich-text
Minimum required: text — everything else is optional.
Long-form prose block with editorial layout variants.
sections:
- block: rich-text
id: rich-text-example
content:
dropcap: true
title: Example title
text: Example supporting text.
design:
preset: creative-project-notes
variant: magazine
max_width: lg
css_class: ''
Creative work-detail pages use the creative-project-notes preset for governed
project notes and credits. content.title is optional and renders as
foundry-rich-text__title above the rich body.
Content options
| Field | Details |
|---|---|
title | optional heading rendered above the rich text body |
dropcap | true | false — show an editorial drop cap on the first paragraph when variant is magazine |
Design options
| Field | Details |
|---|---|
variants | centered, wide, two-column, magazine |
variant | centered | wide | two-column | magazine — article layout |
max_width | prose | md | lg | xl | full — container width |
css_class | extra CSS classes on outer section |
BEM classes
foundry-rich-textfoundry-rich-text--centeredfoundry-rich-text--magazinefoundry-rich-text--two-columnfoundry-rich-text--widefoundry-rich-text__bodyfoundry-rich-text__innerfoundry-rich-text__title
search
Minimum required: none — everything else is optional. Static-site search interface powered by Pagefind with Foundry styling and graceful fallback.
sections:
- block: search
id: search-example
content:
eyebrow: Search
title: Search the site
text: Find pages, docs, and resources.
placeholder: Search...
loading_text: Loading search index...
empty_text: Start typing to search.
zero_state_title: Start with a treatment, topic, or audience
zero_state_text: Use search directly or begin with one of the curated paths below.
no_results_text: No matching results found.
no_results_title: No exact matches
no_results_panel_text: Try a broader term, adjust the filters, or choose a guided next step.
unavailable_text: Search index unavailable.
clear_filters_text: Clear filters
clear_all_text: Clear all
sort_label: Sort
sort_option_labels:
relevance: Best match
newest: Newest first
overlay_title: Quick search
overlay_text: Jump to the most relevant pages.
overlay_placeholder: Search treatments, articles, and pages...
overlay_empty_text: Start with a search, suggestion, or quick link.
overlay_loading_text: Searching...
overlay_no_results_text: No exact matches yet.
overlay_view_all_text: View all results
overlay_close_label: Close search
overlay_shortcut_text: Press / or Cmd/Ctrl+K
overlay_suggested_queries:
- label: Botox
query: botox
overlay_quick_links:
- label: Treatments
url: /treatments/
description: Explore treatment categories.
overlay_no_results_actions:
- label: Contact
url: /contact/
description: Ask for help.
filter_labels:
kind: Type
topic: Topic
audience: Audience
filter_all_labels:
kind: All types
topic: All topics
audience: All audiences
design:
variant: default
show_images: true
show_sub_results: false
excerpt_length: 22
debounce: 250
filter_fields: [kind, topic, audience]
primary_filter_field: kind
sort_options: [relevance, newest]
default_sort: relevance
sync_query_to_url: true
overlay_enabled: true
overlay_results_limit: 5
overlay_min_query_length: 2
overlay_debounce: 160
css_class: ''
Design options
| Field | Details |
|---|---|
variants | default, minimal |
variant | default | minimal — search panel style |
show_images | true | false — include thumbnails in results |
show_sub_results | true | false — include sub-result snippets |
excerpt_length | number of words shown in result excerpt |
debounce | debounce in milliseconds before querying |
filter_fields | comma list or array of discovery filters to render |
primary_filter_field | optional field rendered as tabs instead of a select |
sort_options | optional sort values rendered as the full-page sort control |
default_sort | optional default sort value; defaults to the first configured option |
sync_query_to_url | true | false — keep q and filter.* state in the URL |
overlay_enabled | true | false — enable the global quick-search overlay from this localized block |
overlay_results_limit | number of overlay results shown before linking to the full page |
overlay_min_query_length | minimum characters before the overlay starts querying |
overlay_debounce | overlay debounce in milliseconds |
css_class | extra CSS classes on outer section |
Optional content fields
| Field | Details |
|---|---|
clear_filters_text | text for the filter reset control |
clear_all_text | text for the summary-level reset that clears query and filters |
sort_label | label shown above the full-page sort control |
sort_option_labels | map of sort option labels keyed by sort value |
filter_labels | map of field labels keyed by filter name |
filter_all_labels | map of default option labels keyed by filter name |
zero_state_title | heading shown in the full-page zero state |
zero_state_text | supporting copy shown in the full-page zero state |
zero_state_suggested_queries_label | heading above the full-page zero-state query chips |
zero_state_quick_links_label | heading above the full-page zero-state quick links |
zero_state_suggested_queries | list of { label, query } chips shown before any search runs |
zero_state_quick_links | list of { label, url, description } links shown in the full-page zero state |
no_results_title | heading shown when the full-page search returns no matches |
no_results_panel_text | supporting copy shown in the full-page no-results state |
no_results_suggested_queries_label | heading above the full-page no-results query chips |
no_results_actions_label | heading above the full-page no-results recovery links |
no_results_suggested_queries | list of { label, query } chips shown when there are no matches |
no_results_actions | list of { label, url, description } recovery links shown when there are no matches |
overlay_title | heading shown in the quick-search overlay |
overlay_text | supporting copy in the quick-search overlay |
overlay_placeholder | overlay input placeholder |
overlay_empty_text | zero-state copy shown before a search runs |
overlay_loading_text | overlay loading message |
overlay_no_results_text | overlay empty-results message |
overlay_view_all_text | CTA label that opens the full search page |
overlay_close_label | accessible label for closing the overlay |
overlay_shortcut_text | helper text for keyboard shortcuts |
overlay_suggested_queries_label | heading above the overlay suggestion chips |
overlay_quick_links_label | heading above the overlay quick links |
overlay_recovery_label | heading above the overlay no-results actions |
overlay_suggested_queries | list of { label, query } suggestion chips |
overlay_quick_links | list of { label, url, description } links shown in zero state |
overlay_no_results_actions | list of { label, url, description } recovery actions |
Discovery metadata
Search and future discovery blocks resolve page metadata through the shared
partial "foundry/helpers/discovery-model.html" helper.
Preferred front matter:
search:
exclude: false
kind: article
section: blog
topics: [neurotoxin]
audience: [men]
series: []
featured: false
order: 0
summary: ""
image: ""
image_alt: ""
Backward-compatible aliases still supported by the resolver:
search_exclude->search.excludesearch_section->search.sectionaudience->search.audiencefeatured->search.featuredfeatured_image/image/og_image->search.image- page or param description/summary ->
search.summary
Current Pagefind emission uses the normalized model for:
kindtopicaudienceseriessectioncategoryauthortaglanguage
URL state
The search block hydrates from shared URL parameters on load:
q=<query>- repeated
filter.kind=<slug> - repeated
filter.topic=<slug> - repeated
filter.audience=<slug> - repeated
filter.series=<slug> - optional
sort=<value>
If the page loads with filters but no q, Foundry runs a filter-only Pagefind query so
filtered discovery links can land on a meaningful result set.
Filter controls use design.filter_fields and pull option labels from
data/foundry/discovery.yaml when that registry is available.
If design.primary_filter_field matches one of those fields, Foundry renders it as a
primary tab bar and keeps the remaining filters in the secondary control row.
If design.overlay_enabled is true, Foundry uses the localized search block content as
the source for the global quick-search overlay triggered from the shared search button,
/, or Cmd/Ctrl+K.
The overlay supports keyboard focus trapping, arrow-key result navigation, and a
mobile-first sheet layout while preserving the normal /search/ link as the no-JS
fallback.
BEM classes
foundry-searchfoundry-search__appfoundry-search__eyebrowfoundry-search__innerfoundry-search__mountfoundry-search__noscriptfoundry-search__panelfoundry-search__statusfoundry-search__textfoundry-search__title
Optional component tokens
Themes can skin the shared search UI without selector overrides by setting optional --foundry-search-* tokens. The most useful ones are:
--foundry-search-panel-bg--foundry-search-panel-shadow--foundry-search-input-border--foundry-search-input-bg--foundry-search-clear-border--foundry-search-clear-bg--foundry-search-filter-label-color--foundry-search-filter-border--foundry-search-filter-bg--foundry-search-filter-color--foundry-search-filter-focus-border--foundry-search-filter-focus-ring--foundry-search-reset-color--foundry-search-reset-hover-color--foundry-search-tabbar-label-color--foundry-search-tab-bg--foundry-search-tab-border--foundry-search-tab-color--foundry-search-tab-active-bg--foundry-search-tab-active-border--foundry-search-tab-active-color--foundry-search-summary-border--foundry-search-summary-bg--foundry-search-summary-chip-bg--foundry-search-summary-chip-border--foundry-search-summary-chip-color--foundry-search-summary-clear-color--foundry-search-summary-clear-hover-color--foundry-search-overlay-backdrop--foundry-search-overlay-surface--foundry-search-overlay-border--foundry-search-overlay-shadow--foundry-search-overlay-chip-bg--foundry-search-overlay-chip-border--foundry-search-overlay-chip-color--foundry-search-overlay-link-bg--foundry-search-overlay-link-border--foundry-search-overlay-link-hover-border--foundry-search-overlay-link-shadow--foundry-search-card-radius--foundry-search-card-border--foundry-search-card-bg--foundry-search-card-shadow--foundry-search-card-hover-shadow--foundry-search-media-border--foundry-search-pill-bg--foundry-search-pill-color--foundry-search-title-hover--foundry-search-tag-bg--foundry-search-tag-color
All of these fall back to the global --foundry-* tokens if they are not set by a theme.
section-header
Minimum required: title — everything else is optional.
Reusable heading intro block used to start a section consistently.
sections:
- block: section-header
id: section-header-example
content:
cta:
text: Learn more
url: "/contact/"
eyebrow: Section label
text: Example supporting text.
title: Example title
design:
align: center
size: lg
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
align | center | left — heading alignment |
size | sm | md | lg | xl — heading scale |
css_class | extra CSS classes on outer section |
BEM classes
foundry-section-headerfoundry-section-header__ctafoundry-section-header__eyebrowfoundry-section-header__innerfoundry-section-header__textfoundry-section-header__title
slideshow
Minimum required: slides — everything else is optional.
Auto-advancing slideshow/carousel with optional overlays and controls.
sections:
- block: slideshow
id: slideshow-example
content:
slides:
- src: "/images/slide-1.jpg"
alt: Slide image
title: Slide title
text: Slide copy
text: Example supporting text.
title: Example title
design:
variant: fade
aspect: '16:9'
autoplay: true
interval: 5000
show_dots: true
show_arrows: true
show_overlay: true
css_class: ''
Design options
| Field | Details |
|---|---|
variants | fade, slide, cards |
variant | fade | slide | cards — transition style |
aspect | 16:9 | 4:3 | 21:9 | auto — viewport ratio |
autoplay | true | false — auto-advance slides |
interval | milliseconds between slide advances (default: 5000) |
show_dots | true | false — dot navigation visibility |
show_arrows | true | false — arrow navigation visibility |
show_overlay | true | false — caption overlay visibility |
css_class | extra CSS classes on outer section |
BEM classes
foundry-slideshowfoundry-slideshow__arrowfoundry-slideshow__arrow--nextfoundry-slideshow__arrow--prevfoundry-slideshow__dotfoundry-slideshow__dotsfoundry-slideshow__emptyfoundry-slideshow__framesfoundry-slideshow__innerfoundry-slideshow__overlayfoundry-slideshow__slidefoundry-slideshow__stackfoundry-slideshow__subtitlefoundry-slideshow__titlefoundry-slideshow__trackfoundry-slideshow__viewport
social-preview-grid
Minimum required: one of items or items_data.
Static-first grid for normalized Social & Presence items.
sections:
- block: social-preview-grid
id: social-preview-grid-example
content:
title: Recent studio activity
text: Selected updates from public channels and site-owned media.
items:
- id: studio-process-2026-05
source_mode: curated
platform: instagram
kind: image
title: Studio process
caption: A short editor-owned caption.
published_at: 2026-05-18
permalink: https://www.instagram.com/p/example/
media:
- src: /images/social/studio-process.jpg
type: image
alt: Artist preparing wax work in the studio.
rights: client-owned-or-permitted
design:
variant: cards
columns: 3
aspect: square
sort: manual
privacy_mode: click-to-load
css_class: ''
items_data resolves a dot path under site.Data, such as
presence.studio-rss. The resolved value may be a list of items or a collection
object with an items array.
The block supports curated, embed, static-import, and api source modes
only as normalized static items. Provider API calls, OAuth, scheduled sync, and
media downloading are outside this block.
Design options
| Field | Details |
|---|---|
variants | cards, compact, editorial |
variant | cards | compact | editorial - card grid presentation |
columns | 2 | 3 | 4 - desktop grid columns |
aspect | square | landscape | portrait | auto - media thumbnail ratio |
sort | manual | newest | featured - item ordering |
limit | number of items to render; 0 renders all |
privacy_mode | click-to-load | inline | link-only - third-party embed behavior |
show_platform | true | false - show platform label |
show_date | true | false - show published date |
show_caption | true | false - show item caption |
show_source_mode | true | false - show source mode badge |
css_class | extra CSS classes on outer section |
BEM classes
foundry-social-preview-gridfoundry-social-preview-grid__bodyfoundry-social-preview-grid__captionfoundry-social-preview-grid__embedfoundry-social-preview-grid__embed-framefoundry-social-preview-grid__embed-loaderfoundry-social-preview-grid__emptyfoundry-social-preview-grid__gridfoundry-social-preview-grid__imagefoundry-social-preview-grid__innerfoundry-social-preview-grid__itemfoundry-social-preview-grid__item-titlefoundry-social-preview-grid__linkfoundry-social-preview-grid__mediafoundry-social-preview-grid__metafoundry-social-preview-grid__placeholderfoundry-social-preview-grid__textfoundry-social-preview-grid__titlefoundry-social-preview-grid__video
social-share
Minimum required: platforms — everything else is optional.
Share controls for social and copy-link actions.
sections:
- block: social-share
id: social-share-example
content:
platforms:
- twitter
- linkedin
- email
title: Example title
design:
variant: buttons
css_class: ''
Design options
| Field | Details |
|---|---|
variants | buttons, icons, minimal |
variant | buttons | icons | minimal — share control style |
css_class | extra CSS classes on outer section |
BEM classes
foundry-social-sharefoundry-social-share__buttonfoundry-social-share__button--copyfoundry-social-share__innerfoundry-social-share__listfoundry-social-share__statusfoundry-social-share__title
stats-band
Minimum required: stats — everything else is optional.
Horizontal KPI/statistics band with palette variants.
sections:
- block: stats-band
id: stats-band-example
content:
stats:
- label: Metric
value: 95%
subtitle: Example value
title: Example title
design:
variant: dark
css_class: ''
Design options
| Field | Details |
|---|---|
variants | dark, light, brand |
variant | dark | light | brand — band palette |
css_class | extra CSS classes on outer section |
BEM classes
foundry-stats-bandfoundry-stats-band--brandfoundry-stats-band--darkfoundry-stats-band--lightfoundry-stats-band__gridfoundry-stats-band__innerfoundry-stats-band__itemfoundry-stats-band__labelfoundry-stats-band__subtitlefoundry-stats-band__titlefoundry-stats-band__value
stats-grid
Minimum required: stats — everything else is optional.
Grid-based statistics block for grouped numeric highlights.
sections:
- block: stats-grid
id: stats-grid-example
content:
stats:
- label: Metric
value: 95%
subtitle: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | grid, band, highlighted |
variant | grid | band | highlighted — grid: 4-col centered cards (default); band: horizontal inline row, no card wrappers; highlighted: brand-accent colored cards |
css_class | extra CSS classes on outer section |
BEM classes
foundry-stats-gridfoundry-stats-grid__gridfoundry-stats-grid__innerfoundry-stats-grid__itemfoundry-stats-grid__labelfoundry-stats-grid__titlefoundry-stats-grid__value
steps
Minimum required: steps — everything else is optional.
Step-by-step process block with numbered or icon-based steps. Generated number badges and Step N footers automatically hide when a title already starts with the matching step number.
sections:
- block: steps
id: steps-example
content:
steps:
- title: Step title
text: Step detail.
subtitle: Example value
title: Example title
design:
variant: cards
columns: '3'
show_icons: true
show_marker: auto
show_meta: auto
css_class: ''
Design options
| Field | Details |
|---|---|
variants | cards, plain, numbered |
variant | cards | plain | numbered — cards: card per step (default); plain: no card background; numbered: large editorial step number above text, no badge circle |
columns | 2 | 3 | 4 — grid columns |
show_icons | true | false — use step icon instead of numbers |
show_marker | auto | true | false — control the generated badge; auto hides it when the title already includes the matching number |
show_meta | auto | true | false — control the generated Step N footer; auto hides it when the title already includes the matching number |
css_class | extra CSS classes on outer section |
BEM classes
foundry-stepsfoundry-steps__contentfoundry-steps__gridfoundry-steps__innerfoundry-steps__itemfoundry-steps__item-innerfoundry-steps__item-metafoundry-steps__item-textfoundry-steps__item-titlefoundry-steps__numberfoundry-steps__subtitlefoundry-steps__title
table-of-contents
Minimum required: (none) — everything else is optional.
Manual or auto-generated anchor navigation block for long pages. Use
chapter-index when the TOC is serving as a governed editorial chapter index.
sections:
- block: table-of-contents
id: table-of-contents-example
content:
title: Example title
design:
preset: creative-chapter-index
variant: chapter-index
depth: 3
numbered: true
mobile: compact
progress: true
sticky: true
css_class: ''
Sidebar and chapter-index modes include active-section tracking,
completed-state styling hooks, a progress rail, and compact mobile behavior by
default. The widget also respects the shared header offset so anchor jumps land
below fixed headers.
Creative work-detail starters use the creative-chapter-index preset, which
aliases the governed chapter-index configuration for Creative pages.
Design options
| Field | Details |
|---|---|
variants | sidebar, inline, compact, chapter-index |
variant | sidebar | inline | compact | chapter-index — TOC container style |
depth | 2 | 3 — heading depth when auto-generating |
numbered | true | false — ordered list vs unordered list |
mobile | compact | expanded — compact sticky mobile toggle vs always-open list |
progress | true | false — show the scroll progress rail inside the widget |
sticky | true | false — keep the widget pinned on larger viewports |
css_class | extra CSS classes on outer section |
BEM classes
foundry-table-of-contentsfoundry-table-of-contents__autofoundry-table-of-contents__currentfoundry-table-of-contents__headfoundry-table-of-contents__innerfoundry-table-of-contents__itemfoundry-table-of-contents__linkfoundry-table-of-contents__listfoundry-table-of-contents__panelfoundry-table-of-contents__progressfoundry-table-of-contents__titlefoundry-table-of-contents__togglefoundry-table-of-contents__widgetfoundry-table-of-contents__widget--chapter-index
tabs
Minimum required: tabs — everything else is optional.
Tabbed content block for switching between related panels.
sections:
- block: tabs
id: tabs-example
content:
tabs:
- label: Overview
text: Tab content.
title: Example title
design:
variant: underline
css_class: ''
Design options
| Field | Details |
|---|---|
variants | underline, pills, bordered |
variant | underline | pills | bordered — tab trigger style |
css_class | extra CSS classes on outer section |
BEM classes
foundry-tabsfoundry-tabs__controlsfoundry-tabs__emptyfoundry-tabs__innerfoundry-tabs__panelfoundry-tabs__panelsfoundry-tabs__tabfoundry-tabs__tablistfoundry-tabs__title
team-grid
Minimum required: members — everything else is optional.
Team member grid block with role and bio summaries.
sections:
- block: team-grid
id: team-grid-example
content:
members: Example value
subtitle: Example value
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | grid, compact, list |
variant | grid | compact | list — grid: 3-col cards with bio (default); compact: 4-col, no bio, photo+name+role; list: horizontal rows, photo left + full bio |
css_class | extra CSS classes on outer section |
BEM classes
foundry-team-gridfoundry-team-grid__cardfoundry-team-grid__gridfoundry-team-grid__innerfoundry-team-grid__namefoundry-team-grid__rolefoundry-team-grid__title
testimonials
Minimum required: testimonials — everything else is optional.
Static testimonial grid block for social proof.
sections:
- block: testimonials
id: testimonials-example
content:
subtitle: Example value
testimonials:
- quote: Strong result quote.
author: Client Name
rating: 5
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | grid, featured, stacked |
variant | grid | featured | stacked — grid: 3-col card grid (default); featured: first quote large + 2-col supporting; stacked: single centered column |
css_class | extra CSS classes on outer section |
BEM classes
foundry-testimonialsfoundry-testimonials__authorfoundry-testimonials__featuredfoundry-testimonials__gridfoundry-testimonials__innerfoundry-testimonials__itemfoundry-testimonials__quotefoundry-testimonials__stackfoundry-testimonials__title
testimonials-carousel
Minimum required: testimonials — everything else is optional.
Scrollable testimonial carousel for longer quote sets.
sections:
- block: testimonials-carousel
id: testimonials-carousel-example
content:
subtitle: Example value
testimonials:
- quote: Strong result quote.
author: Client Name
rating: 5
title: Example title
design:
variant: cards
show_rating: true
show_icons: true
css_class: ''
Design options
| Field | Details |
|---|---|
variants | cards, spotlight, compact |
variant | cards | spotlight | compact — cards: even scrolling cards; spotlight: first testimonial gets stronger emphasis; compact: denser quote strip |
show_rating | true | false — show rating stars when rating is provided |
show_icons | true | false — show quote icon badge |
css_class | extra CSS classes on outer section |
BEM classes
foundry-testimonials-carouselfoundry-testimonials-carousel__authorfoundry-testimonials-carousel__iconfoundry-testimonials-carousel__icon-wrapfoundry-testimonials-carousel__innerfoundry-testimonials-carousel__itemfoundry-testimonials-carousel__metafoundry-testimonials-carousel__quotefoundry-testimonials-carousel__ratingfoundry-testimonials-carousel__rolefoundry-testimonials-carousel__subtitlefoundry-testimonials-carousel__titlefoundry-testimonials-carousel__track
timeline
Minimum required: events — everything else is optional.
Chronological timeline block for milestones and sequences.
sections:
- block: timeline
id: timeline-example
content:
title: Example title
subtitle: Example value
events:
- date: June 2026
title: Exhibition title
text: Venue, City. Short context.
badge: Upcoming
url: https://example.com
design:
preset: creative-exhibition-spine
variant: compact
css_class: ''
Creative exhibitions and events pages use the creative-exhibition-spine preset
for a compact editorial timeline instead of card stacking.
Content options
| Field | Details |
|---|---|
events[].date | event date or display range |
events[].title | event, exhibition, screening, launch, or talk title |
events[].text | venue, location, or short event context |
events[].badge | optional status label such as Upcoming, Recent, or Archive |
events[].url | optional event detail URL |
Design options
| Field | Details |
|---|---|
variants | vertical, cards, compact |
variant | vertical | cards | compact — vertical: left-border spine (default); cards: standalone card grid, no spine; compact: tighter spine for long lists |
css_class | extra CSS classes on outer section |
BEM classes
foundry-timelinefoundry-timeline--cardsfoundry-timeline--compactfoundry-timeline--verticalfoundry-timeline__contentfoundry-timeline__innerfoundry-timeline__itemfoundry-timeline__listfoundry-timeline__markerfoundry-timeline__title
topic-chip-nav
Minimum required: items — everything else is optional.
Topic chip navigation block for quick in-page or inter-page filtering.
sections:
- block: topic-chip-nav
id: topic-chip-nav-example
content:
items:
- title: Item title
text: Item description.
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-topic-chip-navfoundry-topic-chip-nav__chipfoundry-topic-chip-nav__innerfoundry-topic-chip-nav__listfoundry-topic-chip-nav__title
trust-badges
Minimum required: items — everything else is optional.
Badge strip for compliance, trust, and credibility signals.
sections:
- block: trust-badges
id: trust-badges-example
content:
items:
- title: Item title
text: Item description.
title: Example title
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variant | chips | logos | list — chips: flex-wrap badge chips (default); logos: image-first grayscale tiles (uses items[].image); list: vertical checkmark list for certifications |
css_class | extra CSS classes on outer section |
BEM classes
foundry-trust-badgesfoundry-trust-badges__gridfoundry-trust-badges__innerfoundry-trust-badges__itemfoundry-trust-badges__listfoundry-trust-badges__logofoundry-trust-badges__title
video-embed
Minimum required: url — everything else is optional.
Privacy-first video embed block supporting YouTube, Vimeo, and MP4.
sections:
- block: video-embed
id: video-embed-example
content:
caption: Optional caption text.
poster: "/images/example.jpg"
text: Example supporting text.
title: Example title
transcript: Transcript excerpt goes here.
url: https://example.com
design:
variant: standard
aspect: '16:9'
autoplay: true
css_class: ''
Design options
| Field | Details |
|---|---|
variants | standard, cinema, card |
variant | standard | cinema | card — video frame presentation |
aspect | 16:9 | 4:3 | 1:1 | 9:16 — embed ratio |
autoplay | true | false — autoplay for self-hosted video |
css_class | extra CSS classes on outer section |
BEM classes
foundry-video-embedfoundry-video-embed__captionfoundry-video-embed__emptyfoundry-video-embed__figurefoundry-video-embed__framefoundry-video-embed__iframefoundry-video-embed__innerfoundry-video-embed__playfoundry-video-embed__posterfoundry-video-embed__poster-placeholderfoundry-video-embed__shellfoundry-video-embed__subtitlefoundry-video-embed__titlefoundry-video-embed__transcript
video-hero
Minimum required: title, text — everything else is optional.
Hero block with video/media backdrop treatment.
sections:
- block: video-hero
id: video-hero-example
content:
bullets: Example value
eyebrow: Section label
image: "/images/example.jpg"
image_alt: Descriptive alt text
primary_action:
text: Learn more
url: "/contact/"
secondary_action:
text: Learn more
url: "/contact/"
text: Example supporting text.
title: Example title
video_caption: Example value
video_poster: Example value
video_url: Example value
design:
css_class: ''
Design options
| Field | Details |
|---|---|
variants | None (single style) |
css_class | extra CSS classes on outer section |
BEM classes
foundry-video-herofoundry-video-hero__actionsfoundry-video-hero__innerfoundry-video-hero__mediafoundry-video-hero__overlayfoundry-video-hero__textfoundry-video-hero__title
full-bleed-split
Minimum required: title, text — everything else is optional.
Cinematic editorial split layout with full-height media and structured narrative content.
sections:
- block: full-bleed-split
id: full-bleed-example
content:
eyebrow: The property
title: One house. Nothing held back.
text: A narrative section pairing full-bleed imagery with editorial copy.
items:
- Indoor hot tub porch
- Sauna and cold shower
image: /images/property-detail.jpg
image_alt: Property detail image
primary_action:
text: Explore spaces
url: /property/
design:
image_position: right
bg: light
parallax: true
parallax_speed: '0.2'
parallax_dir: '-1'
kenburns: true
kenburns_interval: '8000'
reveal: slide-left
css_class: ''
Design options
| Field | Details |
|---|---|
variants | (none) |
image_position | right | left — image column position |
min_height | 80vh | 100vh | 70vh — section minimum height |
bg | light | dark | stone | cream — section palette |
parallax | true | false — enable/disable image parallax |
parallax_speed | number string — parallax speed (default: 0.2) |
parallax_dir | 1 | -1 — parallax direction |
kenburns | true | false — enable/disable image Ken Burns |
kenburns_interval | milliseconds for multi-image crossfade |
reveal | slide-right | slide-left | fade-up | fade-in — text reveal style |
css_class | extra CSS classes on outer section |
BEM classes
foundry-full-bleed-split
motion-hero
Minimum required: title - everything else is optional.
Full-screen motion-forward hero showcasing reveal, parallax, and Ken Burns engines in one section.
sections:
- block: motion-hero
id: motion-hero-example
content:
eyebrow: Foundry motion toolkit
title: Scroll-native motion, zero dependencies.
text: Demonstrates layered parallax and optional Ken Burns image cycling.
background_images:
- /images/motion-hero-1.jpg
- /images/motion-hero-2.jpg
primary_action:
text: See live demos
url: /motion/
secondary_action:
text: View reference
url: /docs/
design:
parallax: true
parallax_speed: '0.25'
parallax_dir: up
parallax_front_speed: '0.45'
parallax_front_dir: '-1'
kenburns: true
kenburns_preset: in
kenburns_interval: '6000'
kenburns_transition: '1400'
scroll_cue: true
show_badges: true
overlay_strength: current
overlay_tone: current
content_align: center
min_height: screen
scroll_nudge: true
badge_style: engine
Use the additive visual controls when a site needs theme-safe presentation tuning without forking the block partial:
sections:
- block: motion-hero
content:
title: Cinematic without a local fork
text: Left-aligned copy, neutral overlay, safe crop controls, and proof badges using the same motion runtime.
caption: Studio image sequence, cropped safely on mobile.
badges:
- label: Proof badge
- label: Brand-safe
design:
overlay_strength: medium
overlay_tone: neutral
overlay_shape: left
object_position: center center
mobile_object_position: center top
content_align: left
content_position: lower
content_width: narrow
content_panel: glass
action_style: glass
min_height: large
mobile_min_height: compact
scroll_cue: false
badge_style: proof
badge_position: under-copy
caption_position: bottom-right
ambient_layers: false
Design options
| Field | Details |
|---|---|
variants | (none) |
parallax | true | false | {speed 0.0-0.35} — enable/disable background parallax layers |
parallax_speed | 0.0-0.35 — normalized background parallax speed; compatibility alias for parallax_back_speed (default: 0.25) |
parallax_dir | up | down | 1 | -1 — normalized background parallax direction (default: up) |
kenburns | true | false - enable/disable Ken Burns background cycling |
kenburns_preset | in | out | in-left | in-right | out-left | out-right — default Ken Burns preset for images without item presets |
scroll_cue | true | false — show/hide reduced-motion-safe scroll cue; compatibility alias for scroll_nudge |
show_badges | true | false - show/hide badge row |
overlay_strength | current | none | soft | medium | strong - overlay shade strength; current preserves legacy output |
overlay_tone | current | neutral | warm | cool | brand - overlay color mood |
overlay_shape | full | left | right | bottom - directional scrim shape for readable copy over busy media |
object_position | CSS object-position value for background images without item-level position (default: center center) |
mobile_object_position | CSS object-position override for small screens |
content_align | center | left | right - hero copy and action alignment |
content_position | center | upper | lower - vertical copy placement |
content_width | narrow | standard | wide - copy measure and action row width |
content_panel | none | glass | solid - optional readability panel behind copy |
action_style | solid | glass | minimal - CTA treatment |
badge_position | bottom | under-copy - badge row placement |
caption_position | bottom-right | bottom-left | under-copy - optional content.caption/media_caption placement |
ambient_layers | true | false - toggle decorative parallax ambient layers independently from media parallax |
min_height | screen | large | medium - hero minimum height |
mobile_min_height | screen | large | medium | compact | CSS length - optional small-screen minimum height override |
scroll_nudge | true | false - compatibility alias for scroll_cue |
badge_style | engine | proof | none - engine demo badges, content proof badges, or no badge row |
parallax_back_speed | number string - compatibility alias for parallax_speed |
parallax_front_speed | number string - foreground parallax speed (default: 0.45) |
parallax_front_dir | 1 | -1 - foreground parallax direction |
kenburns_interval | milliseconds between background image crossfades (default: 6000) |
kenburns_transition | milliseconds for crossfade duration between images (default: 1400) |
BEM classes
foundry-motion-herofoundry-motion-hero__contentfoundry-motion-hero__imagefoundry-motion-hero__badgesfoundry-motion-hero__captionfoundry-motion-hero__scrollfoundry-scroll-cue
property-amenities
Minimum required: title, plus one of signature_items or signature_items_data, one of categories or categories_data, and one of included_items or included_items_data.
Editorial property-amenity showcase with signature cards, pill-nav panels on desktop,
and stacked/accordion panels on mobile.
sections:
- block: property-amenities
id: property-amenities-example
content:
eyebrow: Everything included
title: The version guests can scan in 30 seconds.
text: Surface the signature perks first, then group the room and utility details by category.
signature_items:
- badge: Wellness suite
title: Recovery rituals built into the stay.
text: Hot tub, sauna, and cold-plunge access without leaving the house.
image: /images/property/hot-tub.jpg
image_alt: Glass-enclosed wellness patio
icon: sparkles
categories:
- label: Gather & Cook
title: A real kitchen and places to use it.
text: Group the rooms together instead of repeating a long amenity dump.
image: /images/property/kitchen.jpg
image_alt: Kitchen and dining area
icon: fire
items:
- Full kitchen with range, oven, dishwasher, cookware, and utensils
- Dining table sized for the full group
- Living room or hearth space connected to the kitchen
included_items:
- High-speed WiFi
- Fresh linens and bath towels
- Parking on the property
design:
variant: editorial
nav_style: pills
css_class: ''
Design options
| Field | Details |
|---|---|
variants | editorial |
variant | editorial — signature-card and grouped-panel presentation |
nav_style | pills — desktop category trigger style |
css_class | extra CSS classes on outer section |
Notes
signature_itemsshould normally contain 3-6 cards.- Use
signature_items_data,categories_data, andincluded_items_datawhen the same amenity story needs to stay aligned across a retreat page, photo-tour page, and downstream proof fixture. categoriesshould normally contain 3-5 grouped panels.categories[].itemsmay be either simple strings or objects withtitleandtext.- When a category lacks dedicated photography, omit
imageand provideicon; the block will render support art instead.
Shared-data example
sections:
- block: property-amenities
content:
title: Shared amenity story
signature_items_data: "property.retreat.signature_items"
categories_data: "property.retreat.categories"
included_items_data: "property.retreat.included_items"
BEM classes
foundry-property-amenitiesfoundry-property-amenities__innerfoundry-property-amenities__signature-gridfoundry-property-amenities__signature-cardfoundry-property-amenities__controlsfoundry-property-amenities__tabfoundry-property-amenities__panelfoundry-property-amenities__mobile-stackfoundry-property-amenities__included
property-photo-tour
Minimum required: title, plus one of categories or categories_data.
Category-driven property photo tour with room-type tabs on desktop and stacked sections on mobile.
sections:
- block: property-photo-tour
id: property-photo-tour-example
content:
eyebrow: Photo tour
title: Let guests browse the stay by space.
text: Group photos by room type and keep each category curated instead of dumping every image onto the page.
categories:
- label: Arrival & Exterior
title: Start with the outside impression.
text: Orient the guest before they get into the room details.
icon: home
items:
- Front facade and arrival sequence
- Exterior angles that prove privacy and setting
images:
- url: /images/property/exterior-01.jpg
alt: Front facade at golden hour
caption: Arrival view.
- url: /images/property/exterior-02.jpg
alt: Exterior side angle
caption: Exterior angle.
- label: Living Spaces
title: Shared rooms first.
text: Show the rooms people use together before the support spaces.
icon: fire
items:
- Living room wide shot
- Kitchen usability angle
- Dining view that shows scale
images:
- url: /images/property/living-01.jpg
alt: Living room with fireplace
caption: Main living area.
- url: /images/property/kitchen-01.jpg
alt: Kitchen and dining area
caption: Kitchen and dining.
categories_data: "site.property.photo_tour"
design:
variant: editorial
nav_style: pills
css_class: ''
Design options
| Field | Details |
|---|---|
variants | editorial |
variant | editorial — grouped photo tour with featured image and supporting grid |
nav_style | pills — desktop category trigger style |
css_class | extra CSS classes on outer section |
Notes
categoriesshould normally contain 4-7 groups.- Use
categories_datawhen the same photo-tour structure should power a full tour page and smaller previews elsewhere. categories[].imagesshould be curated, not exhaustive; 3-6 strong photos per group usually reads best.- Use room types or meaningful visual groupings, not arbitrary upload order.
- Keep narrative selling copy on the property page and use this block for visual proof.
limitcan trim the number of categories when you want a shorter preview from the same shared source.
BEM classes
foundry-property-photo-tourfoundry-property-photo-tour__innerfoundry-property-photo-tour__controlsfoundry-property-photo-tour__tabfoundry-property-photo-tour__panelfoundry-property-photo-tour__featuredfoundry-property-photo-tour__thumb-gridfoundry-property-photo-tour__mobile-stackfoundry-property-photo-tour__dialog
property-cards
Minimum required: properties — everything else is optional.
Card grid for property/space highlights with optional featured card treatment.
sections:
- block: property-cards
id: property-cards-example
content:
eyebrow: Signature spaces
title: Rooms and amenities worth the stay.
text: Showcase interiors, wellness features, and outdoor living.
properties:
- name: Indoor hot tub porch
label: Wellness
description: Enclosed glass porch with all-season hot tub views.
image: /images/hot-tub.jpg
beds: 2 bedrooms + additional sleeping
size: 4 private acres
price: Extended stay from $X / month
url: /property/
featured: true
- name: Sauna suite
label: Recovery
description: Sauna, full shower, and cold bucket ritual.
image: /images/sauna.jpg
url: /property/
design:
columns: '3'
variant: cards
item_reveal: zoom-in
css_class: ''
Design options
| Field | Details |
|---|---|
variants | cards, editorial |
variant | cards | editorial — listing presentation |
columns | 2 | 3 — grid columns |
item_reveal | fade-up | zoom-in | fade-in — per-card reveal animation |
css_class | extra CSS classes on outer section |
BEM classes
foundry-property-cardsfoundry-property-cards__innerfoundry-property-cards__eyebrowfoundry-property-cards__titlefoundry-property-cards__textfoundry-property-cards__grid
property-hero
Minimum required: title — everything else is optional.
Cinematic property hero with optional video background, Ken Burns imagery, and estate stats strip.
sections:
- block: property-hero
id: property-hero-example
content:
eyebrow: property proof site · Pennsylvania
title: Away from the noise. Everything you need.
subtitle: First Light
text: A private house on four acres with indoor hot tub and sauna suite.
images:
- /images/hero-1.jpg
- /images/hero-2.jpg
- /images/hero-3.jpg
primary_action:
text: Explore First Light
url: /property/
secondary_action:
text: Plan your stay
url: /inquire/
stat_1_value: 4 Acres
stat_1_label: Private setting
stat_2_value: 2 Weeks+
stat_2_label: Minimum stay
stat_3_value: 8-10
stat_3_label: Guests
design:
overlay: deep
parallax: true
parallax_speed: '0.35'
parallax_dir: up
kenburns: true
kenburns_preset: in
kenburns_interval: '5000'
kenburns_transition: '1400'
text_align: left
min_height: 100vh
scroll_cue: true
Design options
| Field | Details |
|---|---|
variants | (none) |
overlay | dark | light | deep | warm — hero overlay treatment |
parallax | true | false | {speed 0.0-0.35} — enable/disable background parallax |
parallax_speed | 0.0-0.35 — parallax speed (default: 0.35) |
parallax_dir | up | down | 1 | -1 — parallax direction (default: up) |
kenburns | true | false — enable/disable Ken Burns motion |
kenburns_preset | in | out | in-left | in-right | out-left | out-right — default Ken Burns preset for images without item presets |
kenburns_interval | milliseconds for multi-image crossfade (default: 6000) |
kenburns_transition | milliseconds for crossfade duration between images (default: 1400) |
text_align | left | center — content alignment |
min_height | 100vh | 80vh | 70vh — section minimum height |
scroll_cue | true | false — show/hide reduced-motion-safe scroll cue |
show_scroll | true | false — compatibility alias for scroll_cue |
BEM classes
foundry-property-herofoundry-property-hero__scrollfoundry-scroll-cue
Creating a new block
- Copy
layouts/partials/blocks/_template.htmltolayouts/partials/blocks/[block-name].html. - Replace placeholders and implement the block using standard context extraction and BEM classes.
- Register the block in
data/foundry/block-registry.yaml. - Document variants/design fields in
data/foundry/block-options.yaml. - Add usage examples in
/docs/BLOCKS.mdand your demo content. - If motion is needed, use
data-motion-*attributes and keep reduced-motion behavior safe.
Feature flags
Feature flags are resolved by foundry/helpers/feature-flag.html.
| Flag | Default(s) in templates | Blocks using it |
|---|---|---|
animations | true | stats-band |
experimentalHero | false | hero |
uiCards | true | case-studies, certification-badges, cta, faq-cta, features, icon-grid, illustration-panel, pricing-comparison, pricing-tiers, resource-downloads, stats-grid, steps, testimonials, testimonials-carousel, trust-badges |