Native HTML, slotted
Anchors, buttons, and copy stay in light DOM. SEO, analytics, and your existing CSS keep working.
Combat UI
A small set of token-driven CSS primitives and accessible custom elements. Light DOM stays yours; behavior and ARIA stay ours.
The majority of the system is just HTML and CSS. Layout primitives are class-based, making them portable across frameworks and tech stacks. Web Components are only used when additional behavior, accessibility features, or ARIA interactions are required. Everything is driven by a small set of CSS custom properties, so changing a single variable propagates consistently throughout the entire system.
Anchors, buttons, and copy stay in light DOM. SEO, analytics, and your existing CSS keep working.
Colors, type, spacing, density, and component tokens cascade through plain CSS variables
Pages render before JavaScript loads. Components hydrate behavior on top of HTML that's already meaningful.
Add the package, import the bundle, and the cui-* elements register on the global custom
element registry. We currently have no npm package, but you can clone the repo and import the local bundle
for now. A package is coming soon.
Import the auto entry. Every cui-* element registers itself and the
global utility stylesheet is included.
Import elements from their subpaths. Each one self-registers, so your bundler ships only the components you actually use.
The package root is side-effect-free: it exports the element classes, helpers
(toast, defineCombatUi, getTheme / setTheme)
and TypeScript types, but on its own it does not register elements or inject any
CSS. Call defineCombatUi() to register the whole set at once.
The utility-class layer (design tokens, layout, and the light-DOM cui-* classes)
ships as a separate stylesheet. The auto entry includes it; otherwise import it once:
cui-map uses Leaflet as an optional peer
dependency, loaded on demand the first time a map appears. Install it alongside Combat UI when
you use maps (add leaflet.markercluster too for marker clustering):
Import the bundle, then drop an element into your HTML. The element registers itself and the global utility stylesheet is included, no setup, no build step.
Two tracks — the build surface (tokens, layout, theming) and the pattern surface (page sections, components, and forms).
Sections, containers, editorial type, flow rhythm, and utility classes.
Page wrappers, stack, cluster, grid, switcher, split, sidebar, shell, and app shells.
Color, type, spacing, density, dark mode, and the full per-component token reference.
Hero, page intro, CTA, content grids, and media blocks — the marketing page building blocks.
Navigation, atoms, motion, and overlays — interactive primitives as custom elements.
cui-field and cui-form with native validation, async validators, and i18n.
Status
Layout, theming, and foundation classes are stable. The component set is intentionally small and grows when a pattern earns its keep.