Skip to main content
<casca-layout class="casca">: Declarative Shadow DOM layout primitive with data-variant="doc|demo|landing|article", six named slots (brand, nav, theme-picker, hero, footer, and the unnamed main slot), the full --casca-layout-* token surface, and explicit .casca-anchor-nav-link--in-header / .casca-theme-picker--in-header modifier classes for slotted header children. Consumers author id="casca-layout-main" with tabindex="-1" on their main-slot wrapper so the shadow-tree skip link can target it.
tools/release-templates/casca-layout-shell.html: copyable MIT shell asset for the new layout primitive, including the shadow template, an id="casca-layout-main" skip-link target wired to a focusable consumer-authored wrapper, slotted chrome fills, and dual dist/casca.css stylesheet loads.
- Prose callouts:
.casca-prose-callout with data-callout="note|tip|warning|danger|important", explicit role="note" / aria-label authoring guidance, unknown-value fallback to note, and bold-leading blockquote auto-detection through blockquote:has(> p:first-child > strong:first-child).
- Prose disclosure styling for native
<details> / <summary>, including custom marker rotation, focus-visible outline, reduced-motion handling, forced-colors handling, and print expansion of collapsed details content.
- Prose definition-list typography for
<dl>, <dt>, and <dd>.
- Prose heading anchors emitted by the SSG as
<a class="casca-prose-anchor"><span class="casca-prose-anchor-label">Link to section</span></a> on headings inside a .casca-prose ancestor that have ids, with HTML-attribute escaping for href and idempotent no-double-emit behavior. Headings outside .casca-prose keep id auto-injection but do not receive a permalink anchor.
- Public prose token surfaces for
--casca-prose-callout-*, --casca-prose-details-*, --casca-prose-dl-*, and --casca-prose-anchor-*, including per-role callout color tokens and dark companions.
- Compatibility documentation for prose
:has() auto-detection, color-mix(in oklab) callout tinting, touch-device heading-anchor reveal, forced-colors behavior, and print behavior.
casca site markdown now maps rendered GFM primitives by default through casca_primitive_mapping: tables get casca-data, casca-data-head, and casca-data-body; code blocks get casca-code and data-language; strong-leading blockquotes get casca-prose-callout with data-callout, role="note", and aria-label="Note".
- New
[markdown] controls include wrap_in_casca_layout and default_variant, so rendered markdown can be wrapped in casca-layout data-variant using the Phase 089 Declarative Shadow DOM shell.
- New
markdown.opt_out controls let authors preserve pre-v1.5.0 output for tables, code blocks, or callouts independently. A blockquote class attribute is also a presence-based author opt-out for automatic callout wrapping.
- New
[[layouts]] variant route field overrides [markdown].default_variant for wrapped markdown pages. Valid values remain doc, demo, landing, and article.
- Compatibility note: disabling both
casca_primitive_mapping and wrap_in_casca_layout preserves the pre-v1.5.0 markdown output contract.
- CI collapses from three workflows to two.
site-deploy.yml removed; site deploy is now a conditional final job inside both lint-plus-policy.yml and release.yml, gated in shell rather than chained across workflows. No more workflow dispatch API chain, no workflow run trigger, no CODEBERG_WORKFLOW_TOKEN.
.forgejo/workflows/lint-plus-policy.yml triggers on any push plus pull requests to main. Ref-keyed non-cancelling concurrency (group: lint-${{ github.ref }}, cancel-in-progress: false) keeps combined main and tag pushes from cancelling each other. Terminal site-deploy job runs unconditionally; the deploy action is gated in shell by docs/site path detection plus tag-presence check (skip when a v* tag points at HEAD, skip when no docs/ or site/ changes).
.forgejo/workflows/release.yml triggers on v* tag push only. preflight validates the tag ref and the VERSION-vs-tag match (no workflow run gate). Terminal site-deploy job pins actions/checkout to the triggering tag ref (ref: ${{ github.ref }}, fetch-depth: 0, fetch-tags: true) for a hermetic publish from the tagged commit.
tools/publish-site-pages.sh shared deploy helper. Local canonical retry3() with three attempts and a five-second backoff wraps every Codeberg-edge git/ssh call. Logs both the pages commit SHA and the source workflow SHA. Bash strict mode (set -euo pipefail).
- New
make publish-site target. POSIX recipe runs make site then ./tools/publish-site-pages.sh.
- Skip markers logged by the lint deploy gate:
SITE_DEPLOY_SKIPPED_NO_RELEVANT_CHANGES, SITE_DEPLOY_SKIPPED_TAG_PRESENT, SITE_DEPLOY_PERFORMED (release deploy job emits SITE_DEPLOY_PERFORMED).
download-artifact@v3 pattern + merge-multiple inputs (unsupported on the runner) replaced with explicit v3-compatible downloads in the release workflow. Artifact names and paths preserved.