Reserve packing
Fictional lesson card with a short line of text.
Every reusable part of learn and BMS, in each state. Build from these; do not invent a new part. States: rest, hover, focus, disabled, error. Hover and focus are shown by a forced class on this page only.
Classes: .btn plus .btn-primary, .btn-dark, .btn-ghost; size .btn-sm.
Wrapper .field with a label; text-like inputs are styled by element. Error list: .form-errors.
.fk-dd with .fk-dd-toggle, .fk-dd-panel, .fk-dd-list, .fk-dd-opt. Never a native select (ruling 2026-06-01).
Booking month grid: .fk-cal-head, .fk-cal-nav, .fk-cal-title, .fk-cal-grid, .fk-cal-dow, .fk-cal-day with .av (available), .sel (selected), .blocked, .off (outside month). Date picker popup classes: .dp-wrap, .dp-pop, .dp-day, .is-sel.
.card (white, line border, token radius and shadow). Callouts: .callout-green, .callout-red.
Fictional lesson card with a short line of text.
Same card with a visible focus ring.
R-059 (trial): Karlis dropped uppercase labels and pills. Not shown as parts and not to be copied: the status pill (.badge, .pill) and the small uppercase kicker above a heading. The app css still defines them; they are listed here so nobody rebuilds them.
.read-progress with an inner span scaled by script (lesson-progress.js). It is fixed to the bottom of the page; the demo shows it in a frame at 40 percent.
Container .nv-end.nv-c, header .nv-map-head, steps .nv-steps (.is-read, .is-here, .is-next), button .nv-read (aria-pressed true is the green read state), teaser .nv-teaser.
Green read state of the button and the current step:
Learn: .toast (app.css). BMS: .bms-toast and .bms-toast--danger (bms.css).
From bms/_inbox_body.html: .bms-widget, .bms-whead, .bms-wct, .bms-qrow, .bms-av, .bms-qbody, .bms-name, .bms-meta, .bms-qact, .bms-wempty.