Current documentation Bundle v1.1.11 Core v1.1.11 Distribution v0.3.24 Verified 2026-08-30
Release history
Block reference Inspect the shipped block contracts and implementation-side authoring details. current core current site-builderscore-developersai-agents

core · Current reference

Block reference

Inspect the shipped block contracts and implementation-side authoring details.

Applies to v1.1.11

Component pins for v1.1.11
ComponentRoleVersion
coreruntimev1.1.11
theme-shieldthemev0.1.15
docsreferencev0.1.6
distributiontoolingv0.3.24

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 | discovery-cards | divider | embed | faq-accordion | faq-cta | features | founder-profile | full-bleed-split | gallery | guided-discovery | hero | icon-grid | illustration-panel | image-feature | lead-magnet | logo-trust | logos | managed-form | managed-form-panel | 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 | relationship-map | resource-downloads | rich-text | routing-panels | 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:

  1. layouts/partials/framework/render-sections.html iterates sections.
  2. It resolves each block name through Core’s data/foundry/block-registry.yaml, merged with an optional consumer-owned data/foundry/site-block-registry.yaml.
  3. The mapped partial in layouts/partials/blocks/ is rendered with { page, section } context.
  4. The block partial reads content, design, and id, 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: ""

Portable editor contract

data/foundry/block-schemas.json may add an editor object with typed content_fields and design_fields. Foundry v0.1.29 defines this contract for the hero, media-text, gallery, cta, and managed-form golden blocks. Those templates emit matching field-level preview anchors when params.foundry.preview_metadata.enabled is true.

The same block entry may add top-level fields for supported source values that must remain discoverable but are not routine editor controls. This is the canonical supplemental field contract for primitive-first, guided-advanced, derived, operational, invariant, and compatibility values; it is not a second editor projection. Each entry declares its source path, classification, semantic type, widget or inspection representation, rendering behavior, output surfaces, fallback when applicable, preview mapping, and alias relationship. Core validation requires complete supplemental entries. A field remains in the editor projection only when the editor-expansion contract says it is safe for ordinary structured editing.

The current human-control projections also cover steps for ordered Process content, search for functional utility behavior, and the Simple Content wave: section-header, rich-text, quote, and callout. The Proof Content wave adds stats-band, testimonials, and trust-badges; the Answers & Disclosure wave adds accordion and faq-accordion; the Structured Explanation wave adds features and timeline; the Openings & Route Choice wave adds post-hero, coming-soon-hero, media-break, founder-profile, and discovery-cards. See the Portable Authoring Contract for the complete active surface and DC03-S12 Openings And Route Choice Controls for preferred article metadata, launch form, visual pause, profile, route, and Hugo source guidance.

Every typed field in the derived report includes preview.scope: section and a deterministic preview.selector. Select the intended section wrapper first, then query the field selector inside it; querying a suffix selector across the whole page is ambiguous when blocks repeat. See Portable Authoring Contract.

When preview metadata is enabled and the rendered page is embedded, Core also loads its portable field-selection sender. Pointer, Enter, and Space selection emit foundry.preview-selection.v1 to the immediate parent. The sender never persists workflow state; the editor remains responsible for exact source and origin validation plus contract-backed field validation.

Use the derived contract instead of reverse-engineering templates:

foundry authoring-contract --site /path/to/site --json

The report schema is schemas/foundry/authoring-contract.schema.json. The command is read-only. It includes both family catalogs, every block’s section-family chooser memberships, all block variants and normalized design controls, the shared section-flow controls, and portable menu options. A managed editor may consume the report but must keep repo-visible content and configuration as the portable source of truth.

Its editor_expansion matrix covers every public Section Type and prevents a consumer from equating technical block options with finished human Controls. Only complete entries have a verified normal projection; other Sections stay source-editable while their bounded expansion, reusable primitive, or guided advanced experience is completed. See DC03-S7 Editor Expansion Matrix.

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.

FamilyWhy it existsRepresentative blocks
heroes-introsShared 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-hospitalityDedicated property and hospitality storytelling surfaces instead of hiding them inside generic media/layout groups.property-hero, property-amenities, property-photo-tour, property-cards
layout-flowReusable section rhythm and composition-shape controls that belong above any one visual theme.divider, columns, full-bleed-split
search-discoveryShared search, graph journey, and discovery mechanics that should stay framework-owned.search, content-feed, topic-chip-nav, guided-discovery, relationship-map
lists-collectionsReusable collection renderers for posts, pages, and related content.page-list, post-list, related-posts
narrative-editorialText-first editorial and annotation surfaces that go beyond raw markdown output.rich-text, prose-panel, quote, pullquote, callout
navigation-disclosureIn-page wayfinding and controlled-disclosure patterns with predictable shared behavior.content-sidebar-nav, table-of-contents, tabs, accordion, faq-accordion
media-galleryCore 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-highlightsQuick-scan benefit and capability framing distinct from trust, pricing, or CTA surfaces.features, icon-grid, resource-downloads, logo-trust
trust-authorityProof, 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-presenceStatic-first social, channel, and public activity surfaces that do not require provider API access.social-preview-grid
process-dataSequential, temporal, metric, and map-like explanatory surfaces.steps, timeline, onboarding-timeline, stats-band, stats-grid, map-coverage
conversion-ctaShared prompt and next-step surfaces that move a visitor toward action.newsletter-inline, cta, faq-cta, lead-magnet, cta-image-paragraph, cta-button-list, routing-panels
forms-contactContact capture and portable form surfaces with integration implications.managed-form, managed-form-panel, contact-split
pricing-comparisonDecision-support surfaces whose semantics differ from generic feature or card modules.comparison-table, pricing-tiers, pricing-comparison
people-profilesShared person/profile patterns that are not interchangeable with testimonials or logos.author-bio, team-grid, founder-profile
launch-coming-soonA 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.

VariablePurposeBase value
--foundry-bgPage background color.#ffffff
--foundry-borderDefault border color.#e2e8f0
--foundry-border-strongHigh-contrast border color.#cbd5e1
--foundry-brand-accentSecondary accent color.#3b82f6
--foundry-brand-primaryPrimary brand accent used for key UI elements.#0f172a
--foundry-duration-baseBase motion duration token.200ms
--foundry-ease-standardDefault easing curve for transitions.cubic-bezier(0.2, 0, 0, 1)
--foundry-radiusDefault radius token.1rem
--foundry-radius-lgLarge radius token.1.5rem
--foundry-radius-smSmall radius token.0.5rem
--foundry-shadow-mdMedium elevation shadow token.0 4px 12px rgba(0, 0, 0, 0.1)
--foundry-shadow-smSmall elevation shadow token.0 1px 3px rgba(0, 0, 0, 0.1)
--foundry-surfacePrimary surface/card background.#ffffff
--foundry-surface-softSubtle section and muted surface background.#f8fafc
--foundry-textPrimary text color.#0f172a
--foundry-text-mutedSecondary/muted text color.#475569

Motion CSS variables

assets/css/foundry-motion.css defines additional motion-specific tokens.

VariablePurposeDefault
--foundry-motion-distanceDefault reveal translate distance.16px
--foundry-motion-durationResolved animation duration token.var(--foundry-duration-base, 200ms)
--foundry-motion-easeResolved easing curve for reveal transitions.var(--foundry-ease-standard, cubic-bezier(0.2, 0, 0, 1))
--foundry-motion-kb-durationKen Burns animation duration.12s
--foundry-motion-kb-scaleKen Burns target scale value.1.06
--foundry-motion-marquee-pause-stateDefault marquee animation play state.running
--foundry-motion-opacity-startStarting opacity for reveal/stagger items.0
--foundry-motion-parallax-maxMaximum parallax translate clamp (px).80px
--foundry-motion-scale-startStarting scale for zoom reveals.0.98
--foundry-motion-scroll-cue-durationScroll cue animation duration.2000ms
--foundry-motion-scroll-cue-distanceScroll cue bob distance.5px
--foundry-motion-scroll-cue-line-heightScroll cue line height for side cues.3rem
--foundry-motion-scroll-cue-opacityScroll cue default opacity.0.72
--foundry-motion-stagger-stepDelay 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.

AttributeEngineAccepted valuesBehavior
data-motion-kenburnsEngine E: Ken BurnsBoolean attributeEnables image zoom/pan crossfade behavior.
data-motion-kenburns-intervalEngine E: Ken BurnsMilliseconds (default 6000)Sets crossfade interval for multi-image containers.
data-motion-marqueeEngine D: MarqueeBoolean attributeInitializes seamless marquee track cloning and animation.
data-motion-marquee-dirEngine D: Marqueeleft (default), right, up, downControls marquee animation direction.
data-motion-marquee-pauseEngine D: MarqueehoverPauses animation on hover/focus when set to hover.
data-motion-marquee-speedEngine D: MarqueePositive number (px/sec, default 40)Controls marquee travel speed.
data-motion-parallaxEngine B: ParallaxFloat 0.0 to 0.8 (default 0.35)Parallax translateY multiplier, clamped by --foundry-motion-parallax-max.
data-motion-parallax-dirEngine B: Parallaxup/1 (default) or down/-1Controls parallax direction.
data-motion-revealEngine A: Revealfade-up (default), fade-in, slide-left, slide-right, zoom-inApplies entry animation; is-in-view is added by observer.
data-motion-scrubEngine C: ScrubConventionally progressEnables scroll-linked scrub behavior on target element.
data-motion-scrub-propEngine C: Scrubwidth (default), height, scaleX, opacitySelects property controlled by section scroll progress.
data-motion-staggerEngine A: StaggerBoolean attributeApplies 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.

PatternStatusCanonical blocksNotes
media-led-herostablemotion-hero, property-hero, video-heroMedia-led page opening with reveal, parallax, Ken Burns, and optional scroll cue behavior.
pinned-storystablepinned-media-story, media-breakOne deliberate scroll-led chapter story with static reduced-motion fallback.
story-work-reelstablemedia-sequence, slideshow, gallerySelected work or mixed-media sequence; use media-sequence reel variants and presets before adding a new block.
chapter-indexstablecontent-sidebar-nav, table-of-contents, media-sequenceEditorial wayfinding and progress affordance for long creative or journal pages; use chapter-index variants before adding a new block.
proof-marqueestablelogosLow-criticality repeated proof rail; use static variants when motion would reduce clarity.
slideshow-card-stackstableslideshowBlock-local fade, slide, and card-stack transitions with accessible controls.
stats-counter-bandstablestats-bandNumeric counter and optional scrub behavior; values must remain pure numeric strings.
scroll-cuestablemotion-hero, property-heroFirst-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:
- type: accordion
  id: accordion-example
  content:
    title: Supporting detail
    text: Essential information remains visible before these panels.
    items:
    - title: What does this include?
      text: A concise answer using **portable Markdown**.
    - title: Where can I learn more?
      text: See the [complete guidance](/guidance/).
  design:
    variant: bordered
    allow_multiple: false

Design options

FieldDetails
variantsbordered, minimal, cards
variantbordered | minimal | cards — accordion container style
allow_multipletrue | false — allow opening more than one item
css_classextra CSS classes on outer section

BEM classes

  • foundry-accordion
  • foundry-accordion__body
  • foundry-accordion__empty
  • foundry-accordion__inner
  • foundry-accordion__item
  • foundry-accordion__list
  • foundry-accordion__subtitle
  • foundry-accordion__summary
  • foundry-accordion__title

audio-player

Minimum required: url, title — everything else is optional. Use Audio Player when one recording should be played in the page with clear context, optional download, and a transcript. Use a plain resource link when playback adds no value; use Media Sequence or Video Embed when synchronized visuals are part of the evidence.

The normal path starts with an intent preset:

sections:
- block: audio-player
  id: episode-audio
  design:
    preset: episode-feature
  content:
    show: Field Notes
    title: How the work took shape
    url: /audio/field-notes-01.mp3
    transcript: The complete, corrected transcript goes here.

focused-listen is quiet supporting audio, episode-feature gives a primary recording artwork and context, and audio-resource makes listening and download equally visible. Native browser controls are the no-JavaScript floor; the fingerprinted Core controller progressively adds the custom timeline, volume, speed, and status behavior. Authors do not write ARIA, scripts, layout classes, or breakpoint-specific copies.

Design options

FieldDetails
variantscard, minimal, podcast
variantcard | minimal | podcast — audio player presentation
css_classextra CSS classes on outer section

Intent presets: focused-listen, episode-feature, audio-resource.

BEM classes

  • foundry-audio-player
  • foundry-audio-player__assistive
  • foundry-audio-player__content
  • foundry-audio-player__controls
  • foundry-audio-player__cover
  • foundry-audio-player__cover-image
  • foundry-audio-player__cover-letter
  • foundry-audio-player__description
  • foundry-audio-player__download
  • foundry-audio-player__download-icon
  • foundry-audio-player__empty
  • foundry-audio-player__inner
  • foundry-audio-player__icon
  • foundry-audio-player__icon-svg
  • foundry-audio-player__layout
  • foundry-audio-player__meta
  • foundry-audio-player__native
  • foundry-audio-player__primary
  • foundry-audio-player__progress
  • foundry-audio-player__secondary
  • foundry-audio-player__shell
  • foundry-audio-player__show
  • foundry-audio-player__speed
  • foundry-audio-player__speed-label
  • foundry-audio-player__speed-select
  • foundry-audio-player__time
  • foundry-audio-player__timeline
  • foundry-audio-player__title
  • foundry-audio-player__toggle
  • foundry-audio-player__transcript
  • foundry-audio-player__transcript-body
  • foundry-audio-player__transcript-summary
  • foundry-audio-player__volume
  • foundry-audio-player__volume-icon
  • foundry-audio-player__volume-range
  • foundry-audio-player__volume-svg

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

FieldDetails
variantscard, inline, minimal
variantcard | inline | minimal — author module layout
css_classextra CSS classes on outer section

BEM classes

  • foundry-author-bio
  • foundry-author-bio__card
  • foundry-author-bio__empty
  • foundry-author-bio__inner
  • foundry-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:
    title: "What changes after the decision work"
    subtitle: "Use paired states for a real transformation, not decorative contrast."
    before_label: "Starting point"
    after_label: "New direction"
    before:
      title: "Unclear path"
      text: "The visitor sees claims without decision context."
      items: ["Proof arrives late", "Next steps feel premature"]
    after:
      title: "Decision-ready path"
      text: "Context, proof, and action follow a deliberate sequence."
      items: ["Evidence is qualified", "The next step matches readiness"]
  design:
    variant: cards
    treatment: bordered

Design options

FieldDetails
variantcards | 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
treatmentbordered | editorial — bounded panels/table or an open ruled composition
row_labelheader label for the label column in table variant (default: Feature)
before_label, after_labelOptional human-readable state labels; defaults remain Before and After
css_classextra CSS classes on outer section

BEM classes

  • foundry-before-after
  • foundry-before-after__arrow
  • foundry-before-after__inner
  • foundry-before-after__label
  • foundry-before-after__panels
  • foundry-before-after__stack
  • foundry-before-after__table
  • foundry-before-after__title

callout

Minimum required: text — everything else is optional. Use Callout for one concise piece of context, guidance, risk, or confirmation that belongs in the page’s reading flow. The selected type always renders a visible meaning label as well as a matching icon and color, so meaning never depends on color alone. Static warnings intentionally remain ordinary page content rather than live alert regions.

sections:
- block: callout
  id: consultation-context
  content:
    label: Before you book
    title: Bring the products you currently use
    text: We will review active ingredients together so your plan does not duplicate or conflict with your current routine.
    action:
      text: Prepare for the visit
      url: /consultation-guide/
  design:
    preset: useful-context

Intent presets: useful-context for ordinary supporting information, page-alert for a genuine page-wide warning, and editorial-aside for a quiet reading note. editorial-callout remains as a compatible subtle-note preset.

Content fields

