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-*, or no-* hook.
  • Compatibility — styled utility retained for compatibility, not public API.

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
ClassKind
.layout-innerHook
.layout-inner-leftHook
.layout-inner-rightHook
.site-layoutHook

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
ClassKind
.mobile-navHook
.mobile-nav-cta-buttonHook
.mobile-nav-dropdownHook
.mobile-nav-dropdown-iconHook
.mobile-nav-dropdown-itemHook
.mobile-nav-dropdown-panelHook
.mobile-nav-dropdown-triggerHook
.mobile-nav-linkHook
.mobile-nav-links-containerHook
.mobile-nav-social-linkHook
.mobile-nav-social-links-containerHook
.mobile-nav-treeHook
.mobile-nav-tree-containerHook
.mobile-nav-tree-item-childrenHook
.mobile-nav-tree-item-iconHook
.mobile-nav-tree-item-selfHook
.site-navbarHook
.site-navbar-cta-buttonHook
.site-navbar-dropdownHook
.site-navbar-dropdown-iconHook
.site-navbar-dropdown-itemHook
.site-navbar-dropdown-panelHook
.site-navbar-dropdown-triggerHook
.site-navbar-innerHook
.site-navbar-linkHook
.site-navbar-links-containerHook
.site-navbar-mobile-nav-buttonHook
.site-navbar-mobile-nav-iconHook
.site-navbar-search-containerHook
.site-navbar-site-logoHook
.site-navbar-site-nameHook
.site-navbar-site-titleHook
.site-navbar-social-link-iconHook
.site-navbar-social-links-containerHook
.site-navbar-theme-switch-containerHook
.theme-switchHook
.theme-switch-iconHook
.visitor-logout-buttonHook
.visitor-logout-button-iconHook

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
ClassKind
.sidebar-drawer-backdropHook
.sidebar-drawer-closeHook
.sidebar-drawer-close-iconHook
.sidebar-drawer-headerHook
.sidebar-drawer-panelHook
.site-sidebarHook
.site-subnavHook
.site-subnav-breadcrumb-itemHook
.site-subnav-breadcrumb-linkHook
.site-subnav-breadcrumbsHook
.site-subnav-menu-buttonHook
.site-subnav-menu-iconHook
.site-subnav-separatorHook
.site-treeHook
.site-tree-disclosure-panelHook
.site-tree-itemHook
.site-tree-item-childrenHook
.site-tree-item-iconHook
.site-tree-item-selfHook
.site-tree-item-textHook

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]
ClassKind
.contains-task-listHook
.heading-linkHook
.page-headerHook
.page-header-author-avatarHook
.page-header-author-nameHook
.page-header-authors-avatars-containerHook
.page-header-authors-containerHook
.page-header-dateHook
.page-header-date-iconHook
.page-header-descriptionHook
.page-header-imageHook
.page-header-image-containerHook
.page-header-metadata-containerHook
.page-header-titleHook
.page-heroHook
.page-hero-containerHook
.page-hero-contentHook
.page-hero-content-containerHook
.page-hero-ctaHook
.page-hero-ctas-containerHook
.page-hero-descriptionHook
.page-hero-imageHook
.page-hero-image-containerHook
.page-hero-titleHook
.pre-containerHook
.pre-copy-buttonHook
.pre-iconHook
.pre-srHook
.rendered-mdxHook

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
ClassKind
.page-toc-containerHook
.tocHook
.toc-itemHook
.toc-item-childrenHook
.toc-item-selfHook
.toc-titleHook

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
ClassKind
.list-componentHook
.list-component-itemHook
.list-component-item-contentHook
.list-component-item-eyebrowHook
.list-component-item-footnoteHook
.list-component-item-headlineHook
.list-component-item-mediaHook
.list-component-item-media-imgHook
.list-component-item-summaryHook
.list-component-paginationHook
.list-component-pagination-buttonHook
.list-component-pagination-button–nextVariant
.list-component-pagination-button–prevVariant
.list-component-pagination-button-iconHook
.list-component-pagination-button-icon–nextVariant
.list-component-pagination-button-icon–prevVariant
.list-component-pagination-ellipsisHook
.list-component-pagination-navHook
.list-component-pagination-nav–endVariant
.list-component-pagination-page-buttonHook
.list-component-pagination-page-button–currentVariant
.list-component-pagination-page-button–otherVariant
.list-component-pagination-pagesHook
.list-component-skeletonHook
.list-component-skeleton-contentHook
.list-component-skeleton-eyebrowHook
.list-component-skeleton-footnoteHook
.list-component-skeleton-headlineHook
.list-component-skeleton-itemHook
.list-component-skeleton-mediaHook
.list-component-skeleton-media-placeholderHook
.list-component-skeleton-summaryHook

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
ClassKind
.search-buttonHook
.search-iconHook
.search-modalHook
.search-modal-backdropHook
.search-modal-cardHook
.search-modal-card-containerHook
.search-modal-close-buttonHook
.search-modal-close-iconHook
.search-modal-error-iconHook
.search-modal-error-icon-textHook
.search-modal-highlightHook
.search-modal-hit-contentHook
.search-modal-hit-linkHook
.search-modal-hit-titleHook
.search-modal-hits-itemHook
.search-modal-hits-listHook
.search-modal-inputHook
.search-modal-input-containerHook
.search-modal-loading-spinnerHook
.search-modal-resultsHook
.search-modal-results-containerHook
.search-modal-stalled-spinnerHook
.search-modal-status-containerHook
.search-modal-status-contentHook
.search-modal-status-iconHook
.search-modal-status-messageHook
.search-modal-status-submessageHook
.search-placeholderHook
.search-shortcut-hintHook

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
ClassKind
.site-footerHook
.site-footer-content-gridHook
.site-footer-copyrightHook
.site-footer-innerHook
.site-footer-navigation-gridHook
.site-footer-navigation-groupHook
.site-footer-navigation-linkHook
.site-footer-navigation-listHook
.site-footer-navigation-sectionHook
.site-footer-navigation-titleHook
.site-footer-publication-nameHook
.site-footer-publication-sectionHook
.site-footer-social-iconHook
.site-footer-social-linkHook
.site-footer-social-linksHook

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
ClassKind
.page-backlinks-containerHook
.page-backlinks-itemHook
.page-backlinks-listHook
.page-backlinks-titleHook
.page-comments-containerHook
.page-edit-buttonHook
.page-edit-button-containerHook

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
ClassKind
.canvas-node-contentHook
.graph-mini-panelHook
.graph-mini-panel__action-btnElement
.graph-mini-panel__actionsElement
.graph-mini-panel__labelElement
.graph-mini-panel–loadingVariant
.graph-modalHook
.graph-modal__closeElement
.graph-modal__headerElement
.graph-modal__innerElement
.graph-modal__titleElement
.pdf-errorHook
.pdf-filenameHook
.pdf-headerHook
.pdf-loadingHook
.pdf-pageHook
.pdf-page-countHook
.pdf-scroll-areaHook
.pdf-viewerHook

