Blocks are reusable layout components in src/components/blocks/. Each block owns its markup, styles, and a readme.md with usage examples.

Layout contract

Blocks do not control their own width or horizontal padding — the caller’s .container does that. This keeps blocks composable across different page layouts.

<section class="section">
  <div class="container">
    <MyBlock ... />
  </div>
</section>

Available blocks

BlockPathNotes
Buttonblocks/button/btn, btn--primary, btn--dark, btn--link
Calloutblocks/callout/info / warning / tip variants
CardGridblocks/card-grid/responsive auto-fit grid
Chatblocks/chat/bot+user conversation display
EntityCardblocks/entity-card/knowledge graph card stack
FAQblocks/faq/semantic accordion with FAQPage schema
Footerblocks/footer/site footer with nav sections
Header / Navblocks/header/top navigation bar
IconGridblocks/icon-grid/icon + label grid
RotatingStatementblocks/rotating-statement/animated hero tagline
Tableblocks/table/comparison table
Timelineblocks/timeline/vertical timeline
Anchor (graph)blocks/graph-elements/circular node element

Adding a new block

  1. Create src/components/blocks/my-block/MyBlock.astro (and MyBlock.module.css if needed).
  2. Keep it layout-agnostic: no max-width, no outer padding.
  3. Add a readme.md with props table and usage example.
  4. Use it in src/pages/internal.astro to preview while developing.

If the block is specific to one fork (not reusable across forks), put it in src/components/products/<your-fork>/ instead.