FieldDetails
labeloptional visible meaning label; defaults to Information, Tip, Warning, Important, Note, or Success from type
titleoptional short heading that says what visitors need to understand
textrequired portable Markdown message; keep it concise and useful
actionoptional single text and url next step that directly resolves or follows from the message

Design options

FieldDetails
variantinline | banner | subtle — a contained notice, page-width announcement, or typographic editorial aside
typeinfo | tip | warning | danger | note | success — semantic meaning that controls the default visible label, icon, and accent
iconoptional icon override; normally leave blank so the icon follows type
css_classextra CSS classes on outer section

Use Warning and Danger only for real risk. Use a normal heading, Rich Text, or CTA when the goal is merely to make marketing copy louder. Theme Families and Customer Brand Systems may change the public Callout variables, while Core retains the semantic anatomy, responsive behavior, and visible meaning.

BEM classes

  • foundry-callout
  • foundry-callout__action
  • foundry-callout__action-icon
  • foundry-callout__action-link
  • foundry-callout__box
  • foundry-callout__content
  • foundry-callout__icon
  • foundry-callout__icon-symbol
  • foundry-callout__inner
  • foundry-callout__meaning
  • foundry-callout__text
  • foundry-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:
    title: "Representative outcomes"
    subtitle: "Explain the constraint, approach, and supported evidence."
    cases:
      - client_type: "Local service"
        title: "A clearer consultation path"
        problem: "The original page mixed claims and conversion pressure."
        solution: "The new sequence qualified proof before asking for action."
        results: ["Normal Hugo source", "No copied renderer"]
  design:
    variant: editorial

Design options

FieldDetails
variantcards | editorial | spotlight — independent cards, open numbered stories, or one leading case with supporting evidence
subtitleOptional portable Markdown context for interpreting the cases
problem_label, solution_label, results_labelOptional replacements for the visible anatomy labels
revealfade-up | fade-in | slide-left | slide-right | zoom-in | none — hero copy/media reveal style (default: fade-up)
parallaxtrue | false | {speed 0.0-0.35} — enable/disable media-card parallax (default: false)
parallax_speed0.0-0.35 — media-card parallax speed (default: 0.16)
parallax_dirup | down | 1 | -1 — media-card parallax direction (default: up)
kenburnstrue | false — enable/disable Ken Burns image cycling when fallback images are provided
kenburns_presetin | out | in-left | in-right | out-left | out-right — default Ken Burns preset for images without item presets
kenburns_intervalmilliseconds between image crossfades (default: 7200)
kenburns_transitionmilliseconds for crossfade duration between images (default: 1400)
scroll_cuetrue | false — show/hide reduced-motion-safe scroll cue (default: false)
css_classextra CSS classes on outer section

BEM classes

  • foundry-case-studies
  • foundry-case-studies__badge
  • foundry-case-studies__card
  • foundry-case-studies__case-title
  • foundry-case-studies__grid
  • foundry-case-studies__inner
  • foundry-case-studies__result-icon
  • foundry-case-studies__result-item
  • foundry-case-studies__result-text
  • foundry-case-studies__results
  • foundry-case-studies__section
  • foundry-case-studies__section--problem
  • foundry-case-studies__section--results
  • foundry-case-studies__section--solution
  • foundry-case-studies__section-text
  • foundry-case-studies__section-title
  • foundry-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

FieldDetails
variantsNone (single style)
css_classextra CSS classes on outer section

BEM classes

  • foundry-certification-badges
  • foundry-certification-badges__grid
  • foundry-certification-badges__inner
  • foundry-certification-badges__item
  • foundry-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

FieldDetails
variantsprose, feature, stat
variantprose | feature | stat — prose: markdown content (default); feature: icon + heading + text; stat: large value + label
count2 | 3 — column count
gapsm | md | lg — column gap
dividerstrue | false — vertical separators between columns
aligntop | center — vertical alignment of column content
css_classextra CSS classes on outer section

BEM classes

  • foundry-columns
  • foundry-columns__column
  • foundry-columns__empty
  • foundry-columns__grid
  • foundry-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

FieldDetails
variantsNone (single style)
css_classextra CSS classes on outer section

BEM classes

  • foundry-coming-soon-cta
  • foundry-coming-soon-cta__actions
  • foundry-coming-soon-cta__inner
  • foundry-coming-soon-cta__text
  • foundry-coming-soon-cta__title

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

FieldDetails
variantsNone (single style)
css_classextra CSS classes on outer section

BEM classes

  • foundry-coming-soon-footer
  • foundry-coming-soon-footer__brand
  • foundry-coming-soon-footer__copy
  • foundry-coming-soon-footer__inner
  • foundry-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

FieldDetails
variantsNone (single style)
css_classextra CSS classes on outer section

BEM classes

  • foundry-coming-soon-hero
  • foundry-coming-soon-hero__panel
  • foundry-coming-soon-hero__form-panel
  • foundry-coming-soon-hero__form
  • foundry-coming-soon-hero__inner
  • foundry-coming-soon-hero__text
  • foundry-coming-soon-hero__title

coming-soon-trust

Preferred Section source: type: trust-marks with style: launch.

Coming Soon Trust is the launch-reassurance control. It tells a visitor what is ready, what the organization actually promises, and which named relationships support the launch. It must not manufacture credibility from decorative badges. Use Logos for a neutral organization collection, Logo Trust for a verified relationship surface, Trust Badges for mixed ongoing assurances, and the Certifications Style for issued credentials.

At least one accurate fact, assurance, or permissioned logo relationship should be present. eyebrow, title, and introduction establish context. Every fact or assurance may keep a qualification and public source next to the claim. Every logo keeps a visible name and may state its exact relationship; the mark never establishes partnership or endorsement by itself.

sections:
- type: trust-marks
  style: launch
  id: launch-readiness
  design:
    preset: launch-readiness
  content:
    eyebrow: Public launch record
    title: What is ready before the doors open
    introduction: Dates, scope, and information handling are stated plainly.
    facts:
    - value: Sep 2026
      label: Public preview opens
      details: A planned date, qualified until the schedule is final.
      source_url: /launch-details/
    assurances:
    - label: Waitlist email is used only for launch updates
      details: Verify this against the real form, provider, and privacy policy.
      source_url: /privacy/
    logos:
    - name: Example Studio
      relationship: Launch collaborator
      image: /media/example-studio.svg
      image_alt: ''
      url: /launch-details/

Design options

FieldDetails
presetlaunch-readiness, compact-status-rail, or privacy-first-note
variantledger, strip, or note; normally selected by a preset
css_classextra CSS classes on outer section

The three presets are different content structures, not color swaps: launch-readiness balances a public readiness ledger with qualified assurances; compact-status-rail keeps a small fact set concise; and privacy-first-note turns one information boundary into an editorial statement. Legacy block: coming-soon-trust, stats, badges, subtitle, and variant: grid source remains compatible, but new sites should use the typed vocabulary above.

BEM classes

  • foundry-coming-soon-trust
  • foundry-coming-soon-trust__inner
  • foundry-coming-soon-trust__header
  • foundry-coming-soon-trust__eyebrow
  • foundry-coming-soon-trust__title
  • foundry-coming-soon-trust__introduction
  • foundry-coming-soon-trust__evidence
  • foundry-coming-soon-trust__facts
  • foundry-coming-soon-trust__fact
  • foundry-coming-soon-trust__fact-label
  • foundry-coming-soon-trust__fact-value
  • foundry-coming-soon-trust__fact-details
  • foundry-coming-soon-trust__fact-source
  • foundry-coming-soon-trust__assurances
  • foundry-coming-soon-trust__assurance
  • foundry-coming-soon-trust__assurance-label
  • foundry-coming-soon-trust__assurance-details
  • foundry-coming-soon-trust__assurance-source
  • foundry-coming-soon-trust__logos
  • foundry-coming-soon-trust__logo
  • foundry-coming-soon-trust__logo-mark
  • foundry-coming-soon-trust__logo-image
  • foundry-coming-soon-trust__logo-name
  • foundry-coming-soon-trust__logo-relationship
  • foundry-coming-soon-trust__logo-link

comparison-table

Minimum required: rows — everything else is optional. General comparison control for measuring two approaches against the same visitor-centered decision points. Use Pricing Comparison when the columns are priced plans with shared criteria.

sections:
- block: comparison-table
  id: comparison-table-example
  content:
    title: "Compare the decision"
    caption: "Comparison of two approaches"
    headers:
      - label: "Decision point"
      - label: "Evidence-led"
      - label: "Shortcut"
    rows:
      - feature: "Proof"
        ours: "State source, scope, and limitation near the claim."
        typical: "Move context into fine print."
  design:
    variant: editorial

Design options

FieldDetails
variantbordered | editorial | compact — bounded table, open ruled comparison, or denser operational reading
headersThree neutral column labels; legacy string arrays remain supported
captionOptional accessible table caption; defaults to the Section title
css_classextra CSS classes on outer section

BEM classes

  • foundry-comparison-table
  • foundry-comparison-table__cell
  • foundry-comparison-table__inner
  • foundry-comparison-table__row
  • foundry-comparison-table__table
  • foundry-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.

Managed forms share visitor, session, landing, route, and source context with the optional Foundry Control tracking runtime. See docs/TRACKING.md for the site configuration and transport contract. Creative starters use the creative-inquiry-form preset for the split inquiry surface before adding site-local contact wrappers.

Design options

FieldDetails
variantsplit | 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_classextra CSS classes on outer section

BEM classes

  • foundry-contact-split
  • foundry-contact-split--centered
  • foundry-contact-split--minimal
  • foundry-contact-split--split
  • foundry-contact-split__content
  • foundry-contact-split__control
  • foundry-contact-split__control--textarea
  • foundry-contact-split__field
  • foundry-contact-split__form
  • foundry-contact-split__form-panel
  • foundry-contact-split__form-text
  • foundry-contact-split__form-title
  • foundry-contact-split__inner
  • foundry-contact-split__meta-card
  • foundry-contact-split__meta-card--address
  • foundry-contact-split__meta-card--email
  • foundry-contact-split__meta-card--hours
  • foundry-contact-split__meta-card--phone
  • foundry-contact-split__meta-label
  • foundry-contact-split__meta-link
  • foundry-contact-split__meta-list
  • foundry-contact-split__meta-value
  • foundry-contact-split__privacy
  • foundry-contact-split__submit
  • foundry-contact-split__subtitle
  • foundry-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

FieldDetails
variantsdefault, chapter-index, checklist, timeline
variantdefault | chapter-index | checklist | timeline — anchored content layout, governed chapter index, compact checklist wayfinding, or process-like vertical narrative
numberedtrue | false — show chapter numbers in the navigation and chapter bodies
mobilecompact | expanded — mobile chapter navigation presentation
progresstrue | false — show active progress rail in chapter-index mode
stickytrue | false — pin the chapter index on larger viewports
item_revealfade-up | fade-in | slide-left | slide-right | zoom-in | none — per-chapter reveal in chapter-index mode
css_classextra CSS classes on outer section

BEM classes

  • foundry-content-sidebar-nav
  • foundry-content-sidebar-nav__chapter
  • foundry-content-sidebar-nav__chapter-index
  • foundry-content-sidebar-nav__content
  • foundry-content-sidebar-nav__inner
  • foundry-content-sidebar-nav__nav
  • foundry-content-sidebar-nav__nav-item
  • foundry-content-sidebar-nav__panel
  • foundry-content-sidebar-nav__subtitle
  • foundry-content-sidebar-nav__timeline-dot
  • foundry-content-sidebar-nav__title
  • foundry-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

FieldDetails
variantscentered, left
variantcentered | left — text and action alignment
css_classextra CSS classes on outer section

BEM classes

  • foundry-cta
  • foundry-cta--centered
  • foundry-cta--left
  • foundry-cta__actions
  • foundry-cta__inner
  • foundry-cta__panel
  • foundry-cta__text
  • foundry-cta__title

cta-button-list

Minimum required: buttons — everything else is optional. CTA block presenting multiple button actions as a grouped, source-ordered list. Use it when visitors genuinely have more than one bounded next step; use cta when one action should dominate.

sections:
- block: cta-button-list
  id: cta-button-list-example
  design:
    preset: inline-actions
  content:
    title: "Choose how to begin"
    subtitle: "Keep each destination distinct and explain the decision boundary in portable Markdown."
    buttons:
      - text: "Review the outline"
        url: "/outline/"
        variant: primary
      - text: "Ask a question"
        url: "/contact/"
        variant: secondary

Design options

FieldDetails
variantsinline
alignmentleft
css_classextra CSS classes on outer section

The named presets are inline-actions, ordered-handoff, and compact-register. Each action requires a label and a real destination. Use primary only when one action should lead attention; otherwise leave actions secondary or choose a quiet ghost alternative. Foundry keeps the list semantic and source-ordered without JavaScript, and stacks actions on narrow screens. Tracking fields remain optional metadata passed through the shared button component.

BEM classes

  • foundry-cta-button-list
  • foundry-cta-button-list__grid
  • foundry-cta-button-list__inner
  • foundry-cta-button-list__item
  • foundry-cta-button-list__text
  • foundry-cta-button-list__title

routing-panels

Minimum required: items — everything else is optional. Intent-routing cards for pages that need to direct distinct audiences or tasks to separate next steps without turning the entire section into one CTA.

sections:
- block: routing-panels
  id: choose-a-path
  content:
    eyebrow: Start here
    title: Choose the route that fits
    items:
      - eyebrow: New clients
        title: Start a consultation
        text: Share the goal and preferred follow-up path.
        actions:
          - text: Request a consultation
            url: /consult/
            variant: primary
            cta_key: routing-new-client
            cta_kind: internal
  design:
    variant: cards

Each action uses the shared button and CTA attribution contract.

cta-image-paragraph

Minimum required: items — everything else is optional. Media-supported conversion Style for next steps that benefit from visual context. Prefer a plain CTA when the image does not help the visitor decide. The normal authoring path is the typed cta.media Section Style; the renderer name remains supported for compatibility.

sections:
- type: cta
  style: media
  id: guided-handoffs
  content:
    eyebrow: Next steps
    title: Choose the right working session
    items:
    - title: Map the story
      text: Start with the visitor question, evidence, and next action.
      image: /images/story-map.jpg
      image_alt: Story map and content notes on a worktable
      features:
      - Name the visitor job
      - Preserve portable source
      action:
        text: Plan the page
        url: /contact/
        variant: primary
        cta_key: story-planning
  design:
    preset: guided-handoffs

Recommended presets are guided-handoffs for a longer alternating sequence, editorial-invitations for an open ruled composition, and compact-next-steps for a small set of peer choices. Keep items in reading order; desktop media placement may change, but mobile source and focus order do not.

Design options

FieldDetails
variantsalternating, editorial, compact
variantalternating | editorial | compact — sequence, open ruled composition, or concise cards
media_positionalternate | left | right — desktop placement; mobile preserves source order
media_ratiolandscape | portrait | square | auto — authored media frame
css_classadvanced declared-Extension escape hatch, not the normal design path

BEM classes

  • foundry-cta-image-paragraph
  • foundry-cta-image-paragraph__action
  • foundry-cta-image-paragraph__collection
  • foundry-cta-image-paragraph__content
  • foundry-cta-image-paragraph__feature
  • foundry-cta-image-paragraph__header
  • foundry-cta-image-paragraph__inner
  • foundry-cta-image-paragraph__item
  • foundry-cta-image-paragraph__media
  • foundry-cta-image-paragraph__text
  • foundry-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

FieldDetails
variantsline, gradient, wave, spacer
variantline | gradient | wave | spacer — divider style
spacingsm | md | lg | xl — vertical rhythm
css_classextra CSS classes on divider wrapper

BEM classes

  • foundry-divider
  • foundry-divider__inner

embed

