Semantic theme class reference
Stable Flowershow CSS hooks grouped by the UI areas that emit them.
Flowershow themes start with custom properties,
then use semantic classes when a component needs more specific treatment. This
page is generated from
default-theme.css
and currently documents 230 styled class selectors:
228 stable semantic hooks and 2 non-contract
compatibility utilities.
Stability contract
The semantic component, element, state, and variant hooks listed here are a public theme-author API. Removing or renaming one, or changing what UI element it represents, is a breaking change for themes. Adding a hook is non-breaking. State and Variant hooks are stable in name but only appear when their owning component enters that state; do not assume every page renders every hook.
The list is exhaustive for classes styled by default-theme.css. The final
compatibility section is drift-checked but explicitly excluded from the public
API. Emitted-only class names and raw utility classes used inside component
source are not an authoring contract unless they appear in a semantic table on
this page.
Structural wrappers shown in DOM sketches but absent from their accompanying tables provide nesting context only; they are not stable hooks. Structure is still controlled by Flowershow core: these hooks change presentation, not which components render or their order.
Kinds used below:
- Hook — component or semantic element.
- Element — BEM-style child written with
__. - Variant — alternative treatment written with
--. - State — conditional
is-*,has-*, orno-*hook. - Compatibility — styled utility retained for compatibility, not public API.
Related non-class hooks
Callouts use data attributes rather than classes:
[data-callout][data-callout-type="note"](and other callout types)[data-callout-title][data-callout-body]
Scope callout overrides below .rendered-mdx so they outrank the base
attribute selectors without relying on source order.
Site layout and page shell
Top-level site grid, responsive rails, and shell variants.
DOM shape
.site-layout[.no-nav]
├─ .site-navbar (optional)
├─ .site-body (structural wrapper)
│ ├─ .site-subnav (optional)
│ ├─ .page-hero-container (optional)
│ └─ .layout-inner[.has-sidebar | .has-toc | .has-sidebar-and-toc]
│ ├─ .layout-inner-left
│ ├─ .layout-inner-center (structural wrapper)
│ │ └─ main.page-main (structural wrapper)
│ └─ .layout-inner-right
└─ .site-footer
| Class | Kind |
|---|---|
.layout-inner | Hook |
.layout-inner-left | Hook |
.layout-inner-right | Hook |
.site-layout | Hook |
Navbar and mobile navigation
Desktop navbar, dropdowns, mobile navigation, theme switch, and visitor controls.
DOM shape
.site-navbar
├─ .site-navbar-inner
│ ├─ .site-navbar-site-name
│ ├─ .site-navbar-links-container
│ │ ├─ .site-navbar-link
│ │ └─ .site-navbar-dropdown
│ └─ .site-navbar-mobile-nav-button
└─ .mobile-nav
| Class | Kind |
|---|---|
.mobile-nav | Hook |
.mobile-nav-cta-button | Hook |
.mobile-nav-dropdown | Hook |
.mobile-nav-dropdown-icon | Hook |
.mobile-nav-dropdown-item | Hook |
.mobile-nav-dropdown-panel | Hook |
.mobile-nav-dropdown-trigger | Hook |
.mobile-nav-link | Hook |
.mobile-nav-links-container | Hook |
.mobile-nav-social-link | Hook |
.mobile-nav-social-links-container | Hook |
.mobile-nav-tree | Hook |
.mobile-nav-tree-container | Hook |
.mobile-nav-tree-item-children | Hook |
.mobile-nav-tree-item-icon | Hook |
.mobile-nav-tree-item-self | Hook |
.site-navbar | Hook |
.site-navbar-cta-button | Hook |
.site-navbar-dropdown | Hook |
.site-navbar-dropdown-icon | Hook |
.site-navbar-dropdown-item | Hook |
.site-navbar-dropdown-panel | Hook |
.site-navbar-dropdown-trigger | Hook |
.site-navbar-inner | Hook |
.site-navbar-link | Hook |
.site-navbar-links-container | Hook |
.site-navbar-mobile-nav-button | Hook |
.site-navbar-mobile-nav-icon | Hook |
.site-navbar-search-container | Hook |
.site-navbar-site-logo | Hook |
.site-navbar-site-name | Hook |
.site-navbar-site-title | Hook |
.site-navbar-social-link-icon | Hook |
.site-navbar-social-links-container | Hook |
.site-navbar-theme-switch-container | Hook |
.theme-switch | Hook |
.theme-switch-icon | Hook |
.visitor-logout-button | Hook |
.visitor-logout-button-icon | Hook |
Subnavigation, sidebar, and site tree
Breadcrumbs, desktop site tree, and the small-screen sidebar drawer.
DOM shape
.site-subnav
├─ .site-subnav-breadcrumbs
└─ .site-subnav-menu-button
.layout-inner-left
└─ .site-sidebar
└─ .site-tree
body (dialog portal)
└─ .sidebar-drawer-panel
└─ .site-tree
| Class | Kind |
|---|---|
.sidebar-drawer-backdrop | Hook |
.sidebar-drawer-close | Hook |
.sidebar-drawer-close-icon | Hook |
.sidebar-drawer-header | Hook |
.sidebar-drawer-panel | Hook |
.site-sidebar | Hook |
.site-subnav | Hook |
.site-subnav-breadcrumb-item | Hook |
.site-subnav-breadcrumb-link | Hook |
.site-subnav-breadcrumbs | Hook |
.site-subnav-menu-button | Hook |
.site-subnav-menu-icon | Hook |
.site-subnav-separator | Hook |
.site-tree | Hook |
.site-tree-disclosure-panel | Hook |
.site-tree-item | Hook |
.site-tree-item-children | Hook |
.site-tree-item-icon | Hook |
.site-tree-item-self | Hook |
.site-tree-item-text | Hook |
Page header, hero, and rendered content
Page identity, hero content, Markdown body, code controls, images, and task-list hooks.
DOM shape
.page-hero-container
└─ .page-hero[.has-image | .image-full]
main.page-main (structural wrapper)
├─ .page-header
│ ├─ .page-header-title
│ ├─ .page-header-description
│ └─ .page-header-metadata-container
└─ .page-body (structural wrapper)
└─ .rendered-mdx[.is-plain]
| Class | Kind |
|---|---|
.contains-task-list | Hook |
.heading-link | Hook |
.page-header | Hook |
.page-header-author-avatar | Hook |
.page-header-author-name | Hook |
.page-header-authors-avatars-container | Hook |
.page-header-authors-container | Hook |
.page-header-date | Hook |
.page-header-date-icon | Hook |
.page-header-description | Hook |
.page-header-image | Hook |
.page-header-image-container | Hook |
.page-header-metadata-container | Hook |
.page-header-title | Hook |
.page-hero | Hook |
.page-hero-container | Hook |
.page-hero-content | Hook |
.page-hero-content-container | Hook |
.page-hero-cta | Hook |
.page-hero-ctas-container | Hook |
.page-hero-description | Hook |
.page-hero-image | Hook |
.page-hero-image-container | Hook |
.page-hero-title | Hook |
.pre-container | Hook |
.pre-copy-button | Hook |
.pre-icon | Hook |
.pre-sr | Hook |
.rendered-mdx | Hook |
Table of contents
The page ToC rail and recursively nested ToC items.
DOM shape
.page-toc-container
└─ .toc
├─ .toc-title
└─ .toc-item
├─ .toc-item-self
└─ .toc-item-children
| Class | Kind |
|---|---|
.page-toc-container | Hook |
.toc | Hook |
.toc-item | Hook |
.toc-item-children | Hook |
.toc-item-self | Hook |
.toc-title | Hook |
Lists, cards, skeletons, and pagination
Collection/blog listing cards, loading placeholders, and pagination controls.
DOM shape
.list-component
├─ .list-component-item / .list-component-skeleton-item
│ ├─ *-media
│ └─ *-content
└─ .list-component-pagination
├─ .list-component-pagination-nav
└─ .list-component-pagination-pages
| Class | Kind |
|---|---|
.list-component | Hook |
.list-component-item | Hook |
.list-component-item-content | Hook |
.list-component-item-eyebrow | Hook |
.list-component-item-footnote | Hook |
.list-component-item-headline | Hook |
.list-component-item-media | Hook |
.list-component-item-media-img | Hook |
.list-component-item-summary | Hook |
.list-component-pagination | Hook |
.list-component-pagination-button | Hook |
.list-component-pagination-button–next | Variant |
.list-component-pagination-button–prev | Variant |
.list-component-pagination-button-icon | Hook |
.list-component-pagination-button-icon–next | Variant |
.list-component-pagination-button-icon–prev | Variant |
.list-component-pagination-ellipsis | Hook |
.list-component-pagination-nav | Hook |
.list-component-pagination-nav–end | Variant |
.list-component-pagination-page-button | Hook |
.list-component-pagination-page-button–current | Variant |
.list-component-pagination-page-button–other | Variant |
.list-component-pagination-pages | Hook |
.list-component-skeleton | Hook |
.list-component-skeleton-content | Hook |
.list-component-skeleton-eyebrow | Hook |
.list-component-skeleton-footnote | Hook |
.list-component-skeleton-headline | Hook |
.list-component-skeleton-item | Hook |
.list-component-skeleton-media | Hook |
.list-component-skeleton-media-placeholder | Hook |
.list-component-skeleton-summary | Hook |
Search button and modal
Search launch control, modal shell, result states, and hit content.
DOM shape
.search-button
.search-modal
├─ .search-modal-backdrop
└─ .search-modal-card-container
└─ .search-modal-card
├─ .search-modal-input-container
└─ .search-modal-results
| Class | Kind |
|---|---|
.search-button | Hook |
.search-icon | Hook |
.search-modal | Hook |
.search-modal-backdrop | Hook |
.search-modal-card | Hook |
.search-modal-card-container | Hook |
.search-modal-close-button | Hook |
.search-modal-close-icon | Hook |
.search-modal-error-icon | Hook |
.search-modal-error-icon-text | Hook |
.search-modal-highlight | Hook |
.search-modal-hit-content | Hook |
.search-modal-hit-link | Hook |
.search-modal-hit-title | Hook |
.search-modal-hits-item | Hook |
.search-modal-hits-list | Hook |
.search-modal-input | Hook |
.search-modal-input-container | Hook |
.search-modal-loading-spinner | Hook |
.search-modal-results | Hook |
.search-modal-results-container | Hook |
.search-modal-stalled-spinner | Hook |
.search-modal-status-container | Hook |
.search-modal-status-content | Hook |
.search-modal-status-icon | Hook |
.search-modal-status-message | Hook |
.search-modal-status-submessage | Hook |
.search-placeholder | Hook |
.search-shortcut-hint | Hook |
Footer
Publication identity, navigation groups, social links, and copyright.
DOM shape
.site-footer
└─ .site-footer-inner
└─ .site-footer-content-grid
├─ .site-footer-publication-section
└─ .site-footer-navigation-section
| Class | Kind |
|---|---|
.site-footer | Hook |
.site-footer-content-grid | Hook |
.site-footer-copyright | Hook |
.site-footer-inner | Hook |
.site-footer-navigation-grid | Hook |
.site-footer-navigation-group | Hook |
.site-footer-navigation-link | Hook |
.site-footer-navigation-list | Hook |
.site-footer-navigation-section | Hook |
.site-footer-navigation-title | Hook |
.site-footer-publication-name | Hook |
.site-footer-publication-section | Hook |
.site-footer-social-icon | Hook |
.site-footer-social-link | Hook |
.site-footer-social-links | Hook |
Backlinks, edit controls, and comments
Blocks rendered after the main page content.
DOM shape
.layout-inner-center (structural wrapper)
├─ main.page-main (structural wrapper)
├─ .page-edit-button-container
├─ .page-backlinks-container
│ └─ .page-backlinks-list
└─ .page-comments-container
| Class | Kind |
|---|---|
.page-backlinks-container | Hook |
.page-backlinks-item | Hook |
.page-backlinks-list | Hook |
.page-backlinks-title | Hook |
.page-comments-container | Hook |
.page-edit-button | Hook |
.page-edit-button-container | Hook |
Graph, canvas, PDF, and media embeds
Graph panels/modals and document/media rendering surfaces.
DOM shape
.graph-mini-panel / .graph-modal
.canvas-node-content
.pdf-viewer
├─ .pdf-header
└─ .pdf-scroll-area
└─ .pdf-page
| Class | Kind |
|---|---|
.canvas-node-content | Hook |
.graph-mini-panel | Hook |
.graph-mini-panel__action-btn | Element |
.graph-mini-panel__actions | Element |
.graph-mini-panel__label | Element |
.graph-mini-panel–loading | Variant |
.graph-modal | Hook |
.graph-modal__close | Element |
.graph-modal__header | Element |
.graph-modal__inner | Element |
.graph-modal__title | Element |
.pdf-error | Hook |
.pdf-filename | Hook |
.pdf-header | Hook |
.pdf-loading | Hook |
.pdf-page | Hook |
.pdf-page-count | Hook |
.pdf-scroll-area | Hook |
.pdf-viewer | Hook |
Error and not-found pages
Public error cards, diagnostic stacks, and 404 presentation.
DOM shape
.error-page / .not-found
└─ *-inner
├─ *-title
├─ *-subtitle
└─ *-description
| Class | Kind |
|---|---|
.error-card | Hook |
.error-card-icon | Hook |
.error-card-link | Hook |
.error-card-message | Hook |
.error-card-stack | Hook |
.error-card-title | Hook |
.error-page | Hook |
.error-page-description | Hook |
.error-page-inner | Hook |
.error-page-subtitle | Hook |
.error-page-title | Hook |
.not-found | Hook |
.not-found-description | Hook |
.not-found-hint | Hook |
.not-found-inner | Hook |
.not-found-subtitle | Hook |
.not-found-title | Hook |
Shared states and layout variants
Conditional presence, open/current, image, and layout modifiers.
DOM shape
Owning semantic hook
└─ .is-* / .has-* / .no-* / .image-full
| Class | Kind | Owner |
|---|---|---|
.has-image | State | .page-hero |
.has-sidebar | State | .layout-inner |
.has-sidebar-and-toc | State | .layout-inner |
.has-toc | State | .layout-inner |
.image-full | Variant | .page-hero |
.is-collapsible | State | .site-tree-item-self / .mobile-nav-tree-item-self |
.is-current | State | .site-tree-item-self / .mobile-nav-tree-item-self |
.is-open | State | navigation dropdowns and collapsible tree items |
.is-plain | State | .rendered-mdx |
.is-scrolled | State | .site-navbar |
.no-nav | State | .site-layout |
Compatibility utilities (not public API)
Selectors retained for exhaustive drift tracking but excluded from the semantic theme-author contract.
CSS layer
@layer utilities
├─ .prose
└─ .overflow-hidden
| Class | Kind |
|---|---|
.overflow-hidden | Compatibility |
.prose | Compatibility |
Generated by node scripts/theme-class-reference.mjs --write. Run
pnpm docs:theme-classes:check to verify that this page matches the current
stylesheet.