with flex flex-col (vertical)
// grid → CSS grid
// cols: number grid-cols (responsive: md:grid-cols-N)
// gap: number gap in pixels (divided by 4 for Tailwind)
//
// section → with optional anchor
// id: string HTML id attribute for anchor links
// title: string Renders
if present, omitted if absent
//
// card →
with border support
// Styles: border= adds colored border
//
// list → container with space-y-2
// item → child of list
// ── TEXT ────────────────────────────────────────────────────────────
//
// text → renders text in any HTML element
// value: string Static text content
// bind: string Dynamic binding: {variableName}
// tag: string HTML element to use
// Valid tags: h1 h2 h3 h4 h5 h6 p label span
// Default: span
//
// Examples:
// text value="Hello World" tag=h1 {fs:48,fw:800,c:#fff}
// text bind=userName tag=p {fs:16,c:#a1a1aa}
// ── IMAGE ───────────────────────────────────────────────────────────
//
// image → next/image component
// src: string Image path or URL
// "/path.png" → used as-is
// "https://..." → used as-is
// "name.svg" → used as-is (has dot)
// "name" → becomes /.png (legacy)
// alt: string Alt text (default: src value)
// width: number Width in pixels
// height: number Height in pixels
// priority: boolean LCP optimization flag
// fill: boolean Fills parent container (omits width/height)
// ── CODEBLOCK ───────────────────────────────────────────────────────
//
// codeblock →
with syntax highlighting class
// lang: string Language class (e.g. kern, typescript, bash)
// value: string Inline code content
// OR use body child node for multiline:
// codeblock lang=kern
// body value="line 1 line 2 line 3"
// ── INTERACTIVE ─────────────────────────────────────────────────────
//
// button →