Minimum required: url — everything else is optional. Safe iframe embed block for maps, interactive models, tools, and third-party widgets. Core owns deferred-source activation and loader completion; a consumer does not need site-local JavaScript for those modes. Set require_activation when the provider must not be contacted until the visitor chooses to load it. The fallback link remains available when JavaScript is disabled.

sections:
- block: embed
  id: embed-example
  content:
    fallback_text: Open source link
    fallback_url: https://example.com/fallback
    activation_title: View the interactive model
    activation_text: Loading this model contacts the external provider.
    activation_label: Load interactive model
    text: Example supporting text.
    title: Example title
    url: https://example.com
  design:
    variant: card
    aspect: '16:9'
    loading: lazy
    show_loader: true
    require_activation: true
    css_class: ''

Design options

FieldDetails
variantscard, flush, minimal
variantcard | flush | minimal — iframe wrapper style
aspect16:9 | 4:3 | 1:1 | map — default ratio when height is unset
heightfixed height value (for example: 450px), overrides aspect
loadinglazy | eager — native iframe loading hint
defer_srctrue | false — let the Core controller assign the iframe source after parsing
show_loadertrue | false — show an accessible loading state until the iframe is ready
require_activationtrue | false — wait for an explicit visitor action before contacting the provider
css_classextra CSS classes on outer section

BEM classes

  • foundry-embed
  • foundry-embed__empty
  • foundry-embed__activate
  • foundry-embed__fallback
  • foundry-embed__figure
  • foundry-embed__frame
  • foundry-embed__frame-wrap
  • foundry-embed__inner
  • foundry-embed__loader
  • foundry-embed__loader-panel
  • foundry-embed__shell
  • foundry-embed__subtitle
  • foundry-embed__title

faq-accordion

Minimum required: items — everything else is optional. FAQ-specific accordion block with question/answer structure.

sections:
- type: faq
  id: faq-accordion-example
  content:
    title: Common questions
    subtitle: Contact us when your situation needs a specific answer.
    items:
    - question: What happens first?
      answer: Start with the documented first step.
    - question: Where are restrictions explained?
      answer: Material restrictions remain visible in the page flow.
      group: Eligibility
  design:
    variant: cards

Design options

FieldDetails
variantscards, flush, grouped
variantcards | 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_classextra 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.

Use question and answer for new FAQ source. Legacy title and text items remain render-compatible and preserve matching FAQ structured data.

BEM classes

  • foundry-faq-accordion
  • foundry-faq-accordion__answer
  • foundry-faq-accordion__group
  • foundry-faq-accordion__inner
  • foundry-faq-accordion__item
  • foundry-faq-accordion__list
  • foundry-faq-accordion__question
  • foundry-faq-accordion__title

faq-cta

Minimum required: items, cta_title, cta_action — everything else is optional. Use FAQ Follow-up for the final one to three questions that may prevent a visitor from taking one accurate next step. Use FAQ Accordion for the complete question library, and use a generic CTA when no answer-driven transition is needed. The split and note presentations use native disclosures; guided keeps every selected answer visible in numbered source order. No JavaScript is required.

Recommended presets: questions-to-next-step, guided-decision-close, and quiet-contact-note.

Write questions in the visitor’s language. Keep each answer concise and qualified, and keep timing, privacy, eligibility, availability, policy, and process notes accurate. Legacy item title and text fields remain compatible, but new source should use question and answer.

sections:
- type: cta
  style: faq-follow-up
  id: final-project-questions
  content:
    eyebrow: Before we begin
    title: The questions that shape a useful first conversation
    subtitle: These are the final practical details, not a replacement for the complete FAQ.
    items:
    - question: Do I need a finished brief?
      answer: No. Bring the decision, audience, and constraints you already know; the first conversation identifies what still needs evidence.
    - question: What happens after the conversation?
      answer: You receive the documented next step that fits the actual scope. No project begins without a separate reviewed agreement.
    cta_title: Start with the real decision
    cta_text: Share the context that would make a first review useful.
    cta_action:
      text: Request a project review
      url: /contact/
      cta_key: project-review
      cta_kind: contact
    cta_secondary_action:
      text: Read the complete FAQ
      url: /faq/
    cta_note: Initial messages are reviewed privately; response timing should match the site's current published policy.
  design:
    preset: questions-to-next-step

Design options

FieldDetails
variantssplit, guided, note
variantsplit | guided | note — questions beside the handoff, visible numbered answers ending in the next step, or a restrained editorial contact note
css_classextra CSS classes on outer section

BEM classes

  • foundry-faq-cta
  • foundry-faq-cta__answer
  • foundry-faq-cta__actions
  • foundry-faq-cta__body
  • foundry-faq-cta__eyebrow
  • foundry-faq-cta__guided-item
  • foundry-faq-cta__handoff
  • foundry-faq-cta__handoff-mark
  • foundry-faq-cta__handoff-text
  • foundry-faq-cta__handoff-title
  • foundry-faq-cta__header
  • foundry-faq-cta__indicator
  • foundry-faq-cta__inner
  • foundry-faq-cta__intro
  • foundry-faq-cta__item
  • foundry-faq-cta__note
  • foundry-faq-cta__number
  • foundry-faq-cta__question
  • foundry-faq-cta__questions
  • foundry-faq-cta__questions--guided
  • foundry-faq-cta__summary
  • foundry-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.

Use Features for parallel benefits, capabilities, or differentiators. Use Timeline when chronology matters and Process when visitors must understand a sequence of actions or expectations. The routine editor uses canonical name and description fields and preserves compatibility aliases and advanced keys.

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

  • eyebrow or kicker for a small label above the title
  • item name or title
  • item description or text
  • item url and cta for the linked-cards variant
  • item css_class for per-card styling hooks

Design options

FieldDetails
variantscards, plain, linked-cards
variantcards | plain | linked-cards — card styling, borderless, or linked CTA cards
columns2 | 3 | 4 — grid columns (default: 3)
css_classextra CSS classes on outer section

BEM classes

  • foundry-features
  • foundry-features--columns-{2,3,4}
  • foundry-features__eyebrow
  • foundry-features__grid
  • foundry-features__inner
  • foundry-features__item
  • foundry-features__item-cta
  • foundry-features__item-icon
  • foundry-features__item-link
  • foundry-features__item-text
  • foundry-features__item-title
  • foundry-features__text
  • foundry-features__title

founder-profile

Minimum required: name — everything else is optional. Introduce one founder, principal, artist, practitioner, or other important person with enough public context to support trust. Use team-grid for several people and author-bio for compact article attribution.

The shortest good source is an approved public name, accurate role, concise Markdown biography, and approved portrait. Add factual highlights only when they help the visitor understand experience, responsibility, or approach; do not invent credentials, awards, affiliations, or outcome claims.

sections:
- block: founder-profile
  id: founder-story
  design:
    preset: founder-story
  content:
    title: "The person behind the work"
    name: "Jordan Vale"
    role: "Founder and creative director"
    biography: |
      Jordan built the studio around a simple belief: clear decisions and
      careful craft should reinforce each other.
    highlights:
      - text: "Leads every discovery engagement"
        context: "From first brief through final review"
      - text: "Fifteen years in independent practice"
    image: "/images/jordan-vale.jpg"
    image_alt: "Jordan Vale working beside material samples in the studio"
    primary_action:
      text: "Read the studio approach"
      url: "/approach/"

subtitle and paragraphs remain supported for older sites, but new source should use one biography Markdown field. Responsive-image source sets, intrinsic dimensions, custom sizes, and direct email/phone links remain advanced source fields; the normal human and AI path does not require them.

Intent presets

  • founder-story — balanced portrait and narrative for an About page.
  • artist-profile — expressive image-right manifesto with open typography.
  • practitioner-profile — compact, factual authority with clear highlights.

Design options

FieldDetails
variantportrait-story (default), open-manifesto, or credential-profile
css_classAdvanced escape hatch for a declared site Extension; not the normal design path

Theme Families and Customer Brand Systems may art-direct public --foundry-founder-profile-* variables for measure, spacing, portrait shape, media position, typography, accent, rules, and factual-highlight surfaces. Core continues to own heading order, portrait semantics, biography measure, contact focus, and responsive reading order.

BEM classes

  • foundry-founder-profile
  • foundry-founder-profile__actions
  • foundry-founder-profile__contact
  • foundry-founder-profile__contacts
  • foundry-founder-profile__content
  • foundry-founder-profile__eyebrow
  • foundry-founder-profile__highlight
  • foundry-founder-profile__highlights
  • foundry-founder-profile__identity
  • foundry-founder-profile__image
  • foundry-founder-profile__inner
  • foundry-founder-profile__intro
  • foundry-founder-profile__layout
  • foundry-founder-profile__media
  • foundry-founder-profile__name
  • foundry-founder-profile__picture
  • foundry-founder-profile__role
  • foundry-founder-profile__text
  • foundry-founder-profile__title

Minimum required: images — everything else is optional. Ordered, accessible image collection with optional captions, credits, related routes, filter categories, crop focus, and progressively enhanced lightbox navigation. Use Masonry for irregular editorial rhythm, Slideshow for sequential presentation, Property Tour for place-aware groups, or Media Sequence for a mixed-media narrative.

sections:
- block: gallery
  id: gallery-example
  design:
    preset: editorial-pairs
  content:
    title: Selected places
    text: A short introduction that tells visitors what to notice.
    images:
    - id: lake-arrival
      src: "/images/gallery-1.jpg"
      alt: Lake house beyond a private cedar edge
      caption: Arrival establishes the relationship between house and water.
      credit: Photograph by Example Studio
      link: /places/lake-house/
      category: exteriors
      position: center

Start with editorial-pairs, visual-catalog, or natural-archive. The legacy portfolio-grid preset remains compatible. Each image is a normal link to the full asset without JavaScript; the fingerprinted Core controller enhances that link into the dialog only when the required anatomy is available.

Design options

FieldDetails
variantsNone (single style)
columns2 | 3 | 4 — gallery columns
gapsm | md | lg — spacing between items
aspectsquare | landscape | portrait | auto — thumbnail ratio
captionsbelow | overlay | hidden — caption presentation
lightboxtrue | false — progressively enhance full-asset links into a dialog
css_classextra CSS classes on outer section

BEM classes

  • foundry-gallery
  • foundry-gallery__close
  • foundry-gallery__dialog
  • foundry-gallery__dialog-actions
  • foundry-gallery__dialog-caption
  • foundry-gallery__dialog-credit
  • foundry-gallery__dialog-footer
  • foundry-gallery__dialog-image
  • foundry-gallery__dialog-inner
  • foundry-gallery__dialog-link
  • foundry-gallery__dialog-nav
  • foundry-gallery__dialog-position
  • foundry-gallery__dialog-stage
  • foundry-gallery__empty
  • foundry-gallery__grid
  • foundry-gallery__header
  • foundry-gallery__image
  • foundry-gallery__inner
  • foundry-gallery__item
  • foundry-gallery__media
  • foundry-gallery__open
  • foundry-gallery__subtitle
  • foundry-gallery__title

discovery-cards

Minimum required: title — everything else is optional.

Renders a direct browse surface from stable Discovery Graph nodes. Use content.node_keys for graph-owned copy and routes, or content.items with a stable key plus page-specific copy/route overrides. If neither is supplied, the block renders routed category nodes. A current node can be marked and its bounded can-pair-with relationships shown below the grid.

sections:
  - block: discovery-cards
    id: known-options
    content:
      title: "Browse known options"
      node_keys: [service-a, service-b, service-c]
      current_key: service-a
      show_related: true
      related_title: "Often explored together"
    design:
      variant: grid
      columns: 3

Design options

FieldDetails
variantgrid | compact — discovery card presentation
columns2 | 3 | 4 — card columns at wide viewports
css_classextra CSS classes on outer section

guided-discovery

Minimum required: journey — everything else is optional.

Graph-backed, progressively enhanced visitor journey. It reads the named journey from data/foundry/discovery_graph.json, renders entry choices and route-backed educational results, and appends the selected stable node key to the configured conversion URL.

sections:
  - block: guided-discovery
    id: service-guide
    content:
      journey: service-guide
      eyebrow: "Start here"
      title: "Find a useful first path"
      text: "Choose what you notice or the goal you have in mind."
      entry_keys: [goal-one, concern-two, area-three]
    design:
      variant: split
      css_class: ""

Design options

FieldDetails
variantsplit | stacked — choice and result panel arrangement
css_classextra CSS classes on outer section

See Discovery Graph for the data, safety, and shell asset contracts.

Set content.entry_keys to a curated, ordered subset of journey entry nodes when the complete graph would create too many first-step choices. The full route-backed result catalog remains present without JavaScript; enhanced sessions reveal matches after the visitor chooses a starting point.

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

FieldDetails
variantscentered, left
variantcentered | left — text and action alignment
css_classextra CSS classes on outer section

BEM classes

  • foundry-hero
  • foundry-hero--{centered,left}
  • foundry-hero--media
  • foundry-hero__actions
  • foundry-hero__inner
  • foundry-hero__text
  • foundry-hero__title

icon-grid

Minimum required: items — everything else is optional. Use Icon Grid to explain a small set of capabilities, principles, or service paths that benefit from quick visual anchors. Use Features for denser benefit copy and Discovery Cards when every item is primarily a destination.

Recommended presets: editorial-capabilities for an open two-column list, service-cards for scannable destinations, and expressive-symbols for a centered visual statement. icon-highlight-row remains compatible.

sections:
- block: icon-grid
  id: icon-grid-example
  content:
    items:
    - icon: sparkles
      title: Thoughtful direction
      text: A short explanation of the useful outcome.
      url: /approach/
      link_label: See our approach
    text: Choose the few ideas a visitor should understand first.
    title: What makes the work different
  design:
    preset: service-cards

Design options

FieldDetails
variantsplain, cards, centered
variantplain | cards | centered — plain: icon left + content right (default); cards: card background per item; centered: icon centered above content, centered text
columns2 | 3 | 4 — grid columns
css_classextra CSS classes on outer section

BEM classes

  • foundry-icon-grid
  • foundry-icon-grid__content
  • foundry-icon-grid__grid
  • foundry-icon-grid__header
  • foundry-icon-grid__icon
  • foundry-icon-grid__icon-svg
  • foundry-icon-grid__inner
  • foundry-icon-grid__item
  • foundry-icon-grid__item-text
  • foundry-icon-grid__item-title
  • foundry-icon-grid__link
  • foundry-icon-grid__subtitle
  • foundry-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

FieldDetails
variantsNone (single style)
css_classextra CSS classes on outer section

BEM classes

  • foundry-illustration-panel
  • foundry-illustration-panel__content
  • foundry-illustration-panel__inner
  • foundry-illustration-panel__media
  • foundry-illustration-panel__text

image-feature

Minimum required: src, alt — everything else is optional. Single-image editorial Style with bounded emphasis, crop, focal position, caption, and optional lightbox enhancement. Use Gallery or Slideshow when the visitor needs to browse several images. The normal authoring path is typed media-story.image-feature; the renderer name remains supported for compatibility.

sections:
- type: media-story
  style: image-feature
  id: evidence-figure
  content:
    src: /images/process-map.svg
    alt: Process map showing discovery, evidence review, and decision handoff
    caption: The complete process remains visible without JavaScript.
    credit: Internal process study
  design:
    preset: editorial-figure

Recommended presets are editorial-figure for uncropped evidence, cinematic-wide for immersive emphasis, full-bleed-statement for an edge-to-edge beat, and supporting-figure for a bounded side-aligned image. The optional lightbox is progressive enhancement; the base image and caption remain ordinary visible HTML.

Design options

