Markdown Containers
markata-go supports fenced Markdown containers for grouping content in a <div> with classes, an optional ID, and custom attributes.
Basic container
Use three or more colons followed by a class name or attributes to open a container. Close it with a bare line containing only the same number of colons.
::: card {#intro .featured data-kind="note"}
This Markdown is inside the card.
:::
The closing line must be colon-only. A line such as ::: card, ::: {.card}, or a decorated/indented marker should not be used as a closer.
Nested containers
Use a longer fence for each nested level and close each level with its matching bare fence. This makes the structure predictable and keeps content after an inner close inside its parent container.
::: cards
Outer content before the card.
:::: card
Inner card content.
::::
Outer content after the card.
:::
The example above renders the card inside cards, then continues rendering the final paragraph inside the outer cards container.
A useful rule is:
| Purpose | Example |
|---|---|
| Open outer container | ::: cards |
| Open nested container | :::: card |
| Close nested container | :::: |
| Close outer container | ::: |
Do not rely on a shorter outer closing fence to implicitly close deeper nested containers. Close the innermost container first with the same number of colons it used to open, then close the parent.
Classes and attributes
The opening line can include multiple classes and an attribute block:
:::: panel wide {#example .accent data-state="ready"}
Content
::::
This produces a container with the classes panel, wide, and accent, the ID example, and the custom data-state attribute.
Web Awesome example
The same nesting rule is useful for components that transform Markdown containers after rendering:
::: wa-tabs
:::: wa-tab {label="macOS"}
```bash
brew install markata-go
```
::::
:::: wa-tab {label="Linux"}
```bash
curl -fsSL https://example.com/install.sh | sh
```
::::
:::
The outer wa-tabs container uses three colons and each nested wa-tab uses four, so the structure is unambiguous.
Roads
The default theme turns a road container into a scroll-drawn path of linked
milestones:
::: road timeline
- [Kickoff](/notes/kickoff/) Jan 2026
- [Launch](/notes/launch/) Jun 2026
:::
See Roads for all styles and options.
For prose-led histories, use ::: road editorial story with a heading per
entry. A leading :lucide-name: becomes a rail badge; an emphasis-only
paragraph directly after the heading becomes its eyebrow label. Add reveal
(::: road editorial story reveal) for optional, reduced-motion-safe scroll
entrances. story alone opts into larger type and diamond-bullet highlights;
plain editorial roads keep their existing typography.
Responsive article layouts (static HTML and CSS)
Markata also provides opt-in, article-scoped layout classes built from the
same fenced containers. They generate plain HTML at build time: no JavaScript,
external assets, or custom component framework. These classes intentionally use
md- prefixes to avoid changing existing ::: card, ::: columns,
!!! vsplit, and feed cards.
| Container | Result |
|---|---|
md-layout |
Bordered grouping for an architecture diagram |
md-box |
Simple bounded box |
md-card |
Soft-surface card (scrollable if it contains a wide table) |
md-columns |
Auto-fitting equal-width columns, stacking when narrow |
md-grid |
Responsive grid, with optional fixed column count |
md-stack |
Vertical grouping |
md-divider |
Subtle rule |
md-connector |
Decorative arrow between rows |
md-section |
Section with automatic heading/intro column, sticky on wide screens |
Use {data-gap="sm"} or {data-gap="lg"} on grid/stack/layout containers,
{data-columns="2"} (also 3 or 4) for explicit desktop columns, and
{data-align="center"} on a card or box. Explicit columns stack at narrow
viewports. Unknown values retain the defaults; arbitrary CSS is not accepted.
Use descriptive text to convey relationships, rather than relying on arrow
direction alone for accessibility.
Heading permalink links stay inline inside md-card, including nested headings,
so ordinary titles do not add a horizontal scrollbar. The links remain available
on hover and keyboard focus. Wide code blocks still scroll independently; a wide
comparison table can scroll within its card without widening the page.
Markdown story pages
Set content_width: wide in a post's frontmatter to opt into a wider frame,
larger balanced title, and a larger opening paragraph. Other pages keep their
existing appearance. This option applies to the default post.html template
(custom templates must opt in themselves).
Start each md-section with an H2. The heading and the paragraph immediately
after it become the section head; everything else becomes the body. At 1100px
and wider the head sticks beside the body while scrolling. Smaller screens
stack them; print uses static headings. Without a leading H2, all content stays
in the body.
---
title: "From foundations to agent workflows"
content_width: wide
---
A short opening paragraph introduces the story.
::: md-section
## 2026 · Agent workflows and access
Agents became first-class platform users.
### Identity and access
Longer narrative, lists, tables, and cards go here.
:::
A short token (up to 16 characters, no spaces) followed by the exact separator
· becomes a large primary-color kicker. The full heading's ID is unchanged:
the example still links to #2026-agent-workflows-and-access. No JavaScript
or separate story-head container is needed.
For a timeline overview, add the rail modifier to an md-grid:
::: md-grid rail {data-columns="2"}
:::: md-card
::::: md-icon
:lucide-bot:
:::::
_2026_
### [Agent workflows](#2026-agent-workflows-and-access)
Agents inspect runs and read logs.
::::
:::: md-card
_2025_
### [Platform visibility](#2025-platform-visibility)
Telemetry reaches more teams.
::::
:::
At 1000px and wider, a rail joins card tops with ring ticks that fill on
hover or keyboard focus. The default is four columns; data-columns="2", "3"
or "4" overrides it. Below 1000px cards stack along a vertical rail with ring ticks. The ticks
remain visible and fill on hover or keyboard focus. A card's heading
link stretches over the card; keyboard focus outlines the card. Use one heading
link per card and avoid other interactive controls in these overview cards.
An emphasis-only paragraph supplies the small uppercase monospace kicker.
Rail cards allow visible overflow so the ring ticks remain visible above their tops.
An md-section immediately after the rail gets responsive spacing from 4.5rem to 7.5rem.
These defaults need no page-local CSS.
For unresolved items, use ::: md-grid pending with nested md-card
containers. Cards get dashed borders, transparent backgrounds and muted icons.
Both variants use ordinary Markdown, work without JavaScript, and retain theme
colors. See rendering-fixtures/story-layout.md for a full example.
Architecture diagram
::: md-layout
:::: md-box {data-align="center"}
### Falcon3 — Kubernetes
Two deployments, shared published site volume.
::::
:::: md-columns {data-gap="sm"}
::::: md-card {data-align="center"}
### Website
Nginx serves current release.
:::::
::::: md-card {data-align="center"}
### Builder Admin
Builds and publishes releases.
:::::
::::
:::: md-connector {data-direction="both"}
::::
:::: md-box {data-align="center"}
### Shared `/data/site` Longhorn PVC
Replicated storage: NVMe + HDD.
::::
:::
The connector arrows are only a decorative aid, not a replacement for the descriptive labels. For connected arbitrary graphs, use Mermaid.
Icons and feature rows
The built-in icons plugin already accepts Lucide shortcodes like
:lucide-rocket:. Combine those shortcodes with md-icon (centered icon,
optional {data-size="lg"}), or with an md-feature row containing a
md-feature-icon and md-feature-body. No new icon font, CDN, or
JavaScript is necessary.
::: md-feature
:::: md-feature-icon
:lucide-rocket:
::::
:::: md-feature-body
### Verify production
Smoke-test the new Markdown components at mobile widths.
::::
:::
The icon remains decorative, so provide readable heading text. The row stays within its article column at narrow widths. For side-by-side icon cards or more icon names, see Icon Shortcodes.
Side-by-side tables
::: md-columns
:::: md-card
### Current storage
| Node | Capacity |
| --- | ---: |
| Falcon2 | 3 TB |
| Falcon3 | 4 TB |
::::
:::: md-card
### Proposed storage
| Node | Capacity |
| --- | ---: |
| Falcon2 | 3 TB |
| Falcon3 | 14 TB |
::::
:::
Each table remains normal semantic Markdown HTML and can independently use
table sorting when enabled. Cards keep their own horizontal overflow instead
of forcing the whole article to scroll. For more examples, see
examples/gallery-site/pages/layout-primitives.md.
Status and metric reports
You can also compose native, accessible status badges, metric cards, progress bars, and before/after comparisons. See the Markdown metrics guide for the required values, labels, and data-tone options.