Sheet
Side panel that slides in from an edge. Positions: right, left, top, bottom. Use for transient forms, filters, or detail views. Like Modal it covers the page with a full-viewport scrim and locks body scroll, closing on scrim click or Esc — the difference is that focus is moved and restored rather than trapped.
a11y (built in): the sheet root is a real dialog — role=dialog + aria-modal + aria-labelledby pointing at the panel title, the scrim marked aria-hidden, and an icon-only close button named by aria-label. Opening records the element that had focus, moves focus to that close button and locks body scroll; the close button, a scrim click, and Esc (while focus is inside the panel) all close and hand focus back to whatever opened the sheet. Focus is moved and restored, not trapped — LB.Modal is the component that adds a trap.
Usage: Same mount contract as Modal: a .lb-sheet-root wrapper with data-lb-sheet and inline display:none, holding the .lb-sheet-overlay scrim plus a .lb-sheet panel whose edge comes from one modifier — .lb-sheet--right / --left / --top / --bottom. The attribute auto-inits on DOMContentLoaded; open and close through el._lbSheet.open() / .close(), or pass a callback with new LB.Sheet(el, { onClose }). The root dispatches lb-sheet-open and lb-sheet-close on every transition.