FieldDetails
variantscontained, wide, full-bleed, float-left, float-right
variantcontained | wide | full-bleed | float-left | float-right — bounded width and alignment; float variants avoid fragile CSS floats
aspect16:9 | 4:3 | 3:2 | square | auto — media frame ratio
fitcover | contain — crop photography or preserve the complete asset
positioncenter plus eight bounded edge/corner values — focal point for cropped media
roundedtrue | false — rounded media frame
shadowtrue | false — frame elevation; off by default
lightboxtrue | false — progressively enhance with a keyboard-operable dialog; off by default
css_classadvanced declared-Extension escape hatch, not the normal design path

BEM classes

  • foundry-image-feature
  • foundry-image-feature__caption
  • foundry-image-feature__close
  • foundry-image-feature__dialog
  • foundry-image-feature__dialog-inner
  • foundry-image-feature__empty
  • foundry-image-feature__figure
  • foundry-image-feature__inner
  • foundry-image-feature__image
  • foundry-image-feature__media
  • foundry-image-feature__opener
  • foundry-image-feature__zoom

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

FieldDetails
variantsNone (single style)
css_classextra CSS classes on outer section

BEM classes

  • foundry-lead-magnet
  • foundry-lead-magnet__form
  • foundry-lead-magnet__inner
  • foundry-lead-magnet__text
  • foundry-lead-magnet__title

logo-trust

Minimum required: logos, badges — everything else is optional. Hybrid trust block combining permissioned logos with supporting credibility chips. Use only marks the site owns or has explicit permission to publish; the Core compatibility fixture uses clearly fictional demonstration artwork.

sections:
- block: logo-trust
  id: logo-trust-example
  content:
    eyebrow: Permissioned partners
    title: Organizations we are approved to name
    subtitle: Every mark is verified before publication.
    logos:
    - name: Partner Name
      image: /media/partner-name.svg
    badges:
    - Permission verified
    - Meaningful alternative names
  design:
    preset: permissioned-partners

Design options

FieldDetails
variantsgrid (individual permissioned mark tiles), strip (open restrained affiliation row), band (one collective trust surface)
presetpermissioned-partners, quiet-affiliations, or collective-credibility
css_classextra CSS classes on outer section

Use logo-trust when a small verified set of organizations or affiliations helps visitors interpret trust. Use logos for a larger neutral logo wall and certification-badges when credentials, issuing bodies, or destinations are the primary meaning. Real sites must verify the relationship, publication rights, organization name, and alternative text before adding a mark.

BEM classes

  • foundry-logo-trust
  • foundry-logo-trust--grid
  • foundry-logo-trust--strip
  • foundry-logo-trust--band
  • foundry-logo-trust__badges
  • foundry-logo-trust__badge
  • foundry-logo-trust__empty
  • foundry-logo-trust__eyebrow
  • foundry-logo-trust__grid
  • foundry-logo-trust__header
  • foundry-logo-trust__image
  • foundry-logo-trust__inner
  • foundry-logo-trust__item
  • foundry-logo-trust__name
  • foundry-logo-trust__subtitle
  • foundry-logo-trust__title

logos

Minimum required: logos — everything else is optional. An accurately named collection of organizations, publications, tools, sponsors, collaborators, or brands. This Block does not turn proximity into trust proof. Use logo-trust for verified organization relationships and certification-badges for formally issued credentials.

sections:
- block: logos
  id: logos-example
  design:
    preset: brand-wall
  content:
    title: Selected collaborations
    introduction: Every relationship is named plainly and every mark is approved for display.
    logos:
    - name: Northline Workshop
      relationship: Campaign collaborator
      description: A limited collaboration for the 2026 launch campaign.
      image: /media/northline-workshop.svg
      image_alt: ""
      url: /work/northline/

Keep name visible even when an image exists. Use relationship when visitors could otherwise infer a customer, sponsor, partner, endorsement, or publisher status that the source does not actually establish. Leave image_alt empty when the adjacent visible name communicates the same information; describe only unique visual meaning. Verify names, destinations, and display rights before publishing a real mark.

Start with brand-wall, relationship-index, or compact-mentions. moving-ticker is an advanced progressive enhancement: the complete static list remains readable when JavaScript is unavailable, animation is disabled, or reduced motion is requested. trust-marquee and authority-grid remain compatible legacy preset names; they do not change this Block into verified trust evidence.

Design options

FieldDetails
variantsgrid, strip, pill
variantgrid image-led brand wall; strip relationship index; pill compact named mentions
marqueeAdvanced true | false progressive ticker; defaults false and never replaces the static list
marquee_speedPositive advanced ticker speed in px/s (default: 55)
marquee_dirAdvanced left | right ticker direction (default: left)
marquee_pauseAdvanced hover | none; hover also pauses for keyboard focus
css_classextra CSS classes on outer section

BEM classes

  • foundry-logos
  • foundry-logos__header
  • foundry-logos__inner
  • foundry-logos__introduction
  • foundry-logos__collection
  • foundry-logos__motion-options
  • foundry-logos__viewport
  • foundry-logos__items
  • foundry-logos__item
  • foundry-logos__item-link
  • foundry-logos__mark
  • foundry-logos__image
  • foundry-logos__relationship
  • foundry-logos__name
  • foundry-logos__description
  • foundry-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%
      detail: "Current reporting year; 318 registered participants."
    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

FieldDetails
variantssplit, panel, list
variantsplit | panel | list — split: copy and visual side by side; panel: stacked explanatory panel; list: area-first coverage list for routes without map art
image_positionleft | right — media/coverage panel side on large screens
stat_stylecards | inline — framed stat cards or tighter inline metrics
area_stylechips | list — coverage area display treatment
map_framecard | soft | flush — map/image frame treatment
css_classextra CSS classes on outer section

BEM classes

  • foundry-map-coverage
  • foundry-map-coverage__area
  • foundry-map-coverage__areas
  • foundry-map-coverage__copy
  • foundry-map-coverage__image
  • foundry-map-coverage__inner
  • foundry-map-coverage__map
  • foundry-map-coverage__markers
  • foundry-map-coverage__placeholder
  • foundry-map-coverage__stat
  • foundry-map-coverage__stats
  • foundry-map-coverage__text
  • foundry-map-coverage__title

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

FieldDetails
variantsNone (single style)
columns2 | 3 | 4 — desktop masonry columns
gapsm | md | lg — spacing between items
lightboxtrue | false — open images in dialog lightbox
css_classextra CSS classes on outer section

Notes

  • Use images for inline page-specific galleries.
  • Use images_data to point at a shared data slice such as site.section.images when multiple pages should reuse the same curated image set.
  • limit can trim a shared image slice for teaser use on home or landing pages.
  • Core applies the selected desktop column count and gap through native CSS; the gallery does not require Tailwind or another utility runtime to size its media. Small viewports collapse to one column.
  • The outer section exposes stable foundry-masonry-gallery--columns-{2|3|4} and foundry-masonry-gallery--gap-{sm|md|lg} modifiers for downstream theme refinement. Treat these as layout hooks; photograph selection and focal composition remain site/content-owned.

BEM classes

  • foundry-masonry-gallery
  • foundry-masonry-gallery--columns-2
  • foundry-masonry-gallery--columns-3
  • foundry-masonry-gallery--columns-4
  • foundry-masonry-gallery--gap-sm
  • foundry-masonry-gallery--gap-md
  • foundry-masonry-gallery--gap-lg
  • foundry-masonry-gallery__columns
  • foundry-masonry-gallery__dialog
  • foundry-masonry-gallery__dialog-inner
  • foundry-masonry-gallery__empty
  • foundry-masonry-gallery__inner
  • foundry-masonry-gallery__item
  • foundry-masonry-gallery__open
  • foundry-masonry-gallery__subtitle
  • foundry-masonry-gallery__title

managed-form

Minimum required: form.form_key — everything else is optional. Portable form intent and render shell for Foundry-connected intake, lead, and CTA flows. Core renders the accessible Hugo shell, stable hooks, public config resolution, and theme-token surface; Foundry Control owns submissions, routing, contacts, communications, private credentials, permissions, automations, and workflow state.

Foundry Control opportunity: Use Foundry Control to turn this portable form surface into a complete managed workflow with submissions, routing, contacts, communications, analytics, and automations. Control can also add guided editing, review, and publishing across the Foundry site.

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 form shell and resolves public configuration through layouts/partials/framework/form-config.html. When base_url or site_key are omitted inline, repo-visible Foundry control settings can supply them. The complete browser/Control handshake, challenge descriptor, idempotency field, response statuses, and hosting requirements are documented in docs/MANAGED-FORMS.md.

Managed forms fail closed by default. Their form-specific metadata endpoint is the availability check; Core does not probe a general Control health route. Standalone managed-form blocks keep their entire section hidden until valid metadata arrives. When the same managed form is embedded in another block, only the managed-form region is hidden so surrounding copy and contact details remain available.

Site defaults live in Hugo configuration:

params:
  foundry:
    control:
      base_url: https://control.example.com
      site_key: regulated-production-proof-site
      unavailable_behavior: hide
      timeout_ms: 5000

Each form can override the availability presentation and request timeout:

content:
  form:
    mode: managed
    form_key: contact-intake
    unavailable_behavior: message
    timeout_ms: 3000

unavailable_behavior supports hide (the default) and message. Missing or invalid values resolve to hide. message retains an accessible unavailable message but never reveals empty controls. timeout_ms defaults to 5000 and applies to both metadata and submission requests. Numeric values are clamped to the portable 25030000 ms range; invalid per-form values fall back to the normalized site default. A timed-out or failed submission preserves entered values and selected files where the browser permits, re-enables the submit button, and resets the form only after a confirmed success response.

The repo setting is the failure fallback when Control cannot answer. When the metadata endpoint does answer with a disabled availability directive, Control’s presentation (hide or show_message) and safe public message take precedence. This lets an authorized Control operator pause one form or all forms without rebuilding the site, while a missing, rejected, malformed, or timed-out response still fails closed.

Design options

FieldDetails
variantnarrow | wide | panel — narrow: max-w-3xl centered (default); wide: max-w-5xl for multi-field forms; panel: framed card with surface background
css_classextra CSS classes on outer section

BEM classes

  • foundry-managed-form
  • foundry-managed-form__eyebrow
  • foundry-managed-form__inner
  • foundry-managed-form__privacy
  • foundry-managed-form__status
  • foundry-managed-form__text
  • foundry-managed-form__title

managed-form-panel

Minimum required: form.form_key — everything else is optional. Two-column managed-form composition for high-consideration services. The support column remains available for direct contact actions and explanatory copy while the form column follows the same fail-closed availability contract as managed-form.

sections:
- block: managed-form-panel
  id: consultation-form
  content:
    support_eyebrow: Consultation support
    support_title: Use the form, text, or call
    support_text: Choose the contact path that is easiest for you.
    support_actions:
      - text: Text us
        url: sms:+15555550123
        style: primary
        cta_key: consultation-text
        cta_kind: sms
      - text: Call us
        url: tel:+15555550123
        style: secondary
        cta_key: consultation-call
        cta_kind: tel
    form_title: Start your request
    form:
      mode: managed
      form_key: consultation-intake
      cta_key: consultation-form
  design:
    variant: support

Support actions use the shared button and CTA tracking contract. Form fields, submit behavior, availability, and operational privacy copy remain managed by Foundry Control; the site owns the surrounding branded guidance.

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

FieldDetails
variantsparallax, fixed, still
behaviorparallax | fixed | still — parallax drifts the media slower than scroll, fixed uses desktop background-attachment, still renders a static full-bleed media break
heightCSS length for section height (default: 88svh)
min_heightCSS length for section minimum height (default: 28rem)
overlaynone | light | medium | strong — media shade behind optional copy
content_alignleft | center | right — optional overlay copy alignment
title_tagh1 | h2 — optional overlay title element for hero vs in-page use (default: h2)
positionCSS object-position/background-position value (default: center center)
parallax_speed0.0-0.35 — viewport fraction used for slower-than-scroll drift (default: 0.14)
parallax_dirup | down — media drift direction as the visitor scrolls (default: up)
css_classextra CSS classes on outer section

BEM classes

  • foundry-media-break
  • foundry-media-break__action
  • foundry-media-break__asset
  • foundry-media-break__caption
  • foundry-media-break__content
  • foundry-media-break__copy
  • foundry-media-break__empty
  • foundry-media-break__eyebrow
  • foundry-media-break__fixed-bg
  • foundry-media-break__layer
  • foundry-media-break__media
  • foundry-media-break__shade
  • foundry-media-break__text
  • foundry-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.

Visitor job: help a visitor follow an ordered visual argument, project story, or body of work without losing reading order. Use Gallery or Masonry Gallery when scanning and comparison matter more than sequence; use Media Text when one image and one concise explanation are enough.

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: ''

For the normal authoring path, choose a preset and write the items. Do not copy the renderer, add a page-local style block, or set every design field.

PresetBest starting point
editorial-storyexplanatory case study with media/copy relationships
cinematic-storyimmersive, wide, stacked campaign or destination story
portfolio-homeconcise featured work on a landing page
portfolio-archivealternating selected-work archive
story-reelexpressive mixed-media narrative with progress
selected-work-reelindexed portfolio or project reel
chaptered-medialonger chapter sequence with visible wayfinding

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.

The semantic wrapper, item grid, gallery, media shell, and credit definition list have a Core-owned layout floor in foundry-base.css. Credit rows use a complete surface/border/label/value token pair, so a dark or branded parent can change the relationship without overriding nested selectors or fighting inline light colors.

Embedded video posters and play controls are progressively enhanced by the fingerprinted foundry-media-sequence.js asset. Ordinary images, text, quotes, credits, captions, links, and source order do not depend on JavaScript. Core owns frame, ratio, reflow, progress, reduced-motion, and narrow-screen geometry; Theme Families and Customer Brand Systems art-direct those hooks through shared media tokens and --foundry-media-sequence-* variables.

Content options

FieldDetails
items[].eyebrowoptional category, chapter, or context label; when show_index is true, do not repeat the generated number here
items[].captionoptional caption rendered below image/video media
items[].creditoptional credit line rendered below caption
items[].creditsarray of label/value credit rows for type: credits items

Design options

FieldDetails
variantseditorial, alternating, cinematic, story-reel, work-reel
varianteditorial | alternating | cinematic | story-reel | work-reel — mixed-media storytelling layout
media_ratiolandscape | square | portrait | wide | auto — default media aspect ratio
media_surfaceframed | flush | soft — default media frame treatment
spacingsm | md | lg — vertical rhythm between sequence items
show_progresstrue | false — show a reduced-motion-safe scroll progress rail for reel variants (default: true on story-reel/work-reel)
show_indextrue | false — generate two-digit item indexes (default: true on work-reel); use items[].eyebrow for meaning, not a duplicate number
stagger_itemstrue | false — stagger reel items when item_reveal is not explicitly set (default: true on story-reel/work-reel)
item_revealfade-up | fade-in | slide-left | slide-right | zoom-in | none — explicit per-item reveal style; overrides default reel stagger
css_classextra CSS classes on outer section

BEM classes

  • foundry-media-sequence
  • foundry-media-sequence__body
  • foundry-media-sequence__credits
  • foundry-media-sequence__credits-item
  • foundry-media-sequence__empty
  • foundry-media-sequence__eyebrow
  • foundry-media-sequence__gallery
  • foundry-media-sequence__image
  • foundry-media-sequence__index
  • foundry-media-sequence__inner
  • foundry-media-sequence__intro
  • foundry-media-sequence__item
  • foundry-media-sequence__item-eyebrow
  • foundry-media-sequence__item-title
  • foundry-media-sequence__items
  • foundry-media-sequence__media
  • foundry-media-sequence__media-shell
  • foundry-media-sequence__progress
  • foundry-media-sequence__progress-bar
  • foundry-media-sequence__quote
  • foundry-media-sequence__quote-attribution
  • foundry-media-sequence__quote-text
  • foundry-media-sequence__text-item
  • foundry-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.

