Skip to content

Tray popover

LAW — locked, CI-gated

Status: law — the desktop chapter is normative in docs/chapters/desktop.md (ratified v1).

the surface. the popover is the tray icon unfolded: fused anchor, flush seam, one material across the join. it grows from its anchor at 180ms, and dismissal is triple-redundant: click away, escape, or toggle the anchor. escape closes the innermost layer first, always.

rule (law).

  • 440px panel; the product’s primary noun gets the primary area (one organizer per surface).
  • routine operation completes in the popover. opening the full window for a routine task is a design failure by definition.
  • auto-scale first: the panel fits its work area down to a 960×540 quadrant; a density override exists only as a settings backup.
  • travel is costed from the tray icon; panel height is the travel budget, not a default to fill.
  • the full keyboard model comes from the behaviour layer — focus trap and restore, roving tabindex, typeahead — with number keys applying items by position while the popover is open.
  • state strips (drift, messages, suggestions) appear only when their state exists, as slim strips — icon, one line, actions — never as permanent cards.

candidate — preview-commit. hover previews; click or tap commits. a preview is a read: it runs free, changes nothing, and reverses itself when the pointer leaves. a commit is a write: it needs the hand. no surface may apply a change on hover alone, and no preview may leave residue after it ends. (candidate, on the record in the audit fold-in patterns; not law until it graduates.)

named gaps in this chapter. the stack-height law (maximum, compression order, scroll behaviour) and the teaching retirement signal (what count or signal retires a hint) are undecided. the chapter names both rather than papering over them.

worked example. the constitution’s §15 works this surface end to end: the popover as the suite’s display utility, annotated against the rules.

the tray evening at rest focus collapsed cinema collapsed drift — main is at 144 hz; the scene says 240 esc closes · ? for the cheatsheet panel — 440px wide (the chapter's measure) radius — panel, 12px cards derive inside it material — glass, black at 0.92 border — panel, white at 0.14 grows from its anchor — 180ms, the ease-out token scene name 15px semibold body 13px · hints 11px hero on the panel material, not in a card; strips exist only while their state does
the popover, measured. radius, glass, border, duration, and type are read from the token source at build time; the 440px panel width is the desktop chapter's measure.

the surface’s own furniture, live: a scene card at rest, and one open. routine operation completes here — nothing above asks for the full window.

focus 2 displays
evening open
displays
main at 144 hz
brightness
stops at 80
drift
scene says 240

Canonical chapter: docs/chapters/desktop.md; map and spine in §13 of the design language document, worked example at §15.