Block documentation

Navbar Flyout

Explore navbar_flyout as a composable block: contract metadata, multiple configuration defaults, and every theme recipe rendered against the same sample content.

10 configurations19 recipes4 data recipesnative
Configurations10
Recipes19
Data recipes4
Contracts1
Open first recipe
Runtime

native

Shared React runtime support for this block type.

Contracts

1

Capture contracts currently registered for this block type.

Family

bethsaida-parity

Bethsaida legacy block has a dedicated semantic runtime wrapper for migration, theme lab QA, and static/runtime parity.

Grade A defaults

Quality evidence for this block

7/7 covered
covered

Contract backed

Schemas, manifest metadata, editor fields, accessibility, and i18n remain attached to the block type.

  • 1 registered contract
  • Ensemble schema id
  • editor metadata pending
covered

Runtime rendered

The documentation route renders through native, alias, wrapped, or nonvisual runtime support without generic fallback UI.

  • native
  • Visible runtime preview
covered

Configuration coverage

Default, media, background, gradient, colorway, dense, and editorial configurations are all visible.

  • 10 configuration previews
  • Cloud Elephants colorways
  • image, background, gradient, dense, editorial
covered

Recipe coverage

Every Theme Studio recipe has a focused page and an inline preview for this block.

  • 19 recipe previews
  • focused recipe routes
  • previous and next recipe navigation
covered

Data composition

CMS authors can lift structured payload recipes for default, media, operator, and stress contexts.

  • 4 cloneable data recipes
  • composition_recipe metadata
  • composition passports
  • visual polish checks
  • default provenance maps
  • content edit bundles
  • recipe compatibility maps
  • cloneable payloads
covered

State readiness

Default, empty, pending, active, invalid, and disabled states are documented for every cloneable block recipe.

  • 24 state readiness entries
  • default, empty, pending, active, invalid, disabled
  • all recipe states documented
covered

Resilience proof

Media replacement, long copy, and awkward content tolerance are represented in the documented defaults.

  • replaceable Cloud Elephants media
  • long-copy tolerance
  • awkward-content tolerance
Configurations

Default, media, background, gradient, Cloud Elephants colorways, dense, and editorial treatments

Data recipes

Composable CMS payloads for default, media-ready, compact operator, and long-copy stress contexts

shadcn

Minimal Default

Polished SaaSdefault

Smallest useful CMS payload with the block type, stable id, editable props, and recipe-aware appearance.

Component anatomy

Minimal Default anatomy

5 regions
Surfaceouter layout and background
required2 fields4 tokens

navbar_flyout uses recipe surface tokens to keep the outer frame styled and composable.

background, panel, panelElevated, border
Copyheadings, body copy, labels, and supporting text
required5 fields2 tokens

Copy fields map to primary and muted text roles so editors can change words without restyling the block.

text, textMuted
Mediareplaceable image, iframe, embed, avatar, logo, or gallery area
optional1 fields2 tokens

Media fields stay isolated from copy and action regions so replacement assets preserve the recipe layout.

panelElevated, border
ActionsCTA, link, event, and navigation affordances
optional19 fields4 tokens

Action regions use recipe button and accent tokens while preserving href or event payloads.

button, buttonText, signal, uplink
Feedbackstatus, validation, selected, loading, and disabled evidence
required0 fields3 tokens

Feedback regions tie state-readiness evidence to visible recipe status treatments.

badge, badgeText, signal
Recipe passport

Minimal Default passport

high
Fitquick-start

Use when a navbar_flyout block should land quickly with balanced Polished SaaS defaults.

Editable fields24/25

Minimal Default is a high-complexity quick-start recipe with 5 documented composition slots.

Interactions8 actions / 0 controls

3 required regions, 2 optional regions.

Slots
Surface / 1/2Copy / 5/5Media / 1/1Actions / 13/19Feedback / 0/0
Replacement guidance
  • Keep Polished SaaS recipe tokens as the source of visual styling for the surface, text, controls, and actions.
  • Replace media URLs through the CMS media library and preserve alt, title, provider, or label fallbacks.
  • Verify each action keeps either a valid href or canonical event name plus an editor-visible label.
  • No input controls are required; keep the recipe focused on its documented display regions.
  • The recipe does not require repeatable collection editing.
Publish checklist
  • Validate navbar_flyout against its block contract before publishing.
  • 3 required anatomy regions remain present: surface, copy, feedback.
  • 24/25 builder fields are CMS-editable or intentionally locked.
  • Interactive labels, target size, href/event wiring, and disabled states have been reviewed.
  • Phone, tablet, and desktop responsive behavior maps have been reviewed for wrapping and overflow.
  • Contrast checks meet the AA recipe target.
Recipe fit

Minimal Default recipe fit

6 axes
Page contextpage / primary
splashlistingblogproduct-pageservice-pageabout-page

navbar_flyout is best composed into splash, listing, blog, and related pages.

6 page types mapped for navbar_flyout.Choose the first matching page type before editing copy, media, or actions so the recipe starts in the right narrative context.
Section rolelayout / primary
site-navigationconversionmediacontent

navbar_flyout can act as site-navigation, conversion, media within a composed page.

5 anatomy regions produce 4 section roles.Place the block where its required anatomy regions have enough room before compressing it into dense page slots.
Content modelcontent / specialized
copy-ledmedia-ledcta-led

Minimal Default composition passport is copy-led, media-led, cta-led for CMS composition.

24/25 fields are editable across 3 content models.Keep the content model stable when replacing defaults; do not turn a repeatable or media-led recipe into unrelated ad hoc content.
Interaction modelinteraction / primary
primary-linklink-linknavigation-linksecondary-link

navbar_flyout carries primary-link, link-link, navigation-link, secondary-link interaction affordances.

8 action surfaces and 0 control surfaces mapped.Review href, event, input, required, and disabled-state evidence before publishing an interactive recipe.
Authoring fitauthoring / specialized
quick-starthigh-complexity17-high-care-replacements

navbar_flyout uses quick-start authoring with high complexity.

25 default provenance items with 17 high-care replacements.Use the default provenance map before cloning the recipe into CMS content or agent-generated page data.
Responsive fitresponsive / primary
single-column stackwide single-column compositioncontained composition rowmin-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke.

navbar_flyout has explicit phone, tablet, and desktop compatibility evidence for composed pages.

3 responsive behavior maps cover phone, tablet, and desktop composition.Review phone wrapping, tablet mid-width balance, and desktop density before adding nested content, longer labels, or extra media.
Visual polish

Minimal Default visual polish

6/6
Surface rhythmlayout

navbar_flyout keeps a stable recipe surface with panel, border, and spacing roles instead of ad hoc wrappers.

default treatment uses comfortable density and 14px radius base.background, panel, panelElevated, border
Type hierarchytypography

Primary, muted, and badge text roles stay distinct enough for headings, body copy, metadata, and helper text.

6/6 contrast checks pass the AA target.text, textMuted, badgeText
Action clarityinteraction

Interactive regions use recipe action/control tokens and preserve labels, hrefs, events, required state, and options.

8 action surfaces and 0 control surfaces mapped.button, buttonText, control, controlText, signal, uplink
Media treatmentmedia

Replaceable media stays framed separately from copy and action regions so asset swaps preserve the layout.

Media region is isolated with replaceable fields.panelElevated, border, textMuted
State feedbackstate

Feedback, selected, loading, invalid, and disabled treatments use visible state evidence instead of color-only meaning.

6 state-readiness entries include default, empty, pending, active, invalid, disabled.badge, badgeText, signal
Responsive balanceresponsive

Phone, tablet, and desktop defaults have explicit stack, wrap, media, and overflow policies for the recipe.

single-column stack phone behavior, wide single-column composition tablet behavior, and contained composition row desktop behavior documented.panel, border, control
Default provenance

Minimal Default default provenance