Visitor job: guide a visitor through a small number of dramatic chapters whose visual context should persist while the explanation advances. Use Media Sequence when normal document flow is clearer, and Media Break when one interruption—not a chapter system—is enough.

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: ''

Start with a named preset; the raw Block keeps parallax, Ken Burns, and video autoplay off.

PresetBest starting point
pinned-storybalanced editorial story with portrait flow fallback
immersive-chaptershigh-impact campaign or destination narrative
editorial-chaptersrestrained image-led essay without ambient motion
accessible-story-stackstatic, light, image-then-copy chapter stack

Design options

FieldDetails
variantsdark, light, editorial
variantdark | light | editorial — pinned full-viewport media storytelling palette
min_heightCSS length for each chapter scroll span (default: 120vh)
overlaynone | light | medium | strong — media shade behind copy
content_alignleft | center | right — chapter text alignment
intro_title_tagh1 | h2 — intro title element for top-hero vs in-page section use (default: h2)
pinnedtrue | false — keep media sticky while chapter panels scroll; false renders the same content as a static chapter stack (default: true)
show_progresstrue | false — show a decorative chapter progress rail scoped to each pinned chapter (default: false)
parallaxtrue | false | {speed 0.0-0.35} — normalized alias for media_parallax; item-level parallax can override
parallax_speed0.0-0.35 — normalized alias for media_parallax_speed (default: 0.16)
parallax_dirup | down — normalized alias for media_parallax_dir (default: up)
kenburnstrue | false — enable/disable Ken Burns rotation for image chapters; item-level kenburns can override
kenburns_intervalmilliseconds between chapter image crossfades (default: 7200)
kenburns_transitionmilliseconds for crossfade duration between chapter images (default: 1400)
media_parallaxtrue | false — compatibility alias for parallax
media_parallax_speed0.0-0.35 — compatibility alias for parallax_speed
media_parallax_dirup | down — compatibility alias for parallax_dir
media_fitcover | contain — use contain when the full diagram or information graphic must remain visible (default: cover)
media_positionnormalized image position — chapter focal position (default: center center)
media_ratiolandscape | square | portrait | wide | 16:10 — frame used by portrait flow (default: landscape)
portrait_modepinned | flow — preserve pinning or use a normal image-then-content sequence in portrait orientation (default: pinned)
css_classextra CSS classes on outer section

items[].autoplay opts a chapter into muted looping background video. It defaults to false; a poster or first frame remains visible without ambient motion. Use autoplay only when the moving image is decorative and the written chapter carries the complete meaning.

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.

The four media fields can also be set on an individual items[] record. Use media_fit: contain, media_ratio: "16:10", portrait_mode: flow, overlay: none, and no parallax/Ken Burns for legible diagrams. Foundry keeps photo-oriented cover, pinning, and overlays as defaults while motion stays opt-in; it does not infer intent from an SVG or other file extension. When a contained chapter explicitly requests parallax, Core warns and disables the crop-inducing enlargement.

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-story
  • foundry-pinned-media-story__actions
  • foundry-pinned-media-story__asset
  • foundry-pinned-media-story__caption
  • foundry-pinned-media-story__chapter
  • foundry-pinned-media-story__chapter-eyebrow
  • foundry-pinned-media-story__chapter-text
  • foundry-pinned-media-story__chapter-title
  • foundry-pinned-media-story__chapters
  • foundry-pinned-media-story__content
  • foundry-pinned-media-story__credit
  • foundry-pinned-media-story__eyebrow
  • foundry-pinned-media-story__intro
  • foundry-pinned-media-story__media
  • foundry-pinned-media-story__panel
  • foundry-pinned-media-story__panel-stack
  • foundry-pinned-media-story__parallax-layer
  • foundry-pinned-media-story__rotator
  • foundry-pinned-media-story__shade
  • foundry-pinned-media-story__text
  • foundry-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

FieldDetails
variantssplit, editorial, feature-panel
variantsplit | editorial | feature-panel — split: balanced media/copy default; editorial: roomier content-led story rhythm; feature-panel: framed copy panel with stronger media emphasis
media_positionleft | right - media placement
media_ratiolandscape | square | portrait | wide - media aspect ratio
layoutbalanced | media-wide | content-wide | stacked - media/content column balance
vertical_aligncenter | start | end - vertical alignment between media and copy
text_measurenormal | narrow | wide - copy width constraint
densitynormal | compact | spacious - vertical spacing and grid gap
framecard | plain | borderless - media frame treatment
media_fitcover | contain - image fit inside the media frame
motion_parallaxnumber string - optional parallax speed for the media column
motion_parallax_dir1 | -1 - optional media column parallax direction
css_classextra 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-text
  • foundry-media-text--media-{left,right}
  • foundry-media-text__actions
  • foundry-media-text__caption
  • foundry-media-text__content
  • foundry-media-text__eyebrow
  • foundry-media-text__image
  • foundry-media-text__inner
  • foundry-media-text__item
  • foundry-media-text__item-icon
  • foundry-media-text__items
  • foundry-media-text__media
  • foundry-media-text__media-frame
  • foundry-media-text__text
  • foundry-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

FieldDetails
variantscard, banner, minimal
variantcard | banner | minimal — form presentation
css_classextra CSS classes on outer section

BEM classes

  • foundry-newsletter-inline
  • foundry-newsletter-inline__inner

onboarding-timeline

Minimum required: steps — everything else is optional. Ordered onboarding sequence with utility-independent cards, an open editorial rail, and a compact checkpoint band. Use name/description for current source; the renderer also preserves the earlier title/text item aliases.

sections:
- block: onboarding-timeline
  id: onboarding-timeline-example
  content:
    eyebrow: Getting started
    title: A calm path to the first result
    subtitle: Four visible milestones keep the process easy to understand.
    steps:
    - name: Share the starting point
      description: Bring the goals, constraints, and useful source material.
      icon: chat-bubble-left-right
    - name: Shape the working brief
      description: Agree on scope, decisions, and the first review moment.
  design:
    preset: guided-start
    variant: cards
    css_class: ''

Design options

FieldDetails
variantscards, rail, compact
variantcards (approachable default), rail (open editorial sequence), or compact (dense checkpoint band)
presetguided-start, editorial-journey, or compact-checkpoints; explicit values win
css_classextra CSS classes on outer section

The base layer owns the ordered list, responsive columns, item alignment, marker geometry, rhythm, and complete surface/foreground pairs. Themes should prefer the documented --foundry-onboarding-* variables over rewriting the internal selectors. All variants collapse to one readable source-ordered column at narrow widths.

BEM classes

  • foundry-onboarding-timeline
  • foundry-onboarding-timeline__content
  • foundry-onboarding-timeline__description
  • foundry-onboarding-timeline__empty
  • foundry-onboarding-timeline__eyebrow
  • foundry-onboarding-timeline__header
  • foundry-onboarding-timeline__icon
  • foundry-onboarding-timeline__inner
  • foundry-onboarding-timeline__item
  • foundry-onboarding-timeline__item-row
  • foundry-onboarding-timeline__item-title
  • foundry-onboarding-timeline__list
  • foundry-onboarding-timeline__number
  • foundry-onboarding-timeline__subtitle
  • foundry-onboarding-timeline__title

page-list

Minimum required: section — everything else is optional. Generic Hugo section collection for ordinary content pages. It keeps each destination’s title, summary, date, image, and URL in the canonical page file instead of copying them into the landing page. Use the typed type: page-list plus style: editorial path when categories, authors, featured stories, or magazine hierarchy are part of the visitor task. Use Content Feed or Search when filtering is the visitor job.

sections:
- block: page-list
  id: work-directory
  content:
    title: Selected work
    text: Four ordinary Hugo pages, ordered intentionally.
    section: work
    sort: weight
    limit: 4
  design:
    preset: page-directory

Start with a visitor-job preset: page-directory for visual peers, journal-index for explanation-led reading, or resource-list for familiar routes. creative-journal-feed remains a compatibility alias for a text-led journal list. Override only the one bounded option the page actually needs; listing display flags belong under design because they change presentation. Values below 1 for content.limit show every published page, while invalid values safely default to six. Empty output distinguishes an unchosen section, a missing section, and a valid section with no published pages; use content.empty_text only when a more useful truthful message exists.

The Page List Visual Example shows cards, an open register, and a compact route index beside copyable Hugo source. The renderer requires no page-local styles, utility framework, or JavaScript.

Design options

FieldDetails
variantscards, list, compact
viewcards | list | compact — visual recognition, explanation-led scanning, or familiar-route lookup
columns2 | 3 — wide card columns; narrows responsively
show_datetrue | false — show semantic publish date
show_summarytrue | false — show normalized page summary
show_imagetrue | false — show an available decorative thumbnail while the title remains the accessible link name
css_classadvanced declared-Extension escape hatch, not the normal design path

BEM classes

  • foundry-page-list
  • foundry-page-list--cards
  • foundry-page-list--compact
  • foundry-page-list--list
  • foundry-page-list__actions
  • foundry-page-list__body
  • foundry-page-list__card
  • foundry-page-list__card--without-image
  • foundry-page-list__card-content
  • foundry-page-list__compact
  • foundry-page-list__compact-arrow
  • foundry-page-list__compact-item
  • foundry-page-list__compact-link
  • foundry-page-list__compact-meta
  • foundry-page-list__compact-title
  • foundry-page-list__empty
  • foundry-page-list__grid
  • foundry-page-list__grid-item
  • foundry-page-list__header
  • foundry-page-list__image
  • foundry-page-list__image-link
  • foundry-page-list__inner
  • foundry-page-list__item-title
  • foundry-page-list__list
  • foundry-page-list__list-entry
  • foundry-page-list__list-item
  • foundry-page-list__list-item--without-image
  • foundry-page-list__meta
  • foundry-page-list__subtitle
  • foundry-page-list__summary
  • foundry-page-list__title

post-hero

Minimum required: title — everything else is optional. Use Post Hero to open an article, journal entry, report, or resource with one public title, a concise standfirst, canonical article metadata, and optional meaningful featured media. It reads author, date, reading time, category, and tags from page metadata by default so editors and AI agents do not duplicate those facts in the Section.

sections:
- block: post-hero
  id: article-opening
  content:
    title: Why slower observation leads to better creative decisions
    text: A field note on separating evidence, interpretation, and the urge to make every page louder.
    image: "/images/journal/observation-table.webp"
    image_alt: "Paper notes, material samples, and a magnifying glass arranged on a work table."
  design:
    preset: visual-feature

Intent presets: reading-first for a fast text-led opening, visual-feature for a wide image with an overlapping editorial panel, and profile-led-story when a portrait-oriented image should share the opening.

Content fields

FieldDetails
titlerequired exact public article title; page title remains the renderer fallback
textoptional concise standfirst in portable Markdown
imageoptional approved featured image that adds meaning
image_altuseful description of meaningful image content; later rotating images are decorative to avoid repeated announcements

Article metadata normally belongs in the page’s canonical date, authors, category, tags, and reading-time source. Legacy content.author_*, date, and read_time values remain compatible for migrations, but they are not the preferred editing path.

Design options

FieldDetails
variantscentered, split, stacked
variantcentered | split | stacked — reading-first, portrait-sharing, or wide visual-feature composition
kenburnsadvanced opt-in rotating media; works only when multiple approved images exist and defaults off
kenburns_intervaladvanced image-change interval, bounded to 4000–30000 milliseconds
kenburns_transitionadvanced crossfade duration, bounded to 300–3000 milliseconds
css_classextra CSS classes on outer section

Use plain Hero for a marketing landing page and Section Header inside a page. Use Post Hero only when article identity and reading metadata are the visitor’s job. Core owns heading semantics, source order, media loading, responsive stacking, and byline anatomy; Theme Families and Customer Brand Systems may art-direct the public Post Hero variables without copying the renderer.

BEM classes

  • foundry-post-hero
  • foundry-post-hero--{centered,split,image-top,stacked}
  • foundry-post-hero__author
  • foundry-post-hero__author-copy
  • foundry-post-hero__author-image
  • foundry-post-hero__author-initials
  • foundry-post-hero__author-name
  • foundry-post-hero__author-role
  • foundry-post-hero__category
  • foundry-post-hero__content
  • foundry-post-hero__date
  • foundry-post-hero__facts
  • foundry-post-hero__image
  • foundry-post-hero__inner
  • foundry-post-hero__layout
  • foundry-post-hero__media
  • foundry-post-hero__media-rotator
  • foundry-post-hero__meta
  • foundry-post-hero__read-time
  • foundry-post-hero__standfirst
  • foundry-post-hero__tag
  • foundry-post-hero__tags
  • foundry-post-hero__taxonomy
  • foundry-post-hero__title

post-list

Minimum required: section — everything else is optional. Editorial Page List Style for a known Hugo content section. It normalizes titles, summaries, dates, categories, authors, and images through the shared discovery model. Use Content Feed or Search when filtering is the visitor job. The normal authoring path is typed page-list.editorial; the renderer name remains supported for compatibility.

sections:
- type: page-list
  style: editorial
  id: journal-index
  content:
    eyebrow: Journal
    title: Ideas for better publishing
    text: A selected reading list from ordinary Hugo pages.
    section: articles
    sort: date
    limit: 7
    cta:
      text: Browse every article
      url: /articles/
  design:
    preset: editorial-reading-list

Recommended presets are editorial-reading-list for fast comparison, magazine-front for one lead story plus a compact rail, and journal-cards when each entry needs a strong visual memory. Use featured_first: true with cards only when the first sorted entry genuinely deserves promotion.

Design options

FieldDetails
variantscards, list, magazine
viewcards | list | magazine — visual hierarchy selected by reading task
columns2 | 3 — wide card columns; narrows responsively
show_datetrue | false — show normalized publish date
show_summarytrue | false — show normalized summary
show_imagetrue | false — show normalized discovery image
show_categorytrue | false — show normalized category badge
css_classadvanced declared-Extension escape hatch, not the normal design path

BEM classes

  • foundry-post-list
  • foundry-post-list__card
  • foundry-post-list__cta
  • foundry-post-list__empty
  • foundry-post-list__featured
  • foundry-post-list__grid
  • foundry-post-list__inner
  • foundry-post-list__list
  • foundry-post-list__list-item
  • foundry-post-list__magazine
  • foundry-post-list__magazine-item
  • foundry-post-list__magazine-lead
  • foundry-post-list__magazine-stack
  • foundry-post-list__media-link
  • foundry-post-list__meta
  • foundry-post-list__subtitle
  • foundry-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 languages defaults to the current page language

Supported query fields

  • kinds
  • sections
  • topics
  • audience
  • series
  • categories
  • tags
  • languages
  • featured_only
  • exclude_current
  • limit
  • sort

Sort values

  • newest
  • oldest
  • title
  • featured
  • manual

manual sorts by search.order, then page weight, then newest date.

Design options

FieldDetails
viewcards | list | compact — feed layout mode
columns2 | 3 | 4 — cards grid columns
show_imagetrue | false — show thumbnails
show_summarytrue | false — show excerpt text
show_datetrue | false — show publish date
show_kindtrue | false — show kind badge
show_topicstrue | false — show topic badges
show_audiencetrue | false — show audience badge
css_classextra CSS classes on outer section

BEM classes

  • foundry-content-feed
  • foundry-content-feed__compact
  • foundry-content-feed__compact-item
  • foundry-content-feed__cta
  • foundry-content-feed__card
  • foundry-content-feed__empty
  • foundry-content-feed__eyebrow
  • foundry-content-feed__grid
  • foundry-content-feed__inner
  • foundry-content-feed__list
  • foundry-content-feed__list-item
  • foundry-content-feed__text
  • foundry-content-feed__title

pricing-comparison

Minimum required: plans — everything else is optional. Plan-decision control for comparing accurately priced options against shared criteria. Pricing Tiers presents offers; Comparison Table compares two general approaches; Pricing Comparison helps a visitor choose among priced plans.

