/* ═══ EliteTrip — the shared parts every staff app uses the same way ═══════════
   One stylesheet, one prefix (.et-), so nothing here can reach the client
   documents Proposals Studio draws in the same page. Decided with Ahmad on
   26 Sep 2026 from the Platform Blueprint: navy #002140, gold, ivory, Hanken
   Grotesk (self-hosted at /fonts/elitetrip-fonts.css), light ground, status
   as word + colour, a number that is never 0 while unknown.

   Load it AFTER the app's own <style>, with a version:  <link rel="stylesheet"
   href="et-ui.css?v=1">  Bump v when this file changes (nginx caches it).

   Parts (§):  1 tokens · 2 figure (four honest states) · 3 status chip ·
   4 save state · 5 buttons · 6 panel + to-do rows · 7 week strip ·
   8 empty / failed · 9 band · 10 table that becomes cards · 11 phone.
   tools/ui-ratchet-check.js keeps every app's own colour / emoji / inline
   style / text-size counts from ever rising again. */

/* ── 1 · tokens ──────────────────────────────────────────────────────────── */
:root{
  --et-ff:'Hanken Grotesk',ui-sans-serif,system-ui,-apple-system,'Segoe UI',sans-serif;
  --et-mono:ui-monospace,Menlo,'Courier New',monospace;
  --et-bg:#FDFAF4; --et-card:#FFFFFF; --et-line:#ECE4D2; --et-line-2:#F3EEE3;
  --et-ink:#0B1A2B; --et-ink-2:#55606E; --et-ink-3:#8A93A0;
  --et-navy:#002140; --et-navy-2:#0E3A63; --et-navy-3:#00162D;
  --et-gold:#C9972B; --et-gold-2:#F0B54F; --et-gold-soft:#F6EBD2; --et-gold-ink:#7A5712;
  /* status: a word AND a colour, never the colour alone. Separate from the brand gold. */
  --et-ok:#1E7A4B; --et-ok-bg:#E4F3EA;
  --et-warn:#A5620A; --et-warn-bg:#FBEFD9;
  --et-bad:#A12E2E; --et-bad-bg:#F8E3E1;
  --et-info:#2A5A8A; --et-info-bg:#E3EDF7;
  --et-neutral:#5B6573; --et-neutral-bg:#EEF0F2;
  /* one type scale */
  --et-t-xs:11px; --et-t-sm:12.5px; --et-t-md:14px; --et-t-lg:16px; --et-t-xl:19px; --et-t-fig:27px;
  /* three corners */
  --et-r-sm:6px; --et-r:12px; --et-r-pill:999px;
  --et-focus:#2F5E8C;
}
.et-tnum{font-variant-numeric:tabular-nums}
.et-ico{width:18px;height:18px;flex:none;display:inline-flex;align-items:center;justify-content:center;font-size:18px;line-height:1}
:where(.et-btn,.et-fig a,.et-panel a,.et-row a):focus-visible{outline:3px solid var(--et-focus);outline-offset:2px;border-radius:var(--et-r-sm)}

/* ── 2 · the number — value / loading / unknown / zero ────────────────────── */
.et-figs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.et-fig{background:var(--et-card);border:1px solid var(--et-line);border-radius:var(--et-r);padding:12px 14px;display:grid;gap:2px;position:relative;font-family:var(--et-ff);color:var(--et-ink);font-variant-numeric:tabular-nums;min-width:0}
.et-fig .k{font-size:var(--et-t-xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--et-ink-2)}
.et-fig .v{font-size:var(--et-t-fig);font-weight:800;letter-spacing:-.03em;line-height:1.15;overflow-wrap:anywhere}
.et-fig .v small{font-size:13px;font-weight:700;color:var(--et-ink-2);margin-inline-end:3px;letter-spacing:0}
.et-fig .s{font-size:12px;color:var(--et-ink-3);display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.et-fig a.drill{font-size:12px;font-weight:700;color:var(--et-navy);text-decoration:none}
.et-fig a.drill:hover{text-decoration:underline}
/* unknown: a dash and the reason, never a zero that looks like an answer */
.et-fig.is-unknown .v{color:var(--et-ink-3)}
.et-fig.is-unknown .s{color:var(--et-bad)}
.et-fig.is-unknown a.drill{color:var(--et-bad)}
/* loading: the shape of a number, not a number */
.et-fig.is-loading .v,.et-fig.is-loading .s{color:transparent;border-radius:var(--et-r-sm);background:linear-gradient(90deg,#EFE9DC 0%,#F7F2E7 50%,#EFE9DC 100%);background-size:200% 100%;animation:et-shim 1.4s linear infinite}
.et-fig.is-loading .v{height:30px;width:70%}
.et-fig.is-loading .s{height:12px;width:50%}
.et-fig.is-loading a{visibility:hidden}
@keyframes et-shim{to{background-position:-200% 0}}
/* zero is a real answer: it says so */
.et-fig.is-zero .v{color:var(--et-ink-2)}

/* ── 3 · status chip — one vocabulary ─────────────────────────────────────── */
.et-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--et-ff);font-size:12px;font-weight:700;padding:3px 9px 3px 8px;border-radius:var(--et-r-pill);white-space:nowrap;line-height:1.3;color:var(--et-neutral);background:var(--et-neutral-bg)}
.et-chip::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex:none}
.et-chip.ok{color:var(--et-ok);background:var(--et-ok-bg)}
.et-chip.warn{color:var(--et-warn);background:var(--et-warn-bg)}
.et-chip.bad{color:var(--et-bad);background:var(--et-bad-bg)}
.et-chip.info{color:var(--et-info);background:var(--et-info-bg)}
.et-chip.neutral{color:var(--et-neutral);background:var(--et-neutral-bg)}
.et-chip.gold{color:var(--et-gold-ink);background:var(--et-gold-soft)}

