Facet
Clipped corner, sized by the token above.
Swap the navigation, the hero, the body and the footer, then change the tokens underneath them. Every control below is a radio input and a :has() rule — there is no script on this page doing any of it.
Split hero
The variant for a product with something to show.
region: eu-west
every: 30sCentred hero
For launches and anything without a screenshot worth showing.
Shorter, because the visitor has already arrived.
Card grid
Clipped corner, sized by the token above.
Hairline border over the page colour.
Wash and a stronger border.
Split body
Alert
Colour carried by a rule and a wash.
Data
| Check | Status | p95 |
|---|---|---|
| api-gateway | Healthy | 184ms |
| billing-worker | Degraded | 1.8s |
| auth-service | Healthy | 96ms |
Header .pf-nav.pf-nav--flush · Hero .pf-hero--split.pf-hero--center.pf-pagehead · Footer .pf-footer.pf-footer--slim.pf-footer--accent
CSS cannot change a class, so every variant is in the markup and hidden. A :has() rule turns the selected one back on. For a docs page showing three navigation bars that is the right trade; on a real page you would render the one you chose.
Theme, accent, cut, radius and rhythm each redeclare one or two custom properties on the stage. No component rule is touched, and nothing is reclassed — which is the whole argument for the token layer, demonstrated rather than described.
Radio inputs, a checkbox and :has(). Where :has() is unsupported the stage shows its defaults and the controls do nothing — a degradation, not a break.
Other things you can poke
Every documentation page on this site has something interactive in it:
swap page regions,
retint a live page,
change the type scale,
see what each module unlocks,
assemble your link block,
frame a real page at 320px,
weigh a page type,
build an attribute list,
turn the invisible guards on,
flip a component through its states and
filter the changelog by tag.
All of it is radio inputs, checkboxes and :has() — no script runs any of it.