sections:
- type: comparison
  style: pricing
  id: choose-a-plan
  design:
    preset: detailed-plan-matrix
  content:
    eyebrow: "Plans at a glance"
    title: "Choose by the support you need"
    introduction: "Every plan is measured against the same working questions."
    plans:
      - key: foundation
        name: "Foundation"
        price: "$1,800"
        cadence: "one-time"
        price_note: "Taxes not included"
      - key: partnership
        name: "Working partnership"
        price: "$3,600"
        cadence: "one-time"
        highlight: true
        highlight_reason: "It fits teams that need decisions made together."
    criteria:
      - label: "Live working session"
        values:
          - plan: foundation
            state: not-included
            text: "Written intake"
          - plan: partnership
            state: included
            text: "One 90-minute session"
    footnote: "Keep material price, term, tax, and scope qualifications visible."

Stable plans[].key values connect each plan to criteria[].values[].plan. Use visible value text or one of included, not-included, limited, custom, and text; color never carries state by itself. A highlighted plan needs a truthful highlight_reason. Legacy plan features and subtitle remain compatible, but shared criteria are the preferred source model.

Design options

FieldDetails
variantmatrix | ledger | guided — scan-first table, open editorial record, or explained best-fit guidance
captionOptional accessible matrix caption; defaults to the Section title
css_classextra CSS classes on outer section

Recommended presets are detailed-plan-matrix, simple-package-ledger, and guided-best-fit; package-decision-table remains a compatible matrix alias.

BEM classes

  • foundry-pricing-comparison
  • foundry-pricing-comparison__inner
  • foundry-pricing-comparison__matrix
  • foundry-pricing-comparison__criterion
  • foundry-pricing-comparison__ledger
  • foundry-pricing-comparison__ledger-plan
  • foundry-pricing-comparison__guided
  • foundry-pricing-comparison__focus-plan
  • foundry-pricing-comparison__alternatives
  • foundry-pricing-comparison__footnote
  • foundry-pricing-comparison__title

pricing-tiers

Minimum required: tiers — everything else is optional. Present two or three offers with truthful price meaning, visible fit, concrete inclusions, and an accurate next step. Use pricing-comparison instead when visitors must compare every plan against the same criteria.

sections:
- type: pricing
  id: pricing-tiers-example
  design:
    preset: conditional-featured
  content:
    eyebrow: "Ways to begin"
    title: "Choose by the support you need"
    introduction: "Prices, cadence, material conditions, and fit remain visible."
    tiers:
      - key: focused
        name: "Focused start"
        price: "$900"
        cadence: "one-time"
        price_note: "Example price · taxes not included"
        description: "A bounded package for one defined question."
        best_for: "A team that needs a clear starting point."
        includes:
          - "Written intake"
          - "Prioritized direction brief"
      - key: partnership
        name: "Working partnership"
        price: "$2,400"
        cadence: "one-time"
        price_note: "Example price · scope agreed in writing"
        description: "Shared working time for connected decisions."
        best_for: "A team coordinating several related decisions."
        badge: "Conditional fit"
        featured: true
        highlight_reason: "This may fit when the team needs a live session and a second scheduled review."
        includes:
          - "One live working session"
          - "Two scheduled review rounds"
        action:
          text: "Review the fit"
          url: "#pricing-tiers-example"

Design options

FieldDetails
variantsgrid, featured, stacked
variantgrid | featured | stacked — Grid keeps credible choices equal; Featured emphasizes only a tier with featured: true and a visible highlight_reason; Stacked gives longer inclusions an open ledger
css_classextra CSS classes on outer section

Prefer the intent presets equal-choice-grid, conditional-featured, and expanded-inclusions. An optional tier action needs both text and a real url; Foundry omits incomplete actions instead of rendering a placeholder. The source-linked Visual Example at /pricing-tiers-directions/{equal-choices,conditional-fit,inclusion-ledger}/ shows materially different Structured Clarity, Immersive Atmosphere, and Editorial Narrative outcomes from the same portable contract.

BEM classes

  • foundry-pricing-tiers
  • foundry-pricing-tiers__inner
  • foundry-pricing-tiers__header
  • foundry-pricing-tiers__eyebrow
  • foundry-pricing-tiers__title
  • foundry-pricing-tiers__introduction
  • foundry-pricing-tiers__collection
  • foundry-pricing-tiers__tier
  • foundry-pricing-tiers__identity
  • foundry-pricing-tiers__badge
  • foundry-pricing-tiers__name
  • foundry-pricing-tiers__description
  • foundry-pricing-tiers__price-line
  • foundry-pricing-tiers__price
  • foundry-pricing-tiers__cadence
  • foundry-pricing-tiers__price-note
  • foundry-pricing-tiers__fit-reason
  • foundry-pricing-tiers__best-for
  • foundry-pricing-tiers__features
  • foundry-pricing-tiers__feature
  • foundry-pricing-tiers__action
  • foundry-pricing-tiers__button
  • foundry-pricing-tiers__empty

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

FieldDetails
variantsNone (single style)
css_classextra CSS classes on outer section

BEM classes

  • foundry-prose-panel
  • foundry-prose-panel__content
  • foundry-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

FieldDetails
variantsaccent-bar, filled, oversized, minimal
variantaccent-bar | filled | oversized | minimal — pullquote styling
aligncenter | left — quote alignment
css_classextra CSS classes on outer section

BEM classes

  • foundry-pullquote
  • foundry-pullquote__attribution
  • foundry-pullquote__box
  • foundry-pullquote__inner
  • foundry-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

FieldDetails
variantscentered, left, large
variantcentered | left | large — quote presentation
css_classextra CSS classes on outer section

BEM classes

  • foundry-quote
  • foundry-quote__author-text
  • foundry-quote__author-wrap
  • foundry-quote__figure
  • foundry-quote__inner
  • foundry-quote__mark
  • foundry-quote__meta
  • foundry-quote__text

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

FieldDetails
variantscards, compact
viewcards | compact — related links layout
css_classextra CSS classes on outer section

BEM classes

  • foundry-related-posts
  • foundry-related-posts__card
  • foundry-related-posts__compact
  • foundry-related-posts__grid
  • foundry-related-posts__inner
  • foundry-related-posts__title

relationship-map

Minimum required: title — everything else is optional.

Renders a bounded set of related graph nodes around the current page’s graph.key or an explicit content.node_key. Relationship and result-kind filters keep the surface contextual instead of exposing a raw graph canvas.

sections:
  - block: relationship-map
    id: related-paths
    content:
      title: "Explore related paths"
      direction: incoming
      relationships: ["explores", "can-pair-with"]
      result_kinds: ["category", "option", "resource"]
      limit: 6

Design options

FieldDetails
content.directionoutgoing | incoming | both — relationship direction from the current node; bidirectional edges remain visible from either side
variantgrid | compact — related-node presentation
css_classextra CSS classes on outer section

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

FieldDetails
variantsNone (single style)
css_classextra CSS classes on outer section

BEM classes

  • foundry-resource-downloads
  • foundry-resource-downloads__grid
  • foundry-resource-downloads__inner
  • foundry-resource-downloads__item
  • foundry-resource-downloads__link
  • foundry-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

FieldDetails
titleoptional heading rendered above the rich text body
dropcaptrue | false — show an editorial drop cap on the first paragraph when variant is magazine

Design options

FieldDetails
variantscentered, wide, two-column, magazine
variantcentered | wide | two-column | magazine — article layout
max_widthprose | md | lg | xl | full — container width
css_classextra CSS classes on outer section

BEM classes

  • foundry-rich-text
  • foundry-rich-text--centered
  • foundry-rich-text--magazine
  • foundry-rich-text--two-column
  • foundry-rich-text--wide
  • foundry-rich-text__body
  • foundry-rich-text__inner
  • foundry-rich-text__title

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

FieldDetails
variantsdefault, minimal
variantdefault | minimal — search panel style
show_imagestrue | false — include thumbnails in results
show_sub_resultstrue | false — include sub-result snippets
excerpt_lengthnumber of words shown in result excerpt
debouncedebounce in milliseconds before querying
filter_fieldscomma list or array of discovery filters to render
primary_filter_fieldoptional field rendered as tabs instead of a select
sort_optionsoptional sort values rendered as the full-page sort control
default_sortoptional default sort value; defaults to the first configured option
sync_query_to_urltrue | false — keep q and filter.* state in the URL
overlay_enabledtrue | false — enable the global quick-search overlay from this localized block
overlay_results_limitnumber of overlay results shown before linking to the full page
overlay_min_query_lengthminimum characters before the overlay starts querying
overlay_debounceoverlay debounce in milliseconds
css_classextra CSS classes on outer section

Optional content fields

FieldDetails
clear_filters_texttext for the filter reset control
clear_all_texttext for the summary-level reset that clears query and filters
sort_labellabel shown above the full-page sort control
sort_option_labelsmap of sort option labels keyed by sort value
filter_labelsmap of field labels keyed by filter name
filter_all_labelsmap of default option labels keyed by filter name
zero_state_titleheading shown in the full-page zero state
zero_state_textsupporting copy shown in the full-page zero state
zero_state_suggested_queries_labelheading above the full-page zero-state query chips
zero_state_quick_links_labelheading above the full-page zero-state quick links
zero_state_suggested_querieslist of { label, query } chips shown before any search runs
zero_state_quick_linkslist of { label, url, description } links shown in the full-page zero state
no_results_titleheading shown when the full-page search returns no matches
no_results_panel_textsupporting copy shown in the full-page no-results state
no_results_suggested_queries_labelheading above the full-page no-results query chips
no_results_actions_labelheading above the full-page no-results recovery links
no_results_suggested_querieslist of { label, query } chips shown when there are no matches
no_results_actionslist of { label, url, description } recovery links shown when there are no matches
overlay_titleheading shown in the quick-search overlay
overlay_textsupporting copy in the quick-search overlay
overlay_placeholderoverlay input placeholder
overlay_empty_textzero-state copy shown before a search runs
overlay_loading_textoverlay loading message
overlay_no_results_textoverlay empty-results message
overlay_view_all_textCTA label that opens the full search page
overlay_close_labelaccessible label for closing the overlay
overlay_shortcut_texthelper text for keyboard shortcuts
overlay_suggested_queries_labelheading above the overlay suggestion chips
overlay_quick_links_labelheading above the overlay quick links
overlay_recovery_labelheading above the overlay no-results actions
overlay_suggested_querieslist of { label, query } suggestion chips
overlay_quick_linkslist of { label, url, description } links shown in zero state
overlay_no_results_actionslist 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
  priority: normal
  kind: article
  section: blog
  topics: [neurotoxin]
  audience: [men]
  series: []
  featured: false
  order: 0
  summary: ""
  image: ""
  image_alt: ""

search.priority is the explicit ranking control: high renders Pagefind weight 2, normal leaves Pagefind’s default weight unchanged, and low renders weight 0.5. Core emits the normalized value as Pagefind metadata and as a filter, so browser evidence can confirm the effective relevance contract. Do not use Hugo’s general page weight as a search-ranking proxy.

Backward-compatible aliases still supported by the resolver:

  • search_exclude -> search.exclude
  • search_section -> search.section
  • audience -> search.audience
  • featured -> search.featured
  • featured_image / image / og_image -> search.image
  • page or param description/summary -> search.summary

Current Pagefind emission uses the normalized model for:

  • kind
  • topic
  • audience
  • series
  • section
  • category
  • author
  • tag
  • language

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. The full search block also renders up to eight curated quick links, or eligible site pages when none are configured, inside <noscript> so visitors retain a browse path without JavaScript.

BEM classes

  • foundry-search
  • foundry-search__app
  • foundry-search__eyebrow
  • foundry-search__inner
  • foundry-search__mount
  • foundry-search__noscript
  • foundry-search__panel
  • foundry-search__status
  • foundry-search__text
  • foundry-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
    title_tag: h2
    css_class: ''

Design options

FieldDetails
variantsNone (single style)
aligncenter | left — heading alignment
sizesm | md | lg | xl — heading scale
title_tagh1 | h2 — heading element for page-opening vs in-page use (default: h2)
css_classextra CSS classes on outer section

BEM classes

  • foundry-section-header
  • foundry-section-header__cta
  • foundry-section-header__eyebrow
  • foundry-section-header__inner
  • foundry-section-header__text
  • foundry-section-header__title

slideshow

Minimum required: slides — everything else is optional. Focused sequential media browsing for small, deliberately ordered image sets. Use it when one image should lead at a time. Use gallery or masonry-gallery when visitors need to scan and compare the collection.

The simple path is to choose a preset and author slides. quiet-fade is the calm default, editorial-sequence preserves complete assets and captions, and portfolio-card-stack creates a visibly layered portfolio treatment. All three inherit the active Theme Family and Customer Brand System; they do not require page-local renderer copies or a JavaScript framework.

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:
    preset: quiet-fade

The unenhanced HTML is a normal source-ordered media sequence. JavaScript adds the carousel behavior, arrow-key navigation, touch swiping, status updates, and optional autoplay. Autoplay is off by default, stops for reduced motion, pauses for hover or focus, and exposes a persistent Play/Pause control when enabled.

Choose the presentation

ChoiceVisitor experienceBest use
fadeOne quiet image dissolves into the next.restrained campaigns, properties, case-study highlights
slideThe authored sequence moves laterally and makes order explicit.walkthroughs, process imagery, editorial sequences
cardsThe active image sits above visible neighboring cards.portfolios and expressive creative work where the collection should feel tactile

overlay captions maximize the image, below captions protect longer or information-dense copy, and hidden is only appropriate when the images and their alternative text carry the complete meaning. Choose contain for diagrams, screenshots, artwork, and any asset that must not be cropped.

Design options

FieldDetails
variantsfade, slide, cards
variantfade | slide | cards — presentation and transition model; choose by visitor task, not decoration
aspect16:9 | 4:3 | 21:9 | auto — authored media frame ratio (default: 16:9)
media_fitcover | contain — crop photography or preserve the complete asset (default: cover)
media_positionnormalized image position — focal point for cropped media (default: center center)
caption_positionoverlay | below | hidden — caption treatment (default: overlay)
autoplaytrue | false — auto-advance slides; off by default and always user-pausable
intervalmilliseconds between automatic advances, clamped to at least 4000 (default: 5000)
show_dotstrue | false — direct slide chooser visibility (default: true)
show_arrowstrue | false — previous and next control visibility (default: true)
show_overlaytrue | false — compatibility alias; false maps to caption_position: hidden
css_classadvanced escape hatch for a declared site Extension; not the normal design path

BEM classes

  • foundry-slideshow
  • foundry-slideshow__arrow
  • foundry-slideshow__arrow--next
  • foundry-slideshow__arrow--prev
  • foundry-slideshow__dot
  • foundry-slideshow__dots
  • foundry-slideshow__empty
  • foundry-slideshow__frames
  • foundry-slideshow__header
  • foundry-slideshow__media
  • foundry-slideshow__image
  • foundry-slideshow__inner
  • foundry-slideshow__caption
  • foundry-slideshow__slide-title
  • foundry-slideshow__slide-text
  • foundry-slideshow__slide
  • foundry-slideshow__stack
  • foundry-slideshow__status
  • foundry-slideshow__controls
  • foundry-slideshow__autoplay
  • foundry-slideshow__control-icon
  • foundry-slideshow__empty-text
  • foundry-slideshow__subtitle
  • foundry-slideshow__title
  • foundry-slideshow__track
  • foundry-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

FieldDetails
variantscards, compact, editorial
variantcards | compact | editorial - card grid presentation
columns2 | 3 | 4 - desktop grid columns
aspectsquare | landscape | portrait | auto - media thumbnail ratio
sortmanual | newest | featured - item ordering
limitnumber of items to render; 0 renders all
privacy_modeclick-to-load | inline | link-only - third-party embed behavior
show_platformtrue | false - show platform label
show_datetrue | false - show published date
show_captiontrue | false - show item caption
show_source_modetrue | false - show source mode badge
css_classextra CSS classes on outer section