/* ── 4 · saving says what happened ────────────────────────────────────────── */
.et-save{display:inline-flex;align-items:center;gap:8px;font-family:var(--et-ff);font-size:13px;font-weight:700;padding:6px 10px;border-radius:var(--et-r-sm);color:var(--et-ink-2);background:#F2EEE4}
.et-save.ok{color:var(--et-ok);background:var(--et-ok-bg)}
.et-save.bad{color:var(--et-bad);background:var(--et-bad-bg)}
.et-save .et-btn{margin-inline-start:auto;padding:4px 9px;min-height:0}

/* ── 5 · buttons ──────────────────────────────────────────────────────────── */
.et-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;font-family:var(--et-ff);font-size:var(--et-t-sm);font-weight:700;border-radius:9px;padding:7px 12px;border:1px solid var(--et-line);background:var(--et-card);color:var(--et-ink);cursor:pointer;text-decoration:none;white-space:nowrap;line-height:1.2;transition:background .15s,border-color .15s}
.et-btn:hover{border-color:var(--et-gold);background:#FFFDF8}
.et-btn.primary{background:var(--et-navy);border-color:var(--et-navy);color:#fff}
.et-btn.primary:hover{background:var(--et-navy-2);border-color:var(--et-navy-2)}
.et-btn.gold{background:var(--et-gold);border-color:var(--et-gold);color:#1E1403}
.et-btn.gold:hover{background:var(--et-gold-2);border-color:var(--et-gold-2)}
.et-btn[disabled]{opacity:.5;cursor:not-allowed}

/* ── 6 · panel, and the rows of work inside it ────────────────────────────── */
.et-panel{background:var(--et-card);border:1px solid var(--et-line);border-radius:var(--et-r);overflow:hidden;font-family:var(--et-ff);color:var(--et-ink);min-width:0}
.et-panel-h{display:flex;align-items:center;gap:10px;padding:11px 14px;border-bottom:1px solid var(--et-line)}
.et-panel-h h4{margin:0;font-size:14.5px;font-weight:800;letter-spacing:-.01em;color:var(--et-ink)}
.et-panel-h .count{font-size:12px;font-weight:700;color:var(--et-ink-2)}
.et-panel-h .more{margin-inline-start:auto;font-size:var(--et-t-sm);font-weight:700;color:var(--et-navy);text-decoration:none}
.et-panel-h .more:hover{text-decoration:underline}
.et-todo{display:grid}
.et-row{display:grid;grid-template-columns:4px 30px minmax(0,1fr) auto;gap:12px;align-items:center;padding:11px 14px 11px 0;border-bottom:1px solid var(--et-line);text-decoration:none;color:inherit}
.et-row:last-child{border-bottom:0}
.et-row .stripe{align-self:stretch;border-radius:0 3px 3px 0;background:var(--et-neutral)}
.et-row.bad .stripe{background:var(--et-bad)} .et-row.warn .stripe{background:var(--et-warn)} .et-row.info .stripe{background:var(--et-info)} .et-row.ok .stripe{background:var(--et-ok)}
.et-row .i{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:var(--et-neutral-bg);color:var(--et-neutral)}
.et-row.bad .i{background:var(--et-bad-bg);color:var(--et-bad)} .et-row.warn .i{background:var(--et-warn-bg);color:var(--et-warn)} .et-row.info .i{background:var(--et-info-bg);color:var(--et-info)} .et-row.ok .i{background:var(--et-ok-bg);color:var(--et-ok)}
.et-row .t{font-weight:700;font-size:var(--et-t-md);display:block}
.et-row .d{font-size:var(--et-t-sm);color:var(--et-ink-2);display:block}
.et-row .ref{font-family:var(--et-mono);font-size:11.5px;color:var(--et-ink-3)}
.et-row .et-btn{justify-self:end}

/* ── 7 · the week — seven days, departures and returns ────────────────────── */
.et-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;padding:12px 14px}
.et-day{display:grid;gap:6px;align-content:start;min-width:0}
.et-day .dn{font-size:var(--et-t-xs);font-weight:700;letter-spacing:.08em;color:var(--et-ink-3);text-transform:uppercase}
.et-day .dd{font-size:18px;font-weight:800;line-height:1}
.et-day.today .dd{color:var(--et-gold)}
.et-ev{font-size:11.5px;line-height:1.3;padding:4px 7px;background:#FBF3E0;border-radius:var(--et-r-sm);display:flex;gap:5px;align-items:baseline;text-decoration:none;color:var(--et-ink);overflow:hidden}
.et-ev::before{content:"";flex:none;width:6px;height:6px;border-radius:50%;background:var(--et-gold);transform:translateY(-1px)}
.et-ev.ret{background:#EEF3F9} .et-ev.ret::before{background:var(--et-info)}
.et-ev.pay{background:var(--et-warn-bg)} .et-ev.pay::before{background:var(--et-warn)}
.et-ev span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.et-ev.more{background:transparent;color:var(--et-ink-3);font-weight:700} .et-ev.more::before{display:none}

/* ── 8 · empty, and failed — both say what to do next ─────────────────────── */
.et-empty{border:1.5px dashed var(--et-line);border-radius:var(--et-r);padding:16px;display:grid;gap:8px;justify-items:start;font-family:var(--et-ff);font-size:13px;color:var(--et-ink-2)}
.et-empty b{color:var(--et-ink);font-size:var(--et-t-md)}
.et-err{border:1px solid #EFC9C4;background:var(--et-bad-bg);border-radius:var(--et-r);padding:12px 14px;display:grid;gap:6px;justify-items:start;font-family:var(--et-ff);font-size:13px;color:#6E2020}
.et-err b{color:var(--et-bad)}

/* ── 9 · the band — the only dark surface: figures over navy ──────────────── */
.et-band{background:radial-gradient(120% 140% at 90% 0%,var(--et-navy-2) 0%,var(--et-navy) 55%,var(--et-navy-3) 100%);color:#fff;padding:18px 20px 20px;display:grid;gap:14px;border-radius:var(--et-r);font-family:var(--et-ff)}
.et-band .title{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.et-band .title b{font-size:var(--et-t-xl);font-weight:800;letter-spacing:-.02em}
.et-band .title span{font-size:13px;color:rgba(255,255,255,.62)}
.et-band .title .et-save{margin-inline-start:auto;background:rgba(255,255,255,.08);color:#8FD4AE}
.et-band .title .et-save.bad{color:#FFB4AE}
.et-band .et-fig{background:rgba(255,255,255,.06);border-color:rgba(240,181,79,.22);color:#fff}
.et-band .et-fig .k{color:rgba(255,255,255,.66)}
.et-band .et-fig .v{color:#fff}
.et-band .et-fig .v small{color:var(--et-gold-2)}
.et-band .et-fig .s{color:rgba(255,255,255,.55)}
.et-band .et-fig a.drill{color:var(--et-gold-2)}
.et-band .et-fig.is-unknown .v{color:rgba(255,255,255,.45)}
.et-band .et-fig.is-unknown .s,.et-band .et-fig.is-unknown a.drill{color:#FFB4AE}
.et-band .et-fig.is-loading .v,.et-band .et-fig.is-loading .s{background:linear-gradient(90deg,rgba(255,255,255,.08) 0%,rgba(255,255,255,.16) 50%,rgba(255,255,255,.08) 100%);background-size:200% 100%}

/* ── 10 · a table whose rows become cards on the phone ────────────────────── */
.et-table{width:100%;border-collapse:collapse;font-family:var(--et-ff);font-size:13px;color:var(--et-ink);font-variant-numeric:tabular-nums}
.et-table th{text-align:start;font-size:var(--et-t-xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--et-ink-3);padding:10px 12px;border-bottom:1px solid var(--et-line);background:#FBF8F0}
.et-table td{padding:10px 12px;border-bottom:1px solid var(--et-line);vertical-align:middle}
.et-table tr:last-child td{border-bottom:0}
.et-table tbody tr:hover td{background:#FCF9F2}
.et-table .num{text-align:end;font-weight:700}
.et-table .who b{display:block;font-weight:800}
.et-table .who span{font-size:12px;color:var(--et-ink-3);font-family:var(--et-mono)}
.et-table .next{font-weight:700;color:var(--et-navy)}
.et-pay{height:6px;border-radius:var(--et-r-pill);background:#EEE7D7;overflow:hidden;width:90px}
.et-pay i{display:block;height:100%;background:var(--et-ok)}
.et-tripcard{background:var(--et-card);border:1px solid var(--et-line);border-radius:var(--et-r);padding:12px;display:grid;gap:8px;font-family:var(--et-ff)}
.et-tripcard .kv{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 12px;font-size:var(--et-t-sm)}
.et-tripcard .kv span{color:var(--et-ink-3)} .et-tripcard .kv b{text-align:end}

/* two-column split used by the Hub: work on the left, the week on the right */
.et-split{display:grid;grid-template-columns:1.55fr 1fr;gap:16px;align-items:start}

/* ── 11 · the phone ───────────────────────────────────────────────────────── */
@media screen and (max-width:720px){
  .et-figs{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .et-fig .v{font-size:21px}
  .et-split{grid-template-columns:1fr}
  .et-band{padding:14px 14px 16px;border-radius:0;margin-inline:-14px}
  .et-row{grid-template-columns:4px minmax(0,1fr);padding:10px 12px 10px 0}
  .et-row .i{display:none}
  .et-row .et-btn{grid-column:2;justify-self:start;min-height:44px}
  .et-btn{min-height:44px}
  .et-week{grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;padding:10px}
  .et-ev span{display:none}                       /* the dot stays; the name is in the list below */
  .et-table thead{display:none}
  .et-table,.et-table tbody,.et-table tr,.et-table td{display:block;width:100%}
  .et-table tr{border:1px solid var(--et-line);border-radius:var(--et-r);margin-bottom:10px;background:var(--et-card);padding:6px 0}
  .et-table td{border:0;padding:5px 12px;display:flex;justify-content:space-between;gap:12px}
  .et-table td::before{content:attr(data-label);font-size:var(--et-t-xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--et-ink-3);flex:none}
  .et-table td.who{display:block} .et-table td.who::before{display:none}
  .et-table .num{text-align:end}
}
/* A one-column grid with no template gets an AUTO track, and an auto track is as wide as its widest
   child — so a long name or a six-figure amount pushed the tile's text out of the tile and the whole
   page sideways on a phone (7 Oct 2026). minmax(0,1fr) lets the track shrink and the text wrap. */
.et-fig,.et-todo,.et-band,.et-tripcard,.et-empty,.et-err,.et-field,.et-toast-region,.et-work-list,.et-stack,.et-stage-body,.et-contact-list,.et-calendar-day,.et-kind{grid-template-columns:minmax(0,1fr)}
/* right-to-left pages: the same parts, mirrored */
[dir=rtl] .et-row .stripe{border-radius:3px 0 0 3px}
[dir=rtl] .et-table th,[dir=rtl] .et-table td{text-align:start}
@media (prefers-reduced-motion:reduce){
  .et-fig.is-loading .v,.et-fig.is-loading .s{animation:none}
  .et-btn{transition:none}
}

/* ═══ V2.19.1328 · the parts staff apps were missing: field, page header, modal, toast, tabs, search, save strip, workflow compositions.
   Agreed with Ahmad 16 Oct 2026 from the platform mockups. Names stay .et- prefixed; nothing here touches a bare tag, :root colour or .btn/.chip. ═══ */
/* §12 · Proposed controls. Mockup only; original §1–§11 above are preserved. */
/* --ff stays each app's own :root variable; the parts below read it through --et-ff, which is defined in §1 */
.et-btn{min-height:40px;padding:0 16px;font-size:14px;border-radius:8px;box-sizing:border-box;font-family:var(--et-ff);letter-spacing:0}
.et-btn.sm{min-height:34px;padding:0 12px;font-size:13px}
.et-btn.secondary{background:var(--et-card);color:var(--et-navy)}
.et-btn.destructive{background:var(--et-card);color:var(--et-bad);border-color:var(--et-bad)}
.et-btn.icon-only{inline-size:40px;padding:0;flex:none}
.et-btn.icon-only.sm{inline-size:34px}
.et-btn:hover:not(:disabled){background:var(--et-gold-soft);border-color:var(--et-gold)}
.et-btn.primary:hover:not(:disabled){background:var(--et-navy-2);border-color:var(--et-navy-2)}
.et-btn.gold:hover:not(:disabled){background:var(--et-gold-2)}
.et-btn.destructive:hover:not(:disabled){background:var(--et-bad-bg);border-color:var(--et-bad)}
.et-btn:focus-visible,.et-control:focus-visible,.et-search:focus-within,.et-tab:focus-visible{outline:3px solid var(--et-focus);outline-offset:3px}
.et-btn:disabled{opacity:.5;cursor:not-allowed}
.et-btn[aria-busy=true]{opacity:1;cursor:wait}
.et-spinner{display:inline-block;inline-size:14px;block-size:14px;border:2px solid currentColor;border-inline-end-color:transparent;border-radius:50%;animation:et-turn .8s linear infinite;flex:none}
@keyframes et-turn{to{transform:rotate(360deg)}}
.et-chip{font-size:12px;min-block-size:24px;box-sizing:border-box}
.et-chip .ti{font-size:15px}
.et-save-strip{display:flex;align-items:center;gap:10px;padding:12px 16px;border:1px solid var(--et-line);border-radius:8px;background:var(--et-card);font:600 13px var(--et-ff);color:var(--et-ink-2);flex-wrap:wrap;margin-block:16px}
.et-save-strip[data-state=unsaved]{background:var(--et-warn-bg);color:var(--et-warn)}
.et-save-strip[data-state=saved]{background:var(--et-ok-bg);color:var(--et-ok)}
.et-save-strip[data-state=failed]{background:var(--et-bad-bg);color:var(--et-bad)}
.et-save-strip .et-btn{margin-inline-start:auto}
.et-field{display:grid;gap:6px;min-inline-size:0}
.et-label{font:600 13px var(--et-ff);color:var(--et-ink)}
.et-control{font:400 14px var(--et-ff);min-height:40px;inline-size:100%;padding:9px 12px;box-sizing:border-box;background:var(--et-card);color:var(--et-ink);border:1px solid var(--et-line);border-radius:8px;min-inline-size:0}
.et-control:not(textarea):not([multiple]){block-size:40px;line-height:1.2}
.et-control:hover{border-color:var(--et-gold)}
.et-control[aria-invalid=true]{border-color:var(--et-bad)}
.et-control:disabled{background:var(--et-neutral-bg);color:var(--et-neutral)}
.et-control[readonly]{background:var(--et-bg)}
.et-help,.et-field-error{margin:0;font:400 12.5px/1.5 var(--et-ff);color:var(--et-ink-2)}
.et-field-error{color:var(--et-bad);font-weight:600}
.et-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 20px}
.et-full{grid-column:1/-1}
.et-check{display:flex;align-items:center;gap:9px;font-size:14px;min-height:40px}
.et-check input{inline-size:18px;block-size:18px;accent-color:var(--et-navy)}
.et-page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;flex-wrap:wrap;margin-block-end:24px}
.et-page-heading{min-inline-size:0;flex:1 1 200px}
.et-page-eyebrow{font-size:12px;color:var(--et-gold-ink);font-weight:700;margin-block-end:6px}
.et-page-title{font-size:28px;line-height:1.2;font-weight:700;color:var(--et-navy);margin:0;letter-spacing:-.02em}
.et-page-meta{font-size:14px;color:var(--et-ink-2);margin-block:8px 0;line-height:1.5}
.et-page-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
dialog.et-modal{padding:0;border:1px solid var(--et-line);border-radius:12px;inline-size:min(640px,calc(100vw - 32px));max-block-size:calc(100dvh - 32px);box-sizing:border-box;background:var(--et-card);color:var(--et-ink);font:14px var(--et-ff);margin:auto;overflow:auto;box-shadow:0 20px 60px rgba(0,33,64,.18)}
dialog.et-modal::backdrop{background:rgba(0,33,64,.4)}
.et-modal-head{padding:22px 24px 18px;border-block-end:1px solid var(--et-line);display:flex;align-items:center;justify-content:space-between;gap:12px}
.et-modal-title{font-size:22px;color:var(--et-navy);margin:0;line-height:1.2}
.et-modal-body{padding:24px}
.et-modal-foot{padding:16px 24px;border-block-start:1px solid var(--et-line);display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}
.et-modal-description{margin:0 0 20px;color:var(--et-ink-2);font-size:14px;line-height:1.5}
.et-toast-region{display:grid;gap:10px}
.et-toast{display:flex;gap:10px;align-items:center;padding:12px 16px;border:1px solid var(--et-line);border-inline-start:4px solid var(--et-info);border-radius:8px;background:var(--et-card);color:var(--et-ink);font:14px/1.5 var(--et-ff)}
.et-toast[data-tone=success]{border-inline-start-color:var(--et-ok)}
.et-toast[data-tone=error]{border-inline-start-color:var(--et-bad)}
.et-toast-message{flex:1;min-inline-size:0}
.et-table-row:hover td{background:var(--et-gold-soft)}
.et-table-row:focus-within{outline:2px solid var(--et-focus);outline-offset:-2px}
.et-tabs{display:flex;gap:24px;border-block-end:1px solid var(--et-line);overflow-x:auto;margin-block-end:20px}
.et-tab{border:0;border-block-end:3px solid transparent;border-radius:0;background:transparent;color:var(--et-ink-2);min-height:44px;padding:10px 0;font:600 14px var(--et-ff);white-space:nowrap;cursor:pointer;text-decoration:none}
.et-tab[aria-selected=true],.et-tab[aria-current=page]{border-block-end-color:var(--et-gold);color:var(--et-navy)}
.et-tab:disabled{opacity:.5;cursor:not-allowed}
.et-search{display:flex;align-items:center;gap:10px;padding-inline:12px;background:var(--et-card);border:1px solid var(--et-line);border-radius:8px;min-inline-size:0;flex:1}
.et-search input{border:0;background:transparent;min-inline-size:0;inline-size:100%;font:14px var(--et-ff);min-height:40px;color:var(--et-ink);outline:none}
.et-search .ti{color:var(--et-ink-2);font-size:18px}
.et-loading{padding:24px;border:1px solid var(--et-line);border-radius:12px;background:var(--et-card);color:var(--et-ink-2);display:flex;gap:12px;align-items:center}

/* §13 · Workflow compositions used by Batch 2. No app-specific token roots. */
.et-work-list{display:grid;gap:14px}
.et-work-card{padding:20px;border:1px solid var(--et-line);border-inline-start:4px solid var(--et-info);border-radius:10px;background:var(--et-card);text-align:start;color:var(--et-ink);font:14px/1.5 var(--et-ff);display:block;inline-size:100%;cursor:pointer;text-decoration:none}
.et-work-card.late{border-inline-start-color:var(--et-bad)}
.et-work-card h2{font-size:18px;line-height:1.4;margin:6px 0;color:var(--et-navy)}
.et-work-card p{font-size:15px;margin:6px 0 12px;color:var(--et-ink-2)}
.et-work-card:focus-visible{outline:3px solid var(--et-focus);outline-offset:3px}
.et-work-when{font-size:13px;font-weight:600;color:var(--et-bad)}
.et-wrap{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.et-stack{display:grid;gap:16px}.et-stack>p{margin:0}
.et-summary-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-block:16px}
.et-summary-box{padding:14px;background:var(--et-card);border:1px solid var(--et-line);border-radius:10px}
.et-summary-box strong{display:block;font-size:22px;color:var(--et-navy);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.et-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.et-stage{border-block-start:1px solid var(--et-line)}
.et-stage>summary{display:flex;align-items:center;gap:12px;padding:16px;cursor:pointer;font-size:14px;font-weight:700;color:var(--et-navy);list-style:none;min-height:52px}
.et-stage>summary::before{content:'+';font-size:20px;color:var(--et-gold-ink)}
.et-stage[open]>summary::before{content:'−'}
.et-stage-body{padding:0 20px 20px;display:grid;gap:14px}
.et-booking-head{padding:16px 20px;background:var(--et-navy);color:white;display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap}
.et-booking-head h2{margin:0;font-size:17px;color:white}.et-booking-head p{margin:4px 0 0;color:var(--et-gold-2);font-size:13px}
.et-booking-head .et-btn.secondary{background:transparent;color:white;border-color:var(--et-line)}
.et-booking-head .et-btn.destructive{background:var(--et-bad);color:white;border-color:var(--et-bad)}
.et-destination-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}
.et-destination-card{overflow:hidden;border:1px solid var(--et-line);border-radius:10px;background:var(--et-card)}
.et-destination-hero{block-size:90px;background:var(--et-navy);display:flex;align-items:center;justify-content:center;color:var(--et-gold-2);font-size:36px;position:relative}
.et-destination-hero .et-chip{position:absolute;inset-block-start:8px;inset-inline-end:8px}
.et-destination-body{padding:14px 16px}.et-destination-body h2{font-size:18px;margin:0;color:var(--et-navy)}
.et-destination-body p{margin:4px 0 12px;color:var(--et-ink-2)}
.et-destination-foot{padding:12px 16px;border-block-start:1px solid var(--et-line);display:flex;gap:8px;flex-wrap:wrap}
.et-country-group{margin-block:20px}.et-country-group>summary{font-size:18px;font-weight:700;cursor:pointer;min-height:44px;color:var(--et-navy)}
.et-info-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}
.et-info-card{padding:18px;border:1px solid var(--et-line);border-radius:10px;background:var(--et-card)}
.et-info-card h3{font-size:14px;margin:8px 0}.et-info-card p{font-size:14px;color:var(--et-ink-2)}
.et-dense-scroll{overflow:auto;border:1px solid var(--et-line);border-radius:10px;background:var(--et-card)}
.et-dense-table{border-collapse:collapse;inline-size:100%;min-inline-size:920px;font:13px/1.5 var(--et-ff);font-variant-numeric:tabular-nums}
.et-dense-table th{padding:10px 12px;text-align:start;font-size:12px;color:var(--et-ink-2);background:var(--et-bg);border-block-end:1px solid var(--et-line);white-space:nowrap}
.et-dense-table td{padding:10px 12px;border-block-end:1px solid var(--et-line);vertical-align:top}
.et-dense-table tr:hover td{background:var(--et-gold-soft)}
.et-dense-table .num{text-align:end;white-space:nowrap}
.et-dense-table small{display:block;color:var(--et-ink-2);font-size:12px}
.et-dense-table .et-wrap{flex-wrap:nowrap}.et-dense-table .et-btn{white-space:nowrap}
.et-control[multiple]{block-size:112px}.et-control[type=file]{block-size:auto;min-block-size:44px}
.et-inline-note{padding:12px 14px;border:1px solid var(--et-line);border-radius:8px;background:var(--et-bg);color:var(--et-ink-2);font-size:13px}
.et-tabs{scroll-padding-inline:8px}.et-tabs .et-tab{flex:none}
@media screen and (max-width:768px){.et-detail-grid{grid-template-columns:minmax(0,1fr)}.et-stage-body{padding-inline:16px}.et-booking-head{padding:16px}.et-destination-grid{grid-template-columns:minmax(0,1fr)}.et-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.et-dense-table{min-inline-size:920px}}

/* §14 · Calendar, directory types, split editor, PIN and file control. */
.et-summary-grid{grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}
.et-summary-box strong{font-size:20px;white-space:nowrap;overflow-wrap:normal;font-variant-numeric:tabular-nums}
.et-band .et-fig .v{white-space:nowrap;overflow-wrap:normal;font-size:clamp(16px,1.7vw,24px)}
.et-file{display:flex;gap:12px;flex-wrap:wrap;align-items:center;position:relative;min-inline-size:0}
.et-file-input{position:absolute;inline-size:1px;block-size:1px;opacity:0;overflow:hidden}
.et-file:focus-within .et-btn{outline:3px solid var(--et-focus);outline-offset:3px}
.et-file-name{font-size:13px;color:var(--et-ink-2);overflow-wrap:anywhere}
.et-file:has(input:disabled) .et-btn{opacity:.5;pointer-events:none}
.et-control[type=file]{padding:0;border:0;background:transparent;font-size:13px;max-inline-size:100%}
.et-control[type=file]::file-selector-button{font:700 14px var(--et-ff);color:var(--et-navy);background:var(--et-card);border:1px solid var(--et-line);border-radius:8px;min-height:40px;padding:0 16px;margin-inline-end:12px;cursor:pointer}
.et-control[type=file]::file-selector-button:hover{background:var(--et-gold-soft);border-color:var(--et-gold)}
.et-control[type=file]::-webkit-file-upload-button{font:700 14px var(--et-ff);color:var(--et-navy);background:var(--et-card);border:1px solid var(--et-line);border-radius:8px;min-height:40px;padding:0 16px;margin-inline-end:12px;cursor:pointer}
.et-layout-split{display:grid;grid-template-columns:300px minmax(0,1fr);gap:20px;align-items:start}
.et-editor-split{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(280px,1fr);gap:20px;align-items:start}
.et-side-list{border:1px solid var(--et-line);border-radius:10px;background:var(--et-card);overflow:hidden}
.et-side-list a{display:block;padding:16px;border-block-end:1px solid var(--et-line);text-decoration:none}
.et-side-list a[aria-current=page]{background:var(--et-gold-soft);border-inline-start:3px solid var(--et-gold)}
.et-side-list strong,.et-side-list small{display:block}
.et-side-list small{color:var(--et-ink-2);font-size:13px;margin-block-start:4px}
.et-type-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:6px;font:600 12px var(--et-ff);background:var(--et-gold-soft);color:var(--et-gold-ink)}
.et-type-badge[data-type=DMC],.et-type-badge[data-type=AccountManager]{color:var(--et-info);background:var(--et-info-bg)}
.et-type-badge[data-type=Emergency]{color:var(--et-bad);background:var(--et-bad-bg)}
.et-partner-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}
.et-partner-card{border:1px solid var(--et-line);border-radius:12px;background:var(--et-card);overflow:hidden;min-inline-size:0}
.et-partner-header{padding:16px;display:flex;align-items:center;gap:12px;border-block-end:1px solid var(--et-line)}
.et-partner-header h2{font-size:17px;margin:0 0 6px;color:var(--et-navy)}
.et-contact-list{padding:14px 16px;display:grid;gap:9px;font-size:14px;overflow-wrap:anywhere}
.et-contact-list>div{display:flex;gap:9px;align-items:baseline}
.et-calendar{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;min-inline-size:0}
.et-calendar .et-calendar-dow{font-size:12px;color:var(--et-ink-2);text-align:center;padding:8px 0}
.et-calendar-day{min-height:62px;border:1px solid var(--et-line);background:var(--et-card);font:14px var(--et-ff);color:var(--et-navy);border-radius:6px;padding:8px;display:grid;align-content:start;gap:6px;text-align:start;cursor:pointer}
.et-calendar-day.has{border-color:var(--et-gold);background:var(--et-gold-soft)}
.et-calendar-day:focus-visible{outline:3px solid var(--et-focus);outline-offset:1px}
.et-calendar-dot{inline-size:6px;block-size:6px;border-radius:50%;background:var(--et-info)}
.et-pin-card{max-inline-size:410px;margin:24px auto;padding:28px;background:var(--et-card);border:1px solid var(--et-line);border-radius:12px;text-align:center}
.et-pin-dots{display:flex;gap:10px;justify-content:center;margin-block:20px}
.et-pin-dot{inline-size:14px;block-size:14px;border:1px solid var(--et-line);border-radius:50%;background:var(--et-neutral-bg)}
.et-pin-dot.filled{background:var(--et-navy);border-color:var(--et-navy)}
.et-pin-pad{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;max-inline-size:250px;margin-inline:auto}
.et-pin-pad .et-btn{min-height:52px;font-size:18px}
.et-kinds{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:8px;margin-block:16px}
.et-kind{min-height:72px;white-space:normal;display:grid;gap:4px;text-align:center;padding:10px 8px}
.et-kind .ti{font-size:22px}.et-kind[aria-pressed=true]{background:var(--et-gold-soft);border-color:var(--et-gold);color:var(--et-navy)}
.et-pay-person{display:grid;grid-template-columns:minmax(140px,1fr) 1.5fr minmax(110px,.7fr) minmax(160px,1fr);gap:18px;padding:20px;background:var(--et-card);border:1px solid var(--et-line);border-radius:10px;align-items:start}
.et-pay-person h3{margin:0 0 6px;font-size:16px;color:var(--et-navy)}
.et-pay-person .et-fields{gap:10px}.et-pay-person .et-label{font-size:12px}
.et-pay-person strong{white-space:nowrap;font-variant-numeric:tabular-nums}
@media screen and (max-width:768px){.et-summary-grid{grid-template-columns:minmax(0,1fr)}.et-summary-box strong{font-size:20px}.et-layout-split,.et-editor-split{grid-template-columns:minmax(0,1fr)}.et-partner-grid{grid-template-columns:minmax(0,1fr)}.et-calendar-day{min-height:50px;padding:6px}.et-pay-person{grid-template-columns:minmax(0,1fr)}.et-control[type=file]::file-selector-button{min-height:44px}.et-control[type=file]::-webkit-file-upload-button{min-height:44px}}

/* §15 · THE PHONE, one rule set (V2.19.1328, 16 Oct 2026 — Ahmad: "on mobile it is a mess"; Codex phone review + a 375px browser audit).
   ≤768px: 44px targets, 16px inputs (iOS does not zoom), one-column forms, stacked page head, scrolling underline tabs,
   and an edit dialog that is a FULL-HEIGHT SHEET whose body alone scrolls — its Save/Cancel row is always on screen.
   Last in the file on purpose: it must beat the desktop sizes of §12–§14 above. Only .et- classes; no bare tag, no :root, no .btn/.chip. */
@media screen and (max-width:768px){
  .et-btn,.et-btn.sm,.et-btn.icon-only,.et-btn.icon-only.sm{min-block-size:44px;min-inline-size:44px}
  .et-btn.icon-only,.et-btn.icon-only.sm{inline-size:44px}
  .et-btn{max-inline-size:100%;white-space:normal;text-align:center;overflow-wrap:anywhere}
  .et-control,.et-search input{min-block-size:44px;font-size:16px}
  .et-control:not(textarea):not([multiple]){block-size:44px}
  .et-fields,.et-detail-grid{grid-template-columns:minmax(0,1fr)}
  .et-check{min-block-size:44px}
  .et-check input{flex:none;inline-size:20px;block-size:20px}
  .et-page-head{display:grid;grid-template-columns:minmax(0,1fr);gap:16px}
  .et-page-title{font-size:24px}
  .et-page-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .et-page-actions>.is-main{grid-column:1/-1}
  .et-page-actions .et-btn{min-inline-size:0;white-space:normal;overflow-wrap:anywhere;padding:10px 12px}
  .et-tabs{gap:16px;min-inline-size:0;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .et-tab{flex:none;min-inline-size:44px}
  dialog.et-modal[open]{position:fixed;inset:0;margin:0;inline-size:100%;max-inline-size:none;block-size:100vh;block-size:100dvh;max-block-size:none;border:0;border-radius:0;box-shadow:none}
  dialog.et-modal[open]{overflow:hidden;display:flex;flex-direction:column}
  dialog.et-modal[open]>.et-modal-body{flex:1;min-block-size:0}
  dialog.et-modal>form{flex:1;min-block-size:0;display:grid;grid-template-rows:auto minmax(0,1fr) auto}
  .et-modal-head{padding:16px}
  .et-modal-title{min-inline-size:0;overflow-wrap:anywhere;font-size:20px}
  .et-modal-body{overflow:auto;min-block-size:0;padding:16px;-webkit-overflow-scrolling:touch}
  .et-modal-foot{padding:12px 16px calc(12px + env(safe-area-inset-bottom,0px));display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .et-modal-foot .et-btn{min-inline-size:0;white-space:normal;padding:10px 12px}
  .et-ev{min-block-size:44px;min-inline-size:44px;justify-content:center;align-items:center;box-sizing:border-box}   /* the week-strip dot is a link: a 44px target */
  .et-pay-person{grid-template-columns:minmax(0,1fr)}
  .et-summary-box strong,.et-pay-person strong{white-space:normal;overflow-wrap:anywhere}
}
