Jeden pravý žlab (F62/F64, 10. 8. 2026). Všechny prvky okna končí na SYSTÉMOVÉM žlabu dialogu --sp-5: ✕ v hlavičce (boxem), Cc/Bcc, pole, tělo psaní i čtení, sbalená hlavička, přílohy, akce nad plátnem (Přegenerovat, Přegenerovat vše) i patička. Výjimka je jen PAPÍR náhledu: plátno mu drží vlastních 28 po obou stranách a chipy slotů startují vlevo na 28 (hrana papíru) — vpravo ale i řádky plátna končí na --sp-5, hraně okna. Žádný prvek si nezavádí vlastní pravý odstup.
Plášť je kanon. Žádný vlastní box — psaní i čtení jedou na <Dialog size="l"> z @acrm/ui, tedy flexi plášť (roste s oknem, strop 1200; na mobilu bottom sheet). Bespoke .mail-scrim/.mail-card ZANIKLY: byla to kopie kanonu, která se od něj rozešla ve všech mírách (z-index 60 místo 80 → mail ležel POD dialogem). Odtud plyne i fokus na panel a zpět, aria-modal a jednotný dok.
Rozměr. Flexi nemá pevnou míru v žádné ose — vyplní okno, drží žlab po obvodu a zastaví se na 1200. Dřívější 640/960/1120 byly mimo žebřík. Pod 720 px se mění na bottom sheet (drží spodní hranu, úchyt s tažením dolů).
Hlavička. Kanonická .acrm-dialog-head: ikona + název vlevo, akční zóna vpravo. U čtení tam sedí kontextové akce (přiřadit k firmě/osobě, připnout na obchod; .on = přiřazeno). Hairline jen pod hlavičkou a nad patičkou — pole i tělo jsou bezrámové (§0).
Pole = kanon .dlg-field. Grid „72px 1fr auto", min-height 38, hodnota holý text .dlg-bare bez rámu; .simple = dva sloupce. STEJNÉ u psaní i čtení — dřív si čtení kreslilo vlastní flex řádek, do kterého se cpal odesílatel, šest akcí, složka a datum, a na telefonu se prvky PŘEKRÝVALY. Avatar je kanonický <Avatar> (outlined), nikdy vylitá plocha s bílou iniciálou.
Gutter 20 px. Vodorovný gutter obsahu (mv-body, mc-fields, mc-atts, mc-err, re-body) je 20 px — off-scale záměrně, mezi --sp-5 (16) a --sp-6 (24); tato karta ho normuje jako zdroj pravdy (ds-ok).
Editor. .re-wrap = toolbar (28px tlačítka .re-tb, oddělovač 1×18) + contentEditable .re-body 14/1.6 s placeholderem přes :empty + data-ph. Odpověď/přeposlání předvyplní citovaný originál s levou linkou.
Přílohy. V compose chip .mc-att 26 px (surface-75, hairline, × pro odebrání); ve view .btn.default s náhledem po kliknutí (FilePreview).
Chybový stav. mailErrorHint překládá SMTP/OAuth/IMAP chyby na srozumitelnou zprávu: box radius-md s hairline, ikona --critical, tučná zpráva + akce + odkaz. Renderuje se nad patičkou (.mc-err) a neblokuje editaci.
Patička je kanonická. .acrm-dialog-foot pro OBOJÍ (dřív si ji psaní kreslilo samo jako pruh v těle). Vlevo zóna .lead: u psaní ghost nástroje .mc-tbtn 30 (příloha · podpis · AI, .on = accent), u čtení Přeposlat. Přepínač „Sledovat" (kanonický .acrm-switch z Inputs — sledování otevření je STAV zprávy, ne nástroj; F19) sedí VPRAVO těsně před košem, popisek nalevo od switche a normal, ne bold (F26, AD 5. 8. 2026); v kompaktu popisek mizí. Vpravo jediný primár — popisek je VŽDY jen „Odeslat" ⌘↵ (resp. Odpovědět): časový údaj ani režim se do popisku nepíší NIKDY (F68), zvolený režim říká IKONA primáru (letadélko = hned · time-duration-15 = s odkladem) a volbu drží caret ▾. Zhaslý primár zhasíná i caret (.mc-sendgrp:has(.mc-send:disabled) .mc-send-more — opacita, ne disabled: způsob odeslání jde měnit i ve chvíli, kdy odeslat ještě nejde); PROČ nejde odeslat říká kanonický DS Tooltip na zhaslém primáru (F67→F78, karta „Components · Tooltip") — obal .acrm-tooltip-wrap kreslí React <Tooltip> (u rozděleného Odeslat týž obal nese i .mc-sendgrp); zhaslý button pointer eventy nedostává (`.mc-send:disabled { pointer-events: none }` je pustí obalu). Nativní title se nepoužívá. Viditelná věta v patičce zrušena, .mc-need je sr-only span jen pro čtečky (aria-describedby). Na telefonu odpadají popisky sekundárních akcí (.mv-lbl), jinak se tři popisky do 390 px nevejdou.
Čtení & AI. HTML pošta se vykresluje v sandboxovaném iframe .mv-frame na bílém plátně (jako klienti), plain-text v .mv-text (pre-wrap, 14/1.7). AI rail .mc-ai (340, surface-75) se připíná vpravo přes .mc-split a píše návrhy do editoru.
Šablonový režim (M1, zadání !1474). Výběr šablony nahradí editor formulářovým railem .mc-tpl 384 (surface-75, border-right — zrcadlo AI railu; AI rail je v tomto režimu skrytý) + náhledem .mc-prev přes zbytek plochy. Pole railu = kanonická anatomie Field (label nad polem, 32px controly, hint pod polem). Nabídka šablon NENÍ vlastní menu — je to kanonický .acrm-popover s .acrm-popover-item (.ic / .tx / .chk), sticky hledáním .mc-tplsearch (až nad ~10 šablonami, kanon DS-USAGE) a prázdným stavem .mc-tplempty. Položky mají role="menuitemradio" a fajfku .chk / .chk.off: bez ní nešlo poznat, která šablona je zapnutá (QA 8. 8. 2026). Fajfku drží i „Bez šablony", když se píše bez šablony. Panel se kotví align="start" — nabídka má dva spouštěče (nástroj v patičce vlevo + hlavička railu) a „end" by ten v patičce vystrčil mimo dialog přes levou navigaci appky. „Bez šablony" převezme aktuálně vygenerované znění do volného editoru (nic se neztrácí), zůstává první položkou a při aktivním hledání se skrývá (je to AKCE, ne výsledek hledání); přepnutí na jinou šablonu zahazuje hodnoty s potvrzením. Kompakt: náhled se skrývá, přepíná <Segmented> Formulář | Náhled; mobil = dva kroky, odeslání až z náhledu.
Sbalená hlavička (F20/F21). V šablonovém režimu se Od / Komu / Předmět sbalí do jednoho 40px řádku .mc-hline „od → komu: předmět"; klepnutí na řádek nebo ikonu ti-layout-navbar-expand rozbalí plnou mřížku. Zpátky ji sbalí ikona ti-layout-navbar-collapse ve TŘETÍM sloupci řádku „Od" (F58, AD 10. 8. 2026) — bez ní po ručním rozbalení nebyla cesta zpět a přepínač jednoho stavu má sedět na jednom místě: vpravo na prvním řádku, v obou polohách. Dvojice ikon je `navbar-*` (hlavička = HORNÍ pruh okna; chevron míří tam, kam se UI pohne), ne dřívější `bottombar-*`. V šablonovém režimu je hlavička sbalená VŽDY (F55, AD 10. 8. 2026) — i bez příjemce (řádek nese „Bez příjemce") — a sbalená i rozbalená stojí NAD rozdělením přes celou šířku okna: obsah (rail | náhled) hierarchicky spadá pod ni. Předmět generuje šablona; ruční zásah po rozbalení přeruší přegenerovávání.
Náhled je read-only 1:1. Server render toutéž cestou jako odeslání, vždy v sandboxovaném iframe (nikdy dangerouslySetInnerHTML). Sloty stojí v PRUHU NAD RÁMEM mailu (.pv-slots), ne v textu: uvnitř dokumentu podbarvit hodnotu nejde — úprava HTML by rozešla náhled s odeslaným mailem a skript z opaque originu nemá jak promluvit ven. Chipy: podbarvená dosazená hodnota (.pv-val) · jantarové nevyplněné pole (.pv-opt, „chybí" / „vynechá se") · mono, co doplní odesílací cesta (.pv-auto — žádné falešné URL); klik na chip fokusuje pole formuláře. Plátno i sloty jsou témovatelné tokeny (F28, AD 5. 8. 2026) — v tmavém režimu náhled ztmavne (je to náš render, ne cizí pošta); odeslaný e-mail odchází vždy světlý a theme se předává iframe přes data-theme. Stavy = kanon DS, neslévat: stavy plátna mají vlastní gutter (.pv-state — skeleton prvního složení, EmptyState „náhled se složí, jakmile bude z čeho", ErrorState s retry); aktualizace = ztlumený text (.mc-prev.is-stale) + inline .pv-busy „Aktualizuji…" (debounce ~400 ms); přegenerování AI úseku izolovaně. Během skládání je Odeslat zhaslé — proč, říká tooltip na primáru (F67).
AI úseky = pruh nad plátnem (M3-B). Jeden řádek na úsek, který píše model (.pv-ai → .pv-ai-sec): ✦ ikona, jméno úseku (.pv-ai-lb), stav a textová akce „Přegenerovat" (.pv-ai-re) VŽDY na konci řádku. Řádek NEUKAZUJE napsaný text — ten je vidět v mailu pod ním, a to je jediné místo, kde ho má smysl číst. Tři stavy úseku: píše (.pv-ai-st + Loader, akce zhaslá — druhý klik by první let jen abortoval) · chyba úseku (.pv-ai-err, NIKDY ErrorState plátna: mail je pořád složený a ostatní úseky v něm jsou) · zatím nenapsáno (.pv-ai-none — je to stav BRANKY: dokud úsek nemá text, drží náhled značku „[doplní AI: …]" a Odeslat je zavřené). „Přegenerovat vše" (.pv-ai-all) jen u víc než jednoho úseku: model se volá hned po výběru šablony, tedy dřív, než obchodník dopíše Poznámku pro AI. Stav je per úsek a zbytek náhledu zůstává OSTRÝ — model píše desítky sekund a ztlumit kvůli jednomu odstavci celý mail by z běžného stavu udělalo výpadek.
Odeslat rozdělené & přílohy šablony. Primár „Odeslat hned" + caret s volbou „s odkladem" (zrušitelné v Pošta → K odeslání); výchozí volbu určuje šablona, poslední volba uživatele se pamatuje — odchází vždy přesně obsah náhledu (AI se ve frontě už negeneruje). Automatické přílohy = čárkovaný mono chip bez ✕ v patě náhledu; vypnout jde jen přepínačem ve formuláři, pokud ho šablona definuje. Ruční přílohy (.mc-att s ✕) se řadí za automatické. Tlačítko šablon v patičce svítí .on, dokud je šablona aktivní.