What's in scope
What this framework covers, what it deliberately doesn't, and where the line is. A "not in scope" list is a completeness signal: it says the gap was decided, not forgotten (owner docs review, 2026-08-16).
In scope
- Semantic components for back-office screens — tables, forms, money and quantity fields, approval timelines: the surfaces an ERP actually spends its day in.
- Density as a first-class dimension — one attribute re-sizes a whole screen, because clerks and casual users need different row heights from the same app.
- The cascade as the API — layered CSS you override from your own unlayered stylesheet, no build step required.
- Behaviors, not a framework — a small set of call-once, delegated JS behaviors for what CSS cannot do (dirty-state tracking, combobox ARIA, tree toggling). Everything else is your app's code.
- Print, accessibility, and dark mode as contracts — gated in CI, not aspirations.
Not in scope — decided, not forgotten
| Not shipped | Why, and what to do instead |
|---|---|
| A charting engine | Charts are a library decision (data joins, scales, animation) that would dwarf this codebase. Bring your own; the scale system gives you a categorical palette and the contrast rules to keep it legible in both themes. |
| A rich-text editing engine | Undo stacks, sanitization and selection models are dedicated-library territory. The chrome ships — container, toolbar, prose styles — plus a recipe for mounting a real editor inside it. |
| A virtualised table | Virtualisation trades away find-in-page, native scrolling and print fidelity. Measured render costs are on the data table page; past ~5k rows, paginate server-side. |
| A JS component framework | No components-as-JS, no virtual DOM, no build step. HTML you can read in a diff, styled by cascade layers — htmx-ready, not htmx-coupled. |
| Page builders and WYSIWYG layout engines | Visual authoring engines are outside the framework. A board pattern does ship: it composes existing components with a Move to… action; it is not a drag-and-drop engine. |
| Icons as a shipped set | Icon sets are opinionated and heavy; the sizing contract ships so any set works at every density. |
| State management, routing, i18n runtime | Application concerns. The framework never owns your data or your URLs — it styles what your server renders. |
How a gap gets closed
Everything above was decided against the project's objective — simplicity, less-for-more, reusability — and each decision is recorded with its reasoning in the roadmap. A refusal is not permanent: a real adopter requirement reopens it. What will not happen is a feature landing because it seemed nice, or a gap persisting because nobody wrote down the decision.