## toggle (`poetry_toggle`)

A two-state button that can be pressed on or off.

Class: Poetry::Ui::Toggle::Component - BEM block `poetry-ui-toggle`.
- `size:` (symbol) - one of default|sm|lg, default "default", required - The control's size axis.
- `variant:` (symbol) - one of default|outline, default "default", required - The visual treatment; :outline adds a border for standalone use.
- `disabled:` (boolean) - default false - Disables the control and forwards to the native button.
- `label:` (string) - REQUIRED when icon-only; must be state-INVARIANT (APG: aria-pressed carries the state - a flipping name makes SRs announce nonsense).
- `pressed:` (boolean) - default false - The server-rendered pressed state.
- PART `toggle` - The pressed-state <button> - the whole component; aria-pressed carries the state and the controller flips both together | states: data-pressed (pressed (bare presence boolean - absent when unpressed, never data-pressed=false)); data-disabled (disabled (rendered alongside native disabled for styling-hook parity)); data-variant=default|outline (the visual variant); data-size=default|sm|lg (the size)
- WIRING root: `poetry--core--pressed` registers; actions toggle on click
- RULE: Use poetry_toggle - never a Button with hand-managed aria-pressed.
- RULE: Toggle is UI state, NOT form data: never try to submit it. Form value -> Checkbox; instant setting -> Switch; exclusive/grouped -> ToggleGroup.
- RULE: Icon-only toggles MUST pass label:, and the label must NOT change with state ('Bookmark', never 'Remove bookmark').
- RULE: aria-pressed is the vocabulary - never aria-checked or aria-expanded on a Toggle.
- RULE: Wire the EFFECT to poetry:toggle:change (or click) and revert via set(false) on failure - a pressed toggle whose effect failed is a lie.
- RULE: Pressed visual is accent - don't override data-pressed colors per-instance (theme-level only).
