Plášť. Jeden scrim (--ov-scrim), jeden podpisový stín (--overlay-shadow), radius-xl, obsah clipnutý. Max 1 rám — plášť je jediný box, žádné rámy v rámech (§0).
Dvě třídy. Commit odesílá — primár + ⌘↵, Esc ruší. Dokument upravuje — autosave, stav „Uloženo“ v hlavičce, žádný primár. Nikdy nemíchat obojí v jednom dialogu.
Hlavička. Vlevo kontext: ikona + název, nebo entity chip, když dialog patří k záznamu. Vpravo akční zóna: kontextové akce · ⋮ · zavřít. Mezi tím nic.
Kotva. Form a quick dokují ~11vh od horní hrany; confirm centruje — na moment vlastní obrazovku. Flexi nedokuje: stojí v okně symetricky, žlab je stejný nahoře i dole.
Tři třídy, ne tři čísla. Malý 400 (confirm, sken QR) a střední 640 (form, transakce, úkol, událost) jsou MÍRY — formulář dostane tolik místa, kolik mají jeho kolonky. Velký je FLEXI (.acrm-dialog.flex): plocha na práci, ne kolonky k vyplnění, proto nemá pevný rozměr v žádné ose — šířku bere z okna (žlab po obvodu, strop 1200), výšku z OBSAHU: plášť roste jen tolik, kolik obsah potřebuje, a když se obsah se žlabem do viewportu nevejde, zastaví se na 100vh − 2מlab (--sp-6) a scrolluje JEN tělo (F51). Pevný pixelový strop výšky neexistuje. Pracovní okna, kterým výšku nemá co diktovat obsah (paleta, psaní e-mailu, ČTENÍ e-mailu — tělo je cizí HTML v iframu bez vlastní výšky, F75 —, psaní poznámky, náhled šablony), se ROZTAHUJÍ na celé okno — modifikátor .work (height: 100 % žlabového boxu, v kódu <Dialog className="work">): výšku jim dává okno, ne obsah, obsah uvnitř jen scrolluje. Používá ho paleta, oba e-maily, dokument i náhled souboru. V kódu <Dialog size="s|m|l">, nikdy magické číslo. Modifikátor .tall (88vh) zůstává jen pro pevné míry; flexi ho nepotřebuje. Head+foot pinned, scrolluje jen tělo. (Instance níž jsou vykreslené v reprezentativní šířce — karta je statická stránka; flexi se pozná až v okně prohlížeče.)
Ledger. Když dialog utrácí kredity/peníze: položkové řádky (badge · množ.×cena · mezisoučet), tučný součet, zůstatek před→po. Mono čísla vpravo, bez boxu — dělí hairline a prostor.
Patička commitu. Vlevo kontextové ghost afordance, vpravo Create-more přepínač, sekundár (Esc) a max jeden primár s ⌘↵ hintem. Destrukce = .btn.danger.
Patička dokumentu. Vlevo „+“ pro vložení bloku, vpravo nic — dokument nemá co potvrzovat. Stav uložení patří do hlavičky, ne do patičky.
Dokumentové tělo. Třída dokumentu si nestaví vlastní obsah: .acrm-dialog-body.doc dodává sazbu pro čtení a psaní v odstavcích (--dlg-title-font 28, --dlg-body-font 15/1.7 — sémantické tokeny končí u --h1 16 a --p 13, což je měřítko pro husté UI) a bezešvé plochy: nadpis, pole i editor bez rámečku, podkladu a fokusního prstence. Čitelnost drží míra sloupce .dlg-measure (680), NE šířka pláště — proto může být flexi velkorysý, aniž by se text rozlil. Hlavičkový blok polí = .dlg-field (label ve sloupci, hodnota holý text); modifikátor .flush vypne žlab těla tam, kde si obsah kreslí pruhy sám (e-mail).
Klávesy. ⌘K otevře hledání · Esc zavře · ↑↓ naviguje · ↵ vybere · ⌘↵ commitne primár.
Overlaye uvnitř se portálují. Každý picker, našeptávač, dropdown, bubble toolbar i blokové menu — jinak ho ořízne overflow pláště (menu .acrm-popover 101 je nad dialogem 80/90 — ořez overflow pláště je to, co portál řeší).
Menu bez nadpisu. Žádné menu v dialogu nemá nadpis nad položkami — ani picker, ani ⋮, ani blokové menu.
Motion. Scrim fade 120 ms; plášť rise 10 px + scale .985→1 za 160 ms. Reduced-motion = okamžitě.
Fokus. Trap uvnitř pláště, autofocus primární input, po zavření zpět na trigger. aria-modal — ale jen dokud je okno modální: v modeless stavech (compact, min) si fokus nebere a aria-modal nemá, jinak by nešlo pracovat s obsahem pod ním.
Stavy okna. Dokumentová flexi okna (psaní a čtení e-mailu, poznámka, náhled souboru) můžou OPT-IN dostat stavy velikosti — expanded · compact · min — a s nimi modeless režim bez scrimu. Ovládání sedí v hlavičce od nejmenší po největší a nabízí jen CÍLOVÉ stavy — aktuální stav se nerenderuje (AD 5. 8. 2026); je to transformační akce, ne další ✕, a před ✕ už nestojí oddělovač. Confirm (400) je nedostane nikdy — čeká se na něj await. Plný kanon, dok minimalizovaných oken i vrstvení jsou na kartě „Dialog — stavy okna“.
Kód. React <Dialog> z @acrm/ui + useConfirm(); window.confirm se nepoužívá. Žádný dialog nestaví vlastní plášť — vždy .acrm-dialog + modifikátor.
Text. Sentence case v nadpisech i tlačítkách; tlačítko nese sloveso akce, ne „OK“.
Mobil. Pod 720 px se každý dialog stává šuplíkem ze spoda — plná šířka, zaoblení jen nahoře, grabber, patička nad safe-area; malý i střední berou výšku z obsahu, flexi téměř plnou výšku (strop 92 %). Patička commitu nese jediné velké CTA přes celou šířku — Create-more zůstává jen na desktopu. Gesto dolů / scrim = Esc, rozepsaný commit se před zahozením ptá; overlaye = druhý šuplík nad prvním. Kotva ~11vh na desktopu se nemění.