BEM classes

  • foundry-social-preview-grid
  • foundry-social-preview-grid__body
  • foundry-social-preview-grid__caption
  • foundry-social-preview-grid__embed
  • foundry-social-preview-grid__embed-frame
  • foundry-social-preview-grid__embed-loader
  • foundry-social-preview-grid__empty
  • foundry-social-preview-grid__grid
  • foundry-social-preview-grid__image
  • foundry-social-preview-grid__inner
  • foundry-social-preview-grid__item
  • foundry-social-preview-grid__item-title
  • foundry-social-preview-grid__link
  • foundry-social-preview-grid__media
  • foundry-social-preview-grid__meta
  • foundry-social-preview-grid__placeholder
  • foundry-social-preview-grid__text
  • foundry-social-preview-grid__title
  • foundry-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

FieldDetails
variantsbuttons, icons, minimal
variantbuttons | icons | minimal — share control style
css_classextra CSS classes on outer section

BEM classes

  • foundry-social-share
  • foundry-social-share__button
  • foundry-social-share__button--copy
  • foundry-social-share__inner
  • foundry-social-share__button-inner
  • foundry-social-share__icon
  • foundry-social-share__label
  • foundry-social-share__sr-only
  • foundry-social-share__list
  • foundry-social-share__status
  • foundry-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

FieldDetails
variantsdark, light, brand
variantdark | light | brand — band palette
layoutgrid | editorial | rail — independent cards, open ruled evidence, or one compact related proof line
stats[].detailOptional visible source, timeframe, population, or qualification
css_classextra CSS classes on outer section

BEM classes

  • foundry-stats-band
  • foundry-stats-band--brand
  • foundry-stats-band--dark
  • foundry-stats-band--light
  • foundry-stats-band__grid
  • foundry-stats-band__inner
  • foundry-stats-band__item
  • foundry-stats-band__label
  • foundry-stats-band__subtitle
  • foundry-stats-band__title
  • foundry-stats-band__value

stats-grid

Minimum required: stats — everything else is optional. Use Stats Grid for a small set of factual metrics that help a visitor evaluate scale, experience, impact, or service quality. Use Stats Band for a short page transition and Comparison Table when values must be compared row by row. Never invent proof: detail can hold the date, scope, or qualification.

Recommended presets: evidence-cards, editorial-band, and brand-highlights.

sections:
- block: stats-grid
  id: stats-grid-example
  content:
    stats:
    - label: Returning clients
      value: 72%
      detail: Rolling 12 months, through June 2026
    subtitle: A few useful numbers, each with enough context to trust it.
    title: Evidence at a glance
  design:
    preset: evidence-cards

Design options

FieldDetails
variantsgrid, band, highlighted
variantgrid | band | highlighted — grid: 4-col centered cards (default); band: horizontal inline row, no card wrappers; highlighted: brand-accent colored cards
columns2 | 3 | 4 — maximum wide-layout columns; responsive reflow is automatic
css_classextra CSS classes on outer section

BEM classes

  • foundry-stats-grid
  • foundry-stats-grid__grid
  • foundry-stats-grid__header
  • foundry-stats-grid__icon
  • foundry-stats-grid__inner
  • foundry-stats-grid__item
  • foundry-stats-grid__detail
  • foundry-stats-grid__label
  • foundry-stats-grid__title
  • foundry-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 with a [portable link](/guide/)."
      icon: book-open
    subtitle: "Process context supports **portable Markdown**."
    title: Example title
  design:
    variant: cards
    columns: '3'
    show_icons: true
    show_marker: auto
    show_meta: auto
    css_class: ''

Design options

FieldDetails
variantscards, plain, numbered
variantcards | plain | numbered — cards: card per step (default); plain: no card background; numbered: large editorial step number above text, no badge circle
columns2 | 3 | 4 — grid columns
show_iconstrue | false — use step icon instead of numbers
show_markerauto | true | false — control the generated badge; auto hides it when the title already includes the matching number
show_metaauto | true | false — control the generated Step N footer; auto hides it when the title already includes the matching number
css_classextra CSS classes on outer section

content.subtitle and every content.steps[].text value are portable Markdown fields. They support links, emphasis, lists, and paragraphs through Foundry’s safe Markdown rendering path. Step headings and icon names remain escaped plain strings. content.steps[].icon uses a registered Foundry icon name and appears only when design.show_icons is enabled. The generated Step N label is a Core-owned localized interface string, not hidden authorable copy.

BEM classes

  • foundry-steps
  • foundry-steps__content
  • foundry-steps__grid
  • foundry-steps__inner
  • foundry-steps__item
  • foundry-steps__item-inner
  • foundry-steps__item-meta
  • foundry-steps__item-text
  • foundry-steps__item-title
  • foundry-steps__number
  • foundry-steps__subtitle
  • foundry-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

FieldDetails
variantssidebar, inline, compact, chapter-index
variantsidebar | inline | compact | chapter-index — TOC container style
depth2 | 3 — heading depth when auto-generating
numberedtrue | false — ordered list vs unordered list
mobilecompact | expanded — compact sticky mobile toggle vs always-open list
progresstrue | false — show the scroll progress rail inside the widget
stickytrue | false — keep the widget pinned on larger viewports
css_classextra CSS classes on outer section

BEM classes

  • foundry-table-of-contents
  • foundry-table-of-contents__auto
  • foundry-table-of-contents__current
  • foundry-table-of-contents__head
  • foundry-table-of-contents__inner
  • foundry-table-of-contents__item
  • foundry-table-of-contents__link
  • foundry-table-of-contents__list
  • foundry-table-of-contents__panel
  • foundry-table-of-contents__progress
  • foundry-table-of-contents__title
  • foundry-table-of-contents__toggle
  • foundry-table-of-contents__widget
  • foundry-table-of-contents__widget--chapter-index

tabs

Minimum required: tabs — everything else is optional. Tabbed content block for switching between related panels.

Visitor job: let a visitor switch among a small set of equivalent views without navigating away or comparing them simultaneously. Use Accordion for long answers on narrow screens, a Comparison Table when differences must stay visible together, and ordinary headings when the content is sequential.

foundry-tabs__inner owns its width, centering, and gutters without a utility stylesheet. Set --foundry-tabs-container-max when tabs should share a wider lane with adjacent Features, Media Sequence, or Media Text blocks; do not rewrite width, margin, and padding selectors in the consumer.

Before JavaScript initializes, every panel remains visible in normal source order. The fingerprinted Core controller then applies the tab pattern, hidden states, click activation, Home/End, and orientation-aware arrow keys. This keeps essential content available under a strict CSP and without JavaScript.

sections:
- block: tabs
  id: tabs-example
  content:
    tabs:
    - label: Overview
      text: Tab content.
    title: Example title
  design:
    variant: underline
    css_class: ''
PresetBest starting point
editorial-underlinequiet reading-oriented content switcher
compact-pillsshort labels, filters, or compact service views
guided-sidebarthree or more substantial panels needing clear wayfinding

Design options

FieldDetails
variantsunderline, pills, bordered
variantunderline | pills | bordered — tab trigger style
layouthorizontal | sidebar — horizontal trigger row or desktop navigation/panel split
css_classextra CSS classes on outer section

BEM classes

  • foundry-tabs
  • foundry-tabs__controls
  • foundry-tabs__empty
  • foundry-tabs__inner
  • foundry-tabs__panel
  • foundry-tabs__panels
  • foundry-tabs__tab
  • foundry-tabs__tablist
  • foundry-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

FieldDetails
variantsgrid, compact, list
variantgrid | 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_classextra CSS classes on outer section

BEM classes

  • foundry-team-grid
  • foundry-team-grid__card
  • foundry-team-grid__grid
  • foundry-team-grid__inner
  • foundry-team-grid__name
  • foundry-team-grid__role
  • foundry-team-grid__title

testimonials

Minimum required: testimonials — everything else is optional. Use Testimonials for a small, static set of accurately attributed voices. Use Testimonials Carousel only when the set is long enough to justify interaction, and Case Studies when proof needs context, method, and outcome. Optional source links let visitors verify public quotes.

Recommended presets: trusted-voices, lead-story, and editorial-voices.

sections:
- block: testimonials
  id: testimonials-example
  content:
    subtitle: Example value
    testimonials:
    - quote: The team made every decision understandable and the result feels like us.
      author: Client Name
      role: Project client
      source_url: /work/client-story/
      source_label: Read the client story
    title: What clients remember
  design:
    preset: lead-story

Design options

FieldDetails
variantsgrid, featured, stacked
variantgrid | featured | stacked — grid: 3-col card grid (default); featured: first quote large + 2-col supporting; stacked: single centered column
css_classextra CSS classes on outer section

BEM classes

  • foundry-testimonials
  • foundry-testimonials__attribution
  • foundry-testimonials__avatar
  • foundry-testimonials__author
  • foundry-testimonials__collection
  • foundry-testimonials__header
  • foundry-testimonials__inner
  • foundry-testimonials__item
  • foundry-testimonials__mark
  • foundry-testimonials__person
  • foundry-testimonials__quote
  • foundry-testimonials__role
  • foundry-testimonials__source
  • foundry-testimonials__subtitle
  • foundry-testimonials__title

Minimum required: testimonials — everything else is optional. Use Testimonials Carousel for several approved voices when a static grid would be too dense. It uses focusable native horizontal scrolling, never rotates automatically, and keeps every quote and attribution in source order without JavaScript. Use Testimonials for a small set that should be compared at once; use Case Studies when proof needs method, context, and outcome.

Recommended presets: story-reel, lead-voice, and compact-proof-rail.

Copy only exact approved wording. Confirm attribution and portrait permission, provide a public source when one exists, and include rating only when the source explicitly supplies that score. Foundry does not infer ratings from sentiment.

sections:
- type: testimonials
  style: carousel
  id: approved-client-voices
  content:
    eyebrow: Client reflections
    title: What changed after the work
    subtitle: Each quote is shown in approved wording with its public context.
    testimonials:
    - quote: We left with three decisions we could act on Monday.
      author: Mara Chen
      role: Operations lead
      rating: 5
      source_url: /work/mara-chen/
      source_label: Read the client story
  design:
    preset: story-reel
    show_rating: true

Design options

FieldDetails
variantscards, spotlight, compact
variantcards | spotlight | compact — balanced evidence sequence, lead-voice composition, or open compact quote rail
show_ratingtrue | false — show an approved numeric rating when present; never infer one from quote sentiment
show_iconstrue | false — show or hide the decorative quotation mark
css_classextra CSS classes on outer section

BEM classes

  • foundry-testimonials-carousel
  • foundry-testimonials-carousel__attribution
  • foundry-testimonials-carousel__author
  • foundry-testimonials-carousel__avatar
  • foundry-testimonials-carousel__cue
  • foundry-testimonials-carousel__cue-line
  • foundry-testimonials-carousel__empty
  • foundry-testimonials-carousel__eyebrow
  • foundry-testimonials-carousel__header
  • foundry-testimonials-carousel__inner
  • foundry-testimonials-carousel__item
  • foundry-testimonials-carousel__mark
  • foundry-testimonials-carousel__person
  • foundry-testimonials-carousel__quote
  • foundry-testimonials-carousel__quote-area
  • foundry-testimonials-carousel__rating
  • foundry-testimonials-carousel__role
  • foundry-testimonials-carousel__source
  • foundry-testimonials-carousel__subtitle
  • foundry-testimonials-carousel__title
  • foundry-testimonials-carousel__track
  • foundry-testimonials-carousel__viewport

timeline

Minimum required: events — everything else is optional. Chronological Section for history, roadmaps, schedules, phases, and archives.

Every presentation renders the explicit source order as a semantic ordered list. Choose by the visitor’s reading job: use a milestone story when context accumulates over time, a phase board when milestones need independent review, or a schedule register when repeated time labels need rapid scanning. Use Process for instructions and Onboarding Timeline for a person’s starting path.

Start with a named preset. Override design.variant only when the preset does not express the intended reading job; css_class is an advanced declared Extension escape hatch, not normal authoring.

sections:
  - type: timeline
    id: project-history
    design:
      preset: milestone-story
    content:
      title: "How the work developed"
      subtitle: "Milestones stay in explicit chronological source order."
      events:
        - date: "2024"
          title: "Foundation established"
          text: "The first portable contract was documented."
        - date: "2026"
          title: "Structured editing expanded"
          text: "Human Controls gained exact item-level preview mapping."
          badge: "Current"
          url: "/roadmap/"

Intent-named presets are milestone-story (vertical), phase-board (cards), and schedule-register (compact). The existing creative-exhibition-spine and milestone-timeline names remain compatible.

Content options

FieldDetails
events[].dateevent date or display range
events[].titleevent, exhibition, screening, launch, or talk title
events[].textvenue, location, or short event context
events[].badgeoptional status label such as Upcoming, Recent, or Archive
events[].urloptional event detail URL

Design options

FieldDetails
variantsvertical, cards, compact
variantvertical | cards | compact — narrative milestone spine, independent phase board, or ruled schedule/archive register
css_classadvanced escape hatch for a declared site Extension; not the normal design path

BEM classes

  • foundry-timeline
  • foundry-timeline--cards
  • foundry-timeline--compact
  • foundry-timeline--vertical
  • foundry-timeline__badge
  • foundry-timeline__content
  • foundry-timeline__date
  • foundry-timeline__empty
  • foundry-timeline__event-title
  • foundry-timeline__header
  • foundry-timeline__inner
  • foundry-timeline__item
  • foundry-timeline__link
  • foundry-timeline__list
  • foundry-timeline__marker
  • foundry-timeline__meta
  • foundry-timeline__subtitle
  • foundry-timeline__text
  • foundry-timeline__title

topic-chip-nav

Minimum required: items — everything else is optional. Topic chip navigation for quick route picking and optional gallery filtering. When filter is set, chips act as client-side filters against a filterable gallery. When url (or legacy route) is set, chips are normal links.

sections:
  - type: topic-chip-nav
    id: topic-chip-nav-example
    content:
      title: Choose your view
      items:
        - title: Read more
          url: /dc03-s12-article/
          icon: arrow-right
        - title: Launch proof
          filter: launch
          icon: sparkles
        - title: Baseline
          filter: baseline
    design:
      alignment: center

Content options

FieldDetails
titleoptional section heading introducing the chip row
itemsrequired ordered topic chips
items[].titlerequired chip label (legacy fallback support: items[].text)
items[].textoptional legacy label source when title is omitted
items[].urlroute destination for link-style chips
items[].routecompatibility alias for legacy route content
items[].filteroptional filter key for gallery filtering
items[].iconoptional icon name for the chip

Design options

FieldDetails
alignmentleft or center
targetoptional CSS selector for a filterable gallery target
css_classextra CSS classes on outer section

BEM classes

  • foundry-topic-chip-nav
  • foundry-topic-chip-nav--left
  • foundry-topic-chip-nav--center
  • foundry-topic-chip-nav__chip
  • foundry-topic-chip-nav__icon
  • foundry-topic-chip-nav__inner
  • foundry-topic-chip-nav__list
  • foundry-topic-chip-nav__title

trust-badges

Minimum required: items — everything else is optional. Show a concise set of current, supportable assurances with enough context to avoid turning a policy, standard, membership, or credential into a broader claim.

Use logo-trust for permissioned organization relationship logos. Use the trust-marks.certifications Section Style when the entire job is a formal certification set. Trust Badges is for mixed assurances that may need a plain category, qualification, or public source.