Error and not-found pages

Public error cards, diagnostic stacks, and 404 presentation.

DOM shape

.error-page / .not-found
└─ *-inner
   ├─ *-title
   ├─ *-subtitle
   └─ *-description
ClassKind
.error-cardHook
.error-card-iconHook
.error-card-linkHook
.error-card-messageHook
.error-card-stackHook
.error-card-titleHook
.error-pageHook
.error-page-descriptionHook
.error-page-innerHook
.error-page-subtitleHook
.error-page-titleHook
.not-foundHook
.not-found-descriptionHook
.not-found-hintHook
.not-found-innerHook
.not-found-subtitleHook
.not-found-titleHook

Shared states and layout variants

Conditional presence, open/current, image, and layout modifiers.

DOM shape

Owning semantic hook
└─ .is-* / .has-* / .no-* / .image-full
ClassKindOwner
.has-imageState.page-hero
.has-sidebarState.layout-inner
.has-sidebar-and-tocState.layout-inner
.has-tocState.layout-inner
.image-fullVariant.page-hero
.is-collapsibleState.site-tree-item-self / .mobile-nav-tree-item-self
.is-currentState.site-tree-item-self / .mobile-nav-tree-item-self
.is-openStatenavigation dropdowns and collapsible tree items
.is-plainState.rendered-mdx
.is-scrolledState.site-navbar
.no-navState.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
ClassKind
.overflow-hiddenCompatibility
.proseCompatibility

Generated by node scripts/theme-class-reference.mjs --write. Run pnpm docs:theme-classes:check to verify that this page matches the current stylesheet.

Built with LogoFlowershow