bevel.css is one plain, unminified stylesheet. What you read is what ships: a release is this file with its version in a comment on the first line.

Every rule sits in one of five cascade layers, declared once at the top of the file. A later layer beats an earlier one whatever the selectors, and CSS outside any layer beats them all, so an app overrides bevel without !important or specificity tricks.

@layer bevel.reset, bevel.base, bevel.layout, bevel.components, bevel.utilities;
LayerHolds
bevel.resetbox-sizing: border-box everywhere; no margins on headings, paragraphs and lists; images and video shrink to fit.
bevel.baseThe tokens, and styles for text and form controls, all inside :where(), so a bare element is styled at zero specificity.
bevel.layout.container, .row, .section and .page-header.
bevel.componentsNavbar, buttons, forms and add-ons, tables, alerts, labels and badges, hero unit, pagination, progress bars, stats and wells.
bevel.utilities.muted, .text-right, .table-scroll and .visually-hidden, plus the two rules that must beat components: trimming the last margin in a row’s columns, and turning motion off for anyone who asks.
Your app’s CSSUnlayered, so it wins.

A release ships only when every gate passes.

GateToolFails when
BaselineStylelintA feature isn’t Widely available and isn’t inside @supports
House rulesStylelint!important, an ID selector, specificity above 0,2,0, a custom property without --bv-, or a rule outside a layer
SizeGobevel.css is over 20 KB gzipped
TokensGoA token is used but never defined, or defined but never used
CoverageGoA class is missing from the reference, or a page uses a class bevel.css doesn’t define
ReleasesGoThe changelog page is missing a release, or a page names an old one
VisualPlaywrightA screenshot of the reference differs from its approved baseline
Accessibilityaxe-coreThe reference has a WCAG 2.2 AA violation

The gates need Node and Go.

make test              # every gate
make update-snapshots  # after reviewing a visual diff
make release           # runs the gates, then writes dist/bevel-<version>.css

Adding a component

A component is styled inside an app first, and joins bevel when a second app needs it:

  1. Add it to the spec, with exact measurements and every state.
  2. Add it to the reference, with every state.
  3. Build it in bevel.components, using --bv- variables only.
  4. Pass every gate and approve the new baselines.
  5. Add an entry to CHANGELOG.md and the changelog page, and bump the minor version.