sections:
- block: trust-badges
  id: essential-assurances
  design:
    preset: essential-assurances
  content:
    title: "What is already decided before work begins"
    introduction: |
      These are operating commitments, not promises about a particular
      outcome. Review the linked policy when the detail matters.
    items:
      - name: "Written scope before work starts"
        kind: "Policy"
        context: "Deliverables, responsibilities, and change handling are documented."
        source_url: "/policies/project-scope/"
        source_label: "Review policy"
      - name: "Owner-controlled publishing"
        kind: "Workflow"
        context: "No public release is implied by a preview or approval request."

name is the only required item field. kind, context, image, image_alt, source_url, and source_label are optional. Use an image only for a current seal or mark the site is authorized to display. The visible name always carries the assurance; an image never substitutes for accurate text.

Intent presets

  • essential-assurances — compact ruled strip for short operating facts.
  • approved-seals — image-led gallery for permissioned seals with visible names.
  • proof-ledger — numbered facts with qualifications and public sources.
  • trust-strip — retained compatibility alias for the original compact preset.

Design options

FieldDetails
variantchips (compact assurance strip), logos (approved seal gallery), or list (numbered proof ledger)
css_classAdvanced escape hatch for a declared site Extension; not the normal design path

Theme Families and Customer Brand Systems may art-direct public --foundry-trust-badges-* variables for measure, spacing, type, accent, rules, surfaces, and mark sizing. Core owns list semantics, visible names, source-link focus, responsive reading order, and safe fallback output.

BEM classes

  • foundry-trust-badges
  • foundry-trust-badges__context
  • foundry-trust-badges__copy
  • foundry-trust-badges__empty
  • foundry-trust-badges__header
  • foundry-trust-badges__inner
  • foundry-trust-badges__introduction
  • foundry-trust-badges__item
  • foundry-trust-badges__items
  • foundry-trust-badges__kind
  • foundry-trust-badges__logo
  • foundry-trust-badges__mark
  • foundry-trust-badges__marker
  • foundry-trust-badges__name
  • foundry-trust-badges__source
  • foundry-trust-badges__title

video-embed

Minimum required: title, url — everything else is optional. Accessible single-video control supporting native MP4/WebM playback and click-to-load, allowlisted YouTube/Vimeo handoffs. Use a repository-local poster so the page does not contact a provider before visitor action.

sections:
- block: video-embed
  id: video-embed-example
  content:
    eyebrow: "Two-minute field guide"
    title: "See the method before reading every detail"
    text: "Brief portable Markdown that explains why the video is useful."
    duration: "2:18"
    url: "/video/method.mp4"
    poster: "/images/method-poster.jpg"
    caption: "Optional context, attribution, or rights note."
    captions: "/captions/method-en.vtt"
    captions_language: "en"
    captions_label: "English"
    transcript: "A corrected descriptive transcript including important speech, sound, and visuals."
  design:
    preset: guided-feature

Provider source is equally simple and remains a normal URL:

sections:
  - block: video-embed
    id: campaign-film
    content:
      title: "How the work comes together"
      url: "https://www.youtube.com/watch?v=APPROVED_ID"
      poster: "/images/campaign-film-poster.jpg"
      transcript: "Corrected descriptive transcript."
    design:
      preset: cinema-screening

Without JavaScript, direct media retains native controls and provider media retains normal source links. Foundry generates provider iframe markup only after Play; do not paste iframe HTML into source.

Design options

FieldDetails
variantsstandard, cinema, card
variantstandard | cinema | card — video frame presentation
aspect16:9 | 4:3 | 1:1 | 9:16 — embed ratio
poster_fitcover | contain — poster and direct-media fit
autoplaytrue | false — silent looping for direct media only; remote providers still require visitor action
css_classextra CSS classes on outer section

Intent presets: guided-feature, cinema-screening, vertical-demonstration.

BEM classes

  • foundry-video-embed
  • foundry-video-embed__caption
  • foundry-video-embed__caption-status
  • foundry-video-embed__copy
  • foundry-video-embed__duration
  • foundry-video-embed__empty
  • foundry-video-embed__eyebrow
  • foundry-video-embed__figure
  • foundry-video-embed__frame
  • foundry-video-embed__iframe
  • foundry-video-embed__inner
  • foundry-video-embed__layout
  • foundry-video-embed__play
  • foundry-video-embed__play-copy
  • foundry-video-embed__play-icon
  • foundry-video-embed__poster
  • foundry-video-embed__poster-placeholder
  • foundry-video-embed__provider-link
  • foundry-video-embed__shell
  • foundry-video-embed__subtitle
  • foundry-video-embed__title
  • foundry-video-embed__transcript
  • foundry-video-embed__transcript-body
  • foundry-video-embed__transcript-link
  • foundry-video-embed__transcript-summary
  • foundry-video-embed__video
  • foundry-video-embed__veil

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_captions: Example value
    video_captions_language: en
    video_captions_label: English
    video_poster: Example value
    video_transcript: Descriptive transcript for visitors who do not use playback.
    video_url: Example value
  design:
    css_class: ''

Design options

FieldDetails
variantsNone (single style)
autoplaytrue | false — opt into muted looping playback; default false so the poster and native controls remain the safe floor
revealfade-up | fade-in | slide-left | slide-right | zoom-in | none — copy/media reveal style
parallaxtrue | false | speed — enable media-card parallax only when it supports the page job
kenburnstrue | false — enable image fallback cycling; reduced motion flattens the effect
scroll_cuetrue | false — show a reduced-motion-safe scroll cue
css_classextra CSS classes on outer section

BEM classes

  • foundry-video-hero
  • foundry-video-hero__actions
  • foundry-video-hero__frame
  • foundry-video-hero__inner
  • foundry-video-hero__media
  • foundry-video-hero__frame
  • foundry-video-hero__video
  • foundry-video-hero__poster
  • foundry-video-hero__overlay
  • foundry-video-hero__text
  • foundry-video-hero__title

Video Hero remains primitive-first in the editor-expansion contract. Its first-viewport-media floor keeps the poster or image fallback, native video controls, captions, descriptive transcript, and direct source link usable before autoplay or motion enhancement. It should not be promoted to a routine Control until that primitive has a complete preview, reset, and browser proof. The draft Visual Example at /video-hero-directions/ makes the current floor discoverable while preserving that limitation; it is not an intent preset or a release-ready Control claim.

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

FieldDetails
variants(none)
image_positionright | left — image column position
min_height80vh | 100vh | 70vh — section minimum height
bglight | dark | stone | cream — section palette
parallaxtrue | false — enable/disable image parallax
parallax_speednumber string — parallax speed (default: 0.2)
parallax_dir1 | -1 — parallax direction
kenburnstrue | false — enable/disable image Ken Burns
kenburns_intervalmilliseconds for multi-image crossfade
revealslide-right | slide-left | fade-up | fade-in — text reveal style
css_classextra CSS classes on outer section

BEM classes

  • foundry-full-bleed-split

motion-hero

Minimum required: title - everything else is optional.

Visitor job: understand the page’s defining promise, see an intentional visual world, and find the next useful action within the first viewport.

Use motion-hero when media and controlled movement materially strengthen the opening. Use hero for a faster, quieter introduction, or video-hero when a specific video is the essential medium. Do not add parallax or Ken Burns simply because the controls exist: the complete message must work as static HTML first.

Start with a named preset. Each one selects a complete composition; most pages should only need to adjust the image crop and copy.

sections:
- block: motion-hero
  id: motion-hero-example
  design:
    preset: cinematic-opening
    object_position: center center
    mobile_object_position: 58% center
  content:
    eyebrow: A defining opening
    title: Atmosphere with a clear next step.
    text: Give the visitor one promise, a considered visual world, and an obvious route forward.
    background_images:
    - src: /images/motion-hero-1.jpg
      position: center center
      kenburns_preset: in
    - src: /images/motion-hero-2.jpg
      position: 60% center
      kenburns_preset: out-right
    primary_action:
      text: Explore the experience
      url: /experience/
    secondary_action:
      text: Read the story
      url: /story/
PresetCompositionBest for
cinematic-openingCentered, full-bleed focusHospitality, launches, destinations, defining brand moments
editorial-revealSplit canvas with independent copy and media spaceStudios, founder stories, editorial services, authored collections
campaign-evidenceBroad lower-third proposition with proof and actionsCampaigns, high-consideration offers, product or service launches
aesthetics-resultsWarm editorial treatment with proof badgesResults-oriented stories where careful expectation language matters

The renderer validates every enumerated control, focal point, motion speed, and timing value before output. Motion is progressive enhancement: copy and actions remain normal HTML; the first background image remains visible without JavaScript; later images are lazy; focus remains visible; pointer targets meet the Foundry touch floor; and reduced-motion preferences flatten reveal, parallax, and Ken Burns behavior.

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

FieldDetails
variantscinematic, editorial, campaign
variantcinematic | editorial | campaign — full-bleed focus, split editorial reveal, or broad campaign lower-third
parallaxtrue | false | {speed 0.0-0.35} — optional progressive background parallax; default false
parallax_speed0.0-0.35 — normalized background parallax speed; compatibility alias for parallax_back_speed (default: 0.25)
parallax_dirup | down | 1 | -1 — normalized background parallax direction (default: up)
kenburnstrue | false - enable/disable Ken Burns background cycling
kenburns_presetin | out | in-left | in-right | out-left | out-right — default Ken Burns preset for images without item presets
scroll_cuetrue | false — show/hide reduced-motion-safe scroll cue; compatibility alias for scroll_nudge
show_badgestrue | false - show/hide the selected badge row; default false
overlay_strengthnone | soft | medium | strong - overlay shade strength
overlay_toneneutral | warm | cool | brand - overlay color mood
overlay_shapefull | left | right | bottom - directional scrim shape for readable copy over busy media
object_positionCSS object-position value for background images without item-level position (default: center center)
mobile_object_positionCSS object-position override for small screens
content_aligncenter | left | right - hero copy and action alignment
content_positioncenter | upper | lower - vertical copy placement
content_widthnarrow | standard | wide - copy measure and action row width
content_panelnone | glass | solid - optional readability panel behind copy
action_stylesolid | glass | minimal - CTA treatment
badge_positionbottom | under-copy - badge row placement
caption_positionbottom-right | bottom-left | under-copy - optional content.caption/media_caption placement
ambient_layerstrue | false - toggle decorative parallax ambient layers independently from media parallax
min_heightscreen | large | medium - hero minimum height
mobile_min_heightscreen | large | medium | compact | CSS length - optional small-screen minimum height override
scroll_nudgetrue | false - compatibility alias for scroll_cue
badge_styleproof | none | engine - customer proof badges, no badges, or development-only engine labels; default none
parallax_back_speednumber string - compatibility alias for parallax_speed
parallax_front_speednumber string - foreground parallax speed (default: 0.45)
parallax_front_dir1 | -1 - foreground parallax direction
kenburns_intervalmilliseconds between background image crossfades (default: 6000)
kenburns_transitionmilliseconds for crossfade duration between images (default: 1400)

BEM classes

  • foundry-motion-hero
  • foundry-motion-hero__content
  • foundry-motion-hero__message
  • foundry-motion-hero__media
  • foundry-motion-hero__image
  • foundry-motion-hero__actions
  • foundry-motion-hero__action
  • foundry-motion-hero__badges
  • foundry-motion-hero__caption
  • foundry-motion-hero__scroll
  • foundry-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

FieldDetails
variantseditorial
varianteditorial — signature-card and grouped-panel presentation
nav_stylepills — desktop category trigger style
css_classextra CSS classes on outer section

Notes

  • signature_items should normally contain 3-6 cards.
  • Use signature_items_data, categories_data, and included_items_data when the same amenity story needs to stay aligned across a retreat page, photo-tour page, and downstream proof fixture.
  • categories should normally contain 3-5 grouped panels.
  • categories[].items may be either simple strings or objects with title and text.
  • When a category lacks dedicated photography, omit image and provide icon; 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-amenities
  • foundry-property-amenities__inner
  • foundry-property-amenities__signature-grid
  • foundry-property-amenities__signature-card
  • foundry-property-amenities__controls
  • foundry-property-amenities__tab
  • foundry-property-amenities__panel
  • foundry-property-amenities__mobile-stack
  • foundry-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

FieldDetails
variantseditorial
varianteditorial — grouped photo tour with featured image and supporting grid
nav_stylepills — desktop category trigger style
css_classextra CSS classes on outer section

Notes

  • categories should normally contain 4-7 groups.
  • Use categories_data when the same photo-tour structure should power a full tour page and smaller previews elsewhere.
  • categories[].images should 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.
  • limit can trim the number of categories when you want a shorter preview from the same shared source.

BEM classes

  • foundry-property-photo-tour
  • foundry-property-photo-tour__inner
  • foundry-property-photo-tour__controls
  • foundry-property-photo-tour__tab
  • foundry-property-photo-tour__panel
  • foundry-property-photo-tour__featured
  • foundry-property-photo-tour__thumb-grid
  • foundry-property-photo-tour__mobile-stack
  • foundry-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

FieldDetails
variantscards, editorial
variantcards | editorial — listing presentation
columns2 | 3 — grid columns
item_revealfade-up | zoom-in | fade-in — per-card reveal animation
css_classextra CSS classes on outer section

BEM classes

  • foundry-property-cards
  • foundry-property-cards__inner
  • foundry-property-cards__eyebrow
  • foundry-property-cards__title
  • foundry-property-cards__text
  • foundry-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
    object_position: center center
    mobile_object_position: center top
    scroll_cue: true

Design options

FieldDetails
variants(none)
overlaydark | light | deep | warm — hero overlay treatment
parallaxtrue | false | {speed 0.0-0.35} — enable/disable background parallax
parallax_speed0.0-0.35 — parallax speed (default: 0.35)
parallax_dirup | down | 1 | -1 — parallax direction (default: up)
kenburnstrue | false — enable/disable Ken Burns motion
kenburns_presetin | out | in-left | in-right | out-left | out-right — default Ken Burns preset for images without item presets
kenburns_intervalmilliseconds for multi-image crossfade (default: 6000)
kenburns_transitionmilliseconds for crossfade duration between images (default: 1400)
text_alignleft | center — content alignment
min_height100vh | 80vh | 70vh — section minimum height
object_positionCSS object-position value for property images, poster, and video (default: center center)
mobile_object_positionCSS object-position override for property media on small screens
scroll_cuetrue | false — show/hide reduced-motion-safe scroll cue
show_scrolltrue | false — compatibility alias for scroll_cue

BEM classes

  • foundry-property-hero
  • foundry-property-hero__content
  • foundry-property-hero__inner
  • foundry-property-hero__image
  • foundry-property-hero__video
  • foundry-property-hero__actions
  • foundry-property-hero__action
  • foundry-property-hero__stats
  • foundry-property-hero__scroll
  • foundry-scroll-cue

Creating a new block

  1. Copy layouts/partials/blocks/_template.html to layouts/partials/blocks/[block-name].html.
  2. Replace placeholders and implement the block using standard context extraction and BEM classes.
  3. Core blocks register in data/foundry/block-registry.yaml. A consumer site registers a genuinely site-specific extension in data/foundry/site-block-registry.yaml; this keeps the Core registry mounted and makes the extension visible to shared rendering and validation.
  4. Document variants/design fields in data/foundry/block-options.yaml.
  5. Add usage examples in /docs/BLOCKS.md and your demo content.
  6. 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.

FlagDefault(s) in templatesBlocks using it
animationstruestats-band
experimentalHerofalsehero
uiCardstruecase-studies, certification-badges, cta, faq-cta, features, illustration-panel, pricing-comparison, pricing-tiers, resource-downloads, steps, testimonials-carousel, trust-badges

Static Pagefind search

Search Foundry documentation

Type at least two characters
Search the full documentation system

Results stay inside this build profile and can be filtered by version, component, audience, and lifecycle.

By LikeStyle
Site details
Site release
Foundry Documentation 1.3.9
Foundry bundle
v1.1.11
Foundry Core
v1.1.11
Credit
Powered by Foundry, a LikeStyle product.