25 fields
locked-tokenrequires-action-targetrequires-alt-textsafe-to-edit
  • Appearanceappearance
    locked-tokenmedium

    Keep visual styling aligned to Polished SaaS recipe tokens unless the recipe itself changes.

    Polished SaaS recipe tokens
  • Rolerole
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Topologytopology
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Densitydensity
    locked-tokenmedium

    Keep visual styling aligned to Polished SaaS recipe tokens unless the recipe itself changes.

    Polished SaaS recipe tokens
  • Containercontainer
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Logo Treatmentlogo_treatment
    requires-alt-textmedium

    Replace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful.

    Cloud Elephants placeholder media or CMS media library
  • Reciperecipe
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Brandbrand
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Linkslinks
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Links Item Labellinks[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Links Item Hreflinks[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Secondary Linkssecondary_links
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Secondary Links Item Labelsecondary_links[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Secondary Links Item Hrefsecondary_links[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Secondary Links Item Intentsecondary_links[].intent
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Utility Linksutility_links
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Utility Links Item Labelutility_links[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Utility Links Item Hrefutility_links[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Utility Links Item Intentutility_links[].intent
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Actionsactions
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Actions Item Labelactions[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Actions Item Hrefactions[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Actions Item Intentactions[].intent
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Behaviorbehavior
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Mobilemobile
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
Edit bundles

Minimal Default edit bundles

5 bundles
Copy bundlerequired / repeatable-items
actions[].labellinks[].labelrolesecondary_links[].labelutility_links[].label

Copy bundle groups 5 fields so CMS edits preserve the recipe shape and default polish.

cloneable block recipe payloadKeep the label paired with a valid href or canonical postEvent event name before publishing.
Media bundlerecommended / single-field
logo_treatment

Media bundle groups 1 field so CMS edits preserve the recipe shape and default polish.

Cloud Elephants placeholder media or CMS media libraryReplace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful.
Action bundlerecommended / repeatable-items
actionsactions[].hrefactions[].intentlinkslinks[].hrefsecondary_links+5

Action bundle groups 11 fields so CMS edits preserve the recipe shape and default polish.

CMS route, URL, or canonical postEvent pathKeep the label paired with a valid href or canonical postEvent event name before publishing.
Style bundleguarded / guarded-system
appearancedensity

Style bundle groups 2 fields so CMS edits preserve the recipe shape and default polish.

Polished SaaS recipe tokensKeep visual styling aligned to Polished SaaS recipe tokens unless the recipe itself changes.
Content bundlerequired / grouped-fields
behaviorbrandcontainermobilerecipetopology

Content bundle groups 6 fields so CMS edits preserve the recipe shape and default polish.

cloneable block recipe payloadCopy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.
CMS composition

Minimal Default fields

25 fields
actioncontentcopymediastyle
  • Appearanceappearance
    styleobject
  • Rolerole
    copystring
  • Topologytopology
    contentstring
  • Densitydensity
    stylestring
  • Containercontainer
    contentstring
  • Logo Treatmentlogo_treatment
    mediastring
  • Reciperecipe
    contentobject
  • Brandbrand
    contentobject
  • Linkslinks
    actionarray
  • Links Item Labellinks[].label
    copystringrepeated
  • Links Item Hreflinks[].href
    actionstringrepeated
  • Secondary Linkssecondary_links
    actionarray
  • Secondary Links Item Labelsecondary_links[].label
    copystringrepeated
  • Secondary Links Item Hrefsecondary_links[].href
    actionstringrepeated
  • Secondary Links Item Intentsecondary_links[].intent
    actionstringrepeated
  • Utility Linksutility_links
    actionarray
  • Utility Links Item Labelutility_links[].label
    copystringrepeated
  • Utility Links Item Hrefutility_links[].href
    actionstringrepeated
  • Utility Links Item Intentutility_links[].intent
    actionstringrepeated
  • Actionsactions
    actionarray
  • Actions Item Labelactions[].label
    copystringrepeated
  • Actions Item Hrefactions[].href
    actionstringrepeated
  • Actions Item Intentactions[].intent
    actionstringrepeated
  • Behaviorbehavior
    contentobject
  • Mobilemobile
    contentobject
CMS editing

Minimal Default editor guidance

24/25 editable
Copytext/rich-text editor
5/5 editablecopy

Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.

cloneable block recipe payload
Mediamedia picker with alt text
1/1 editablemedia

Media should use a replaceable URL plus meaningful alt, label, or title fallback.

Cloud Elephants placeholder media or CMS media library
Actionlink or event action editor
11/11 editableaction

Actions should resolve to a URL or event name with a human-readable label.

CMS route, URL, or canonical postEvent path
Styleappearance preset selector
1/2 editablestyle

Style fields should prefer recipe or appearance tokens over one-off inline values.

Polished SaaS recipe tokens
Contentplain content field
6/6 editablecontent

Content should remain serializable JSON and preserve the documented block contract.

cloneable block recipe payload
Default states

Minimal Default state readiness

6 states
DefaultInitial render with the cloneable recipe payload
coveredsurfacepaneltext

Polished SaaS tokens with default documentation treatment

The Polished SaaS recipe renders a contract-safe primary state for navbar_flyout.
EmptyRepeatable collections have zero items
coveredpaneltextMutedbadge

Reserved panel space with fallback copy or placeholder media

Repeatable fields are documented for add, remove, reorder, and item-level editing.
PendingDeferred content or preview loading
coveredcontroltextMutedprogressTrack

Neutral reserved frame with status copy and no layout shift

Static recipe payloads reserve the same documented frame while content is loading.
ActiveSelected action, active link, checked input, or open disclosure
coveredsignaluplinkbutton

Signal/uplink emphasis with visible selected-state chips

8 action surfaces and 0 control surfaces are mapped for selected-state review.
InvalidMedia URL or provider data is invalid
coveredwarningdangerborder

Warning/danger status treatment while preserving the block frame

Media guidance requires URL plus accessible fallback text for invalid or missing assets.
DisabledUnavailable action or temporarily disabled control
coveredcontroltextMutedborder

Muted affordance with preserved label, spacing, and hit-area rhythm

Interactive maps preserve labels and control roles so disabled states can stay understandable.
Controls and actions

Minimal Default actions and controls

8 surfaces
linknavigationprimarysecondary
Actions
  • Start buildingactions[0]
    primary#block-preview
  • Ensemble Headerbrand
    link#block-preview
  • Overviewlinks[0]
    navigation#block-preview
  • Templateslinks[1]
    navigation#block-preview
  • Pricinglinks[2]
    navigation#block-preview
  • Default Polishrecipe
    link#block-preview
  • Docssecondary_links[0]
    secondary#block-preview
  • Statusutility_links[0]
    secondary#block-preview
Controls

No input control is needed for this payload.

Recipe styling

Minimal Default style tokens

15 tokens
Page background#f7fbff
Panel surface#ffffff
Elevated surface#ffffff
Primary text#142033
Muted text#526174
Signal accent#166bff
Secondary accent#00a6a6
Border#d6dee8
Control surface#ffffff
Control text#142033
Button surface#166bff
Button text#ffffff
Badge surface#eef5ff
Badge text#174ea6
Font familyInter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif
Readability

Minimal Default contrast checks

6/6
Text on background15.73:1 / AAA
Text on panel16.35:1 / AAA
Muted text on panel6.32:1 / AA
Button text on button4.58:1 / AA
Control text on control16.35:1 / AAA
Badge text on badge7.15:1 / AAA
Accessibility proof

Minimal Default accessibility checks

WCAG 2.2 AA
Semantic structuresemantics / required

navbar_flyout keeps semantic wrappers and readable heading/copy structure in the runtime preview.

navigation/header/footer landmarks and labels
Keyboard and tap targetskeyboard / required

Interactive surfaces stay reachable, focusable, and recipe-styled without shrinking below expected touch affordances.

mapped actions/controls render as native focusable surfaces
Text alternativesmedia / required

Media-ready recipes expose replaceable alt text or accessible labels for images, logos, embeds, and placeholders.

media fields include alt/label/title fallbacks
Control labelsforms / contextual

No input controls are present, so there are no unlabeled fields to remediate.

no input controls in this payload
Status and motionstate / required

Recipe defaults avoid motion-only meaning and keep status text inspectable when state is present.

runtime evidence avoids hidden status-only content
Responsive proof

Minimal Default responsive behavior

3 viewports
Phone390px / single-column stack
1 colcomfortable

Polished SaaS stacks navbar_flyout into one phone column with comfortable spacing and bounded content.

min-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke.
Tablet768px / wide single-column composition
1 colcomfortable

Polished SaaS adapts navbar_flyout to 1 tablet column before expanding to the desktop layout.

tablet preview frames keep mid-width composition, wrap controls, and avoid horizontal overflow in the static catalog smoke.
Desktop1366px / contained composition row
1 colcomfortable

Polished SaaS gives navbar_flyout up to 1 desktop column while preserving recipe spacing.

desktop preview frames keep constrained widths, stable cards, and no horizontal overflow in the static catalog smoke.
Structured payload
{
  "id": "block-doc-navbar-flyout-data-minimal-default",
  "block_type": "navbar_flyout",
  "props": {
    "appearance": {
      "preset": "shadcn"
    },
    "role": "site",
    "topology": "split",
    "density": "comfortable",
    "container": "contained",
    "logo_treatment": "text",
    "recipe": {
      "id": "default-polish",
      "label": "Default Polish",
      "href": "#block-preview",
      "appearance": "shadcn"
    },
    "brand": {
      "label": "Ensemble Header",
      "href": "#block-preview",
      "logo": "https://storage.googleapis.com/msgsndr/T3RhpcTQAq7Qb47kPQAB/media/677815b8c290c684d5bf3fbd.png",
      "logo_alt": "Cloud Elephants Essential CTO service visual."
    },
    "links": [
      {
        "label": "Overview",
        "href": "#block-preview"
      },
      {
        "label": "Templates",
        "href": "#block-preview"
      },
      {
        "label": "Pricing",
        "href": "#block-preview"
      }
    ],
    "secondary_links": [
      {
        "label": "Docs",
        "href": "#block-preview",
        "intent": "secondary"
      }
    ],
    "utility_links": [
      {
        "label": "Status",
        "href": "#block-preview",
        "intent": "utility"
      }
    ],
    "actions": [
      {
        "label": "Start building",
        "href": "#block-preview",
        "intent": "primary"
      }
    ],
    "behavior": {
      "sticky": true,
      "active_path": "none",
      "surface": "solid"
    },
    "mobile": {
      "mode": "drawer",
      "toggle_label": "Menu",
      "safe_area": true
    }
  },
  "block_order": 1,
  "metadata": {
    "composition_recipe": {
      "id": "minimal-default",
      "intent": "default",
      "label": "Minimal Default",
      "recipe": "polished-saas",
      "source": "block-explorer",
      "quality_proof": [
        "composition"
      ],
      "composition_passport": {
        "id": "minimal-default",
        "label": "Minimal Default composition passport",
        "intent": "default",
        "recipe": "polished-saas",
        "authoring_mode": "quick-start",
        "complexity": "high",
        "fit": "Use when a navbar_flyout block should land quickly with balanced Polished SaaS defaults.",
        "required_regions": [
          "surface",
          "copy",
          "feedback"
        ],
        "optional_regions": [
          "media",
          "actions"
        ],
        "slots": [
          {
            "id": "surface",
            "label": "Surface",
            "required": true,
            "field_count": 2,
            "editable_count": 1,
            "token_roles": [
              "background",
              "panel",
              "panelElevated",
              "border"
            ],
            "summary": "navbar_flyout uses recipe surface tokens to keep the outer frame styled and composable."
          },
          {
            "id": "copy",
            "label": "Copy",
            "required": true,
            "field_count": 5,
            "editable_count": 5,
            "token_roles": [
              "text",
              "textMuted"
            ],
            "summary": "Copy fields map to primary and muted text roles so editors can change words without restyling the block."
          },
          {
            "id": "media",
            "label": "Media",
            "required": false,
            "field_count": 1,
            "editable_count": 1,
            "token_roles": [
              "panelElevated",
              "border"
            ],
            "summary": "Media fields stay isolated from copy and action regions so replacement assets preserve the recipe layout."
          },
          {
            "id": "actions",
            "label": "Actions",
            "required": false,
            "field_count": 19,
            "editable_count": 13,
            "token_roles": [
              "button",
              "buttonText",
              "signal",
              "uplink"
            ],
            "summary": "Action regions use recipe button and accent tokens while preserving href or event payloads."
          },
          {
            "id": "feedback",
            "label": "Feedback",
            "required": true,
            "field_count": 0,
            "editable_count": 0,
            "token_roles": [
              "badge",
              "badgeText",
              "signal"
            ],
            "summary": "Feedback regions tie state-readiness evidence to visible recipe status treatments."
          }
        ],
        "builder_field_count": 25,
        "editable_field_count": 24,
        "action_count": 8,
        "control_count": 0,
        "replacement_guidance": [
          "Keep Polished SaaS recipe tokens as the source of visual styling for the surface, text, controls, and actions.",
          "Replace media URLs through the CMS media library and preserve alt, title, provider, or label fallbacks.",
          "Verify each action keeps either a valid href or canonical event name plus an editor-visible label.",
          "No input controls are required; keep the recipe focused on its documented display regions.",
          "The recipe does not require repeatable collection editing."
        ],
        "publish_checklist": [
          "Validate navbar_flyout against its block contract before publishing.",
          "3 required anatomy regions remain present: surface, copy, feedback.",
          "24/25 builder fields are CMS-editable or intentionally locked.",
          "Interactive labels, target size, href/event wiring, and disabled states have been reviewed.",
          "Phone, tablet, and desktop responsive behavior maps have been reviewed for wrapping and overflow.",
          "Contrast checks meet the AA recipe target."
        ],
        "agent_notes": [
          "Prefer editing props fields described by the builder field map; metadata is evidence, not primary content.",
          "Preserve recipe_alignment token roles unless the page theme or recipe changes intentionally.",
          "Use the anatomy slots to compose or replace content without changing the block type."
        ],
        "summary": "Minimal Default is a high-complexity quick-start recipe with 5 documented composition slots."
      },
      "composition_passport_complexity": "high",
      "composition_passport_authoring_mode": "quick-start",
      "composition_passport_slots": [
        "surface",
        "copy",
        "media",
        "actions",
        "feedback"
      ],
      "composition_passport_check_count": 6,
      "visual_polish_check_count": 6,
      "visual_polish_pass_count": 6,
      "visual_polish_checks": [
        {
          "id": "surface-rhythm",
          "label": "Surface rhythm",
          "axis": "layout",
          "status": "ready",
          "token_roles": [
            "background",
            "panel",
            "panelElevated",
            "border"
          ],
          "evidence": "default treatment uses comfortable density and 14px radius base.",
          "summary": "navbar_flyout keeps a stable recipe surface with panel, border, and spacing roles instead of ad hoc wrappers."
        },
        {
          "id": "type-hierarchy",
          "label": "Type hierarchy",
          "axis": "typography",
          "status": "ready",
          "token_roles": [
            "text",
            "textMuted",
            "badgeText"
          ],
          "evidence": "6/6 contrast checks pass the AA target.",
          "summary": "Primary, muted, and badge text roles stay distinct enough for headings, body copy, metadata, and helper text."
        },
        {
          "id": "action-clarity",
          "label": "Action clarity",
          "axis": "interaction",
          "status": "ready",
          "token_roles": [
            "button",
            "buttonText",
            "control",
            "controlText",
            "signal",
            "uplink"
          ],
          "evidence": "8 action surfaces and 0 control surfaces mapped.",
          "summary": "Interactive regions use recipe action/control tokens and preserve labels, hrefs, events, required state, and options."
        },
        {
          "id": "media-treatment",
          "label": "Media treatment",
          "axis": "media",
          "status": "ready",
          "token_roles": [
            "panelElevated",
            "border",
            "textMuted"
          ],
          "evidence": "Media region is isolated with replaceable fields.",
          "summary": "Replaceable media stays framed separately from copy and action regions so asset swaps preserve the layout."
        },
        {
          "id": "state-feedback",
          "label": "State feedback",
          "axis": "state",
          "status": "ready",
          "token_roles": [
            "badge",
            "badgeText",
            "signal"
          ],
          "evidence": "6 state-readiness entries include default, empty, pending, active, invalid, disabled.",
          "summary": "Feedback, selected, loading, invalid, and disabled treatments use visible state evidence instead of color-only meaning."
        },
        {
          "id": "responsive-balance",
          "label": "Responsive balance",
          "axis": "responsive",
          "status": "ready",
          "token_roles": [
            "panel",
            "border",
            "control"
          ],
          "evidence": "single-column stack phone behavior, wide single-column composition tablet behavior, and contained composition row desktop behavior documented.",
          "summary": "Phone, tablet, and desktop defaults have explicit stack, wrap, media, and overflow policies for the recipe."
        }
      ],
      "visual_polish_axes": [
        "layout",
        "typography",
        "interaction",
        "media",
        "state",
        "responsive"
      ],
      "default_provenance_count": 25,
      "default_provenance_map": [
        {
          "path": "appearance",
          "label": "Appearance",
          "field_role": "style",
          "value_type": "object",
          "editable": false,
          "repeated": false,
          "default_source": "Polished SaaS recipe tokens",
          "replacement_policy": "locked-token",
          "replacement_risk": "medium",
          "guardrail": "Keep visual styling aligned to Polished SaaS recipe tokens unless the recipe itself changes.",
          "validation": "Style fields should prefer recipe or appearance tokens over one-off inline values.",
          "summary": "Appearance defaults from Polished SaaS recipe tokens; replacement is medium risk with locked-token policy."
        },
        {
          "path": "role",
          "label": "Role",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Role defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "topology",
          "label": "Topology",
          "field_role": "content",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Topology defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "density",
          "label": "Density",
          "field_role": "style",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "Polished SaaS recipe tokens",
          "replacement_policy": "locked-token",
          "replacement_risk": "medium",
          "guardrail": "Keep visual styling aligned to Polished SaaS recipe tokens unless the recipe itself changes.",
          "validation": "Style fields should prefer recipe or appearance tokens over one-off inline values.",
          "summary": "Density defaults from Polished SaaS recipe tokens; replacement is medium risk with locked-token policy."
        },
        {
          "path": "container",
          "label": "Container",
          "field_role": "content",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Container defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "logo_treatment",
          "label": "Logo Treatment",
          "field_role": "media",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "Cloud Elephants placeholder media or CMS media library",
          "replacement_policy": "requires-alt-text",
          "replacement_risk": "medium",
          "guardrail": "Replace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful.",
          "validation": "Media should use a replaceable URL plus meaningful alt, label, or title fallback.",
          "summary": "Logo Treatment defaults from Cloud Elephants placeholder media or CMS media library; replacement is medium risk with requires-alt-text policy."
        },
        {
          "path": "recipe",
          "label": "Recipe",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Recipe defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "brand",
          "label": "Brand",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Brand defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "links",
          "label": "Links",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Links defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "links[].label",
          "label": "Links Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Links Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "links[].href",
          "label": "Links Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Links Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links",
          "label": "Secondary Links",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Secondary Links defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links[].label",
          "label": "Secondary Links Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Secondary Links Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links[].href",
          "label": "Secondary Links Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Secondary Links Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links[].intent",
          "label": "Secondary Links Item Intent",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Secondary Links Item Intent defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links",
          "label": "Utility Links",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Utility Links defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links[].label",
          "label": "Utility Links Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Utility Links Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links[].href",
          "label": "Utility Links Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Utility Links Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links[].intent",
          "label": "Utility Links Item Intent",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Utility Links Item Intent defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions",
          "label": "Actions",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Actions defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions[].label",
          "label": "Actions Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Actions Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions[].href",
          "label": "Actions Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Actions Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions[].intent",
          "label": "Actions Item Intent",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Actions Item Intent defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "behavior",
          "label": "Behavior",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Behavior defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "mobile",
          "label": "Mobile",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Mobile defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        }
      ],
      "default_replacement_policies": [
        "locked-token",
        "requires-action-target",
        "requires-alt-text",
        "safe-to-edit"
      ],
      "default_replacement_risks": [
        "high",
        "low",
        "medium"
      ],
      "default_replacement_high_risk_count": 17,
      "content_edit_bundle_count": 5,
      "content_edit_bundles": [
        {
          "id": "copy",
          "label": "Copy bundle",
          "intent": "required",
          "edit_mode": "repeatable-items",
          "field_paths": [
            "actions[].label",
            "links[].label",
            "role",
            "secondary_links[].label",
            "utility_links[].label"
          ],
          "default_sources": [
            "cloneable block recipe payload"
          ],
          "guardrails": [
            "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
            "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths."
          ],
          "depends_on": [
            "type hierarchy",
            "mobile wrapping"
          ],
          "summary": "Copy bundle groups 5 fields so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "media",
          "label": "Media bundle",
          "intent": "recommended",
          "edit_mode": "single-field",
          "field_paths": [
            "logo_treatment"
          ],
          "default_sources": [
            "Cloud Elephants placeholder media or CMS media library"
          ],
          "guardrails": [
            "Replace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful."
          ],
          "depends_on": [
            "copy alt text",
            "responsive fit"
          ],
          "summary": "Media bundle groups 1 field so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "actions",
          "label": "Action bundle",
          "intent": "recommended",
          "edit_mode": "repeatable-items",
          "field_paths": [
            "actions",
            "actions[].href",
            "actions[].intent",
            "links",
            "links[].href",
            "secondary_links",
            "secondary_links[].href",
            "secondary_links[].intent",
            "utility_links",
            "utility_links[].href",
            "utility_links[].intent"
          ],
          "default_sources": [
            "CMS route, URL, or canonical postEvent path"
          ],
          "guardrails": [
            "Keep the label paired with a valid href or canonical postEvent event name before publishing."
          ],
          "depends_on": [
            "copy labels",
            "href or event target",
            "state readiness"
          ],
          "summary": "Action bundle groups 11 fields so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "style",
          "label": "Style bundle",
          "intent": "guarded",
          "edit_mode": "guarded-system",
          "field_paths": [
            "appearance",
            "density"
          ],
          "default_sources": [
            "Polished SaaS recipe tokens"
          ],
          "guardrails": [
            "Keep visual styling aligned to Polished SaaS recipe tokens unless the recipe itself changes."
          ],
          "depends_on": [
            "theme recipe tokens",
            "contrast proof"
          ],
          "summary": "Style bundle groups 2 fields so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "content",
          "label": "Content bundle",
          "intent": "required",
          "edit_mode": "grouped-fields",
          "field_paths": [
            "behavior",
            "brand",
            "container",
            "mobile",
            "recipe",
            "topology"
          ],
          "default_sources": [
            "cloneable block recipe payload"
          ],
          "guardrails": [
            "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
            "Keep the label paired with a valid href or canonical postEvent event name before publishing."
          ],
          "depends_on": [
            "contract-safe JSON"
          ],
          "summary": "Content bundle groups 6 fields so CMS edits preserve the recipe shape and default polish."
        }
      ],
      "content_edit_bundle_ids": [
        "copy",
        "media",
        "actions",
        "style",
        "content"
      ],
      "content_edit_bundle_modes": [
        "grouped-fields",
        "guarded-system",
        "repeatable-items",
        "single-field"
      ],
      "content_edit_bundle_required_count": 2,
      "content_edit_bundle_guarded_count": 1,
      "recipe_compatibility_count": 6,
      "recipe_compatibility_map": [
        {
          "id": "page-context",
          "label": "Page context",
          "axis": "page",
          "fit": "primary",
          "values": [
            "splash",
            "listing",
            "blog",
            "product-page",
            "service-page",
            "about-page"
          ],
          "evidence": "6 page types mapped for navbar_flyout.",
          "guardrail": "Choose the first matching page type before editing copy, media, or actions so the recipe starts in the right narrative context.",
          "summary": "navbar_flyout is best composed into splash, listing, blog, and related pages."
        },
        {
          "id": "section-role",
          "label": "Section role",
          "axis": "layout",
          "fit": "primary",
          "values": [
            "site-navigation",
            "conversion",
            "media",
            "content"
          ],
          "evidence": "5 anatomy regions produce 4 section roles.",
          "guardrail": "Place the block where its required anatomy regions have enough room before compressing it into dense page slots.",
          "summary": "navbar_flyout can act as site-navigation, conversion, media within a composed page."
        },
        {
          "id": "content-model",
          "label": "Content model",
          "axis": "content",
          "fit": "specialized",
          "values": [
            "copy-led",
            "media-led",
            "cta-led"
          ],
          "evidence": "24/25 fields are editable across 3 content models.",
          "guardrail": "Keep the content model stable when replacing defaults; do not turn a repeatable or media-led recipe into unrelated ad hoc content.",
          "summary": "Minimal Default composition passport is copy-led, media-led, cta-led for CMS composition."
        },
        {
          "id": "interaction-model",
          "label": "Interaction model",
          "axis": "interaction",
          "fit": "primary",
          "values": [
            "primary-link",
            "link-link",
            "navigation-link",
            "secondary-link"
          ],
          "evidence": "8 action surfaces and 0 control surfaces mapped.",
          "guardrail": "Review href, event, input, required, and disabled-state evidence before publishing an interactive recipe.",
          "summary": "navbar_flyout carries primary-link, link-link, navigation-link, secondary-link interaction affordances."
        },
        {
          "id": "authoring-fit",
          "label": "Authoring fit",
          "axis": "authoring",
          "fit": "specialized",
          "values": [
            "quick-start",
            "high-complexity",
            "17-high-care-replacements"
          ],
          "evidence": "25 default provenance items with 17 high-care replacements.",
          "guardrail": "Use the default provenance map before cloning the recipe into CMS content or agent-generated page data.",
          "summary": "navbar_flyout uses quick-start authoring with high complexity."
        },
        {
          "id": "responsive-fit",
          "label": "Responsive fit",
          "axis": "responsive",
          "fit": "primary",
          "values": [
            "single-column stack",
            "wide single-column composition",
            "contained composition row",
            "min-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke."
          ],
          "evidence": "3 responsive behavior maps cover phone, tablet, and desktop composition.",
          "guardrail": "Review phone wrapping, tablet mid-width balance, and desktop density before adding nested content, longer labels, or extra media.",
          "summary": "navbar_flyout has explicit phone, tablet, and desktop compatibility evidence for composed pages."
        }
      ],
      "recipe_compatibility_axes": [
        "page",
        "layout",
        "content",
        "interaction",
        "authoring",
        "responsive"
      ],
      "recipe_compatibility_page_types": [
        "splash",
        "listing",
        "blog",
        "product-page",
        "service-page",
        "about-page"
      ],
      "recipe_compatibility_section_roles": [
        "site-navigation",
        "conversion",
        "media",
        "content"
      ],
      "recipe_compatibility_fits": [
        "primary",
        "specialized"
      ],
      "builder_field_count": 25,
      "builder_field_map": [
        {
          "path": "appearance",
          "label": "Appearance",
          "value_type": "object",
          "role": "style",
          "editable": false,
          "repeated": false,
          "summary": "Appearance is a object field used for style."
        },
        {
          "path": "role",
          "label": "Role",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": false,
          "summary": "Role is a string field used for copy."
        },
        {
          "path": "topology",
          "label": "Topology",
          "value_type": "string",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Topology is a string field used for content."
        },
        {
          "path": "density",
          "label": "Density",
          "value_type": "string",
          "role": "style",
          "editable": true,
          "repeated": false,
          "summary": "Density is a string field used for style."
        },
        {
          "path": "container",
          "label": "Container",
          "value_type": "string",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Container is a string field used for content."
        },
        {
          "path": "logo_treatment",
          "label": "Logo Treatment",
          "value_type": "string",
          "role": "media",
          "editable": true,
          "repeated": false,
          "summary": "Logo Treatment is a string field used for media."
        },
        {
          "path": "recipe",
          "label": "Recipe",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Recipe is a object field used for content."
        },
        {
          "path": "brand",
          "label": "Brand",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Brand is a object field used for content."
        },
        {
          "path": "links",
          "label": "Links",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Links is a array field used for action."
        },
        {
          "path": "links[].label",
          "label": "Links Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Links Item Label is a string collection field used for copy."
        },
        {
          "path": "links[].href",
          "label": "Links Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Links Item Href is a string collection field used for action."
        },
        {
          "path": "secondary_links",
          "label": "Secondary Links",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Secondary Links is a array field used for action."
        },
        {
          "path": "secondary_links[].label",
          "label": "Secondary Links Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Secondary Links Item Label is a string collection field used for copy."
        },
        {
          "path": "secondary_links[].href",
          "label": "Secondary Links Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Secondary Links Item Href is a string collection field used for action."
        },
        {
          "path": "secondary_links[].intent",
          "label": "Secondary Links Item Intent",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Secondary Links Item Intent is a string collection field used for action."
        },
        {
          "path": "utility_links",
          "label": "Utility Links",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Utility Links is a array field used for action."
        },
        {
          "path": "utility_links[].label",
          "label": "Utility Links Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Utility Links Item Label is a string collection field used for copy."
        },
        {
          "path": "utility_links[].href",
          "label": "Utility Links Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Utility Links Item Href is a string collection field used for action."
        },
        {
          "path": "utility_links[].intent",
          "label": "Utility Links Item Intent",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Utility Links Item Intent is a string collection field used for action."
        },
        {
          "path": "actions",
          "label": "Actions",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Actions is a array field used for action."
        },
        {
          "path": "actions[].label",
          "label": "Actions Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Actions Item Label is a string collection field used for copy."
        },
        {
          "path": "actions[].href",
          "label": "Actions Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Actions Item Href is a string collection field used for action."
        },
        {
          "path": "actions[].intent",
          "label": "Actions Item Intent",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Actions Item Intent is a string collection field used for action."
        },
        {
          "path": "behavior",
          "label": "Behavior",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Behavior is a object field used for content."
        },
        {
          "path": "mobile",
          "label": "Mobile",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Mobile is a object field used for content."
        }
      ],
      "editor_guidance_count": 5,
      "editor_guidance_map": [
        {
          "id": "copy",
          "label": "Copy",
          "field_role": "copy",
          "field_count": 5,
          "editable_count": 5,
          "editor_widget": "text/rich-text editor",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "default_source": "cloneable block recipe payload",
          "summary": "Copy fields use the text/rich-text editor across 5/5 editable fields."
        },
        {
          "id": "media",
          "label": "Media",
          "field_role": "media",
          "field_count": 1,
          "editable_count": 1,
          "editor_widget": "media picker with alt text",
          "validation": "Media should use a replaceable URL plus meaningful alt, label, or title fallback.",
          "default_source": "Cloud Elephants placeholder media or CMS media library",
          "summary": "Media fields use the media picker with alt text across 1/1 editable field."
        },
        {
          "id": "action",
          "label": "Action",
          "field_role": "action",
          "field_count": 11,
          "editable_count": 11,
          "editor_widget": "link or event action editor",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "default_source": "CMS route, URL, or canonical postEvent path",
          "summary": "Action fields use the link or event action editor across 11/11 editable fields."
        },
        {
          "id": "style",
          "label": "Style",
          "field_role": "style",
          "field_count": 2,
          "editable_count": 1,
          "editor_widget": "appearance preset selector",
          "validation": "Style fields should prefer recipe or appearance tokens over one-off inline values.",
          "default_source": "Polished SaaS recipe tokens",
          "summary": "Style fields use the appearance preset selector across 1/2 editable fields."
        },
        {
          "id": "content",
          "label": "Content",
          "field_role": "content",
          "field_count": 6,
          "editable_count": 6,
          "editor_widget": "plain content field",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "default_source": "cloneable block recipe payload",
          "summary": "Content fields use the plain content field across 6/6 editable fields."
        }
      ],
      "editor_field_roles": [
        "copy",
        "media",
        "action",
        "style",
        "content"
      ],
      "editor_editable_field_count": 24,
      "state_readiness_count": 6,
      "state_readiness_map": [
        {
          "id": "default",
          "label": "Default",
          "status": "covered",
          "trigger": "Initial render with the cloneable recipe payload",
          "visual_treatment": "Polished SaaS tokens with default documentation treatment",
          "token_roles": [
            "surface",
            "panel",
            "text",
            "button"
          ],
          "proof": "The Polished SaaS recipe renders a contract-safe primary state for navbar_flyout.",
          "summary": "Default state uses the recipe surface, text, and action tokens without one-off styling."
        },
        {
          "id": "empty",
          "label": "Empty",
          "status": "covered",
          "trigger": "Repeatable collections have zero items",
          "visual_treatment": "Reserved panel space with fallback copy or placeholder media",
          "token_roles": [
            "panel",
            "textMuted",
            "badge",
            "border"
          ],
          "proof": "Repeatable fields are documented for add, remove, reorder, and item-level editing.",
          "summary": "Empty-state guidance preserves layout rhythm instead of collapsing the block surface."
        },
        {
          "id": "pending",
          "label": "Pending",
          "status": "covered",
          "trigger": "Deferred content or preview loading",
          "visual_treatment": "Neutral reserved frame with status copy and no layout shift",
          "token_roles": [
            "control",
            "textMuted",
            "progressTrack",
            "border"
          ],
          "proof": "Static recipe payloads reserve the same documented frame while content is loading.",
          "summary": "Pending state keeps dimensions stable while using muted control/status tokens."
        },
        {
          "id": "active",
          "label": "Active",
          "status": "covered",
          "trigger": "Selected action, active link, checked input, or open disclosure",
          "visual_treatment": "Signal/uplink emphasis with visible selected-state chips",
          "token_roles": [
            "signal",
            "uplink",
            "button",
            "badge"
          ],
          "proof": "8 action surfaces and 0 control surfaces are mapped for selected-state review.",
          "summary": "Active state is represented with recipe accent tokens and visible state labels."
        },
        {
          "id": "invalid",
          "label": "Invalid",
          "status": "covered",
          "trigger": "Media URL or provider data is invalid",
          "visual_treatment": "Warning/danger status treatment while preserving the block frame",
          "token_roles": [
            "warning",
            "danger",
            "border",
            "text"
          ],
          "proof": "Media guidance requires URL plus accessible fallback text for invalid or missing assets.",
          "summary": "Invalid state guidance favors explicit status evidence over ambiguous visual collapse."
        },
        {
          "id": "disabled",
          "label": "Disabled",
          "status": "covered",
          "trigger": "Unavailable action or temporarily disabled control",
          "visual_treatment": "Muted affordance with preserved label, spacing, and hit-area rhythm",
          "token_roles": [
            "control",
            "textMuted",
            "border",
            "panel"
          ],
          "proof": "Interactive maps preserve labels and control roles so disabled states can stay understandable.",
          "summary": "Disabled state keeps the block readable and spatially stable when interaction is unavailable."
        }
      ],
      "state_readiness_states": [
        "default",
        "empty",
        "pending",
        "active",
        "invalid",
        "disabled"
      ],
      "state_readiness_statuses": [
        "covered",
        "covered",
        "covered",
        "covered",
        "covered",
        "covered"
      ],
      "anatomy_region_count": 5,
      "anatomy_map": [
        {
          "id": "surface",
          "label": "Surface",
          "region_role": "outer layout and background",
          "field_paths": [
            "appearance",
            "density"
          ],
          "token_roles": [
            "background",
            "panel",
            "panelElevated",
            "border"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": true,
          "summary": "navbar_flyout uses recipe surface tokens to keep the outer frame styled and composable."
        },
        {
          "id": "copy",
          "label": "Copy",
          "region_role": "headings, body copy, labels, and supporting text",
          "field_paths": [
            "actions[].label",
            "links[].label",
            "role",
            "secondary_links[].label",
            "utility_links[].label"
          ],
          "token_roles": [
            "text",
            "textMuted"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": true,
          "summary": "Copy fields map to primary and muted text roles so editors can change words without restyling the block."
        },
        {
          "id": "media",
          "label": "Media",
          "region_role": "replaceable image, iframe, embed, avatar, logo, or gallery area",
          "field_paths": [
            "logo_treatment"
          ],
          "token_roles": [
            "panelElevated",
            "border"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": false,
          "summary": "Media fields stay isolated from copy and action regions so replacement assets preserve the recipe layout."
        },
        {
          "id": "actions",
          "label": "Actions",
          "region_role": "CTA, link, event, and navigation affordances",
          "field_paths": [
            "actions",
            "actions[].href",
            "actions[].intent",
            "actions[0]",
            "brand",
            "links",
            "links[].href",
            "links[0]",
            "links[1]",
            "links[2]",
            "recipe",
            "secondary_links",
            "secondary_links[].href",
            "secondary_links[].intent",
            "secondary_links[0]",
            "utility_links",
            "utility_links[].href",
            "utility_links[].intent",
            "utility_links[0]"
          ],
          "token_roles": [
            "button",
            "buttonText",
            "signal",
            "uplink"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": false,
          "summary": "Action regions use recipe button and accent tokens while preserving href or event payloads."
        },
        {
          "id": "feedback",
          "label": "Feedback",
          "region_role": "status, validation, selected, loading, and disabled evidence",
          "field_paths": [],
          "token_roles": [
            "badge",
            "badgeText",
            "signal"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": true,
          "summary": "Feedback regions tie state-readiness evidence to visible recipe status treatments."
        }
      ],
      "anatomy_regions": [
        "surface",
        "copy",
        "media",
        "actions",
        "feedback"
      ],
      "anatomy_token_roles": [
        "background",
        "badge",
        "badgeText",
        "border",
        "button",
        "buttonText",
        "panel",
        "panelElevated",
        "signal",
        "text",
        "textMuted",
        "uplink"
      ],
      "action_count": 8,
      "action_map": [
        {
          "path": "actions[0]",
          "label": "Start building",
          "action_type": "primary",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Start building is a primary action linking to #block-preview."
        },
        {
          "path": "brand",
          "label": "Ensemble Header",
          "action_type": "link",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Ensemble Header is a link action linking to #block-preview."
        },
        {
          "path": "links[0]",
          "label": "Overview",
          "action_type": "navigation",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Overview is a navigation action linking to #block-preview."
        },
        {
          "path": "links[1]",
          "label": "Templates",
          "action_type": "navigation",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Templates is a navigation action linking to #block-preview."
        },
        {
          "path": "links[2]",
          "label": "Pricing",
          "action_type": "navigation",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Pricing is a navigation action linking to #block-preview."
        },
        {
          "path": "recipe",
          "label": "Default Polish",
          "action_type": "link",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Default Polish is a link action linking to #block-preview."
        },
        {
          "path": "secondary_links[0]",
          "label": "Docs",
          "action_type": "secondary",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Docs is a secondary action linking to #block-preview."
        },
        {
          "path": "utility_links[0]",
          "label": "Status",
          "action_type": "secondary",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Status is a secondary action linking to #block-preview."
        }
      ],
      "control_count": 0,
      "control_map": [],
      "style_token_count": 15,
      "style_token_map": [
        {
          "role": "background",
          "label": "Page background",
          "value": "#f7fbff",
          "token_type": "color",
          "summary": "Page background uses the background recipe token."
        },
        {
          "role": "panel",
          "label": "Panel surface",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Panel surface uses the panel recipe token."
        },
        {
          "role": "panelElevated",
          "label": "Elevated surface",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Elevated surface uses the panelElevated recipe token."
        },
        {
          "role": "text",
          "label": "Primary text",
          "value": "#142033",
          "token_type": "color",
          "summary": "Primary text uses the text recipe token."
        },
        {
          "role": "textMuted",
          "label": "Muted text",
          "value": "#526174",
          "token_type": "color",
          "summary": "Muted text uses the textMuted recipe token."
        },
        {
          "role": "signal",
          "label": "Signal accent",
          "value": "#166bff",
          "token_type": "color",
          "summary": "Signal accent uses the signal recipe token."
        },
        {
          "role": "uplink",
          "label": "Secondary accent",
          "value": "#00a6a6",
          "token_type": "color",
          "summary": "Secondary accent uses the uplink recipe token."
        },
        {
          "role": "border",
          "label": "Border",
          "value": "#d6dee8",
          "token_type": "color",
          "summary": "Border uses the border recipe token."
        },
        {
          "role": "control",
          "label": "Control surface",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Control surface uses the control recipe token."
        },
        {
          "role": "controlText",
          "label": "Control text",
          "value": "#142033",
          "token_type": "color",
          "summary": "Control text uses the controlText recipe token."
        },
        {
          "role": "button",
          "label": "Button surface",
          "value": "#166bff",
          "token_type": "color",
          "summary": "Button surface uses the button recipe token."
        },
        {
          "role": "buttonText",
          "label": "Button text",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Button text uses the buttonText recipe token."
        },
        {
          "role": "badge",
          "label": "Badge surface",
          "value": "#eef5ff",
          "token_type": "color",
          "summary": "Badge surface uses the badge recipe token."
        },
        {
          "role": "badgeText",
          "label": "Badge text",
          "value": "#174ea6",
          "token_type": "color",
          "summary": "Badge text uses the badgeText recipe token."
        },
        {
          "role": "fontFamily",
          "label": "Font family",
          "value": "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif",
          "token_type": "font",
          "summary": "Font family comes from the active recipe theme tokens."
        }
      ],
      "style_token_roles": [
        "background",
        "panel",
        "panelElevated",
        "text",
        "textMuted",
        "signal",
        "uplink",
        "border",
        "control",
        "controlText",
        "button",
        "buttonText",
        "badge",
        "badgeText",
        "fontFamily"
      ],
      "contrast_check_count": 6,
      "contrast_pass_count": 6,
      "contrast_checks": [
        {
          "id": "text-on-background",
          "label": "Text on background",
          "foreground_role": "text",
          "background_role": "background",
          "foreground": "#142033",
          "background": "#f7fbff",
          "ratio": 15.73,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Text on background is AAA at 15.73:1 against a 4.5:1 requirement."
        },
        {
          "id": "text-on-panel",
          "label": "Text on panel",
          "foreground_role": "text",
          "background_role": "panel",
          "foreground": "#142033",
          "background": "#ffffff",
          "ratio": 16.35,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Text on panel is AAA at 16.35:1 against a 4.5:1 requirement."
        },
        {
          "id": "muted-text-on-panel",
          "label": "Muted text on panel",
          "foreground_role": "textMuted",
          "background_role": "panel",
          "foreground": "#526174",
          "background": "#ffffff",
          "ratio": 6.32,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AA",
          "summary": "Muted text on panel is AA at 6.32:1 against a 4.5:1 requirement."
        },
        {
          "id": "button-text-on-button",
          "label": "Button text on button",
          "foreground_role": "buttonText",
          "background_role": "button",
          "foreground": "#ffffff",
          "background": "#166bff",
          "ratio": 4.58,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AA",
          "summary": "Button text on button is AA at 4.58:1 against a 4.5:1 requirement."
        },
        {
          "id": "control-text-on-control",
          "label": "Control text on control",
          "foreground_role": "controlText",
          "background_role": "control",
          "foreground": "#142033",
          "background": "#ffffff",
          "ratio": 16.35,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Control text on control is AAA at 16.35:1 against a 4.5:1 requirement."
        },
        {
          "id": "badge-text-on-badge",
          "label": "Badge text on badge",
          "foreground_role": "badgeText",
          "background_role": "badge",
          "foreground": "#174ea6",
          "background": "#eef5ff",
          "ratio": 7.15,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Badge text on badge is AAA at 7.15:1 against a 4.5:1 requirement."
        }
      ],
      "contrast_target": "AA",
      "accessibility_standard": "WCAG_2_2_AA",
      "accessibility_check_count": 5,
      "accessibility_checks": [
        {
          "id": "semantic-structure",
          "label": "Semantic structure",
          "category": "semantics",
          "status": "covered",
          "required": true,
          "proof": "navigation/header/footer landmarks and labels",
          "summary": "navbar_flyout keeps semantic wrappers and readable heading/copy structure in the runtime preview."
        },
        {
          "id": "keyboard-and-tap-targets",
          "label": "Keyboard and tap targets",
          "category": "keyboard",
          "status": "covered",
          "required": true,
          "proof": "mapped actions/controls render as native focusable surfaces",
          "summary": "Interactive surfaces stay reachable, focusable, and recipe-styled without shrinking below expected touch affordances."
        },
        {
          "id": "text-alternatives",
          "label": "Text alternatives",
          "category": "media",
          "status": "covered",
          "required": true,
          "proof": "media fields include alt/label/title fallbacks",
          "summary": "Media-ready recipes expose replaceable alt text or accessible labels for images, logos, embeds, and placeholders."
        },
        {
          "id": "control-labels",
          "label": "Control labels",
          "category": "forms",
          "status": "covered",
          "required": false,
          "proof": "no input controls in this payload",
          "summary": "No input controls are present, so there are no unlabeled fields to remediate."
        },
        {
          "id": "status-and-motion",
          "label": "Status and motion",
          "category": "state",
          "status": "covered",
          "required": true,
          "proof": "runtime evidence avoids hidden status-only content",
          "summary": "Recipe defaults avoid motion-only meaning and keep status text inspectable when state is present."
        }
      ],
      "responsive_behavior_count": 3,
      "responsive_behavior_map": [
        {
          "id": "phone",
          "label": "Phone",
          "viewport_width": 390,
          "layout_mode": "single-column stack",
          "column_count": 1,
          "spacing_density": "comfortable",
          "media_policy": "Media slots remain optional and collapse without leaving empty chrome.",
          "overflow_policy": "min-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke.",
          "interaction_policy": "Actions remain visible, wrap before overflow, and preserve recipe button styling.",
          "proof": "npm run test:static:block-catalog all-blocks-phone",
          "summary": "Polished SaaS stacks navbar_flyout into one phone column with comfortable spacing and bounded content."
        },
        {
          "id": "tablet",
          "label": "Tablet",
          "viewport_width": 768,
          "layout_mode": "wide single-column composition",
          "column_count": 1,
          "spacing_density": "comfortable",
          "media_policy": "Media slots remain optional and collapse without leaving empty chrome.",
          "overflow_policy": "tablet preview frames keep mid-width composition, wrap controls, and avoid horizontal overflow in the static catalog smoke.",
          "interaction_policy": "Actions remain visible, wrap before overflow, and preserve recipe button styling.",
          "proof": "npm run test:static:block-catalog all-blocks-tablet",
          "summary": "Polished SaaS adapts navbar_flyout to 1 tablet column before expanding to the desktop layout."
        },
        {
          "id": "desktop",
          "label": "Desktop",
          "viewport_width": 1366,
          "layout_mode": "contained composition row",
          "column_count": 1,
          "spacing_density": "comfortable",
          "media_policy": "Media slots remain optional and collapse without leaving empty chrome.",
          "overflow_policy": "desktop preview frames keep constrained widths, stable cards, and no horizontal overflow in the static catalog smoke.",
          "interaction_policy": "Actions remain visible, wrap before overflow, and preserve recipe button styling.",
          "proof": "npm run test:static:block-catalog all-blocks-desktop",
          "summary": "Polished SaaS gives navbar_flyout up to 1 desktop column while preserving recipe spacing."
        }
      ],
      "responsive_viewports": [
        "phone",
        "tablet",
        "desktop"
      ],
      "responsive_proof": [
        "npm run test:static:block-catalog all-blocks-phone",
        "npm run test:static:block-catalog all-blocks-tablet",
        "npm run test:static:block-catalog all-blocks-desktop"
      ],
      "interactive_roles": [
        "link",
        "navigation",
        "primary",
        "secondary"
      ],
      "recipe_alignment": {
        "action_token": "button",
        "control_token": "control",
        "surface_token": "panel",
        "text_token": "text",
        "source": "theme recipe tokens"
      }
    },
    "cloneable": true
  }
}
bento

Media Ready

Polished SaaS Growthmedia

A brandable payload that includes placeholder media where the block can express imagery, previews, or visual proof.

Component anatomy

Media Ready anatomy

5 regions
Surfaceouter layout and background
required2 fields4 tokens

navbar_flyout uses recipe surface tokens to keep the outer frame styled and composable.

background, panel, panelElevated, border
Copyheadings, body copy, labels, and supporting text
required5 fields2 tokens

Copy fields map to primary and muted text roles so editors can change words without restyling the block.

text, textMuted
Mediareplaceable image, iframe, embed, avatar, logo, or gallery area
optional1 fields2 tokens

Media fields stay isolated from copy and action regions so replacement assets preserve the recipe layout.

panelElevated, border
ActionsCTA, link, event, and navigation affordances
optional19 fields4 tokens

Action regions use recipe button and accent tokens while preserving href or event payloads.

button, buttonText, signal, uplink
Feedbackstatus, validation, selected, loading, and disabled evidence
required0 fields3 tokens

Feedback regions tie state-readiness evidence to visible recipe status treatments.

badge, badgeText, signal
Recipe passport

Media Ready passport

high
Fitmedia-led

Use when the navbar_flyout story depends on replaceable imagery, embeds, logos, or visual proof.

Editable fields24/25

Media Ready is a high-complexity media-led recipe with 5 documented composition slots.

Interactions8 actions / 0 controls

3 required regions, 2 optional regions.

Slots
Surface / 1/2Copy / 5/5Media / 1/1Actions / 13/19Feedback / 0/0
Replacement guidance
  • Keep Polished SaaS Growth recipe tokens as the source of visual styling for the surface, text, controls, and actions.
  • Replace media URLs through the CMS media library and preserve alt, title, provider, or label fallbacks.
  • Verify each action keeps either a valid href or canonical event name plus an editor-visible label.
  • No input controls are required; keep the recipe focused on its documented display regions.
  • The recipe does not require repeatable collection editing.
Publish checklist
  • Validate navbar_flyout against its block contract before publishing.
  • 3 required anatomy regions remain present: surface, copy, feedback.
  • 24/25 builder fields are CMS-editable or intentionally locked.
  • Interactive labels, target size, href/event wiring, and disabled states have been reviewed.
  • Phone, tablet, and desktop responsive behavior maps have been reviewed for wrapping and overflow.
  • Contrast checks meet the AA recipe target.
Recipe fit

Media Ready recipe fit

6 axes
Page contextpage / primary
splashlistingblogproduct-pageservice-pageabout-page

navbar_flyout is best composed into splash, listing, blog, and related pages.

6 page types mapped for navbar_flyout.Choose the first matching page type before editing copy, media, or actions so the recipe starts in the right narrative context.
Section rolelayout / primary
site-navigationconversionmediacontent

navbar_flyout can act as site-navigation, conversion, media within a composed page.

5 anatomy regions produce 4 section roles.Place the block where its required anatomy regions have enough room before compressing it into dense page slots.
Content modelcontent / specialized
copy-ledmedia-ledcta-led

Media Ready composition passport is copy-led, media-led, cta-led for CMS composition.

24/25 fields are editable across 3 content models.Keep the content model stable when replacing defaults; do not turn a repeatable or media-led recipe into unrelated ad hoc content.
Interaction modelinteraction / primary
primary-linklink-linknavigation-linksecondary-link

navbar_flyout carries primary-link, link-link, navigation-link, secondary-link interaction affordances.

8 action surfaces and 0 control surfaces mapped.Review href, event, input, required, and disabled-state evidence before publishing an interactive recipe.
Authoring fitauthoring / specialized
media-ledhigh-complexity17-high-care-replacements

navbar_flyout uses media-led authoring with high complexity.

25 default provenance items with 17 high-care replacements.Use the default provenance map before cloning the recipe into CMS content or agent-generated page data.
Responsive fitresponsive / primary
single-column stackwide single-column compositioncontained composition rowmin-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke.

navbar_flyout has explicit phone, tablet, and desktop compatibility evidence for composed pages.

3 responsive behavior maps cover phone, tablet, and desktop composition.Review phone wrapping, tablet mid-width balance, and desktop density before adding nested content, longer labels, or extra media.
Visual polish

Media Ready visual polish

6/6
Surface rhythmlayout

navbar_flyout keeps a stable recipe surface with panel, border, and spacing roles instead of ad hoc wrappers.

image treatment uses spacious density and 18px radius base.background, panel, panelElevated, border
Type hierarchytypography

Primary, muted, and badge text roles stay distinct enough for headings, body copy, metadata, and helper text.

6/6 contrast checks pass the AA target.text, textMuted, badgeText
Action clarityinteraction

Interactive regions use recipe action/control tokens and preserve labels, hrefs, events, required state, and options.

8 action surfaces and 0 control surfaces mapped.button, buttonText, control, controlText, signal, uplink
Media treatmentmedia

Replaceable media stays framed separately from copy and action regions so asset swaps preserve the layout.

Media region is isolated with replaceable fields.panelElevated, border, textMuted
State feedbackstate

Feedback, selected, loading, invalid, and disabled treatments use visible state evidence instead of color-only meaning.

6 state-readiness entries include default, empty, pending, active, invalid, disabled.badge, badgeText, signal
Responsive balanceresponsive

Phone, tablet, and desktop defaults have explicit stack, wrap, media, and overflow policies for the recipe.

single-column stack phone behavior, wide single-column composition tablet behavior, and contained composition row desktop behavior documented.panel, border, control
Default provenance

Media Ready default provenance

25 fields
locked-tokenrequires-action-targetrequires-alt-textsafe-to-edit
  • Appearanceappearance
    locked-tokenmedium

    Keep visual styling aligned to Polished SaaS Growth recipe tokens unless the recipe itself changes.

    Polished SaaS Growth recipe tokens
  • Rolerole
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Topologytopology
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Densitydensity
    locked-tokenmedium

    Keep visual styling aligned to Polished SaaS Growth recipe tokens unless the recipe itself changes.

    Polished SaaS Growth recipe tokens
  • Containercontainer
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Logo Treatmentlogo_treatment
    requires-alt-textmedium

    Replace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful.

    Cloud Elephants placeholder media or CMS media library
  • Reciperecipe
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Brandbrand
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Linkslinks
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Links Item Labellinks[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Links Item Hreflinks[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Secondary Linkssecondary_links
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Secondary Links Item Labelsecondary_links[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Secondary Links Item Hrefsecondary_links[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Secondary Links Item Intentsecondary_links[].intent
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Utility Linksutility_links
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Utility Links Item Labelutility_links[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Utility Links Item Hrefutility_links[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Utility Links Item Intentutility_links[].intent
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Actionsactions
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Actions Item Labelactions[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Actions Item Hrefactions[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Actions Item Intentactions[].intent
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Behaviorbehavior
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Mobilemobile
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
Edit bundles

Media Ready edit bundles

5 bundles
Copy bundlerequired / repeatable-items
actions[].labellinks[].labelrolesecondary_links[].labelutility_links[].label

Copy bundle groups 5 fields so CMS edits preserve the recipe shape and default polish.

cloneable block recipe payloadKeep the label paired with a valid href or canonical postEvent event name before publishing.
Media bundlerecommended / single-field
logo_treatment

Media bundle groups 1 field so CMS edits preserve the recipe shape and default polish.

Cloud Elephants placeholder media or CMS media libraryReplace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful.
Action bundlerecommended / repeatable-items
actionsactions[].hrefactions[].intentlinkslinks[].hrefsecondary_links+5

Action bundle groups 11 fields so CMS edits preserve the recipe shape and default polish.

CMS route, URL, or canonical postEvent pathKeep the label paired with a valid href or canonical postEvent event name before publishing.
Style bundleguarded / guarded-system
appearancedensity

Style bundle groups 2 fields so CMS edits preserve the recipe shape and default polish.

Polished SaaS Growth recipe tokensKeep visual styling aligned to Polished SaaS Growth recipe tokens unless the recipe itself changes.
Content bundlerequired / grouped-fields
behaviorbrandcontainermobilerecipetopology

Content bundle groups 6 fields so CMS edits preserve the recipe shape and default polish.

cloneable block recipe payloadCopy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.
CMS composition

Media Ready fields

25 fields
actioncontentcopymediastyle
  • Appearanceappearance
    styleobject
  • Rolerole
    copystring
  • Topologytopology
    contentstring
  • Densitydensity
    stylestring
  • Containercontainer
    contentstring
  • Logo Treatmentlogo_treatment
    mediastring
  • Reciperecipe
    contentobject
  • Brandbrand
    contentobject
  • Linkslinks
    actionarray
  • Links Item Labellinks[].label
    copystringrepeated
  • Links Item Hreflinks[].href
    actionstringrepeated
  • Secondary Linkssecondary_links
    actionarray
  • Secondary Links Item Labelsecondary_links[].label
    copystringrepeated
  • Secondary Links Item Hrefsecondary_links[].href
    actionstringrepeated
  • Secondary Links Item Intentsecondary_links[].intent
    actionstringrepeated
  • Utility Linksutility_links
    actionarray
  • Utility Links Item Labelutility_links[].label
    copystringrepeated
  • Utility Links Item Hrefutility_links[].href
    actionstringrepeated
  • Utility Links Item Intentutility_links[].intent
    actionstringrepeated
  • Actionsactions
    actionarray
  • Actions Item Labelactions[].label
    copystringrepeated
  • Actions Item Hrefactions[].href
    actionstringrepeated
  • Actions Item Intentactions[].intent
    actionstringrepeated
  • Behaviorbehavior
    contentobject
  • Mobilemobile
    contentobject
CMS editing

Media Ready editor guidance

24/25 editable
Copytext/rich-text editor
5/5 editablecopy

Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.

cloneable block recipe payload
Mediamedia picker with alt text
1/1 editablemedia

Media should use a replaceable URL plus meaningful alt, label, or title fallback.

Cloud Elephants placeholder media or CMS media library
Actionlink or event action editor
11/11 editableaction

Actions should resolve to a URL or event name with a human-readable label.

CMS route, URL, or canonical postEvent path
Styleappearance preset selector
1/2 editablestyle

Style fields should prefer recipe or appearance tokens over one-off inline values.

Polished SaaS Growth recipe tokens
Contentplain content field
6/6 editablecontent

Content should remain serializable JSON and preserve the documented block contract.

cloneable block recipe payload
Default states

Media Ready state readiness

6 states
DefaultInitial render with the cloneable recipe payload
coveredsurfacepaneltext

Polished SaaS Growth tokens with image documentation treatment

The Polished SaaS Growth recipe renders a contract-safe primary state for navbar_flyout.
EmptyRepeatable collections have zero items
coveredpaneltextMutedbadge

Reserved panel space with fallback copy or placeholder media

Repeatable fields are documented for add, remove, reorder, and item-level editing.
PendingDeferred content or preview loading
coveredcontroltextMutedprogressTrack

Neutral reserved frame with status copy and no layout shift

Static recipe payloads reserve the same documented frame while content is loading.
ActiveSelected action, active link, checked input, or open disclosure
coveredsignaluplinkbutton

Signal/uplink emphasis with visible selected-state chips

8 action surfaces and 0 control surfaces are mapped for selected-state review.
InvalidMedia URL or provider data is invalid
coveredwarningdangerborder

Warning/danger status treatment while preserving the block frame

Media guidance requires URL plus accessible fallback text for invalid or missing assets.
DisabledUnavailable action or temporarily disabled control
coveredcontroltextMutedborder

Muted affordance with preserved label, spacing, and hit-area rhythm

Interactive maps preserve labels and control roles so disabled states can stay understandable.
Controls and actions

Media Ready actions and controls

8 surfaces
linknavigationprimarysecondary
Actions
  • Start buildingactions[0]
    primary#block-preview
  • Ensemble Headerbrand
    link#block-preview
  • Overviewlinks[0]
    navigation#block-preview
  • Templateslinks[1]
    navigation#block-preview
  • Pricinglinks[2]
    navigation#block-preview
  • Balanced Brandrecipe
    link#block-preview
  • Docssecondary_links[0]
    secondary#block-preview
  • Statusutility_links[0]
    secondary#block-preview
Controls

No input control is needed for this payload.

Recipe styling

Media Ready style tokens

15 tokens
Page background#f7fbff
Panel surface#ffffff
Elevated surface#ffffff
Primary text#142033
Muted text#526174
Signal accent#166bff
Secondary accent#00a6a6
Border#d6dee8
Control surface#ffffff
Control text#142033
Button surface#166bff
Button text#ffffff
Badge surface#eef5ff
Badge text#174ea6
Font familyInter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif
Readability

Media Ready contrast checks

6/6
Text on background15.73:1 / AAA
Text on panel16.35:1 / AAA
Muted text on panel6.32:1 / AA
Button text on button4.58:1 / AA
Control text on control16.35:1 / AAA
Badge text on badge7.15:1 / AAA
Accessibility proof

Media Ready accessibility checks

WCAG 2.2 AA
Semantic structuresemantics / required

navbar_flyout keeps semantic wrappers and readable heading/copy structure in the runtime preview.

navigation/header/footer landmarks and labels
Keyboard and tap targetskeyboard / required

Interactive surfaces stay reachable, focusable, and recipe-styled without shrinking below expected touch affordances.

mapped actions/controls render as native focusable surfaces
Text alternativesmedia / required

Media-ready recipes expose replaceable alt text or accessible labels for images, logos, embeds, and placeholders.

media fields include alt/label/title fallbacks
Control labelsforms / contextual

No input controls are present, so there are no unlabeled fields to remediate.

no input controls in this payload
Status and motionstate / required

Recipe defaults avoid motion-only meaning and keep status text inspectable when state is present.

runtime evidence avoids hidden status-only content
Responsive proof

Media Ready responsive behavior

3 viewports
Phone390px / single-column stack
1 colspacious

Polished SaaS Growth stacks navbar_flyout into one phone column with spacious spacing and bounded content.

min-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke.
Tablet768px / wide single-column composition
1 colspacious

Polished SaaS Growth adapts navbar_flyout to 1 tablet column before expanding to the desktop layout.

tablet preview frames keep mid-width composition, wrap controls, and avoid horizontal overflow in the static catalog smoke.
Desktop1366px / contained composition row
1 colspacious

Polished SaaS Growth gives navbar_flyout up to 1 desktop column while preserving recipe spacing.

desktop preview frames keep constrained widths, stable cards, and no horizontal overflow in the static catalog smoke.
Structured payload
{
  "id": "block-doc-navbar-flyout-data-media-ready",
  "block_type": "navbar_flyout",
  "props": {
    "appearance": {
      "preset": "bento"
    },
    "role": "site",
    "topology": "centered",
    "density": "comfortable",
    "container": "contained",
    "logo_treatment": "lockup",
    "recipe": {
      "id": "balanced-brand",
      "label": "Balanced Brand",
      "href": "#block-preview",
      "appearance": "bento"
    },
    "brand": {
      "label": "Ensemble Header",
      "href": "#block-preview",
      "logo": "https://storage.googleapis.com/msgsndr/T3RhpcTQAq7Qb47kPQAB/media/677815b8c290c684d5bf3fbd.png",
      "logo_alt": "Cloud Elephants Essential CTO service visual."
    },
    "links": [
      {
        "label": "Overview",
        "href": "#block-preview"
      },
      {
        "label": "Templates",
        "href": "#block-preview"
      },
      {
        "label": "Pricing",
        "href": "#block-preview"
      }
    ],
    "secondary_links": [
      {
        "label": "Docs",
        "href": "#block-preview",
        "intent": "secondary"
      }
    ],
    "utility_links": [
      {
        "label": "Status",
        "href": "#block-preview",
        "intent": "utility"
      }
    ],
    "actions": [
      {
        "label": "Start building",
        "href": "#block-preview",
        "intent": "primary"
      }
    ],
    "behavior": {
      "sticky": true,
      "active_path": "none",
      "surface": "solid"
    },
    "mobile": {
      "mode": "drawer",
      "toggle_label": "Menu",
      "safe_area": true
    }
  },
  "block_order": 2,
  "metadata": {
    "composition_recipe": {
      "id": "media-ready",
      "intent": "media",
      "label": "Media Ready",
      "recipe": "polished-saas-growth",
      "source": "block-explorer",
      "quality_proof": [
        "composition"
      ],
      "composition_passport": {
        "id": "media-ready",
        "label": "Media Ready composition passport",
        "intent": "media",
        "recipe": "polished-saas-growth",
        "authoring_mode": "media-led",
        "complexity": "high",
        "fit": "Use when the navbar_flyout story depends on replaceable imagery, embeds, logos, or visual proof.",
        "required_regions": [
          "surface",
          "copy",
          "feedback"
        ],
        "optional_regions": [
          "media",
          "actions"
        ],
        "slots": [
          {
            "id": "surface",
            "label": "Surface",
            "required": true,
            "field_count": 2,
            "editable_count": 1,
            "token_roles": [
              "background",
              "panel",
              "panelElevated",
              "border"
            ],
            "summary": "navbar_flyout uses recipe surface tokens to keep the outer frame styled and composable."
          },
          {
            "id": "copy",
            "label": "Copy",
            "required": true,
            "field_count": 5,
            "editable_count": 5,
            "token_roles": [
              "text",
              "textMuted"
            ],
            "summary": "Copy fields map to primary and muted text roles so editors can change words without restyling the block."
          },
          {
            "id": "media",
            "label": "Media",
            "required": false,
            "field_count": 1,
            "editable_count": 1,
            "token_roles": [
              "panelElevated",
              "border"
            ],
            "summary": "Media fields stay isolated from copy and action regions so replacement assets preserve the recipe layout."
          },
          {
            "id": "actions",
            "label": "Actions",
            "required": false,
            "field_count": 19,
            "editable_count": 13,
            "token_roles": [
              "button",
              "buttonText",
              "signal",
              "uplink"
            ],
            "summary": "Action regions use recipe button and accent tokens while preserving href or event payloads."
          },
          {
            "id": "feedback",
            "label": "Feedback",
            "required": true,
            "field_count": 0,
            "editable_count": 0,
            "token_roles": [
              "badge",
              "badgeText",
              "signal"
            ],
            "summary": "Feedback regions tie state-readiness evidence to visible recipe status treatments."
          }
        ],
        "builder_field_count": 25,
        "editable_field_count": 24,
        "action_count": 8,
        "control_count": 0,
        "replacement_guidance": [
          "Keep Polished SaaS Growth recipe tokens as the source of visual styling for the surface, text, controls, and actions.",
          "Replace media URLs through the CMS media library and preserve alt, title, provider, or label fallbacks.",
          "Verify each action keeps either a valid href or canonical event name plus an editor-visible label.",
          "No input controls are required; keep the recipe focused on its documented display regions.",
          "The recipe does not require repeatable collection editing."
        ],
        "publish_checklist": [
          "Validate navbar_flyout against its block contract before publishing.",
          "3 required anatomy regions remain present: surface, copy, feedback.",
          "24/25 builder fields are CMS-editable or intentionally locked.",
          "Interactive labels, target size, href/event wiring, and disabled states have been reviewed.",
          "Phone, tablet, and desktop responsive behavior maps have been reviewed for wrapping and overflow.",
          "Contrast checks meet the AA recipe target."
        ],
        "agent_notes": [
          "Prefer editing props fields described by the builder field map; metadata is evidence, not primary content.",
          "Preserve recipe_alignment token roles unless the page theme or recipe changes intentionally.",
          "Use the anatomy slots to compose or replace content without changing the block type."
        ],
        "summary": "Media Ready is a high-complexity media-led recipe with 5 documented composition slots."
      },
      "composition_passport_complexity": "high",
      "composition_passport_authoring_mode": "media-led",
      "composition_passport_slots": [
        "surface",
        "copy",
        "media",
        "actions",
        "feedback"
      ],
      "composition_passport_check_count": 6,
      "visual_polish_check_count": 6,
      "visual_polish_pass_count": 6,
      "visual_polish_checks": [
        {
          "id": "surface-rhythm",
          "label": "Surface rhythm",
          "axis": "layout",
          "status": "ready",
          "token_roles": [
            "background",
            "panel",
            "panelElevated",
            "border"
          ],
          "evidence": "image treatment uses spacious density and 18px radius base.",
          "summary": "navbar_flyout keeps a stable recipe surface with panel, border, and spacing roles instead of ad hoc wrappers."
        },
        {
          "id": "type-hierarchy",
          "label": "Type hierarchy",
          "axis": "typography",
          "status": "ready",
          "token_roles": [
            "text",
            "textMuted",
            "badgeText"
          ],
          "evidence": "6/6 contrast checks pass the AA target.",
          "summary": "Primary, muted, and badge text roles stay distinct enough for headings, body copy, metadata, and helper text."
        },
        {
          "id": "action-clarity",
          "label": "Action clarity",
          "axis": "interaction",
          "status": "ready",
          "token_roles": [
            "button",
            "buttonText",
            "control",
            "controlText",
            "signal",
            "uplink"
          ],
          "evidence": "8 action surfaces and 0 control surfaces mapped.",
          "summary": "Interactive regions use recipe action/control tokens and preserve labels, hrefs, events, required state, and options."
        },
        {
          "id": "media-treatment",
          "label": "Media treatment",
          "axis": "media",
          "status": "ready",
          "token_roles": [
            "panelElevated",
            "border",
            "textMuted"
          ],
          "evidence": "Media region is isolated with replaceable fields.",
          "summary": "Replaceable media stays framed separately from copy and action regions so asset swaps preserve the layout."
        },
        {
          "id": "state-feedback",
          "label": "State feedback",
          "axis": "state",
          "status": "ready",
          "token_roles": [
            "badge",
            "badgeText",
            "signal"
          ],
          "evidence": "6 state-readiness entries include default, empty, pending, active, invalid, disabled.",
          "summary": "Feedback, selected, loading, invalid, and disabled treatments use visible state evidence instead of color-only meaning."
        },
        {
          "id": "responsive-balance",
          "label": "Responsive balance",
          "axis": "responsive",
          "status": "ready",
          "token_roles": [
            "panel",
            "border",
            "control"
          ],
          "evidence": "single-column stack phone behavior, wide single-column composition tablet behavior, and contained composition row desktop behavior documented.",
          "summary": "Phone, tablet, and desktop defaults have explicit stack, wrap, media, and overflow policies for the recipe."
        }
      ],
      "visual_polish_axes": [
        "layout",
        "typography",
        "interaction",
        "media",
        "state",
        "responsive"
      ],
      "default_provenance_count": 25,
      "default_provenance_map": [
        {
          "path": "appearance",
          "label": "Appearance",
          "field_role": "style",
          "value_type": "object",
          "editable": false,
          "repeated": false,
          "default_source": "Polished SaaS Growth recipe tokens",
          "replacement_policy": "locked-token",
          "replacement_risk": "medium",
          "guardrail": "Keep visual styling aligned to Polished SaaS Growth recipe tokens unless the recipe itself changes.",
          "validation": "Style fields should prefer recipe or appearance tokens over one-off inline values.",
          "summary": "Appearance defaults from Polished SaaS Growth recipe tokens; replacement is medium risk with locked-token policy."
        },
        {
          "path": "role",
          "label": "Role",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Role defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "topology",
          "label": "Topology",
          "field_role": "content",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Topology defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "density",
          "label": "Density",
          "field_role": "style",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "Polished SaaS Growth recipe tokens",
          "replacement_policy": "locked-token",
          "replacement_risk": "medium",
          "guardrail": "Keep visual styling aligned to Polished SaaS Growth recipe tokens unless the recipe itself changes.",
          "validation": "Style fields should prefer recipe or appearance tokens over one-off inline values.",
          "summary": "Density defaults from Polished SaaS Growth recipe tokens; replacement is medium risk with locked-token policy."
        },
        {
          "path": "container",
          "label": "Container",
          "field_role": "content",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Container defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "logo_treatment",
          "label": "Logo Treatment",
          "field_role": "media",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "Cloud Elephants placeholder media or CMS media library",
          "replacement_policy": "requires-alt-text",
          "replacement_risk": "medium",
          "guardrail": "Replace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful.",
          "validation": "Media should use a replaceable URL plus meaningful alt, label, or title fallback.",
          "summary": "Logo Treatment defaults from Cloud Elephants placeholder media or CMS media library; replacement is medium risk with requires-alt-text policy."
        },
        {
          "path": "recipe",
          "label": "Recipe",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Recipe defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "brand",
          "label": "Brand",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Brand defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "links",
          "label": "Links",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Links defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "links[].label",
          "label": "Links Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Links Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "links[].href",
          "label": "Links Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Links Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links",
          "label": "Secondary Links",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Secondary Links defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links[].label",
          "label": "Secondary Links Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Secondary Links Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links[].href",
          "label": "Secondary Links Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Secondary Links Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links[].intent",
          "label": "Secondary Links Item Intent",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Secondary Links Item Intent defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links",
          "label": "Utility Links",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Utility Links defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links[].label",
          "label": "Utility Links Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Utility Links Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links[].href",
          "label": "Utility Links Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Utility Links Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links[].intent",
          "label": "Utility Links Item Intent",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Utility Links Item Intent defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions",
          "label": "Actions",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Actions defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions[].label",
          "label": "Actions Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Actions Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions[].href",
          "label": "Actions Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Actions Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions[].intent",
          "label": "Actions Item Intent",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Actions Item Intent defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "behavior",
          "label": "Behavior",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Behavior defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "mobile",
          "label": "Mobile",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Mobile defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        }
      ],
      "default_replacement_policies": [
        "locked-token",
        "requires-action-target",
        "requires-alt-text",
        "safe-to-edit"
      ],
      "default_replacement_risks": [
        "high",
        "low",
        "medium"
      ],
      "default_replacement_high_risk_count": 17,
      "content_edit_bundle_count": 5,
      "content_edit_bundles": [
        {
          "id": "copy",
          "label": "Copy bundle",
          "intent": "required",
          "edit_mode": "repeatable-items",
          "field_paths": [
            "actions[].label",
            "links[].label",
            "role",
            "secondary_links[].label",
            "utility_links[].label"
          ],
          "default_sources": [
            "cloneable block recipe payload"
          ],
          "guardrails": [
            "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
            "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths."
          ],
          "depends_on": [
            "type hierarchy",
            "mobile wrapping"
          ],
          "summary": "Copy bundle groups 5 fields so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "media",
          "label": "Media bundle",
          "intent": "recommended",
          "edit_mode": "single-field",
          "field_paths": [
            "logo_treatment"
          ],
          "default_sources": [
            "Cloud Elephants placeholder media or CMS media library"
          ],
          "guardrails": [
            "Replace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful."
          ],
          "depends_on": [
            "copy alt text",
            "responsive fit"
          ],
          "summary": "Media bundle groups 1 field so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "actions",
          "label": "Action bundle",
          "intent": "recommended",
          "edit_mode": "repeatable-items",
          "field_paths": [
            "actions",
            "actions[].href",
            "actions[].intent",
            "links",
            "links[].href",
            "secondary_links",
            "secondary_links[].href",
            "secondary_links[].intent",
            "utility_links",
            "utility_links[].href",
            "utility_links[].intent"
          ],
          "default_sources": [
            "CMS route, URL, or canonical postEvent path"
          ],
          "guardrails": [
            "Keep the label paired with a valid href or canonical postEvent event name before publishing."
          ],
          "depends_on": [
            "copy labels",
            "href or event target",
            "state readiness"
          ],
          "summary": "Action bundle groups 11 fields so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "style",
          "label": "Style bundle",
          "intent": "guarded",
          "edit_mode": "guarded-system",
          "field_paths": [
            "appearance",
            "density"
          ],
          "default_sources": [
            "Polished SaaS Growth recipe tokens"
          ],
          "guardrails": [
            "Keep visual styling aligned to Polished SaaS Growth recipe tokens unless the recipe itself changes."
          ],
          "depends_on": [
            "theme recipe tokens",
            "contrast proof"
          ],
          "summary": "Style bundle groups 2 fields so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "content",
          "label": "Content bundle",
          "intent": "required",
          "edit_mode": "grouped-fields",
          "field_paths": [
            "behavior",
            "brand",
            "container",
            "mobile",
            "recipe",
            "topology"
          ],
          "default_sources": [
            "cloneable block recipe payload"
          ],
          "guardrails": [
            "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
            "Keep the label paired with a valid href or canonical postEvent event name before publishing."
          ],
          "depends_on": [
            "contract-safe JSON"
          ],
          "summary": "Content bundle groups 6 fields so CMS edits preserve the recipe shape and default polish."
        }
      ],
      "content_edit_bundle_ids": [
        "copy",
        "media",
        "actions",
        "style",
        "content"
      ],
      "content_edit_bundle_modes": [
        "grouped-fields",
        "guarded-system",
        "repeatable-items",
        "single-field"
      ],
      "content_edit_bundle_required_count": 2,
      "content_edit_bundle_guarded_count": 1,
      "recipe_compatibility_count": 6,
      "recipe_compatibility_map": [
        {
          "id": "page-context",
          "label": "Page context",
          "axis": "page",
          "fit": "primary",
          "values": [
            "splash",
            "listing",
            "blog",
            "product-page",
            "service-page",
            "about-page"
          ],
          "evidence": "6 page types mapped for navbar_flyout.",
          "guardrail": "Choose the first matching page type before editing copy, media, or actions so the recipe starts in the right narrative context.",
          "summary": "navbar_flyout is best composed into splash, listing, blog, and related pages."
        },
        {
          "id": "section-role",
          "label": "Section role",
          "axis": "layout",
          "fit": "primary",
          "values": [
            "site-navigation",
            "conversion",
            "media",
            "content"
          ],
          "evidence": "5 anatomy regions produce 4 section roles.",
          "guardrail": "Place the block where its required anatomy regions have enough room before compressing it into dense page slots.",
          "summary": "navbar_flyout can act as site-navigation, conversion, media within a composed page."
        },
        {
          "id": "content-model",
          "label": "Content model",
          "axis": "content",
          "fit": "specialized",
          "values": [
            "copy-led",
            "media-led",
            "cta-led"
          ],
          "evidence": "24/25 fields are editable across 3 content models.",
          "guardrail": "Keep the content model stable when replacing defaults; do not turn a repeatable or media-led recipe into unrelated ad hoc content.",
          "summary": "Media Ready composition passport is copy-led, media-led, cta-led for CMS composition."
        },
        {
          "id": "interaction-model",
          "label": "Interaction model",
          "axis": "interaction",
          "fit": "primary",
          "values": [
            "primary-link",
            "link-link",
            "navigation-link",
            "secondary-link"
          ],
          "evidence": "8 action surfaces and 0 control surfaces mapped.",
          "guardrail": "Review href, event, input, required, and disabled-state evidence before publishing an interactive recipe.",
          "summary": "navbar_flyout carries primary-link, link-link, navigation-link, secondary-link interaction affordances."
        },
        {
          "id": "authoring-fit",
          "label": "Authoring fit",
          "axis": "authoring",
          "fit": "specialized",
          "values": [
            "media-led",
            "high-complexity",
            "17-high-care-replacements"
          ],
          "evidence": "25 default provenance items with 17 high-care replacements.",
          "guardrail": "Use the default provenance map before cloning the recipe into CMS content or agent-generated page data.",
          "summary": "navbar_flyout uses media-led authoring with high complexity."
        },
        {
          "id": "responsive-fit",
          "label": "Responsive fit",
          "axis": "responsive",
          "fit": "primary",
          "values": [
            "single-column stack",
            "wide single-column composition",
            "contained composition row",
            "min-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke."
          ],
          "evidence": "3 responsive behavior maps cover phone, tablet, and desktop composition.",
          "guardrail": "Review phone wrapping, tablet mid-width balance, and desktop density before adding nested content, longer labels, or extra media.",
          "summary": "navbar_flyout has explicit phone, tablet, and desktop compatibility evidence for composed pages."
        }
      ],
      "recipe_compatibility_axes": [
        "page",
        "layout",
        "content",
        "interaction",
        "authoring",
        "responsive"
      ],
      "recipe_compatibility_page_types": [
        "splash",
        "listing",
        "blog",
        "product-page",
        "service-page",
        "about-page"
      ],
      "recipe_compatibility_section_roles": [
        "site-navigation",
        "conversion",
        "media",
        "content"
      ],
      "recipe_compatibility_fits": [
        "primary",
        "specialized"
      ],
      "builder_field_count": 25,
      "builder_field_map": [
        {
          "path": "appearance",
          "label": "Appearance",
          "value_type": "object",
          "role": "style",
          "editable": false,
          "repeated": false,
          "summary": "Appearance is a object field used for style."
        },
        {
          "path": "role",
          "label": "Role",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": false,
          "summary": "Role is a string field used for copy."
        },
        {
          "path": "topology",
          "label": "Topology",
          "value_type": "string",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Topology is a string field used for content."
        },
        {
          "path": "density",
          "label": "Density",
          "value_type": "string",
          "role": "style",
          "editable": true,
          "repeated": false,
          "summary": "Density is a string field used for style."
        },
        {
          "path": "container",
          "label": "Container",
          "value_type": "string",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Container is a string field used for content."
        },
        {
          "path": "logo_treatment",
          "label": "Logo Treatment",
          "value_type": "string",
          "role": "media",
          "editable": true,
          "repeated": false,
          "summary": "Logo Treatment is a string field used for media."
        },
        {
          "path": "recipe",
          "label": "Recipe",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Recipe is a object field used for content."
        },
        {
          "path": "brand",
          "label": "Brand",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Brand is a object field used for content."
        },
        {
          "path": "links",
          "label": "Links",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Links is a array field used for action."
        },
        {
          "path": "links[].label",
          "label": "Links Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Links Item Label is a string collection field used for copy."
        },
        {
          "path": "links[].href",
          "label": "Links Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Links Item Href is a string collection field used for action."
        },
        {
          "path": "secondary_links",
          "label": "Secondary Links",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Secondary Links is a array field used for action."
        },
        {
          "path": "secondary_links[].label",
          "label": "Secondary Links Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Secondary Links Item Label is a string collection field used for copy."
        },
        {
          "path": "secondary_links[].href",
          "label": "Secondary Links Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Secondary Links Item Href is a string collection field used for action."
        },
        {
          "path": "secondary_links[].intent",
          "label": "Secondary Links Item Intent",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Secondary Links Item Intent is a string collection field used for action."
        },
        {
          "path": "utility_links",
          "label": "Utility Links",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Utility Links is a array field used for action."
        },
        {
          "path": "utility_links[].label",
          "label": "Utility Links Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Utility Links Item Label is a string collection field used for copy."
        },
        {
          "path": "utility_links[].href",
          "label": "Utility Links Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Utility Links Item Href is a string collection field used for action."
        },
        {
          "path": "utility_links[].intent",
          "label": "Utility Links Item Intent",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Utility Links Item Intent is a string collection field used for action."
        },
        {
          "path": "actions",
          "label": "Actions",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Actions is a array field used for action."
        },
        {
          "path": "actions[].label",
          "label": "Actions Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Actions Item Label is a string collection field used for copy."
        },
        {
          "path": "actions[].href",
          "label": "Actions Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Actions Item Href is a string collection field used for action."
        },
        {
          "path": "actions[].intent",
          "label": "Actions Item Intent",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Actions Item Intent is a string collection field used for action."
        },
        {
          "path": "behavior",
          "label": "Behavior",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Behavior is a object field used for content."
        },
        {
          "path": "mobile",
          "label": "Mobile",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Mobile is a object field used for content."
        }
      ],
      "editor_guidance_count": 5,
      "editor_guidance_map": [
        {
          "id": "copy",
          "label": "Copy",
          "field_role": "copy",
          "field_count": 5,
          "editable_count": 5,
          "editor_widget": "text/rich-text editor",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "default_source": "cloneable block recipe payload",
          "summary": "Copy fields use the text/rich-text editor across 5/5 editable fields."
        },
        {
          "id": "media",
          "label": "Media",
          "field_role": "media",
          "field_count": 1,
          "editable_count": 1,
          "editor_widget": "media picker with alt text",
          "validation": "Media should use a replaceable URL plus meaningful alt, label, or title fallback.",
          "default_source": "Cloud Elephants placeholder media or CMS media library",
          "summary": "Media fields use the media picker with alt text across 1/1 editable field."
        },
        {
          "id": "action",
          "label": "Action",
          "field_role": "action",
          "field_count": 11,
          "editable_count": 11,
          "editor_widget": "link or event action editor",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "default_source": "CMS route, URL, or canonical postEvent path",
          "summary": "Action fields use the link or event action editor across 11/11 editable fields."
        },
        {
          "id": "style",
          "label": "Style",
          "field_role": "style",
          "field_count": 2,
          "editable_count": 1,
          "editor_widget": "appearance preset selector",
          "validation": "Style fields should prefer recipe or appearance tokens over one-off inline values.",
          "default_source": "Polished SaaS Growth recipe tokens",
          "summary": "Style fields use the appearance preset selector across 1/2 editable fields."
        },
        {
          "id": "content",
          "label": "Content",
          "field_role": "content",
          "field_count": 6,
          "editable_count": 6,
          "editor_widget": "plain content field",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "default_source": "cloneable block recipe payload",
          "summary": "Content fields use the plain content field across 6/6 editable fields."
        }
      ],
      "editor_field_roles": [
        "copy",
        "media",
        "action",
        "style",
        "content"
      ],
      "editor_editable_field_count": 24,
      "state_readiness_count": 6,
      "state_readiness_map": [
        {
          "id": "default",
          "label": "Default",
          "status": "covered",
          "trigger": "Initial render with the cloneable recipe payload",
          "visual_treatment": "Polished SaaS Growth tokens with image documentation treatment",
          "token_roles": [
            "surface",
            "panel",
            "text",
            "button"
          ],
          "proof": "The Polished SaaS Growth recipe renders a contract-safe primary state for navbar_flyout.",
          "summary": "Default state uses the recipe surface, text, and action tokens without one-off styling."
        },
        {
          "id": "empty",
          "label": "Empty",
          "status": "covered",
          "trigger": "Repeatable collections have zero items",
          "visual_treatment": "Reserved panel space with fallback copy or placeholder media",
          "token_roles": [
            "panel",
            "textMuted",
            "badge",
            "border"
          ],
          "proof": "Repeatable fields are documented for add, remove, reorder, and item-level editing.",
          "summary": "Empty-state guidance preserves layout rhythm instead of collapsing the block surface."
        },
        {
          "id": "pending",
          "label": "Pending",
          "status": "covered",
          "trigger": "Deferred content or preview loading",
          "visual_treatment": "Neutral reserved frame with status copy and no layout shift",
          "token_roles": [
            "control",
            "textMuted",
            "progressTrack",
            "border"
          ],
          "proof": "Static recipe payloads reserve the same documented frame while content is loading.",
          "summary": "Pending state keeps dimensions stable while using muted control/status tokens."
        },
        {
          "id": "active",
          "label": "Active",
          "status": "covered",
          "trigger": "Selected action, active link, checked input, or open disclosure",
          "visual_treatment": "Signal/uplink emphasis with visible selected-state chips",
          "token_roles": [
            "signal",
            "uplink",
            "button",
            "badge"
          ],
          "proof": "8 action surfaces and 0 control surfaces are mapped for selected-state review.",
          "summary": "Active state is represented with recipe accent tokens and visible state labels."
        },
        {
          "id": "invalid",
          "label": "Invalid",
          "status": "covered",
          "trigger": "Media URL or provider data is invalid",
          "visual_treatment": "Warning/danger status treatment while preserving the block frame",
          "token_roles": [
            "warning",
            "danger",
            "border",
            "text"
          ],
          "proof": "Media guidance requires URL plus accessible fallback text for invalid or missing assets.",
          "summary": "Invalid state guidance favors explicit status evidence over ambiguous visual collapse."
        },
        {
          "id": "disabled",
          "label": "Disabled",
          "status": "covered",
          "trigger": "Unavailable action or temporarily disabled control",
          "visual_treatment": "Muted affordance with preserved label, spacing, and hit-area rhythm",
          "token_roles": [
            "control",
            "textMuted",
            "border",
            "panel"
          ],
          "proof": "Interactive maps preserve labels and control roles so disabled states can stay understandable.",
          "summary": "Disabled state keeps the block readable and spatially stable when interaction is unavailable."
        }
      ],
      "state_readiness_states": [
        "default",
        "empty",
        "pending",
        "active",
        "invalid",
        "disabled"
      ],
      "state_readiness_statuses": [
        "covered",
        "covered",
        "covered",
        "covered",
        "covered",
        "covered"
      ],
      "anatomy_region_count": 5,
      "anatomy_map": [
        {
          "id": "surface",
          "label": "Surface",
          "region_role": "outer layout and background",
          "field_paths": [
            "appearance",
            "density"
          ],
          "token_roles": [
            "background",
            "panel",
            "panelElevated",
            "border"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": true,
          "summary": "navbar_flyout uses recipe surface tokens to keep the outer frame styled and composable."
        },
        {
          "id": "copy",
          "label": "Copy",
          "region_role": "headings, body copy, labels, and supporting text",
          "field_paths": [
            "actions[].label",
            "links[].label",
            "role",
            "secondary_links[].label",
            "utility_links[].label"
          ],
          "token_roles": [
            "text",
            "textMuted"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": true,
          "summary": "Copy fields map to primary and muted text roles so editors can change words without restyling the block."
        },
        {
          "id": "media",
          "label": "Media",
          "region_role": "replaceable image, iframe, embed, avatar, logo, or gallery area",
          "field_paths": [
            "logo_treatment"
          ],
          "token_roles": [
            "panelElevated",
            "border"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": false,
          "summary": "Media fields stay isolated from copy and action regions so replacement assets preserve the recipe layout."
        },
        {
          "id": "actions",
          "label": "Actions",
          "region_role": "CTA, link, event, and navigation affordances",
          "field_paths": [
            "actions",
            "actions[].href",
            "actions[].intent",
            "actions[0]",
            "brand",
            "links",
            "links[].href",
            "links[0]",
            "links[1]",
            "links[2]",
            "recipe",
            "secondary_links",
            "secondary_links[].href",
            "secondary_links[].intent",
            "secondary_links[0]",
            "utility_links",
            "utility_links[].href",
            "utility_links[].intent",
            "utility_links[0]"
          ],
          "token_roles": [
            "button",
            "buttonText",
            "signal",
            "uplink"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": false,
          "summary": "Action regions use recipe button and accent tokens while preserving href or event payloads."
        },
        {
          "id": "feedback",
          "label": "Feedback",
          "region_role": "status, validation, selected, loading, and disabled evidence",
          "field_paths": [],
          "token_roles": [
            "badge",
            "badgeText",
            "signal"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": true,
          "summary": "Feedback regions tie state-readiness evidence to visible recipe status treatments."
        }
      ],
      "anatomy_regions": [
        "surface",
        "copy",
        "media",
        "actions",
        "feedback"
      ],
      "anatomy_token_roles": [
        "background",
        "badge",
        "badgeText",
        "border",
        "button",
        "buttonText",
        "panel",
        "panelElevated",
        "signal",
        "text",
        "textMuted",
        "uplink"
      ],
      "action_count": 8,
      "action_map": [
        {
          "path": "actions[0]",
          "label": "Start building",
          "action_type": "primary",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Start building is a primary action linking to #block-preview."
        },
        {
          "path": "brand",
          "label": "Ensemble Header",
          "action_type": "link",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Ensemble Header is a link action linking to #block-preview."
        },
        {
          "path": "links[0]",
          "label": "Overview",
          "action_type": "navigation",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Overview is a navigation action linking to #block-preview."
        },
        {
          "path": "links[1]",
          "label": "Templates",
          "action_type": "navigation",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Templates is a navigation action linking to #block-preview."
        },
        {
          "path": "links[2]",
          "label": "Pricing",
          "action_type": "navigation",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Pricing is a navigation action linking to #block-preview."
        },
        {
          "path": "recipe",
          "label": "Balanced Brand",
          "action_type": "link",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Balanced Brand is a link action linking to #block-preview."
        },
        {
          "path": "secondary_links[0]",
          "label": "Docs",
          "action_type": "secondary",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Docs is a secondary action linking to #block-preview."
        },
        {
          "path": "utility_links[0]",
          "label": "Status",
          "action_type": "secondary",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Status is a secondary action linking to #block-preview."
        }
      ],
      "control_count": 0,
      "control_map": [],
      "style_token_count": 15,
      "style_token_map": [
        {
          "role": "background",
          "label": "Page background",
          "value": "#f7fbff",
          "token_type": "color",
          "summary": "Page background uses the background recipe token."
        },
        {
          "role": "panel",
          "label": "Panel surface",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Panel surface uses the panel recipe token."
        },
        {
          "role": "panelElevated",
          "label": "Elevated surface",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Elevated surface uses the panelElevated recipe token."
        },
        {
          "role": "text",
          "label": "Primary text",
          "value": "#142033",
          "token_type": "color",
          "summary": "Primary text uses the text recipe token."
        },
        {
          "role": "textMuted",
          "label": "Muted text",
          "value": "#526174",
          "token_type": "color",
          "summary": "Muted text uses the textMuted recipe token."
        },
        {
          "role": "signal",
          "label": "Signal accent",
          "value": "#166bff",
          "token_type": "color",
          "summary": "Signal accent uses the signal recipe token."
        },
        {
          "role": "uplink",
          "label": "Secondary accent",
          "value": "#00a6a6",
          "token_type": "color",
          "summary": "Secondary accent uses the uplink recipe token."
        },
        {
          "role": "border",
          "label": "Border",
          "value": "#d6dee8",
          "token_type": "color",
          "summary": "Border uses the border recipe token."
        },
        {
          "role": "control",
          "label": "Control surface",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Control surface uses the control recipe token."
        },
        {
          "role": "controlText",
          "label": "Control text",
          "value": "#142033",
          "token_type": "color",
          "summary": "Control text uses the controlText recipe token."
        },
        {
          "role": "button",
          "label": "Button surface",
          "value": "#166bff",
          "token_type": "color",
          "summary": "Button surface uses the button recipe token."
        },
        {
          "role": "buttonText",
          "label": "Button text",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Button text uses the buttonText recipe token."
        },
        {
          "role": "badge",
          "label": "Badge surface",
          "value": "#eef5ff",
          "token_type": "color",
          "summary": "Badge surface uses the badge recipe token."
        },
        {
          "role": "badgeText",
          "label": "Badge text",
          "value": "#174ea6",
          "token_type": "color",
          "summary": "Badge text uses the badgeText recipe token."
        },
        {
          "role": "fontFamily",
          "label": "Font family",
          "value": "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif",
          "token_type": "font",
          "summary": "Font family comes from the active recipe theme tokens."
        }
      ],
      "style_token_roles": [
        "background",
        "panel",
        "panelElevated",
        "text",
        "textMuted",
        "signal",
        "uplink",
        "border",
        "control",
        "controlText",
        "button",
        "buttonText",
        "badge",
        "badgeText",
        "fontFamily"
      ],
      "contrast_check_count": 6,
      "contrast_pass_count": 6,
      "contrast_checks": [
        {
          "id": "text-on-background",
          "label": "Text on background",
          "foreground_role": "text",
          "background_role": "background",
          "foreground": "#142033",
          "background": "#f7fbff",
          "ratio": 15.73,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Text on background is AAA at 15.73:1 against a 4.5:1 requirement."
        },
        {
          "id": "text-on-panel",
          "label": "Text on panel",
          "foreground_role": "text",
          "background_role": "panel",
          "foreground": "#142033",
          "background": "#ffffff",
          "ratio": 16.35,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Text on panel is AAA at 16.35:1 against a 4.5:1 requirement."
        },
        {
          "id": "muted-text-on-panel",
          "label": "Muted text on panel",
          "foreground_role": "textMuted",
          "background_role": "panel",
          "foreground": "#526174",
          "background": "#ffffff",
          "ratio": 6.32,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AA",
          "summary": "Muted text on panel is AA at 6.32:1 against a 4.5:1 requirement."
        },
        {
          "id": "button-text-on-button",
          "label": "Button text on button",
          "foreground_role": "buttonText",
          "background_role": "button",
          "foreground": "#ffffff",
          "background": "#166bff",
          "ratio": 4.58,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AA",
          "summary": "Button text on button is AA at 4.58:1 against a 4.5:1 requirement."
        },
        {
          "id": "control-text-on-control",
          "label": "Control text on control",
          "foreground_role": "controlText",
          "background_role": "control",
          "foreground": "#142033",
          "background": "#ffffff",
          "ratio": 16.35,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Control text on control is AAA at 16.35:1 against a 4.5:1 requirement."
        },
        {
          "id": "badge-text-on-badge",
          "label": "Badge text on badge",
          "foreground_role": "badgeText",
          "background_role": "badge",
          "foreground": "#174ea6",
          "background": "#eef5ff",
          "ratio": 7.15,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Badge text on badge is AAA at 7.15:1 against a 4.5:1 requirement."
        }
      ],
      "contrast_target": "AA",
      "accessibility_standard": "WCAG_2_2_AA",
      "accessibility_check_count": 5,
      "accessibility_checks": [
        {
          "id": "semantic-structure",
          "label": "Semantic structure",
          "category": "semantics",
          "status": "covered",
          "required": true,
          "proof": "navigation/header/footer landmarks and labels",
          "summary": "navbar_flyout keeps semantic wrappers and readable heading/copy structure in the runtime preview."
        },
        {
          "id": "keyboard-and-tap-targets",
          "label": "Keyboard and tap targets",
          "category": "keyboard",
          "status": "covered",
          "required": true,
          "proof": "mapped actions/controls render as native focusable surfaces",
          "summary": "Interactive surfaces stay reachable, focusable, and recipe-styled without shrinking below expected touch affordances."
        },
        {
          "id": "text-alternatives",
          "label": "Text alternatives",
          "category": "media",
          "status": "covered",
          "required": true,
          "proof": "media fields include alt/label/title fallbacks",
          "summary": "Media-ready recipes expose replaceable alt text or accessible labels for images, logos, embeds, and placeholders."
        },
        {
          "id": "control-labels",
          "label": "Control labels",
          "category": "forms",
          "status": "covered",
          "required": false,
          "proof": "no input controls in this payload",
          "summary": "No input controls are present, so there are no unlabeled fields to remediate."
        },
        {
          "id": "status-and-motion",
          "label": "Status and motion",
          "category": "state",
          "status": "covered",
          "required": true,
          "proof": "runtime evidence avoids hidden status-only content",
          "summary": "Recipe defaults avoid motion-only meaning and keep status text inspectable when state is present."
        }
      ],
      "responsive_behavior_count": 3,
      "responsive_behavior_map": [
        {
          "id": "phone",
          "label": "Phone",
          "viewport_width": 390,
          "layout_mode": "single-column stack",
          "column_count": 1,
          "spacing_density": "spacious",
          "media_policy": "Inline media uses full-width phone framing, tablet-friendly aspect ratios, and stable desktop constraints.",
          "overflow_policy": "min-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke.",
          "interaction_policy": "Actions remain visible, wrap before overflow, and preserve recipe button styling.",
          "proof": "npm run test:static:block-catalog all-blocks-phone",
          "summary": "Polished SaaS Growth stacks navbar_flyout into one phone column with spacious spacing and bounded content."
        },
        {
          "id": "tablet",
          "label": "Tablet",
          "viewport_width": 768,
          "layout_mode": "wide single-column composition",
          "column_count": 1,
          "spacing_density": "spacious",
          "media_policy": "Inline media uses full-width phone framing, tablet-friendly aspect ratios, and stable desktop constraints.",
          "overflow_policy": "tablet preview frames keep mid-width composition, wrap controls, and avoid horizontal overflow in the static catalog smoke.",
          "interaction_policy": "Actions remain visible, wrap before overflow, and preserve recipe button styling.",
          "proof": "npm run test:static:block-catalog all-blocks-tablet",
          "summary": "Polished SaaS Growth adapts navbar_flyout to 1 tablet column before expanding to the desktop layout."
        },
        {
          "id": "desktop",
          "label": "Desktop",
          "viewport_width": 1366,
          "layout_mode": "contained composition row",
          "column_count": 1,
          "spacing_density": "spacious",
          "media_policy": "Inline media uses full-width phone framing, tablet-friendly aspect ratios, and stable desktop constraints.",
          "overflow_policy": "desktop preview frames keep constrained widths, stable cards, and no horizontal overflow in the static catalog smoke.",
          "interaction_policy": "Actions remain visible, wrap before overflow, and preserve recipe button styling.",
          "proof": "npm run test:static:block-catalog all-blocks-desktop",
          "summary": "Polished SaaS Growth gives navbar_flyout up to 1 desktop column while preserving recipe spacing."
        }
      ],
      "responsive_viewports": [
        "phone",
        "tablet",
        "desktop"
      ],
      "responsive_proof": [
        "npm run test:static:block-catalog all-blocks-phone",
        "npm run test:static:block-catalog all-blocks-tablet",
        "npm run test:static:block-catalog all-blocks-desktop"
      ],
      "interactive_roles": [
        "link",
        "navigation",
        "primary",
        "secondary"
      ],
      "recipe_alignment": {
        "action_token": "button",
        "control_token": "control",
        "surface_token": "panel",
        "text_token": "text",
        "source": "theme recipe tokens"
      }
    },
    "cloneable": true
  }
}
dashboard

Compact Ops

Compact Opsoperator

A dense operator-friendly payload for dashboards, catalogs, forms, and internal review surfaces.

Component anatomy

Compact Ops anatomy

5 regions
Surfaceouter layout and background
required2 fields4 tokens

navbar_flyout uses recipe surface tokens to keep the outer frame styled and composable.

background, panel, panelElevated, border
Copyheadings, body copy, labels, and supporting text
required5 fields2 tokens

Copy fields map to primary and muted text roles so editors can change words without restyling the block.

text, textMuted
Mediareplaceable image, iframe, embed, avatar, logo, or gallery area
optional1 fields2 tokens

Media fields stay isolated from copy and action regions so replacement assets preserve the recipe layout.

panelElevated, border
ActionsCTA, link, event, and navigation affordances
optional20 fields4 tokens

Action regions use recipe button and accent tokens while preserving href or event payloads.

button, buttonText, signal, uplink
Feedbackstatus, validation, selected, loading, and disabled evidence
required0 fields3 tokens

Feedback regions tie state-readiness evidence to visible recipe status treatments.

badge, badgeText, signal
Recipe passport

Compact Ops passport

high
Fitoperator-review

Use when editors need denser navbar_flyout controls, diagnostics, or internal review context.

Editable fields25/26

Compact Ops is a high-complexity operator-review recipe with 5 documented composition slots.

Interactions9 actions / 0 controls

3 required regions, 2 optional regions.

Slots
Surface / 1/2Copy / 5/5Media / 1/1Actions / 14/20Feedback / 0/0
Replacement guidance
  • Keep Compact Ops recipe tokens as the source of visual styling for the surface, text, controls, and actions.
  • Replace media URLs through the CMS media library and preserve alt, title, provider, or label fallbacks.
  • Verify each action keeps either a valid href or canonical event name plus an editor-visible label.
  • No input controls are required; keep the recipe focused on its documented display regions.
  • The recipe does not require repeatable collection editing.
Publish checklist
  • Validate navbar_flyout against its block contract before publishing.
  • 3 required anatomy regions remain present: surface, copy, feedback.
  • 25/26 builder fields are CMS-editable or intentionally locked.
  • Interactive labels, target size, href/event wiring, and disabled states have been reviewed.
  • Phone, tablet, and desktop responsive behavior maps have been reviewed for wrapping and overflow.
  • Contrast checks meet the AA recipe target.
Recipe fit

Compact Ops recipe fit

6 axes
Page contextpage / primary
splashlistingblogproduct-pageservice-pageabout-page

navbar_flyout is best composed into splash, listing, blog, and related pages.

6 page types mapped for navbar_flyout.Choose the first matching page type before editing copy, media, or actions so the recipe starts in the right narrative context.
Section rolelayout / primary
site-navigationconversionmediacontent

navbar_flyout can act as site-navigation, conversion, media within a composed page.

5 anatomy regions produce 4 section roles.Place the block where its required anatomy regions have enough room before compressing it into dense page slots.
Content modelcontent / specialized
copy-ledmedia-ledcta-led

Compact Ops composition passport is copy-led, media-led, cta-led for CMS composition.

25/26 fields are editable across 3 content models.Keep the content model stable when replacing defaults; do not turn a repeatable or media-led recipe into unrelated ad hoc content.
Interaction modelinteraction / primary
primary-linklink-linknavigation-linksecondary-link

navbar_flyout carries primary-link, link-link, navigation-link, secondary-link interaction affordances.

9 action surfaces and 0 control surfaces mapped.Review href, event, input, required, and disabled-state evidence before publishing an interactive recipe.
Authoring fitauthoring / specialized
operator-reviewhigh-complexity18-high-care-replacements

navbar_flyout uses operator-review authoring with high complexity.

26 default provenance items with 18 high-care replacements.Use the default provenance map before cloning the recipe into CMS content or agent-generated page data.
Responsive fitresponsive / primary
single-column stackwide single-column compositioncontained composition rowmin-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke.

navbar_flyout has explicit phone, tablet, and desktop compatibility evidence for composed pages.

3 responsive behavior maps cover phone, tablet, and desktop composition.Review phone wrapping, tablet mid-width balance, and desktop density before adding nested content, longer labels, or extra media.
Visual polish

Compact Ops visual polish

6/6
Surface rhythmlayout

navbar_flyout keeps a stable recipe surface with panel, border, and spacing roles instead of ad hoc wrappers.

dense treatment uses compact density and 8px radius base.background, panel, panelElevated, border
Type hierarchytypography

Primary, muted, and badge text roles stay distinct enough for headings, body copy, metadata, and helper text.

6/6 contrast checks pass the AA target.text, textMuted, badgeText
Action clarityinteraction

Interactive regions use recipe action/control tokens and preserve labels, hrefs, events, required state, and options.

9 action surfaces and 0 control surfaces mapped.button, buttonText, control, controlText, signal, uplink
Media treatmentmedia

Replaceable media stays framed separately from copy and action regions so asset swaps preserve the layout.

Media region is isolated with replaceable fields.panelElevated, border, textMuted
State feedbackstate

Feedback, selected, loading, invalid, and disabled treatments use visible state evidence instead of color-only meaning.

6 state-readiness entries include default, empty, pending, active, invalid, disabled.badge, badgeText, signal
Responsive balanceresponsive

Phone, tablet, and desktop defaults have explicit stack, wrap, media, and overflow policies for the recipe.

single-column stack phone behavior, wide single-column composition tablet behavior, and contained composition row desktop behavior documented.panel, border, control
Default provenance

Compact Ops default provenance

26 fields
locked-tokenrequires-action-targetrequires-alt-textsafe-to-edit
  • Appearanceappearance
    locked-tokenmedium

    Keep visual styling aligned to Compact Ops recipe tokens unless the recipe itself changes.

    Compact Ops recipe tokens
  • Rolerole
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Topologytopology
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Densitydensity
    locked-tokenmedium

    Keep visual styling aligned to Compact Ops recipe tokens unless the recipe itself changes.

    Compact Ops recipe tokens
  • Containercontainer
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Logo Treatmentlogo_treatment
    requires-alt-textmedium

    Replace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful.

    Cloud Elephants placeholder media or CMS media library
  • Announcementannouncement
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Reciperecipe
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Brandbrand
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Linkslinks
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Links Item Labellinks[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Links Item Hreflinks[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Secondary Linkssecondary_links
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Secondary Links Item Labelsecondary_links[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Secondary Links Item Hrefsecondary_links[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Secondary Links Item Intentsecondary_links[].intent
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Utility Linksutility_links
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Utility Links Item Labelutility_links[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Utility Links Item Hrefutility_links[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Utility Links Item Intentutility_links[].intent
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Actionsactions
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Actions Item Labelactions[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Actions Item Hrefactions[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Actions Item Intentactions[].intent
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Behaviorbehavior
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Mobilemobile
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
Edit bundles

Compact Ops edit bundles

5 bundles
Copy bundlerequired / repeatable-items
actions[].labellinks[].labelrolesecondary_links[].labelutility_links[].label

Copy bundle groups 5 fields so CMS edits preserve the recipe shape and default polish.

cloneable block recipe payloadKeep the label paired with a valid href or canonical postEvent event name before publishing.
Media bundlerecommended / single-field
logo_treatment

Media bundle groups 1 field so CMS edits preserve the recipe shape and default polish.

Cloud Elephants placeholder media or CMS media libraryReplace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful.
Action bundlerecommended / repeatable-items
actionsactions[].hrefactions[].intentlinkslinks[].hrefsecondary_links+5

Action bundle groups 11 fields so CMS edits preserve the recipe shape and default polish.

CMS route, URL, or canonical postEvent pathKeep the label paired with a valid href or canonical postEvent event name before publishing.
Style bundleguarded / guarded-system
appearancedensity

Style bundle groups 2 fields so CMS edits preserve the recipe shape and default polish.

Compact Ops recipe tokensKeep visual styling aligned to Compact Ops recipe tokens unless the recipe itself changes.
Content bundlerequired / grouped-fields
announcementbehaviorbrandcontainermobilerecipe+1

Content bundle groups 7 fields so CMS edits preserve the recipe shape and default polish.

cloneable block recipe payloadKeep the label paired with a valid href or canonical postEvent event name before publishing.
CMS composition

Compact Ops fields

26 fields
actioncontentcopymediastyle
  • Appearanceappearance
    styleobject
  • Rolerole
    copystring
  • Topologytopology
    contentstring
  • Densitydensity
    stylestring
  • Containercontainer
    contentstring
  • Logo Treatmentlogo_treatment
    mediastring
  • Announcementannouncement
    contentobject
  • Reciperecipe
    contentobject
  • Brandbrand
    contentobject
  • Linkslinks
    actionarray
  • Links Item Labellinks[].label
    copystringrepeated
  • Links Item Hreflinks[].href
    actionstringrepeated
  • Secondary Linkssecondary_links
    actionarray
  • Secondary Links Item Labelsecondary_links[].label
    copystringrepeated
  • Secondary Links Item Hrefsecondary_links[].href
    actionstringrepeated
  • Secondary Links Item Intentsecondary_links[].intent
    actionstringrepeated
  • Utility Linksutility_links
    actionarray
  • Utility Links Item Labelutility_links[].label
    copystringrepeated
  • Utility Links Item Hrefutility_links[].href
    actionstringrepeated
  • Utility Links Item Intentutility_links[].intent
    actionstringrepeated
  • Actionsactions
    actionarray
  • Actions Item Labelactions[].label
    copystringrepeated
  • Actions Item Hrefactions[].href
    actionstringrepeated
  • Actions Item Intentactions[].intent
    actionstringrepeated
  • Behaviorbehavior
    contentobject
  • Mobilemobile
    contentobject
CMS editing

Compact Ops editor guidance

25/26 editable
Copytext/rich-text editor
5/5 editablecopy

Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.

cloneable block recipe payload
Mediamedia picker with alt text
1/1 editablemedia

Media should use a replaceable URL plus meaningful alt, label, or title fallback.

Cloud Elephants placeholder media or CMS media library
Actionlink or event action editor
11/11 editableaction

Actions should resolve to a URL or event name with a human-readable label.

CMS route, URL, or canonical postEvent path
Styleappearance preset selector
1/2 editablestyle

Style fields should prefer recipe or appearance tokens over one-off inline values.

Compact Ops recipe tokens
Contentplain content field
7/7 editablecontent

Content should remain serializable JSON and preserve the documented block contract.

cloneable block recipe payload
Default states

Compact Ops state readiness

6 states
DefaultInitial render with the cloneable recipe payload
coveredsurfacepaneltext

Compact Ops tokens with dense documentation treatment

The Compact Ops recipe renders a contract-safe primary state for navbar_flyout.
EmptyRepeatable collections have zero items
coveredpaneltextMutedbadge

Reserved panel space with fallback copy or placeholder media

Repeatable fields are documented for add, remove, reorder, and item-level editing.
PendingDeferred content or preview loading
coveredcontroltextMutedprogressTrack

Neutral reserved frame with status copy and no layout shift

Static recipe payloads reserve the same documented frame while content is loading.
ActiveSelected action, active link, checked input, or open disclosure
coveredsignaluplinkbutton

Signal/uplink emphasis with visible selected-state chips

9 action surfaces and 0 control surfaces are mapped for selected-state review.
InvalidMedia URL or provider data is invalid
coveredwarningdangerborder

Warning/danger status treatment while preserving the block frame

Media guidance requires URL plus accessible fallback text for invalid or missing assets.
DisabledUnavailable action or temporarily disabled control
coveredcontroltextMutedborder

Muted affordance with preserved label, spacing, and hit-area rhythm

Interactive maps preserve labels and control roles so disabled states can stay understandable.
Controls and actions

Compact Ops actions and controls

9 surfaces
linknavigationprimarysecondary
Actions
  • Start buildingactions[0]
    primary#block-preview
  • Template catalog previewannouncement
    link#block-preview
  • Ensemble Headerbrand
    link#block-preview
  • Overviewlinks[0]
    navigation#block-preview
  • Templateslinks[1]
    navigation#block-preview
  • Pricinglinks[2]
    navigation#block-preview
  • Compact Opsrecipe
    link#block-preview
  • Docssecondary_links[0]
    secondary#block-preview
  • Statusutility_links[0]
    secondary#block-preview
Controls

No input control is needed for this payload.

Recipe styling

Compact Ops style tokens

15 tokens
Page background#f7fbff
Panel surface#ffffff
Elevated surface#ffffff
Primary text#142033
Muted text#526174
Signal accent#166bff
Secondary accent#00a6a6
Border#d6dee8
Control surface#ffffff
Control text#142033
Button surface#166bff
Button text#ffffff
Badge surface#eef5ff
Badge text#174ea6
Font familyInter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif
Readability

Compact Ops contrast checks

6/6
Text on background15.73:1 / AAA
Text on panel16.35:1 / AAA
Muted text on panel6.32:1 / AA
Button text on button4.58:1 / AA
Control text on control16.35:1 / AAA
Badge text on badge7.15:1 / AAA
Accessibility proof

Compact Ops accessibility checks

WCAG 2.2 AA
Semantic structuresemantics / required

navbar_flyout keeps semantic wrappers and readable heading/copy structure in the runtime preview.

navigation/header/footer landmarks and labels
Keyboard and tap targetskeyboard / required

Interactive surfaces stay reachable, focusable, and recipe-styled without shrinking below expected touch affordances.

mapped actions/controls render as native focusable surfaces
Text alternativesmedia / required

Media-ready recipes expose replaceable alt text or accessible labels for images, logos, embeds, and placeholders.

media fields include alt/label/title fallbacks
Control labelsforms / contextual

No input controls are present, so there are no unlabeled fields to remediate.

no input controls in this payload
Status and motionstate / required

Recipe defaults avoid motion-only meaning and keep status text inspectable when state is present.

runtime evidence avoids hidden status-only content
Responsive proof

Compact Ops responsive behavior

3 viewports
Phone390px / single-column stack
1 colcompact

Compact Ops stacks navbar_flyout into one phone column with compact spacing and bounded content.

min-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke.
Tablet768px / wide single-column composition
1 colcompact

Compact Ops adapts navbar_flyout to 1 tablet column before expanding to the desktop layout.

tablet preview frames keep mid-width composition, wrap controls, and avoid horizontal overflow in the static catalog smoke.
Desktop1366px / contained composition row
1 colcompact

Compact Ops gives navbar_flyout up to 1 desktop column while preserving recipe spacing.

desktop preview frames keep constrained widths, stable cards, and no horizontal overflow in the static catalog smoke.
Structured payload
{
  "id": "block-doc-navbar-flyout-data-compact-ops",
  "block_type": "navbar_flyout",
  "props": {
    "appearance": {
      "preset": "dashboard"
    },
    "role": "catalog",
    "topology": "utility",
    "density": "compact",
    "container": "contained",
    "logo_treatment": "text",
    "announcement": {
      "label": "Template catalog preview",
      "href": "#block-preview",
      "intent": "utility"
    },
    "recipe": {
      "id": "compact-ops",
      "label": "Compact Ops",
      "href": "#block-preview",
      "appearance": "dashboard"
    },
    "brand": {
      "label": "Ensemble Header",
      "href": "#block-preview",
      "logo": "https://storage.googleapis.com/msgsndr/T3RhpcTQAq7Qb47kPQAB/media/677815b8c290c684d5bf3fbd.png",
      "logo_alt": "Cloud Elephants Essential CTO service visual."
    },
    "links": [
      {
        "label": "Overview",
        "href": "#block-preview"
      },
      {
        "label": "Templates",
        "href": "#block-preview"
      },
      {
        "label": "Pricing",
        "href": "#block-preview"
      }
    ],
    "secondary_links": [
      {
        "label": "Docs",
        "href": "#block-preview",
        "intent": "secondary"
      }
    ],
    "utility_links": [
      {
        "label": "Status",
        "href": "#block-preview",
        "intent": "utility"
      }
    ],
    "actions": [
      {
        "label": "Start building",
        "href": "#block-preview",
        "intent": "primary"
      }
    ],
    "behavior": {
      "sticky": true,
      "active_path": "none",
      "surface": "solid"
    },
    "mobile": {
      "mode": "drawer",
      "toggle_label": "Menu",
      "safe_area": true
    }
  },
  "block_order": 3,
  "metadata": {
    "composition_recipe": {
      "id": "compact-ops",
      "intent": "operator",
      "label": "Compact Ops",
      "recipe": "compact-ops",
      "source": "block-explorer",
      "quality_proof": [
        "composition"
      ],
      "composition_passport": {
        "id": "compact-ops",
        "label": "Compact Ops composition passport",
        "intent": "operator",
        "recipe": "compact-ops",
        "authoring_mode": "operator-review",
        "complexity": "high",
        "fit": "Use when editors need denser navbar_flyout controls, diagnostics, or internal review context.",
        "required_regions": [
          "surface",
          "copy",
          "feedback"
        ],
        "optional_regions": [
          "media",
          "actions"
        ],
        "slots": [
          {
            "id": "surface",
            "label": "Surface",
            "required": true,
            "field_count": 2,
            "editable_count": 1,
            "token_roles": [
              "background",
              "panel",
              "panelElevated",
              "border"
            ],
            "summary": "navbar_flyout uses recipe surface tokens to keep the outer frame styled and composable."
          },
          {
            "id": "copy",
            "label": "Copy",
            "required": true,
            "field_count": 5,
            "editable_count": 5,
            "token_roles": [
              "text",
              "textMuted"
            ],
            "summary": "Copy fields map to primary and muted text roles so editors can change words without restyling the block."
          },
          {
            "id": "media",
            "label": "Media",
            "required": false,
            "field_count": 1,
            "editable_count": 1,
            "token_roles": [
              "panelElevated",
              "border"
            ],
            "summary": "Media fields stay isolated from copy and action regions so replacement assets preserve the recipe layout."
          },
          {
            "id": "actions",
            "label": "Actions",
            "required": false,
            "field_count": 20,
            "editable_count": 14,
            "token_roles": [
              "button",
              "buttonText",
              "signal",
              "uplink"
            ],
            "summary": "Action regions use recipe button and accent tokens while preserving href or event payloads."
          },
          {
            "id": "feedback",
            "label": "Feedback",
            "required": true,
            "field_count": 0,
            "editable_count": 0,
            "token_roles": [
              "badge",
              "badgeText",
              "signal"
            ],
            "summary": "Feedback regions tie state-readiness evidence to visible recipe status treatments."
          }
        ],
        "builder_field_count": 26,
        "editable_field_count": 25,
        "action_count": 9,
        "control_count": 0,
        "replacement_guidance": [
          "Keep Compact Ops recipe tokens as the source of visual styling for the surface, text, controls, and actions.",
          "Replace media URLs through the CMS media library and preserve alt, title, provider, or label fallbacks.",
          "Verify each action keeps either a valid href or canonical event name plus an editor-visible label.",
          "No input controls are required; keep the recipe focused on its documented display regions.",
          "The recipe does not require repeatable collection editing."
        ],
        "publish_checklist": [
          "Validate navbar_flyout against its block contract before publishing.",
          "3 required anatomy regions remain present: surface, copy, feedback.",
          "25/26 builder fields are CMS-editable or intentionally locked.",
          "Interactive labels, target size, href/event wiring, and disabled states have been reviewed.",
          "Phone, tablet, and desktop responsive behavior maps have been reviewed for wrapping and overflow.",
          "Contrast checks meet the AA recipe target."
        ],
        "agent_notes": [
          "Prefer editing props fields described by the builder field map; metadata is evidence, not primary content.",
          "Preserve recipe_alignment token roles unless the page theme or recipe changes intentionally.",
          "Use the anatomy slots to compose or replace content without changing the block type."
        ],
        "summary": "Compact Ops is a high-complexity operator-review recipe with 5 documented composition slots."
      },
      "composition_passport_complexity": "high",
      "composition_passport_authoring_mode": "operator-review",
      "composition_passport_slots": [
        "surface",
        "copy",
        "media",
        "actions",
        "feedback"
      ],
      "composition_passport_check_count": 6,
      "visual_polish_check_count": 6,
      "visual_polish_pass_count": 6,
      "visual_polish_checks": [
        {
          "id": "surface-rhythm",
          "label": "Surface rhythm",
          "axis": "layout",
          "status": "ready",
          "token_roles": [
            "background",
            "panel",
            "panelElevated",
            "border"
          ],
          "evidence": "dense treatment uses compact density and 8px radius base.",
          "summary": "navbar_flyout keeps a stable recipe surface with panel, border, and spacing roles instead of ad hoc wrappers."
        },
        {
          "id": "type-hierarchy",
          "label": "Type hierarchy",
          "axis": "typography",
          "status": "ready",
          "token_roles": [
            "text",
            "textMuted",
            "badgeText"
          ],
          "evidence": "6/6 contrast checks pass the AA target.",
          "summary": "Primary, muted, and badge text roles stay distinct enough for headings, body copy, metadata, and helper text."
        },
        {
          "id": "action-clarity",
          "label": "Action clarity",
          "axis": "interaction",
          "status": "ready",
          "token_roles": [
            "button",
            "buttonText",
            "control",
            "controlText",
            "signal",
            "uplink"
          ],
          "evidence": "9 action surfaces and 0 control surfaces mapped.",
          "summary": "Interactive regions use recipe action/control tokens and preserve labels, hrefs, events, required state, and options."
        },
        {
          "id": "media-treatment",
          "label": "Media treatment",
          "axis": "media",
          "status": "ready",
          "token_roles": [
            "panelElevated",
            "border",
            "textMuted"
          ],
          "evidence": "Media region is isolated with replaceable fields.",
          "summary": "Replaceable media stays framed separately from copy and action regions so asset swaps preserve the layout."
        },
        {
          "id": "state-feedback",
          "label": "State feedback",
          "axis": "state",
          "status": "ready",
          "token_roles": [
            "badge",
            "badgeText",
            "signal"
          ],
          "evidence": "6 state-readiness entries include default, empty, pending, active, invalid, disabled.",
          "summary": "Feedback, selected, loading, invalid, and disabled treatments use visible state evidence instead of color-only meaning."
        },
        {
          "id": "responsive-balance",
          "label": "Responsive balance",
          "axis": "responsive",
          "status": "ready",
          "token_roles": [
            "panel",
            "border",
            "control"
          ],
          "evidence": "single-column stack phone behavior, wide single-column composition tablet behavior, and contained composition row desktop behavior documented.",
          "summary": "Phone, tablet, and desktop defaults have explicit stack, wrap, media, and overflow policies for the recipe."
        }
      ],
      "visual_polish_axes": [
        "layout",
        "typography",
        "interaction",
        "media",
        "state",
        "responsive"
      ],
      "default_provenance_count": 26,
      "default_provenance_map": [
        {
          "path": "appearance",
          "label": "Appearance",
          "field_role": "style",
          "value_type": "object",
          "editable": false,
          "repeated": false,
          "default_source": "Compact Ops recipe tokens",
          "replacement_policy": "locked-token",
          "replacement_risk": "medium",
          "guardrail": "Keep visual styling aligned to Compact Ops recipe tokens unless the recipe itself changes.",
          "validation": "Style fields should prefer recipe or appearance tokens over one-off inline values.",
          "summary": "Appearance defaults from Compact Ops recipe tokens; replacement is medium risk with locked-token policy."
        },
        {
          "path": "role",
          "label": "Role",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Role defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "topology",
          "label": "Topology",
          "field_role": "content",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Topology defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "density",
          "label": "Density",
          "field_role": "style",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "Compact Ops recipe tokens",
          "replacement_policy": "locked-token",
          "replacement_risk": "medium",
          "guardrail": "Keep visual styling aligned to Compact Ops recipe tokens unless the recipe itself changes.",
          "validation": "Style fields should prefer recipe or appearance tokens over one-off inline values.",
          "summary": "Density defaults from Compact Ops recipe tokens; replacement is medium risk with locked-token policy."
        },
        {
          "path": "container",
          "label": "Container",
          "field_role": "content",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Container defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "logo_treatment",
          "label": "Logo Treatment",
          "field_role": "media",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "Cloud Elephants placeholder media or CMS media library",
          "replacement_policy": "requires-alt-text",
          "replacement_risk": "medium",
          "guardrail": "Replace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful.",
          "validation": "Media should use a replaceable URL plus meaningful alt, label, or title fallback.",
          "summary": "Logo Treatment defaults from Cloud Elephants placeholder media or CMS media library; replacement is medium risk with requires-alt-text policy."
        },
        {
          "path": "announcement",
          "label": "Announcement",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Announcement defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "recipe",
          "label": "Recipe",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Recipe defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "brand",
          "label": "Brand",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Brand defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "links",
          "label": "Links",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Links defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "links[].label",
          "label": "Links Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Links Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "links[].href",
          "label": "Links Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Links Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links",
          "label": "Secondary Links",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Secondary Links defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links[].label",
          "label": "Secondary Links Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Secondary Links Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links[].href",
          "label": "Secondary Links Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Secondary Links Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links[].intent",
          "label": "Secondary Links Item Intent",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Secondary Links Item Intent defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links",
          "label": "Utility Links",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Utility Links defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links[].label",
          "label": "Utility Links Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Utility Links Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links[].href",
          "label": "Utility Links Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Utility Links Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links[].intent",
          "label": "Utility Links Item Intent",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Utility Links Item Intent defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions",
          "label": "Actions",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Actions defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions[].label",
          "label": "Actions Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Actions Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions[].href",
          "label": "Actions Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Actions Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions[].intent",
          "label": "Actions Item Intent",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Actions Item Intent defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "behavior",
          "label": "Behavior",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Behavior defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "mobile",
          "label": "Mobile",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Mobile defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        }
      ],
      "default_replacement_policies": [
        "locked-token",
        "requires-action-target",
        "requires-alt-text",
        "safe-to-edit"
      ],
      "default_replacement_risks": [
        "high",
        "low",
        "medium"
      ],
      "default_replacement_high_risk_count": 18,
      "content_edit_bundle_count": 5,
      "content_edit_bundles": [
        {
          "id": "copy",
          "label": "Copy bundle",
          "intent": "required",
          "edit_mode": "repeatable-items",
          "field_paths": [
            "actions[].label",
            "links[].label",
            "role",
            "secondary_links[].label",
            "utility_links[].label"
          ],
          "default_sources": [
            "cloneable block recipe payload"
          ],
          "guardrails": [
            "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
            "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths."
          ],
          "depends_on": [
            "type hierarchy",
            "mobile wrapping"
          ],
          "summary": "Copy bundle groups 5 fields so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "media",
          "label": "Media bundle",
          "intent": "recommended",
          "edit_mode": "single-field",
          "field_paths": [
            "logo_treatment"
          ],
          "default_sources": [
            "Cloud Elephants placeholder media or CMS media library"
          ],
          "guardrails": [
            "Replace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful."
          ],
          "depends_on": [
            "copy alt text",
            "responsive fit"
          ],
          "summary": "Media bundle groups 1 field so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "actions",
          "label": "Action bundle",
          "intent": "recommended",
          "edit_mode": "repeatable-items",
          "field_paths": [
            "actions",
            "actions[].href",
            "actions[].intent",
            "links",
            "links[].href",
            "secondary_links",
            "secondary_links[].href",
            "secondary_links[].intent",
            "utility_links",
            "utility_links[].href",
            "utility_links[].intent"
          ],
          "default_sources": [
            "CMS route, URL, or canonical postEvent path"
          ],
          "guardrails": [
            "Keep the label paired with a valid href or canonical postEvent event name before publishing."
          ],
          "depends_on": [
            "copy labels",
            "href or event target",
            "state readiness"
          ],
          "summary": "Action bundle groups 11 fields so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "style",
          "label": "Style bundle",
          "intent": "guarded",
          "edit_mode": "guarded-system",
          "field_paths": [
            "appearance",
            "density"
          ],
          "default_sources": [
            "Compact Ops recipe tokens"
          ],
          "guardrails": [
            "Keep visual styling aligned to Compact Ops recipe tokens unless the recipe itself changes."
          ],
          "depends_on": [
            "theme recipe tokens",
            "contrast proof"
          ],
          "summary": "Style bundle groups 2 fields so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "content",
          "label": "Content bundle",
          "intent": "required",
          "edit_mode": "grouped-fields",
          "field_paths": [
            "announcement",
            "behavior",
            "brand",
            "container",
            "mobile",
            "recipe",
            "topology"
          ],
          "default_sources": [
            "cloneable block recipe payload"
          ],
          "guardrails": [
            "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
            "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths."
          ],
          "depends_on": [
            "contract-safe JSON"
          ],
          "summary": "Content bundle groups 7 fields so CMS edits preserve the recipe shape and default polish."
        }
      ],
      "content_edit_bundle_ids": [
        "copy",
        "media",
        "actions",
        "style",
        "content"
      ],
      "content_edit_bundle_modes": [
        "grouped-fields",
        "guarded-system",
        "repeatable-items",
        "single-field"
      ],
      "content_edit_bundle_required_count": 2,
      "content_edit_bundle_guarded_count": 1,
      "recipe_compatibility_count": 6,
      "recipe_compatibility_map": [
        {
          "id": "page-context",
          "label": "Page context",
          "axis": "page",
          "fit": "primary",
          "values": [
            "splash",
            "listing",
            "blog",
            "product-page",
            "service-page",
            "about-page"
          ],
          "evidence": "6 page types mapped for navbar_flyout.",
          "guardrail": "Choose the first matching page type before editing copy, media, or actions so the recipe starts in the right narrative context.",
          "summary": "navbar_flyout is best composed into splash, listing, blog, and related pages."
        },
        {
          "id": "section-role",
          "label": "Section role",
          "axis": "layout",
          "fit": "primary",
          "values": [
            "site-navigation",
            "conversion",
            "media",
            "content"
          ],
          "evidence": "5 anatomy regions produce 4 section roles.",
          "guardrail": "Place the block where its required anatomy regions have enough room before compressing it into dense page slots.",
          "summary": "navbar_flyout can act as site-navigation, conversion, media within a composed page."
        },
        {
          "id": "content-model",
          "label": "Content model",
          "axis": "content",
          "fit": "specialized",
          "values": [
            "copy-led",
            "media-led",
            "cta-led"
          ],
          "evidence": "25/26 fields are editable across 3 content models.",
          "guardrail": "Keep the content model stable when replacing defaults; do not turn a repeatable or media-led recipe into unrelated ad hoc content.",
          "summary": "Compact Ops composition passport is copy-led, media-led, cta-led for CMS composition."
        },
        {
          "id": "interaction-model",
          "label": "Interaction model",
          "axis": "interaction",
          "fit": "primary",
          "values": [
            "primary-link",
            "link-link",
            "navigation-link",
            "secondary-link"
          ],
          "evidence": "9 action surfaces and 0 control surfaces mapped.",
          "guardrail": "Review href, event, input, required, and disabled-state evidence before publishing an interactive recipe.",
          "summary": "navbar_flyout carries primary-link, link-link, navigation-link, secondary-link interaction affordances."
        },
        {
          "id": "authoring-fit",
          "label": "Authoring fit",
          "axis": "authoring",
          "fit": "specialized",
          "values": [
            "operator-review",
            "high-complexity",
            "18-high-care-replacements"
          ],
          "evidence": "26 default provenance items with 18 high-care replacements.",
          "guardrail": "Use the default provenance map before cloning the recipe into CMS content or agent-generated page data.",
          "summary": "navbar_flyout uses operator-review authoring with high complexity."
        },
        {
          "id": "responsive-fit",
          "label": "Responsive fit",
          "axis": "responsive",
          "fit": "primary",
          "values": [
            "single-column stack",
            "wide single-column composition",
            "contained composition row",
            "min-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke."
          ],
          "evidence": "3 responsive behavior maps cover phone, tablet, and desktop composition.",
          "guardrail": "Review phone wrapping, tablet mid-width balance, and desktop density before adding nested content, longer labels, or extra media.",
          "summary": "navbar_flyout has explicit phone, tablet, and desktop compatibility evidence for composed pages."
        }
      ],
      "recipe_compatibility_axes": [
        "page",
        "layout",
        "content",
        "interaction",
        "authoring",
        "responsive"
      ],
      "recipe_compatibility_page_types": [
        "splash",
        "listing",
        "blog",
        "product-page",
        "service-page",
        "about-page"
      ],
      "recipe_compatibility_section_roles": [
        "site-navigation",
        "conversion",
        "media",
        "content"
      ],
      "recipe_compatibility_fits": [
        "primary",
        "specialized"
      ],
      "builder_field_count": 26,
      "builder_field_map": [
        {
          "path": "appearance",
          "label": "Appearance",
          "value_type": "object",
          "role": "style",
          "editable": false,
          "repeated": false,
          "summary": "Appearance is a object field used for style."
        },
        {
          "path": "role",
          "label": "Role",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": false,
          "summary": "Role is a string field used for copy."
        },
        {
          "path": "topology",
          "label": "Topology",
          "value_type": "string",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Topology is a string field used for content."
        },
        {
          "path": "density",
          "label": "Density",
          "value_type": "string",
          "role": "style",
          "editable": true,
          "repeated": false,
          "summary": "Density is a string field used for style."
        },
        {
          "path": "container",
          "label": "Container",
          "value_type": "string",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Container is a string field used for content."
        },
        {
          "path": "logo_treatment",
          "label": "Logo Treatment",
          "value_type": "string",
          "role": "media",
          "editable": true,
          "repeated": false,
          "summary": "Logo Treatment is a string field used for media."
        },
        {
          "path": "announcement",
          "label": "Announcement",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Announcement is a object field used for content."
        },
        {
          "path": "recipe",
          "label": "Recipe",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Recipe is a object field used for content."
        },
        {
          "path": "brand",
          "label": "Brand",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Brand is a object field used for content."
        },
        {
          "path": "links",
          "label": "Links",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Links is a array field used for action."
        },
        {
          "path": "links[].label",
          "label": "Links Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Links Item Label is a string collection field used for copy."
        },
        {
          "path": "links[].href",
          "label": "Links Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Links Item Href is a string collection field used for action."
        },
        {
          "path": "secondary_links",
          "label": "Secondary Links",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Secondary Links is a array field used for action."
        },
        {
          "path": "secondary_links[].label",
          "label": "Secondary Links Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Secondary Links Item Label is a string collection field used for copy."
        },
        {
          "path": "secondary_links[].href",
          "label": "Secondary Links Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Secondary Links Item Href is a string collection field used for action."
        },
        {
          "path": "secondary_links[].intent",
          "label": "Secondary Links Item Intent",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Secondary Links Item Intent is a string collection field used for action."
        },
        {
          "path": "utility_links",
          "label": "Utility Links",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Utility Links is a array field used for action."
        },
        {
          "path": "utility_links[].label",
          "label": "Utility Links Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Utility Links Item Label is a string collection field used for copy."
        },
        {
          "path": "utility_links[].href",
          "label": "Utility Links Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Utility Links Item Href is a string collection field used for action."
        },
        {
          "path": "utility_links[].intent",
          "label": "Utility Links Item Intent",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Utility Links Item Intent is a string collection field used for action."
        },
        {
          "path": "actions",
          "label": "Actions",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Actions is a array field used for action."
        },
        {
          "path": "actions[].label",
          "label": "Actions Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Actions Item Label is a string collection field used for copy."
        },
        {
          "path": "actions[].href",
          "label": "Actions Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Actions Item Href is a string collection field used for action."
        },
        {
          "path": "actions[].intent",
          "label": "Actions Item Intent",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Actions Item Intent is a string collection field used for action."
        },
        {
          "path": "behavior",
          "label": "Behavior",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Behavior is a object field used for content."
        },
        {
          "path": "mobile",
          "label": "Mobile",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Mobile is a object field used for content."
        }
      ],
      "editor_guidance_count": 5,
      "editor_guidance_map": [
        {
          "id": "copy",
          "label": "Copy",
          "field_role": "copy",
          "field_count": 5,
          "editable_count": 5,
          "editor_widget": "text/rich-text editor",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "default_source": "cloneable block recipe payload",
          "summary": "Copy fields use the text/rich-text editor across 5/5 editable fields."
        },
        {
          "id": "media",
          "label": "Media",
          "field_role": "media",
          "field_count": 1,
          "editable_count": 1,
          "editor_widget": "media picker with alt text",
          "validation": "Media should use a replaceable URL plus meaningful alt, label, or title fallback.",
          "default_source": "Cloud Elephants placeholder media or CMS media library",
          "summary": "Media fields use the media picker with alt text across 1/1 editable field."
        },
        {
          "id": "action",
          "label": "Action",
          "field_role": "action",
          "field_count": 11,
          "editable_count": 11,
          "editor_widget": "link or event action editor",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "default_source": "CMS route, URL, or canonical postEvent path",
          "summary": "Action fields use the link or event action editor across 11/11 editable fields."
        },
        {
          "id": "style",
          "label": "Style",
          "field_role": "style",
          "field_count": 2,
          "editable_count": 1,
          "editor_widget": "appearance preset selector",
          "validation": "Style fields should prefer recipe or appearance tokens over one-off inline values.",
          "default_source": "Compact Ops recipe tokens",
          "summary": "Style fields use the appearance preset selector across 1/2 editable fields."
        },
        {
          "id": "content",
          "label": "Content",
          "field_role": "content",
          "field_count": 7,
          "editable_count": 7,
          "editor_widget": "plain content field",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "default_source": "cloneable block recipe payload",
          "summary": "Content fields use the plain content field across 7/7 editable fields."
        }
      ],
      "editor_field_roles": [
        "copy",
        "media",
        "action",
        "style",
        "content"
      ],
      "editor_editable_field_count": 25,
      "state_readiness_count": 6,
      "state_readiness_map": [
        {
          "id": "default",
          "label": "Default",
          "status": "covered",
          "trigger": "Initial render with the cloneable recipe payload",
          "visual_treatment": "Compact Ops tokens with dense documentation treatment",
          "token_roles": [
            "surface",
            "panel",
            "text",
            "button"
          ],
          "proof": "The Compact Ops recipe renders a contract-safe primary state for navbar_flyout.",
          "summary": "Default state uses the recipe surface, text, and action tokens without one-off styling."
        },
        {
          "id": "empty",
          "label": "Empty",
          "status": "covered",
          "trigger": "Repeatable collections have zero items",
          "visual_treatment": "Reserved panel space with fallback copy or placeholder media",
          "token_roles": [
            "panel",
            "textMuted",
            "badge",
            "border"
          ],
          "proof": "Repeatable fields are documented for add, remove, reorder, and item-level editing.",
          "summary": "Empty-state guidance preserves layout rhythm instead of collapsing the block surface."
        },
        {
          "id": "pending",
          "label": "Pending",
          "status": "covered",
          "trigger": "Deferred content or preview loading",
          "visual_treatment": "Neutral reserved frame with status copy and no layout shift",
          "token_roles": [
            "control",
            "textMuted",
            "progressTrack",
            "border"
          ],
          "proof": "Static recipe payloads reserve the same documented frame while content is loading.",
          "summary": "Pending state keeps dimensions stable while using muted control/status tokens."
        },
        {
          "id": "active",
          "label": "Active",
          "status": "covered",
          "trigger": "Selected action, active link, checked input, or open disclosure",
          "visual_treatment": "Signal/uplink emphasis with visible selected-state chips",
          "token_roles": [
            "signal",
            "uplink",
            "button",
            "badge"
          ],
          "proof": "9 action surfaces and 0 control surfaces are mapped for selected-state review.",
          "summary": "Active state is represented with recipe accent tokens and visible state labels."
        },
        {
          "id": "invalid",
          "label": "Invalid",
          "status": "covered",
          "trigger": "Media URL or provider data is invalid",
          "visual_treatment": "Warning/danger status treatment while preserving the block frame",
          "token_roles": [
            "warning",
            "danger",
            "border",
            "text"
          ],
          "proof": "Media guidance requires URL plus accessible fallback text for invalid or missing assets.",
          "summary": "Invalid state guidance favors explicit status evidence over ambiguous visual collapse."
        },
        {
          "id": "disabled",
          "label": "Disabled",
          "status": "covered",
          "trigger": "Unavailable action or temporarily disabled control",
          "visual_treatment": "Muted affordance with preserved label, spacing, and hit-area rhythm",
          "token_roles": [
            "control",
            "textMuted",
            "border",
            "panel"
          ],
          "proof": "Interactive maps preserve labels and control roles so disabled states can stay understandable.",
          "summary": "Disabled state keeps the block readable and spatially stable when interaction is unavailable."
        }
      ],
      "state_readiness_states": [
        "default",
        "empty",
        "pending",
        "active",
        "invalid",
        "disabled"
      ],
      "state_readiness_statuses": [
        "covered",
        "covered",
        "covered",
        "covered",
        "covered",
        "covered"
      ],
      "anatomy_region_count": 5,
      "anatomy_map": [
        {
          "id": "surface",
          "label": "Surface",
          "region_role": "outer layout and background",
          "field_paths": [
            "appearance",
            "density"
          ],
          "token_roles": [
            "background",
            "panel",
            "panelElevated",
            "border"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": true,
          "summary": "navbar_flyout uses recipe surface tokens to keep the outer frame styled and composable."
        },
        {
          "id": "copy",
          "label": "Copy",
          "region_role": "headings, body copy, labels, and supporting text",
          "field_paths": [
            "actions[].label",
            "links[].label",
            "role",
            "secondary_links[].label",
            "utility_links[].label"
          ],
          "token_roles": [
            "text",
            "textMuted"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": true,
          "summary": "Copy fields map to primary and muted text roles so editors can change words without restyling the block."
        },
        {
          "id": "media",
          "label": "Media",
          "region_role": "replaceable image, iframe, embed, avatar, logo, or gallery area",
          "field_paths": [
            "logo_treatment"
          ],
          "token_roles": [
            "panelElevated",
            "border"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": false,
          "summary": "Media fields stay isolated from copy and action regions so replacement assets preserve the recipe layout."
        },
        {
          "id": "actions",
          "label": "Actions",
          "region_role": "CTA, link, event, and navigation affordances",
          "field_paths": [
            "actions",
            "actions[].href",
            "actions[].intent",
            "actions[0]",
            "announcement",
            "brand",
            "links",
            "links[].href",
            "links[0]",
            "links[1]",
            "links[2]",
            "recipe",
            "secondary_links",
            "secondary_links[].href",
            "secondary_links[].intent",
            "secondary_links[0]",
            "utility_links",
            "utility_links[].href",
            "utility_links[].intent",
            "utility_links[0]"
          ],
          "token_roles": [
            "button",
            "buttonText",
            "signal",
            "uplink"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": false,
          "summary": "Action regions use recipe button and accent tokens while preserving href or event payloads."
        },
        {
          "id": "feedback",
          "label": "Feedback",
          "region_role": "status, validation, selected, loading, and disabled evidence",
          "field_paths": [],
          "token_roles": [
            "badge",
            "badgeText",
            "signal"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": true,
          "summary": "Feedback regions tie state-readiness evidence to visible recipe status treatments."
        }
      ],
      "anatomy_regions": [
        "surface",
        "copy",
        "media",
        "actions",
        "feedback"
      ],
      "anatomy_token_roles": [
        "background",
        "badge",
        "badgeText",
        "border",
        "button",
        "buttonText",
        "panel",
        "panelElevated",
        "signal",
        "text",
        "textMuted",
        "uplink"
      ],
      "action_count": 9,
      "action_map": [
        {
          "path": "actions[0]",
          "label": "Start building",
          "action_type": "primary",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Start building is a primary action linking to #block-preview."
        },
        {
          "path": "announcement",
          "label": "Template catalog preview",
          "action_type": "link",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Template catalog preview is a link action linking to #block-preview."
        },
        {
          "path": "brand",
          "label": "Ensemble Header",
          "action_type": "link",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Ensemble Header is a link action linking to #block-preview."
        },
        {
          "path": "links[0]",
          "label": "Overview",
          "action_type": "navigation",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Overview is a navigation action linking to #block-preview."
        },
        {
          "path": "links[1]",
          "label": "Templates",
          "action_type": "navigation",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Templates is a navigation action linking to #block-preview."
        },
        {
          "path": "links[2]",
          "label": "Pricing",
          "action_type": "navigation",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Pricing is a navigation action linking to #block-preview."
        },
        {
          "path": "recipe",
          "label": "Compact Ops",
          "action_type": "link",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Compact Ops is a link action linking to #block-preview."
        },
        {
          "path": "secondary_links[0]",
          "label": "Docs",
          "action_type": "secondary",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Docs is a secondary action linking to #block-preview."
        },
        {
          "path": "utility_links[0]",
          "label": "Status",
          "action_type": "secondary",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Status is a secondary action linking to #block-preview."
        }
      ],
      "control_count": 0,
      "control_map": [],
      "style_token_count": 15,
      "style_token_map": [
        {
          "role": "background",
          "label": "Page background",
          "value": "#f7fbff",
          "token_type": "color",
          "summary": "Page background uses the background recipe token."
        },
        {
          "role": "panel",
          "label": "Panel surface",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Panel surface uses the panel recipe token."
        },
        {
          "role": "panelElevated",
          "label": "Elevated surface",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Elevated surface uses the panelElevated recipe token."
        },
        {
          "role": "text",
          "label": "Primary text",
          "value": "#142033",
          "token_type": "color",
          "summary": "Primary text uses the text recipe token."
        },
        {
          "role": "textMuted",
          "label": "Muted text",
          "value": "#526174",
          "token_type": "color",
          "summary": "Muted text uses the textMuted recipe token."
        },
        {
          "role": "signal",
          "label": "Signal accent",
          "value": "#166bff",
          "token_type": "color",
          "summary": "Signal accent uses the signal recipe token."
        },
        {
          "role": "uplink",
          "label": "Secondary accent",
          "value": "#00a6a6",
          "token_type": "color",
          "summary": "Secondary accent uses the uplink recipe token."
        },
        {
          "role": "border",
          "label": "Border",
          "value": "#d6dee8",
          "token_type": "color",
          "summary": "Border uses the border recipe token."
        },
        {
          "role": "control",
          "label": "Control surface",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Control surface uses the control recipe token."
        },
        {
          "role": "controlText",
          "label": "Control text",
          "value": "#142033",
          "token_type": "color",
          "summary": "Control text uses the controlText recipe token."
        },
        {
          "role": "button",
          "label": "Button surface",
          "value": "#166bff",
          "token_type": "color",
          "summary": "Button surface uses the button recipe token."
        },
        {
          "role": "buttonText",
          "label": "Button text",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Button text uses the buttonText recipe token."
        },
        {
          "role": "badge",
          "label": "Badge surface",
          "value": "#eef5ff",
          "token_type": "color",
          "summary": "Badge surface uses the badge recipe token."
        },
        {
          "role": "badgeText",
          "label": "Badge text",
          "value": "#174ea6",
          "token_type": "color",
          "summary": "Badge text uses the badgeText recipe token."
        },
        {
          "role": "fontFamily",
          "label": "Font family",
          "value": "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif",
          "token_type": "font",
          "summary": "Font family comes from the active recipe theme tokens."
        }
      ],
      "style_token_roles": [
        "background",
        "panel",
        "panelElevated",
        "text",
        "textMuted",
        "signal",
        "uplink",
        "border",
        "control",
        "controlText",
        "button",
        "buttonText",
        "badge",
        "badgeText",
        "fontFamily"
      ],
      "contrast_check_count": 6,
      "contrast_pass_count": 6,
      "contrast_checks": [
        {
          "id": "text-on-background",
          "label": "Text on background",
          "foreground_role": "text",
          "background_role": "background",
          "foreground": "#142033",
          "background": "#f7fbff",
          "ratio": 15.73,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Text on background is AAA at 15.73:1 against a 4.5:1 requirement."
        },
        {
          "id": "text-on-panel",
          "label": "Text on panel",
          "foreground_role": "text",
          "background_role": "panel",
          "foreground": "#142033",
          "background": "#ffffff",
          "ratio": 16.35,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Text on panel is AAA at 16.35:1 against a 4.5:1 requirement."
        },
        {
          "id": "muted-text-on-panel",
          "label": "Muted text on panel",
          "foreground_role": "textMuted",
          "background_role": "panel",
          "foreground": "#526174",
          "background": "#ffffff",
          "ratio": 6.32,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AA",
          "summary": "Muted text on panel is AA at 6.32:1 against a 4.5:1 requirement."
        },
        {
          "id": "button-text-on-button",
          "label": "Button text on button",
          "foreground_role": "buttonText",
          "background_role": "button",
          "foreground": "#ffffff",
          "background": "#166bff",
          "ratio": 4.58,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AA",
          "summary": "Button text on button is AA at 4.58:1 against a 4.5:1 requirement."
        },
        {
          "id": "control-text-on-control",
          "label": "Control text on control",
          "foreground_role": "controlText",
          "background_role": "control",
          "foreground": "#142033",
          "background": "#ffffff",
          "ratio": 16.35,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Control text on control is AAA at 16.35:1 against a 4.5:1 requirement."
        },
        {
          "id": "badge-text-on-badge",
          "label": "Badge text on badge",
          "foreground_role": "badgeText",
          "background_role": "badge",
          "foreground": "#174ea6",
          "background": "#eef5ff",
          "ratio": 7.15,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Badge text on badge is AAA at 7.15:1 against a 4.5:1 requirement."
        }
      ],
      "contrast_target": "AA",
      "accessibility_standard": "WCAG_2_2_AA",
      "accessibility_check_count": 5,
      "accessibility_checks": [
        {
          "id": "semantic-structure",
          "label": "Semantic structure",
          "category": "semantics",
          "status": "covered",
          "required": true,
          "proof": "navigation/header/footer landmarks and labels",
          "summary": "navbar_flyout keeps semantic wrappers and readable heading/copy structure in the runtime preview."
        },
        {
          "id": "keyboard-and-tap-targets",
          "label": "Keyboard and tap targets",
          "category": "keyboard",
          "status": "covered",
          "required": true,
          "proof": "mapped actions/controls render as native focusable surfaces",
          "summary": "Interactive surfaces stay reachable, focusable, and recipe-styled without shrinking below expected touch affordances."
        },
        {
          "id": "text-alternatives",
          "label": "Text alternatives",
          "category": "media",
          "status": "covered",
          "required": true,
          "proof": "media fields include alt/label/title fallbacks",
          "summary": "Media-ready recipes expose replaceable alt text or accessible labels for images, logos, embeds, and placeholders."
        },
        {
          "id": "control-labels",
          "label": "Control labels",
          "category": "forms",
          "status": "covered",
          "required": false,
          "proof": "no input controls in this payload",
          "summary": "No input controls are present, so there are no unlabeled fields to remediate."
        },
        {
          "id": "status-and-motion",
          "label": "Status and motion",
          "category": "state",
          "status": "covered",
          "required": true,
          "proof": "runtime evidence avoids hidden status-only content",
          "summary": "Recipe defaults avoid motion-only meaning and keep status text inspectable when state is present."
        }
      ],
      "responsive_behavior_count": 3,
      "responsive_behavior_map": [
        {
          "id": "phone",
          "label": "Phone",
          "viewport_width": 390,
          "layout_mode": "single-column stack",
          "column_count": 1,
          "spacing_density": "compact",
          "media_policy": "Media slots remain optional and collapse without leaving empty chrome.",
          "overflow_policy": "min-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke.",
          "interaction_policy": "Actions remain visible, wrap before overflow, and preserve recipe button styling.",
          "proof": "npm run test:static:block-catalog all-blocks-phone",
          "summary": "Compact Ops stacks navbar_flyout into one phone column with compact spacing and bounded content."
        },
        {
          "id": "tablet",
          "label": "Tablet",
          "viewport_width": 768,
          "layout_mode": "wide single-column composition",
          "column_count": 1,
          "spacing_density": "compact",
          "media_policy": "Media slots remain optional and collapse without leaving empty chrome.",
          "overflow_policy": "tablet preview frames keep mid-width composition, wrap controls, and avoid horizontal overflow in the static catalog smoke.",
          "interaction_policy": "Actions remain visible, wrap before overflow, and preserve recipe button styling.",
          "proof": "npm run test:static:block-catalog all-blocks-tablet",
          "summary": "Compact Ops adapts navbar_flyout to 1 tablet column before expanding to the desktop layout."
        },
        {
          "id": "desktop",
          "label": "Desktop",
          "viewport_width": 1366,
          "layout_mode": "contained composition row",
          "column_count": 1,
          "spacing_density": "compact",
          "media_policy": "Media slots remain optional and collapse without leaving empty chrome.",
          "overflow_policy": "desktop preview frames keep constrained widths, stable cards, and no horizontal overflow in the static catalog smoke.",
          "interaction_policy": "Actions remain visible, wrap before overflow, and preserve recipe button styling.",
          "proof": "npm run test:static:block-catalog all-blocks-desktop",
          "summary": "Compact Ops gives navbar_flyout up to 1 desktop column while preserving recipe spacing."
        }
      ],
      "responsive_viewports": [
        "phone",
        "tablet",
        "desktop"
      ],
      "responsive_proof": [
        "npm run test:static:block-catalog all-blocks-phone",
        "npm run test:static:block-catalog all-blocks-tablet",
        "npm run test:static:block-catalog all-blocks-desktop"
      ],
      "interactive_roles": [
        "link",
        "navigation",
        "primary",
        "secondary"
      ],
      "recipe_alignment": {
        "action_token": "button",
        "control_token": "control",
        "surface_token": "panel",
        "text_token": "text",
        "source": "theme recipe tokens"
      }
    },
    "cloneable": true
  }
}
block

Long Copy Stress

Editorial Block Systemstress

A resilience payload with plausible long CMS copy, longer labels, and dense supporting metadata to prove wrapping and spacing.

Component anatomy

Long Copy Stress anatomy

5 regions
Surfaceouter layout and background
required2 fields4 tokens

navbar_flyout uses recipe surface tokens to keep the outer frame styled and composable.

background, panel, panelElevated, border
Copyheadings, body copy, labels, and supporting text
required10 fields2 tokens

Copy fields map to primary and muted text roles so editors can change words without restyling the block.

text, textMuted
Mediareplaceable image, iframe, embed, avatar, logo, or gallery area
optional1 fields2 tokens

Media fields stay isolated from copy and action regions so replacement assets preserve the recipe layout.

panelElevated, border
ActionsCTA, link, event, and navigation affordances
optional20 fields4 tokens

Action regions use recipe button and accent tokens while preserving href or event payloads.

button, buttonText, signal, uplink
Feedbackstatus, validation, selected, loading, and disabled evidence
required0 fields3 tokens

Feedback regions tie state-readiness evidence to visible recipe status treatments.

badge, badgeText, signal
Recipe passport

Long Copy Stress passport

high
Fitstress-test

Use to verify navbar_flyout long copy, awkward values, and wrapping before publishing customer pages.

Editable fields30/31

Long Copy Stress is a high-complexity stress-test recipe with 5 documented composition slots.

Interactions8 actions / 0 controls

3 required regions, 2 optional regions.

Slots
Surface / 1/2Copy / 10/10Media / 1/1Actions / 14/20Feedback / 0/0
Replacement guidance
  • Keep Editorial Block System recipe tokens as the source of visual styling for the surface, text, controls, and actions.
  • Replace media URLs through the CMS media library and preserve alt, title, provider, or label fallbacks.
  • Verify each action keeps either a valid href or canonical event name plus an editor-visible label.
  • No input controls are required; keep the recipe focused on its documented display regions.
  • The recipe does not require repeatable collection editing.
Publish checklist
  • Validate navbar_flyout against its block contract before publishing.
  • 3 required anatomy regions remain present: surface, copy, feedback.
  • 30/31 builder fields are CMS-editable or intentionally locked.
  • Interactive labels, target size, href/event wiring, and disabled states have been reviewed.
  • Phone, tablet, and desktop responsive behavior maps have been reviewed for wrapping and overflow.
  • Contrast checks meet the AA recipe target.
Recipe fit

Long Copy Stress recipe fit

6 axes
Page contextpage / supporting
splashlistingblogproduct-pageservice-pageabout-page

navbar_flyout is best composed into splash, listing, blog, and related pages.

6 page types mapped for navbar_flyout.Choose the first matching page type before editing copy, media, or actions so the recipe starts in the right narrative context.
Section rolelayout / primary
site-navigationconversionmediacontent

navbar_flyout can act as site-navigation, conversion, media within a composed page.

5 anatomy regions produce 4 section roles.Place the block where its required anatomy regions have enough room before compressing it into dense page slots.
Content modelcontent / specialized
copy-ledmedia-ledcta-led

Long Copy Stress composition passport is copy-led, media-led, cta-led for CMS composition.

30/31 fields are editable across 3 content models.Keep the content model stable when replacing defaults; do not turn a repeatable or media-led recipe into unrelated ad hoc content.
Interaction modelinteraction / primary
primary-linklink-linknavigation-linksecondary-link

navbar_flyout carries primary-link, link-link, navigation-link, secondary-link interaction affordances.

8 action surfaces and 0 control surfaces mapped.Review href, event, input, required, and disabled-state evidence before publishing an interactive recipe.
Authoring fitauthoring / specialized
stress-testhigh-complexity18-high-care-replacements

navbar_flyout uses stress-test authoring with high complexity.

31 default provenance items with 18 high-care replacements.Use the default provenance map before cloning the recipe into CMS content or agent-generated page data.
Responsive fitresponsive / primary
single-column stackwide single-column compositioncontained composition rowmin-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke.

navbar_flyout has explicit phone, tablet, and desktop compatibility evidence for composed pages.

3 responsive behavior maps cover phone, tablet, and desktop composition.Review phone wrapping, tablet mid-width balance, and desktop density before adding nested content, longer labels, or extra media.
Visual polish

Long Copy Stress visual polish

6/6
Surface rhythmlayout

navbar_flyout keeps a stable recipe surface with panel, border, and spacing roles instead of ad hoc wrappers.

editorial treatment uses spacious density and 8px radius base.background, panel, panelElevated, border
Type hierarchytypography

Primary, muted, and badge text roles stay distinct enough for headings, body copy, metadata, and helper text.

6/6 contrast checks pass the AA target.text, textMuted, badgeText
Action clarityinteraction

Interactive regions use recipe action/control tokens and preserve labels, hrefs, events, required state, and options.

8 action surfaces and 0 control surfaces mapped.button, buttonText, control, controlText, signal, uplink
Media treatmentmedia

Replaceable media stays framed separately from copy and action regions so asset swaps preserve the layout.

Media region is isolated with replaceable fields.panelElevated, border, textMuted
State feedbackstate

Feedback, selected, loading, invalid, and disabled treatments use visible state evidence instead of color-only meaning.

6 state-readiness entries include default, empty, pending, active, invalid, disabled.badge, badgeText, signal
Responsive balanceresponsive

Phone, tablet, and desktop defaults have explicit stack, wrap, media, and overflow policies for the recipe.

single-column stack phone behavior, wide single-column composition tablet behavior, and contained composition row desktop behavior documented.panel, border, control
Default provenance

Long Copy Stress default provenance

31 fields
locked-tokenrequires-action-targetrequires-alt-textsafe-to-edit
  • Appearanceappearance
    locked-tokenmedium

    Keep visual styling aligned to Editorial Block System recipe tokens unless the recipe itself changes.

    Editorial Block System recipe tokens
  • Rolerole
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Topologytopology
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Densitydensity
    locked-tokenmedium

    Keep visual styling aligned to Editorial Block System recipe tokens unless the recipe itself changes.

    Editorial Block System recipe tokens
  • Containercontainer
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Logo Treatmentlogo_treatment
    requires-alt-textmedium

    Replace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful.

    Cloud Elephants placeholder media or CMS media library
  • Reciperecipe
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Brandbrand
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Linkslinks
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Links Item Labellinks[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Links Item Hreflinks[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Secondary Linkssecondary_links
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Secondary Links Item Labelsecondary_links[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Secondary Links Item Hrefsecondary_links[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Secondary Links Item Intentsecondary_links[].intent
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Utility Linksutility_links
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Utility Links Item Labelutility_links[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Utility Links Item Hrefutility_links[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Utility Links Item Intentutility_links[].intent
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Actionsactions
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Actions Item Labelactions[].label
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    cloneable block recipe payload
  • Actions Item Hrefactions[].href
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Actions Item Intentactions[].intent
    requires-action-targethighrepeated

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
  • Behaviorbehavior
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Mobilemobile
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Titletitle
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Headlineheadline
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Subtitlesubtitle
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Descriptiondescription
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • Captioncaption
    safe-to-editlow

    Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.

    cloneable block recipe payload
  • ButtonTextbuttonText
    requires-action-targethigh

    Keep the label paired with a valid href or canonical postEvent event name before publishing.

    CMS route, URL, or canonical postEvent path
Edit bundles

Long Copy Stress edit bundles

5 bundles
Copy bundlerequired / repeatable-items
actions[].labelcaptiondescriptionheadlinelinks[].labelrole+4

Copy bundle groups 10 fields so CMS edits preserve the recipe shape and default polish.

cloneable block recipe payloadKeep the label paired with a valid href or canonical postEvent event name before publishing.
Media bundlerecommended / single-field
logo_treatment

Media bundle groups 1 field so CMS edits preserve the recipe shape and default polish.

Cloud Elephants placeholder media or CMS media libraryReplace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful.
Action bundlerecommended / repeatable-items
actionsactions[].hrefactions[].intentbuttonTextlinkslinks[].href+6

Action bundle groups 12 fields so CMS edits preserve the recipe shape and default polish.

CMS route, URL, or canonical postEvent pathKeep the label paired with a valid href or canonical postEvent event name before publishing.
Style bundleguarded / guarded-system
appearancedensity

Style bundle groups 2 fields so CMS edits preserve the recipe shape and default polish.

Editorial Block System recipe tokensKeep visual styling aligned to Editorial Block System recipe tokens unless the recipe itself changes.
Content bundlerequired / grouped-fields
behaviorbrandcontainermobilerecipetopology

Content bundle groups 6 fields so CMS edits preserve the recipe shape and default polish.

cloneable block recipe payloadCopy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.
CMS composition

Long Copy Stress fields

31 fields
actioncontentcopymediastyle
  • Appearanceappearance
    styleobject
  • Rolerole
    copystring
  • Topologytopology
    contentstring
  • Densitydensity
    stylestring
  • Containercontainer
    contentstring
  • Logo Treatmentlogo_treatment
    mediastring
  • Reciperecipe
    contentobject
  • Brandbrand
    contentobject
  • Linkslinks
    actionarray
  • Links Item Labellinks[].label
    copystringrepeated
  • Links Item Hreflinks[].href
    actionstringrepeated
  • Secondary Linkssecondary_links
    actionarray
  • Secondary Links Item Labelsecondary_links[].label
    copystringrepeated
  • Secondary Links Item Hrefsecondary_links[].href
    actionstringrepeated
  • Secondary Links Item Intentsecondary_links[].intent
    actionstringrepeated
  • Utility Linksutility_links
    actionarray
  • Utility Links Item Labelutility_links[].label
    copystringrepeated
  • Utility Links Item Hrefutility_links[].href
    actionstringrepeated
  • Utility Links Item Intentutility_links[].intent
    actionstringrepeated
  • Actionsactions
    actionarray
  • Actions Item Labelactions[].label
    copystringrepeated
  • Actions Item Hrefactions[].href
    actionstringrepeated
  • Actions Item Intentactions[].intent
    actionstringrepeated
  • Behaviorbehavior
    contentobject
  • Mobilemobile
    contentobject
  • Titletitle
    copystring
  • Headlineheadline
    copystring
  • Subtitlesubtitle
    copystring
  • Descriptiondescription
    copystring
  • Captioncaption
    copystring
  • ButtonTextbuttonText
    actionstring
CMS editing

Long Copy Stress editor guidance

30/31 editable
Copytext/rich-text editor
10/10 editablecopy

Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.

cloneable block recipe payload
Mediamedia picker with alt text
1/1 editablemedia

Media should use a replaceable URL plus meaningful alt, label, or title fallback.

Cloud Elephants placeholder media or CMS media library
Actionlink or event action editor
12/12 editableaction

Actions should resolve to a URL or event name with a human-readable label.

CMS route, URL, or canonical postEvent path
Styleappearance preset selector
1/2 editablestyle

Style fields should prefer recipe or appearance tokens over one-off inline values.

Editorial Block System recipe tokens
Contentplain content field
6/6 editablecontent

Content should remain serializable JSON and preserve the documented block contract.

cloneable block recipe payload
Default states

Long Copy Stress state readiness

6 states
DefaultInitial render with the cloneable recipe payload
coveredsurfacepaneltext

Editorial Block System tokens with editorial documentation treatment

The Editorial Block System recipe renders a contract-safe primary state for navbar_flyout.
EmptyRepeatable collections have zero items
coveredpaneltextMutedbadge

Reserved panel space with fallback copy or placeholder media

Repeatable fields are documented for add, remove, reorder, and item-level editing.
PendingDeferred content or preview loading
coveredcontroltextMutedprogressTrack

Neutral reserved frame with status copy and no layout shift

Static recipe payloads reserve the same documented frame while content is loading.
ActiveSelected action, active link, checked input, or open disclosure
coveredsignaluplinkbutton

Signal/uplink emphasis with visible selected-state chips

8 action surfaces and 0 control surfaces are mapped for selected-state review.
InvalidMedia URL or provider data is invalid
coveredwarningdangerborder

Warning/danger status treatment while preserving the block frame

Media guidance requires URL plus accessible fallback text for invalid or missing assets.
DisabledUnavailable action or temporarily disabled control
coveredcontroltextMutedborder

Muted affordance with preserved label, spacing, and hit-area rhythm

Interactive maps preserve labels and control roles so disabled states can stay understandable.
Controls and actions

Long Copy Stress actions and controls

8 surfaces
linknavigationprimarysecondary
Actions
  • Template implementation detailsactions[0]
    primary#block-preview
  • Cloud Elephants CMS Template Builder Operations Centerbrand
    link#block-preview
  • Template implementation detailslinks[0]
    navigation#block-preview
  • Recipe and theme governancelinks[1]
    navigation#block-preview
  • Preview quality evidencelinks[2]
    navigation#block-preview
  • Editorial Block Systemrecipe
    link#block-preview
  • Template implementation detailssecondary_links[0]
    secondary#block-preview
  • Template implementation detailsutility_links[0]
    secondary#block-preview
Controls

No input control is needed for this payload.

Recipe styling

Long Copy Stress style tokens

15 tokens
Page background#f7fbff
Panel surface#ffffff
Elevated surface#ffffff
Primary text#142033
Muted text#526174
Signal accent#166bff
Secondary accent#00a6a6
Border#d6dee8
Control surface#ffffff
Control text#142033
Button surface#166bff
Button text#ffffff
Badge surface#eef5ff
Badge text#174ea6
Font familyInter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif
Readability

Long Copy Stress contrast checks

6/6
Text on background15.73:1 / AAA
Text on panel16.35:1 / AAA
Muted text on panel6.32:1 / AA
Button text on button4.58:1 / AA
Control text on control16.35:1 / AAA
Badge text on badge7.15:1 / AAA
Accessibility proof

Long Copy Stress accessibility checks

WCAG 2.2 AA
Semantic structuresemantics / required

navbar_flyout keeps semantic wrappers and readable heading/copy structure in the runtime preview.

navigation/header/footer landmarks and labels
Keyboard and tap targetskeyboard / required

Interactive surfaces stay reachable, focusable, and recipe-styled without shrinking below expected touch affordances.

mapped actions/controls render as native focusable surfaces
Text alternativesmedia / required

Media-ready recipes expose replaceable alt text or accessible labels for images, logos, embeds, and placeholders.

media fields include alt/label/title fallbacks
Control labelsforms / contextual

No input controls are present, so there are no unlabeled fields to remediate.

no input controls in this payload
Status and motionstate / required

Recipe defaults avoid motion-only meaning and keep status text inspectable when state is present.

runtime evidence avoids hidden status-only content
Responsive proof

Long Copy Stress responsive behavior

3 viewports
Phone390px / single-column stack
1 colspacious

Editorial Block System stacks navbar_flyout into one phone column with spacious spacing and bounded content.

min-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke.
Tablet768px / wide single-column composition
1 colspacious

Editorial Block System adapts navbar_flyout to 1 tablet column before expanding to the desktop layout.

tablet preview frames keep mid-width composition, wrap controls, and avoid horizontal overflow in the static catalog smoke.
Desktop1366px / contained composition row
1 colspacious

Editorial Block System gives navbar_flyout up to 1 desktop column while preserving recipe spacing.

desktop preview frames keep constrained widths, stable cards, and no horizontal overflow in the static catalog smoke.
Structured payload
{
  "id": "block-doc-navbar-flyout-data-long-copy-stress",
  "block_type": "navbar_flyout",
  "props": {
    "appearance": {
      "preset": "block"
    },
    "role": "editorial",
    "topology": "centered",
    "density": "spacious",
    "container": "contained",
    "logo_treatment": "text",
    "recipe": {
      "id": "editorial-block-system",
      "label": "Editorial Block System",
      "href": "#block-preview",
      "appearance": "block"
    },
    "brand": {
      "label": "Cloud Elephants CMS Template Builder Operations Center",
      "href": "#block-preview",
      "logo": "https://storage.googleapis.com/msgsndr/T3RhpcTQAq7Qb47kPQAB/media/677815b8c290c684d5bf3fbd.png",
      "logo_alt": "Cloud Elephants Essential CTO service visual.",
      "description": "Long brand copy should stay readable in responsive header and footer treatments."
    },
    "links": [
      {
        "label": "Template implementation details",
        "href": "#block-preview"
      },
      {
        "label": "Recipe and theme governance",
        "href": "#block-preview"
      },
      {
        "label": "Preview quality evidence",
        "href": "#block-preview"
      }
    ],
    "secondary_links": [
      {
        "label": "Template implementation details",
        "href": "#block-preview",
        "intent": "secondary"
      }
    ],
    "utility_links": [
      {
        "label": "Template implementation details",
        "href": "#block-preview",
        "intent": "utility"
      }
    ],
    "actions": [
      {
        "label": "Template implementation details",
        "href": "#block-preview",
        "intent": "primary"
      }
    ],
    "behavior": {
      "sticky": true,
      "active_path": "none",
      "surface": "solid"
    },
    "mobile": {
      "mode": "drawer",
      "toggle_label": "Menu",
      "safe_area": true
    },
    "title": "Navbar Flyout with a realistic CMS-authored headline that wraps cleanly across compact cards, mobile panels, and generated documentation frames",
    "headline": "Navbar Flyout with a realistic CMS-authored headline that wraps cleanly across compact cards, mobile panels, and generated documentation frames",
    "subtitle": "This intentionally longer copy uses normal words, punctuation, and CMS-style details so the block proves it can remain polished with production-length titles, helper text, labels, badges, links, and nested content.",
    "description": "This intentionally longer copy uses normal words, punctuation, and CMS-style details so the block proves it can remain polished with production-length titles, helper text, labels, badges, links, and nested content.",
    "caption": "Replaceable media caption with enough source context to wrap onto multiple lines without crowding adjacent controls.",
    "buttonText": "Continue with the guided CMS review"
  },
  "metadata": {
    "long_copy_tolerance": true,
    "awkward_content_tolerance": true,
    "composition_recipe": {
      "id": "long-copy-stress",
      "intent": "stress",
      "label": "Long Copy Stress",
      "recipe": "editorial-block-system",
      "source": "block-explorer",
      "quality_proof": [
        "long_copy_tolerance",
        "awkward_content_tolerance"
      ],
      "composition_passport": {
        "id": "long-copy-stress",
        "label": "Long Copy Stress composition passport",
        "intent": "stress",
        "recipe": "editorial-block-system",
        "authoring_mode": "stress-test",
        "complexity": "high",
        "fit": "Use to verify navbar_flyout long copy, awkward values, and wrapping before publishing customer pages.",
        "required_regions": [
          "surface",
          "copy",
          "feedback"
        ],
        "optional_regions": [
          "media",
          "actions"
        ],
        "slots": [
          {
            "id": "surface",
            "label": "Surface",
            "required": true,
            "field_count": 2,
            "editable_count": 1,
            "token_roles": [
              "background",
              "panel",
              "panelElevated",
              "border"
            ],
            "summary": "navbar_flyout uses recipe surface tokens to keep the outer frame styled and composable."
          },
          {
            "id": "copy",
            "label": "Copy",
            "required": true,
            "field_count": 10,
            "editable_count": 10,
            "token_roles": [
              "text",
              "textMuted"
            ],
            "summary": "Copy fields map to primary and muted text roles so editors can change words without restyling the block."
          },
          {
            "id": "media",
            "label": "Media",
            "required": false,
            "field_count": 1,
            "editable_count": 1,
            "token_roles": [
              "panelElevated",
              "border"
            ],
            "summary": "Media fields stay isolated from copy and action regions so replacement assets preserve the recipe layout."
          },
          {
            "id": "actions",
            "label": "Actions",
            "required": false,
            "field_count": 20,
            "editable_count": 14,
            "token_roles": [
              "button",
              "buttonText",
              "signal",
              "uplink"
            ],
            "summary": "Action regions use recipe button and accent tokens while preserving href or event payloads."
          },
          {
            "id": "feedback",
            "label": "Feedback",
            "required": true,
            "field_count": 0,
            "editable_count": 0,
            "token_roles": [
              "badge",
              "badgeText",
              "signal"
            ],
            "summary": "Feedback regions tie state-readiness evidence to visible recipe status treatments."
          }
        ],
        "builder_field_count": 31,
        "editable_field_count": 30,
        "action_count": 8,
        "control_count": 0,
        "replacement_guidance": [
          "Keep Editorial Block System recipe tokens as the source of visual styling for the surface, text, controls, and actions.",
          "Replace media URLs through the CMS media library and preserve alt, title, provider, or label fallbacks.",
          "Verify each action keeps either a valid href or canonical event name plus an editor-visible label.",
          "No input controls are required; keep the recipe focused on its documented display regions.",
          "The recipe does not require repeatable collection editing."
        ],
        "publish_checklist": [
          "Validate navbar_flyout against its block contract before publishing.",
          "3 required anatomy regions remain present: surface, copy, feedback.",
          "30/31 builder fields are CMS-editable or intentionally locked.",
          "Interactive labels, target size, href/event wiring, and disabled states have been reviewed.",
          "Phone, tablet, and desktop responsive behavior maps have been reviewed for wrapping and overflow.",
          "Contrast checks meet the AA recipe target."
        ],
        "agent_notes": [
          "Prefer editing props fields described by the builder field map; metadata is evidence, not primary content.",
          "Preserve recipe_alignment token roles unless the page theme or recipe changes intentionally.",
          "Use the anatomy slots to compose or replace content without changing the block type."
        ],
        "summary": "Long Copy Stress is a high-complexity stress-test recipe with 5 documented composition slots."
      },
      "composition_passport_complexity": "high",
      "composition_passport_authoring_mode": "stress-test",
      "composition_passport_slots": [
        "surface",
        "copy",
        "media",
        "actions",
        "feedback"
      ],
      "composition_passport_check_count": 6,
      "visual_polish_check_count": 6,
      "visual_polish_pass_count": 6,
      "visual_polish_checks": [
        {
          "id": "surface-rhythm",
          "label": "Surface rhythm",
          "axis": "layout",
          "status": "ready",
          "token_roles": [
            "background",
            "panel",
            "panelElevated",
            "border"
          ],
          "evidence": "editorial treatment uses spacious density and 8px radius base.",
          "summary": "navbar_flyout keeps a stable recipe surface with panel, border, and spacing roles instead of ad hoc wrappers."
        },
        {
          "id": "type-hierarchy",
          "label": "Type hierarchy",
          "axis": "typography",
          "status": "ready",
          "token_roles": [
            "text",
            "textMuted",
            "badgeText"
          ],
          "evidence": "6/6 contrast checks pass the AA target.",
          "summary": "Primary, muted, and badge text roles stay distinct enough for headings, body copy, metadata, and helper text."
        },
        {
          "id": "action-clarity",
          "label": "Action clarity",
          "axis": "interaction",
          "status": "ready",
          "token_roles": [
            "button",
            "buttonText",
            "control",
            "controlText",
            "signal",
            "uplink"
          ],
          "evidence": "8 action surfaces and 0 control surfaces mapped.",
          "summary": "Interactive regions use recipe action/control tokens and preserve labels, hrefs, events, required state, and options."
        },
        {
          "id": "media-treatment",
          "label": "Media treatment",
          "axis": "media",
          "status": "ready",
          "token_roles": [
            "panelElevated",
            "border",
            "textMuted"
          ],
          "evidence": "Media region is isolated with replaceable fields.",
          "summary": "Replaceable media stays framed separately from copy and action regions so asset swaps preserve the layout."
        },
        {
          "id": "state-feedback",
          "label": "State feedback",
          "axis": "state",
          "status": "ready",
          "token_roles": [
            "badge",
            "badgeText",
            "signal"
          ],
          "evidence": "6 state-readiness entries include default, empty, pending, active, invalid, disabled.",
          "summary": "Feedback, selected, loading, invalid, and disabled treatments use visible state evidence instead of color-only meaning."
        },
        {
          "id": "responsive-balance",
          "label": "Responsive balance",
          "axis": "responsive",
          "status": "ready",
          "token_roles": [
            "panel",
            "border",
            "control"
          ],
          "evidence": "single-column stack phone behavior, wide single-column composition tablet behavior, and contained composition row desktop behavior documented.",
          "summary": "Phone, tablet, and desktop defaults have explicit stack, wrap, media, and overflow policies for the recipe."
        }
      ],
      "visual_polish_axes": [
        "layout",
        "typography",
        "interaction",
        "media",
        "state",
        "responsive"
      ],
      "default_provenance_count": 31,
      "default_provenance_map": [
        {
          "path": "appearance",
          "label": "Appearance",
          "field_role": "style",
          "value_type": "object",
          "editable": false,
          "repeated": false,
          "default_source": "Editorial Block System recipe tokens",
          "replacement_policy": "locked-token",
          "replacement_risk": "medium",
          "guardrail": "Keep visual styling aligned to Editorial Block System recipe tokens unless the recipe itself changes.",
          "validation": "Style fields should prefer recipe or appearance tokens over one-off inline values.",
          "summary": "Appearance defaults from Editorial Block System recipe tokens; replacement is medium risk with locked-token policy."
        },
        {
          "path": "role",
          "label": "Role",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Role defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "topology",
          "label": "Topology",
          "field_role": "content",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Topology defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "density",
          "label": "Density",
          "field_role": "style",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "Editorial Block System recipe tokens",
          "replacement_policy": "locked-token",
          "replacement_risk": "medium",
          "guardrail": "Keep visual styling aligned to Editorial Block System recipe tokens unless the recipe itself changes.",
          "validation": "Style fields should prefer recipe or appearance tokens over one-off inline values.",
          "summary": "Density defaults from Editorial Block System recipe tokens; replacement is medium risk with locked-token policy."
        },
        {
          "path": "container",
          "label": "Container",
          "field_role": "content",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Container defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "logo_treatment",
          "label": "Logo Treatment",
          "field_role": "media",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "Cloud Elephants placeholder media or CMS media library",
          "replacement_policy": "requires-alt-text",
          "replacement_risk": "medium",
          "guardrail": "Replace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful.",
          "validation": "Media should use a replaceable URL plus meaningful alt, label, or title fallback.",
          "summary": "Logo Treatment defaults from Cloud Elephants placeholder media or CMS media library; replacement is medium risk with requires-alt-text policy."
        },
        {
          "path": "recipe",
          "label": "Recipe",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Recipe defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "brand",
          "label": "Brand",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Brand defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "links",
          "label": "Links",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Links defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "links[].label",
          "label": "Links Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Links Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "links[].href",
          "label": "Links Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Links Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links",
          "label": "Secondary Links",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Secondary Links defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links[].label",
          "label": "Secondary Links Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Secondary Links Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links[].href",
          "label": "Secondary Links Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Secondary Links Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "secondary_links[].intent",
          "label": "Secondary Links Item Intent",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Secondary Links Item Intent defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links",
          "label": "Utility Links",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Utility Links defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links[].label",
          "label": "Utility Links Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Utility Links Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links[].href",
          "label": "Utility Links Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Utility Links Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "utility_links[].intent",
          "label": "Utility Links Item Intent",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Utility Links Item Intent defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions",
          "label": "Actions",
          "field_role": "action",
          "value_type": "array",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Actions defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions[].label",
          "label": "Actions Item Label",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Actions Item Label defaults from cloneable block recipe payload; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions[].href",
          "label": "Actions Item Href",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Actions Item Href defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "actions[].intent",
          "label": "Actions Item Intent",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": true,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "Actions Item Intent defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        },
        {
          "path": "behavior",
          "label": "Behavior",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Behavior defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "mobile",
          "label": "Mobile",
          "field_role": "content",
          "value_type": "object",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "summary": "Mobile defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "title",
          "label": "Title",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Title defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "headline",
          "label": "Headline",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Headline defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "subtitle",
          "label": "Subtitle",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Subtitle defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "description",
          "label": "Description",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Description defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "caption",
          "label": "Caption",
          "field_role": "copy",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "cloneable block recipe payload",
          "replacement_policy": "safe-to-edit",
          "replacement_risk": "low",
          "guardrail": "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "summary": "Caption defaults from cloneable block recipe payload; replacement is low risk with safe-to-edit policy."
        },
        {
          "path": "buttonText",
          "label": "ButtonText",
          "field_role": "action",
          "value_type": "string",
          "editable": true,
          "repeated": false,
          "default_source": "CMS route, URL, or canonical postEvent path",
          "replacement_policy": "requires-action-target",
          "replacement_risk": "high",
          "guardrail": "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "summary": "ButtonText defaults from CMS route, URL, or canonical postEvent path; replacement is high risk with requires-action-target policy."
        }
      ],
      "default_replacement_policies": [
        "locked-token",
        "requires-action-target",
        "requires-alt-text",
        "safe-to-edit"
      ],
      "default_replacement_risks": [
        "high",
        "low",
        "medium"
      ],
      "default_replacement_high_risk_count": 18,
      "content_edit_bundle_count": 5,
      "content_edit_bundles": [
        {
          "id": "copy",
          "label": "Copy bundle",
          "intent": "required",
          "edit_mode": "repeatable-items",
          "field_paths": [
            "actions[].label",
            "caption",
            "description",
            "headline",
            "links[].label",
            "role",
            "secondary_links[].label",
            "subtitle",
            "title",
            "utility_links[].label"
          ],
          "default_sources": [
            "cloneable block recipe payload"
          ],
          "guardrails": [
            "Keep the label paired with a valid href or canonical postEvent event name before publishing.",
            "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths."
          ],
          "depends_on": [
            "type hierarchy",
            "mobile wrapping"
          ],
          "summary": "Copy bundle groups 10 fields so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "media",
          "label": "Media bundle",
          "intent": "recommended",
          "edit_mode": "single-field",
          "field_paths": [
            "logo_treatment"
          ],
          "default_sources": [
            "Cloud Elephants placeholder media or CMS media library"
          ],
          "guardrails": [
            "Replace the asset through CMS media data and keep alt, title, provider, or label fallback text meaningful."
          ],
          "depends_on": [
            "copy alt text",
            "responsive fit"
          ],
          "summary": "Media bundle groups 1 field so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "actions",
          "label": "Action bundle",
          "intent": "recommended",
          "edit_mode": "repeatable-items",
          "field_paths": [
            "actions",
            "actions[].href",
            "actions[].intent",
            "buttonText",
            "links",
            "links[].href",
            "secondary_links",
            "secondary_links[].href",
            "secondary_links[].intent",
            "utility_links",
            "utility_links[].href",
            "utility_links[].intent"
          ],
          "default_sources": [
            "CMS route, URL, or canonical postEvent path"
          ],
          "guardrails": [
            "Keep the label paired with a valid href or canonical postEvent event name before publishing."
          ],
          "depends_on": [
            "copy labels",
            "href or event target",
            "state readiness"
          ],
          "summary": "Action bundle groups 12 fields so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "style",
          "label": "Style bundle",
          "intent": "guarded",
          "edit_mode": "guarded-system",
          "field_paths": [
            "appearance",
            "density"
          ],
          "default_sources": [
            "Editorial Block System recipe tokens"
          ],
          "guardrails": [
            "Keep visual styling aligned to Editorial Block System recipe tokens unless the recipe itself changes."
          ],
          "depends_on": [
            "theme recipe tokens",
            "contrast proof"
          ],
          "summary": "Style bundle groups 2 fields so CMS edits preserve the recipe shape and default polish."
        },
        {
          "id": "content",
          "label": "Content bundle",
          "intent": "required",
          "edit_mode": "grouped-fields",
          "field_paths": [
            "behavior",
            "brand",
            "container",
            "mobile",
            "recipe",
            "topology"
          ],
          "default_sources": [
            "cloneable block recipe payload"
          ],
          "guardrails": [
            "Copy can be edited directly when text remains trimmed, localizable, and safe to wrap at phone widths.",
            "Keep the label paired with a valid href or canonical postEvent event name before publishing."
          ],
          "depends_on": [
            "contract-safe JSON"
          ],
          "summary": "Content bundle groups 6 fields so CMS edits preserve the recipe shape and default polish."
        }
      ],
      "content_edit_bundle_ids": [
        "copy",
        "media",
        "actions",
        "style",
        "content"
      ],
      "content_edit_bundle_modes": [
        "grouped-fields",
        "guarded-system",
        "repeatable-items",
        "single-field"
      ],
      "content_edit_bundle_required_count": 2,
      "content_edit_bundle_guarded_count": 1,
      "recipe_compatibility_count": 6,
      "recipe_compatibility_map": [
        {
          "id": "page-context",
          "label": "Page context",
          "axis": "page",
          "fit": "supporting",
          "values": [
            "splash",
            "listing",
            "blog",
            "product-page",
            "service-page",
            "about-page"
          ],
          "evidence": "6 page types mapped for navbar_flyout.",
          "guardrail": "Choose the first matching page type before editing copy, media, or actions so the recipe starts in the right narrative context.",
          "summary": "navbar_flyout is best composed into splash, listing, blog, and related pages."
        },
        {
          "id": "section-role",
          "label": "Section role",
          "axis": "layout",
          "fit": "primary",
          "values": [
            "site-navigation",
            "conversion",
            "media",
            "content"
          ],
          "evidence": "5 anatomy regions produce 4 section roles.",
          "guardrail": "Place the block where its required anatomy regions have enough room before compressing it into dense page slots.",
          "summary": "navbar_flyout can act as site-navigation, conversion, media within a composed page."
        },
        {
          "id": "content-model",
          "label": "Content model",
          "axis": "content",
          "fit": "specialized",
          "values": [
            "copy-led",
            "media-led",
            "cta-led"
          ],
          "evidence": "30/31 fields are editable across 3 content models.",
          "guardrail": "Keep the content model stable when replacing defaults; do not turn a repeatable or media-led recipe into unrelated ad hoc content.",
          "summary": "Long Copy Stress composition passport is copy-led, media-led, cta-led for CMS composition."
        },
        {
          "id": "interaction-model",
          "label": "Interaction model",
          "axis": "interaction",
          "fit": "primary",
          "values": [
            "primary-link",
            "link-link",
            "navigation-link",
            "secondary-link"
          ],
          "evidence": "8 action surfaces and 0 control surfaces mapped.",
          "guardrail": "Review href, event, input, required, and disabled-state evidence before publishing an interactive recipe.",
          "summary": "navbar_flyout carries primary-link, link-link, navigation-link, secondary-link interaction affordances."
        },
        {
          "id": "authoring-fit",
          "label": "Authoring fit",
          "axis": "authoring",
          "fit": "specialized",
          "values": [
            "stress-test",
            "high-complexity",
            "18-high-care-replacements"
          ],
          "evidence": "31 default provenance items with 18 high-care replacements.",
          "guardrail": "Use the default provenance map before cloning the recipe into CMS content or agent-generated page data.",
          "summary": "navbar_flyout uses stress-test authoring with high complexity."
        },
        {
          "id": "responsive-fit",
          "label": "Responsive fit",
          "axis": "responsive",
          "fit": "primary",
          "values": [
            "single-column stack",
            "wide single-column composition",
            "contained composition row",
            "min-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke."
          ],
          "evidence": "3 responsive behavior maps cover phone, tablet, and desktop composition.",
          "guardrail": "Review phone wrapping, tablet mid-width balance, and desktop density before adding nested content, longer labels, or extra media.",
          "summary": "navbar_flyout has explicit phone, tablet, and desktop compatibility evidence for composed pages."
        }
      ],
      "recipe_compatibility_axes": [
        "page",
        "layout",
        "content",
        "interaction",
        "authoring",
        "responsive"
      ],
      "recipe_compatibility_page_types": [
        "splash",
        "listing",
        "blog",
        "product-page",
        "service-page",
        "about-page"
      ],
      "recipe_compatibility_section_roles": [
        "site-navigation",
        "conversion",
        "media",
        "content"
      ],
      "recipe_compatibility_fits": [
        "primary",
        "specialized",
        "supporting"
      ],
      "builder_field_count": 31,
      "builder_field_map": [
        {
          "path": "appearance",
          "label": "Appearance",
          "value_type": "object",
          "role": "style",
          "editable": false,
          "repeated": false,
          "summary": "Appearance is a object field used for style."
        },
        {
          "path": "role",
          "label": "Role",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": false,
          "summary": "Role is a string field used for copy."
        },
        {
          "path": "topology",
          "label": "Topology",
          "value_type": "string",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Topology is a string field used for content."
        },
        {
          "path": "density",
          "label": "Density",
          "value_type": "string",
          "role": "style",
          "editable": true,
          "repeated": false,
          "summary": "Density is a string field used for style."
        },
        {
          "path": "container",
          "label": "Container",
          "value_type": "string",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Container is a string field used for content."
        },
        {
          "path": "logo_treatment",
          "label": "Logo Treatment",
          "value_type": "string",
          "role": "media",
          "editable": true,
          "repeated": false,
          "summary": "Logo Treatment is a string field used for media."
        },
        {
          "path": "recipe",
          "label": "Recipe",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Recipe is a object field used for content."
        },
        {
          "path": "brand",
          "label": "Brand",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Brand is a object field used for content."
        },
        {
          "path": "links",
          "label": "Links",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Links is a array field used for action."
        },
        {
          "path": "links[].label",
          "label": "Links Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Links Item Label is a string collection field used for copy."
        },
        {
          "path": "links[].href",
          "label": "Links Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Links Item Href is a string collection field used for action."
        },
        {
          "path": "secondary_links",
          "label": "Secondary Links",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Secondary Links is a array field used for action."
        },
        {
          "path": "secondary_links[].label",
          "label": "Secondary Links Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Secondary Links Item Label is a string collection field used for copy."
        },
        {
          "path": "secondary_links[].href",
          "label": "Secondary Links Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Secondary Links Item Href is a string collection field used for action."
        },
        {
          "path": "secondary_links[].intent",
          "label": "Secondary Links Item Intent",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Secondary Links Item Intent is a string collection field used for action."
        },
        {
          "path": "utility_links",
          "label": "Utility Links",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Utility Links is a array field used for action."
        },
        {
          "path": "utility_links[].label",
          "label": "Utility Links Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Utility Links Item Label is a string collection field used for copy."
        },
        {
          "path": "utility_links[].href",
          "label": "Utility Links Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Utility Links Item Href is a string collection field used for action."
        },
        {
          "path": "utility_links[].intent",
          "label": "Utility Links Item Intent",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Utility Links Item Intent is a string collection field used for action."
        },
        {
          "path": "actions",
          "label": "Actions",
          "value_type": "array",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "Actions is a array field used for action."
        },
        {
          "path": "actions[].label",
          "label": "Actions Item Label",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": true,
          "summary": "Actions Item Label is a string collection field used for copy."
        },
        {
          "path": "actions[].href",
          "label": "Actions Item Href",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Actions Item Href is a string collection field used for action."
        },
        {
          "path": "actions[].intent",
          "label": "Actions Item Intent",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": true,
          "summary": "Actions Item Intent is a string collection field used for action."
        },
        {
          "path": "behavior",
          "label": "Behavior",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Behavior is a object field used for content."
        },
        {
          "path": "mobile",
          "label": "Mobile",
          "value_type": "object",
          "role": "content",
          "editable": true,
          "repeated": false,
          "summary": "Mobile is a object field used for content."
        },
        {
          "path": "title",
          "label": "Title",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": false,
          "summary": "Title is a string field used for copy."
        },
        {
          "path": "headline",
          "label": "Headline",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": false,
          "summary": "Headline is a string field used for copy."
        },
        {
          "path": "subtitle",
          "label": "Subtitle",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": false,
          "summary": "Subtitle is a string field used for copy."
        },
        {
          "path": "description",
          "label": "Description",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": false,
          "summary": "Description is a string field used for copy."
        },
        {
          "path": "caption",
          "label": "Caption",
          "value_type": "string",
          "role": "copy",
          "editable": true,
          "repeated": false,
          "summary": "Caption is a string field used for copy."
        },
        {
          "path": "buttonText",
          "label": "ButtonText",
          "value_type": "string",
          "role": "action",
          "editable": true,
          "repeated": false,
          "summary": "ButtonText is a string field used for action."
        }
      ],
      "editor_guidance_count": 5,
      "editor_guidance_map": [
        {
          "id": "copy",
          "label": "Copy",
          "field_role": "copy",
          "field_count": 10,
          "editable_count": 10,
          "editor_widget": "text/rich-text editor",
          "validation": "Text should be editable, trimmed, localizable, and safe to wrap at mobile widths.",
          "default_source": "cloneable block recipe payload",
          "summary": "Copy fields use the text/rich-text editor across 10/10 editable fields."
        },
        {
          "id": "media",
          "label": "Media",
          "field_role": "media",
          "field_count": 1,
          "editable_count": 1,
          "editor_widget": "media picker with alt text",
          "validation": "Media should use a replaceable URL plus meaningful alt, label, or title fallback.",
          "default_source": "Cloud Elephants placeholder media or CMS media library",
          "summary": "Media fields use the media picker with alt text across 1/1 editable field."
        },
        {
          "id": "action",
          "label": "Action",
          "field_role": "action",
          "field_count": 12,
          "editable_count": 12,
          "editor_widget": "link or event action editor",
          "validation": "Actions should resolve to a URL or event name with a human-readable label.",
          "default_source": "CMS route, URL, or canonical postEvent path",
          "summary": "Action fields use the link or event action editor across 12/12 editable fields."
        },
        {
          "id": "style",
          "label": "Style",
          "field_role": "style",
          "field_count": 2,
          "editable_count": 1,
          "editor_widget": "appearance preset selector",
          "validation": "Style fields should prefer recipe or appearance tokens over one-off inline values.",
          "default_source": "Editorial Block System recipe tokens",
          "summary": "Style fields use the appearance preset selector across 1/2 editable fields."
        },
        {
          "id": "content",
          "label": "Content",
          "field_role": "content",
          "field_count": 6,
          "editable_count": 6,
          "editor_widget": "plain content field",
          "validation": "Content should remain serializable JSON and preserve the documented block contract.",
          "default_source": "cloneable block recipe payload",
          "summary": "Content fields use the plain content field across 6/6 editable fields."
        }
      ],
      "editor_field_roles": [
        "copy",
        "media",
        "action",
        "style",
        "content"
      ],
      "editor_editable_field_count": 30,
      "state_readiness_count": 6,
      "state_readiness_map": [
        {
          "id": "default",
          "label": "Default",
          "status": "covered",
          "trigger": "Initial render with the cloneable recipe payload",
          "visual_treatment": "Editorial Block System tokens with editorial documentation treatment",
          "token_roles": [
            "surface",
            "panel",
            "text",
            "button"
          ],
          "proof": "The Editorial Block System recipe renders a contract-safe primary state for navbar_flyout.",
          "summary": "Default state uses the recipe surface, text, and action tokens without one-off styling."
        },
        {
          "id": "empty",
          "label": "Empty",
          "status": "covered",
          "trigger": "Repeatable collections have zero items",
          "visual_treatment": "Reserved panel space with fallback copy or placeholder media",
          "token_roles": [
            "panel",
            "textMuted",
            "badge",
            "border"
          ],
          "proof": "Repeatable fields are documented for add, remove, reorder, and item-level editing.",
          "summary": "Empty-state guidance preserves layout rhythm instead of collapsing the block surface."
        },
        {
          "id": "pending",
          "label": "Pending",
          "status": "covered",
          "trigger": "Deferred content or preview loading",
          "visual_treatment": "Neutral reserved frame with status copy and no layout shift",
          "token_roles": [
            "control",
            "textMuted",
            "progressTrack",
            "border"
          ],
          "proof": "Static recipe payloads reserve the same documented frame while content is loading.",
          "summary": "Pending state keeps dimensions stable while using muted control/status tokens."
        },
        {
          "id": "active",
          "label": "Active",
          "status": "covered",
          "trigger": "Selected action, active link, checked input, or open disclosure",
          "visual_treatment": "Signal/uplink emphasis with visible selected-state chips",
          "token_roles": [
            "signal",
            "uplink",
            "button",
            "badge"
          ],
          "proof": "8 action surfaces and 0 control surfaces are mapped for selected-state review.",
          "summary": "Active state is represented with recipe accent tokens and visible state labels."
        },
        {
          "id": "invalid",
          "label": "Invalid",
          "status": "covered",
          "trigger": "Media URL or provider data is invalid",
          "visual_treatment": "Warning/danger status treatment while preserving the block frame",
          "token_roles": [
            "warning",
            "danger",
            "border",
            "text"
          ],
          "proof": "Media guidance requires URL plus accessible fallback text for invalid or missing assets.",
          "summary": "Invalid state guidance favors explicit status evidence over ambiguous visual collapse."
        },
        {
          "id": "disabled",
          "label": "Disabled",
          "status": "covered",
          "trigger": "Unavailable action or temporarily disabled control",
          "visual_treatment": "Muted affordance with preserved label, spacing, and hit-area rhythm",
          "token_roles": [
            "control",
            "textMuted",
            "border",
            "panel"
          ],
          "proof": "Interactive maps preserve labels and control roles so disabled states can stay understandable.",
          "summary": "Disabled state keeps the block readable and spatially stable when interaction is unavailable."
        }
      ],
      "state_readiness_states": [
        "default",
        "empty",
        "pending",
        "active",
        "invalid",
        "disabled"
      ],
      "state_readiness_statuses": [
        "covered",
        "covered",
        "covered",
        "covered",
        "covered",
        "covered"
      ],
      "anatomy_region_count": 5,
      "anatomy_map": [
        {
          "id": "surface",
          "label": "Surface",
          "region_role": "outer layout and background",
          "field_paths": [
            "appearance",
            "density"
          ],
          "token_roles": [
            "background",
            "panel",
            "panelElevated",
            "border"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": true,
          "summary": "navbar_flyout uses recipe surface tokens to keep the outer frame styled and composable."
        },
        {
          "id": "copy",
          "label": "Copy",
          "region_role": "headings, body copy, labels, and supporting text",
          "field_paths": [
            "actions[].label",
            "caption",
            "description",
            "headline",
            "links[].label",
            "role",
            "secondary_links[].label",
            "subtitle",
            "title",
            "utility_links[].label"
          ],
          "token_roles": [
            "text",
            "textMuted"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": true,
          "summary": "Copy fields map to primary and muted text roles so editors can change words without restyling the block."
        },
        {
          "id": "media",
          "label": "Media",
          "region_role": "replaceable image, iframe, embed, avatar, logo, or gallery area",
          "field_paths": [
            "logo_treatment"
          ],
          "token_roles": [
            "panelElevated",
            "border"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": false,
          "summary": "Media fields stay isolated from copy and action regions so replacement assets preserve the recipe layout."
        },
        {
          "id": "actions",
          "label": "Actions",
          "region_role": "CTA, link, event, and navigation affordances",
          "field_paths": [
            "actions",
            "actions[].href",
            "actions[].intent",
            "actions[0]",
            "brand",
            "buttonText",
            "links",
            "links[].href",
            "links[0]",
            "links[1]",
            "links[2]",
            "recipe",
            "secondary_links",
            "secondary_links[].href",
            "secondary_links[].intent",
            "secondary_links[0]",
            "utility_links",
            "utility_links[].href",
            "utility_links[].intent",
            "utility_links[0]"
          ],
          "token_roles": [
            "button",
            "buttonText",
            "signal",
            "uplink"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": false,
          "summary": "Action regions use recipe button and accent tokens while preserving href or event payloads."
        },
        {
          "id": "feedback",
          "label": "Feedback",
          "region_role": "status, validation, selected, loading, and disabled evidence",
          "field_paths": [],
          "token_roles": [
            "badge",
            "badgeText",
            "signal"
          ],
          "state_ids": [
            "default",
            "empty",
            "pending",
            "active",
            "invalid",
            "disabled"
          ],
          "required": true,
          "summary": "Feedback regions tie state-readiness evidence to visible recipe status treatments."
        }
      ],
      "anatomy_regions": [
        "surface",
        "copy",
        "media",
        "actions",
        "feedback"
      ],
      "anatomy_token_roles": [
        "background",
        "badge",
        "badgeText",
        "border",
        "button",
        "buttonText",
        "panel",
        "panelElevated",
        "signal",
        "text",
        "textMuted",
        "uplink"
      ],
      "action_count": 8,
      "action_map": [
        {
          "path": "actions[0]",
          "label": "Template implementation details",
          "action_type": "primary",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Template implementation details is a primary action linking to #block-preview."
        },
        {
          "path": "brand",
          "label": "Cloud Elephants CMS Template Builder Operations Center",
          "action_type": "link",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Cloud Elephants CMS Template Builder Operations Center is a link action linking to #block-preview."
        },
        {
          "path": "links[0]",
          "label": "Template implementation details",
          "action_type": "navigation",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Template implementation details is a navigation action linking to #block-preview."
        },
        {
          "path": "links[1]",
          "label": "Recipe and theme governance",
          "action_type": "navigation",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Recipe and theme governance is a navigation action linking to #block-preview."
        },
        {
          "path": "links[2]",
          "label": "Preview quality evidence",
          "action_type": "navigation",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Preview quality evidence is a navigation action linking to #block-preview."
        },
        {
          "path": "recipe",
          "label": "Editorial Block System",
          "action_type": "link",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Editorial Block System is a link action linking to #block-preview."
        },
        {
          "path": "secondary_links[0]",
          "label": "Template implementation details",
          "action_type": "secondary",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Template implementation details is a secondary action linking to #block-preview."
        },
        {
          "path": "utility_links[0]",
          "label": "Template implementation details",
          "action_type": "secondary",
          "href": "#block-preview",
          "event_name": null,
          "summary": "Template implementation details is a secondary action linking to #block-preview."
        }
      ],
      "control_count": 0,
      "control_map": [],
      "style_token_count": 15,
      "style_token_map": [
        {
          "role": "background",
          "label": "Page background",
          "value": "#f7fbff",
          "token_type": "color",
          "summary": "Page background uses the background recipe token."
        },
        {
          "role": "panel",
          "label": "Panel surface",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Panel surface uses the panel recipe token."
        },
        {
          "role": "panelElevated",
          "label": "Elevated surface",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Elevated surface uses the panelElevated recipe token."
        },
        {
          "role": "text",
          "label": "Primary text",
          "value": "#142033",
          "token_type": "color",
          "summary": "Primary text uses the text recipe token."
        },
        {
          "role": "textMuted",
          "label": "Muted text",
          "value": "#526174",
          "token_type": "color",
          "summary": "Muted text uses the textMuted recipe token."
        },
        {
          "role": "signal",
          "label": "Signal accent",
          "value": "#166bff",
          "token_type": "color",
          "summary": "Signal accent uses the signal recipe token."
        },
        {
          "role": "uplink",
          "label": "Secondary accent",
          "value": "#00a6a6",
          "token_type": "color",
          "summary": "Secondary accent uses the uplink recipe token."
        },
        {
          "role": "border",
          "label": "Border",
          "value": "#d6dee8",
          "token_type": "color",
          "summary": "Border uses the border recipe token."
        },
        {
          "role": "control",
          "label": "Control surface",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Control surface uses the control recipe token."
        },
        {
          "role": "controlText",
          "label": "Control text",
          "value": "#142033",
          "token_type": "color",
          "summary": "Control text uses the controlText recipe token."
        },
        {
          "role": "button",
          "label": "Button surface",
          "value": "#166bff",
          "token_type": "color",
          "summary": "Button surface uses the button recipe token."
        },
        {
          "role": "buttonText",
          "label": "Button text",
          "value": "#ffffff",
          "token_type": "color",
          "summary": "Button text uses the buttonText recipe token."
        },
        {
          "role": "badge",
          "label": "Badge surface",
          "value": "#eef5ff",
          "token_type": "color",
          "summary": "Badge surface uses the badge recipe token."
        },
        {
          "role": "badgeText",
          "label": "Badge text",
          "value": "#174ea6",
          "token_type": "color",
          "summary": "Badge text uses the badgeText recipe token."
        },
        {
          "role": "fontFamily",
          "label": "Font family",
          "value": "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif",
          "token_type": "font",
          "summary": "Font family comes from the active recipe theme tokens."
        }
      ],
      "style_token_roles": [
        "background",
        "panel",
        "panelElevated",
        "text",
        "textMuted",
        "signal",
        "uplink",
        "border",
        "control",
        "controlText",
        "button",
        "buttonText",
        "badge",
        "badgeText",
        "fontFamily"
      ],
      "contrast_check_count": 6,
      "contrast_pass_count": 6,
      "contrast_checks": [
        {
          "id": "text-on-background",
          "label": "Text on background",
          "foreground_role": "text",
          "background_role": "background",
          "foreground": "#142033",
          "background": "#f7fbff",
          "ratio": 15.73,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Text on background is AAA at 15.73:1 against a 4.5:1 requirement."
        },
        {
          "id": "text-on-panel",
          "label": "Text on panel",
          "foreground_role": "text",
          "background_role": "panel",
          "foreground": "#142033",
          "background": "#ffffff",
          "ratio": 16.35,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Text on panel is AAA at 16.35:1 against a 4.5:1 requirement."
        },
        {
          "id": "muted-text-on-panel",
          "label": "Muted text on panel",
          "foreground_role": "textMuted",
          "background_role": "panel",
          "foreground": "#526174",
          "background": "#ffffff",
          "ratio": 6.32,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AA",
          "summary": "Muted text on panel is AA at 6.32:1 against a 4.5:1 requirement."
        },
        {
          "id": "button-text-on-button",
          "label": "Button text on button",
          "foreground_role": "buttonText",
          "background_role": "button",
          "foreground": "#ffffff",
          "background": "#166bff",
          "ratio": 4.58,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AA",
          "summary": "Button text on button is AA at 4.58:1 against a 4.5:1 requirement."
        },
        {
          "id": "control-text-on-control",
          "label": "Control text on control",
          "foreground_role": "controlText",
          "background_role": "control",
          "foreground": "#142033",
          "background": "#ffffff",
          "ratio": 16.35,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Control text on control is AAA at 16.35:1 against a 4.5:1 requirement."
        },
        {
          "id": "badge-text-on-badge",
          "label": "Badge text on badge",
          "foreground_role": "badgeText",
          "background_role": "badge",
          "foreground": "#174ea6",
          "background": "#eef5ff",
          "ratio": 7.15,
          "required_ratio": 4.5,
          "passes": true,
          "level": "AAA",
          "summary": "Badge text on badge is AAA at 7.15:1 against a 4.5:1 requirement."
        }
      ],
      "contrast_target": "AA",
      "accessibility_standard": "WCAG_2_2_AA",
      "accessibility_check_count": 5,
      "accessibility_checks": [
        {
          "id": "semantic-structure",
          "label": "Semantic structure",
          "category": "semantics",
          "status": "covered",
          "required": true,
          "proof": "navigation/header/footer landmarks and labels",
          "summary": "navbar_flyout keeps semantic wrappers and readable heading/copy structure in the runtime preview."
        },
        {
          "id": "keyboard-and-tap-targets",
          "label": "Keyboard and tap targets",
          "category": "keyboard",
          "status": "covered",
          "required": true,
          "proof": "mapped actions/controls render as native focusable surfaces",
          "summary": "Interactive surfaces stay reachable, focusable, and recipe-styled without shrinking below expected touch affordances."
        },
        {
          "id": "text-alternatives",
          "label": "Text alternatives",
          "category": "media",
          "status": "covered",
          "required": true,
          "proof": "media fields include alt/label/title fallbacks",
          "summary": "Media-ready recipes expose replaceable alt text or accessible labels for images, logos, embeds, and placeholders."
        },
        {
          "id": "control-labels",
          "label": "Control labels",
          "category": "forms",
          "status": "covered",
          "required": false,
          "proof": "no input controls in this payload",
          "summary": "No input controls are present, so there are no unlabeled fields to remediate."
        },
        {
          "id": "status-and-motion",
          "label": "Status and motion",
          "category": "state",
          "status": "covered",
          "required": true,
          "proof": "runtime evidence avoids hidden status-only content",
          "summary": "Recipe defaults avoid motion-only meaning and keep status text inspectable when state is present."
        }
      ],
      "responsive_behavior_count": 3,
      "responsive_behavior_map": [
        {
          "id": "phone",
          "label": "Phone",
          "viewport_width": 390,
          "layout_mode": "single-column stack",
          "column_count": 1,
          "spacing_density": "spacious",
          "media_policy": "Media slots remain optional and collapse without leaving empty chrome.",
          "overflow_policy": "min-width:0 surfaces, wrapping copy, and no horizontal overflow in the static catalog phone smoke.",
          "interaction_policy": "Actions remain visible, wrap before overflow, and preserve recipe button styling.",
          "proof": "npm run test:static:block-catalog all-blocks-phone",
          "summary": "Editorial Block System stacks navbar_flyout into one phone column with spacious spacing and bounded content."
        },
        {
          "id": "tablet",
          "label": "Tablet",
          "viewport_width": 768,
          "layout_mode": "wide single-column composition",
          "column_count": 1,
          "spacing_density": "spacious",
          "media_policy": "Media slots remain optional and collapse without leaving empty chrome.",
          "overflow_policy": "tablet preview frames keep mid-width composition, wrap controls, and avoid horizontal overflow in the static catalog smoke.",
          "interaction_policy": "Actions remain visible, wrap before overflow, and preserve recipe button styling.",
          "proof": "npm run test:static:block-catalog all-blocks-tablet",
          "summary": "Editorial Block System adapts navbar_flyout to 1 tablet column before expanding to the desktop layout."
        },
        {
          "id": "desktop",
          "label": "Desktop",
          "viewport_width": 1366,
          "layout_mode": "contained composition row",
          "column_count": 1,
          "spacing_density": "spacious",
          "media_policy": "Media slots remain optional and collapse without leaving empty chrome.",
          "overflow_policy": "desktop preview frames keep constrained widths, stable cards, and no horizontal overflow in the static catalog smoke.",
          "interaction_policy": "Actions remain visible, wrap before overflow, and preserve recipe button styling.",
          "proof": "npm run test:static:block-catalog all-blocks-desktop",
          "summary": "Editorial Block System gives navbar_flyout up to 1 desktop column while preserving recipe spacing."
        }
      ],
      "responsive_viewports": [
        "phone",
        "tablet",
        "desktop"
      ],
      "responsive_proof": [
        "npm run test:static:block-catalog all-blocks-phone",
        "npm run test:static:block-catalog all-blocks-tablet",
        "npm run test:static:block-catalog all-blocks-desktop"
      ],
      "interactive_roles": [
        "link",
        "navigation",
        "primary",
        "secondary"
      ],
      "recipe_alignment": {
        "action_token": "button",
        "control_token": "control",
        "surface_token": "panel",
        "text_token": "text",
        "source": "theme recipe tokens"
      }
    },
    "cloneable": true
  },
  "block_order": 4
}
Recipes

Every theme recipe applied to this block

Contract

Schema and registry evidence

bethsaida-legacy

Navbar Flyout

implemented · 0.1.0

No public prop fields are exposed for this block contract.