/* Dunamis Reports — Boardroom Instrument
   cloud ledger · Atlantic controls · precise executive typography

   Token contract (see web/theme.md):
   - Every color/font/radius used anywhere in this file MUST be a var(--…) reference.
   - The only exception is the <select> background-image data: URI below (CSS custom
     properties cannot be interpolated inside a data: URI) — allowlisted in tests/test_theme_tokens.py.
   - Per-company overrides live in :root[data-company="<slug>"] blocks further down.
     No override for a slug -> falls back to the default theme below. */
:root{
  /* ---- default theme: Dunamis Mail ----
     matches the client email templates in server.py: ivory canvas (#F7F8F4),
     navy ink (#10213B), deep teal (#228370) as the readable interactive accent,
     mint (#56D8B8) reserved for CTA fills with deep-forest (#071C17) text, and
     the illustration set (sky/orange/purple/green) for charts. */
  --paper:#F7F8F4; --card:#FFFFFF; --card-2:#EFF2ED;
  --ink:#10213B; --ink-2:#47536B; --ink-3:#667085; --ink-3-on-paper:#667085;
  --line:#DCE3DE; --line-2:#C8D2CB;
  --ever:#228370; --ever-dark:#56D8B8; --ever-deep:#071C17; --ever-mid:#123B31; --ever-soft:#E2F7F0;
  --brass:#484B67; --brass-soft:#EEF0F4; --brass-line:#D3D5DE;
  --pos:#3E7A28; --pos-soft:#E7F3DC;
  --neg:#CE3B3B; --neg-soft:#FBE9E7;
  --warn:#A5700F; --warn-soft:#FBF1DA;
  --info-soft:#E8F1F8;
  --d1:#6FA243; --d2:#4CA3DA; --d3:#7B4EA3; --d4:#F1953A;
  /* Performance chart: color encodes the role in the P&L, not whether a value is large. */
  --metric-revenue:#5F9E3D; --metric-job-cost:#C7832E; --metric-overhead:#5B7897;

  /* CTA pair: bright fathom-teal fill with very-dark-green text */
  --cta:#56D8B8; --cta-hover:#43C6A6; --on-cta:#071C17;

  /* the brand thread: gradient endpoints (dark green -> fathom teal) */
  --gold-1:#071C17; --gold-2:#56D8B8; --silver-1:#484B67; --silver-2:#D3D5DE;
  --dunamis-deep:#071C17; --dunamis-forest:#0F3A2F; --dunamis-mint:#56D8B8;
  --dunamis-champagne:#CBBF9C; --dunamis-ivory:#F7F8F4;

  /* accent serif: the Instrument-Serif-style annotation voice from the site */
  --accent-serif:Georgia,'Times New Roman','Palatino Linotype',Palatino,serif;

  /* money-flow (Sankey): soft Fathom-report fills with a fixed dark ink */
  --flow-rev:#9CCB70; --flow-cogs:#C9D2DB; --flow-opex:#F4C77C; --flow-net:#7FD0A0; --flow-ink:#132018;

  /* text/accents on dark surfaces (login, tooltips, toasts, terminal log) */
  --on-dark-strong:#FFFFFF; --on-dark:#F7FAFB; --on-dark-2:#C6D4CE; --on-dark-muted:#8FA69D;
  --brand-gold:#56D8B8; --brand-gold-ink:#071C17;
  --tooltip-bg:#10213B; --tooltip-text:#F7FAFB;
  --toast-err-bg:#6B2320;
  --terminal-text:#7BE0C4;
  --selection-bg:#CFF5EA;

  /* WhatsApp is an external brand color, not part of the Dunamis/client identity —
     it stays fixed across every company theme. */
  --wa-grad-1:#0B7A50; --wa-grad-2:#0F9663; --wa-bg:#E9F5EC; --wa-msg-border:#D3EBDD; --wa-text:#1E3A2E;

  --r:0px; --r-sm:0px;
  /* UIX-2: radius scale for the dominant literal values found across the sheet.
     --r/--r-sm above are untouched; these are new, separate tokens. */
  --r-round:50%; --r-pill:999px; --r-14:14px; --r-12:12px; --r-9:9px; --r-8:8px;
  --display:-apple-system,BlinkMacSystemFont,'Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;
  --body:-apple-system,BlinkMacSystemFont,'Helvetica Neue','Segoe UI',Helvetica,Arial,sans-serif;
  --num:'SF Pro Display','Segoe UI',Inter,ui-sans-serif,sans-serif;
  --shadow:0 4px 8px rgba(16,33,59,.04);
  --shadow-float:0 10px 30px -18px rgba(16,33,59,.18),inset 0 1px rgba(255,255,255,.7);
  --glass-bg:rgba(255,255,255,.88); --glass-border:rgba(16,33,59,.08);
  --glass-highlight:rgba(255,255,255,.96); --glass-shadow:rgba(16,33,59,.12);
  --focus:#228370;
  --on-accent:#F7FAFB; --on-negative:#F7FAFB; --on-warning:#F7FAFB;
  --theme-meta:#F7F8F4;
  --preview-light-bg:#F9F9F7;--preview-light-card:#FFFFFF;--preview-light-pos:#E7F3DC;
  --preview-dark-bg:#071C17;--preview-dark-card:#10231D;--preview-dark-accent:#56D8B8;--preview-dark-pos:#70D789;
  --preview-contrast-bg:#071C17;--preview-contrast-card:#10231D;

  /* ---- semantic aliases: target THESE from new code, not the raw tokens above.
     They're what a future per-company override block should redefine. ---- */
  --brand-primary:var(--ever-deep); --brand-accent:var(--ever);
  --accent-soft:var(--ever-soft);
  --surface:var(--card); --surface-alt:var(--card-2); --surface-page:var(--paper);
  --text:var(--ink); --text-muted:var(--ink-3);
  --positive:var(--pos); --negative:var(--neg); --warning:var(--warn);
  --chart-1:var(--d1); --chart-2:var(--d2); --chart-3:var(--d3); --chart-4:var(--d4);
}

/* Confirmation review ledger: one full-width, decision-first surface. */
.confirmation-tracking-shell{display:block;min-width:0}
.tracking-batch-rail{position:static;display:flex;align-items:stretch;overflow-x:auto;border-right:0;border-bottom:1px solid var(--line)}
.tracking-batch-rail>header{flex:0 0 150px;border-right:1px solid var(--line)}
.tracking-batch-choice{flex:0 0 225px;width:auto;border-right:1px solid var(--line);border-bottom:0}
.tracking-batch-choice.on{box-shadow:inset 0 -4px 0 var(--brand-accent)}
.tracking-ledger{padding:18px clamp(12px,1.5vw,24px)}
.tracking-review-bar{position:sticky;top:68px;z-index:7;display:flex;align-items:center;gap:16px;min-height:48px;padding:8px 12px;border:1px solid var(--line);border-bottom:0;background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:blur(10px)}
.tracking-review-bar label{display:flex;align-items:center;gap:8px;margin-right:auto;font-size:11px;font-weight:750}.tracking-review-bar input,.tracking-select-cell input{width:17px;height:17px;min-height:0;padding:0;accent-color:var(--brand-accent)}
.tracking-review-bar>strong{color:var(--brand-accent);font-size:11px}
.tracking-table-wrap{max-height:calc(100vh - 275px);overflow:auto;border:1px solid var(--line);isolation:isolate}
.tracking-table-wrap table{min-width:1080px;table-layout:fixed}
.tracking-table-wrap th{top:0;z-index:3;padding:11px 8px}
.tracking-table-wrap td{padding:11px 8px;overflow-wrap:anywhere}
.track-col-select{width:42px}.track-col-transaction{width:16%}.track-col-answer{width:14%}.track-col-receipts{width:9%}.track-col-category{width:15%}.track-col-project{width:15%}.track-col-vendor{width:14%}.track-col-amount{width:8%}.track-col-decision{width:105px}
.tracking-select-cell{text-align:center}.tracking-batch-tag{color:var(--text-muted);font:800 10px/1 var(--num)}
.tracking-needs{margin-top:7px}.tracking-receipts{display:grid;gap:5px}.tracking-receipts a{display:block;overflow:hidden;color:var(--brand-accent);font-weight:750;text-overflow:ellipsis;white-space:nowrap;text-decoration:underline;text-underline-offset:3px}.tracking-receipts>span{color:var(--text-muted)}
.tracking-edit-cell select,.tracking-edit-cell input{width:100%;min-height:36px;padding:7px 8px;border:1px solid var(--line-2);background:var(--surface);font-size:11px}.tracking-edit-cell .qbo-combobox{min-width:0}.tracking-edit-cell small{font-size:9px}
.tracking-decision .btn{width:100%;margin-top:8px}.tracking-pagination{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 12px;border:1px solid var(--line);border-top:0;background:var(--surface-alt);color:var(--text-muted);font-size:11px}.tracking-pagination label,.tracking-pagination div{display:flex;align-items:center;gap:8px}.tracking-pagination select{min-height:32px;padding:4px 24px 4px 8px}
.tracking-detail-drawer{position:relative;margin:16px 0 0;padding:14px;border:1px solid var(--line);border-top:4px solid var(--brand-accent);background:var(--surface-alt)}.tracking-detail-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.tracking-detail-head>div{display:grid;gap:3px}.tracking-detail-head span{color:var(--brand-accent);font-size:9px;font-weight:850;letter-spacing:.12em;text-transform:uppercase}.tracking-detail-drawer .confirmation-return-card{max-width:none}.tracking-detail-drawer .confirmation-return-actions{position:sticky;bottom:0;background:var(--surface)}
@media(max-width:760px){.tracking-review-bar{position:static;flex-wrap:wrap}.tracking-review-bar label{flex-basis:100%}.tracking-table-wrap{max-height:none;overflow:visible}.tracking-pagination{flex-wrap:wrap}.tracking-table-wrap table{min-width:0}.tracking-select-cell{grid-template-columns:112px minmax(0,1fr)!important;text-align:left}.tracking-receipts{display:grid!important}.tracking-batch-rail>header{flex-basis:130px}.tracking-batch-choice{flex-basis:190px}}

/* DUN-2009 — confirmations operations. The stage rail is deliberately
   compact: one client remains the context while the canvas carries the
   current decision. */
.confirmations-workspace{padding:0}
.confirmations-loading{min-height:360px;display:grid;place-items:center;color:var(--text-muted);font-weight:700}
.confirmations-desk{display:grid;grid-template-columns:208px minmax(0,1fr);min-height:clamp(720px,calc(100dvh - 250px),980px);border:1px solid var(--line);background:var(--surface)}
.confirmations-stage-rail{padding:22px 14px;border-right:1px solid var(--line);background:var(--surface-alt)}
.confirmations-stage-rail button{width:100%;min-height:52px;display:grid;grid-template-columns:32px 1fr auto;align-items:center;gap:10px;padding:10px 12px;border:0;border-left:3px solid transparent;background:transparent;color:var(--text-muted);text-align:left;font:700 14px/1.2 var(--body);cursor:pointer}
.confirmations-stage-rail button i{font:700 10px/1 var(--body);letter-spacing:.08em;color:var(--brand-accent);font-style:normal}
.confirmations-stage-rail button.on{border-left-color:var(--brand-accent);background:var(--surface);color:var(--text)}
.confirmations-stage-rail button:hover{background:var(--surface)}
.confirmations-canvas{min-width:0;padding:34px clamp(22px,2vw,34px) 48px}
.confirmations-intro,.confirmation-pane-body>header{margin-bottom:24px}
.confirmations-intro>span,.confirmation-pane-body>header>span,.confirmation-next span,.confirmation-card-head span{display:block;margin-bottom:7px;color:var(--brand-accent);font:800 11px/1.2 var(--body);letter-spacing:.14em;text-transform:uppercase}
.confirmations-intro h2,.confirmation-pane-body>header h2{margin:0 0 8px;color:var(--text);font:800 clamp(28px,3vw,42px)/1.05 var(--display)}
.confirmations-intro p,.confirmation-pane-body>header p{max-width:760px;margin:0;color:var(--text-muted);font-size:16px}
.confirmation-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border:1px solid var(--line);margin-bottom:20px}
.confirmation-metric{min-width:0;padding:18px 20px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
.confirmation-metric:nth-child(3n){border-right:0}.confirmation-metric:nth-child(n+4){border-bottom:0}
.confirmation-metric span{display:block;color:var(--text-muted);font:750 11px/1.2 var(--body);letter-spacing:.08em;text-transform:uppercase}
.confirmation-metric strong{display:block;margin-top:7px;color:var(--text);font:800 30px/1 var(--display)}
.confirmation-metric.good strong{color:var(--positive)}.confirmation-metric.warn strong{color:var(--warning)}
.confirmation-next{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:22px 24px;border-left:4px solid var(--brand-accent);background:var(--ever-soft)}
.confirmation-next h3{margin:0 0 5px;font-size:22px}.confirmation-next p{max-width:640px;margin:0;color:var(--text-muted)}
.confirmation-pane-body{width:100%;max-width:none}
.confirmation-split{display:grid;grid-template-columns:minmax(380px,.9fr) minmax(460px,1.1fr);gap:22px}
.confirmation-card{padding:26px;border:1px solid var(--line);background:var(--surface)}
.confirmation-card h3{margin:0 0 14px;font-size:18px}
.confirmation-card label,.confirmation-rule-form label,.confirmation-return-card label{display:grid;gap:6px;color:var(--text-muted);font:700 11px/1.2 var(--body);letter-spacing:.06em;text-transform:uppercase}
.confirmation-card input,.confirmation-card select,.confirmation-rule-form input,.confirmation-rule-form select,.confirmation-return-card input,.confirmation-return-card textarea,.confirmation-toolbar input,.confirmation-toolbar select,.posting-row input{width:100%;min-height:50px;padding:11px 13px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:600 15px/1.3 var(--body);text-transform:none;letter-spacing:normal}
.confirmation-account-create{margin-top:14px;border-top:1px solid var(--line);padding-top:12px}
.confirmation-account-create summary{cursor:pointer;color:var(--brand-accent);font-weight:800}
.confirmation-account-create form{display:grid;grid-template-columns:1.35fr 1fr .65fr;align-items:end;gap:12px;margin-top:14px}
.confirmation-account-create form .btn{grid-column:1/-1;justify-self:start;min-width:170px}
.confirmation-dropzone{position:relative;min-height:210px;place-content:center;text-align:center;border:1px dashed var(--line-2);background:var(--surface-alt);cursor:pointer;transition:border-color .16s ease,background .16s ease,box-shadow .16s ease}
.confirmation-dropzone input{position:absolute;inline-size:1px;block-size:1px;opacity:0}
.confirmation-dropzone span{color:var(--brand-accent);font-size:18px}.confirmation-dropzone small{font-size:12px;letter-spacing:0;text-transform:none}
.confirmation-dropzone.is-dragging,.confirmation-dropzone:focus-within{border-color:var(--brand-accent);background:var(--ever-soft);box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--brand-accent) 24%,transparent)}
.import-preview{margin-top:16px}.confirmation-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.import-control-totals{display:grid;grid-template-columns:repeat(3,1fr);margin:14px 0}
.import-control-totals .confirmation-metric{border:1px solid var(--line);border-right:0}.import-control-totals .confirmation-metric:last-child{border-right:1px solid var(--line)}
.confirmation-table-wrap{overflow:auto;margin:12px 0 16px}.confirmation-table-wrap table{width:100%;border-collapse:collapse}
.confirmation-table-wrap th,.confirmation-table-wrap td{padding:10px;border-bottom:1px solid var(--line);text-align:left}.confirmation-table-wrap .num{text-align:right}
.confirmation-toolbar{position:sticky;top:8px;z-index:3;display:grid;grid-template-columns:auto auto auto minmax(160px,1fr) auto minmax(220px,1fr) auto;align-items:center;gap:10px;margin-bottom:12px;padding:12px 14px;border:1px solid var(--line);background:var(--surface);box-shadow:var(--shadow)}
.confirmation-toolbar>span{font-weight:800;color:var(--text-muted)}
.confirmation-bulk-category{display:grid;gap:4px;min-width:0}.confirmation-bulk-category span{color:var(--text-muted);font:750 10px/1.2 var(--body);letter-spacing:.06em;text-transform:uppercase}.confirmation-bulk-category input{min-height:42px}
.confirmation-import-evidence{margin:14px 0;color:var(--text-muted);font:600 13px/1.45 var(--body)}
.confirmation-select-all{display:flex;align-items:center;gap:8px;font-weight:800;white-space:nowrap}.confirmation-select-all input{width:18px;min-height:18px;height:18px;padding:0}
.confirmation-send-bridge{display:flex;align-items:center;justify-content:space-between;gap:22px;margin:0 0 16px;padding:18px 20px;border:1px solid color-mix(in srgb,var(--brand-accent) 42%,var(--line));border-left:5px solid var(--brand-accent);background:var(--ever-soft)}
.confirmation-send-bridge>div{display:grid;gap:4px}.confirmation-send-bridge span{color:var(--brand-accent);font:800 10px/1.2 var(--body);letter-spacing:.12em;text-transform:uppercase}.confirmation-send-bridge strong{font-size:17px}.confirmation-send-bridge small{color:var(--text-muted);font-weight:600}
.confirmation-transaction-list{border:1px solid var(--line)}
.confirmation-transaction-row{display:grid;grid-template-columns:24px minmax(210px,1.3fr) minmax(180px,1fr) minmax(180px,1fr) 88px 110px;align-items:center;gap:12px;min-height:88px;padding:12px 16px;border-bottom:1px solid var(--line)}
.triage-transaction-list{max-width:100%;overflow-x:auto;scrollbar-gutter:stable;scrollbar-color:var(--line-2) var(--surface-alt);scrollbar-width:auto}
.triage-transaction-list.has-open-vendor-menu,.triage-transaction-list.has-open-category-menu{position:relative;z-index:30;overflow:visible}
.triage-transaction-list::-webkit-scrollbar{height:12px}.triage-transaction-list::-webkit-scrollbar-track{background:var(--surface-alt)}.triage-transaction-list::-webkit-scrollbar-thumb{border:3px solid var(--surface-alt);border-radius:var(--r-pill);background:var(--line-2)}
.triage-column-head,.confirmation-transaction-row.admin-triage-row{min-width:1120px;grid-template-columns:24px minmax(250px,1.55fr) minmax(165px,.9fr) minmax(185px,1fr) minmax(210px,1.12fr) 58px 92px 78px;gap:10px;padding-right:12px;padding-left:12px}
.triage-column-head{display:grid;align-items:center;padding-top:9px;padding-bottom:9px;border-bottom:1px solid var(--line);background:var(--surface-alt);color:var(--text-muted);font:800 9px/1.2 var(--body);letter-spacing:.09em;text-transform:uppercase}
.triage-inline-field{display:grid;gap:4px;min-width:0;color:var(--text-muted);font:750 9px/1.2 var(--body);letter-spacing:.07em;text-transform:uppercase}
.triage-inline-field>span{display:none}
.triage-inline-field input,.triage-inline-field select{width:100%;min-height:44px;padding:9px 10px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:600 13px/1.3 var(--body);letter-spacing:normal;text-transform:none}
.triage-inline-field input:disabled,.triage-inline-field select:disabled{opacity:.72;cursor:wait}
.triage-field-status{min-height:12px;color:var(--text-muted);font:700 9px/1.2 var(--body);letter-spacing:0;text-transform:none}
.triage-field-status.saved{color:var(--positive)}.triage-field-status.invalid{color:var(--negative)}
.confirmation-transaction-row.admin-triage-row.has-open-vendor-menu,.confirmation-transaction-row.admin-triage-row.has-open-category-menu{position:relative;z-index:40;background:var(--surface)}
.confirmation-transaction-row:last-child{border-bottom:0}.confirmation-transaction-row:hover{background:var(--surface-alt)}
.confirmation-transaction-row>input{width:18px;height:18px}
.confirmation-transaction-main{min-width:0}.confirmation-transaction-main strong,.confirmation-transaction-main small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.confirmation-transaction-main small{margin-top:4px;color:var(--text-muted)}
.confirmation-transaction-amount{text-align:right;font-variant-numeric:tabular-nums}
.active-confirmation-batch{display:grid;grid-template-columns:minmax(0,.8fr) minmax(220px,.8fr) minmax(280px,1.2fr);align-items:center;gap:18px;margin-bottom:16px;border-left:4px solid var(--brand-accent)}
.active-confirmation-batch h3{margin:0}.active-confirmation-batch p{margin:5px 0 0;color:var(--text-muted)}
.confirmation-batch-heading{grid-column:1/3}.confirmation-batch-heading>span{color:var(--brand-accent);font:800 10px/1.2 var(--body);letter-spacing:.12em;text-transform:uppercase}
.confirmation-email-preview{grid-column:3;align-self:stretch;padding:13px 15px;border:1px solid var(--line);background:var(--surface-alt)}.confirmation-email-preview summary{cursor:pointer;color:var(--brand-accent);font-weight:800}.confirmation-email-preview p{font-size:13px;line-height:1.45}.confirmation-email-preview strong{font-size:12px;overflow-wrap:anywhere}
.confirmation-recipient-step{grid-column:1/-1;padding:18px;border:1px solid var(--line);background:var(--surface-alt)}.confirmation-recipient-step>header{display:flex;align-items:center;justify-content:space-between;gap:12px}.confirmation-recipient-step>header>div{display:flex;align-items:center;gap:9px}.confirmation-recipient-step>header span{display:grid;place-items:center;width:28px;height:28px;background:var(--accent-soft);color:var(--brand-accent);font-size:.7rem;font-weight:800}.confirmation-recipient-step h4{margin:0;font-size:15px}.confirmation-recipient-step>header em{color:var(--text-muted);font-size:11px;font-style:normal;font-weight:750}.confirmation-recipient-step>p{margin:9px 0 13px;font-size:12px}
.confirmation-recipient-people{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.confirmation-recipient-person{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;min-height:62px;padding:11px 12px;border:1px solid var(--line);background:var(--surface);color:var(--text);font:600 13px/1.3 var(--body);letter-spacing:normal;text-transform:none;cursor:pointer}.confirmation-recipient-person:hover,.confirmation-recipient-person.selected,.confirmation-recipient-person:has(input:checked){border-color:var(--brand-accent);background:var(--ever-soft)}.confirmation-recipient-person input{width:18px;min-height:18px;height:18px;padding:0}.confirmation-recipient-identity{display:grid;gap:3px;min-width:0;letter-spacing:normal;text-transform:none}.confirmation-recipient-identity strong,.confirmation-recipient-identity small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.confirmation-recipient-identity strong{font-size:13px}.confirmation-recipient-identity small{color:var(--text-muted);font-size:11px}.confirmation-recipient-person .state-chip{font-size:9px}
.confirmation-send-language{grid-column:1/3}.confirmation-batch-actions{grid-column:3;display:flex;justify-content:flex-end;gap:8px}.confirmation-batch-actions .btn{min-height:46px}
.confirmation-batch-manifest{grid-column:1/-1;display:grid;grid-template-columns:minmax(150px,.55fr) minmax(0,1.45fr);gap:18px;padding:20px;border:1px solid var(--brand-accent);background:linear-gradient(135deg,var(--ever-soft),var(--surface) 58%)}.confirmation-batch-manifest>header{display:grid;align-content:start;gap:8px;border-right:1px solid var(--line)}.confirmation-batch-manifest>header>span{color:var(--brand-accent);font-size:10px;font-weight:850;letter-spacing:.12em;text-transform:uppercase}.confirmation-batch-manifest>header>strong{font-size:38px;line-height:1;font-variant-numeric:tabular-nums}.confirmation-batch-manifest>header small{display:block;margin-top:5px;color:var(--text-muted);font-size:13px;font-weight:750;text-transform:uppercase}.confirmation-batch-manifest-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.confirmation-batch-manifest-facts p{display:grid;gap:4px;margin:0;padding:0 0 10px;border-bottom:1px solid var(--line)}.confirmation-batch-manifest-facts span,.confirmation-batch-manifest-accounts>span{color:var(--text-muted);font-size:10px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.confirmation-batch-manifest-facts b{overflow-wrap:anywhere;font-size:13px}.confirmation-batch-manifest-accounts{grid-column:2;display:flex;flex-wrap:wrap;align-items:center;gap:8px}.confirmation-batch-manifest-accounts>span{flex-basis:100%}.confirmation-batch-manifest-accounts b{display:inline-flex;align-items:center;gap:7px;padding:7px 9px;border:1px solid var(--line);background:var(--surface);font-size:12px}.confirmation-batch-manifest-accounts i{width:9px;height:9px;border-radius:var(--r-round);background:var(--account-color);font-style:normal}.confirmation-batch-manifest-accounts em{display:grid;place-items:center;min-width:22px;height:22px;margin-left:3px;background:var(--surface-alt);font-size:11px;font-style:normal}.confirmation-batch-lock-note{grid-column:1/-1!important;margin:0!important;padding-top:12px;border-top:1px solid var(--line);font-size:12px!important}.confirmation-draft-lock{display:grid;gap:4px;margin-bottom:12px;padding:14px 16px;border-left:4px solid var(--warning);background:var(--warn-soft)}.confirmation-draft-lock span{color:var(--text-muted);font-size:12px;font-weight:650}
.confirmation-draft-merge{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:12px;padding:16px 18px;border-left:4px solid var(--brand-accent);background:var(--ever-soft)}.confirmation-draft-merge.has-pending{border-left-color:var(--warning);background:var(--warn-soft)}.confirmation-draft-merge>div{display:grid;gap:4px}.confirmation-draft-merge span{color:var(--text-muted);font-size:12px;font-weight:650}.confirmation-draft-merge .btn{flex:0 0 auto}
.recipient-pill,.confirmation-answer-flags span{display:inline-flex;margin:3px;padding:5px 8px;background:var(--surface-alt);color:var(--text-muted);font-size:12px;font-weight:750}
.sent-batch-monitor{margin-top:16px}.sent-batch-card{display:grid;grid-template-columns:minmax(160px,.6fr) minmax(300px,1.4fr) auto;align-items:center;gap:16px;padding:14px 0;border-top:1px solid var(--line)}.sent-batch-card strong,.sent-batch-card small{display:block}.sent-batch-card small{margin-top:3px;color:var(--text-muted)}
.sent-batch-recipients{display:grid;gap:7px}.sent-batch-recipients>div{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;background:var(--surface-alt)}
.sent-batch-mini-progress{height:4px;margin-top:9px;overflow:hidden;background:var(--line)}.sent-batch-mini-progress i{display:block;height:100%;background:var(--brand-accent)}.sent-batch-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px}
.confirmation-tracking-shell{display:grid;grid-template-columns:250px minmax(0,1fr);align-items:start;border:1px solid var(--line);background:var(--surface)}
.tracking-batch-rail{position:sticky;top:70px;display:grid;align-content:start;border-right:1px solid var(--line);background:var(--surface-alt)}.tracking-batch-rail>header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:17px 16px;border-bottom:1px solid var(--line)}.tracking-batch-rail>header span{color:var(--text-muted);font:800 10px/1.2 var(--body);letter-spacing:.13em;text-transform:uppercase}.tracking-batch-rail>header strong{font:800 20px/1 var(--num)}
.tracking-batch-choice{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;width:100%;padding:14px 15px;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--text);text-align:left;cursor:pointer}.tracking-batch-choice:hover,.tracking-batch-choice.on{background:var(--surface)}.tracking-batch-choice.on{box-shadow:inset 4px 0 0 var(--brand-accent)}.tracking-batch-choice span,.tracking-batch-choice b,.tracking-batch-choice small{display:block;min-width:0}.tracking-batch-choice b,.tracking-batch-choice small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tracking-batch-choice b{font-size:13px}.tracking-batch-choice small{margin-top:4px;color:var(--text-muted);font-size:10px}.tracking-batch-choice em{color:var(--brand-accent);font-style:normal;font-weight:900}.tracking-batch-choice i{height:3px;margin-top:9px;overflow:hidden;background:var(--line)}.tracking-batch-choice i u{display:block;height:100%;background:var(--brand-accent);text-decoration:none}
.tracking-ledger{min-width:0;padding:20px}.tracking-ledger-head{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;padding-bottom:16px}.tracking-ledger-head>div>span,.tracking-review-heading span{color:var(--brand-accent);font:800 10px/1.2 var(--body);letter-spacing:.13em;text-transform:uppercase}.tracking-ledger-head h3{margin:5px 0 4px;font-size:24px}.tracking-ledger-head p{margin:0;color:var(--text-muted);font-size:12px}.tracking-ledger-head>strong{font:800 32px/1 var(--num);text-align:right}.tracking-ledger-head>strong small{display:block;margin-top:5px;color:var(--text-muted);font:800 9px/1.2 var(--body);letter-spacing:.1em;text-transform:uppercase}
.tracking-progress{display:flex;height:8px;overflow:hidden;background:var(--line)}.tracking-progress i{display:block;height:100%}.tracking-progress .answered{background:var(--brand-accent)}.tracking-progress .resolved{background:var(--positive)}
.tracking-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border:1px solid var(--line);border-top:0}.tracking-metrics>div{padding:13px 15px;border-right:1px solid var(--line)}.tracking-metrics>div:last-child{border-right:0}.tracking-metrics span,.tracking-metrics strong,.tracking-metrics small{display:block}.tracking-metrics span{color:var(--text-muted);font:800 9px/1.2 var(--body);letter-spacing:.1em;text-transform:uppercase}.tracking-metrics strong{margin:4px 0;font:800 25px/1 var(--num)}.tracking-metrics small{color:var(--text-muted);font-size:10px}
.tracking-recipient-strip{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.tracking-recipient-strip>span{display:grid;gap:3px;padding:8px 10px;background:var(--surface-alt)}.tracking-recipient-strip b{font-size:11px}.tracking-recipient-strip small{color:var(--text-muted);font-size:10px}
.tracking-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:18px;padding:10px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.tracking-filters{display:flex;flex-wrap:wrap;gap:5px}.tracking-filters button{min-height:34px;padding:0 10px;border:1px solid var(--line);background:var(--surface);color:var(--text-muted);font:750 11px/1 var(--body);cursor:pointer}.tracking-filters button.on{border-color:var(--brand-accent);background:var(--ever-soft);color:var(--brand-accent)}.tracking-filters button b{margin-left:4px}.tracking-toolbar label{min-width:min(300px,100%)}.tracking-toolbar input{width:100%;min-height:38px;padding:8px 10px;border:1px solid var(--line-2);background:var(--surface);color:var(--text)}.tracking-result-count{padding:9px 0;color:var(--text-muted);font-size:11px}
.tracking-table-wrap{overflow-x:auto}.tracking-table-wrap table{width:100%;min-width:1240px;border-collapse:separate;border-spacing:0}.tracking-table-wrap th{position:sticky;top:66px;z-index:4;padding:10px 9px;border-bottom:1px solid var(--line);background:var(--brand-primary);color:var(--on-dark-strong);font:800 9px/1.2 var(--body);letter-spacing:.1em;text-align:left;text-transform:uppercase}.tracking-table-wrap td{padding:12px 9px;border-bottom:1px solid var(--line);vertical-align:top;font-size:11px}.tracking-table-wrap tbody tr:hover{background:var(--surface-alt)}.tracking-table-wrap td strong,.tracking-table-wrap td small{display:block}.tracking-table-wrap td small{margin-top:4px;color:var(--text-muted)}.tracking-table-wrap .num{text-align:right}.tracking-needs{display:flex;flex-wrap:wrap;gap:4px}.tracking-needs span{padding:3px 5px;background:var(--surface-alt);color:var(--text-muted);font-size:9px;font-weight:800}.tracking-answer{display:block;max-width:220px;line-height:1.4}.tracking-answer.muted,.tracking-owner{color:var(--text-muted)}.state-chip.tracking-open{background:var(--warn-soft);color:var(--warning)}.state-chip.tracking-answered{background:var(--ever-soft);color:var(--brand-accent)}.state-chip.tracking-resolved{background:var(--pos-soft);color:var(--positive)}.tracking-review-link{display:block;margin-top:7px;padding:0;border:0;background:transparent;color:var(--brand-accent);font:800 10px/1.2 var(--body);cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.tracking-review-queue{margin-top:24px}.tracking-review-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:12px;padding:16px 18px;border-left:4px solid var(--brand-accent);background:var(--ever-soft)}.tracking-review-heading h3{margin:5px 0}.tracking-review-heading p{margin:0;color:var(--text-muted)}.tracking-review-heading>strong{font:800 28px/1 var(--num)}
.confirmation-return-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.confirmation-return-card{padding:18px;border:1px solid var(--line);background:var(--surface)}.confirmation-return-card.risk{border-top:4px solid var(--negative)}
.confirmation-return-card header{display:flex;justify-content:space-between;gap:14px;margin-bottom:12px}.confirmation-return-card header span,.confirmation-return-card header small{display:block;color:var(--text-muted)}
.confirmation-return-card header h3{margin:3px 0;font-size:18px}.confirmation-return-card header>strong{font-size:20px}
.confirmation-return-card label{margin-top:10px}.confirmation-return-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
/* P18.1 / DUN-2397#13: receipt on the left, transaction and actions on the
   right. Both columns are min-width:0 so a long bank description or a wide
   image cannot push the other one off the card. Stacked (receipt first) on
   narrow screens by the media block below. */
.confirmation-return-split{display:grid;grid-template-columns:minmax(0,220px) minmax(0,1fr);gap:14px;align-items:start}
.confirmation-return-evidence-pane,.confirmation-return-decision-pane{min-width:0}
.confirmation-return-receipt{display:grid;gap:8px;padding:11px 12px;border:1px solid var(--line);background:var(--surface-alt)}
.confirmation-return-receipt>b{font-size:12px;letter-spacing:.04em;text-transform:uppercase}
.confirmation-return-receipt.empty p{margin:0;color:var(--text-muted);font-size:12px;line-height:1.45}
.confirmation-return-thumb{display:block;overflow:hidden;border:1px solid var(--line);background:var(--surface)}
.confirmation-return-thumb img{display:block;width:100%;height:auto;max-height:320px;object-fit:contain}
/* DUN-2397#13: the non-image case (a PDF, say). Same footprint as the
   thumbnail so the two columns do not jump when a card has one or the other. */
.confirmation-return-file{display:grid;align-content:center;justify-items:center;gap:6px;min-height:120px;padding:18px 12px;border:1px dashed var(--line-2);background:var(--surface);text-decoration:none}
.confirmation-return-file-kind{font:800 20px/1 var(--num);letter-spacing:.06em}
.confirmation-return-file-open{color:var(--brand-accent);font-size:12px;font-weight:800}
.confirmation-return-receipt-meta{display:grid;gap:2px;min-width:0}
.confirmation-return-receipt-meta span{overflow:hidden;font-size:12px;font-weight:700;text-overflow:ellipsis;white-space:nowrap}
.confirmation-return-receipt-meta small,.confirmation-return-receipt-more{color:var(--text-muted);font:650 11px var(--num)}
.confirmation-return-facts{display:grid;gap:6px;margin:0 0 10px}
.confirmation-return-facts>div{display:flex;align-items:baseline;justify-content:space-between;gap:12px;min-width:0}
.confirmation-return-facts dt{color:var(--text-muted);font:700 11px/1.2 var(--body);letter-spacing:.06em;text-transform:uppercase}
.confirmation-return-facts dd{overflow:hidden;margin:0;font-size:13px;font-weight:650;text-align:right;text-overflow:ellipsis;white-space:nowrap}
.confirmation-client-approval{display:grid;gap:3px;margin:0 0 10px;padding:10px 12px;border-left:3px solid var(--positive);background:var(--pos-soft);color:var(--positive)}.confirmation-client-approval span{color:var(--text-muted);font-size:12px;font-weight:650}.confirmation-return-context{display:grid;gap:5px;margin:10px 0;color:var(--text-muted);font-size:13px}
/* Q26.4 (DUN-2968): the client's category, and the one click that adopts it. */
.confirmation-client-category{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 10px;padding:9px 12px;border-left:3px solid var(--brand-accent);background:var(--accent-soft);font-size:13px}
.confirmation-client-category>span{flex:1 1 200px;min-width:0}
.confirmation-client-category em{color:var(--text-muted);font-size:12px;font-style:normal;font-weight:750}
/* L27.2 (DUN-2962): the transfer warning borrows the "attention" treatment of
   .confirmation-return-status below on purpose — it is the same claim, that
   this row cannot be approved as it stands without booking the wrong thing. */
.confirmation-transfer-suggestion{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 10px;padding:9px 12px;border-left:3px solid var(--warning);background:var(--warn-soft);font-size:12px}
.confirmation-transfer-suggestion>span{flex:1 1 220px;min-width:0;color:var(--text-muted);line-height:1.45}
.confirmation-transfer-suggestion b{display:block;color:var(--warning);font-size:13px}
.confirmation-transfer-pair{display:grid;gap:8px;margin:10px 0;padding:11px 12px;border:1px solid var(--line);background:var(--surface-alt)}
.confirmation-transfer-pair>b{font-size:12px;letter-spacing:.04em;text-transform:uppercase}
.confirmation-transfer-pair p{margin:0}
.confirmation-transfer-pair ul{display:grid;gap:6px;margin:0;padding:0;list-style:none}
.confirmation-transfer-pair li{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:34px}
.confirmation-transfer-pair li>span{display:grid;gap:2px;min-width:0;font-size:12px}
.confirmation-transfer-pair li small{overflow:hidden;color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap}
.confirmation-transfer-pair li em{flex:0 0 auto;color:var(--text-muted);font-size:12px;font-style:normal;font-weight:750}
.confirmation-return-status{display:grid;gap:3px;margin:0 0 10px;padding:10px 12px;border-left:3px solid var(--positive);background:var(--pos-soft)}.confirmation-return-status b{color:var(--positive);font-size:13px}.confirmation-return-status span{color:var(--text-muted);font-size:12px;line-height:1.4}.confirmation-return-status.attention{border-left-color:var(--warning);background:var(--warn-soft)}.confirmation-return-status.attention b{color:var(--warning)}
.confirmation-return-evidence,.confirmation-return-thread{display:grid;gap:8px;margin:10px 0;padding:11px 12px;border:1px solid var(--line);background:var(--surface-alt)}.confirmation-return-evidence>b,.confirmation-return-thread>b{font-size:12px;letter-spacing:.04em;text-transform:uppercase}.confirmation-return-evidence ul,.confirmation-return-thread ol{display:grid;gap:6px;margin:0;padding:0;list-style:none}.confirmation-return-evidence li{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:34px}.confirmation-return-evidence li span{overflow:hidden;color:var(--text-muted);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.confirmation-return-evidence li a{flex:0 0 auto;color:var(--brand-accent);font-size:12px;font-weight:800}.confirmation-return-thread li{display:grid;gap:4px;padding-top:7px;border-top:1px solid var(--line)}.confirmation-return-thread li:first-child{padding-top:0;border-top:0}.confirmation-return-thread li>span{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.confirmation-return-thread strong{font-size:12px}.confirmation-return-thread small{color:var(--text-muted);font:650 10px var(--num)}.confirmation-return-thread p{margin:0;color:var(--text-muted);font-size:13px;line-height:1.45;white-space:pre-wrap}
.posting-group{margin-bottom:14px}.posting-row{display:grid;grid-template-columns:minmax(220px,1fr) 180px 170px auto;align-items:center;gap:10px;padding:11px 0;border-top:1px solid var(--line)}
.posting-row strong,.posting-row small{display:block}.posting-row small{margin-top:3px;color:var(--text-muted)}
.confirmation-alert{display:grid;gap:3px;margin-bottom:14px;padding:14px 16px;border-left:4px solid var(--warning);background:var(--warn-soft)}.confirmation-alert span{color:var(--text-muted)}
.confirmation-exceptions,.auto-ok-gate,.posted-verification,.confirmation-month-control,.receipt-matching{margin-bottom:16px}
.confirmation-imported{margin-bottom:16px;border-left:4px solid var(--positive)}.confirmation-imported>p{margin:8px 0 14px;color:var(--text-muted)}.confirmation-imported-summary{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}.confirmation-imported-summary span{display:inline-flex;align-items:baseline;gap:5px;padding:8px 10px;background:var(--pos-soft);color:var(--positive);font-size:12px;font-weight:700}.confirmation-imported-summary b{font-size:18px}
.auto-ok-gate{display:flex;align-items:center;justify-content:space-between;gap:20px;border-left:4px solid var(--brand-accent)}.auto-ok-gate h3{margin:4px 0}.auto-ok-gate p{margin:0;color:var(--text-muted)}
.confirmation-duplicate-card{display:grid;grid-template-columns:1fr 1fr auto;gap:18px;align-items:center;padding:14px 0;border-top:1px solid var(--line)}
.confirmation-duplicate-card span,.confirmation-duplicate-card strong,.confirmation-duplicate-card small{display:block}.confirmation-duplicate-card span{color:var(--text-muted);font:750 10px/1.2 var(--body);letter-spacing:.08em;text-transform:uppercase}.confirmation-duplicate-card small{margin-top:3px;color:var(--text-muted)}
.confirmation-duplicate-card>div:last-child{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:7px}
#admin-receipt-drive-upload-form{margin:18px 0 14px;padding:16px;border:1px solid var(--line);background:var(--surface-alt)}
#admin-receipt-drive-upload-form label{display:grid;gap:6px;min-width:0;color:var(--text-muted);font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase}
#admin-receipt-drive-files{width:100%;min-height:44px;padding:6px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:650 12px/1.3 var(--body);text-transform:none}
#admin-receipt-drive-files::file-selector-button{min-height:32px;margin-right:9px;padding:0 10px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:750 11px var(--body);cursor:pointer}
#admin-receipt-drive-upload-status:empty{display:none}#admin-receipt-drive-upload-status{margin-bottom:18px}
.verification-row{grid-template-columns:minmax(220px,1fr) minmax(140px,.5fr) auto auto}
.qbo-account-group{margin-bottom:16px}.qbo-account-group-head{display:flex;align-items:center;gap:10px;margin-bottom:2px;padding:8px 0;border-bottom:1px solid var(--line-2)}.qbo-account-group-head>span{color:var(--text-muted);font:800 11px/1.2 var(--body);letter-spacing:.1em;text-transform:uppercase}.qbo-account-group-head>strong{margin-left:auto;font:750 13px var(--num)}
/* M27.7 (DUN-2983): the account sync panel. .posting-row gives it the
   account | select | chip grid; everything this card adds under a row (what
   the gap is costing, the suggestion, the shared-account note) has to span
   the whole width or it lands in the grid's next column, which is where the
   first version put a 7-word sentence in a 170px chip slot. */
.qbo-map-row{grid-template-columns:minmax(200px,1fr) minmax(220px,1.4fr) 120px;row-gap:8px}
.qbo-map-row>.qbo-mapping-warning,.qbo-map-row>.qbo-mapping-suggestion,.qbo-map-row>.qbo-mapping-shared{grid-column:1/-1;margin:0}
.qbo-mapping-warning{display:flex;align-items:center;flex-wrap:wrap;gap:8px;color:var(--neg);font:600 13px/1.4 var(--body)}
.qbo-mapping-suggestion{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:8px 11px;border-left:3px solid var(--ever);background:var(--ever-soft);font:600 13px/1.4 var(--body)}
.qbo-mapping-suggestion.needs-review{border-left-color:var(--warn);background:var(--warn-soft)}
.qbo-mapping-suggestion small{color:var(--text-muted);font:600 12px/1.4 var(--body)}
.qbo-mapping-suggestion button{margin-left:auto}
.qbo-mapping-shared{color:var(--text-muted);font:600 12px/1.4 var(--body)}
.confirmation-card-actions{display:flex;align-items:center;gap:8px}
.qbo-outbox-now{display:block;margin-top:4px;font:600 12px/1.4 var(--body)}
.qbo-outbox-now.ready{color:var(--pos)}
.qbo-outbox-ready-bulk{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:0 0 12px;padding:10px 12px;border-left:3px solid var(--ever);background:var(--ever-soft);font:600 13px/1.4 var(--body)}
.qbo-outbox-ready-bulk button{margin-left:auto}
.project-merge-filter input{margin-bottom:6px}
.qbo-map-unclaimed{margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}
.qbo-map-unclaimed h4{margin:0 0 6px;color:var(--text-muted);font:800 11px/1.3 var(--body);letter-spacing:.08em;text-transform:uppercase}
.qbo-map-unclaimed ul{margin:0;padding-left:18px;font:600 13px/1.6 var(--body)}
.qbo-outbox-item{padding:11px 0;border-top:1px solid var(--line)}.qbo-outbox-item .posting-row{padding:0;border-top:0}
.origin-badge{margin-top:5px}
.qbo-outbox-detail{display:grid;gap:10px;margin-top:10px;padding:13px 14px;border:1px solid var(--line);background:var(--surface-alt)}.qbo-outbox-detail label{display:grid;gap:5px;color:var(--text-muted);font:750 11px/1.2 var(--body);letter-spacing:.05em;text-transform:uppercase}.qbo-outbox-detail label[hidden]{display:none}
.qbo-outbox-receipts{margin:6px 0 0;padding:8px 10px}
.qbo-final-review{margin-bottom:16px;border-left:4px solid var(--brand-accent)}
.qbo-review-toolbar{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:12px;margin:14px 0;padding:12px 14px;border:1px solid var(--line-2);background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:blur(8px)}
.qbo-review-toolbar>span{color:var(--text-muted);font-size:13px}.qbo-review-toolbar>.btn{margin-left:auto}
.qbo-review-row{padding:14px 0;border-top:1px solid var(--line)}
.qbo-review-summary{display:grid;grid-template-columns:24px minmax(220px,1fr) auto;align-items:start;gap:10px}.qbo-review-summary strong,.qbo-review-summary small{display:block}.qbo-review-summary small{margin-top:3px;color:var(--text-muted)}
.qbo-review-blocker{margin:8px 0 0 34px;color:var(--neg);font-size:12px;font-weight:650}
.qbo-review-fields{display:grid;grid-template-columns:repeat(4,minmax(145px,1fr));gap:10px;margin:12px 0 0 34px;padding:12px;border:1px solid var(--line);background:var(--surface-alt)}
.qbo-review-fields label{display:grid;align-content:start;gap:5px;color:var(--text-muted);font:750 11px/1.2 var(--body);letter-spacing:.05em;text-transform:uppercase}.qbo-review-fields label[hidden]{display:none}
.qbo-review-fields input,.qbo-review-fields select{width:100%;min-height:44px;padding:9px 11px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:600 13px/1.3 var(--body);text-transform:none;letter-spacing:normal}
.qbo-review-table-wrap{overflow:auto;border:1px solid var(--line)}
.qbo-review-table{width:100%;min-width:1900px;border-collapse:collapse;background:var(--surface)}
.qbo-review-table th{position:sticky;top:0;z-index:2;padding:0;border-bottom:2px solid var(--line-2);background:var(--surface-alt);text-align:left}
.qbo-review-table th button{width:100%;min-height:42px;padding:8px 10px;border:0;background:transparent;color:var(--text-muted);font:800 10px/1.2 var(--body);letter-spacing:.06em;text-align:left;text-transform:uppercase;cursor:pointer}
.qbo-review-table th button:hover,.qbo-review-table th button[aria-pressed=true]{color:var(--brand-accent);background:var(--accent-soft)}
.qbo-review-table td{min-width:120px;padding:10px;border-bottom:1px solid var(--line);vertical-align:top}
.qbo-review-table tr:hover td{background:color-mix(in srgb,var(--surface-alt) 70%,transparent)}
.qbo-review-table tr.needs-review td{background:color-mix(in srgb,var(--negative) 4%,var(--surface))}
.qbo-review-table input,.qbo-review-table select{width:100%;min-height:40px;padding:7px 9px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:600 12px/1.25 var(--body)}
.qbo-review-table .qbo-select-cell{min-width:42px;width:42px}.qbo-review-table .qbo-select-cell input{width:18px;min-height:18px}
.qbo-review-table .qbo-description-cell{min-width:270px}.qbo-review-table .qbo-client-answer{min-width:230px}.qbo-review-table .qbo-attachment-cell{min-width:250px}
.qbo-review-table td>strong,.qbo-review-table td>small{display:block}.qbo-review-table td>small{margin-top:4px;color:var(--text-muted)}
.qbo-review-table .qbo-review-blocker{margin:7px 0 0;color:var(--negative);font-size:11px}
.qbo-drive-link{display:flex;gap:6px;margin-top:7px}.qbo-drive-link select{min-width:160px}.qbo-drive-link .btn{flex:0 0 auto}
.qbo-bulk-edit{display:grid;grid-template-columns:minmax(220px,.72fr) minmax(0,2fr);gap:18px;align-items:end;margin:10px 0 14px;padding:14px;border:1px solid var(--brand-border);background:var(--brand-soft)}
.qbo-bulk-copy{display:grid;gap:4px}.qbo-bulk-copy>span{color:var(--brand-accent);font-size:10px;font-weight:900;letter-spacing:.14em;text-transform:uppercase}.qbo-bulk-copy>strong{font-size:14px}.qbo-bulk-copy>small{color:var(--muted)}
.qbo-bulk-fields{display:grid;grid-template-columns:repeat(4,minmax(140px,1fr)) auto;gap:8px;align-items:end}.qbo-bulk-fields label{display:grid;gap:4px;min-width:0}.qbo-bulk-fields label>span{font-size:9px;font-weight:900;letter-spacing:.1em;text-transform:uppercase}.qbo-bulk-edit input,.qbo-bulk-edit select{width:100%;min-height:40px}.qbo-bulk-edit button{min-height:40px;white-space:nowrap}
@media(max-width:1180px){.qbo-bulk-edit{grid-template-columns:1fr}.qbo-bulk-fields{grid-template-columns:repeat(2,minmax(180px,1fr))}.qbo-bulk-fields button{grid-column:1/-1}}
.confirmation-month-control .confirmation-metrics{margin:16px 0 0}.confirmation-metrics.compact{grid-template-columns:repeat(4,minmax(0,1fr))}.confirmation-metrics.compact .confirmation-metric{border-bottom:0}.confirmation-metrics.compact .confirmation-metric:nth-child(3n){border-right:1px solid var(--line)}.confirmation-metrics.compact .confirmation-metric:last-child{border-right:0}
.month-control-head{display:grid;grid-template-columns:minmax(180px,1fr) auto auto;align-items:end;gap:10px}.month-control-head label{display:grid;gap:6px}.month-control-head label span{color:var(--text-muted);font:750 11px/1.2 var(--body);letter-spacing:.06em;text-transform:uppercase}
.confirmation-batch-control,.control-exception-row,.receipt-match-row{display:grid;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--line)}.confirmation-batch-control{grid-template-columns:minmax(180px,1fr) minmax(240px,1fr) auto}.confirmation-batch-control strong,.confirmation-batch-control small,.control-exception-row strong,.control-exception-row small{display:block}.confirmation-batch-control small,.control-exception-row small{margin-top:3px;color:var(--text-muted)}
.confirmation-batch-control input,.receipt-match-row select{width:100%;min-height:44px;padding:9px 11px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:600 14px/1.3 var(--body)}
.control-exception-row{grid-template-columns:minmax(220px,1fr) minmax(180px,.7fr) auto}.control-exception-row p{margin:5px 0 0;color:var(--text-muted)}
/* M27.9: uma linha de exceção sem gesto à direita (os pulos do bank feed
   não têm botão: a resolução é consertar a causa no QuickBooks) ocupa a
   faixa inteira, em vez de deixar as colunas de ação vazias. */
.control-exception-row>div:only-child{grid-column:1/-1}
.confirmation-close-month{display:flex;justify-content:space-between;align-items:center;gap:22px;margin-top:18px;padding:22px 24px;border:1px solid var(--line);border-left:4px solid var(--text);background:var(--surface-alt)}.confirmation-close-month span{color:var(--brand-accent);font:800 11px/1.2 var(--body);letter-spacing:.14em;text-transform:uppercase}.confirmation-close-month h3{margin:5px 0}.confirmation-close-month p{max-width:720px;margin:0;color:var(--text-muted)}
.receipt-staging-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.receipt-company-review{display:grid;gap:10px;margin-top:18px;padding:16px;border:1px solid var(--line);background:var(--surface-alt)}.receipt-company-review>.confirmation-card-head{margin:0}.receipt-company-review>p{margin:0;color:var(--text-muted)}
.staged-receipt{display:grid;grid-template-columns:96px minmax(0,1fr);gap:14px;align-items:start}
.staged-receipt-icon{width:96px;height:112px;display:grid;place-items:center;border:1px solid var(--line);background:var(--surface-alt);color:var(--brand-accent);font:800 12px/1 var(--body);letter-spacing:.12em}
.staged-receipt p{color:var(--text-muted)}.staged-receipt>div>div{display:flex;flex-wrap:wrap;gap:7px}.staged-receipt-match{display:grid;gap:5px;margin:10px 0}.staged-receipt-match>span{font-size:10px;font-weight:850;letter-spacing:.08em;text-transform:uppercase}.staged-receipt-match select{width:100%;min-height:40px}
.receipt-match-row{grid-template-columns:minmax(180px,.7fr) minmax(260px,1.3fr) auto}.receipt-file-button{min-width:0;padding:0;border:0;background:transparent;color:var(--text);text-align:left;cursor:pointer}.receipt-file-button strong,.receipt-file-button small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.receipt-file-button small{margin-top:3px;color:var(--text-muted)}
.receipt-match-evidence{grid-column:2/-1;min-height:38px;padding:9px 12px;border-left:3px solid var(--line-2);background:var(--surface-alt);color:var(--text-muted);font:600 13px/1.45 var(--body)}.receipt-match-evidence.loading{border-left-color:var(--brand-accent)}.receipt-match-evidence.suggested{border-left-color:var(--brand-accent);background:var(--ever-soft);color:var(--brand-primary)}.receipt-match-evidence.not-ranked{border-left-color:var(--warning);background:var(--warn-soft);color:var(--warning)}.receipt-match-evidence.invalid{border-left-color:var(--negative);background:var(--neg-soft);color:var(--negative)}
.confirmation-rule-form{display:grid;grid-template-columns:1.4fr 1fr 1fr auto;align-items:end;gap:10px}
.confirmation-rule-list{margin-top:14px;border:1px solid var(--line)}.confirmation-rule-list article{display:flex;justify-content:space-between;gap:12px;padding:13px 15px;border-bottom:1px solid var(--line)}
.confirmation-rule-list article:last-child{border-bottom:0}.confirmation-rule-list strong,.confirmation-rule-list small{display:block}.confirmation-rule-list small{margin-top:3px;color:var(--text-muted)}

/* V21.3 (DUN-2860): the project mapping queue. A pending project blocks the
   approval of every transaction pointed at it, so the queue is styled as a
   gate — the same warning vocabulary as the other exception cards — and each
   card states, next to its buttons, how many transactions they will move. */
.stage-rail-badge{display:grid;place-items:center;min-width:22px;height:22px;padding:0 6px;background:var(--warning);color:var(--on-warning);font:800 11px/1 var(--num);font-style:normal}
.project-queue,.project-import,.project-full-list{margin-bottom:16px}
.project-queue{border-left:4px solid var(--warning)}
.project-queue-card{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px 18px;padding:14px 0;border-top:1px solid var(--line)}
.project-queue-identity{display:grid;gap:6px;min-width:0}
.project-queue-identity strong{font-size:16px;overflow-wrap:anywhere}
.project-queue-identity small{color:var(--text-muted);font-size:12px;overflow-wrap:anywhere}
.project-badges{display:flex;flex-wrap:wrap;gap:6px}
.project-queue-actions,.project-row-actions,.project-rename-actions{display:flex;flex-wrap:wrap;gap:7px}
.project-queue-actions,.project-row-actions{justify-content:flex-end}
.project-reject-button{border-color:color-mix(in srgb,var(--negative) 38%,var(--line-2));color:var(--negative)}
.project-reject-button:hover{border-color:var(--negative);background:var(--neg-soft)}
.project-merge{grid-column:1/-1;display:grid;grid-template-columns:minmax(220px,1fr) auto;align-items:end;gap:10px;padding:12px 14px;background:var(--surface-alt)}
.project-merge label,.project-rename-form label{display:grid;gap:6px;min-width:0;color:var(--text-muted);font:750 10px/1.2 var(--body);letter-spacing:.08em;text-transform:uppercase}
.project-merge select,.project-rename-form input{width:100%;min-height:44px;padding:9px 11px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:600 14px/1.3 var(--body);letter-spacing:normal;text-transform:none}
.project-merge p{grid-column:1/-1;margin:0;color:var(--text-muted);font-size:12px}
.project-rename-form{grid-column:1/-1;display:grid;gap:8px;padding:12px 14px;border-left:3px solid var(--brand-accent);background:var(--ever-soft)}
.project-rename-form .footnote{margin:0;color:var(--text-muted);font-size:12px}
/* Q26.2 (DUN-2966): the registry is a mirror of QBO for a connected company.
   The sync panel reads as the primary door and the CSV form below it as the
   fallback it now is — hence the accent rule on one and the warning tint on
   the other, rather than two cards of equal weight. */
.project-sync{margin-bottom:16px;border-left:4px solid var(--brand-accent)}
.project-sync #project-sync-status{overflow-wrap:anywhere}
/* L27.3 (DUN-2969): the API door of the import pane, styled like the
   project-sync card above and for the same reason — it is the primary door
   now, and the CSV dropzone beside it is the fallback. */
.qbo-bank-feed{border-left:4px solid var(--brand-accent)}
.qbo-bank-feed #qbo-bank-feed-status{overflow-wrap:anywhere}
.project-import-warning,.csv-fallback-warning{margin:12px 0 0;padding:10px 12px;border-left:3px solid var(--warning);background:var(--surface-alt);color:var(--text-muted);font-size:12px;line-height:1.5}
.project-suggestions{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:12px 14px;background:var(--ever-soft)}
.project-suggestions>span{width:100%;color:var(--text-muted);font:750 10px/1.2 var(--body);letter-spacing:.08em;text-transform:uppercase}
.project-suggestions>p{width:100%;margin:0;color:var(--text-muted);font-size:12px;line-height:1.5}
.project-suggestions button{max-width:100%;overflow-wrap:anywhere;text-align:left}
.project-suggestions.empty{background:var(--surface-alt)}
#project-import-form{display:grid;grid-template-columns:minmax(240px,1fr) auto;align-items:end;gap:12px;margin:14px 0}
#project-import-form label{display:grid;gap:6px;min-width:0;color:var(--text-muted);font:750 11px/1.2 var(--body);letter-spacing:.06em;text-transform:uppercase}
#project-import-file{width:100%;min-height:44px;padding:6px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:650 12px/1.3 var(--body);text-transform:none}
#project-import-file::file-selector-button{min-height:32px;margin-right:9px;padding:0 10px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:750 11px var(--body);cursor:pointer}
#project-import-status:empty{display:none}
.project-import-summary{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}
.project-import-summary span{display:inline-flex;align-items:baseline;gap:5px;padding:8px 10px;background:var(--surface-alt);color:var(--text-muted);font-size:12px;font-weight:700}
.project-import-summary b{color:var(--text);font-size:16px}
.project-list{border:1px solid var(--line)}
.project-row{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(150px,.7fr) auto;align-items:center;gap:10px 18px;padding:13px 15px;border-bottom:1px solid var(--line)}
.project-row:last-child{border-bottom:0}.project-row:hover{background:var(--surface-alt)}
.project-row.archived .project-row-identity strong{color:var(--text-muted)}
.project-row-identity{display:grid;gap:6px;min-width:0}
.project-row-identity strong,.project-row-identity small{overflow-wrap:anywhere}
.project-row-identity small{color:var(--text-muted);font-size:12px}
.project-row-meta{display:grid;gap:4px;color:var(--text-muted);font-size:12px}
.project-row-meta b{color:var(--text);font-size:15px}
.project-mapping-jump{margin:0 0 10px}

/* Q26.3 (DUN-2967): the category combobox in bulk triage, the returns desk
   and the posting pane -- same pattern as .project-combobox above (render
   once, fill the popup on the DOM directly), applied to a plain text input
   instead of one paired with a hidden id, plus a toggle for the wider
   account list and a standing "not in the chart of accounts" note. */
.qbo-category-combobox{position:relative;display:grid;gap:4px;min-width:0}.qbo-category-combobox.is-open{z-index:50}
.qbo-category-popup{position:absolute;top:calc(100% + 3px);left:0;z-index:60;width:max(100%,380px);max-width:min(620px,calc(100vw - 40px));padding:4px;border:1px solid var(--line-2);background:var(--surface);box-shadow:0 24px 56px -20px var(--glass-shadow)}
.qbo-category-popup[hidden]{display:none}
.qbo-category-hint{margin:2px 4px 6px;padding:5px 6px;border-left:2px solid var(--brand-accent);color:var(--text-muted);font:650 11px/1.35 var(--body)}
.qbo-category-toggle-all{display:block;width:100%;margin-bottom:4px;padding:6px 8px;border:1px dashed var(--line-2);background:transparent;color:var(--text-muted);font:750 10px/1.2 var(--body);letter-spacing:.05em;text-align:left;text-transform:uppercase;cursor:pointer}
.qbo-category-toggle-all[aria-pressed="true"]{border-style:solid;border-color:var(--brand-accent);color:var(--brand-accent)}
.qbo-category-list{max-height:min(420px,56vh);margin:0;padding:0;overflow:auto;overscroll-behavior:contain;list-style:none}
.qbo-category-option{display:grid;gap:1px;padding:6px 8px;cursor:pointer;font-size:13px}
.qbo-category-option strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qbo-category-option small{overflow:hidden;color:var(--text-muted);font-size:11px;text-overflow:ellipsis;white-space:nowrap}
.qbo-category-option:hover,.qbo-category-option.is-active{background:var(--accent-soft)}
.qbo-category-option.is-active{box-shadow:inset 3px 0 0 var(--brand-accent)}
.qbo-category-empty{padding:8px;color:var(--text-muted);font-size:12px}
p.qbo-category-unknown{color:var(--warning)}
.qbo-category-stale{display:flex;align-items:center;flex-wrap:wrap;gap:8px}

/* The Vendor reference picker mirrors the category combobox interaction but
   keeps its own selectors: its first result can be the intentional
   "Add new vendor" action, which has no equivalent in the chart of accounts. */
.qbo-vendor-combobox{position:relative;display:grid;gap:4px;min-width:0}.qbo-vendor-combobox.is-open{z-index:50}
.qbo-vendor-popup{position:absolute;top:calc(100% + 3px);left:0;z-index:60;width:max(100%,360px);max-width:min(560px,calc(100vw - 40px));padding:4px;border:1px solid var(--line-2);background:var(--surface);box-shadow:0 24px 56px -20px var(--glass-shadow)}
.qbo-vendor-popup[hidden]{display:none}
.qbo-vendor-list{max-height:min(380px,52vh);margin:0;padding:0;overflow:auto;overscroll-behavior:contain;list-style:none}
.qbo-vendor-option{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;padding:7px 9px;cursor:pointer;font-size:13px}
.qbo-vendor-option strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qbo-vendor-option small{color:var(--text-muted);font-size:11px;font-style:italic}
.qbo-vendor-option:hover,.qbo-vendor-option.is-active{background:var(--accent-soft)}
.qbo-vendor-option.is-active{box-shadow:inset 3px 0 0 var(--brand-accent)}
.qbo-vendor-add{grid-template-columns:1fr;border-bottom:1px solid var(--line);color:var(--brand-accent)}
.qbo-vendor-add small{font-style:normal}
.qbo-vendor-empty{padding:8px;color:var(--text-muted);font-size:12px}
p.qbo-vendor-new-hint{color:var(--brand-accent);line-height:1.35}

@media(max-width:1280px){
  .confirmation-split{grid-template-columns:1fr}
  .confirmation-dropzone{min-height:170px}
  .confirmation-tracking-shell{grid-template-columns:220px minmax(0,1fr)}.tracking-table-wrap{overflow-x:auto}
}
@media(max-width:980px){
  .confirmations-desk{grid-template-columns:1fr}
  .confirmations-stage-rail{display:flex;gap:4px;overflow-x:auto;padding:8px;border-right:0;border-bottom:1px solid var(--line);scrollbar-width:none}
  .confirmations-stage-rail button{flex:0 0 auto;width:auto;grid-template-columns:auto auto auto;border-left:0;border-bottom:3px solid transparent}
  .confirmations-stage-rail button.on{border-bottom-color:var(--brand-accent)}
  .confirmations-canvas{padding:22px 18px 34px}
  .confirmation-return-grid,.receipt-staging-grid{grid-template-columns:1fr}
  /* DUN-2397#13: one column, receipt first -- the evidence is what the
     admin scrolls to before deciding. */
  .confirmation-return-split{grid-template-columns:1fr}
  .confirmation-return-thumb img{max-height:240px}
  .posting-row{grid-template-columns:minmax(0,1fr) 150px}.posting-row input[data-post-ref]{grid-column:1}.posting-row button{grid-column:2}
  .confirmation-duplicate-card{grid-template-columns:1fr 1fr}.confirmation-duplicate-card>div:last-child{grid-column:1/-1;justify-content:flex-start}
  .confirmation-batch-control,.receipt-match-row{grid-template-columns:1fr 1fr}.confirmation-batch-control>div,.receipt-match-row>.receipt-file-button,.receipt-match-evidence{grid-column:1/-1}
  .control-exception-row{grid-template-columns:1fr auto}.control-exception-row>span{grid-column:1/-1}
  .sent-batch-card{grid-template-columns:1fr}.sent-batch-recipients{grid-column:1}
  .sent-batch-actions{justify-content:flex-start}.confirmation-tracking-shell{grid-template-columns:1fr}.tracking-batch-rail{position:static;grid-template-columns:repeat(2,minmax(190px,1fr));overflow-x:auto;border-right:0;border-bottom:1px solid var(--line)}.tracking-batch-rail>header{grid-column:1/-1}.tracking-batch-choice{border-right:1px solid var(--line)}
  .project-queue-card,.project-row{grid-template-columns:1fr}.project-queue-actions,.project-row-actions{justify-content:flex-start}
  .qbo-review-fields{grid-template-columns:repeat(2,minmax(0,1fr))}
  .active-confirmation-batch{grid-template-columns:1fr 1fr}.confirmation-batch-heading,.confirmation-email-preview,.confirmation-recipient-step,.confirmation-batch-manifest{grid-column:1/-1}.confirmation-send-language{grid-column:1}.confirmation-batch-actions{grid-column:2}.confirmation-batch-manifest{grid-template-columns:1fr}.confirmation-batch-manifest>header{border-right:0;border-bottom:1px solid var(--line);padding-bottom:12px}.confirmation-batch-manifest-accounts{grid-column:1}
}
@media(max-width:680px){
  .confirmations-workspace{margin-inline:-16px}
  .confirmations-canvas{padding:20px 16px 96px}
  .confirmations-intro h2,.confirmation-pane-body>header h2{font-size:30px}
  .confirmation-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  .confirmation-metric,.confirmation-metric:nth-child(3n),.confirmation-metric:nth-child(n+4){border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
  .confirmation-metric:nth-child(2n){border-right:0}.confirmation-metric:nth-last-child(-n+2){border-bottom:0}
  .confirmation-next,.confirmation-send-bridge,.confirmation-draft-merge{align-items:stretch;flex-direction:column}.confirmation-next .btn,.confirmation-send-bridge .btn,.confirmation-draft-merge .btn{width:100%}
  .confirmation-split{grid-template-columns:1fr}.confirmation-account-create form,.confirmation-rule-form{grid-template-columns:1fr}
  .confirmation-toolbar{position:static;grid-template-columns:1fr}.confirmation-toolbar .btn{width:100%}
  .triage-transaction-list{overflow:visible}.triage-column-head{display:none}
  .triage-inline-field>span{display:block}
  .confirmation-transaction-row,.confirmation-transaction-row.admin-triage-row{min-width:0;grid-template-columns:24px minmax(0,1fr) auto;padding:13px 12px}
  .admin-triage-row .triage-inline-field{grid-column:2/4}.admin-triage-row .confirmation-transaction-direction{grid-column:2}.admin-triage-row .confirmation-transaction-amount{grid-column:3;grid-row:auto}.admin-triage-row>.state-chip{grid-column:2/4}
  .confirmation-transaction-amount{grid-column:3;grid-row:1}.confirmation-transaction-row>.state-chip{grid-column:2/4;width:max-content;max-width:100%}
  .active-confirmation-batch{grid-template-columns:1fr}.active-confirmation-batch .btn{width:100%}.confirmation-batch-heading,.confirmation-email-preview,.confirmation-recipient-step,.confirmation-batch-manifest,.confirmation-send-language,.confirmation-batch-actions{grid-column:1}.confirmation-batch-actions{display:grid}.confirmation-recipient-people,.confirmation-batch-manifest-facts{grid-template-columns:1fr}
  .posting-row{grid-template-columns:1fr}.posting-row input[data-post-ref],.posting-row button{grid-column:1}.posting-row button{width:100%}
  .qbo-review-toolbar{position:static;align-items:stretch;flex-direction:column}.qbo-review-toolbar>.btn{width:100%;margin-left:0}.qbo-review-summary{grid-template-columns:24px minmax(0,1fr)}.qbo-review-summary>.state-chip{grid-column:2}.qbo-review-fields{grid-template-columns:1fr;margin-left:0}.qbo-review-blocker{margin-left:0}
  .auto-ok-gate,.confirmation-close-month{align-items:stretch;flex-direction:column}.auto-ok-gate .btn,.confirmation-close-month .btn{width:100%}
  .confirmation-duplicate-card,.confirmation-batch-control,.control-exception-row,.receipt-match-row,.month-control-head{grid-template-columns:1fr}.confirmation-duplicate-card>div:last-child,.confirmation-batch-control>div,.receipt-match-row>.receipt-file-button,.receipt-match-evidence,.control-exception-row>span{grid-column:1}
  .confirmation-duplicate-card>div:last-child .btn,.confirmation-batch-control .btn,.receipt-match-row .btn{width:100%}
  .project-merge,#project-import-form{grid-template-columns:1fr}
  .project-queue-actions .btn,.project-row-actions .btn,.project-rename-actions .btn,.project-merge .btn,#project-import-form .btn{width:100%}
  .project-row{padding:13px 12px}
  .sent-batch-recipients>div{align-items:stretch;flex-direction:column}.sent-batch-recipients .btn{width:100%}
  .sent-batch-actions{display:grid}.sent-batch-actions .btn{width:100%}.tracking-ledger{padding:16px}.tracking-ledger-head,.tracking-toolbar,.tracking-review-heading{align-items:stretch;flex-direction:column}.tracking-ledger-head>strong{text-align:left}.tracking-metrics{grid-template-columns:1fr}.tracking-metrics>div{border-right:0;border-bottom:1px solid var(--line)}.tracking-metrics>div:last-child{border-bottom:0}.tracking-toolbar label{min-width:100%}.tracking-table-wrap{overflow:visible}.tracking-table-wrap table,.tracking-table-wrap tbody{display:block;min-width:0}.tracking-table-wrap thead{display:none}.tracking-table-wrap tr{display:grid;gap:8px;padding:14px 0;border-bottom:1px solid var(--line)}.tracking-table-wrap td{display:grid;grid-template-columns:112px minmax(0,1fr);gap:10px;padding:0!important;border:0!important;text-align:left!important}.tracking-table-wrap td::before{content:attr(data-label);color:var(--text-muted);font:800 9px/1.4 var(--body);letter-spacing:.08em;text-transform:uppercase}.tracking-table-wrap td[colspan]{display:block}.tracking-answer{max-width:none}.tracking-review-link{grid-column:2}
  .confirmation-metrics.compact{grid-template-columns:repeat(2,minmax(0,1fr))}.confirmation-metrics.compact .confirmation-metric,.confirmation-metrics.compact .confirmation-metric:nth-child(3n){border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.confirmation-metrics.compact .confirmation-metric:nth-child(2n){border-right:0}.confirmation-metrics.compact .confirmation-metric:nth-last-child(-n+2){border-bottom:0}
  .confirmation-table-wrap{overflow:visible}.confirmation-table-wrap table,.confirmation-table-wrap tbody{display:block}.confirmation-table-wrap thead{display:none}
  .confirmation-table-wrap tr{display:grid;padding:10px 0;border-bottom:1px solid var(--line)}.confirmation-table-wrap td{display:block;padding:3px 0!important;border:0!important;text-align:left!important}
}


/* V21.4 (DUN-2861): Customer / Project Name combobox. Deliberately free of
   any .pending-ledger-* dependency: the full list, the bulk bar and the
   one-at-a-time card mount the same markup. The list sits at z-index 40 so it
   clears the ledger's sticky header (32) and sticky footer (10); rows are
   position:relative with z-index auto, so they never trap it in a stacking
   context of their own. */
.project-combobox{position:relative;display:grid;gap:5px;min-width:0}
.project-combobox-control{position:relative;display:flex;align-items:center;min-width:0}
.project-combobox-input{width:100%;min-width:0}
.project-combobox-suggestion{display:inline-flex;align-items:center;gap:6px;justify-self:start;max-width:100%;min-height:26px;padding:3px 9px;border:1px dashed color-mix(in srgb,var(--brand-accent) 45%,var(--line));background:var(--accent-soft);color:var(--brand-accent);font-size:11px;font-weight:800;cursor:pointer}
.project-combobox-suggestion>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.project-combobox-suggestion:hover{border-style:solid}
.project-combobox-suggestion:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.project-combobox-suggestion[hidden]{display:none}
.project-combobox-badge{color:var(--text-muted);font-size:11px;font-weight:750}
.project-combobox-badge[hidden]{display:none}
.project-combobox.is-busy .project-combobox-input{opacity:.62}
.project-combobox-list{position:absolute;top:100%;left:0;z-index:40;display:grid;align-content:start;width:max(100%,240px);max-height:290px;margin:3px 0 0;padding:4px;overflow:auto;border:1px solid var(--line-2);background:var(--surface);box-shadow:0 22px 48px -24px var(--glass-shadow);list-style:none}
.project-combobox-list[hidden]{display:none}
.project-combobox-option{display:flex;align-items:center;gap:8px;min-height:40px;padding:6px 8px;cursor:pointer}
.project-combobox-option.is-customer{font-weight:800}
.project-combobox-customer-heading{min-height:34px;padding:9px 8px 5px;border-top:1px solid var(--line);color:var(--text);font-size:13px;font-weight:800}
.project-combobox-customer-heading:first-child{border-top:0}
.project-combobox-option.is-subproject{position:relative;padding-left:calc(14px + var(--project-indent,18px))}
.project-combobox-option.is-subproject::before{position:absolute;left:calc(var(--project-indent,18px) - 5px);color:var(--text-muted);content:"↳";font-size:12px}
.project-combobox-option-name{display:grid;gap:1px;flex:1 1 auto;min-width:0}
.project-combobox-option-name strong{overflow:hidden;font-size:13px;text-overflow:ellipsis;white-space:nowrap}
.project-combobox-option-name small{overflow:hidden;color:var(--text-muted);font-size:11px;text-overflow:ellipsis;white-space:nowrap}
.project-combobox-option:hover,.project-combobox-option.is-active{background:var(--accent-soft)}
.project-combobox-option.is-active{box-shadow:inset 3px 0 0 var(--brand-accent)}
.project-combobox-option.is-create{color:var(--brand-accent);font-size:12px;font-weight:850}
.project-combobox-option.is-renaming{padding:4px}
.project-combobox-tag{flex:0 0 auto;color:var(--text-muted);font:800 10px/1.2 var(--body);font-style:normal;letter-spacing:.04em;text-transform:uppercase}
.project-combobox-rename{flex:0 0 auto;min-width:30px;min-height:30px;padding:0;border:1px solid transparent;background:transparent;color:var(--text-muted);font-size:13px;cursor:pointer}
.project-combobox-rename:hover{border-color:var(--line-2);color:var(--brand-accent)}
.project-combobox-rename-input{width:100%;min-height:34px;padding:6px 8px;border:1px solid var(--brand-accent);background:var(--surface);color:var(--text);font-size:13px}
.project-combobox-empty{padding:10px 8px;color:var(--text-muted);font-size:12px}
.project-combobox-guidance{padding:10px 8px;color:var(--text-muted);font-size:12px;line-height:1.45;border-top:1px solid var(--line-2)}

/* Q26.4 (DUN-2968): the client's category combobox. Same shape and the same
   z-index reasoning as the project combobox above — it mounts in the
   one-at-a-time card and in a Full list cell, and its popup has to clear the
   ledger's sticky header. Named apart from .pending-* on purpose: this is the
   control, not the journey layout, exactly like the block above. */
.client-category-combobox,.client-vendor-combobox{position:relative;display:grid;gap:6px;min-width:0}
/* The wrapper is a div, not a label (see clientCategoryComboboxHtml), so the
   caption needs the styling `.pending-answer-form label>span` would have
   given it. */
.client-category-caption,.client-vendor-caption{color:var(--text-muted);font-size:.82rem;font-weight:750}
/* DUN-2979: same reasoning as .client-category-caption above — the one-at-a-time
   card's project field wraps in a <div>, not a <label>, so it needs its own caption
   styling instead of relying on .pending-answer-form label>span. */
.project-combobox-field{display:grid;gap:6px}
.project-combobox-caption{color:var(--text-muted);font-size:.82rem;font-weight:750}
.client-category-input,.client-vendor-input{width:100%;min-width:0}
.client-category-hint,.client-vendor-hint{color:var(--text-muted);font-size:11px;font-weight:750}
.client-category-list,.client-vendor-list{position:absolute;top:100%;left:0;z-index:40;display:grid;align-content:start;width:max(100%,240px);max-height:290px;margin:3px 0 0;padding:4px;overflow:auto;border:1px solid var(--line-2);background:var(--surface);box-shadow:0 22px 48px -24px var(--glass-shadow);list-style:none}
.client-category-list[hidden],.client-vendor-list[hidden]{display:none}
.client-category-option,.client-vendor-option{display:grid;gap:1px;min-height:40px;padding:6px 8px;cursor:pointer}
.client-category-option strong,.client-vendor-option strong{overflow:hidden;font-size:13px;text-overflow:ellipsis;white-space:nowrap}
.client-category-option small,.client-vendor-option small{overflow:hidden;color:var(--text-muted);font-size:11px;text-overflow:ellipsis;white-space:nowrap}
.client-category-option:hover,.client-category-option.is-active,.client-vendor-option:hover,.client-vendor-option.is-active{background:var(--accent-soft)}
.client-category-option.is-active,.client-vendor-option.is-active{box-shadow:inset 3px 0 0 var(--brand-accent)}
.client-vendor-option.is-proposal{color:var(--brand-accent)}
.client-category-empty,.client-vendor-empty{padding:10px 8px;color:var(--text-muted);font-size:12px}
/* pending block start */
/* Client confirmation journey: a deliberate one-card flow on phones instead
   of a long technical form stack.

   DUN-2866 / D22.2: every ".pending-" rule in the app lives in this one
   contiguous block, delimited by the two marker comments below. Two earlier
   changes (the original journey/ledger build and a later "CLIENT MOBILE"
   pass) had each defined an overlapping chunk of .pending-* selectors in a
   *different* part of this file. Duplicate selectors at equal specificity
   are decided by source order, not by which change looks more specific — so
   whichever block physically came last in the file quietly won every tie,
   regardless of which one was actually meant to. That is what made the
   mobile card's big clamp() type (below, .pending-transaction-focus) lose to
   a plain 1.05rem, and the flags fieldset's "1 column on a phone" rule lose
   to a later "2 columns" rule meant for tablets.
   The fix is ordering, not specificity: the generic/base declaration for a
   given element is written first, its more-specific override right after
   (so the override wins ties by simply being last), and breakpoints run
   wide-to-narrow below that, same convention as the rest of this file. No
   !important is used to force a winner.
   tests/test_confirmations_workspace_ui.py greps the whole file for
   ".pending-" and fails the build if a match turns up outside this block. */

.pending-page{max-width:920px;margin:0 auto}
.pending-page h1:focus{outline:none}
/* M31: slimmed. The hero names the screen; the block under it names the
   work. Two display-size headings in a row made the second one, the one that
   actually says how much is waiting, land below the fold on a phone. */
.pending-hero{margin-bottom:16px;padding:14px 0 12px;border-bottom:1px solid var(--line)}
.pending-hero>span{color:var(--brand-accent);font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}
.pending-hero h1{margin:6px 0 6px;font-size:clamp(1.45rem,5vw,1.95rem);letter-spacing:-.03em}
.pending-hero p{color:var(--text-muted);font-size:.92rem;line-height:1.5}
.pending-independent-context{display:grid;grid-template-columns:150px minmax(0,1fr);gap:20px;align-items:start;margin:0 0 22px;padding:16px 18px;border:1px solid var(--line);border-left:4px solid var(--brand-accent);background:var(--ever-soft)}
.pending-independent-context>span{padding-top:2px;color:var(--brand-accent);font-size:.7rem;font-weight:850;letter-spacing:.12em}
.pending-independent-context div{display:grid;gap:4px}.pending-independent-context strong{color:var(--text);font-size:.95rem}.pending-independent-context small{color:var(--text-muted);font-size:.84rem;line-height:1.45}
.pending-card-list{display:grid;gap:12px}
/* M32: the old-email notice. Same left-rule idiom as the scope note above,
   on the warning token rather than the accent, so it reads as "something
   about your link" and never competes with the open-work block under it. */
.pending-stale-link{display:grid;grid-template-columns:150px minmax(0,1fr);gap:20px;align-items:start;margin:0 0 18px;padding:14px 18px;border:1px solid var(--line);border-left:4px solid var(--warning);background:var(--warn-soft)}
.pending-stale-link>span{padding-top:2px;color:var(--warning);font-size:.7rem;font-weight:850;letter-spacing:.12em}
.pending-stale-link>div{display:grid;gap:4px}
.pending-stale-link strong{color:var(--text);font-size:.95rem}
.pending-stale-link small{color:var(--text-muted);font-size:.84rem;line-height:1.45}
/* M31 (DUN-3011): the open work, first and large. This replaced
   .pending-batches, an 18px-padding flex row that rendered at the FOOT of
   this landing, under the scope note, the track record dashboard and the
   receipts card. The card carries what somebody needs in order to decide to
   start: how much is left, how far in they already are, how long it has been
   waiting, and one full-height button. Same left-rule idiom and same
   escalation ceiling as .review-alert, so the two read as one system. */
.pending-open{margin:0 0 22px}
.pending-open-head{display:grid;gap:6px;margin-bottom:14px}
.pending-open-head>span{color:var(--brand-accent);font:900 11px/1.2 var(--body);letter-spacing:.14em;text-transform:uppercase}
.pending-open-head h2{margin:0;color:var(--text);font:800 clamp(1.5rem,4vw,2.1rem)/1.1 var(--display);letter-spacing:-.03em}
.pending-open-head p{margin:0;max-width:66ch;color:var(--text-muted);font-size:.9rem;line-height:1.5}
.pending-open.is-clear .pending-open-head>span{color:var(--positive)}
.pending-open-list{display:grid;gap:14px}
.pending-open-card{display:grid;grid-template-columns:minmax(0,1fr) 244px;gap:20px 26px;align-items:center;
  padding:22px 24px;border:1px solid var(--line);border-left:5px solid var(--brand-accent);background:var(--surface)}
.pending-open-card.is-overdue{border-left-color:var(--warning)}
.pending-open-card.is-done{border-left-color:var(--line-2)}
.pending-open-card>div{display:grid;gap:9px;min-width:0}
.pending-open-month{color:var(--brand-accent);font:900 .72rem/1.2 var(--body);letter-spacing:.14em;text-transform:uppercase}
.pending-open-card>div>strong{color:var(--text);font:750 1.3rem/1.25 var(--display);letter-spacing:-.02em}
.pending-open-card.is-done>div>strong{color:var(--text-muted);font-size:1.05rem}
.pending-open-meta{display:flex;flex-wrap:wrap;gap:5px 14px;color:var(--text-muted);font:650 .82rem/1.3 var(--body)}
.pending-open-card.is-waiting .pending-open-age,
.pending-open-card.is-overdue .pending-open-age{padding:2px 8px;background:var(--warn-soft);color:var(--warning);font-weight:750}
.pending-open-track{height:8px;overflow:hidden;background:var(--line)}
.pending-open-track>i{display:block;height:100%;background:var(--brand-accent)}
.pending-open-actions{display:grid;gap:8px;justify-items:stretch}
.pending-open-actions .btn{width:100%;min-height:52px;font-size:1rem}
.pending-batch-label{display:block;margin-top:2px;color:var(--text-muted);font-size:.8rem}
.pending-back{min-height:44px;margin-bottom:10px;border:0;background:transparent;color:var(--brand-accent);font-weight:750}
.pending-loading{padding:40px 0;color:var(--text-muted);font-size:1rem}

/* K23.2 (DUN-2868): "Minhas confirmações", the client's own dashboard at the
   top of this landing. Visually a cousin of the admin desk's
   .confirmation-metrics strip (one bordered row of KPI cells), deliberately
   NOT the same classes: that strip is desk furniture sitting on the admin
   theme, and this one has to hold up inside the client shell, on a phone,
   under the tab bar, in both appearances. Every colour here is a token, so
   dark mode and the per-company overrides at the bottom of this file resolve
   it without a second rule.
   The panels below the KPIs (Now / Team / History) share one row grammar:
   a head line (name, optional aside, count) over a thin proportional bar. */
.pending-summary{margin:0 0 24px}
.pending-summary-head{display:grid;gap:6px;margin-bottom:14px}
.pending-summary-head>span{color:var(--brand-accent);font:800 11px/1.2 var(--body);letter-spacing:.14em}
.pending-summary-head h2{margin:0;font:800 clamp(22px,3.4vw,30px)/1.05 var(--display);letter-spacing:-.03em}
.pending-summary-head p{margin:0;max-width:70ch;color:var(--text-muted);font-size:.92rem;line-height:1.5}
.pending-summary-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid var(--line);background:var(--surface)}
.pending-summary-card{display:grid;align-content:start;gap:8px;min-width:0;padding:16px 18px;border-right:1px solid var(--line)}
.pending-summary-card:last-child{border-right:0}
.pending-summary-card>span{color:var(--text-muted);font:750 11px/1.25 var(--body);letter-spacing:.08em;text-transform:uppercase}
.pending-summary-card>strong{color:var(--text);font:800 clamp(26px,3vw,32px)/1 var(--display);font-variant-numeric:tabular-nums}
.pending-summary-card>small{color:var(--text-muted);font-size:.8rem;line-height:1.45}
/* The "no answers yet" state is a sentence, not a number: it must never be
   set in the KPI's display size, and must never be faked as a 0. */
.pending-summary-card.is-waiting>strong{color:var(--text-muted);font:750 .95rem/1.35 var(--body)}
.pending-summary-bar{height:4px;overflow:hidden;background:var(--line)}
.pending-summary-bar>i{display:block;height:100%;background:var(--brand-accent)}
.pending-summary-panel{margin-top:14px;padding:15px 18px 17px;border:1px solid var(--line);background:var(--surface)}
.pending-summary-panel>header{display:flex;align-items:baseline;justify-content:space-between;gap:14px;margin-bottom:13px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.pending-summary-panel h3{margin:0;font:800 15px/1.2 var(--display);letter-spacing:-.01em}
.pending-summary-panel>header>small{flex:0 0 auto;color:var(--text-muted);font-size:.78rem}
.pending-summary-rows{display:grid;gap:13px}
.pending-summary-row{display:grid;gap:6px;min-width:0}
.pending-summary-row-head{display:flex;align-items:center;gap:9px;min-width:0}
.pending-summary-row-head>strong{overflow:hidden;font-size:.9rem;font-weight:750;text-overflow:ellipsis;white-space:nowrap}
.pending-summary-row-head>em{flex:0 0 auto;color:var(--text-muted);font-size:.78rem;font-style:normal}
.pending-summary-row-head>small{margin-left:auto;flex:0 0 auto;color:var(--text-muted);font:750 .78rem var(--num);white-space:nowrap}
/* The SLA mark is a dot and an aria-label, never a word: this surface tells
   the client how their own queue is aging, it does not scold them for it. */
.pending-summary-sla{width:9px;height:9px;flex:0 0 auto;border-radius:var(--r-round);background:var(--text-muted)}
.pending-summary-sla.is-green{background:var(--positive);box-shadow:0 0 0 3px color-mix(in srgb,var(--positive) 18%,transparent)}
.pending-summary-sla.is-yellow{background:var(--warning);box-shadow:0 0 0 3px color-mix(in srgb,var(--warning) 18%,transparent)}
.pending-summary-sla.is-red{background:var(--negative);box-shadow:0 0 0 3px color-mix(in srgb,var(--negative) 18%,transparent)}
.pending-summary-empty{display:grid;gap:8px;padding:26px 22px;border:1px solid var(--line);border-left:4px solid var(--brand-accent);background:var(--ever-soft)}
.pending-summary-empty h3{margin:0;color:var(--text);font:800 clamp(19px,3vw,24px)/1.15 var(--display);letter-spacing:-.02em}
.pending-summary-empty p{margin:0;max-width:62ch;color:var(--text-muted);font-size:.92rem;line-height:1.55}

.pending-journey{max-width:880px;margin-inline:auto}
.pending-cover{margin-top:18px;padding:clamp(28px,7vw,54px);border:1px solid var(--line);border-left:5px solid var(--brand-accent);background:var(--surface)}
.pending-cover>span{color:var(--brand-accent);font:800 12px/1.2 var(--body);letter-spacing:.14em}
.pending-cover h1{max-width:680px;margin:12px 0;font:800 clamp(34px,6vw,58px)/1 var(--display);color:var(--text)}
.pending-cover>p{max-width:620px;color:var(--text-muted);font-size:17px;line-height:1.5}
.pending-cover-label{margin:2px 0 0;color:var(--text-muted);font-size:.9rem}
.pending-cover-progress{max-width:540px;margin:28px 0}.pending-cover-progress>div:first-child{display:flex;justify-content:space-between;gap:16px;margin-bottom:10px;color:var(--text-muted)}
.pending-progress-track{height:8px;overflow:hidden;background:var(--line)}.pending-progress-track i{display:block;height:100%;background:var(--brand-accent);transition:width .2s ease}
.pending-mode-switch{display:inline-flex;gap:3px;padding:4px;border:1px solid var(--line);background:var(--surface-alt)}
.pending-mode-switch button{min-height:40px;padding:0 15px;border:0;background:transparent;color:var(--text-muted);font-weight:800;cursor:pointer}
.pending-mode-switch button.on{background:var(--surface);color:var(--brand-accent);box-shadow:0 5px 18px -14px var(--glass-shadow)}
.pending-mode-switch button:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.pending-cover .pending-mode-switch{display:flex;width:max-content;margin:0 0 18px}.pending-start{display:block;min-width:220px}
.pending-review-tools{display:flex;justify-content:flex-end;margin:-7px 0 10px}.pending-review-tools .pending-mode-switch button{min-height:34px;font-size:12px}
.pending-journey-bar{display:grid;grid-template-columns:48px minmax(0,1fr) auto;align-items:center;gap:14px;margin-bottom:16px;padding:10px 0;border-bottom:1px solid var(--line)}
.pending-journey-bar>div{display:grid;gap:7px}.pending-journey-bar .pending-progress-track{height:5px}
.pending-close-journey,.pending-card-nav button{min-height:44px;border:0;background:transparent;color:var(--brand-accent);font-weight:800;cursor:pointer}

/* Card mode: .pending-transaction is the plain, generic card shell also used
   for the (currently theoretical) case of a card with no focus treatment;
   .pending-transaction-focus is the DUN-2016 override that always rides
   along with it in practice (see pendingCardHtml in app.js — the two classes
   are applied to the very same <article> together) and is written second on
   purpose, so its clamp() sizing wins over the plain one above whenever both
   set the same property. */
.pending-card-stage{min-width:0}
.pending-transaction{padding:18px;border:1px solid var(--line);background:var(--surface)}
.pending-transaction:focus{outline:3px solid var(--focus);outline-offset:3px}
.pending-transaction>header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.pending-transaction>header span,.pending-transaction>header small{display:block;color:var(--text-muted);font-size:.82rem}
.pending-transaction>header h2{margin:4px 0;font-size:1.05rem;line-height:1.3}
.pending-transaction>header>strong{font:750 1.2rem var(--num);white-space:nowrap}
.pending-transaction-focus{margin:0;padding:clamp(20px,5vw,34px)}
.pending-transaction-focus>header{align-items:flex-start}
.pending-transaction-focus>header h2{font-size:clamp(23px,5vw,34px)}
.pending-transaction-focus>header>strong{font-size:clamp(24px,5vw,38px)}
.pending-needs{padding:12px 0;color:var(--text-muted);font-size:.86rem}
.pending-needs b{color:var(--text)}
/* V21.7 (DUN-2864): the card's own soft-claim and 409-conflict banners —
   a left-border warning treatment, so the one-at-a-time mode reads as one
   visual language. (The treatment used to be shared with the Insurance /
   Other detail box, which M29 deleted along with the rest of Purpose.) */
.pending-card-claim,.pending-card-conflict{margin:0 0 12px;padding:10px 12px;border-left:3px solid var(--warning);background:var(--warn-soft);color:var(--warning)}
.pending-card-claim{font-size:.82rem;font-weight:750}
.pending-card-conflict{font-size:.86rem;font-weight:800}

.pending-answer-form{display:grid;gap:14px}
.pending-answer-form>label{display:grid;gap:6px}
.pending-answer-form label>span,.pending-answer-form legend{color:var(--text-muted);font-size:.82rem;font-weight:750}
.pending-answer-form select,.pending-answer-form textarea,.pending-answer-form input[type=file],.pending-answer-form input[type=text]{width:100%;min-height:46px;padding:10px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font-size:1rem}
/* .pending-new-project was already unreachable before this consolidation:
   the markup it was written for used a different class name, and M29 deleted
   that markup outright with the rest of Purpose. Removed here rather than
   kept as a comment about a rule nothing can match. */
.pending-answer-form input[type=checkbox]{width:20px;height:20px;accent-color:var(--brand-accent)}
/* This fieldset's base is intentionally a wrapping flex row of chips, not a
   grid: two short checkboxes ("Personal expense" / "Don't recognize") read
   better as pills than as two forced-equal columns, and it is what already
   renders today. Width-specific column counts only kick in below (980px:
   2 columns; 600px: back to 1, since two pills rarely both fit a phone). */
.pending-answer-form fieldset{display:flex;flex-wrap:wrap;gap:8px;padding:12px;border:0}
.pending-answer-form fieldset legend{width:100%;margin-bottom:2px}
.pending-answer-form fieldset label{min-height:44px;display:flex;align-items:center;gap:8px;padding:8px 11px;border:1px solid var(--line);background:var(--surface-alt);font-weight:700}
.pending-answer-form>.pending-approval-check{grid-template-columns:auto 1fr;align-items:center;gap:12px;padding:14px 16px;border:2px solid var(--brand-accent);background:color-mix(in srgb,var(--brand-accent) 10%,var(--surface))}.pending-approval-check span{display:grid;gap:3px}.pending-approval-check span strong{color:var(--text);font-size:1rem}.pending-approval-check span small{color:var(--text-muted);font-weight:600;line-height:1.35}
.pending-answered{padding:12px;border-left:3px solid var(--positive);background:var(--pos-soft);color:var(--positive);font-weight:750}


/* V24.1 (DUN-2870): the receipt drop target. One component, two homes — a
   column in the Full list and a field on the one-at-a-time card — so the
   sizing is written against the space it gets, not against a fixed width. */
.pending-receipt-control{display:grid;gap:6px}
.pending-receipt-control-label{color:var(--text-muted);font-size:.82rem;font-weight:750}
.pending-receipt-drop{position:relative;display:grid;gap:6px}.pending-receipt-drop>*{min-width:0}
.pending-receipt-input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
.pending-receipt-zone{display:grid;justify-items:center;gap:3px;min-height:76px;padding:10px 10px 11px;border:1.5px dashed var(--line-2);background:var(--surface-alt);text-align:center;cursor:pointer;transition:border-color .12s ease,background .12s ease}
.pending-receipt-zone svg{width:20px;height:20px;fill:none;stroke:var(--brand-accent);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.pending-receipt-zone b{color:var(--text);font-size:12px;font-weight:800;line-height:1.25}
.pending-receipt-zone small{color:var(--text-muted);font-size:11px;font-weight:650;line-height:1.3}
.pending-receipt-input:focus-visible+.pending-receipt-zone{outline:2px solid var(--focus);outline-offset:2px}
.pending-receipt-drop.is-dragging .pending-receipt-zone{border-style:solid;border-color:var(--brand-accent);background:var(--accent-soft)}
.pending-receipt-drop.has-file .pending-receipt-zone{border-style:solid;border-color:var(--positive);background:var(--pos-soft)}
.pending-receipt-drop.has-file .pending-receipt-zone svg{stroke:var(--positive)}
.pending-receipt-drop.is-required:not(.has-file) .pending-receipt-zone{border-color:color-mix(in srgb,var(--warning) 62%,transparent)}
.pending-receipt-chosen{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0;padding:6px 6px 6px 9px;border-left:3px solid var(--positive);background:var(--surface);font-size:11px;font-weight:750}
.pending-receipt-chosen span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pending-receipt-chosen button{flex:none;min-width:30px;min-height:30px;border:0;background:transparent;color:var(--negative);font-size:15px;font-weight:900;line-height:1;cursor:pointer}
.pending-receipt-camera{display:none;min-height:44px;align-items:center;justify-content:center;padding:8px 12px;border:1px solid var(--line-2);background:var(--surface);color:var(--brand-accent);font-size:12px;font-weight:850;cursor:pointer}
.pending-receipt-need{color:var(--text-muted);font-size:10.5px;font-weight:700;line-height:1.3}
.pending-receipt-drop.is-required .pending-receipt-need{color:var(--warning)}.pending-receipt-drop.has-file .pending-receipt-need{display:none}
.pending-receipt-attached{display:grid;gap:4px;margin:2px 0 0;padding:0;list-style:none}
.pending-receipt-attached li{display:flex;align-items:center;justify-content:space-between;gap:6px;min-height:34px;padding:4px 6px 4px 9px;border-left:3px solid var(--brand-accent);background:var(--surface-alt);font-size:11px;font-weight:700}
.pending-receipt-attached li span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pending-receipt-attached .pending-receipt-remove{flex:none;min-height:30px;padding:0 4px;font-size:11px}
@media(pointer:coarse){.pending-receipt-camera{display:flex}}
.pending-ledger-receipt{align-content:start}
.pending-receipt-drop.is-tight{gap:4px}.pending-receipt-drop.is-tight .pending-receipt-zone{min-height:62px;padding:8px 6px 9px;gap:2px}.pending-receipt-drop.is-tight .pending-receipt-zone svg{width:17px;height:17px}.pending-receipt-drop.is-tight .pending-receipt-zone b{font-size:11px}.pending-receipt-drop.is-tight .pending-receipt-zone small{font-size:10px}.pending-receipt-drop.is-tight .pending-receipt-need{font-size:10px}
.pending-thread,.pending-receipt-list{margin:14px 0;padding:14px;border:1px solid var(--line);background:var(--surface-alt)}
.pending-thread summary{min-height:44px;display:flex;align-items:center;color:var(--brand-accent);font-weight:800;cursor:pointer}
.pending-thread ol,.pending-receipt-list ul{display:grid;gap:8px;margin:8px 0 0;padding:0;list-style:none}
.pending-thread li{padding:10px 12px;border-left:3px solid var(--brand-accent);background:var(--surface)}
.pending-thread li strong{display:block;font-size:13px}.pending-thread li p{margin:4px 0 0;color:var(--text-muted)}
.pending-receipt-list li{min-height:44px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:7px 10px;background:var(--surface)}
.pending-receipt-remove{min-height:36px;border:0;background:transparent;color:var(--negative);font-weight:800;cursor:pointer}
.pending-save{min-height:50px}.pending-card-nav{display:flex;justify-content:space-between;margin-top:10px}.pending-card-nav button:disabled{opacity:.35;cursor:default}
.pending-complete{min-height:520px;display:grid;place-content:center;justify-items:center;text-align:center;padding:30px}
.pending-complete>span{width:72px;height:72px;display:grid;place-items:center;border-radius:var(--r-round);background:var(--pos-soft);color:var(--positive);font-size:34px;font-weight:900}
.pending-complete h1{margin:18px 0 8px;font-size:42px}.pending-complete p{max-width:560px;margin:0 0 22px;color:var(--text-muted);font-size:17px;line-height:1.5}
.pending-guide-backdrop{position:fixed;inset:0;z-index:140;display:grid;place-items:center;padding:20px;background:color-mix(in srgb,var(--ever-deep) 68%,transparent);backdrop-filter:blur(7px)}
.pending-guide{width:min(590px,100%);max-height:min(760px,calc(100vh - 32px));overflow:auto;padding:clamp(26px,5vw,42px);border-top:6px solid var(--brand-accent);background:var(--surface);box-shadow:0 30px 90px -35px var(--glass-shadow)}
.pending-guide-kicker{color:var(--brand-accent);font-size:11px;font-weight:900;letter-spacing:.15em}.pending-guide h2{margin:10px 0 8px;font:800 clamp(28px,5vw,40px)/1.05 var(--display);letter-spacing:-.035em}.pending-guide>p{margin:0;color:var(--text-muted);line-height:1.5}
.pending-guide ol{display:grid;gap:0;margin:24px 0;padding:0;list-style:none;border-block:1px solid var(--line)}.pending-guide li{display:grid;grid-template-columns:42px 1fr;gap:14px;padding:17px 0;border-bottom:1px solid var(--line)}.pending-guide li:last-child{border-bottom:0}.pending-guide li>b{display:grid;place-items:center;width:34px;height:34px;background:var(--accent-soft);color:var(--brand-accent);font:900 15px var(--num)}.pending-guide li>span{display:grid;gap:4px}.pending-guide li strong{font-size:15px}.pending-guide li small{color:var(--text-muted);font-size:13px;line-height:1.45}.pending-guide-actions{display:flex;justify-content:flex-end}.pending-guide-actions .btn{min-width:210px}

/* The full-list view borrows the visual grammar of a reviewed bank register:
   dense horizontal rules, fixed field columns and one mint completion rail.
   left:50%/translateX(-50%) centers it on ITS CONTAINING BLOCK (<main>, the
   same box .pending-page's own max-width sits inside), and the width is a
   percentage of that same box — not 100vw. 100vw is the viewport's raw
   width, scrollbar included, which (a) can be wider than <main> once a
   sidebar is showing, pushing the centered, oversized box left into the
   sidebar, and (b) is classically wider than the page's actual usable width
   by a scrollbar's worth of pixels, the two ways P6 of the DUN-2866 audit
   found this rule capable of overflowing. */
.main-col>.wrap:has(.pending-ledger){max-width:min(1760px,100%);padding-inline:clamp(16px,1.5vw,30px)}
.pending-ledger{position:relative;left:50%;width:min(1680px,calc(100% - 24px));max-width:none;transform:translateX(-50%)}
.pending-ledger-toolbar{display:grid;grid-template-columns:auto minmax(220px,1fr) auto;align-items:center;gap:18px;margin-bottom:12px;padding:8px 0 14px;border-bottom:1px solid var(--line)}
.pending-ledger-toolbar .pending-back{margin:0}.pending-ledger-toolbar>div:nth-child(2){display:grid;gap:3px}.pending-ledger-toolbar>div:nth-child(2)>small{color:var(--text-muted)}
.pending-ledger-help{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:12px;padding:11px 14px;border-left:4px solid var(--brand-accent);background:var(--accent-soft);font-size:13px}.pending-ledger-help>div{display:grid;gap:3px}.pending-ledger-help>div span{color:var(--text-muted)}
.pending-ledger-group-control{display:flex;align-items:center;gap:9px;flex:0 0 auto;margin:0}.pending-ledger-group-control>span{color:var(--text-muted);font-size:11px;font-weight:850;letter-spacing:.08em;text-transform:uppercase}.pending-ledger-group-control select{min-width:230px;min-height:40px;padding:7px 34px 7px 10px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font-size:12px;font-weight:750}
/* P8 (DUN-2866): the same compact shape as the group control right next to
   it, but hidden above 980px — desktop already sorts by clicking a column
   header, which stops existing once the head goes sr-only below. */
.pending-ledger-sort-control{display:none;align-items:center;gap:9px;flex:0 0 auto;margin:0}.pending-ledger-sort-control>span{color:var(--text-muted);font-size:11px;font-weight:850;letter-spacing:.08em;text-transform:uppercase}.pending-ledger-sort-control select{min-width:230px;min-height:40px;padding:7px 34px 7px 10px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font-size:12px;font-weight:750}
.pending-ledger-table{border:1px solid var(--line);background:var(--surface)}
/* The selection column is the first track shared by the header and every
   row, so checkboxes cannot drift. The full review now includes both the
   required QBO category and the optional Vendor proposal. On a wide screen
   their generous floors (1,601px in total) keep account and vendor names on
   a single readable line rather than turning the register into paragraphs.
   The surrounding 1,680px canvas pays for that density; below 980px the
   existing card layout takes over. A custom property keeps that responsive
   override stronger than the desktop variant without duplicating rows. */
.pending-ledger-table{--pending-ledger-columns:44px minmax(210px,1.3fr) minmax(180px,1.05fr) minmax(180px,1.05fr) minmax(152px,.75fr) minmax(120px,.5fr)}
.pending-ledger-table.has-client-category{--pending-ledger-columns:42px minmax(270px,1.2fr) minmax(300px,1.4fr) minmax(315px,1.45fr) minmax(220px,1fr) minmax(250px,1.15fr) minmax(124px,.56fr)}
.pending-ledger-table.has-client-category.has-client-vendor{--pending-ledger-columns:42px minmax(245px,1.08fr) minmax(250px,1.1fr) minmax(265px,1.18fr) minmax(235px,1.05fr) minmax(205px,.9fr) minmax(235px,1.05fr) minmax(124px,.55fr)}
.pending-ledger-head,.pending-ledger-row{display:grid;grid-template-columns:var(--pending-ledger-columns);gap:0}
.pending-ledger-head{position:sticky;top:var(--client-top-offset,66px);z-index:32;background:var(--ever-deep);color:var(--dunamis-ivory);box-shadow:0 8px 18px -14px var(--glass-shadow)}.pending-ledger-head>[role=columnheader]{min-width:0;border-right:1px solid color-mix(in srgb,var(--dunamis-ivory) 16%,transparent)}.pending-ledger-head>[role=columnheader]:last-child{border-right:0}.pending-ledger-head-plain{display:grid;align-content:center;gap:2px;padding:9px 12px}.pending-ledger-head-plain span{font-size:11px;font-weight:850;letter-spacing:.08em;line-height:1.15;text-transform:uppercase}.pending-ledger-head-plain small{color:color-mix(in srgb,var(--dunamis-ivory) 68%,transparent);font:750 10px var(--num)}.pending-ledger-sort{position:relative;display:grid;align-content:center;justify-items:start;gap:2px;width:100%;min-height:50px;padding:9px 12px;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer}.pending-ledger-sort span{font-size:11px;font-weight:850;letter-spacing:.08em;line-height:1.15;text-transform:uppercase}.pending-ledger-sort small{color:color-mix(in srgb,var(--dunamis-ivory) 68%,transparent);font:750 10px var(--num);letter-spacing:0;text-transform:none}.pending-ledger-sort:focus-visible{background:color-mix(in srgb,var(--brand-accent) 22%,transparent);outline:2px solid var(--brand-accent);outline-offset:-3px}.pending-ledger-sort.is-active{background:color-mix(in srgb,var(--brand-accent) 14%,transparent)}.pending-ledger-sort.is-active::after{content:"";position:absolute;right:12px;bottom:0;left:12px;height:3px;background:var(--brand-accent)}.pending-ledger-head>[role=columnheader]:last-child .pending-ledger-sort{justify-items:end;text-align:right}
@media(hover:hover){.pending-ledger-sort:hover{background:color-mix(in srgb,var(--brand-accent) 22%,transparent)}}
.pending-ledger-group{border-bottom:7px solid var(--surface-alt)}.pending-ledger-group:last-child{border-bottom:0}.pending-ledger-group-head{position:relative;z-index:1;background:color-mix(in srgb,var(--brand-accent) 9%,var(--surface));border-block:1px solid color-mix(in srgb,var(--brand-accent) 28%,var(--line))}.pending-ledger-group:first-child .pending-ledger-group-head{border-top:0}.pending-ledger-group-head>div{display:flex;align-items:center;gap:9px;min-height:42px;padding:8px 12px}.pending-ledger-group-head span{width:9px;height:9px;flex:0 0 auto;border-radius:var(--r-round);background:var(--brand-accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--brand-accent) 14%,transparent)}.pending-ledger-group-head strong{font-size:13px}.pending-ledger-group-head small{margin-left:auto;color:var(--text-muted);font:750 11px var(--num)}.pending-ledger-group .pending-ledger-transaction em{display:none}
.pending-ledger-row{position:relative;align-items:start;border-bottom:1px solid var(--line);background:var(--surface)}.pending-ledger-row:last-child{border-bottom:0}.pending-ledger-row::before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:transparent}.pending-ledger-row:focus-within::before{background:var(--brand-accent)}.pending-ledger-row.is-answered{background:color-mix(in srgb,var(--pos-soft) 58%,var(--surface))}.pending-ledger-row.is-answered::before{background:var(--positive)}
.pending-ledger-row>div,.pending-ledger-row>label{min-width:0;min-height:92px;margin:0;padding:12px;border-right:1px solid var(--line)}.pending-ledger-row>*:last-child{border-right:0}
.pending-ledger-transaction{display:grid;grid-template-columns:30px minmax(0,1fr);gap:8px}.pending-ledger-transaction>b{color:var(--text-muted);font:750 12px var(--num)}.pending-ledger-transaction>span{display:grid;gap:2px;min-width:0}.pending-ledger-transaction small,.pending-ledger-transaction em{color:var(--text-muted);font-size:11px;font-style:normal}.pending-ledger-transaction strong{overflow:hidden;font-size:13px;line-height:1.3;text-overflow:ellipsis;white-space:nowrap}
.pending-ledger-field .pending-ledger-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pending-ledger-row select,.pending-ledger-row input[type=text],.pending-ledger-row textarea,.pending-ledger-row input[type=file]{width:100%;min-height:42px;padding:8px 9px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font-size:13px}.pending-ledger-value{display:block;padding:8px 0;font-size:13px;font-weight:750;line-height:1.4}
.pending-ledger-result{display:grid;justify-items:end;gap:2px;text-align:right}.pending-ledger-result>strong{font:800 14px var(--num)}.pending-ledger-result>small{color:var(--text-muted);font-size:11px}.pending-ledger-result>span{margin-top:5px;color:var(--positive);font-size:11px;font-weight:850}.pending-ledger-result details{margin-top:4px}.pending-ledger-result summary{color:var(--brand-accent);font-size:11px;font-weight:850;cursor:pointer;list-style:none}.pending-ledger-result summary::-webkit-details-marker{display:none}.pending-ledger-result summary::before{content:"+ ";}.pending-ledger-result details[open] summary::before{content:"− "}
.pending-ledger-more{position:absolute;right:0;z-index:12;display:grid;gap:12px;width:min(440px,calc(100% - 56px));margin-top:8px;padding:16px;border:1px solid var(--line-2);background:var(--surface);box-shadow:0 20px 48px -24px var(--glass-shadow);text-align:left}.pending-ledger-more>label{display:grid;gap:5px}.pending-ledger-more label>span,.pending-ledger-more legend{color:var(--text-muted);font-size:11px;font-weight:800}.pending-ledger-more fieldset{display:grid;gap:7px;margin:0;padding:0;border:0}.pending-ledger-more fieldset label{display:flex;align-items:center;gap:7px;font-size:12px}.pending-ledger-more input[type=checkbox]{width:18px;height:18px}
.pending-ledger-footer{position:sticky;bottom:18px;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:12px;padding:14px 16px;border:1px solid color-mix(in srgb,var(--brand-accent) 36%,var(--line));border-left:5px solid var(--brand-accent);background:var(--surface);box-shadow:0 18px 50px -28px var(--glass-shadow)}.pending-ledger-footer>div{display:grid;gap:3px}.pending-ledger-footer small{color:var(--text-muted)}.pending-ledger-footer .btn{min-width:170px}
.pending-autosave-status{display:flex;align-items:center;gap:7px;margin:0;color:var(--brand-primary);font-size:12px;font-weight:800}.pending-autosave-status::before{content:"✓";display:grid;place-items:center;width:18px;height:18px;border-radius:var(--r-round);background:var(--pos-soft);color:var(--positive);font-size:12px}.pending-autosave-status[data-status=saving]::before{content:"";border:2px solid var(--brand-accent);border-top-color:transparent;background:transparent;animation:pending-bulk-spin .7s linear infinite}.pending-autosave-status[data-status=error]{color:var(--negative)}.pending-autosave-status[data-status=error]::before{content:"!";background:var(--neg-soft);color:var(--negative)}.pending-answer-form.is-autosaving{opacity:.72}
.pending-ledger-footer>div>strong:focus{outline:none}
/* V21.6 (DUN-2863): selection column, filter bar, per-row outcome and the
   bulk bar. The bar is a second sticky floor ABOVE the Save & Exit footer
   (bottom:104px clears the footer's 18px + its ~76px), never a replacement
   for it: applying a column and finishing the review are different acts. */
.pending-ledger-select{display:flex;align-items:flex-start;justify-content:center;min-width:0;padding:12px 6px}
.pending-ledger-head .pending-ledger-select{align-items:center;padding:0 6px}
.pending-ledger-select input[type=checkbox]{width:18px;height:18px;flex:0 0 auto;accent-color:var(--brand-accent);cursor:pointer}
.pending-ledger-head .pending-ledger-select input[type=checkbox]{accent-color:var(--dunamis-ivory)}
.pending-ledger-select input[type=checkbox]:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.pending-ledger-tools{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px}
.pending-ledger-select-all-compact{display:none;align-items:center;gap:8px;margin:0;color:var(--text-muted);font-size:12px;font-weight:750}
.pending-ledger-select-all-compact input[type=checkbox]{width:18px;height:18px;accent-color:var(--brand-accent)}
.pending-ledger-search{position:relative;display:flex;align-items:center;flex:1 1 250px;min-width:0;margin:0}
.pending-ledger-search>i{position:absolute;left:12px;color:var(--text-muted);font-size:15px;font-style:normal;pointer-events:none}
.pending-ledger-search input{width:100%;min-height:42px;padding:8px 36px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font-size:13px}
.pending-ledger-search input::-webkit-search-cancel-button{display:none}
.pending-ledger-search-clear{position:absolute;right:5px;min-width:30px;min-height:30px;border:0;background:transparent;color:var(--text-muted);font-size:17px;line-height:1;cursor:pointer}
@media(hover:hover){.pending-ledger-search-clear:hover{color:var(--brand-accent)}}
.pending-ledger-search-clear[hidden]{display:none}
.pending-ledger-count{margin:0;color:var(--text-muted);font:750 12px var(--num)}
.pending-ledger-count.is-selection{color:var(--brand-accent);font-weight:850}
.pending-ledger-count:focus{outline:none}
.pending-ledger-tools .pending-ledger-group-control,.pending-ledger-tools .pending-ledger-sort-control{margin-left:auto}
.pending-ledger-empty{padding:28px 16px;text-align:center}
.pending-ledger-empty>p{margin:0;color:var(--text-muted);font-size:13px}
/* The alert paragraph is now the row's last child, so the "no border on the
   last column" rule no longer lands on the amount cell. */
.pending-ledger-row .pending-ledger-result{border-right:0}
.pending-ledger-row.is-selected{background:var(--accent-soft)}
.pending-ledger-row.is-selected::before{background:var(--brand-accent)}
.pending-ledger-row[data-pending-row-status=conflict]{background:var(--warn-soft)}
.pending-ledger-row[data-pending-row-status=conflict]::before{background:var(--warning)}
.pending-ledger-row[data-pending-row-status=error]{background:var(--neg-soft)}
.pending-ledger-row[data-pending-row-status=error]::before{background:var(--negative)}
/* No `forwards`: the flash has to END on whatever background the row
   normally has (mint once it is answered), so nothing has to un-paint it. */
.pending-ledger-row[data-pending-row-status=ok]{animation:pending-row-flash 2.2s ease-out 1}
@keyframes pending-row-flash{0%,40%{background:var(--pos-soft)}100%{background:transparent}}
.pending-ledger-row-alert{grid-column:1/-1;margin:0;padding:8px 12px 10px;border-top:1px dashed color-mix(in srgb,var(--warning) 45%,transparent);color:var(--warning);font-size:12px;font-weight:800}
.pending-ledger-row[data-pending-row-status=error] .pending-ledger-row-alert{border-top-color:color-mix(in srgb,var(--negative) 45%,transparent);color:var(--negative)}
.pending-ledger-row-alert:focus{outline:2px solid var(--focus);outline-offset:-2px}
.pending-ledger-bulk{position:sticky;bottom:104px;z-index:33;display:grid;gap:12px;margin-top:12px;padding:14px 16px;border:1px solid color-mix(in srgb,var(--brand-accent) 46%,var(--line));border-left:5px solid var(--brand-accent);background:var(--surface);box-shadow:0 18px 50px -26px var(--glass-shadow)}
.pending-ledger-bulk[hidden]{display:none}
.pending-ledger-bulk>header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.pending-ledger-bulk>header>div{display:grid;gap:3px}
.pending-ledger-bulk>header small{color:var(--text-muted);font-size:12px}
.pending-bulk-dismiss{min-width:32px;min-height:32px;flex:0 0 auto;border:0;background:transparent;color:var(--text-muted);font-size:18px;line-height:1;cursor:pointer}
@media(hover:hover){.pending-bulk-dismiss:hover{color:var(--brand-accent)}}
.pending-ledger-bulk-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));align-items:start;gap:12px}
.pending-ledger-bulk-fields>label,.pending-bulk-project,.pending-bulk-category{display:grid;gap:5px;min-width:0;margin:0}
.pending-ledger-bulk-fields>label>span,.pending-bulk-project>span,.pending-bulk-category>span{color:var(--text-muted);font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase}
.pending-ledger-bulk select,.pending-ledger-bulk input[type=text]{width:100%;min-height:42px;padding:8px 9px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font-size:13px}
.pending-ledger-bulk input[hidden]{display:none}
/* A dropdown anchored to a bar that lives at the bottom of the screen has to
   open upward. The 820px sheet below replaces this outright. */
.pending-bulk-project .project-combobox-list,.pending-bulk-category .client-category-list{top:auto;bottom:100%;margin:0 0 3px}
.pending-ledger-bulk-actions{display:flex;justify-content:flex-end}
.pending-ledger-bulk-actions .btn{min-width:230px}
.pending-ledger-bulk.is-busy{opacity:.72}
.pending-ledger-bulk.is-busy .pending-ledger-bulk-actions .btn::before{content:"";display:inline-block;width:13px;height:13px;margin-right:9px;border:2px solid currentColor;border-top-color:transparent;border-radius:var(--r-round);vertical-align:-2px;animation:pending-bulk-spin .7s linear infinite}
@keyframes pending-bulk-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){
  .pending-ledger-row[data-pending-row-status=ok]{animation:none;background:var(--pos-soft)}
  .pending-ledger-bulk.is-busy .pending-ledger-bulk-actions .btn::before{animation:none}
  .pending-autosave-status[data-status=saving]::before{animation:none}
}

@media(max-width:980px){
  .pending-ledger{left:auto;width:auto;transform:none}.pending-ledger-toolbar{grid-template-columns:auto 1fr}.pending-ledger-toolbar .pending-mode-switch{grid-column:1/-1;justify-self:end}.pending-ledger-help{align-items:stretch;flex-direction:column}.pending-ledger-group-control{justify-content:space-between}.pending-ledger-group-control select{min-width:min(270px,70vw)}.pending-ledger-sort-control{display:flex;justify-content:space-between}.pending-ledger-sort-control select{min-width:min(270px,70vw)}.pending-ledger-body{display:grid;gap:12px;padding:12px;background:var(--surface-alt)}
  /* P8 (DUN-2866): the head still carries the real columnheader roles the
     row cells reference — display:none would have pulled it (and them) out
     of the accessibility tree entirely, leaving a role="table" with no
     headers at all. sr-only keeps it in that tree, readable by a screen
     reader moving cell by cell, while it stays invisible on screen (the
     per-row [data-label] a few lines down is what sighted mobile users read
     instead). The sort buttons inside it are still keyboard-reachable this
     way, which is a fair trade given .pending-ledger-sort-control above is
     now the visible, intended way to sort on this layout. */
  .pending-ledger-head{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
  .pending-ledger-group{display:grid;gap:0;border:1px solid var(--line)}.pending-ledger-group-head{border-top:0}.pending-ledger-group .pending-ledger-row{border-inline:0}.pending-ledger-row{grid-template-columns:1fr 1fr;border:1px solid var(--line)}.pending-ledger-row>div,.pending-ledger-row>label{border-right:0;border-bottom:1px solid var(--line)}.pending-ledger-field::before{content:attr(data-label);display:block;margin-bottom:6px;color:var(--text-muted);font-size:11px;font-weight:850;letter-spacing:.06em;text-transform:uppercase}.pending-ledger-transaction{grid-column:1/-1}.pending-ledger-receipt{grid-column:1/-1}.pending-ledger-result{align-content:center}
  /* the receipt cell is full width here, so the ledger's tight typography
     (written for a 130px column) goes back to the card's own scale */
  .pending-receipt-drop.is-tight{gap:6px}
  .pending-receipt-drop.is-tight .pending-receipt-zone{min-height:96px;padding:14px;gap:3px}
  .pending-receipt-drop.is-tight .pending-receipt-zone svg{width:20px;height:20px}
  .pending-receipt-drop.is-tight .pending-receipt-zone b{font-size:13px}
  .pending-receipt-drop.is-tight .pending-receipt-zone small{font-size:12px}
  .pending-receipt-drop.is-tight .pending-receipt-need{font-size:11.5px}.pending-ledger-row>*:last-child{border-bottom:0}
  /* V21.6: rows are cards here and the column header is gone, so the
     checkbox leaves the grid for the card's own corner and the labelled
     "select all visible" in the tools row takes over from the header one. */
  /* Two classes, not `.pending-ledger-select` alone: the row's own
     `>div{min-height:78px;padding:11px 12px}` outranks a single class and
     would leave a 42x78 invisible block sitting over the description. */
  .pending-ledger-row>.pending-ledger-select,.pending-ledger-head>.pending-ledger-select{position:absolute;top:6px;right:8px;z-index:2;min-height:0;padding:0;border:0}
  .pending-ledger-transaction{padding-right:40px}
  .pending-ledger-select-all-compact{display:flex}
  .pending-ledger-tools{align-items:stretch;flex-direction:column}
  .pending-ledger-tools .pending-ledger-group-control,.pending-ledger-tools .pending-ledger-sort-control{margin-left:0}
  .pending-ledger-bulk-fields{grid-template-columns:1fr}
  /* K23.2: 2x2. The border bookkeeping is rewritten rather than patched —
     at four columns only the last cell drops its right border, at two it is
     every second cell, and the first row grows a bottom rule. */
  .pending-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .pending-summary-card,.pending-summary-card:last-child{border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
  .pending-summary-card:nth-child(2n){border-right:0}
  .pending-summary-card:nth-last-child(-n+2){border-bottom:0}
}
@media(max-width:820px){
  /* DUN-2866 (P3/P4/P5): the client tab bar (.client-shell .sidebar .views,
     defined further down at this same 820px cut) is a real 68px bar floating
     `max(10px, env(safe-area-inset-bottom))` off the bottom edge — never
     84px, the number every consumer below used to fall back to because
     nothing ever actually defined these two variables. --client-top-offset
     is the fixed topbar's own real bottom edge in this layout (measured:
     min-height:56px + its 8px/8px padding renders at 64px tall, 8px down
     from the top — see .client-shell .main-col>.topbar below). Both
     compensations move to the tab bar's own 820px cut instead of staying
     boxed into 600px: the bar exists for the entire 601–820px stretch too
     (tablet portrait, phone landscape), and nothing here was clearing it
     there before. */
  .client-shell{
    --client-bottom-nav-height:calc(68px + max(10px,env(safe-area-inset-bottom)));
    --client-top-offset:72px;
  }
  .pending-page.pending-journey{padding:12px 16px calc(var(--client-bottom-nav-height,78px) + 24px)}
  .pending-journey-bar{position:sticky;top:var(--client-top-offset,72px);z-index:4;background:var(--surface-page)}
  /* Both of these were `position:sticky`, matching .pending-ledger-bulk's
     own pre-P9 desktop rule — but #scroller carries `padding-bottom:78px`
     below 820px (see #scroller two rules up), and a bottom-anchored sticky
     box inside a scroll container padded on that same edge sticks at its
     final position from scrollTop:0 instead of only near the true end of
     content (confirmed live: identical behavior with a bare test sticky div
     appended in the same spot). .pending-ledger-bulk already dodges this by
     switching to `fixed` here; these two now match it. */
  .pending-card-nav{position:fixed;inset:auto 12px calc(var(--client-bottom-nav-height,78px) + 4px);z-index:4;padding:6px 10px;background:var(--surface);border:1px solid var(--line)}
  .pending-ledger-toolbar{position:sticky;top:var(--client-top-offset,72px);z-index:9;background:var(--surface-page)}
  .pending-ledger-footer{position:fixed;inset:auto 12px calc(var(--client-bottom-nav-height,78px) + 6px)}
  .pending-ledger-more{position:fixed;inset:auto 12px calc(var(--client-bottom-nav-height,78px) + 12px);width:auto;max-height:58vh;overflow:auto}
  .project-combobox-list,.client-category-list,.client-vendor-list{position:fixed;inset:auto 12px calc(var(--client-bottom-nav-height,78px) + 12px);width:auto;max-height:58vh}
  /* Same sheet the bulk bar always used below 600px: it now covers Save &
     Exit for the whole 601–820px stretch too, not only true phones — its
     own dismiss control is the way back regardless of width. */
  .pending-ledger-bulk{position:fixed;z-index:20;inset:auto 12px calc(var(--client-bottom-nav-height,78px) + 6px);max-height:66vh;overflow:auto;margin:0}
  /* The rest of this block is tablet-only tightening carried over verbatim
     from the pre-consolidation duplicate (P9) — none of it fights DUN-2016,
     it only trims spacing/columns for a mid-size viewport. */
  .pending-independent-context{grid-template-columns:1fr;gap:7px;padding:14px 16px}
  .pending-stale-link{grid-template-columns:1fr;gap:7px;padding:14px 16px}
  .pending-open-card{grid-template-columns:1fr;gap:16px;padding:20px 18px}
  .pending-open-actions .btn{min-height:48px}
  .pending-answer-form>.btn{width:100%}
  .pending-answer-form fieldset{display:grid;grid-template-columns:1fr 1fr}
  .pending-answer-form fieldset label{font-size:.86rem}
}
@media(max-width:600px){
  .pending-cover{margin-top:6px;padding:28px 22px}.pending-cover h1{font-size:36px}.pending-start{width:100%}
  .pending-close-journey{font-size:13px}.pending-transaction-focus{padding:20px 16px}
  .pending-transaction-focus>header{display:grid;grid-template-columns:1fr}.pending-transaction-focus>header>strong{grid-row:1;justify-self:start;margin-bottom:12px}
  .pending-answer-form fieldset{grid-template-columns:1fr}
  .pending-mode-switch{width:100%}.pending-mode-switch button{flex:1;padding-inline:8px}.pending-review-tools{margin-top:-6px}.pending-guide-backdrop{align-items:end;padding:0}.pending-guide{width:100%;max-height:92vh;padding:26px 20px;border-top-width:5px}.pending-guide-actions .btn{width:100%}
  .pending-ledger{padding-inline:12px!important}.pending-ledger-toolbar{margin-inline:-12px;padding:8px 12px;background:var(--surface-page)}.pending-ledger-help{align-items:flex-start;flex-direction:column}.pending-ledger-body{margin-inline:-1px;padding:8px}
  .pending-ledger-row{grid-template-columns:1fr}.pending-ledger-transaction{grid-column:1}.pending-ledger-result{justify-items:start;text-align:left}.pending-ledger-footer{align-items:stretch;flex-direction:column}.pending-ledger-footer .btn{width:100%}
  .project-combobox-option,.client-category-option,.client-vendor-option{min-height:46px}
  .pending-ledger-bulk-actions .btn{width:100%;min-width:0}
  /* K23.2: one column on a phone. Every cell loses its right border and
     keeps a bottom rule except the last, so the strip reads as one stacked
     card rather than four floating boxes. */
  .pending-summary-grid{grid-template-columns:1fr}
  .pending-summary-card,.pending-summary-card:last-child,.pending-summary-card:nth-child(2n){border-right:0;border-bottom:1px solid var(--line)}
  .pending-summary-card:last-child{border-bottom:0}
  .pending-summary-panel{padding:14px 15px 16px}
  .pending-summary-panel>header{align-items:flex-start;flex-direction:column;gap:3px}
  /* The count keeps its own line rather than being squeezed against a
     truncated name on a 375px screen. */
  .pending-summary-row-head{flex-wrap:wrap;gap:4px 9px}
  .pending-summary-row-head>strong{max-width:100%}
}
@media(max-width:820px){
  /* iOS Safari zooms the viewport when a focused control computes under
     16px. These selectors out-specify the broad mobile input rule declared
     later in the file, so they need their own 16px declaration; it lives
     here because every .pending-* rule must stay inside this block. Same
     820px floor as the general mobile block near the end of the file. */
  .pending-ledger-group-control select,
  .pending-ledger-sort-control select,
  .pending-ledger-row select,.pending-ledger-row input[type=text],.pending-ledger-row textarea,.pending-ledger-row input[type=file],
  .pending-ledger-search input,
  .pending-ledger-bulk select,.pending-ledger-bulk input[type=text]{font-size:16px}
}
/* end pending block */

/* ---- demo-co: proof that a company override changes the theme without touching
   any rule below. Set <html data-company="demo-co"> to preview it. Not a real client. ---- */
:root[data-company="demo-co"]{
  --ever:#7C5CFC; --ever-dark:#B7A6FF; --ever-deep:#211A3D; --ever-mid:#332A5C; --ever-soft:#EFEBFE;
  --brass:#E08A2B; --brass-soft:#FBEFDD; --brass-line:#F2D6A8;
  --brand-gold:#B7A6FF; --brand-gold-ink:#1A1430;
  --d1:#7C5CFC; --d2:#1E2233; --d3:#E08A2B; --d4:#12B3A6;
}

/* Explicit appearances override only environmental neutrals and status colors.
   Company brand primitives remain intact and flow through the semantic aliases. */
:root[data-appearance="light"]{
  /* Clareza: the warm beige (#F9F9F7) Fathom section variant */
  --paper:#F9F9F7;--card:#FFFFFF;--card-2:#F1F1ED;
  --ink:#10213B;--ink-2:#484B67;--ink-3:#6E7484;--ink-3-on-paper:#6E7484;
  --line:#E4E4DE;--line-2:#D3D5DE;
  --ever:#228370;--ever-dark:#56D8B8;--ever-deep:#071C17;--ever-mid:#123B31;--ever-soft:#E2F7F0;
  --brass:#484B67;--brass-soft:#EDEDE9;--brass-line:#D0D0C9;
  --pos:#3E7A28;--pos-soft:#E7F3DC;
  --neg:#CE3B3B;--neg-soft:#FBE9E7;
  --warn:#A5700F;--warn-soft:#FBF1DA;
  --info-soft:#E8F1F8;
  --d1:#6FA243;--d2:#4CA3DA;--d3:#7B4EA3;--d4:#F1953A;
  --tooltip-bg:#10213B;--tooltip-text:#F7FAFB;
  --selection-bg:#CFF5EA;
  --shadow:0 4px 8px rgba(16,33,59,.05);
  --shadow-float:0 10px 30px -18px rgba(16,33,59,.2),inset 0 1px rgba(255,255,255,.7);
  --glass-bg:rgba(255,255,255,.86);--glass-border:rgba(16,33,59,.09);
  --glass-highlight:rgba(255,255,255,.96);--glass-shadow:rgba(16,33,59,.14);--focus:#228370;
  --on-accent:#F7FAFB;--on-negative:#F7FAFB;--on-warning:#F7FAFB;
  --theme-meta:#F9F9F7;
  color-scheme:light;
}

:root[data-appearance="contrast"]{
  /* Contraste: the very-dark-green (#071C17) Fathom band as a full theme */
  --paper:#071C17;--card:#10231D;--card-2:#163028;
  --ink:#F7FAFB;--ink-2:#C6D4CE;--ink-3:#8FA69D;--ink-3-on-paper:#8FA69D;
  --line:#1E3A31;--line-2:#2E5246;
  --ever:#56D8B8;--ever-dark:#7BEFD6;--ever-deep:#061110;--ever-mid:#123B31;--ever-soft:#123B31;
  --brass:#C6D4CE;--brass-soft:#142C24;--brass-line:#2E5246;
  --pos:#70D789;--pos-soft:#123423;--warn:#F5C065;--warn-soft:#33280F;
  --neg:#F1786A;--neg-soft:#3A1712;--info-soft:#0F2C3A;
  --on-dark-strong:#FFFFFF;--on-dark:#F7FAFB;--on-dark-2:#C6D4CE;--on-dark-muted:#8FA69D;
  --tooltip-bg:#F7FAFB;--tooltip-text:#071C17;--selection-bg:#175F4E;
  --brand-primary:#061110;--brand-accent:var(--ever);
  --positive:var(--pos);--negative:var(--neg);--warning:var(--warn);
  --chart-1:#8CC63F;--chart-2:#4CA3DA;--chart-3:#B18AD8;--chart-4:#F1953A;
  --metric-revenue:#8CCF69;--metric-job-cost:#F0B35A;--metric-overhead:#8EAECD;
  --glass-bg:rgba(10,25,22,.92);--glass-border:rgba(60,224,191,.18);
  --glass-highlight:rgba(255,255,255,.07);--glass-shadow:rgba(0,0,0,.75);--focus:#56D8B8;
  --on-accent:#071C17;--on-negative:#071C17;--on-warning:#071C17;
  --wa-bg:#12291F;--wa-msg-border:#2C5244;--wa-text:#DFEEE7;
  --theme-meta:#071C17;
  color-scheme:dark;
}

*{margin:0;padding:0;box-sizing:border-box}
/* The reset above wipes the UA stylesheet's margin:auto on <dialog>, which is what
   centres a showModal() dialog in its inset-0 containing block. Put it back once,
   globally, so no dialog has to remember to re-declare it. */
dialog{margin:auto}
[hidden]{display:none!important}
html{font-size:15px}
@media(max-width:820px){html{font-size:16px}} /* mobile floor: nothing should need pinch-zoom to read */
body{font-family:var(--body);background:var(--surface-page);color:var(--text);height:100vh;height:100dvh;overflow:hidden}
#scroller{height:100%;overflow-y:auto;overflow-x:hidden}
html.context-sheet-open #scroller{overflow:hidden}
button{font-family:var(--body);cursor:pointer}
a{color:var(--brand-accent)}
::selection{background:var(--selection-bg)}

/* ---------- D10.1: auth gate + login screen ---------- */
/* Belt-and-suspenders with #login-screen[hidden]/#scroller display: this
   class is the FIRST thing set (before auth.js knows dev vs real mode), so
   the app never flashes visible before we know whether a session exists. */
html.auth-locked #scroller,
html.auth-locked .stepper{display:none}
#login-screen{position:fixed;inset:0;z-index:200;background:var(--brand-primary);
  display:flex;align-items:center;justify-content:center;padding:24px}
#login-screen[hidden]{display:none}
.login-card{width:100%;max-width:360px;background:var(--surface);border-radius:16px;
  padding:32px 28px;display:flex;flex-direction:column;gap:10px;box-shadow:0 20px 60px rgba(0,0,0,.35)}
.login-brand{display:flex;justify-content:center;margin-bottom:6px}
.login-brand .word{font-family:var(--display);font-weight:600;font-size:1.3rem;color:var(--text)}
.login-brand .word i{font-style:italic;color:var(--brass)}
.login-card h1{font-size:1.15rem;text-align:center;color:var(--text)}
.login-sub{font-size:.82rem;color:var(--text-muted);text-align:center;margin-bottom:6px}
.login-google{display:flex;align-items:center;justify-content:center;gap:10px;
  background:var(--surface-alt);border:1px solid var(--line);border-radius:var(--r-9);
  padding:10px;font-size:.86rem;font-weight:600;color:var(--text)}
.login-google:hover{background:var(--surface-page)}
.login-sep{display:flex;align-items:center;gap:10px;margin:6px 0;color:var(--text-muted);font-size:.72rem}
.login-sep::before,.login-sep::after{content:"";flex:1;height:1px;background:var(--line)}
.login-card label{font-size:.74rem;font-weight:700;color:var(--text-muted);margin-top:2px}
.login-card input{border:1px solid var(--line);border-radius:var(--r-8);padding:9px 10px;font-size:.88rem;
  color:var(--text);background:var(--surface)}
.login-submit{margin-top:8px;background:var(--brand-primary);color:var(--on-dark-strong);
  border-radius:var(--r-9);padding:10px;font-weight:700;font-size:.88rem}
.login-submit:hover{opacity:.92}
.login-forgot{background:none;border:none;color:var(--brand-accent);font-size:.76rem;
  text-align:center;margin-top:2px;padding:4px}
.login-error{font-size:.78rem;color:var(--negative);background:color-mix(in srgb,var(--negative) 12%,transparent);
  border-radius:7px;padding:8px 10px}
.login-error[hidden]{display:none}
.login-noaccess{font-size:.78rem;color:var(--warning);text-align:center}
.login-noaccess[hidden]{display:none}

/* DUN-1983: passwordless email-link sign-in — reuses .login-google's visual
   weight (same tier of primary option, not a buried "advanced" toggle) and
   .login-error/.login-sub's color language for feedback, rather than
   introducing a new visual language for one button. */
.login-magiclink{display:flex;align-items:center;justify-content:center;gap:10px;
  background:var(--surface-alt);border:1px solid var(--line);border-radius:var(--r-9);
  padding:10px;font-size:.86rem;font-weight:600;color:var(--text);margin-top:2px}
.login-magiclink:hover{background:var(--surface-page)}
.login-magiclink:disabled{cursor:wait;opacity:.68}
.login-sep-sm{margin:2px 0}
.login-magiclink-sent{font-size:.78rem;color:var(--positive,var(--brand-accent));
  background:color-mix(in srgb,var(--brand-accent) 12%,transparent);border-radius:7px;padding:8px 10px}
.login-magiclink-sent[hidden]{display:none}
.login-confirm-email[hidden]{display:none}
/* .login-shell is a 2-column grid (intro | card) on desktop; this third
   card needs an explicit placement or the grid auto-flow drops it into a
   half-width implicit row. Span both columns instead — it's shown rarely
   (cross-device email-link open only) and the form it replaces is hidden
   at the same time, so it never overlaps anything. */
.login-shell #login-confirm-email{grid-column:1/-1}

/* ---------- top chrome ---------- */
.topbar{background:var(--brand-primary);color:var(--on-dark);display:flex;align-items:center;gap:20px;
  padding:0 22px;height:56px;position:sticky;top:0;z-index:60}
.brand{display:flex;align-items:center;gap:10px;white-space:nowrap}
.brand .logo{height:22px;width:auto;display:none}
.brand .logo.on{display:block}
.brand .word{font-family:var(--display);font-weight:600;font-size:1.16rem;letter-spacing:.01em;color:var(--on-dark-strong);display:flex;align-items:baseline;gap:10px}
.brand.has-logo .word{display:none}
.brand .word i{font-style:italic;color:var(--brand-gold)}
.brand .tag{font-size:.6rem;letter-spacing:.22em;text-transform:uppercase;color:var(--on-dark-muted)}
.brand .lang{display:none}
.views{display:flex;gap:2px;margin-left:8px}
.views button{background:transparent;border:none;color:var(--on-dark-2);font-size:.85rem;font-weight:600;
  padding:8px 14px;border-radius:var(--r-8);position:relative}
.views button:hover{color:var(--on-dark-strong);background:rgba(255,255,255,.06)}
.views button.on{color:var(--on-dark-strong)}
.views button.on::after{content:"";position:absolute;left:14px;right:14px;bottom:2px;height:2px;
  background:var(--brand-gold);border-radius:2px}
.top-right{margin-left:auto;display:flex;align-items:center;gap:10px}
.seg{display:flex;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);
  border-radius:var(--r-9);padding:2px;gap:1px}
.seg button{border:none;background:transparent;color:var(--on-dark-2);font-size:.74rem;font-weight:700;
  padding:5px 11px;border-radius:7px}
.seg button.on{background:var(--surface-page);color:var(--brand-primary)}
.seg.role button.on{background:var(--brand-gold);color:var(--brand-gold-ink)}
.icon-btn{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);color:var(--on-dark);
  border-radius:var(--r-9);padding:6px 12px;font-size:.78rem;font-weight:700}
.icon-btn:hover{background:rgba(255,255,255,.16)}

/* context bar: company + period type + period spine */
.ctxbar{background:var(--surface);border-bottom:1px solid var(--line);position:sticky;top:56px;z-index:50;
  display:flex;align-items:center;gap:18px;padding:10px 22px;flex-wrap:wrap}
.co-select{display:flex;align-items:center;gap:10px}
.co-select .lbl{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--text-muted);font-weight:700}
select{font-family:var(--body);font-size:.9rem;font-weight:700;color:var(--text);background:var(--surface);
  border:1px solid var(--line-2);border-radius:var(--r-9);padding:7px 30px 7px 11px;cursor:pointer;appearance:none;
  /* data: URI can't reference CSS vars — allowlisted; mid-silver reads on both
     the navy default and the light appearance */
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%239AA1C6' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 10px center}
.seg.light{background:var(--surface-page);border:1px solid var(--line)}
.seg.light button{color:var(--ink-2)}
.seg.light button.on{background:var(--surface);color:var(--brand-accent);box-shadow:0 1px 3px rgba(15,32,26,.14)}

/* the signature: period spine */
.spine{display:flex;gap:8px;overflow-x:auto;padding:2px;scrollbar-width:thin;flex:1;min-width:220px}
.spine::-webkit-scrollbar{height:5px}
.spine-chip{flex-shrink:0;border:1px solid var(--line);background:var(--surface);border-radius:11px;
  padding:6px 12px 7px;text-align:left;min-width:92px;position:relative;transition:border-color .15s, box-shadow .15s}
.spine-chip:hover{border-color:var(--brand-accent)}
.spine-chip.on{border-color:var(--brand-accent);box-shadow:inset 0 0 0 1px var(--brand-accent)}
.spine-chip .k{font-size:.76rem;font-weight:800;color:var(--text);display:block}
.spine-chip .v{font-family:var(--num);font-size:.68rem;font-weight:600;display:block;margin-top:1px}
.spine-chip .v.pos{color:var(--positive)}.spine-chip .v.neg{color:var(--negative)}.spine-chip .v.na{color:var(--text-muted)}
.spine-chip .bar{position:absolute;left:10px;right:10px;bottom:3px;height:2.5px;border-radius:2px;background:var(--line)}
.spine-chip .bar i{position:absolute;top:0;bottom:0;border-radius:2px}
.spine-chip.draft{border-style:dashed;border-color:var(--brass)}
.spine-chip .draft-dot{position:absolute;top:6px;right:8px;width:7px;height:7px;border-radius:var(--r-round);background:var(--brass)}
.period-picker{display:grid;grid-template-columns:auto minmax(190px,1fr) minmax(120px,auto) auto;align-items:center;gap:7px;width:100%}
.mobile-period-list{display:none}
.period-select-wrap{display:grid;gap:1px;min-width:0;padding:4px 9px;border:1px solid var(--line);border-radius:11px;background:var(--surface)}
.period-select-wrap>span{font-size:.56rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted)}
.period-select-wrap select{min-height:27px;width:100%;padding:2px 24px 2px 0;font-size:.76rem}
.period-summary{display:grid;gap:1px;min-width:110px}.period-summary strong{font-size:.76rem}.period-summary span{font:650 .68rem var(--num);white-space:nowrap}
.period-summary .pos{color:var(--positive)}.period-summary .neg{color:var(--negative)}.period-summary .na{color:var(--text-muted)}
.period-step{display:grid;place-items:center;width:32px;height:44px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--text);font-size:1.3rem;cursor:pointer}
.period-step:hover:not(:disabled){border-color:var(--brand-accent);color:var(--brand-accent)}.period-step:disabled{opacity:.35;cursor:not-allowed}

/* ---------- search & filters (B7) ---------- */
.search-panel{background:var(--surface);border-bottom:1px solid var(--line);padding:12px 22px 16px}
/* input-look trigger: reads as "there is a search here" at a glance, which
   the bare 🔍 icon button it replaces did not */
.search-trigger{display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r-9);padding:7px 12px;font-size:.78rem;font-weight:600;color:var(--text-muted);min-width:230px;text-align:left}
.search-trigger:hover{border-color:var(--brand-accent);color:var(--text)}
.search-trigger kbd{margin-left:auto;font-family:var(--num);font-size:.64rem;border:1px solid var(--line);
  border-radius:4px;padding:1px 6px;color:var(--text-muted);background:var(--surface-page)}
@media(max-width:820px){.search-trigger{min-width:0;flex:1}.search-trigger kbd{display:none}}
.search-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.search-row input,.search-row select{font-family:var(--body);font-size:.85rem;color:var(--text);
  background:var(--surface-page);border:1px solid var(--line-2);border-radius:var(--r-8);padding:7px 10px}
.search-row input#search-q{flex:1;min-width:160px}
.search-row .search-date{width:88px;font-family:var(--num)}
.search-results{margin-top:10px;display:flex;flex-direction:column;gap:6px;max-height:280px;overflow-y:auto}
.search-hit{display:flex;align-items:center;gap:10px;padding:8px 11px;border:1px solid var(--line);
  border-radius:var(--r-8);background:var(--surface-page);cursor:pointer;font-size:.83rem;text-align:left;width:100%}
.search-hit:hover{border-color:var(--brand-accent)}
.search-hit b{font-weight:700}
.search-hit span{color:var(--text-muted);font-size:.75rem}
.search-hit .state-chip{margin-left:auto}
.search-empty{color:var(--text-muted);font-size:.83rem;padding:8px 2px}
.search-hit-row{display:flex;align-items:center;gap:8px}
.search-hit-row .search-hit{flex:1}
.search-hit-pick{flex-shrink:0;width:16px;height:16px;accent-color:var(--brand-accent)}
.search-compare-bar{display:flex;align-items:center;gap:10px;padding:6px 2px;font-size:.8rem;color:var(--text-muted)}
#search-compare-out{margin-top:8px}
#search-compare-out table{font-size:.82rem}
@media(max-width:820px){.search-panel{padding:10px 14px 14px}}

/* ---------- layout ---------- */
.wrap{max-width:1340px;margin:0 auto;padding:26px 26px 90px;display:grid;
  grid-template-columns:172px minmax(0,1fr) 320px;gap:26px;align-items:start}
.wrap.no-rail{grid-template-columns:172px minmax(0,1fr)}
@media(max-width:1240px){.wrap{grid-template-columns:minmax(0,1fr) 320px}.toc{display:none}
  .wrap.no-rail{grid-template-columns:minmax(0,1fr)}}
@media(max-width:940px){.wrap{grid-template-columns:minmax(0,1fr)}.rail{position:static}}
.toc{position:sticky;top:132px;font-size:.8rem}
.toc .t{font-size:.62rem;letter-spacing:.2em;text-transform:uppercase;color:var(--brass);font-weight:800;margin-bottom:10px}
.toc a{display:block;color:var(--text-muted);text-decoration:none;padding:5px 0 5px 12px;border-left:2px solid var(--line);font-weight:600}
.toc a:hover{color:var(--text)}
.toc a.on{color:var(--brand-accent);border-left-color:var(--brand-accent)}
.rail{position:sticky;top:132px;display:flex;flex-direction:column;gap:16px}

/* ---------- hero ---------- */
.hero{margin-bottom:34px}
.hero .eyebrow{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.eyebrow-txt{font-size:.68rem;letter-spacing:.26em;text-transform:uppercase;color:var(--brass);font-weight:800}
.eyebrow-rule{flex:1;height:1px;background:linear-gradient(90deg,var(--brass-line),transparent)}
.hero h1{font-family:var(--display);font-weight:600;font-size:clamp(1.6rem, 1.05rem + 3vw, 2.5rem);line-height:1.1;letter-spacing:-.01em;margin-bottom:12px}
.hero .headline{font-family:var(--display);font-weight:400;font-size:clamp(1rem, .82rem + .8vw, 1.18rem);line-height:1.5;color:var(--ink-2);
  max-width:62ch;margin-bottom:16px}
.hero .meta{font-size:.82rem;color:var(--text-muted);margin-bottom:16px}
.hero .howto{font-size:.78rem;color:var(--text-muted);line-height:1.55;margin-top:16px;
  padding-top:12px;border-top:1px solid var(--line)}
.hero-kpis{margin-bottom:16px}
.chips{display:flex;gap:8px;flex-wrap:wrap}
/* UIX-1: unified pill base. border-radius:2px is the value that already wins in cascade
   (see the former .btn,.state-chip,.badge,.ov-draft-badge / .chip overrides near :3022),
   kept here as the single source of truth instead of duplicated overrides further down. */
.chip,.state-chip,.badge{border-radius:2px}
.chip{display:inline-flex;align-items:center;gap:7px;font-size:.76rem;font-weight:700;
  padding:5px 12px;border:1px solid transparent}
.chip .dot{width:7px;height:7px;border-radius:var(--r-round)}
.chip.ok{background:var(--pos-soft);color:var(--positive)}.chip.ok .dot{background:var(--positive)}
.chip.bad{background:var(--neg-soft);color:var(--negative)}.chip.bad .dot{background:var(--negative)}
.chip.warn{background:var(--warn-soft);color:var(--warning)}.chip.warn .dot{background:var(--warning)}
.chip.info{background:var(--ever-soft);color:var(--brand-accent)}.chip.info .dot{background:var(--brand-accent)}

.draft-banner{display:flex;align-items:center;gap:14px;background:var(--brass-soft);border:1px dashed var(--brass);
  border-radius:var(--r);padding:12px 16px;margin-bottom:22px;font-size:.88rem}
.draft-banner b{color:var(--brass)}
.draft-banner.approved{background:var(--pos-soft);border-color:var(--positive)}
.draft-banner.approved b{color:var(--positive)}
.draft-banner .actions{margin-left:auto;display:flex;gap:8px}
.draft-workbench{margin:-8px 0 24px;padding:22px;border:1px solid var(--brass-line);border-radius:18px;background:var(--surface);box-shadow:var(--shadow)}
.draft-review-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:14px}
.draft-review-head span{display:block;margin-bottom:4px;color:var(--warning);font-size:.68rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}
.draft-review-head h2{font-family:var(--display);font-size:1.25rem}
.draft-review-tabs{display:inline-flex;gap:3px;margin-bottom:18px;padding:3px;border:1px solid var(--line);border-radius:var(--r-12);background:var(--surface-alt)}
.draft-review-tabs button{min-height:40px;padding:7px 13px;border:0;border-radius:var(--r-9);background:transparent;color:var(--text-muted);font-weight:750}
.draft-review-tabs button[aria-selected="true"]{background:var(--surface);color:var(--text);box-shadow:var(--shadow)}
.draft-review-pane>p{max-width:72ch;margin-bottom:16px;color:var(--text-muted);font-size:.84rem;line-height:1.5}
.draft-editor-grid{display:grid;grid-template-columns:1fr 1fr;gap:13px;margin-bottom:14px}
.draft-editor-grid label,.draft-feedback-label{display:flex;flex-direction:column;gap:6px;color:var(--text-muted);font-size:.7rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.draft-editor-grid textarea,.draft-feedback-label textarea{width:100%;resize:vertical;border:1px solid var(--line-2);border-radius:11px;padding:11px;background:var(--surface-alt);color:var(--text);font:500 .86rem/1.5 var(--body);letter-spacing:0;text-transform:none}
.draft-editor-grid textarea:focus,.draft-feedback-label textarea:focus{outline:2px solid var(--focus);outline-offset:1px}
.draft-editor-wide{grid-column:1/-1}
.draft-editor-divider{display:grid;gap:4px;margin-top:8px;padding:12px 0 2px;border-top:1px solid var(--line)}
.draft-editor-divider strong{color:var(--text);font-size:.85rem;letter-spacing:0;text-transform:none}
.draft-editor-divider span{color:var(--text-muted);font-size:.74rem;font-weight:500;letter-spacing:0;text-transform:none}
.draft-feedback-label{max-width:820px;margin-bottom:14px}
@media(max-width:820px){
  .draft-banner{align-items:flex-start;flex-direction:column}
  .draft-banner .actions{width:100%;margin-left:0;display:grid;grid-template-columns:1fr 1fr}
  .draft-banner .actions .btn{width:100%;min-height:44px}
  .draft-workbench{padding:17px 14px}
  .draft-review-tabs{display:grid;grid-template-columns:1fr 1fr;width:100%}
  .draft-editor-grid{grid-template-columns:1fr}
  .draft-editor-wide{grid-column:auto}
}

/* status cards */
.status-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px;margin-top:20px}
.status-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;box-shadow:var(--shadow)}
.status-card b{font-size:.92rem;display:flex;align-items:center;gap:8px}
.status-card .dot{width:9px;height:9px;border-radius:var(--r-round);flex-shrink:0}
.dot.red{background:var(--negative)}.dot.green{background:var(--positive)}.dot.amber{background:var(--warning)}
.status-card p{font-size:.82rem;color:var(--ink-2);margin-top:6px;line-height:1.5}

/* ---------- section/slide navigation (F2.2) ----------
   #scroller is a scroll-snap container so each .hero/.section reads as its
   own "page" at rest. --mobile-chrome-h is measured in JS (topbar + ctxbar
   can wrap to 2 rows on narrow phones) so snapped sections never land
   hidden under the sticky header.

   scroll-snap-type is `proximity`, not `mandatory`: sections have natural,
   variable content height (often taller than one viewport), and mandatory
   snap traps scroll input inside any section taller than the viewport — the
   browser keeps pulling the position back to the section start on every
   tick instead of letting the user scroll through it. Reproduced that exact
   hang while testing on a 375px viewport before switching to proximity.

   No CSS scroll-behavior:smooth here on purpose: layering it on top of
   scroll-snap made every wheel/touch tick hang indefinitely while testing
   (the smoothing animation and the snap settle never both finished). The
   stepper/keyboard jump (goToSlide in app.js) does an instant scrollTo;
   native wheel/touch scrolling is instant too, snapping to rest at the
   nearest section per scroll-snap-type. */
:root{--mobile-chrome-h:0px}
#scroller{scroll-snap-type:y proximity}
.hero,.section{scroll-snap-align:start}
@media print{#scroller{scroll-snap-type:none}}

.stepper{position:fixed;left:50%;bottom:14px;transform:translateX(-50%);z-index:80;display:none;
  align-items:center;gap:10px;background:var(--brand-primary);color:var(--on-dark-strong);border-radius:24px;
  padding:6px 8px 6px 14px;box-shadow:0 10px 24px rgba(0,0,0,.28);font-size:.8rem}
.stepper.on{display:flex}
.stepper .count{font-family:var(--num);min-width:3.4em;text-align:center}
.step-current{max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background:none;border:none;color:var(--on-dark-strong);
  font-family:var(--num);font-size:.72rem;font-weight:700;padding:6px 2px;text-align:center}
.stepper button{background:rgba(255,255,255,.12);border:none;color:var(--on-dark-strong);width:30px;height:30px;
  border-radius:var(--r-round);font-size:.95rem;line-height:1;display:flex;align-items:center;justify-content:center}
.stepper button:hover{background:rgba(255,255,255,.22)}
.stepper button[disabled]{opacity:.35;cursor:default}
@media(min-width:941px){.stepper{display:none!important}}
@media print{.stepper{display:none!important}}

.section-picker{position:fixed;inset:0;z-index:120}
.section-picker[hidden]{display:none}
.picker-scrim{position:absolute;inset:0;border:0;background:rgba(5,18,14,.46)}
.picker-sheet{position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:min(100%,560px);max-height:78vh;overflow:auto;
  background:var(--surface);border:1px solid var(--line);border-bottom:0;border-radius:18px 18px 0 0;padding:16px 16px 24px;box-shadow:0 -12px 35px rgba(0,0,0,.2)}
.picker-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.picker-head h2{font-family:var(--display);font-size:1.1rem}
.picker-head button{border:0;background:var(--surface-page);border-radius:var(--r-round);width:32px;height:32px;font-size:1.2rem;color:var(--text)}
.picker-options{display:flex;flex-direction:column;gap:5px}
.picker-option{display:flex;align-items:center;gap:12px;border:1px solid var(--line);border-radius:var(--r-9);background:var(--surface-page);color:var(--text);
  padding:10px 12px;text-align:left;font:600 .84rem var(--body)}
.picker-option.on{border-color:var(--brand-accent);box-shadow:inset 3px 0 var(--brand-accent);color:var(--brand-accent)}
.picker-number{font:700 .7rem var(--num);color:var(--brass);min-width:24px}

/* ---------- sections ---------- */
.hero{scroll-margin-top:130px}
.section{margin-bottom:44px;scroll-margin-top:130px}
@media(max-width:940px){.hero,.section{scroll-margin-top:var(--mobile-chrome-h)}}
.sec-head{display:flex;align-items:baseline;gap:12px;margin-bottom:14px}
.sec-head .n{font-family:var(--num);font-size:.72rem;color:var(--brass);font-weight:600;letter-spacing:.1em}
.sec-head h2{font-family:var(--display);font-weight:600;font-size:1.5rem;letter-spacing:-.01em}
.sec-head .rule{flex:1;height:1px;background:var(--line);align-self:center}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:20px 22px;
  margin-bottom:14px;box-shadow:var(--shadow);max-width:100%;overflow-x:auto}
.panel h3{font-size:.97rem;font-weight:800;margin-bottom:3px}
.panel .psub{font-size:.8rem;color:var(--text-muted);margin-bottom:14px}
.callout{border-left:3px solid var(--brand-accent);background:var(--ever-soft);border-radius:0 10px 10px 0;
  padding:13px 17px;font-size:.89rem;line-height:1.65;margin:12px 0}
.callout.amber{border-left-color:var(--warning);background:var(--warn-soft)}
.callout.red{border-left-color:var(--negative);background:var(--neg-soft)}
.callout.brass{border-left-color:var(--brass);background:var(--brass-soft)}
.fixed-policy-note{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:18px 28px;
  align-items:start;padding:22px 24px;margin:0 0 18px}
.fixed-policy-note .eyebrow{display:block;color:var(--warning);margin-bottom:5px}
.fixed-policy-note h3{font-size:1.08rem;margin:0 0 7px}
.fixed-policy-note p{margin:0;max-width:850px;color:var(--text);line-height:1.6}
.fixed-policy-total{font-size:1.45rem;text-align:right;color:var(--ink);white-space:nowrap}
.fixed-policy-total small{display:block;font-size:.7rem;font-weight:700;color:var(--text-muted);
  white-space:normal;max-width:180px}
.fixed-policy-accounts{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:8px}
.fixed-policy-accounts span{padding:10px 12px;background:color-mix(in srgb,var(--surface) 78%,transparent);
  border:1px solid color-mix(in srgb,var(--warning) 25%,var(--line));border-radius:var(--r-8)}
.fixed-policy-accounts b,.fixed-policy-accounts small{display:block}
.fixed-policy-accounts b{font-size:.77rem}
.fixed-policy-accounts small{margin-top:3px;color:var(--text-muted);font-size:.7rem;line-height:1.4}
@media(max-width:720px){
  .fixed-policy-note{grid-template-columns:1fr;padding:18px}
  .fixed-policy-total{text-align:left}
  .fixed-policy-accounts{grid-template-columns:1fr}
}
.footnote{font-size:.76rem;color:var(--text-muted);line-height:1.6;margin-top:8px}
.report-basis-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:13px;align-items:start;
  margin:-14px 0 24px;padding:16px 18px;border:1px solid var(--line);border-left:3px solid var(--brand-accent);
  border-radius:var(--r-14);background:var(--surface-alt);color:var(--ink-2)}
.report-basis-mark{display:grid;place-items:center;width:24px;height:24px;border:1px solid var(--brand-accent);
  border-radius:var(--r-round);color:var(--brand-accent);font:800 .72rem var(--body)}
.report-basis-note h2{margin:1px 0 5px;color:var(--text);font:700 .85rem/1.3 var(--body)}
.report-basis-note p{margin:0;max-width:100ch;font-size:.76rem;line-height:1.55}
.report-basis-note .report-basis-action{margin-top:5px;color:var(--text);font-weight:700}

/* M29: o aviso de relatorio preliminar. Deliberadamente mais pesado que
   .report-basis-note acima -- aquele explica de onde vem o numero, este diz
   que o numero ainda pode mudar. */
.preliminary-banner{display:grid;grid-template-columns:auto minmax(0,1fr);gap:13px;align-items:start;
  margin:0 0 22px;padding:16px 18px;border:1px solid var(--warning);border-left-width:4px;
  border-radius:var(--r-12);background:var(--warn-soft)}
.preliminary-banner-mark{display:grid;place-items:center;width:24px;height:24px;border-radius:var(--r-round);
  background:var(--warning);color:var(--on-cta);font:800 .8rem var(--body)}
.preliminary-banner-kicker{display:block;margin-bottom:5px;color:var(--warning);font-size:.64rem;
  font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.preliminary-banner h2{margin:0 0 6px;color:var(--text);font:730 1.02rem/1.3 var(--body)}
.preliminary-banner p{margin:0 0 6px;max-width:100ch;color:var(--ink-2);font-size:.86rem;line-height:1.55}
.preliminary-banner ul{margin:6px 0 8px;padding-left:20px}
.preliminary-banner li{color:var(--ink-2);font-size:.86rem;line-height:1.6}
.preliminary-banner .preliminary-banner-foot{color:var(--ink-2);font-size:.8rem;font-weight:650}
.ov-draft-badge.preliminary{border-color:var(--warning);color:var(--warning);background:var(--warn-soft)}
/* Sem isto o aviso imprime como texto solto: o fundo nao sai por defeito
   (background-graphics desligado) e um relatorio preliminar reencaminhado em
   PDF e exatamente o caso em que ele tem de estar visivel. */
@media print{.preliminary-banner{break-inside:avoid;border-color:var(--ink);background:transparent}}

/* KPI band */
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(205px,1fr));gap:12px;margin-bottom:12px}
.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:15px 16px 13px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.kpi .lbl{font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;color:var(--text-muted);font-weight:800}
.kpi .val{font-family:var(--num);font-size:clamp(1.25rem, 1.05rem + 1vw, 1.5rem);font-weight:600;margin:7px 0 4px;letter-spacing:-.02em}
.kpi .val.neg{color:var(--negative)}
.kpi.metric-positive .val{color:var(--positive)}
.kpi.metric-negative .val{color:var(--negative)}
.kpi.metric-neutral .val{color:var(--warning)}
.delta{display:inline-flex;align-items:center;gap:4px;font-family:var(--num);font-size:.7rem;font-weight:600;
  border-radius:20px;padding:2px 9px}
.delta.up{background:var(--pos-soft);color:var(--positive)}.delta.down{background:var(--neg-soft);color:var(--negative)}
.delta.flat{background:var(--surface-page);color:var(--ink-2)}
.delta.semantic-positive{background:var(--pos-soft);color:var(--positive)}
.delta.semantic-negative{background:var(--neg-soft);color:var(--negative)}
.delta.semantic-neutral{background:var(--warn-soft);color:var(--warning)}
.kpi .note{font-size:.78rem;color:var(--ink-2);line-height:1.5;margin-top:7px}

/* ---------- flip-cards (B4) ----------
 * Content-swap "flip" (not a 3D transform) — the B4 spec explicitly accepts
 * crossfade as a valid style, and swap is simpler to reason about/verify
 * than perspective+rotateY. Tap toggles it; native scroll/swipe elsewhere
 * is a different event entirely, so there's no gesture conflict to resolve.
 * Print always shows both faces (back as a note under the front) so nothing
 * from the explanation is lost in the PDF, regardless of on-screen state. */
/* No corner glyph: the whole card is the control. The flip affordance is the
   gold border on hover/focus plus the champagne-washed back face; on touch the
   card itself reads as tappable through its raised surface. */
.kpi[data-flip-id]{cursor:pointer}
.kpi[data-flip-id]:hover{border-color:var(--brand-accent)}
.kpi[data-flip-id]:focus-visible{outline:2px solid var(--brand-accent);outline-offset:2px}
.kpi-back{display:none;font-size:.8rem;line-height:1.5;color:var(--ink-2);animation:kpiIn .15s ease-out both}
.kpi-back-kicker{display:block;margin-bottom:5px;color:var(--brand-accent);font-size:.75rem;font-weight:800;
  letter-spacing:.1em;text-transform:uppercase}
.kpi-back-reading{color:var(--text);display:block;font-size:.86rem;line-height:1.48;font-weight:650}
.kpi-back-rule{display:block;height:1px;background:var(--line);margin:11px 0}
.kpi-back-explain,.kpi-back-basis{display:block}
.kpi-back-basis{margin-top:4px;color:var(--text-muted)}
.kpi-back-src{display:block;margin-top:8px;font-style:normal;font-size:.75rem;color:var(--text-muted);
  text-transform:uppercase;letter-spacing:.06em}
.kpi.flipped{background:var(--ever-soft);border-color:var(--brand-accent)}
.kpi.flipped .kpi-front{display:none}
.kpi.flipped .kpi-back{display:block}
@keyframes kpiIn{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.kpi-back{animation:none}}
@media print{
  .kpi-front{display:block!important}
  .kpi-back{display:block!important;position:static;margin-top:8px;padding-top:8px;
    border-top:1px dashed var(--line-2);animation:none}
  .kpi.flipped{background:var(--surface);border-color:var(--line)}
}

/* tables */
table{width:100%;border-collapse:collapse;font-size:.87rem}
th{font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);font-weight:800;
  text-align:left;padding:6px 8px;border-bottom:1.5px solid var(--line-2)}
th.num,td.num{text-align:right}
td{padding:8px;border-bottom:1px solid var(--line);vertical-align:top}
td.num{font-family:var(--num);font-size:.81rem;white-space:nowrap}
tr.total td{font-weight:700;border-top:2px solid var(--line-2);border-bottom:none}
td .pos{color:var(--positive);font-weight:600}td .neg{color:var(--negative);font-weight:600}
td .neutral{color:var(--warning);font-weight:600}
td.plain{color:var(--text-muted);font-size:.79rem}
tbody tr:hover td{background:var(--surface-alt)}
.jargon td:first-child{font-weight:700;width:180px}

/* charts */
svg.chart{width:100%;height:auto;display:block}
svg.chart text{font-family:var(--body)}
svg.chart .mono{font-family:var(--num)}
.chart-benchmark-note{display:flex;align-items:center;justify-content:flex-end;gap:7px;margin:10px 0 2px;
  color:var(--ink-2);font-size:.72rem;font-weight:700;line-height:1.35}
.chart-benchmark-note i{width:24px;height:0;border-top:1.5px dashed var(--text);flex:0 0 auto}
.chart-help{margin:12px 0 6px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.chart-help>summary{display:flex;align-items:center;gap:8px;padding:10px 1px;cursor:pointer;list-style:none;
  color:var(--brand-accent);font-size:.76rem;font-weight:800}
.chart-help>summary::-webkit-details-marker{display:none}
.chart-help>summary::before{content:"＋";display:grid;place-items:center;width:19px;height:19px;border:1px solid var(--brass-line);
  border-radius:var(--r-round);font-size:.75rem;line-height:1;transition:transform .16s ease}
.chart-help[open]>summary::before{transform:rotate(45deg)}
.chart-help>summary:focus-visible{outline:3px solid var(--focus);outline-offset:3px;border-radius:3px}
.chart-help-body{padding:0 4px 12px 28px;color:var(--ink-2);font-size:.78rem;line-height:1.55}
.chart-help-body p{margin:0 0 7px}.chart-help-body ol{display:grid;gap:4px;margin:0;padding-left:18px}
.hover-col{fill:transparent}
.hover-col:hover{fill:color-mix(in srgb,var(--brand-accent) 8%,transparent)}
[data-tt]{cursor:default}
rect[data-tt]:hover,circle[data-tt]:hover,path[data-tt]:hover{filter:brightness(1.08)}
#tt{position:fixed;z-index:200;pointer-events:none;background:var(--tooltip-bg);color:var(--tooltip-text);border-radius:var(--r-9);
  padding:8px 11px;font-size:.77rem;line-height:1.5;max-width:260px;opacity:0;transition:opacity .12s;
  box-shadow:0 8px 24px rgba(0,0,0,.28)}
#tt b{color:var(--on-dark-strong)}#tt .mono{font-family:var(--num)}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:.76rem;color:var(--ink-2);margin-top:10px}
.legend span{display:inline-flex;align-items:center;gap:6px;font-weight:600}
.legend i{width:10px;height:10px;border-radius:3px;display:inline-block}

/* Mobile-native financial graphics. These are not shrunken desktop SVGs:
   exact values and comparisons remain readable without tapping or zooming. */
.mobile-comparison-chart,.mobile-bridge,.mobile-trend-chart,.mobile-money-flow{display:grid;gap:0}
.mobile-comparison-chart article{display:grid;gap:10px;padding:16px 0;border-bottom:1px solid var(--line)}
.mobile-comparison-chart article:last-child{border-bottom:0}
.mobile-comparison-chart header{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.mobile-comparison-chart header strong{font-size:1rem}
.mobile-comparison-chart header span{font:750 .9rem var(--num);white-space:nowrap}
.mobile-comparison-chart .good{color:var(--positive)}.mobile-comparison-chart .bad{color:var(--negative)}
.mobile-comparison-values{display:grid;grid-template-columns:1fr auto 1fr;align-items:end;gap:12px}
.mobile-comparison-values>span{display:grid;gap:2px}.mobile-comparison-values>span:last-child{text-align:right}
.mobile-comparison-values small{color:var(--text-muted);font-size:.78rem;font-weight:700}
.mobile-comparison-values b{font:650 1.12rem var(--num);color:var(--text)}
.mobile-comparison-values>i{color:var(--text-muted);font-style:normal}
.mobile-comparison-tracks{display:grid;gap:4px}
.mobile-comparison-tracks>i{display:block;height:5px;min-width:3px;border-radius:99px;background:var(--line-2)}
.mobile-comparison-tracks>i.current{height:8px;background:var(--brand-accent)}
.mobile-comparison-tracks>i.current.good{background:var(--positive)}.mobile-comparison-tracks>i.current.bad{background:var(--negative)}

.mobile-bridge{position:relative}
.mobile-bridge::before{content:"";position:absolute;left:21px;top:28px;bottom:28px;width:1px;background:var(--line-2)}
.mobile-bridge-step{position:relative;display:grid;grid-template-columns:44px minmax(0,1fr) auto;align-items:center;gap:12px;min-height:68px;padding:9px 0}
.mobile-bridge-step>i{z-index:1;display:grid;place-items:center;width:42px;height:42px;border:1px solid var(--line-2);border-radius:var(--r-round);
  background:var(--surface);color:var(--text-muted);font:800 .9rem var(--num)}
.mobile-bridge-step.good>i{border-color:var(--positive);color:var(--positive)}
.mobile-bridge-step.bad>i{border-color:var(--negative);color:var(--negative)}
.mobile-bridge-step.total>i{border-color:var(--brand-primary);background:var(--brand-primary);color:var(--on-dark)}
.mobile-bridge-step>span{display:grid;gap:3px;min-width:0}
.mobile-bridge-step>span strong{font-size:.96rem}.mobile-bridge-step>span small{color:var(--text-muted);font-size:.78rem}
.mobile-bridge-step>b{font:750 1.05rem var(--num);white-space:nowrap}
.mobile-bridge-step.good>b{color:var(--positive)}.mobile-bridge-step.bad>b{color:var(--negative)}
.mobile-bridge-step>em{position:absolute;left:56px;right:0;bottom:5px;height:3px;max-width:calc(100% - 56px);
  border-radius:99px;background:currentColor;opacity:.32}

.mobile-trend-chart>p{margin:0 0 10px;padding:8px 10px;border-left:3px solid var(--brand-accent);
  background:var(--ever-soft);color:var(--ink-2);font-size:.84rem;font-weight:700}
.mobile-trend-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:7px 14px;padding:13px 0;border-bottom:1px solid var(--line)}
.mobile-trend-row>span{font-size:.94rem;color:var(--ink-2)}.mobile-trend-row>strong{font:750 1rem var(--num)}
.mobile-trend-row>i{grid-column:1/-1;display:block;height:7px;border-radius:99px;background:var(--surface-alt);overflow:hidden}
.mobile-trend-row>i b{display:block;height:100%;border-radius:inherit;background:var(--line-2)}
.mobile-trend-row.current>span,.mobile-trend-row.current>strong{color:var(--text);font-weight:800}
.mobile-trend-row.current>i b{background:var(--brand-accent)}

.mobile-money-source{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:baseline;gap:10px;padding:4px 0 12px}
.mobile-money-source span{font-size:1rem;font-weight:800}.mobile-money-source strong{font:750 1.25rem var(--num)}
.mobile-money-source small{color:var(--text-muted);font-size:.82rem;font-weight:750}
.mobile-money-band{display:flex;height:16px;overflow:hidden;border-radius:3px;background:var(--surface-alt)}
.mobile-money-band i{display:block;height:100%}
.mobile-money-allocations{display:grid;margin-top:8px}
.mobile-money-allocations>div{display:grid;grid-template-columns:10px minmax(0,1fr) auto;align-items:center;gap:10px;padding:12px 0;border-bottom:1px solid var(--line)}
.mobile-money-allocations>div>i{width:10px;height:28px;border-radius:2px}
.mobile-money-allocations span{display:grid;gap:2px}.mobile-money-allocations span strong{font-size:.94rem}
.mobile-money-allocations span small{color:var(--text-muted);font-size:.78rem}
.mobile-money-allocations b,.mobile-money-detail b{font:750 .96rem var(--num)}
.mobile-money-detail{margin-top:12px;border-top:1px solid var(--line)}
.mobile-money-detail>summary{display:flex;align-items:center;min-height:48px;color:var(--brand-accent);font-size:.9rem;font-weight:800;cursor:pointer}
.mobile-money-detail>div{display:flex;justify-content:space-between;gap:14px;padding:9px 0;border-top:1px solid var(--line);font-size:.86rem}

/* H18: copy that tells the reader how to reveal a tooltip — swap the verb
   by device instead of assuming a mouse (a touchscreen reader can't hover). */
.io-touch{display:none}
@media(hover:none){.io-hover{display:none}.io-touch{display:inline}}

/* screen-reader-only data table: the accessible fallback for a chart that's
   otherwise a plain SVG (e.g. the Sankey) — present in the DOM, invisible
   on screen, but read normally by assistive tech and by print (print wants
   every number available, on-screen or not). */
.sr-only-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0}
.sr-only-table{
  display:block!important;width:1px!important;height:1px!important;max-width:1px!important;
  clip-path:inset(50%);white-space:normal!important;contain:strict;
}
.sr-only-table *{max-width:1px!important;white-space:normal!important;overflow:hidden!important}
@media print{.sr-only-table{position:static;width:auto;height:auto;margin:8px 0 0;clip:auto;
  white-space:normal;font-size:.72rem;color:var(--text-muted)}}

/* generic visually-hidden text (labels, live regions): in the DOM for
   assistive tech, never painted on screen — unlike .sr-only-table above,
   it stays hidden in print too. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}

/* bar rows (customers/categories) */
.bar-row{display:grid;grid-template-columns:minmax(140px,1.3fr) 1fr auto auto;gap:12px;align-items:center;
  padding:7px 0;border-bottom:1px solid var(--line);font-size:.86rem}
.bar-row:last-child{border-bottom:none}
.bar-track{height:9px;background:var(--surface-page);border-radius:5px;overflow:hidden;position:relative}
.bar-fill{height:100%;border-radius:5px;background:var(--chart-1);transform-origin:left;animation:growx .7s cubic-bezier(.2,.7,.3,1) both}
.bar-row.other .bar-fill{background:var(--line-2)}
.bar-row.aging-old span:first-child{color:var(--negative);font-weight:700}
@keyframes growx{from{transform:scaleX(0)}}
@media(prefers-reduced-motion:reduce){.bar-fill{animation:none}}
.bar-amt{font-family:var(--num);font-size:.8rem;white-space:nowrap}
.bar-pct{font-family:var(--num);font-size:.75rem;color:var(--ink-2);width:58px;text-align:right}
.conc-mark{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--warning);opacity:.7}

.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media(max-width:860px){.grid-2{grid-template-columns:1fr}}
.cards-3{display:grid;grid-template-columns:repeat(auto-fit,minmax(195px,1fr));gap:12px;margin-bottom:12px}
.chart-comparison{margin:12px 0 10px;border:1px solid var(--line);border-radius:11px;overflow:hidden;background:var(--surface-alt)}
.chart-comparison-head{padding:8px 11px 7px;border-bottom:1px solid var(--line);color:var(--text-muted);
  font-size:.75rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.chart-comparison-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr))}
.chart-comparison-item{display:grid;grid-template-columns:1fr auto;gap:3px 8px;align-items:baseline;padding:10px 11px;
  min-width:0;background:var(--surface);border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
.chart-comparison-label{grid-column:1/-1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-muted);
  font-size:.75rem;font-weight:750}
.chart-comparison-item strong{font:600 .82rem var(--num);white-space:nowrap}
.chart-comparison-item strong.good{color:var(--positive)}
.chart-comparison-item strong.bad{color:var(--negative)}
.chart-comparison-item strong.neutral{color:var(--ink-2)}
.chart-comparison-pct{font:600 .76rem var(--num);color:var(--ink-2);white-space:nowrap;text-align:right}
ol.moves{padding-left:22px;display:flex;flex-direction:column;gap:12px;font-size:.92rem;line-height:1.65}
ol.moves li::marker{font-family:var(--num);color:var(--brass);font-weight:600}

/* rail cards */
.rail .panel{margin-bottom:0}
.wa-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;box-shadow:var(--shadow)}
.wa-head{background:linear-gradient(135deg,var(--wa-grad-1),var(--wa-grad-2));color:var(--on-dark-strong);padding:13px 17px}
.wa-head h3{font-size:.92rem;font-weight:800}
.wa-head p{font-size:.7rem;opacity:.85;margin-top:2px}
.wa-body{max-height:360px;overflow-y:auto;padding:15px;background:var(--wa-bg)}
.wa-msg{background:var(--surface);border-radius:4px 14px 14px 14px;border:1px solid var(--wa-msg-border);padding:13px 14px;
  font-size:.8rem;line-height:1.6;white-space:pre-wrap;color:var(--wa-text)}
.copy-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;border:none;
  background:var(--brand-primary);color:var(--on-dark-strong);font-size:.87rem;font-weight:700;padding:12px}
.copy-btn.copied{background:var(--positive);color:var(--on-accent)}
.dl-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-9);
  margin-bottom:7px;font-size:.82rem;font-weight:600;color:var(--text);text-decoration:none;background:var(--surface)}
.dl-item:hover{border-color:var(--brand-accent);background:var(--ever-soft)}
/* the appendix's "save as PDF" item is a real button, not a link — reset the
   UA button styling so it sits flush with the file links beside it */
button.dl-item{width:100%;font-family:inherit;text-align:left;cursor:pointer}
.dl-item .ic{width:26px;height:26px;border-radius:6px;background:var(--neg-soft);color:var(--negative);
  font-size:.56rem;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.dl-item .ic.rep{background:var(--ever-soft);color:var(--brand-accent)}
.dl-item span:last-child{margin-left:auto;color:var(--text-muted);font-size:.68rem;font-weight:500}
/* appendix layout: downloads spread across the main column instead of the
   single stack they used in the 320px rail */
.dl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:8px}
.dl-grid .dl-item{margin-bottom:0}
.dl-source-note{margin-bottom:12px}
.dl-source-group{margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}
.dl-source-group h4{margin:0 0 9px;color:var(--text);font-size:.82rem;letter-spacing:.04em;text-transform:uppercase}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:none;border-radius:var(--r-9);
  padding:9px 16px;font-size:.85rem;font-weight:700}
.btn.primary{background:var(--brand-accent);color:var(--on-accent)}
.btn.primary:hover{background:var(--ever-mid)}
.btn.ghost{background:var(--surface);border:1px solid var(--line-2);color:var(--text)}
.btn.ghost:hover{border-color:var(--brand-accent);background:var(--ever-soft)}
.btn.danger{background:var(--negative);color:var(--on-negative)}
.btn.brass{background:var(--brass);color:var(--on-warning)}
.btn[disabled]{opacity:.5;cursor:not-allowed}
.btn.sm{padding:6px 12px;font-size:.78rem}

/* ---------- empty & onboarding ---------- */
/* UIX-2: merged with the former ~:2401 override, which used to redeclare .empty
   later in the file with the same specificity and win under cascade order. */
.empty{padding:68px 30px;text-align:center;color:var(--text-muted);background:var(--surface);
  border:1px dashed var(--line-2);border-radius:24px}
.empty h3{font-family:var(--display);font-weight:600;color:var(--ink-2);font-size:1.2rem;margin-bottom:8px;letter-spacing:-.02em}

/* ---------- admin ---------- */
.pipeline{display:flex;flex-direction:column;gap:22px}
.pl-company-group{display:flex;flex-direction:column;gap:8px}
.pl-company-h{font-family:var(--display);font-weight:600;font-size:.92rem;color:var(--text);
  display:flex;align-items:baseline;gap:8px;padding-bottom:4px;border-bottom:1px solid var(--line)}
.pl-company-h .count{font-family:var(--body);font-weight:600;font-size:.72rem;color:var(--text-muted)}
.pl-item{display:flex;align-items:center;gap:14px;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r-sm);padding:12px 16px;flex-wrap:wrap}
.pl-item .who{min-width:150px}
.pl-item .who span{display:block;font-size:.74rem;color:var(--text-muted)}
.state-chip{font-size:.7rem;font-weight:800;letter-spacing:.06em;padding:4px 11px;text-transform:uppercase}
.state-chip.published{background:var(--pos-soft);color:var(--positive)}
.state-chip.draft{background:var(--brass-soft);color:var(--brass)}
.state-chip.ready{background:var(--ever-soft);color:var(--brand-accent)}
.state-chip.waiting_pdfs{background:var(--surface-page);color:var(--text-muted)}
.state-chip.analyzing{background:var(--info-soft);color:var(--chart-3)}
.state-chip.pending_sync{background:var(--info-soft);color:var(--chart-3)}
.state-chip.invalid{background:var(--neg-soft);color:var(--negative)}
.state-chip.source_error{background:var(--neg-soft);color:var(--negative)}
.state-chip.deleted{background:var(--surface-page);color:var(--text-muted);text-decoration:line-through}
.pl-item .detail{font-size:.77rem;color:var(--ink-2);flex:1;min-width:180px}
.pl-item .act{margin-left:auto;display:flex;gap:8px}
.flow-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin:12px 0 4px}
.flow-step{background:var(--surface-alt);border:1px solid var(--line);border-radius:var(--r-sm);padding:12px 14px;font-size:.8rem;line-height:1.5;color:var(--ink-2)}
.flow-step b{display:flex;gap:8px;align-items:center;color:var(--text);margin-bottom:4px;font-size:.82rem}
.flow-step .n{font-family:var(--num);color:var(--brass);font-size:.72rem}
.company-directory{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.company-contact-card{min-width:0;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-alt);padding:17px}
.company-contact-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:12px;
  color:var(--text);font-family:var(--display);font-size:.92rem;font-weight:700}
.company-contact-head code{flex-shrink:0;border-radius:7px;background:var(--surface);padding:3px 6px;color:var(--brand-accent);
  font:700 .75rem var(--num)}
.company-contact-card dl{display:flex;flex-direction:column;gap:9px}
.company-contact-card dl div{display:grid;grid-template-columns:minmax(96px,32%) 1fr;gap:12px;align-items:start}
.company-contact-card dt{color:var(--text-muted);font-size:.75rem;font-weight:700}
.company-contact-card dd{min-width:0;color:var(--ink-2);font-size:.8rem;overflow-wrap:anywhere}
.company-contact-card a{color:var(--brand-accent);text-decoration:none;font-weight:700}
.company-contact-card a:hover{text-decoration:underline}
.workspace-directory{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:16px}
.workspace-card{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-alt);padding:17px}
.workspace-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.workspace-card-head h3{margin:0 0 3px;font-size:1rem}.workspace-card-head code{color:var(--text-muted);font-size:.72rem}
.workspace-card-meta{display:flex;justify-content:space-between;gap:10px;margin:16px 0;color:var(--text-muted);font-size:.78rem}.workspace-card-meta span:last-child{color:var(--brand-accent);font-weight:750;text-align:right}
.workspace-card-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.workspace-context{display:flex;align-items:center;gap:10px}.workspace-context code{color:var(--text-muted);font-size:.76rem}.workspace-next{display:flex;align-items:baseline;gap:12px;padding:18px 0;border-bottom:1px solid var(--line)}.workspace-next strong{font-size:1.05rem}.workspace-next>span:last-child{color:var(--text-muted);font-size:.8rem}.access-editor-list{display:grid;gap:7px;margin:8px 0 12px}.access-editor-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto auto auto;align-items:center;gap:7px;padding:8px 0;border-bottom:1px solid var(--line);font-size:.78rem}.access-editor-row>span:first-child{overflow-wrap:anywhere}.access-login-cell{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.access-login-actions{display:flex;gap:6px}.checkline{display:flex;align-items:center;gap:7px;min-height:44px;color:var(--text-muted);font-size:.78rem;font-weight:700}.checkline input{accent-color:var(--brand-accent)}
.workflow-stepper{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:16px 0 0;padding:0;list-style:none}.workflow-stepper li{display:flex;align-items:center;gap:7px;padding:10px;border-top:2px solid var(--line);color:var(--text-muted);font-size:.76rem;font-weight:750}.workflow-stepper li span{display:grid;place-items:center;width:20px;height:20px;border-radius:var(--r-round);border:1px solid var(--line-2);font-size:.72rem}.workflow-stepper li.done{border-color:var(--positive);color:var(--positive)}.workflow-stepper li.done span{background:var(--positive);border-color:var(--positive);color:var(--on-accent)}.workflow-stepper li.current{border-color:var(--brand-accent);color:var(--text)}.workflow-stepper li.current span{border-color:var(--brand-accent)}
.workspace-shell{margin:18px 0 10px;padding:22px 26px;border:1px solid var(--line);border-radius:var(--r);background:var(--card);box-shadow:var(--shadow-sm)}
.workspace-back{border:0;background:none;padding:0;color:var(--brand-accent);font:750 .76rem/1 var(--body);cursor:pointer}
.workspace-back:hover{text-decoration:underline}.workspace-back:focus-visible{outline:2px solid var(--focus);outline-offset:5px;border-radius:2px}
.workspace-shell-main{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-top:18px}.workspace-shell h1{margin:4px 0 5px;font-size:clamp(1.7rem,3vw,2.65rem)}.workspace-shell p{margin:0;color:var(--text-muted);font-size:.84rem}
.workspace-settings{margin:14px 0;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-alt)}.workspace-settings summary{padding:13px 15px;cursor:pointer;color:var(--text);font-size:.78rem;font-weight:800}.workspace-settings[open] summary{border-bottom:1px solid var(--line)}.workspace-settings .pl-format{padding:13px 15px;margin:0}
.workspace-period-list{display:grid;gap:12px}.workspace-period{padding:18px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--card)}.workspace-period-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.workspace-period-head .who{display:grid;gap:5px}.workspace-period-head .detail{color:var(--text-muted);font-size:.76rem}
.period-trail{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin:18px 0;padding:0;list-style:none}.period-trail li{display:flex;padding-top:5px;border-top:2px solid var(--line);color:var(--text-muted);font-size:.68rem;font-weight:750}.period-stage{display:flex;align-items:center;gap:6px;width:100%;min-height:30px;padding:3px 2px;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.period-stage:hover{color:var(--brand-accent);background:var(--ever-soft)}.period-stage:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.period-trail li span{display:grid;place-items:center;width:18px;height:18px;flex:0 0 18px;border:1px solid var(--line-2);border-radius:var(--r-round);font-size:.62rem}.period-trail li.done{border-color:var(--positive);color:var(--positive)}.period-trail li.done span{border-color:var(--positive);background:var(--positive);color:var(--on-accent)}.period-trail li.current{border-color:var(--brand-accent);color:var(--text)}.period-trail li.current span{border-color:var(--brand-accent)}
.period-source-panel{margin:-6px 0 16px;padding:12px 14px;border-left:3px solid var(--brand-accent);background:var(--surface-alt);color:var(--ink-2);font-size:.76rem}.period-source-panel strong{display:block;margin-bottom:6px;color:var(--text)}.period-source-panel ul{display:flex;flex-wrap:wrap;gap:6px 18px;margin:0;padding-left:18px}.period-source-panel[hidden]{display:none}
.service-reconciliation{display:flex;justify-content:space-between;gap:12px;margin:8px 0 10px;padding:8px 10px;border-radius:var(--r-8);font-size:.7rem;font-weight:750}.service-reconciliation.bad{background:var(--neg-soft);color:var(--negative)}
.service-groups{display:grid}.service-group-header,.service-group>summary{display:grid;grid-template-columns:minmax(150px,1fr) minmax(90px,1.2fr) 70px 62px 18px;align-items:center;gap:10px}.service-group-header{padding:2px 0 6px;color:var(--text-muted);font-size:.6rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase}.service-group-header span:nth-child(3),.service-group-header span:nth-child(4){text-align:right}.service-group{border-bottom:1px solid var(--line)}.service-group>summary{padding:9px 0;cursor:pointer;list-style:none}.service-group>summary::-webkit-details-marker{display:none}.service-name{min-width:0;font-size:.8rem;font-weight:650;color:var(--text)}.service-group .bar-track{height:7px;border-radius:var(--r-9);background:var(--surface-alt);overflow:hidden}.service-group .bar-fill{display:block;height:100%;border-radius:var(--r-9);background:var(--positive)}.service-group summary strong,.service-share{text-align:right;font-size:.75rem;font-variant-numeric:tabular-nums}.service-share{color:var(--ink-2);font-family:var(--num)}.service-toggle{color:var(--text-muted)}.service-group[open] .service-toggle{transform:rotate(45deg)}.service-detail{display:grid;gap:5px;margin:0 0 10px;padding:10px;background:var(--surface-alt)}.service-detail>div:not(.service-source-status){display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 12px;font-size:.72rem}.service-detail small{grid-column:1/-1;color:var(--text-muted)}.service-source-status{font-size:.68rem;font-weight:750}.service-source-status.ok{color:var(--positive)}.service-source-status.bad{color:var(--negative)}.service-group-total{display:grid;grid-template-columns:1fr 70px 62px;gap:10px;padding:10px 28px 0 0;color:var(--text);font-size:.76rem;border-top:2px solid var(--line)}.service-group-total span,.service-group-total b{text-align:right;font-family:var(--num)}
.service-group-others{margin-top:5px;border:1px solid var(--line-2);border-radius:10px;background:var(--surface-alt)}.service-group-others>summary{padding:10px}.service-group-others .service-name>span{display:block}.service-group-others .service-name>small{display:block;margin-top:2px;color:var(--text-muted);font-size:.64rem;font-weight:600}.service-group-others .bar-fill{background:var(--brand-accent)}.service-others-detail{display:grid;gap:8px;padding:0 10px 10px}.service-other-item{padding:10px;border:1px solid var(--line);border-radius:var(--r-8);background:var(--card)}.service-other-item>header{display:grid;grid-template-columns:minmax(0,1fr) auto 62px;gap:12px;padding-bottom:7px;border-bottom:1px solid var(--line);font-size:.72rem}.service-other-item>header b,.service-other-item>header span{font-family:var(--num);text-align:right}.service-other-item>header span{color:var(--ink-2)}.service-other-source{display:grid;gap:5px;padding-top:7px}.service-other-source>div:not(.service-source-status){display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 12px;font-size:.68rem}.service-other-source small{grid-column:1/-1;color:var(--text-muted)}
.source-repair{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:7px 18px;align-items:center;margin:-5px 0 16px;padding:14px;border:1px solid color-mix(in srgb,var(--negative) 28%,var(--line));border-left:4px solid var(--negative);background:var(--neg-soft)}
.source-repair>strong{color:var(--text)}.source-repair ol{grid-column:1;margin:0;padding-left:20px;color:var(--ink-2);font-size:.76rem;line-height:1.65}.source-repair .btn{grid-column:2;grid-row:1/3}
.stage-target{animation:stage-target-pulse 1.4s ease-out 2}@keyframes stage-target-pulse{0%,100%{box-shadow:none}35%{box-shadow:0 0 0 5px color-mix(in srgb,var(--brand-accent) 30%,transparent)}}
.workspace-period-action{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:12px;border-top:1px solid var(--line);color:var(--text-muted);font-size:.72rem;font-weight:750}
.email-connection{display:flex;align-items:center;flex-wrap:wrap;gap:9px;margin:0 0 14px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-12);background:var(--surface-alt)}.email-connection .footnote{margin:0}
.delivery-receipts{display:grid;gap:7px}.delivery-receipt{display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;align-items:center;gap:8px;padding:9px 0;border-bottom:1px solid var(--line);font-size:.78rem}.delivery-receipt>span:first-child{overflow-wrap:anywhere}
.access-email-list{display:flex;flex-wrap:wrap;gap:6px}
.access-email-list a{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:1px solid var(--line);border-radius:var(--r-pill);padding:4px 8px;background:var(--surface);font:650 .72rem var(--body)}
.access-email-list a[data-primary="true"]{border-color:var(--brand-accent)}
.onboarding-panel{position:relative;overflow:hidden}
.onboarding-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:0;margin:22px 0;border-block:1px solid var(--line)}
.onboarding-steps span{display:flex;align-items:center;gap:9px;padding:12px 8px;font-size:.76rem;font-weight:750;color:var(--text-muted)}
.onboarding-steps span+span{border-left:1px solid var(--line)}
.onboarding-steps b{display:grid;place-items:center;width:24px;height:24px;border-radius:var(--r-round);background:var(--ever-soft);color:var(--brand-primary);font:700 .72rem var(--num)}
.onboarding-fields{margin-bottom:4px}
.onboarding-scope{display:flex;align-items:center;gap:10px;min-height:48px;padding:9px 12px;border:1px solid var(--line);border-radius:var(--r-12);background:var(--surface-alt)}
.onboarding-scope>span{color:var(--positive);font-weight:800}
.onboarding-scope div{display:flex;flex-direction:column}.onboarding-scope small{color:var(--text-muted)}
.onboarding-note{margin:12px 0;padding:11px 13px;border-left:3px solid var(--warning);background:var(--warn-soft);color:var(--text-muted);font-size:.8rem;line-height:1.5}
.onboarding-result{margin-top:18px;padding:18px;border:1px solid var(--positive);border-radius:16px;background:var(--pos-soft)}
.onboarding-result-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}
.onboarding-result-head div{display:flex;flex-direction:column;gap:3px}.onboarding-result-head small{color:var(--text-muted)}
.onboarding-result-head>span{display:grid;place-items:center;width:30px;height:30px;border-radius:var(--r-round);background:var(--positive);color:var(--on-accent);font-weight:800}
.onboarding-result label{display:block;margin:12px 0 6px;font-size:.7rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted)}
.delivery-link{display:flex;align-items:center;gap:8px}.delivery-link code{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.onboarding-result textarea{width:100%;resize:vertical;margin-bottom:8px;border:1px solid var(--line);border-radius:var(--r-12);padding:12px;background:var(--surface);color:var(--text);font:500 .85rem/1.5 var(--body)}
.delivery-stack{display:grid;gap:12px}.delivery-card{padding:14px;border:1px solid var(--line);border-radius:var(--r-12);background:var(--surface)}
.delivery-card>b{overflow-wrap:anywhere}
@media(max-width:900px){.company-directory,.workspace-directory{grid-template-columns:1fr}.workspace-next{flex-wrap:wrap}.delivery-receipt{grid-template-columns:minmax(0,1fr) auto}.period-trail{grid-template-columns:1fr}.period-trail li{min-height:28px}.workspace-shell-main{align-items:flex-start}}
/* Access controls have intrinsically wide chips and actions; a fixed grid
   squeezed e-mail addresses to one character per line. */
.access-editor-row{display:flex;flex-wrap:wrap;align-items:center;gap:7px;padding:8px 0;border-bottom:1px solid var(--line);font-size:.78rem}
.access-editor-row>span:first-child{flex:0 1 auto;min-width:0;overflow-wrap:anywhere}
.access-editor-row>.state-chip{flex:0 0 auto;white-space:nowrap}
.access-editor-row>.btn{margin-left:auto}
@media(max-width:520px){.workspace-shell{padding:18px}.workspace-shell-main,.workspace-period-head,.workspace-period-action{align-items:stretch;flex-direction:column}.workspace-period{padding:15px}.admin-subnav{overflow-x:auto;justify-content:flex-start}.admin-subnav button{white-space:nowrap}
  .period-picker{grid-template-columns:auto minmax(0,1fr) auto}.period-summary{display:none}.source-repair{grid-template-columns:1fr}.source-repair .btn{grid-column:1;grid-row:auto}
  #main.workspace-canvas>.admin-subnav{grid-template-columns:repeat(4,minmax(112px,1fr))}
}
@media(max-width:620px){.onboarding-steps{grid-template-columns:1fr}.onboarding-steps span+span{border-left:0;border-top:1px solid var(--line)}.delivery-link{align-items:stretch;flex-direction:column}.company-contact-card dl div{grid-template-columns:1fr;gap:3px}}
/* ---------- DUN-1981: new-client onboarding wizard ---------- */
.onboarding-wizard-nav li.clickable{cursor:pointer}
.onboarding-wizard-nav li.clickable:hover{color:var(--text)}
.onboarding-step-body{margin-bottom:16px}
.onb-report-list{list-style:none;padding:0;margin:8px 0;display:grid;gap:6px}
.onb-report-list li{font:650 .82rem var(--num);padding:6px 10px;border:1px solid var(--line);border-radius:var(--r-8);background:var(--surface-alt)}
@media(max-width:620px){.onboarding-wizard-nav{grid-template-columns:1fr}}
.adm-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
/* a lone panel inside the 2-column admin grid (e.g. the delete danger zone)
   spans the full row, so every panel in every admin tab shares one width */
.adm-grid:has(>.panel:only-child){grid-template-columns:1fr}
@media(max-width:860px){.adm-grid{grid-template-columns:1fr}}
.adm-field{margin-bottom:10px}
.adm-field label{font-size:.67rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);display:block;margin-bottom:4px}
.adm-field input:not([type=checkbox]):not([type=radio]):not([type=file]),.adm-field textarea,.adm-field select{width:100%;box-sizing:border-box;font-family:var(--body);font-size:.9rem;font-weight:600;
  border:1px solid var(--line-2);border-radius:var(--r-8);padding:8px 11px;background:var(--surface);color:var(--text)}
.adm-field textarea{resize:vertical;line-height:1.45}.field-hint{display:block;margin-top:5px;color:var(--text-muted);font-size:.72rem;line-height:1.4}
input[type=file]{font-size:.8rem;padding:7px;border:1px dashed var(--line-2);border-radius:var(--r-8);width:100%;background:var(--surface-page)}
.adm-log{font-family:var(--num);font-size:.74rem;background:var(--brand-primary);color:var(--terminal-text);border-radius:var(--r-9);
  padding:11px 13px;margin-top:10px;white-space:pre-wrap;max-height:220px;overflow-y:auto;display:none}
.badge{display:inline-block;font-size:.64rem;font-weight:800;letter-spacing:.08em;
  padding:3px 10px;background:var(--brass-soft);color:var(--brass);vertical-align:middle}

/* ---------- reveal animation (opacity only — transform layers break pane capture) ---------- */
.hero{animation:rise .5s ease-out both}
@keyframes rise{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.hero{animation:none}}

/* ---------- responsive chrome ---------- */
@media(max-width:820px){
  /* Keep only the brand row sticky. The views, role controls and PDF action
     remain in normal flow, so reading a report does not permanently consume
     the viewport with a multi-row header. */
  .topbar{display:contents}
  .brand{position:sticky;top:0;z-index:60;box-sizing:border-box;width:100%;height:56px;
    padding:0 14px;background:var(--brand-primary);gap:8px}
  .brand .word{font-size:1rem;min-width:0;overflow:hidden;text-overflow:ellipsis}
  .brand .tag{display:none}
  .brand .mobile-lang{display:flex;margin-left:auto;flex-shrink:0}
  .top-right .desktop-lang{display:none}
  .views{width:100%;margin:0;padding:8px 14px;overflow-x:auto;background:var(--brand-primary);gap:2px}
  .views button{flex-shrink:0}
  .top-right{margin:0;width:100%;padding:8px 14px;box-sizing:border-box;justify-content:flex-start;flex-wrap:wrap}
  .ctxbar{top:0;position:static;padding:10px 14px}
  .wrap{padding:18px 14px 70px}
}
button:focus-visible,a:focus-visible,select:focus-visible{outline:2px solid var(--brand-accent);outline-offset:2px}

/* ---------- toasts ---------- */
#toasts{position:fixed;right:18px;bottom:18px;z-index:300;display:flex;flex-direction:column-reverse;gap:8px;
  max-width:340px}
.toast{background:var(--brand-primary);color:var(--tooltip-text);border-radius:10px;padding:11px 14px;font-size:.84rem;
  line-height:1.45;box-shadow:0 10px 28px rgba(0,0,0,.28);animation:toastin .18s ease-out both;
  display:flex;gap:10px;align-items:flex-start}
.toast.err{background:var(--toast-err-bg)}
.toast .x{margin-left:auto;background:none;border:none;color:inherit;opacity:.6;font-size:1rem;line-height:1;
  cursor:pointer;padding:0 2px}
.toast .x:hover{opacity:1}
@keyframes toastin{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.toast{animation:none}}

/* ---------- notes ---------- */
.notes-box textarea{width:100%;min-height:88px;font-family:var(--body);font-size:.85rem;color:var(--text);
  border:1px solid var(--line-2);border-radius:var(--r-9);padding:9px 11px;resize:vertical;background:var(--surface)}
.notes-save{margin-top:8px}
.notes-saved{font-size:.72rem;color:var(--positive);opacity:0;transition:opacity .2s;margin-left:8px}
.notes-saved.on{opacity:1}

/* ---------- pipeline search ---------- */
.pl-search{width:100%;max-width:320px;font-family:var(--body);font-size:.87rem;border:1px solid var(--line-2);
  border-radius:var(--r-9);padding:8px 12px;background:var(--surface);margin-bottom:12px}

/* ---------- skeleton loading ---------- */
.skeleton{background:linear-gradient(90deg,var(--line) 25%,var(--surface-alt) 50%,var(--line) 75%);
  background-size:200% 100%;animation:shimmer 1.3s linear infinite;border-radius:var(--r-8)}
@keyframes shimmer{from{background-position:200% 0}to{background-position:-200% 0}}
@media(prefers-reduced-motion:reduce){.skeleton{animation:none;background:var(--line)}}
/* The loading placeholder inside .empty.report-loading (app.js's
   loadingSkeletonHtml): a stack of bars standing in for the document. */
.skeleton-bars{display:flex;flex-direction:column;gap:10px;width:100%;max-width:420px;margin:18px auto 0}
.skeleton-bars .skeleton{height:14px}
.skeleton-bars .skeleton:first-child{height:20px;width:70%}
.skeleton-bars .skeleton:last-child{width:45%}

@media print{
  body{height:auto;overflow:visible}
  #scroller{height:auto;overflow:visible}
  /* #files: download links make no sense on paper */
  .topbar,.ctxbar,.rail,.toc,#tt,#toasts,#analysis-activity,.draft-banner .actions,#files{display:none!important}
  .wrap{display:block;padding:0;max-width:none}
  .section{page-break-inside:avoid;animation:none}
  body{background:var(--surface)}
  .panel,.kpi,.status-card{box-shadow:none}
}

/* ==========================================================================
   Boardroom Instrument — Liquid Glass is reserved for functional layers.
   Content surfaces stay opaque so financial data never competes with effects.
   ========================================================================== */
html{font-size:16px;color-scheme:light}
/* clean canvas: no ambient gradients — the paper-toned page itself is the
   surface; white cards float on it. */
body{background:var(--surface-page);min-width:320px}
/* the letterhead thread: a fixed hairline of the brand metals across the very
   top of the window (maroon -> champagne -> silver), the same gradient the
   section rules and brand mark use. Non-interactive, present on every view. */
body::after{content:"";position:fixed;left:0;top:0;right:0;height:3px;z-index:500;pointer-events:none;
  background:linear-gradient(90deg,var(--gold-1),var(--gold-2) 46%,var(--silver-2) 92%)}
@media print{body::after{display:none}}
#scroller{scroll-snap-type:none;scroll-padding-top:164px}
.hero,.section{scroll-snap-align:none}
button,input,select,textarea{font:inherit}
button{min-height:44px}
input,select,textarea{color-scheme:inherit}

/* brand instrument */
.brand-mark{display:inline-flex;align-items:flex-end;gap:2px;width:20px;height:22px;flex:0 0 auto}
.brand-mark i{display:block;width:4px;border-radius:4px;background:linear-gradient(180deg,var(--gold-2),var(--gold-1) 160%)}
.brand-mark i:nth-child(1){height:9px}
.brand-mark i:nth-child(2){height:15px}
.brand-mark i:nth-child(3){height:21px}
.brand .brand-mark{color:var(--brand-accent)}
.login-brand .brand-mark{color:var(--on-dark-strong)}
/* wordmark follows the brand collateral: spaced capitals, quiet weight */
.brand .word,.login-brand .word{font-family:var(--body);font-style:normal;font-weight:700;letter-spacing:.13em;text-transform:uppercase}
.brand .word i,.login-brand .word i{font-style:normal;font-weight:450;color:var(--brand-accent);letter-spacing:.13em}

/* glass command bar */
.topbar{
  width:min(calc(100% - 32px),1480px);height:64px;margin:12px auto 0;padding:8px 12px 8px 16px;
  position:sticky;top:12px;z-index:70;border:1px solid var(--glass-border);border-radius:22px;
  background:var(--glass-bg);color:var(--text);box-shadow:var(--shadow-float);
  backdrop-filter:blur(24px) saturate(145%);-webkit-backdrop-filter:blur(24px) saturate(145%);
}
.topbar::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  box-shadow:inset 0 1px var(--glass-highlight)}
.brand{gap:8px}
.brand .word{font-size:1.02rem;color:var(--text);gap:5px}
.brand .tag{font-size:.75rem;letter-spacing:.1em;text-transform:none;color:var(--text-muted);font-weight:650}
.views{height:100%;align-items:center;gap:3px;margin-left:10px}
.views button{
  display:inline-flex;align-items:center;gap:7px;min-height:44px;padding:0 13px;border-radius:var(--r-14);
  color:var(--text-muted);font-size:.83rem;font-weight:680;transition:background .18s ease,color .18s ease,transform .18s ease;
}
.views button:hover{background:color-mix(in srgb,var(--surface) 62%,transparent);color:var(--text)}
.views button.on{color:var(--text);background:var(--surface);box-shadow:0 5px 18px -12px var(--glass-shadow)}
.views button.on::after{display:none}
.nav-icon,.nav-icon svg{width:18px;height:18px}
.nav-icon svg,.icon-btn svg,.search-trigger svg{fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.top-right{gap:7px}
.seg{
  min-height:44px;align-items:center;background:color-mix(in srgb,var(--surface) 55%,transparent);
  border:1px solid var(--glass-border);border-radius:var(--r-14);padding:3px;
}
.seg button{min-height:36px;padding:5px 10px;border-radius:10px;color:var(--text-muted)}
.seg button.on{background:var(--surface);color:var(--text);box-shadow:0 4px 14px -10px var(--glass-shadow)}
.seg.role button.on{background:var(--brand-accent);color:var(--on-accent)}
.icon-btn{
  min-height:44px;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:0 12px;
  border:1px solid var(--glass-border);border-radius:var(--r-14);background:color-mix(in srgb,var(--surface) 58%,transparent);
  color:var(--text);font-size:.78rem;font-weight:720;
}
.icon-btn:hover{background:var(--surface)}
.icon-btn svg{width:18px;height:18px}
.icon-btn.icon-only{width:44px;padding:0}
.role-short{display:none}

/* appearance chooser */
.theme-dialog{position:fixed;inset:0;z-index:240;display:grid;place-items:start end;padding:84px 24px 24px}
.theme-scrim{position:absolute;inset:0;width:100%;height:100%;border:0;background:color-mix(in srgb,var(--brand-primary) 28%,transparent)}
.theme-sheet{
  position:relative;width:min(390px,calc(100vw - 32px));padding:18px;border:1px solid var(--glass-border);border-radius:22px;
  background:var(--glass-bg);box-shadow:var(--shadow-float);backdrop-filter:blur(28px) saturate(150%);
  -webkit-backdrop-filter:blur(28px) saturate(150%)
}
.theme-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.theme-kicker{display:block;margin-bottom:2px;color:var(--brand-accent);font-size:.75rem;font-weight:760;letter-spacing:.1em;text-transform:uppercase}
.theme-head h2{font-family:var(--display);font-size:1.15rem;letter-spacing:-.02em}
.theme-close,.mobile-context-head button{width:44px;height:44px;border:1px solid var(--line);border-radius:13px;background:var(--surface);color:var(--text);font-size:1.3rem}
.theme-options{display:grid;gap:8px}
/* SET-6 (DUN-3116): the client profile dialog's field stack (same sheet as
 * the theme dialog above; the sheet's own 18px padding frames it). */
.profile-fields{display:grid;gap:12px}
.profile-fields .btn{justify-self:start}
.theme-option{
  display:grid;grid-template-columns:62px minmax(0,1fr) 22px;align-items:center;gap:12px;width:100%;min-height:72px;padding:9px 12px;
  border:1px solid var(--line);border-radius:15px;background:var(--surface);color:var(--text);text-align:left
}
.theme-option:hover{border-color:var(--line-2);background:var(--surface-alt)}
.theme-option.on{border-color:var(--brand-accent);box-shadow:inset 0 0 0 1px var(--brand-accent)}
.theme-option strong,.theme-option small{display:block}
.theme-option strong{font-size:.9rem}
.theme-option small{margin-top:3px;color:var(--text-muted);font-size:.75rem}
.theme-preview{display:grid;grid-template-columns:repeat(3,1fr);gap:3px;width:58px;height:42px;padding:5px;border-radius:10px}
.theme-preview i{border-radius:5px}
.preview-auto{background:var(--preview-light-card);box-shadow:inset 0 0 0 1px var(--line)}
.preview-auto i:first-child{background:var(--gold-2)}.preview-auto i:nth-child(2){background:var(--preview-light-bg)}.preview-auto i:last-child{background:var(--silver-2)}
.preview-light{background:var(--preview-light-bg)}.preview-light i:first-child{background:var(--gold-1)}.preview-light i:nth-child(2){background:var(--preview-light-card)}.preview-light i:last-child{background:var(--preview-light-pos)}
.preview-contrast{background:var(--preview-contrast-bg)}.preview-contrast i:first-child{background:var(--preview-dark-accent)}.preview-contrast i:nth-child(2){background:var(--preview-contrast-card)}.preview-contrast i:last-child{background:var(--silver-2)}
.theme-check{width:20px;height:20px;opacity:0;fill:none;stroke:var(--brand-accent);stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.theme-option.on .theme-check{opacity:1}

/* DUN-1986: dispatch panel — same scrim/sheet/dialog shape as .theme-dialog
   above, centered and wider since it holds a recipient editor, checklist and
   collapsed email preview rather than three radio rows. */
.dispatch-dialog{position:fixed;inset:0;z-index:260;display:grid;place-items:center;padding:24px}
.dispatch-scrim{position:absolute;inset:0;width:100%;height:100%;border:0;background:color-mix(in srgb,var(--brand-primary) 32%,transparent)}
.dispatch-sheet{
  position:relative;display:flex;flex-direction:column;width:calc(100vw - 24px);height:calc(100vh - 24px);max-width:none;max-height:none;overflow:hidden;padding:18px 20px;
  border:1px solid var(--glass-border);border-radius:22px;background:var(--glass-bg);box-shadow:var(--shadow-float);
  backdrop-filter:blur(28px) saturate(150%);-webkit-backdrop-filter:blur(28px) saturate(150%)
}
.dispatch-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex:none;margin-bottom:12px}
.dispatch-kicker{display:block;margin-bottom:2px;color:var(--brand-accent);font-size:.75rem;font-weight:760;letter-spacing:.1em;text-transform:uppercase}
.dispatch-head h2{font-family:var(--display);font-size:1.15rem;letter-spacing:-.02em}
.dispatch-close{width:44px;height:44px;flex:none;border:1px solid var(--line);border-radius:13px;background:var(--surface);color:var(--text);font-size:1.3rem}
.dispatch-loading{display:flex;align-items:center;gap:14px;min-height:92px;padding:16px;border:1px solid var(--line);border-radius:var(--r-14);background:var(--surface-alt)}
.dispatch-loading-mark{width:26px;height:26px;flex:none;border:3px solid var(--line-2);border-top-color:var(--brand-accent);border-radius:var(--r-round);animation:dispatchSpin .75s linear infinite}
.dispatch-loading strong,.dispatch-loading small{display:block}
.dispatch-loading strong{font-size:.86rem}
.dispatch-loading small{margin-top:5px;color:var(--text-muted);font-size:.74rem;line-height:1.4}
.dispatch-load-error{padding:16px;border-left:4px solid var(--negative);background:var(--neg-soft)}
.dispatch-load-error p{margin:0 0 12px;font-size:.8rem;line-height:1.5}
@keyframes dispatchSpin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.dispatch-loading-mark{animation:none;border-color:var(--brand-accent)}}
.dispatch-form-grid{display:grid;grid-template-columns:minmax(260px,290px) minmax(0,1fr);min-height:0;flex:1;border-block:1px solid var(--line)}
.dispatch-form-column{min-width:0;padding:16px 18px}
.dispatch-readiness{border-right:1px solid var(--line);background:var(--surface-alt)}
.dispatch-checklist .footnote{margin:0 0 8px}
.dispatch-checklist .access-editor-list{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px}
.dispatch-checklist .checkline{min-height:32px;padding:4px 0;font-size:.75rem;line-height:1.25}
.dispatch-readiness .callout{margin:10px 0;padding:10px 12px}
.dispatch-readiness .callout p{font-size:.76rem}
.dispatch-readiness .email-connection{margin:10px 0;padding:10px 12px}
.dispatch-access-status{margin:10px 0 0}
.dispatch-access-status .access-editor-row{grid-template-columns:minmax(0,1fr) auto auto;gap:7px;padding:7px 0}
.dispatch-delivery{display:grid;grid-template-columns:minmax(360px,410px) minmax(560px,1fr);grid-template-rows:auto minmax(0,1fr);gap:14px 18px}
.dispatch-delivery .recipient-editor{margin:0}
.dispatch-delivery .recipient-editor input,.dispatch-delivery-meta input{min-height:42px}
.dispatch-delivery .recipient-access-note{padding:8px 10px;font-size:.7rem}
.dispatch-delivery-meta{display:grid;grid-template-columns:1fr;align-content:start;gap:10px;min-height:0;overflow-y:auto;padding-right:4px}
.dispatch-delivery-meta .adm-field{margin:0}
.dispatch-delivery-meta>div:last-child>label{display:block;margin-bottom:5px;font-size:.72rem;font-weight:750}
.dispatch-preview{display:grid;grid-column:2;grid-row:1/3;grid-template-rows:auto minmax(0,1fr);min-height:0;margin:0}
.dispatch-preview>h3{margin:0 0 7px;font-size:.78rem;font-weight:800}
.dispatch-preview-stage{min-height:0;height:100%;overflow:hidden;border:1px solid var(--line);background:var(--surface)}
.dispatch-preview .email-preview{display:block;width:100%;height:100%;min-height:0;border:0;overflow:hidden;background:var(--surface)}
.dispatch-actions{display:flex;align-items:center;justify-content:space-between;gap:18px;flex:none;padding-top:12px}
.dispatch-actions>.footnote{max-width:58ch;margin:0}
.dispatch-actions .em-actions{flex:none;margin:0}
.dispatch-section{margin-bottom:16px}
.dispatch-section h3{font-size:.86rem;margin-bottom:6px}
.dispatch-locale{display:inline-flex;border:1px solid var(--line);border-radius:var(--r-pill);padding:3px;gap:2px}
.dispatch-locale button{padding:5px 14px;border-radius:var(--r-pill);font-size:.74rem;font-weight:800;color:var(--text-muted);background:transparent}
.dispatch-locale button.on{background:var(--brand-accent);color:var(--on-accent)}
.dispatch-template-controls{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:end}
.dispatch-template-controls>div>label{display:block;margin-bottom:5px;font-size:.72rem;font-weight:750}
.email-block-editor{border:1px solid var(--line);border-radius:var(--r-12);background:var(--surface)}
.email-block-editor>summary{padding:10px 12px;cursor:pointer;font-size:.76rem;font-weight:800}
.email-block-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:0 10px 10px}
.email-block-field{display:grid;gap:4px;min-width:0}
.email-block-field.wide{grid-column:1/-1}
.email-block-field>span{font-size:.65rem;font-weight:760;color:var(--text-muted);letter-spacing:.04em;text-transform:uppercase}
.email-block-field input,.email-block-field textarea{width:100%;min-height:34px;padding:7px 8px;border:1px solid var(--line);border-radius:var(--r-8);background:var(--surface-alt);font:inherit;font-size:.72rem;color:var(--text);resize:vertical}
.email-block-field textarea{min-height:54px}
.email-template-actions{display:flex;flex-wrap:wrap;gap:6px;padding:0 10px 10px}
.email-template-actions .btn{min-height:34px;padding:6px 9px;font-size:.68rem}
.email-template-library{display:grid;grid-template-columns:minmax(240px,320px) minmax(0,1fr);gap:18px}
.email-template-list,.email-template-editor{margin:0}
.email-template-toolbar{display:grid;gap:10px;margin-bottom:12px}
.email-template-toolbar input{width:100%;min-height:42px}
.email-template-cards{display:grid;gap:7px;margin:0 0 14px}
.email-template-group{display:grid;gap:7px}
.email-template-group:not(:first-child){margin-top:8px}
.email-template-group>h3{margin:0;padding:5px 2px 2px;color:var(--text-muted);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase}
.email-template-group>button{display:grid;gap:3px;width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-alt);text-align:left;color:var(--text)}
.email-template-group>button.on{border-color:var(--brand-accent);box-shadow:inset 3px 0 var(--brand-accent)}
.email-template-cards span,.email-template-cards small{font-size:.7rem;color:var(--text-muted)}
.email-template-editor>header{display:flex;justify-content:space-between;margin-bottom:14px}
.email-template-editor .email-block-grid{padding:0}
.email-template-editor-actions{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0}
.email-template-preview{display:grid;grid-template-rows:auto minmax(420px,62vh);gap:8px}
.email-template-preview iframe{width:100%;height:100%;border:1px solid var(--line);background:var(--card)}
@media(max-width:900px){.email-template-library{grid-template-columns:1fr}.email-template-preview{grid-template-rows:auto 520px}}

/* Client communications desk */
.communication-desk{display:grid;gap:18px}
.communication-hero{display:flex;align-items:center;justify-content:space-between;gap:32px;padding:22px 24px;border-left:4px solid var(--brand-accent);background:var(--card);box-shadow:0 1px 0 var(--line)}
.communication-hero h2{margin:6px 0 5px;font-size:clamp(1.7rem,3vw,2.45rem);letter-spacing:-.035em}
.communication-hero p{max-width:720px;margin:0;color:var(--text-muted)}
.communication-client-lock{display:grid;grid-template-columns:auto auto;gap:3px 14px;min-width:min(310px,34vw);padding:14px 16px;border:1px solid var(--line);background:var(--surface-alt)}
.communication-client-lock span{grid-column:1/-1;color:var(--text-muted);font-size:.64rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase}
.communication-client-lock strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.84rem}
.communication-client-lock small{align-self:center;color:var(--brand-accent);font:750 .66rem var(--num);text-transform:uppercase}
.communication-layout{display:grid;grid-template-columns:minmax(300px,360px) minmax(0,1fr);grid-template-areas:"rail preview" "compose preview";gap:14px;align-items:start}
.communication-layout>.panel{margin:0;min-width:0}
.communication-rail,.communication-compose,.communication-preview{padding:18px}
.communication-rail{grid-area:rail}.communication-compose{grid-area:compose}
.communication-rail-head{display:flex;align-items:center;gap:9px;margin-bottom:13px}
.communication-rail-head>span{display:grid;place-items:center;width:28px;height:28px;background:var(--accent-soft);color:var(--brand-accent);font-size:.7rem;font-weight:800}
.communication-rail-head h3{margin:0;font-size:.92rem}
.communication-rail-head.people{margin-top:22px;padding-top:18px;border-top:1px solid var(--line)}
.communication-rail-head.people em{margin-left:auto;color:var(--text-muted);font-size:.62rem;font-style:normal;font-weight:700}
.communication-recipient-actions{display:flex;gap:6px;margin:-3px 0 8px}
.communication-recipient-actions button{min-height:34px;padding:0 9px;border:1px solid var(--line);background:var(--surface);color:var(--brand-accent);font-size:.64rem;font-weight:750}
.communication-journeys,.communication-people{display:grid;gap:8px}
.communication-journey{display:grid;grid-template-columns:4px 1fr auto;gap:10px;align-items:start;width:100%;padding:12px;border:1px solid var(--line);border-radius:var(--r-8);background:var(--surface-alt);color:var(--text);text-align:left}
.communication-journey-mark{width:4px;height:100%;min-height:38px;background:var(--line)}
.communication-journey span:nth-child(2){display:grid;gap:4px}
.communication-journey strong{font-size:.8rem}.communication-journey small{color:var(--text-muted);font-size:.68rem;line-height:1.35}
.communication-journey em{color:var(--text-muted);font-size:.62rem;font-style:normal}
.communication-journey.on{border-color:var(--brand-accent);background:var(--accent-soft)}
.communication-journey.on .communication-journey-mark{background:var(--brand-accent)}
.communication-person{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:9px;padding:10px 0;border-bottom:1px solid var(--line);cursor:pointer}
.communication-person.disabled{opacity:.5;cursor:not-allowed}
.communication-person-main{display:grid;gap:2px;min-width:0}.communication-person-main strong,.communication-person-main small{overflow:hidden;text-overflow:ellipsis}
.communication-person-main strong{font-size:.76rem}.communication-person-main small{font-size:.64rem;color:var(--text-muted)}
.communication-person .state-chip{font-size:.56rem}
.communication-fields{display:grid;grid-template-columns:1fr;gap:11px}
.communication-fields label{display:grid;gap:5px}.communication-fields label>span{font-size:.65rem;font-weight:750;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted)}
.communication-fields .wide{grid-column:auto}.communication-fields input,.communication-fields textarea{width:100%;min-width:0;border:1px solid var(--line-2);background:var(--surface)}
.communication-fields input{min-height:44px;padding:0 11px}.communication-fields textarea{min-height:124px;padding:10px 11px;line-height:1.45;resize:vertical}
.communication-warning{margin:14px 0;padding:10px 12px;border-left:3px solid var(--negative);background:var(--neg-soft);font-size:.72rem;line-height:1.4}
.communication-send-hint{margin:13px 0 -5px;color:var(--text-muted);font-size:.7rem;line-height:1.4}
.communication-compose>.btn{width:100%;margin-top:14px}
.communication-preview{grid-area:preview;display:grid;grid-template-rows:auto auto;align-self:start}
.communication-preview iframe{display:block;width:100%;min-height:760px;overflow:hidden;border:1px solid var(--line);background:var(--dunamis-ivory)}
.communication-history{margin:0;padding:0}
.communication-history>summary{display:flex;align-items:center;gap:10px;min-height:54px;padding:12px 18px;cursor:pointer;list-style:none}
.communication-history>summary::-webkit-details-marker{display:none}
.communication-history>summary span{display:grid;place-items:center;width:28px;height:28px;background:var(--accent-soft);color:var(--brand-accent);font-size:.7rem;font-weight:800}
.communication-history>summary small{margin-left:auto;color:var(--text-muted);font:700 .68rem var(--num)}
.communication-history>div{padding:0 18px 14px;border-top:1px solid var(--line)}
.communication-history-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 0;border-top:1px solid var(--line)}
.communication-history-row>span:first-child{display:grid;gap:3px}.communication-history-row small{color:var(--text-muted);font-size:.68rem}
.communication-history-status{display:flex;align-items:center;gap:8px}
.communication-whatsapp{margin:0;padding:18px;border-left:4px solid var(--wa-grad-1)}
.communication-whatsapp>p{margin:-4px 0 12px;color:var(--text-muted);font-size:.72rem;line-height:1.45}
.communication-whatsapp textarea{display:block;width:100%;min-height:360px;padding:14px;border:1px solid var(--line-2);background:var(--surface-alt);color:var(--text);font:500 .78rem/1.55 var(--body);resize:vertical}
.communication-whatsapp>.btn{margin-top:12px}
@media(max-width:1060px){.communication-layout{grid-template-columns:1fr;grid-template-areas:"rail" "compose" "preview"}.communication-preview iframe{min-height:680px}}
@media(max-width:760px){.communication-hero{align-items:stretch;flex-direction:column}.communication-client-lock{min-width:0;width:100%}.communication-fields{grid-template-columns:1fr}.communication-fields .wide{grid-column:auto}.communication-preview{padding-inline:10px}.communication-preview iframe{min-height:560px}}
.dispatch-receipt{padding:14px;border:1px solid var(--line);border-radius:var(--r-14);background:var(--surface-alt)}
@media(max-width:1240px){
  .dispatch-sheet{display:block;width:min(680px,calc(100vw - 24px));height:auto;max-height:92vh;overflow-y:auto}
  .dispatch-form-grid{display:block;border-block:0}
  .dispatch-form-column{padding:14px 0}
  .dispatch-readiness{border-right:0;border-bottom:1px solid var(--line);background:transparent}
  .dispatch-delivery{display:flex;flex-direction:column}
  .dispatch-preview{display:grid}
  .dispatch-preview-stage{height:min(62vh,620px)}
  .dispatch-actions{position:sticky;bottom:-1px;padding:12px 0;background:var(--glass-bg)}
}
@media(max-width:620px){
  .dispatch-dialog{place-items:end center;padding:0}
  .dispatch-sheet{width:100%;max-height:92vh;border-radius:24px 24px 0 0}
  .dispatch-checklist .access-editor-list,.dispatch-delivery-meta{grid-template-columns:1fr}
  .dispatch-actions{align-items:stretch;flex-direction:column}
  .dispatch-actions .em-actions{display:grid;grid-template-columns:1fr 1fr}
  .dispatch-actions #dispatch-send{grid-column:1/-1}
}

/* Ledger Lens */
.ctxbar{
  width:min(calc(100% - 32px),1480px);min-height:76px;margin:10px auto 0;padding:10px 12px;
  top:88px;z-index:60;flex-wrap:nowrap;gap:10px;border:1px solid var(--glass-border);border-radius:24px;
  background:var(--glass-bg);box-shadow:var(--shadow-float);
  backdrop-filter:blur(28px) saturate(150%);-webkit-backdrop-filter:blur(28px) saturate(150%);
}
.ctxbar{scrollbar-width:none}
.ctxbar::-webkit-scrollbar{display:none}
.lens-controls{display:contents}
.mobile-context,.mobile-context-head{display:none}
.co-select{height:52px;padding:0 5px 0 8px;border-right:1px solid var(--line);gap:8px}
.co-select .lbl{font-size:.75rem;letter-spacing:.09em}
select{min-height:44px;border-color:transparent;background-color:transparent;border-radius:var(--r-12);font-size:.86rem}
select:hover{background-color:color-mix(in srgb,var(--surface) 66%,transparent)}
.seg.light{background:color-mix(in srgb,var(--surface) 56%,transparent);border-color:var(--glass-border)}
.seg.light button.on{color:var(--brand-accent);box-shadow:0 5px 15px -12px var(--glass-shadow)}
.spine{gap:7px;padding:0 2px;scrollbar-width:none}
.spine::-webkit-scrollbar{display:none}
.spine-chip{
  min-width:104px;min-height:52px;padding:7px 12px;border-color:transparent;border-radius:16px;
  background:color-mix(in srgb,var(--surface) 55%,transparent);transition:min-width .22s ease,background .22s ease,box-shadow .22s ease;
}
.spine-chip:hover{border-color:color-mix(in srgb,var(--brand-accent) 38%,transparent)}
.spine-chip.on{
  min-width:148px;border-color:var(--glass-border);background:var(--surface);
  box-shadow:0 10px 24px -18px var(--glass-shadow),inset 0 0 0 1px color-mix(in srgb,var(--brand-accent) 24%,transparent);
}
.spine-chip .k,.spine-chip .v{font-size:.75rem}
.spine-chip .v{margin-top:2px}
.spine-chip .bar{bottom:5px;left:12px;right:12px;height:2px}
.search-trigger{min-width:214px;min-height:48px;border-color:transparent;border-radius:15px;
  background:color-mix(in srgb,var(--surface) 55%,transparent)}
.search-trigger:hover{background:var(--surface);border-color:var(--glass-border)}
.search-trigger svg{width:18px;height:18px}
.search-panel{
  width:min(calc(100% - 32px),1480px);margin:8px auto 0;padding:14px;border:1px solid var(--line);
  border-radius:20px;background:var(--surface);box-shadow:var(--shadow);
}

/* content canvas */
.wrap{max-width:1440px;padding:38px 32px 130px;grid-template-columns:210px minmax(0,1fr);gap:42px}
.wrap.no-rail{grid-template-columns:210px minmax(0,1fr)}
#main{min-width:0;max-width:1100px}
.toc{top:190px;font-size:.78rem}
.toc .t{color:var(--brand-accent);font-size:.75rem;letter-spacing:.1em}
.toc a{padding:7px 0 7px 14px;border-left-color:var(--line);font-weight:620}
.toc a.on{color:var(--brand-accent);border-left-width:3px}

/* executive brief */
.hero{margin-bottom:30px;animation:briefIn .38s ease-out both}
.hero .eyebrow{margin-bottom:13px}
.eyebrow-txt{font-size:.75rem;letter-spacing:.13em;color:var(--brand-accent)}
.eyebrow-rule{background:linear-gradient(90deg,color-mix(in srgb,var(--brand-accent) 35%,transparent),transparent)}
.brief-heading{
  display:grid;grid-template-columns:minmax(210px,260px) minmax(0,1fr);gap:32px;align-items:end;
  margin-bottom:13px;padding:18px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)
}
.brief-period{position:relative;align-self:stretch;padding:2px 24px 2px 18px;border-right:1px solid var(--line)}
.brief-period::before{content:"";position:absolute;inset:2px auto 2px 0;width:4px;background:var(--brand-accent)}
.brief-period>span,.brief-position>span{
  display:block;margin-bottom:8px;color:var(--text-muted);font-size:.75rem;font-weight:760;letter-spacing:.1em;text-transform:uppercase
}
.brief-period h1{margin:0;color:var(--text);font-family:var(--display);font-size:clamp(1.65rem,1.25rem + 1vw,2.2rem);line-height:1.04;font-weight:760;letter-spacing:-.04em}
.brief-period-meta{display:flex;align-items:center;gap:8px;margin-top:12px;color:var(--brand-accent);font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.brief-period-meta .ov-draft-badge{margin:0}
.brief-position .headline{
  max-width:34ch;margin:0;color:var(--text);font-family:var(--display);font-size:clamp(1.65rem,1.25rem + 1.15vw,2.25rem);
  line-height:1.13;letter-spacing:-.035em;font-weight:680
}
.brief-context{max-width:78ch;margin:0 0 8px;color:var(--ink-2);font-size:1rem;line-height:1.5}
.hero .meta{max-width:76ch;font-size:.8rem;line-height:1.5;margin-bottom:20px}
.hero-kpis{margin:0 0 18px}
.decision-grid{display:grid;grid-template-columns:1.25fr 1fr;gap:16px;margin-top:18px}
.decision-card{position:relative;overflow:hidden;padding:18px 20px;border:1px solid var(--line);border-radius:var(--r-14);background:var(--surface)}
.decision-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--brand-accent)}
.decision-card.action::before{background:var(--warning)}
.decision-card .decision-label{display:block;margin-bottom:8px;font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;font-weight:800;color:var(--text-muted)}
.decision-card p{font-size:.95rem;line-height:1.55;color:var(--ink-2)}
.hero .howto{display:none}
.status-grid{display:none}

/* opaque financial content */
/* UIX-3 (DUN-3121): this block and the one at ~:3037 (Fathom reskin layer) both
   redeclare .kpi unconditionally. NOT collapsed into the base .kpi at ~:1405:
   a media-scoped ".panel,.kpi,.status-card{box-shadow:none}" rule sits between
   the base and this override, and further media-scoped ".kpi{min-height:...;
   padding:...}" rules sit between this override and the Fathom layer. Those
   media rules only win today because this unconditional override comes after
   them in source order; folding this override's declarations back into the
   base would move them ahead of those media rules and let the media rules win
   instead, changing the rendered result on narrow viewports. Left as-is. */
.kpi-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.kpi,.panel,.status-card{
  background:var(--surface);border-color:var(--line);box-shadow:0 12px 34px -30px var(--glass-shadow);
}
.kpi{min-height:132px;padding:19px 20px 17px;border-radius:var(--r-14)}
.kpi .lbl{font-size:.75rem;letter-spacing:.09em}
.kpi .val{font-family:var(--body);font-size:clamp(1.4rem,1.1rem + 1.1vw,1.8rem);font-weight:740;font-variant-numeric:tabular-nums;margin:9px 0 5px}
.delta{font-size:.75rem}
.panel{padding:22px 24px;border-radius:var(--r-14)}
.panel h3{font-family:var(--display);font-size:1rem;letter-spacing:-.02em}
.panel .psub{font-size:.8rem;line-height:1.5}
.callout{border:1px solid color-mix(in srgb,var(--brand-accent) 20%,var(--line));border-left:4px solid var(--brand-accent);border-radius:var(--r-14);padding:15px 17px}
.callout-head{display:flex;align-items:center;gap:9px;margin-bottom:5px;color:var(--text)}
.callout-head::before{content:"";width:7px;height:7px;flex:0 0 7px;border-radius:var(--r-round);background:var(--brand-accent);
  box-shadow:0 0 0 4px color-mix(in srgb,var(--brand-accent) 13%,transparent)}
.callout-head b{font-family:var(--display);font-size:.78rem;letter-spacing:.04em}
.insight-points{display:grid;grid-template-columns:minmax(0,1fr);list-style:none;margin:0;padding:0}
.insight-points li{position:relative;margin:0;padding:8px 2px 8px 19px;border-top:1px solid color-mix(in srgb,var(--line) 72%,transparent);
  color:var(--text);font-size:.84rem;line-height:1.52}
.insight-points li::before{content:"";position:absolute;left:1px;top:1.15em;width:6px;height:2px;border-radius:2px;background:var(--brand-accent)}
.insight-points li:first-child{border-top:0}
.callout.insight-dense .insight-points{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:28px}
.callout.insight-dense .insight-points li:nth-child(2){border-top:0}
.callout.amber .callout-head::before,.callout.amber .insight-points li::before{background:var(--warning)}
.callout.red .callout-head::before,.callout.red .insight-points li::before{background:var(--negative)}
.callout.brass .callout-head::before,.callout.brass .insight-points li::before{background:var(--brass)}
.data-notes-panel h3{margin-bottom:7px}
.data-notes-panel .insight-points{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:28px}
.data-notes-panel .insight-points li:nth-child(2){border-top:0}
.section{margin-bottom:36px;scroll-margin-top:190px}
.sec-head{gap:10px;margin-bottom:12px}
.sec-head .n{display:inline;min-width:0;height:auto;padding:0;border-radius:0;background:transparent;
  color:var(--brand-accent);font:600 .82rem var(--display);letter-spacing:.12em}
.sec-head h2{font-size:1.28rem;font-weight:720}
/* the gold thread: every section is stitched to the report by the brand metal */
.sec-head .rule{height:1px;background:linear-gradient(90deg,color-mix(in srgb,var(--gold-2) 65%,transparent),var(--line) 55%,var(--line))}
table{font-size:.84rem}
th{font-size:.75rem;letter-spacing:.07em}
td{padding:10px 8px}
tbody tr:hover td{background:var(--surface-alt)}
svg.chart{min-width:0;max-width:100%}
.panel:has(svg.chart){min-width:0;overflow-x:hidden}

/* progressive-disclosure chapters */
.report-chapter{margin:0 0 18px;border:1px solid var(--line);border-radius:24px;background:color-mix(in srgb,var(--surface) 72%,transparent);overflow:hidden}
.report-chapter > summary{
  min-height:68px;display:flex;align-items:center;gap:14px;padding:12px 18px;cursor:pointer;list-style:none;
  background:var(--surface);font-family:var(--display);font-weight:730;letter-spacing:-.02em;
}
.report-chapter > summary::-webkit-details-marker{display:none}
.chapter-index{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:var(--r-round);
  background:transparent;border:1px solid var(--brass-line);color:var(--brand-accent);font:600 .8rem var(--display);letter-spacing:.06em}
.chapter-copy{display:flex;flex-direction:column;gap:2px}
.chapter-copy small{font:600 .75rem var(--body);letter-spacing:0;color:var(--text-muted)}
.chapter-chevron{margin-left:auto;width:20px;height:20px;transition:transform .18s ease}
.chapter-chevron path{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.report-chapter[open] .chapter-chevron{transform:rotate(180deg)}
.report-chapter:not([open]) > .chapter-body{display:none}
.chapter-body{padding:24px 22px 8px}
.chapter-body > .section:last-child{margin-bottom:12px}

/* Processing keeps the workflow available without making it the first thing
 * an admin has to scan on every pane. */
.process-guide{margin:0 0 24px;border:1px solid var(--line);border-radius:18px;background:var(--surface);overflow:hidden}
.process-guide>summary{display:flex;align-items:center;gap:12px;min-height:58px;padding:14px 18px;cursor:pointer;list-style:none}
.process-guide>summary::-webkit-details-marker{display:none}
.guide-summary-title{font-family:var(--display);font-weight:730;color:var(--text)}
.guide-summary-hint{margin-left:auto;color:var(--text-muted);font-size:.75rem;font-weight:650}
.process-guide>summary .chapter-chevron{width:18px;height:18px;transition:transform .18s ease}
.process-guide[open]>summary .chapter-chevron{transform:rotate(180deg)}
.process-guide-body{padding:0 18px 16px;border-top:1px solid var(--line)}

/* inspector — transient glass, never part of the report grid */
.rail{
  position:fixed;top:0;right:0;z-index:180;width:min(430px,calc(100vw - 24px));height:100dvh;padding:0;
  display:flex;gap:0;background:var(--glass-bg);border-left:1px solid var(--glass-border);border-radius:24px 0 0 24px;
  box-shadow:-24px 0 70px -40px var(--glass-shadow);overflow-y:auto;transform:translateX(105%);
  transition:transform .24s cubic-bezier(.22,.8,.22,1);backdrop-filter:blur(30px) saturate(145%);-webkit-backdrop-filter:blur(30px) saturate(145%);
}
.rail.open{transform:none}
.inspector-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;justify-content:space-between;padding:18px 18px 12px;
  background:color-mix(in srgb,var(--glass-bg) 88%,transparent);border-bottom:1px solid var(--glass-border)}
.inspector-head h2{font-family:var(--display);font-size:1.05rem}
.inspector-close{width:44px;height:44px;border:0;border-radius:var(--r-14);background:var(--surface);color:var(--text);font-size:1.2rem}
.inspector-body{display:flex;flex-direction:column;gap:14px;padding:14px 18px 28px}
.inspector-scrim{position:fixed;inset:0;z-index:170;border:0;background:color-mix(in srgb,var(--ink) 36%,transparent);min-height:0}
.inspector-scrim[hidden]{display:none}
.rail .panel,.rail .wa-card{margin:0}

/* section picker is a glass sheet */
.stepper{bottom:18px;background:var(--glass-bg);color:var(--text);border:1px solid var(--glass-border);
  box-shadow:var(--shadow-float);backdrop-filter:blur(24px) saturate(145%);-webkit-backdrop-filter:blur(24px) saturate(145%)}
.stepper button,.step-current{color:var(--text)}
.step-current{font-family:var(--body)}
.stepper button{background:var(--surface)}
.picker-scrim{background:color-mix(in srgb,var(--ink) 40%,transparent)}
.picker-sheet{background:var(--glass-bg);border-color:var(--glass-border);border-radius:26px 26px 0 0;
  backdrop-filter:blur(30px) saturate(145%);-webkit-backdrop-filter:blur(30px) saturate(145%)}
.picker-option{min-height:48px;border-radius:var(--r-14);background:var(--surface)}

/* login — "Clareza executiva Dunamis": editorial context + focused access */
#login-screen{overflow-x:hidden;overflow-y:auto;background:
  linear-gradient(145deg,var(--dunamis-deep),var(--dunamis-forest) 62%,var(--ever-mid));
  isolation:isolate;padding:clamp(24px,5vw,72px)}
.login-ambient{position:absolute;inset:-20%;z-index:-2;background:
  radial-gradient(circle at 18% 18%,color-mix(in srgb,var(--dunamis-mint) 28%,transparent),transparent 25rem),
  radial-gradient(circle at 86% 78%,color-mix(in srgb,var(--dunamis-champagne) 14%,transparent),transparent 30rem);
  filter:blur(34px)}
.login-watermark{position:absolute;z-index:-1;width:min(64vw,780px);height:auto;right:-12vw;bottom:-30%;
  opacity:.045;filter:invert(1);pointer-events:none;user-select:none}
.login-shell{width:min(1120px,100%);display:grid;grid-template-columns:minmax(0,1fr) minmax(400px,460px);
  align-items:center;gap:clamp(48px,8vw,104px);margin:auto}
.login-intro{max-width:600px;color:var(--on-dark);padding:28px 0}
.login-intro-logo{display:block;width:240px;max-width:58%;height:auto;margin:0 0 44px}
.login-intro-kicker,.login-kicker{display:block;font:750 .68rem var(--body);letter-spacing:.22em;text-transform:uppercase}
.login-intro-kicker{color:var(--dunamis-mint);margin-bottom:22px}
.login-intro h2{max-width:15ch;font-family:var(--display);font-size:clamp(2.5rem,4.6vw,4.6rem);font-weight:600;
  line-height:1.02;letter-spacing:-.055em;color:var(--on-dark-strong)}
.login-intro p{max-width:54ch;margin-top:24px;color:var(--on-dark-2);font-size:1rem;line-height:1.65}
.login-assurance{display:flex;flex-wrap:wrap;gap:12px 22px;margin-top:34px;padding-top:22px;
  border-top:1px solid color-mix(in srgb,var(--dunamis-mint) 24%,transparent)}
.login-assurance span{display:inline-flex;align-items:center;gap:9px;color:var(--on-dark-2);font-size:.76rem;font-weight:650}
.login-assurance span::before{content:"";width:6px;height:6px;background:var(--dunamis-mint)}
.login-card{max-width:none;padding:42px 44px;border:1px solid color-mix(in srgb,var(--on-dark-strong) 18%,var(--line));
  border-radius:28px;background:var(--dunamis-ivory);box-shadow:0 36px 90px -34px var(--dunamis-deep)}
.login-brand{align-items:center;justify-content:flex-start;margin-bottom:20px}
.login-card-lockup{display:none;width:184px;max-width:58%;height:auto}
.login-card-identity{display:flex;align-items:center;gap:12px;color:var(--text);
  font:750 .7rem var(--body);letter-spacing:.18em;text-transform:uppercase}
.login-card-identity img{display:block;width:38px;height:38px}
.login-kicker{color:var(--brand-accent);margin-bottom:10px}
.login-card h1{font-family:var(--display);font-size:1.72rem;font-weight:700;line-height:1.15;letter-spacing:-.04em;text-align:left}
.login-sub{font-size:.88rem;line-height:1.55;text-align:left;margin:0 0 14px}
.login-card label{margin-top:4px;color:var(--ink-2);font-size:.67rem;letter-spacing:.12em;text-transform:uppercase}
.login-provider,#login-screen .login-submit,.login-card input{min-height:50px;border-radius:var(--r-12)}
.login-provider{display:flex;align-items:center;justify-content:center;gap:10px;background:var(--surface);
  border:1px solid var(--line-2);padding:10px;font-size:.84rem;font-weight:700;color:var(--text)}
.login-provider:hover{background:var(--ever-soft);border-color:var(--brand-accent)}
.login-card input{width:100%;padding:11px 14px;border-color:var(--line-2);background:var(--surface);font-size:1rem}
.login-password-wrap{position:relative}
.login-password-wrap input{padding-right:54px}
.login-password-toggle{position:absolute;inset:1px 1px 1px auto;width:48px;border:0;background:transparent;color:var(--text-muted);
  display:grid;place-items:center;border-radius:11px}
.login-password-toggle:hover{color:var(--brand-accent);background:var(--ever-soft)}
.login-password-toggle svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7}
#login-screen .login-submit{margin-top:10px;background:var(--dunamis-mint);color:var(--dunamis-deep);font-size:.9rem}
#login-screen .login-submit:hover{background:var(--cta-hover)}
#login-screen .login-submit:disabled,.login-provider:disabled{cursor:wait;opacity:.68}
.login-forgot{align-self:center;min-height:36px}
.login-support{margin-top:8px;padding-top:16px;border-top:1px solid var(--line);color:var(--text-muted);
  font-size:.72rem;text-align:center}
.login-support a{font-weight:700}
/* UIX-6 (DUN-3125): the pre-auth language selector. Deliberately quiet: the
   login screen is about signing in, and the language is a correction someone
   makes once, not a decision the page should push. */
.login-lang{display:flex;justify-content:center;gap:4px;margin-top:10px}
.login-lang button{border:1px solid transparent;background:transparent;color:var(--text-muted);
  font-size:.68rem;font-weight:700;letter-spacing:.06em;padding:4px 10px;border-radius:8px;
  cursor:pointer;min-height:28px}
.login-lang button:hover{color:var(--text)}
.login-lang button.on{border-color:var(--line);background:var(--surface);color:var(--text)}
.login-tech-credit{grid-column:1/-1;display:flex;align-items:center;justify-content:center;gap:7px;flex-wrap:wrap;
  color:var(--on-dark-muted);font-size:.72rem;letter-spacing:.02em;text-align:center}
.login-tech-credit strong{color:var(--on-dark-2)}
.login-tech-credit a{color:var(--dunamis-mint);font-weight:750;text-underline-offset:3px}
.login-tech-credit a:hover{text-decoration-thickness:2px}
.login-card input:focus-visible,.notes-box textarea:focus-visible,.adm-field input:focus-visible,.pl-search:focus-visible{
  outline:3px solid var(--focus);outline-offset:2px
}
@media(max-width:880px){
  #login-screen{align-items:flex-start;padding:24px}
  .login-shell{grid-template-columns:1fr;max-width:520px;gap:18px}
  .login-intro{padding:6px 4px 0}
  .login-intro h2{max-width:18ch;font-size:clamp(1.7rem,7vw,2.5rem);letter-spacing:-.04em}
  .login-intro p,.login-assurance{display:none}
  .login-intro-kicker{margin-bottom:10px}
  .login-intro-logo{width:200px;margin-bottom:22px}
  .login-card{padding:34px clamp(24px,7vw,40px)}
  .login-watermark{width:95vw;right:-34vw;bottom:-10%;opacity:.035}
}
@media(max-width:420px){
  #login-screen{padding:16px}
  .login-intro{display:none}
  .login-card{padding:30px 22px;border-radius:22px}
  .login-card-lockup{display:block;width:168px;max-width:62%}
  .login-card-identity{display:none}
}

/* operations */
.admin-subnav{display:inline-flex;gap:4px;margin-bottom:22px;padding:4px;border:1px solid var(--line);border-radius:16px;background:var(--surface)}
.admin-subnav button{border:0;border-radius:var(--r-12);background:transparent;color:var(--text-muted);padding:0 16px;font-weight:700}
.admin-subnav button.on{background:var(--brand-accent);color:var(--on-accent)}
.admin-pane[hidden]{display:none}
/* One client, one canvas. The header, tab rail and every pane occupy the same
   inline size; dense content scrolls inside its own component instead of
   participating in the workspace's intrinsic width calculation. */
#main.workspace-canvas{width:100%;max-width:100%;min-width:0;margin-inline:auto}
#main.workspace-canvas>.workspace-shell,
#main.workspace-canvas>.admin-subnav,
#main.workspace-canvas>.admin-pane{box-sizing:border-box;width:100%;max-width:100%;min-width:0}
#main.workspace-canvas>.admin-subnav{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:stretch
}
#main.workspace-canvas>.admin-subnav button{
  min-width:0;min-height:48px;padding-inline:12px;text-align:center
}
#main.workspace-canvas>.admin-pane>.section,
#main.workspace-canvas>.admin-pane>.panel,
#main.workspace-canvas>.admin-pane>.adm-grid{box-sizing:border-box;max-width:100%;min-width:0}
.flow-steps{grid-template-columns:repeat(4,minmax(0,1fr))}
.flow-step{border-radius:16px;background:var(--surface)}
.pl-item{min-height:62px;border-radius:16px}
.btn{min-height:44px;border-radius:13px}
.adm-field input:not([type=checkbox]):not([type=radio]):not([type=file]),.adm-field select,.pl-search{min-height:46px;border-radius:13px}
input[type=file]{min-height:46px;border-radius:13px}
.baseline-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:18px 0}
.unlock-card{display:grid;grid-template-columns:auto 1fr;gap:14px;align-items:start;text-align:left;padding:24px}
.unlock-count{display:flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:16px;background:var(--ever-soft);
  color:var(--brand-accent);font:750 1rem var(--num)}
.unlock-card p{margin-top:6px;font-size:.86rem;line-height:1.55}

/* complete focus and accessibility contracts */
button:focus-visible,a:focus-visible,select:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible,summary:focus-visible{
  outline:3px solid var(--focus);outline-offset:3px
}
@supports not ((backdrop-filter:blur(2px)) or (-webkit-backdrop-filter:blur(2px))){
  .topbar,.ctxbar,.rail,.stepper,.picker-sheet,.theme-sheet,.lens-controls,.login-card{background:var(--surface)}
}
@media(prefers-reduced-transparency:reduce){
  .topbar,.ctxbar,.rail,.stepper,.picker-sheet,.theme-sheet,.lens-controls,.login-card{background:var(--surface);backdrop-filter:none;-webkit-backdrop-filter:none}
}
@media(prefers-contrast:more){
  :root{--line:var(--ink-3);--line-2:var(--ink-2);--glass-border:var(--ink-2)}
  .topbar,.ctxbar,.rail,.stepper,.picker-sheet,.theme-sheet,.lens-controls,.login-card{background:var(--surface)}
}
@media(forced-colors:active){
  .topbar,.ctxbar,.rail,.stepper,.picker-sheet,.theme-sheet,.lens-controls,.login-card,.panel,.kpi,.review-alert{forced-color-adjust:auto;border:1px solid CanvasText}
  .chip .dot,.brand-mark i{forced-color-adjust:none;background:CanvasText}
  .nav-badge{forced-color-adjust:none;background:CanvasText;color:Canvas}
}

/* The default (Auto) appearance IS the clean white brand canvas on every
   device, so on dark-mode devices this block keeps form controls light too —
   dark native inputs on a white page would clash. Users who want a dark
   portal pick the Contrast appearance explicitly. */
@media(prefers-color-scheme:dark){
  :root:not([data-appearance="light"]):not([data-appearance="contrast"]){color-scheme:light}
  :root:not([data-appearance="light"]):not([data-appearance="contrast"]) input,
  :root:not([data-appearance="light"]):not([data-appearance="contrast"]) select,
  :root:not([data-appearance="light"]):not([data-appearance="contrast"]) textarea{color-scheme:light}
}

@media(max-width:1180px){
  .wrap,.wrap.no-rail{grid-template-columns:minmax(0,1fr);max-width:1120px}
  .toc{display:none}
  #main{max-width:none}
  .brand .tag{display:none}
}

@media(max-width:940px){
  .kpi-grid,.baseline-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .flow-steps{grid-template-columns:repeat(2,minmax(0,1fr))}
  .hero,.section{scroll-margin-top:var(--mobile-chrome-h)}
}

@media(max-width:820px){
  html{font-size:16px}
  #scroller{scroll-padding-top:144px;padding-bottom:78px}
  .topbar{
    display:flex;width:calc(100% - 16px);height:58px;margin:8px auto 0;padding:6px 8px 6px 12px;top:8px;border-radius:19px;gap:6px;
    background:var(--surface);backdrop-filter:none;-webkit-backdrop-filter:none;box-shadow:var(--shadow-float)
  }
  .brand{position:static;width:auto;height:auto;padding:0;background:transparent;gap:7px;min-width:0}
  .brand .word{font-size:.9rem;white-space:nowrap}
  .brand .tag{display:none}
  .brand .mobile-lang{display:flex;margin-left:4px}
  .brand .mobile-lang button{min-width:34px;padding:4px 6px}
  .top-right{width:auto;margin-left:auto;padding:0;flex-wrap:nowrap;gap:5px}
  .top-right .desktop-lang,.top-right #btn-print,.top-right #btn-logout{display:none!important}
  .top-right .seg.role{display:flex}
  .top-right .seg.role button{font-size:.75rem;padding:4px 7px}
  .role-full{display:none}.role-short{display:inline}
  #btn-inspector{position:fixed;right:16px;bottom:88px;z-index:120;width:48px;height:48px;padding:0;border-radius:17px;box-shadow:var(--shadow-float)}
  #btn-inspector span{display:none}
  .views{
    position:fixed;left:50%;bottom:10px;z-index:130;transform:translateX(-50%);width:min(calc(100% - 20px),520px);height:64px;
    margin:0;padding:5px;justify-content:space-around;overflow:visible;border:1px solid var(--glass-border);border-radius:23px;
    background:var(--glass-bg);box-shadow:var(--shadow-float);backdrop-filter:blur(26px) saturate(150%);-webkit-backdrop-filter:blur(26px) saturate(150%)
  }
  .views button{flex:1;min-width:0;height:52px;justify-content:center;flex-direction:column;gap:2px;padding:4px 7px;border-radius:18px;font-size:.75rem}
  .views button .nav-icon,.views button .nav-icon svg{width:19px;height:19px}
  .ctxbar{
    width:calc(100% - 16px);min-height:58px;height:58px;margin:8px auto 0;padding:5px;position:sticky;top:74px;
    border-radius:18px;overflow:visible;gap:0
  }
  .ctxbar.mobile-open{z-index:190;backdrop-filter:none;-webkit-backdrop-filter:none}
  .mobile-context{
    display:flex;align-items:center;justify-content:space-between;width:100%;height:48px;padding:7px 11px;border:0;border-radius:var(--r-14);
    background:var(--surface);color:var(--text);text-align:left
  }
  .mobile-context>span{display:block;min-width:0}
  .mobile-context strong,.mobile-context small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .mobile-context strong{font-size:.82rem;font-weight:720}
  .mobile-context small{margin-top:2px;color:var(--text-muted);font-size:.75rem}
  .mobile-context svg{width:20px;height:20px;flex:0 0 auto;fill:none;stroke:currentColor;stroke-width:1.8}
  .lens-controls{
    position:fixed;left:8px;right:8px;bottom:82px;z-index:195;display:none;grid-template-columns:1fr;gap:10px;max-height:min(72dvh,620px);
    padding:16px;border:1px solid var(--line);border-radius:24px;background:var(--surface);box-shadow:var(--shadow-float);
    overflow-y:auto;backdrop-filter:none;-webkit-backdrop-filter:none
  }
  .ctxbar.mobile-open .lens-controls{display:grid}
  .mobile-context-head{display:flex;align-items:center;justify-content:space-between}
  .mobile-context-head span,.mobile-context-head strong{display:block}
  .mobile-context-head span{color:var(--brand-accent);font-size:.75rem;font-weight:760;letter-spacing:.09em;text-transform:uppercase}
  .mobile-context-head strong{margin-top:3px;font-size:1rem}
  .context-scrim{position:fixed;inset:0;z-index:175;width:100%;height:100%;border:0;background:color-mix(in srgb,var(--brand-primary) 24%,transparent)}
  .co-select{height:54px;min-width:0;width:100%;padding:0 10px;border:1px solid var(--line);background:var(--surface);border-radius:var(--r-14)}
  .co-select .lbl{display:none}
  .co-select select{width:100%;font-size:.78rem}
  /* DUN-2436: four period types now, not three. One row of four tracks
     cannot hold "Semiannual"/"Semestral" at this width without clipping, so
     the control becomes a 2x2 grid — every label stays fully readable and
     every target stays comfortably tappable. minmax(0,1fr) (not 1fr) is what
     actually lets a track shrink below its content's min-content width. */
  .seg.light{width:100%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px;flex-shrink:0}
  .seg.light button{min-width:0;font-size:.75rem;padding:4px 8px;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .spine{min-width:0;width:100%;display:flex;flex:0 0 auto;max-width:none;overflow-x:auto;padding-bottom:3px}
  .spine-chip{min-width:104px;height:52px}
  .spine-chip.on{min-width:130px}
  .search-trigger{min-width:0;width:100%;height:48px;padding:0 12px;justify-content:flex-start;flex-shrink:0}
  .search-trigger span{display:inline}.search-trigger kbd{display:none}
  .search-panel{width:calc(100% - 16px);margin-top:7px;padding:12px}
  .search-row{display:grid;grid-template-columns:1fr 1fr}
  .search-row input#search-q{grid-column:1/-1;min-width:0}
  .search-row input,.search-row select{width:100%}
  .wrap{padding:28px 14px 130px;display:block}
  .brief-heading{grid-template-columns:1fr;gap:13px;padding:14px 0}
  .brief-period{padding:2px 0 14px 16px;border-right:0;border-bottom:1px solid var(--line)}
  .brief-period>span,.brief-position>span{margin-bottom:5px;font-size:.75rem}
  .brief-period h1{font-size:1.7rem}
  .brief-position .headline{max-width:30ch;font-size:clamp(1.75rem,7.8vw,2rem);line-height:1.12}
  .brief-context{font-size:1rem;line-height:1.48}
  .hero .meta{font-size:.76rem}
  .decision-grid{grid-template-columns:1fr}
  .kpi-grid,.baseline-grid{grid-template-columns:1fr;gap:10px}
  .kpi{min-height:0;padding:16px 17px}
  .kpi .val{font-size:1.45rem}
  .delta{max-width:100%;white-space:normal;line-height:1.3}
  .callout{padding:14px 15px}
  .callout.insight-dense .insight-points,.data-notes-panel .insight-points{grid-template-columns:minmax(0,1fr)}
  .callout.insight-dense .insight-points li:nth-child(2),.data-notes-panel .insight-points li:nth-child(2){border-top:1px solid color-mix(in srgb,var(--line) 72%,transparent)}
  .insight-points li{padding:9px 0 9px 18px;font-size:.86rem;line-height:1.5}
  .chapter-body{padding:18px 12px 4px}
  .report-chapter > summary{padding:10px 13px}
  .panel{padding:18px 16px;overflow-wrap:anywhere}
  .panel:has(svg.chart){overflow-x:hidden}
  svg.chart{min-width:0;width:100%;height:auto}
  .section{margin-bottom:24px}
  .sec-head h2{font-size:1.12rem}
  .stepper{left:auto;right:14px;bottom:86px;transform:none;width:72px;max-width:72px;border-radius:16px;padding:4px;gap:0}
  .stepper #step-prev,.stepper #step-next{display:none}
  .step-current{width:64px;min-width:0;max-width:64px;height:38px;padding:6px 7px;text-overflow:ellipsis}
  .flow-steps{grid-template-columns:1fr}
  .admin-subnav{display:grid;grid-template-columns:repeat(4,1fr);width:100%}
  .admin-subnav button{padding:0 7px;font-size:.72rem}
  .adm-grid{grid-template-columns:1fr}
  .bar-row{grid-template-columns:minmax(110px,1fr) auto auto}
  .bar-row .bar-track{grid-column:1/-1;grid-row:2}
  .rail{width:calc(100vw - 12px);border-radius:24px 0 0 24px}
  #toasts{left:12px;right:12px;bottom:88px;max-width:none}
  .theme-dialog{place-items:end center;padding:12px}
  .theme-sheet{width:min(100%,520px)}
}

@media(max-width:390px){
  .brand .word{display:none}
  .brand .brand-mark{display:block}
  .top-right .seg.role button{padding:4px 5px}
  .brand .mobile-lang button{min-width:30px;padding:4px}
  .top-right{gap:3px}
  .kpi-grid,.baseline-grid{grid-template-columns:1fr}
  .kpi{min-height:0;padding:15px 14px}
  .kpi .val{font-size:1.35rem}
  .kpi .note{font-size:.72rem}
  .decision-card{padding:16px}
  .theme-dialog{align-items:end;padding:12px}
  .theme-sheet{width:100%;border-radius:24px}
}

/* Mobile charts keep the shape and direction visible while moving exact
   values to the tap tooltip. Numeric labels inside a compressed SVG are the
   main source of collisions; category labels remain visible, and the
   semantic table stays available to assistive technology and print. */
@media(max-width:820px){
  .brand .word{display:none}
  .brand .brand-mark{display:inline-flex}
  .stepper{display:none!important}
  .panel:has(svg.chart) svg.chart{display:block}
  svg.chart text.mono,svg.chart tspan.mono{display:none}
  .panel:has(svg.chart)::after{
    display:block;margin-top:10px;padding-top:9px;border-top:1px solid var(--line);
    color:var(--text-muted);font-size:.72rem;font-weight:650;line-height:1.4
  }
  html:lang(pt-BR) .panel:has(svg.chart)::after{content:"Toque nas barras, pontos ou faixas para ver o valor exato."}
  html:lang(en) .panel:has(svg.chart)::after{content:"Tap bars, points or bands to see the exact value."}
  .chart-comparison-grid{grid-template-columns:1fr}
  .chart-comparison-item{border-left:0;border-top:1px solid var(--line)}
  .chart-comparison-item:first-child{border-top:0}
  .sec-head{align-items:flex-start}
  .sec-head h2{line-height:1.2}
  .chapter-copy{min-width:0}
  .chapter-copy small{line-height:1.35}
  .panel{overscroll-behavior-inline:contain;-webkit-overflow-scrolling:touch}
  .panel table:not(.sr-only-table):not(.jargon){min-width:620px}
  table.jargon,table.jargon tbody{display:block;width:100%}
  table.jargon tr{display:block;padding:12px 0;border-bottom:1px solid var(--line)}
  table.jargon tr:last-child{border-bottom:0}
  table.jargon td{display:block;width:100%!important;padding:0;border:0}
  table.jargon td:first-child{margin-bottom:5px;font-size:.88rem}
  table.jargon td.plain{font-size:.82rem;line-height:1.5}
}

@media(max-width:520px){
  svg.chart[viewBox="0 0 720 116"]{height:106px}
  svg.chart[viewBox="0 0 720 210"]{height:190px}
  svg.chart[viewBox="0 0 720 250"]{height:205px}
  svg.chart[viewBox="0 0 720 274"]{height:215px}
  svg.chart[viewBox="0 0 760 380"]{height:245px}
}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}
}

@keyframes briefIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

@media print{
  :root,:root[data-appearance]{
    --paper:#FFFFFF;--card:#FFFFFF;--card-2:#F7F8FB;--ink:#1A1D29;--ink-2:#3D4356;--ink-3:#6B7280;
    --line:#ECEEF3;--line-2:#DADEE9;--surface:#FFFFFF;--surface-alt:#F7F8FB;--surface-page:#FFFFFF;
    --text:#1A1D29;--text-muted:#6B7280;--positive:#16A34A;--negative:#E5484D;--warning:#B7791F
  }
  html{color-scheme:light!important}
  body{background:var(--surface);color:var(--text)}
  .topbar,.ctxbar,.rail,.toc,#tt,#toasts,#analysis-activity,.draft-banner .actions,#files,.views,.stepper,.inspector-scrim,.context-scrim,.theme-dialog,.admin-subnav{display:none!important}
  .wrap,.wrap.no-rail{display:block;padding:0;max-width:none}
  #main{max-width:none}
  .report-chapter{display:block;border:0;overflow:visible;background:transparent}
  .report-chapter > summary{display:none}
  .report-chapter:not([open]) > .chapter-body{display:block!important}
  .chapter-body{display:block!important;padding:0}
  .sr-only-table{display:table!important;position:static!important;width:100%!important;height:auto!important;max-width:none!important;
    clip-path:none;contain:none;overflow:visible!important}
  .sr-only-table *{max-width:none!important;overflow:visible!important}
  .hero .headline{max-width:none;font-size:2rem}
  .panel,.kpi,.decision-card{box-shadow:none;break-inside:avoid}
  svg.chart{min-width:0}
}

/* ==========================================================================
   APP SHELL — Clean Dashboard (left sidebar + light content), overrides the
   legacy dark top-bar chrome. Placed last so it wins on source order.
   All interactive element IDs are preserved; only layout/skin changes.
   ========================================================================== */
body{background:var(--surface-page)}
/* scrollbar-gutter:stable — a short view (e.g. the admin Pipeline pane) and a
   tall one (Access/Publish) would otherwise add/remove the scrollbar and shift
   the whole centered canvas sideways on every tab switch. The gutter is
   always reserved, so content never moves. */
#scroller{display:flex;align-items:flex-start;scroll-padding-top:88px;scrollbar-gutter:stable}

/* ---- sidebar ---- */
.sidebar{position:sticky;top:0;height:100vh;flex:0 0 236px;width:236px;box-sizing:border-box;
  background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;
  gap:2px;padding:22px 16px;z-index:60}
.sidebar .brand{display:flex;align-items:center;gap:9px;padding:2px 8px 18px;white-space:nowrap;height:auto}
.sidebar .brand .logo{height:26px;width:auto;display:none}
.sidebar .brand .logo.on{display:block}
.sidebar .brand.has-logo .word{display:none}
.sidebar .dunamis-shell-logo{display:block;width:152px;height:auto}
.sidebar .dunamis-shell-icon{display:none;width:38px;height:38px}
.client-company-context{display:none;min-width:0}
.sidebar .brand .word{font-family:var(--body);font-weight:700;font-size:.8rem;letter-spacing:.13em;
  color:var(--text);display:flex;align-items:baseline;gap:5px;min-width:0}
.sidebar .brand .word i{font-style:normal;font-weight:450;color:var(--brand-accent)}
.sidebar .brand .tag{display:none}
.sidebar .brand .brand-mark{color:var(--brand-accent)}
.sidebar .views{display:flex;flex-direction:column;gap:3px;height:auto;width:auto;margin:0;padding:0;background:none;overflow:visible}
.sidebar .views button{display:flex;align-items:center;gap:11px;width:100%;justify-content:flex-start;text-align:left;
  color:var(--text-muted);background:transparent;border:none;font-size:.9rem;font-weight:600;padding:10px 12px;border-radius:var(--r-12)}
.sidebar .views button:hover{color:var(--text);background:var(--surface-alt)}
.sidebar .views button.on{color:var(--brand-accent);background:var(--ever-soft)}
.sidebar .views button.on::after{display:none}
.sidebar .views .nav-icon,.sidebar .views .nav-icon svg{width:20px;height:20px}
/* M31 (DUN-3011): the count on the pendências tab. This is the one channel
   that survives scrolling and is on screen on a phone, so the band at the
   top of the page and this badge are deliberately redundant with each other.
   Filled --brand-accent clears 3:1 against both the resting (transparent)
   and the active (--ever-soft) button background. */
.nav-badge{display:inline-grid;place-items:center;min-width:22px;height:20px;padding:0 6px;border-radius:var(--r-pill);
  background:var(--brand-accent);color:var(--on-accent);font:800 11px/1 var(--num);font-variant-numeric:tabular-nums}
.sidebar .views .nav-badge{margin-left:auto}
.side-spacer{flex:1 1 auto;min-height:16px}
.side-foot{display:flex;gap:8px;padding-top:14px;margin-top:6px;border-top:1px solid var(--line)}

/* ---- main column ---- */
.main-col{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;min-height:100vh}

/* ---- slim light topbar ---- */
.main-col>.topbar{position:sticky;top:0;z-index:55;height:66px;padding:0 30px;gap:16px;display:flex;align-items:center;
  background:var(--glass-bg);backdrop-filter:blur(14px) saturate(140%);-webkit-backdrop-filter:blur(14px) saturate(140%);
  border-bottom:1px solid var(--line);color:var(--text)}
.page-head{display:flex;flex-direction:column;gap:0;min-width:0;margin-right:auto}
.page-title{font-family:var(--display);font-weight:750;font-size:1.18rem;letter-spacing:-.02em;color:var(--text);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:44vw}
.page-sub{font-size:.76rem;color:var(--text-muted);font-weight:600;margin-top:1px}
.main-col>.topbar .top-right{margin-left:0;display:flex;align-items:center;gap:10px}
.main-col>.topbar .mobile-lang{display:none}

/* ---- light segmented controls + icon buttons ---- */
.top-right .seg{background:var(--surface-alt);border:1px solid var(--line)}
.top-right .seg button{color:var(--text-muted)}
.top-right .seg button.on{background:var(--surface);color:var(--text);box-shadow:0 1px 2px rgba(26,29,41,.12)}
.top-right .seg.role button.on{background:var(--brand-accent);color:var(--on-accent);box-shadow:none}
.side-foot .icon-btn,.top-right .icon-btn{background:var(--surface-alt);border:1px solid var(--line);color:var(--text-muted)}
.side-foot .icon-btn:hover,.top-right .icon-btn:hover{background:var(--ever-soft);border-color:var(--brand-accent);color:var(--brand-accent)}
.side-foot .icon-btn{flex:1;justify-content:center}

/* ---- M31 (DUN-3011): the review call to action ----
   Built out of the idiom this app already uses three times for "attention,
   informative" (.pending-independent-context, .receipt-drive-card): an
   --ever-soft fill behind a thick --brand-accent left rule. The count is
   anchored the way every KPI in this theme is anchored, an uppercase micro
   label over a large --num value, so the thing that says "you have work"
   is built like the thing that says "here is your revenue".
   It never goes red and never says "late". The ceiling of the escalation is
   a --warning left rule plus a small --warn-soft chip on the age, which is
   the same rule the dashboard's SLA dots are built around: the client is
   being informed about their own queue, not graded on it.
   The CTA overrides the app-wide --cta fill on purpose: bright teal on this
   mint band is about 1.6:1 fill-vs-background, a non-text contrast failure.
   --brand-accent lands near 4.2:1 against the band. */
.review-alert{position:sticky;top:66px;z-index:54;background:var(--ever-soft);
  border-bottom:1px solid var(--line);border-left:5px solid var(--brand-accent)}
.review-alert.is-overdue{border-left-color:var(--warning)}
.review-alert-inner{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;
  column-gap:22px;min-height:76px;padding:12px 30px}
.review-alert-anchor{display:grid;gap:3px;margin:0;padding-right:20px;border-right:1px solid var(--line-2)}
.review-alert-anchor>span{color:var(--brand-accent);font:900 10px/1.2 var(--body);letter-spacing:.14em;text-transform:uppercase}
.review-alert-anchor>b{color:var(--text);font:750 32px/1 var(--num);font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.review-alert-body{display:grid;gap:5px;min-width:0}
.review-alert-body>strong{max-width:54ch;color:var(--text);font:700 1.05rem/1.3 var(--display);letter-spacing:-.015em}
.review-alert-meta{display:flex;flex-wrap:wrap;gap:5px 14px}
.review-alert-meta em{color:var(--text-muted);font:650 .78rem/1.3 var(--body);font-style:normal}
.review-alert.is-waiting .review-alert-age,
.review-alert.is-overdue .review-alert-age{padding:2px 8px;background:var(--warn-soft);color:var(--warning);font-weight:750}
.review-alert .btn.primary{min-height:46px;padding:0 20px;font-size:.95rem;
  background:var(--brand-accent);color:var(--on-accent);white-space:nowrap}
@media(hover:hover){.review-alert .btn.primary:hover{background:color-mix(in srgb,var(--brand-accent) 88%,var(--text))}}
/* Below 940px the topbar and the ctxbar both stop being sticky, so the band
   stops too: it stays the first thing in the content column with none of the
   offset arithmetic that a second sticky layer would need there. */
@media(max-width:940px){
  .review-alert{position:static;border-left-width:4px}
  .review-alert-inner{min-height:64px;padding:10px 16px;column-gap:14px}
  .review-alert-anchor>b{font-size:26px}
  .review-alert-body>strong{font-size:.98rem}
}
/* On a phone the three columns leave the headline about 130px, which wraps
   it into four lines and stacks the age chip under itself. Drop to two
   columns and give the button the full width of its own row instead. */
@media(max-width:600px){
  .review-alert-inner{grid-template-columns:auto minmax(0,1fr);gap:11px 13px;padding:12px 14px}
  .review-alert-anchor{padding-right:13px}
  .review-alert-anchor>b{font-size:27px}
  .review-alert-body>strong{font-size:.94rem}
  .review-alert-progress{display:none}
  .review-alert-actions{grid-column:1/-1}
  .review-alert .btn.primary{width:100%;min-height:44px;padding:0 14px;font-size:.9rem}
}
@media print{.review-alert{display:none!important}}

/* ---- ctxbar as clean toolbar ---- */
/* --review-bar-h is written by measureMobileChrome() from the band's real
   rendered height, and defaults to 0px so a client with nothing to review
   gets exactly the layout that existed before M31. */
.main-col>.ctxbar{position:sticky;top:calc(66px + var(--review-bar-h,0px));z-index:50;background:var(--surface);border-bottom:1px solid var(--line);
  padding:12px 30px;box-shadow:none}
.main-col>.search-panel{padding:14px 30px 18px}

/* ---- content canvas: single column, sidebar is the nav now ----
   max-width is capped at 100% as well: .wrap is a stretch item of the
   .main-col column flex, and during flex-line intrinsic sizing a wide table
   (min-width:620px inside an overflow-x:auto .panel) would otherwise inflate
   the line past the viewport, giving the whole page a horizontal scrollbar
   on phones instead of the table scrolling inside its own panel. */
.main-col>.wrap{display:block;box-sizing:border-box;width:100%;max-width:min(1200px,100%);margin:0 auto;padding:30px 30px 110px;grid-template-columns:none}
.main-col>.wrap:has(.confirmations-workspace){max-width:min(1680px,100%);padding-inline:clamp(20px,2vw,34px)}
.main-col>.wrap>.toc{display:none}
.main-col>.wrap>#main{max-width:none;margin:0}

/* ---- dashboard overview ---- */
.hero.overview{margin-bottom:34px;animation:briefIn .38s ease-out both}
.ov-draft-badge{display:inline-block;font-size:.64rem;font-weight:800;letter-spacing:.14em;color:var(--warning);
  background:var(--warn-soft);border-radius:7px;padding:4px 9px}
.ov-draft-badge.approved{color:var(--positive);background:var(--pos-soft)}
.ov-headline{font-family:var(--display);font-weight:700;font-size:clamp(1.65rem,1.25rem + 1.15vw,2.25rem);
  letter-spacing:-.035em;line-height:1.13;color:var(--text);max-width:34ch}
.ov-context{margin-top:10px;font-size:1rem;line-height:1.55;color:var(--ink-2);max-width:78ch}
.ov-meta{margin:9px 0 22px;font-size:.78rem;color:var(--text-muted)}
.ov-chips{margin:0 0 20px}
.published-report-actions{margin:0}
.published-report-actions h3{margin:0 0 4px}
.published-report-actions p{margin:0 0 12px;color:var(--text-muted);font-size:.78rem;line-height:1.45}
.published-correction-actions{display:flex;gap:8px;flex-shrink:0}
@media(max-width:700px){
  .published-correction-actions{flex-direction:column}
  .published-report-actions .btn{width:100%;min-height:44px}
}
.ov-detail-hint{margin:0 0 16px;color:var(--text-muted);font-size:.78rem;font-weight:650}
.revenue-coverage-note{display:flex;justify-content:space-between;gap:16px;margin:0 0 14px;padding:12px 14px;
  border-left:3px solid var(--ever);background:var(--ever-soft);font-size:.78rem;line-height:1.45}
.revenue-coverage-note span{color:var(--ink-2);text-align:right}
tr.coverage-gap td{color:var(--warning);font-weight:700}
@media(max-width:700px){.revenue-coverage-note{flex-direction:column}.revenue-coverage-note span{text-align:left}}
.ov-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;align-items:start}
.ov-grid>.panel{margin:0;padding:20px 22px}
.ov-span2{grid-column:span 2}
@media(max-width:1120px){.ov-grid{grid-template-columns:1fr}.ov-span2{grid-column:auto}}
.panel-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px}
.panel-head h3{font-family:var(--display);font-size:1.02rem;font-weight:730;letter-spacing:-.01em;color:var(--text)}
.panel-head .psub{font-size:.77rem;color:var(--text-muted);margin:0;font-weight:600}

/* donut */
.donut-wrap{display:flex;flex-direction:column;align-items:center;gap:16px;padding-top:4px}
svg.chart.donut{width:190px;height:190px;min-width:0;max-width:100%;margin:0 auto}
.panel:has(svg.chart.donut){overflow:visible}
.donut circle{transition:opacity .15s}
.donut-legend{display:flex;flex-direction:column;align-items:stretch;gap:8px;width:100%}
.donut-legend span{display:flex;align-items:center;gap:9px;font-size:.83rem;color:var(--ink-2)}
.donut-legend i{width:10px;height:10px;border-radius:3px;flex-shrink:0}
.donut-legend b{margin-left:auto;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}

/* commentary */
.ov-commentary .ov-text{font-size:.96rem;line-height:1.62;color:var(--ink-2)}
.ov-next .ov-text{font-size:.92rem;line-height:1.55;color:var(--ink-2)}
.ov-action{margin-top:16px;padding-top:15px;border-top:1px solid var(--line)}
.ov-action-label{display:block;font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;font-weight:800;
  color:var(--warning);margin-bottom:6px}
.ov-action p{font-size:.92rem;line-height:1.55;color:var(--ink-2)}

/* Owner-draw impact — the marker comes from the approved client plan. */
.owner-impact{--draw-tone:var(--positive);position:relative;overflow:hidden;border-top:3px solid var(--draw-tone)!important}
.owner-impact-watch{--draw-tone:var(--warning)}
.owner-impact-high{--draw-tone:var(--negative)}
.owner-impact-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:16px}
.owner-impact-head h3{margin:3px 0 0;font-family:var(--display);font-size:1.05rem;line-height:1.2}
.owner-kicker{color:var(--text-muted);font-size:.65rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}
.owner-severity{flex:0 0 auto;border:1px solid color-mix(in srgb,var(--draw-tone) 28%,var(--line));
  border-radius:var(--r-pill);background:color-mix(in srgb,var(--draw-tone) 10%,var(--surface));color:var(--draw-tone);
  padding:4px 8px;font-size:.64rem;font-weight:820;letter-spacing:.06em;text-transform:uppercase}
.owner-total{display:flex;align-items:flex-end;gap:10px;margin-bottom:13px}
.owner-total strong{font:760 clamp(1.65rem,2.2vw,2.1rem)/1 var(--display);letter-spacing:-.04em;color:var(--text)}
.owner-total span{max-width:18ch;color:var(--draw-tone);font-size:.75rem;font-weight:760;line-height:1.25}
.owner-meter{position:relative;height:12px;border-radius:var(--r-pill);background:var(--surface-alt);overflow:visible}
.owner-meter>span{display:block;height:100%;border-radius:inherit;background:var(--draw-tone)}
.owner-meter>i{position:absolute;top:-5px;width:2px;height:22px;border-radius:2px;background:var(--text)}
.owner-limit{margin:7px 0 15px;color:var(--text-muted);font-size:.65rem;font-weight:650}
.owner-equation{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) auto minmax(0,1fr);
  align-items:center;gap:6px;padding:12px 0;border-block:1px solid var(--line)}
.owner-equation div{min-width:0}
.owner-equation span,.owner-equation b{display:block}
.owner-equation span{color:var(--text-muted);font-size:.62rem;line-height:1.2}
.owner-equation b{margin-top:3px;overflow:hidden;text-overflow:ellipsis;color:var(--text);font-size:.77rem;font-variant-numeric:tabular-nums}
.owner-equation div.negative b{color:var(--negative)}
.owner-equation em{color:var(--text-muted);font:700 .8rem var(--num);font-style:normal}
.owner-retained{margin:7px 0 0;color:var(--text-muted);font-size:.66rem}
.owner-mix{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:13px;color:var(--text-muted);font-size:.7rem}
.owner-mix b{color:var(--text);font-variant-numeric:tabular-nums}
.owner-top{margin-top:15px;padding:12px;border-radius:var(--r-12);background:color-mix(in srgb,var(--draw-tone) 7%,var(--surface-alt))}
.owner-top span,.owner-top b,.owner-top small{display:block}
.owner-top span,.owner-allocation>span{color:var(--text-muted);font-size:.64rem;font-weight:790;letter-spacing:.08em;text-transform:uppercase}
.owner-top b{margin-top:5px;color:var(--text);font-size:.78rem;line-height:1.3}
.owner-top small{margin-top:3px;color:var(--draw-tone);font-size:.7rem;font-weight:720}
.owner-allocation{margin-top:15px}
.owner-account{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px 9px;margin-top:10px}
.owner-account-copy{grid-column:1/-1;display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.owner-account-copy span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-2);font-size:.7rem}
.owner-account-copy b{flex:0 0 auto;color:var(--text);font-size:.7rem;font-variant-numeric:tabular-nums}
.owner-account-track{height:5px;border-radius:var(--r-pill);background:var(--surface-alt);overflow:hidden}
.owner-account-track i{display:block;height:100%;border-radius:inherit;background:var(--draw-tone)}
.owner-account small{color:var(--text-muted);font-size:.64rem;font-variant-numeric:tabular-nums}
.owner-note,.owner-legacy{margin:14px 0 0;padding-top:12px;border-top:1px solid var(--line);color:var(--text-muted);font-size:.68rem;line-height:1.45}
.owner-legacy{color:var(--warning)}

/* top customers */
.ov-customers .bar-list{display:flex;flex-direction:column;gap:13px}
.ov-customers .bar-row{display:grid;grid-template-columns:minmax(0,1fr) 84px auto;align-items:center;gap:10px}
.ov-customers .bar-name{font-size:.85rem;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ov-customers .bar-track{height:8px;border-radius:6px;background:var(--surface-alt);overflow:hidden}
.ov-customers .bar-fill{display:block;height:100%;border-radius:6px;background:var(--brand-accent)}
.ov-customers .bar-val{font-size:.82rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;text-align:right}

/* ---- overview polish: softer, airier, more premium ---- */
.hero.overview .ov-grid{gap:18px}
.hero.overview .ov-grid>.panel{border-radius:18px;padding:22px 24px;
  box-shadow:0 1px 2px rgba(26,29,41,.03),0 18px 44px -30px rgba(26,29,41,.20)}
.hero.overview .kpi{border-radius:18px}
.hero.overview .panel-head{margin-bottom:16px}
.hero.overview svg.chart.donut{width:202px;height:202px}
.hero.overview .donut-wrap{gap:18px;padding-top:6px}
/* lighter, less-boxy comparison strip under the chart */
.hero.overview .chart-comparison{background:transparent;border:1px solid var(--line);border-radius:13px;margin:16px 0 4px}
.hero.overview .chart-comparison-head{background:transparent}
.hero.overview .chart-comparison-item{background:transparent}
.hero.overview .legend{margin-top:14px}

/* ---- mobile: sidebar becomes a slim brand bar; primary nav uses the app's
   existing floating bottom-tab pattern (defined in the ≤820 block). ---- */
@media(max-width:940px){
  #scroller{display:block}
  .sidebar{position:sticky;top:0;height:auto;width:100%;flex:none;flex-direction:row;align-items:center;gap:10px;
    padding:12px 16px;border-right:0;border-bottom:1px solid var(--line);background:var(--surface);z-index:60}
  .sidebar .brand{padding:0;flex-shrink:0}
  .sidebar .dunamis-shell-logo{display:none}
  .sidebar .dunamis-shell-icon{display:block}
  .sidebar .views{flex-direction:row}
  .side-spacer{display:block;flex:1 1 auto;min-height:0}
  .side-foot{border-top:0;margin:0;padding:0;flex-shrink:0}
  .main-col{min-height:0}
  .main-col>.topbar{position:static;height:auto;min-height:56px;padding:12px 16px;display:flex;flex-wrap:wrap;
    background:var(--surface);backdrop-filter:none;-webkit-backdrop-filter:none}
  .main-col>.topbar .top-right{width:100%;flex-wrap:wrap}
  .main-col>.topbar .desktop-lang{display:none}
  .main-col>.topbar .mobile-lang{display:flex}
  .main-col>.ctxbar{top:0;position:static;padding:12px 16px}
  .main-col>.wrap{padding:18px 16px 100px}
  .page-title{max-width:100%}
}
:root[data-appearance="contrast"] .dunamis-shell-logo,
:root[data-appearance="contrast"] .dunamis-shell-icon{filter:invert(1)}
@media print{
  .sidebar,.main-col>.topbar,.main-col>.ctxbar{display:none!important}
  #scroller{display:block}
  .main-col>.wrap{padding:0;max-width:none}
}

/* ==========================================================================
   PRINT EXPORT — cover page, compact opening page, closing disclaimer.
   Kept last so it wins over the narrow-viewport rules that also apply to the
   ~816px print canvas (Chrome lays print out at letter width, which trips
   the <=820px mobile blocks above).
   ========================================================================== */
.print-cover,.print-disclaimer{display:none}
.single-period-metric{display:grid;align-content:center;min-height:180px;margin-top:14px;padding:28px;
  border-left:4px solid var(--brand-accent);background:var(--surface-alt)}
.single-period-metric>span{color:var(--text-muted);font-size:.7rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase}
.single-period-metric>strong{margin:10px 0 8px;color:var(--text);font:750 clamp(2rem,4vw,3.4rem)/1 var(--num)}
.single-period-metric>small{max-width:48ch;color:var(--text-muted);font-size:.75rem;line-height:1.45}
.single-period-metric.positive{border-left-color:var(--positive)}
.single-period-metric.negative{border-left-color:var(--negative)}
.single-period-metric.warning{border-left-color:var(--warning)}
@media print{
  @page{size:Letter portrait;margin:.5in}
  /* cover: its own page, composed like a boardroom title sheet.
     print-color-adjust:exact so the navy band and gold gradients actually
     print instead of being dropped as "background graphics". */
  /* The admin workspace header/tabs are injected before the report markup.
     They must not consume a page before the actual cover. */
  .workspace-shell-v2,.workspace-content-tabs,.draft-banner,.draft-workbench{display:none!important}
  .print-cover{display:flex;flex-direction:column;box-sizing:border-box;height:9.75in;min-height:0;
    break-before:auto;break-after:page;page-break-after:always}
  .print-cover,.print-cover *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .pc-head{display:flex;align-items:center;justify-content:space-between;padding-bottom:12px}
  .pc-brandrow{display:inline-flex;align-items:center;gap:9px;font:700 .8rem var(--body);
    letter-spacing:.15em;text-transform:uppercase;color:var(--text)}
  .pc-logo{display:block;width:148px;height:auto}
  .pc-brandrow em{font-style:normal;font-weight:450;color:var(--ever)}
  .pc-brandrow .brand-mark{width:18px;height:20px}
  .pc-tag{font:700 .66rem var(--body);letter-spacing:.16em;text-transform:uppercase;
    color:var(--text-muted);border:1px solid var(--line-2);border-radius:var(--r-pill);padding:5px 12px}
  .pc-thread{height:3px;border-radius:2px;background:linear-gradient(90deg,var(--gold-1),var(--gold-2) 46%,var(--silver-2) 92%)}
  .pc-center{margin:auto 0;padding:24px 0}
  .pc-kicker{color:var(--ever);font-size:.82rem;font-weight:800;letter-spacing:.26em;
    text-transform:uppercase;margin-bottom:14px}
  .print-cover h1{max-width:18ch;font-family:var(--display);font-size:3rem;font-weight:700;
    line-height:1.06;letter-spacing:-.01em;color:var(--text);margin-bottom:10px}
  .pc-period{font-family:var(--display);font-size:1.4rem;font-style:italic;color:var(--ink-2)}
  .pc-meta{display:grid;grid-template-columns:auto 1fr;gap:9px 30px;align-items:baseline;
    max-width:460px;margin-top:36px;padding-top:20px;border-top:1px solid var(--line-2)}
  .pc-meta dt{font:800 .66rem var(--body);letter-spacing:.15em;text-transform:uppercase;color:var(--text-muted)}
  .pc-meta dd{font:600 .88rem var(--body);color:var(--text);margin:0}
  .pc-foot{display:flex;align-items:center;justify-content:space-between;gap:18px;
    padding:16px 20px;border-radius:var(--r-12);background:var(--ever-deep);color:var(--on-dark)}
  .pc-foot-brand{display:inline-flex;align-items:center;gap:12px}
  .pc-foot-logo{display:grid;place-items:center;width:34px;height:34px;padding:5px;background:var(--dunamis-ivory)}
  .pc-foot-logo img{display:block;width:100%;height:auto}
  .pc-foot-brand span:last-child{display:flex;flex-direction:column;gap:2px}
  .pc-foot b{color:var(--on-dark-strong);font-size:.88rem}
  .pc-foot small{color:var(--on-dark-muted);font-size:.72rem}
  .pc-foot-period{font-family:var(--display);font-size:1rem;color:var(--brand-gold);white-space:nowrap}

  /* disclaimer: always the last page */
  .print-disclaimer{display:block;page-break-before:always;padding-top:20px}
  .print-disclaimer h2{font-family:var(--display);font-size:1.5rem;letter-spacing:-.01em;margin-bottom:4px}
  .print-disclaimer .pd-from{color:var(--text-muted);font-weight:700;font-size:.85rem;margin-bottom:14px}
  .print-disclaimer ul{padding-left:18px;display:flex;flex-direction:column;gap:9px}
  .print-disclaimer li{font-size:.79rem;line-height:1.55;color:var(--ink-2)}
  .report-basis-note{page-break-inside:avoid;margin:0 0 16px;padding:12px 14px;border-radius:var(--r-8);background:var(--surface-alt)}

  /* the opening scorecard fits its page: fronts only, two by two, no flip
     backs (their explanations live on-screen; print keeps the sr-only data
     tables for every chart instead) */
  .kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:10px}
  .kpi{min-height:0}
  .kpi-back{display:none!important}
  .hero-kpis,.kpi-grid{page-break-inside:avoid}
  .hero.overview{margin-bottom:18px}
  .ov-grid{display:block}
  .ov-grid>.panel{margin-bottom:14px;page-break-inside:avoid}

  /* print is not a touch surface: keep exact numbers on charts, drop tap hints */
  svg.chart text.mono,svg.chart tspan.mono{display:initial!important}
  .panel:has(svg.chart)::after{content:none!important;display:none!important}
  svg.chart{min-width:0}
  body::after{display:none}
  /* an interactive "save as PDF" control has no meaning inside the PDF */
  #dl-print{display:none!important}
}

/* ==========================================================================
   FATHOM RESKIN LAYER — flat editorial surfaces, unboxed stat tiles, square
   tags, teal CTAs. Kept last so it wins on source order over every earlier
   skin. Content surfaces go sharp (radius 0, hairline borders, whisper
   shadows); transient glass (topbar, sheets, tab bar) keeps its radii.
   ========================================================================== */
.panel,.kpi,.status-card,.decision-card,.callout,.chart-comparison,.report-chapter,.pl-item,.flow-step,
.company-contact-card,.empty,.dl-item,.draft-workbench,.wa-card,.login-card,
.hero.overview .ov-grid>.panel,.hero.overview .kpi{border-radius:0}
.panel,.status-card,.hero.overview .ov-grid>.panel{box-shadow:var(--shadow)}
.btn,.ov-draft-badge{border-radius:2px}
.spine-chip{border-radius:2px}
.adm-field input:not([type=checkbox]):not([type=radio]):not([type=file]),.adm-field textarea,
.adm-field select,.pl-search,.notes-box textarea,.login-card input,.search-row input,.search-row select,
input[type=file],.draft-editor-grid textarea,.draft-feedback-label textarea{border-radius:2px}

/* Fathom stat-tile anatomy: no box; uppercase label sitting on its own
   hairline rule, then a large light-weight value. Separation is whitespace. */
.kpi{background:transparent;border:0;box-shadow:none;min-height:0;padding:2px 0 6px;overflow:visible}
.kpi .lbl{display:block;padding-bottom:8px;margin-bottom:12px;border-bottom:1px solid var(--line-2);
  font-size:.7rem;letter-spacing:.14em;color:var(--text-muted)}
.kpi .val{font-family:var(--body);font-weight:350;font-size:clamp(1.7rem,1.3rem + 1.4vw,2.2rem);
  letter-spacing:-.015em;margin:0 0 7px}
.kpi .note{margin-top:8px}
.kpi-grid{gap:22px 34px}
.kpi[data-flip-id]:hover{border-color:transparent}
.kpi[data-flip-id]:hover .lbl{border-bottom-color:var(--brand-accent);color:var(--brand-accent)}
.kpi.flipped{background:var(--surface-alt);border:0;padding:14px 16px}

/* deltas: Fathom triangles are plain colored text, not pills */
.delta{background:transparent;padding:0;border-radius:0;font-size:.79rem;font-weight:650}
.delta.up{background:transparent;color:var(--positive)}
.delta.down{background:transparent;color:var(--negative)}
.delta.flat{background:transparent;color:var(--text-muted)}
.delta.semantic-positive{background:transparent;color:var(--positive)}
.delta.semantic-negative{background:transparent;color:var(--negative)}

/* CTAs: bright fathom-teal fill, very-dark-green text, flat */
.btn{font-weight:600}
.btn.primary{background:var(--cta);color:var(--on-cta)}
.btn.primary:hover{background:var(--cta-hover)}
.btn.ghost:hover{background:var(--ever-soft);border-color:var(--brand-accent);color:var(--text)}
.login-submit{background:var(--cta);color:var(--on-cta)}
.login-submit:hover{background:var(--cta-hover);opacity:1}
.seg.role button.on,.top-right .seg.role button.on{background:var(--cta);color:var(--on-cta)}
.admin-subnav button.on{background:var(--ever-mid);color:var(--on-dark)}

/* section headers: medium-weight grotesque title over a plain hairline */
.sec-head .n{display:inline;padding:0;background:transparent;color:var(--text-muted);
  font:600 .72rem var(--num);letter-spacing:.12em}
.sec-head h2{font-family:var(--display);font-weight:600;font-size:1.22rem;letter-spacing:-.01em}
.sec-head .rule{height:1px;background:var(--line-2)}
.chapter-index{border-radius:2px;border:0;background:var(--ever-soft);color:var(--brand-accent);
  font:650 .78rem var(--num);letter-spacing:.02em}
.report-chapter > summary{font-weight:600;letter-spacing:0}
.panel h3,.panel-head h3{font-family:var(--body);font-weight:650;letter-spacing:0}

/* the executive headline is the one serif voice: the site's annotation accent */
.ov-headline{font-family:var(--accent-serif);font-style:italic;font-weight:400;
  font-size:clamp(1.55rem,1.15rem + 1.3vw,2.05rem);letter-spacing:0;line-height:1.2;max-width:30ch}
.pc-period{font-family:var(--accent-serif)}

@media(max-width:940px){.kpi-grid{gap:18px 24px}}
@media(max-width:820px){
  .kpi{padding:2px 0 6px;min-height:0}
  .kpi.flipped{padding:14px 14px}
  /* The app-shell's base ".sidebar .views" selector (later in the file than
     the 820px fixed-bar rule) leaks height:auto/padding:0/background:none
     into the floating tab bar, clipping the labels. Re-assert the bar
     geometry here, after the app-shell layer, at matching specificity. */
  .sidebar .views{height:64px;width:min(calc(100% - 20px),520px);margin:0;padding:5px;gap:2px;
    flex-direction:row;justify-content:space-around;background:var(--glass-bg);overflow:visible}
  .sidebar .views button{flex:1;width:auto;min-width:0;height:52px;justify-content:center;align-items:center;
    text-align:center;flex-direction:column;gap:2px;padding:4px 7px;border-radius:18px;font-size:.72rem;font-weight:600}
  .sidebar .views button:hover{background:var(--surface-alt)}
  .sidebar .views button.on{color:var(--brand-accent);background:var(--ever-soft)}
}
@media print{
  .kpi{border:0;background:transparent}
  .kpi.flipped{background:transparent;padding:2px 0 6px}
}

/* ---- Fathom-report sections: at-a-glance, indicator table + gauge,
   breakeven bar, comparative statement ---- */
.stat-sq{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;flex:0 0 auto;
  border-radius:2px;font-size:.8rem;font-weight:800;line-height:1}
.stat-sq.ok{background:var(--pos-soft);color:var(--positive)}
.stat-sq.bad{background:var(--neg-soft);color:var(--negative)}
.stat-sq.neutral{border:1px solid var(--warning);background:var(--warn-soft);color:var(--warning)}
.xsum{display:flex;flex-direction:column;gap:20px}
.xsum-row{display:flex;gap:14px;align-items:flex-start}
.xsum-row>div{min-width:0}
.xsum-label{display:block;margin-bottom:4px;font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;
  font-weight:700;color:var(--text-muted)}
.xsum-head{font-size:1.08rem;font-weight:650;color:var(--text)}
.xsum-head small{font-weight:500;color:var(--text-muted);font-size:.84rem}
.xsum-txt{margin-top:3px;font-size:.85rem;line-height:1.5;color:var(--ink-2)}
/* UIX-3 (DUN-3121): a second .kpit-* selector list reappears further down
   (~:4516, "Performance scorecard: print it as a compact executive ledger").
   That block is not a duplicate: it lives inside the @media print rule and
   carries print-only units (in/pt) with !important, layered on top of this
   screen definition. Left as two separate blocks. */
.kpit-panel{overflow:visible}
.kpit-grid{display:grid;gap:20px}
.kpit-gauge{display:grid;grid-template-columns:minmax(220px,1fr) minmax(160px,1.5fr) auto auto;align-items:center;gap:16px;padding:2px 0 4px}
.kpit-gauge-copy{display:grid;gap:3px}
.kpit-gauge-copy strong{font-size:.9rem;line-height:1.35;color:var(--text)}
.kpit-meter{height:8px;overflow:hidden;border-radius:99px;background:var(--neg-soft)}
.kpit-meter i{display:block;height:100%;border-radius:inherit;background:var(--positive)}
.kpit-percent{font:750 1rem var(--num);color:var(--text)}
.kpit-watch{color:var(--negative);font-size:.76rem;font-weight:750;white-space:nowrap}
.kpit-ledger{--kpit-cols:minmax(126px,1fr) 112px 142px 96px;display:grid;border-top:1px solid var(--line)}
.kpit-columns{display:grid;grid-template-columns:var(--kpit-cols);gap:14px;padding:9px 4px 8px 18px;border-bottom:1px solid var(--line);
  color:var(--text-muted);font-size:.62rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.kpit-columns span:nth-child(2),.kpit-columns span:nth-child(3){text-align:right}
.kpit-item{position:relative;display:grid;grid-template-columns:var(--kpit-cols);
  align-items:center;gap:14px;min-height:64px;padding:12px 4px 12px 18px;border-bottom:1px solid var(--line);background:var(--surface)}
.kpit-item::before{content:"";position:absolute;left:-1px;top:16px;width:3px;height:28px;background:var(--brand-accent)}
.kpit-item.positive::before{background:var(--positive)}
.kpit-item.negative::before{background:var(--negative)}
.kpit-item.neutral::before{background:var(--warning)}
.kpit-item header{display:contents}
.kpit-item h3{grid-column:1;grid-row:1;margin:0;font-size:.9rem;line-height:1.3;color:var(--text);text-align:left}
.kpit-status{grid-column:4;grid-row:1;display:inline-flex;align-items:center;gap:6px;justify-self:start;color:var(--ink-2);font-size:.7rem;font-weight:750;white-space:nowrap}
.kpit-status .stat-sq{width:20px;height:20px}
.kpit-item.positive .kpit-status{color:var(--positive)}
.kpit-item.negative .kpit-status{color:var(--negative)}
.kpit-item.neutral .kpit-status{color:var(--warning)}
.kpit-value{grid-column:2;grid-row:1;justify-self:end;text-align:right;font-family:var(--num);font-size:1.2rem;line-height:1.05;letter-spacing:-.025em;color:var(--text);font-variant-numeric:tabular-nums}
.kpit-item.positive .kpit-value{color:var(--positive)}
.kpit-item.negative .kpit-value{color:var(--negative)}
.kpit-item.neutral .kpit-value{color:var(--warning)}
.kpit-item footer{grid-column:3;grid-row:1;justify-self:end;text-align:right;color:var(--text-muted);font-size:.72rem}
.kpit-trend-label{display:none}
.kpit-item footer .pos,.kpit-item footer .neg,.kpit-item footer .neutral{font-family:var(--num);font-size:.8rem;font-weight:750;white-space:nowrap}
@media(max-width:820px){
  .kpit-panel{padding:18px 16px}
  .kpit-grid{grid-template-columns:1fr;gap:18px}
  .kpit-gauge{grid-template-columns:minmax(0,1fr) auto;gap:8px 12px;padding:0;text-align:left}
  .kpit-gauge-copy{gap:5px}
  .kpit-gauge-copy .xsum-label{font-size:.76rem}
  .kpit-gauge-copy strong{font-size:1rem}
  .kpit-meter{grid-column:1/-1;grid-row:2;height:9px}
  .kpit-percent{grid-column:2;grid-row:1;font-size:1.25rem}
  .kpit-watch{grid-column:1/-1;font-size:.85rem}
  .kpit-ledger{grid-template-columns:1fr;border-left:0}
  .kpit-columns{display:none}
  .kpit-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:7px 12px;min-height:0;padding:15px 4px 14px 14px;border-right:0;background:transparent}
  .kpit-item::before{left:0;top:15px;height:24px}
  .kpit-item header{display:contents}
  .kpit-item h3{font-size:1rem}
  .kpit-status{grid-column:2;grid-row:1;justify-self:end;font-size:.82rem}
  .kpit-value{grid-column:1/-1;grid-row:2;justify-self:start;text-align:left;font-size:clamp(1.55rem,7vw,1.85rem)}
  .kpit-item footer{grid-column:1/-1;grid-row:3;display:flex;align-items:baseline;justify-content:space-between;gap:12px;font-size:.85rem}
  .kpit-trend-label{display:inline;font-weight:650}
  .kpit-item footer .pos,.kpit-item footer .neg{font-size:.92rem}
}
.be-tiles{margin-bottom:18px}
.be-bar{position:relative;height:16px;background:var(--neg-soft);overflow:hidden;margin:6px 0 10px}
.be-safe{position:absolute;top:0;bottom:0;background:var(--pos-soft)}
.be-mark{position:absolute;top:0;bottom:0;width:2px;background:var(--text)}
.be-legend{display:flex;gap:18px;font-size:.78rem;color:var(--ink-2);flex-wrap:wrap}
.be-legend i{display:inline-block;width:10px;height:10px;margin-right:6px;vertical-align:-1px}
.be-i-rev{background:var(--pos-soft);border:1px solid var(--positive)}
.be-i-be{background:var(--text)}
td.pnl-cur,th.pnl-cur{background:var(--info-soft)}

/* ---- delivery email panel ---- */
.email-preview{width:100%;height:440px;border:1px solid var(--line);background:var(--surface)}
.em-actions{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0 8px}
.em-actions .btn[disabled]{cursor:not-allowed}
a.btn{text-decoration:none}
.recipient-editor{padding:14px;border:1px solid var(--line);border-radius:var(--r-14);background:var(--surface-alt)}
.recipient-editor input#em-recipients{width:100%;min-height:48px;border:1px solid var(--line-2);border-radius:11px;padding:10px 12px;
  background:var(--surface);color:var(--text);font:650 .86rem/1.4 var(--body)}
.recipient-editor input#em-recipients:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.recipient-editor input#em-recipients[aria-invalid="true"]{border-color:var(--negative);background:var(--neg-soft)}
.recipient-editor-meta{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:7px;
  color:var(--text-muted);font-size:.72rem;line-height:1.4}
.recipient-reset{flex:0 0 auto;border:0;background:none;padding:3px 0;color:var(--brand-accent);font:750 .72rem var(--body);cursor:pointer}
.recipient-reset:hover{text-decoration:underline}.recipient-reset:disabled{color:var(--text-muted);cursor:not-allowed;text-decoration:none}
.recipient-reset:focus-visible{outline:2px solid var(--focus);outline-offset:3px}
.recipient-error{margin-top:8px;color:var(--negative);font-size:.74rem;font-weight:700}.recipient-error[hidden]{display:none}
.recipient-access-note{display:grid;grid-template-columns:auto 1fr;gap:9px;align-items:start;margin-top:11px;padding:10px 12px;
  border-left:3px solid var(--brand-accent);background:var(--surface);color:var(--text-muted);font-size:.75rem;line-height:1.5}
.recipient-access-note>span:first-child{color:var(--brand-accent);font-weight:900}
.delivery-confirmation{position:relative;display:grid;grid-template-columns:42px minmax(0,1fr) auto;gap:13px;align-items:start;margin:16px 0 12px;padding:15px 16px;border:1px solid color-mix(in srgb,var(--positive) 42%,var(--line));border-left:4px solid var(--positive);border-radius:var(--r-14);background:linear-gradient(120deg,var(--pos-soft),var(--surface) 70%);box-shadow:0 8px 24px -22px var(--brand-primary)}
.delivery-confirmation.queued{border-color:color-mix(in srgb,var(--brand-accent) 48%,var(--line));border-left-color:var(--brand-accent);background:linear-gradient(120deg,var(--ever-soft),var(--surface) 70%)}
.delivery-confirmation-mark{display:grid;place-items:center;width:34px;height:34px;border-radius:var(--r-round);background:var(--positive);color:var(--on-accent);font:800 1rem var(--body)}
.delivery-confirmation.queued .delivery-confirmation-mark{background:var(--brand-accent);color:var(--brand-primary)}
.delivery-confirmation-copy h3{margin:1px 0 4px;color:var(--text);font-size:.98rem}.delivery-confirmation-copy p{margin:0;color:var(--text-muted);font-size:.77rem;line-height:1.5;max-width:76ch}.delivery-confirmation-kicker{margin-bottom:4px;color:var(--positive);font-size:.63rem;font-weight:850;letter-spacing:.13em;text-transform:uppercase}.delivery-confirmation.queued .delivery-confirmation-kicker{color:var(--brand-accent)}
.delivery-confirmation-meta{display:flex;align-items:center;gap:8px;margin-top:10px;color:var(--text-muted);font-size:.72rem;font-weight:700}.delivery-confirmation-actions{display:flex;align-items:center;gap:8px}.delivery-confirmation-close{display:grid;place-items:center;width:30px;min-height:30px;padding:0;border:0;border-radius:var(--r-round);background:transparent;color:var(--text-muted);font:500 1.35rem/1 var(--body);cursor:pointer}.delivery-confirmation-close:hover{background:var(--surface-alt);color:var(--text)}.delivery-confirmation-close:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
@media(max-width:620px){.delivery-confirmation{grid-template-columns:34px minmax(0,1fr);padding:13px}.delivery-confirmation-actions{grid-column:1/-1;justify-content:space-between}.delivery-confirmation-actions .btn{flex:1}.delivery-confirmation-close{position:absolute;right:14px;top:13px}.delivery-confirmation-copy{padding-right:24px}}
@media(max-width:620px){.recipient-editor-meta{align-items:flex-start;flex-direction:column}.recipient-reset{min-height:32px}}

/* ---- pipeline status chips ---- */
.pl-chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}
.pl-chip{display:inline-flex;align-items:center;gap:7px;padding:6px 12px;border:1px solid var(--line-2);
  border-radius:2px;background:var(--surface);color:var(--ink-2);font:600 .72rem var(--body);
  letter-spacing:.06em;text-transform:uppercase;cursor:pointer}
.pl-chip b{font-weight:800;color:var(--text-muted)}
.pl-chip:hover{border-color:var(--brand-accent);color:var(--text)}
.pl-chip.on{background:var(--ever-mid);border-color:var(--ever-mid);color:var(--on-dark)}
.pl-chip.on b{color:var(--brand-gold)}
.state-chip.unreadable{background:var(--warn-soft);color:var(--warning)}
.state-chip.sources_updated{background:var(--info-soft);color:var(--chart-2)}
.workspace-period.is-analyzing{position:relative;overflow:hidden;border-color:color-mix(in srgb,var(--chart-3) 48%,var(--line))}
.workspace-period.is-analyzing:before{content:"";position:absolute;inset:0 0 auto;height:3px;background:
  linear-gradient(90deg,transparent,var(--chart-3),transparent);background-size:42% 100%;animation:analysis-scan 1.8s ease-in-out infinite}
.analysis-running{display:inline-flex;align-items:center;gap:8px!important;background:var(--info-soft)!important;
  border-color:color-mix(in srgb,var(--chart-3) 45%,var(--line))!important;color:var(--chart-3)!important;opacity:1!important}
.analysis-spinner{display:inline-block;width:14px;height:14px;flex:0 0 auto;border:2px solid currentColor;border-right-color:transparent;border-radius:var(--r-round);
  animation:analysis-spin .8s linear infinite}
.job-tab-count{display:inline-grid;place-items:center;min-width:20px;height:20px;margin-left:7px;padding:0 5px;border-radius:var(--r-pill);
  background:var(--info-soft);color:var(--chart-3);font:800 .68rem var(--num)}
.admin-subnav button.on .job-tab-count{background:var(--surface);color:var(--brand-accent)}
#analysis-activity{position:fixed;right:18px;bottom:18px;z-index:290;width:min(380px,calc(100vw - 36px))}
#analysis-activity[hidden]{display:none}
.analysis-activity-card{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:center;width:100%;
  border:1px solid color-mix(in srgb,var(--chart-3) 58%,var(--line));border-radius:16px;padding:14px 15px;background:var(--brand-primary);
  color:var(--on-dark);box-shadow:var(--shadow-float);text-align:left;cursor:pointer}
.analysis-activity-card>.analysis-spinner{width:18px;height:18px;color:var(--brand-gold)}
.analysis-activity-copy{display:grid;gap:2px;min-width:0}.analysis-activity-copy strong{font-size:.84rem}
.analysis-activity-copy small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--on-dark);font-size:.76rem;opacity:.84}
.analysis-activity-copy>span{color:var(--on-dark);font-size:.7rem;opacity:.68}
.analysis-activity-arrow{color:var(--brand-gold);font-size:1.1rem;transition:transform .15s ease}
.analysis-activity-card:hover .analysis-activity-arrow{transform:translateX(3px)}
.analysis-activity-card:focus-visible{outline:3px solid var(--focus);outline-offset:3px}
.has-analysis-activity #toasts{bottom:112px}
@keyframes analysis-spin{to{transform:rotate(360deg)}}
@keyframes analysis-scan{0%,100%{transform:translateX(-110%)}50%{transform:translateX(245%)}}
@media(max-width:620px){
  #analysis-activity{right:12px;bottom:84px;width:calc(100vw - 24px)}
  .analysis-activity-copy>span{display:none}
  .has-analysis-activity #toasts{bottom:164px}
}
@media(prefers-reduced-motion:reduce){
  .analysis-spinner,.workspace-period.is-analyzing:before{animation:none}
  .workspace-period.is-analyzing:before{background:var(--chart-3)}
}
.pl-format{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 12px}
.pl-format-lbl{font:700 .7rem var(--body);letter-spacing:.12em;text-transform:uppercase;color:var(--text-muted)}
.pl-format .footnote{flex:1 1 260px;min-width:0}
.pl-model-select{padding:6px 10px;border:1px solid var(--line-2);border-radius:2px;background:var(--surface);
  color:var(--text);font:600 .8rem var(--body);max-width:280px}

/* The auth experience stays welcoming even though report surfaces use the
   sharper boardroom geometry above. */
#login-screen .login-card{border-radius:28px}
#login-screen .login-provider,
#login-screen .login-submit,
#login-screen .login-card input{border-radius:var(--r-12)}
#login-screen .login-password-toggle{border-radius:11px}
@media(max-width:420px){#login-screen .login-card{border-radius:22px}}
/* Intentional Financial Plan — a guardrail rail, not another KPI dashboard. */
.financial-plan{margin:28px 0;padding:28px;border-top:4px solid var(--brand-accent)}
.financial-plan>summary{list-style:none;cursor:pointer}
.financial-plan>summary::-webkit-details-marker{display:none}
.financial-plan>summary:after{content:"＋";font-size:1.4rem;color:var(--brand-accent);margin-left:8px}
.financial-plan[open]>summary:after{content:"−"}
.financial-plan>.fp-body{padding-top:4px}
.fp-heading,.fp-metric-head,.fp-proposal,.fp-actions li{display:flex;align-items:center;justify-content:space-between;gap:16px}
.fp-heading h2{margin:4px 0 0;font-family:var(--font-display);font-size:clamp(1.55rem,3vw,2.2rem)}
.fp-version,.fp-setup{margin:16px 0;padding:14px 16px;background:var(--surface-alt);border-left:3px solid var(--brass);color:var(--ink-2)}
.fp-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:20px}
.fp-metric{padding:17px;border:1px solid var(--line);background:var(--surface);min-width:0}
.fp-metric-head h3{margin:0;font-size:.88rem;text-transform:uppercase;letter-spacing:.06em}
.fp-metric-head span{font-size:.73rem;font-weight:800;text-transform:uppercase}
.fp-metric>strong{display:block;margin:18px 0 10px;font-family:var(--font-display);font-size:1.65rem}
.fp-metric>p,.fp-metric>small{display:block;margin:8px 0 0;color:var(--text-muted)}
.fp-rail{height:8px;background:var(--line-2);position:relative;overflow:hidden}
.fp-rail i{position:absolute;inset:0 auto 0 0;width:72%;background:var(--brand-accent)}
.fp-off_track .fp-rail i{background:var(--negative)}
.fp-watch .fp-rail i{background:var(--warning)}
.fp-unavailable .fp-rail i,.fp-unconfigured .fp-rail i{width:0}
.fp-metric details{margin-top:12px;font-size:.82rem}
.fp-metric details ul{padding-left:18px}
.fp-planner{margin-top:24px;border-top:1px solid var(--line);padding-top:18px}
.fp-planner>summary{cursor:pointer;font-weight:800;color:var(--brand-accent)}
.fp-form{margin-top:18px}
.fp-peer-profile{margin:0 0 20px;padding:17px 18px;border:1px solid var(--line);background:var(--surface-alt)}
.fp-peer-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:14px}
.fp-peer-heading h3{margin:3px 0 0;font-family:var(--font-display);font-size:1.08rem}
.fp-peer-grid{margin-bottom:13px}
.fp-ai-advisor{display:grid;grid-template-columns:1fr auto;gap:14px;margin:18px 0;padding:17px 18px;border:1px solid color-mix(in srgb,var(--brand-accent) 38%,var(--line));background:linear-gradient(108deg,color-mix(in srgb,var(--brand-accent) 9%,var(--surface-alt)),var(--surface))}
.fp-ai-advisor h3{margin:3px 0 5px;font-family:var(--font-display);font-size:1.05rem}.fp-ai-advisor p{margin:0;color:var(--ink-2);font-size:.9rem;line-height:1.45}.fp-ai-advisor>#fp-ai-suggestions{grid-column:1/-1}
.fp-ai-result{border-top:1px solid var(--line);padding-top:14px}.fp-ai-result>p{margin:0 0 12px}.fp-ai-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin:12px 0}
.fp-ai-connection{display:inline-flex;width:max-content;padding:4px 8px;border-radius:var(--r-pill);font-size:.76rem;font-weight:750;letter-spacing:.02em}.fp-ai-connection.ok{color:var(--positive);background:var(--pos-soft)}.fp-ai-connection.muted{color:var(--text-muted);background:var(--surface-alt)}.fp-ai-context.warn{color:var(--warning)}
.fp-ai-card{display:flex;gap:9px;padding:11px;border:1px solid var(--line);background:var(--surface);cursor:pointer}.fp-ai-card input{width:auto!important;align-self:flex-start;margin-top:3px}.fp-ai-card span{display:grid;gap:4px}.fp-ai-card b{font-size:.76rem;text-transform:uppercase;letter-spacing:.05em}.fp-ai-card strong{font-size:.93rem}.fp-ai-card small{color:var(--text-muted);font-size:.75rem;line-height:1.35}.fp-ai-card.unavailable{opacity:.68;cursor:not-allowed;background:var(--surface-alt)}
.fp-form-grid,.fp-target-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.fp-target-grid{grid-template-columns:repeat(3,minmax(0,1fr));margin:18px 0}
.fp-target{border:1px solid var(--line);padding:14px}
.fp-target legend{font-weight:800;padding:0 6px}
.fp-target-fields{display:grid;gap:10px}
.fp-form label,.fp-target label{display:grid;gap:6px;color:var(--ink-2);font-size:.82rem;font-weight:700}
.fp-form input,.fp-form textarea,.fp-form select,#fp-action-form input,#fp-action-form select{width:100%;border:1px solid var(--line);background:var(--surface);color:var(--text);padding:10px 12px;font:inherit}
.fp-wide{display:grid;margin:14px 0}
.fp-candidate-list{columns:2;margin:12px 0;padding:14px;background:var(--surface-alt)}
.fp-candidate-list label{display:block;break-inside:avoid;margin:7px 0}
.fp-proposals,.fp-actions{margin-top:22px;padding-top:18px;border-top:1px solid var(--line)}
.fp-client-visibility{display:flex;align-items:flex-start;gap:10px;margin-top:20px;padding:14px;border:1px solid var(--line);background:var(--surface-alt);cursor:pointer}.fp-client-visibility input{width:auto;margin-top:3px}.fp-client-visibility span{display:grid;gap:3px}.fp-client-visibility small{color:var(--text-muted);line-height:1.4}
.fp-proposal{padding:10px 0;border-bottom:1px solid var(--line)}
.fp-actions ul{list-style:none;padding:0}
.fp-actions li{padding:10px 0;border-bottom:1px solid var(--line)}
#fp-action-form{display:grid;grid-template-columns:160px 1fr 220px 155px auto;gap:10px;margin-top:14px}
@media(max-width:1050px){
  .fp-metrics,.fp-target-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .fp-ai-cards{grid-template-columns:repeat(2,minmax(0,1fr))}
  #fp-action-form{grid-template-columns:1fr 1fr}
}
@media(max-width:680px){
  .financial-plan{padding:18px}
  .fp-metrics,.fp-target-grid,.fp-form-grid,#fp-action-form,.fp-ai-advisor,.fp-ai-cards{grid-template-columns:1fr}
  .fp-candidate-list{columns:1}
}
@media print{
  .fp-planner,.fp-proposals,#fp-action-form,.fp-actions button{display:none!important}
  .financial-plan>.fp-body{display:block!important}
  .financial-plan>summary:after{display:none}
  .fp-metrics{grid-template-columns:repeat(2,1fr)}
}

/* ---- DUN-1984: cross-client work queue (admin home) ---- */
.wq-updated{margin-left:auto;font-size:.72rem;color:var(--text-muted);white-space:nowrap}
.wq-model-dock{display:grid;grid-template-columns:minmax(250px,1fr) minmax(260px,360px) auto;align-items:center;gap:18px;
  margin:0 0 16px;padding:14px 16px;border:1px solid var(--line);border-left:4px solid var(--brand-accent);
  background:linear-gradient(90deg,var(--surface),color-mix(in srgb,var(--brand-accent) 5%,var(--surface)))}
.wq-model-dock-copy{display:flex;align-items:center;gap:12px;min-width:0}
.wq-model-dock-copy strong,.wq-model-dock-copy small{display:block}
.wq-model-dock-copy strong{font:760 .86rem var(--display);color:var(--text)}
.wq-model-dock-copy small{margin-top:3px;color:var(--text-muted);font-size:.7rem;line-height:1.4}
.wq-model-mark{display:grid;place-items:center;flex:0 0 38px;height:38px;border:1px solid var(--brand-accent);
  color:var(--brand-accent);font:800 .68rem var(--num);letter-spacing:.08em}
.wq-model-control{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:9px}
.wq-model-control>span,.wq-card-model>span{color:var(--text-muted);font-size:.66rem;font-weight:750}
.wq-model-control select,.wq-card-model select{width:100%;min-width:0;border:1px solid var(--line-2);background:var(--surface);color:var(--text)}
.wq-model-control select{height:38px;padding:0 30px 0 10px;font-size:.76rem}
.wq-model-default-badge{justify-self:end;padding:4px 9px;border:1px solid var(--line-2);color:var(--text-muted);
  font-size:.62rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase;white-space:nowrap}
.wq-model-default-badge.on{border-color:color-mix(in srgb,var(--brand-accent) 45%,var(--line));background:var(--accent-soft);color:var(--brand-accent)}
.wq-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:14px;margin-bottom:16px}
.wq-summary{font:800 .92rem var(--num);color:var(--text);letter-spacing:.02em}
.wq-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.wq-focus-label{font-size:.72rem;font-weight:700;color:var(--text-muted);white-space:nowrap}
.wq-controls select{padding:6px 26px 6px 10px;font-size:.8rem}
.wq-source-sync{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:-2px 0 16px;
  padding:12px 14px;border:1px solid var(--line);border-left:3px solid var(--brand-accent);
  background:var(--surface);color:var(--text)}
.wq-source-sync .footnote{margin:3px 0 0}
/* QBO-5 (DUN-3100): the revealed autopilot strip, modeled on .wq-source-sync */
.wq-autopilot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;
  margin:-2px 0 16px;padding:12px 14px;border:1px solid var(--line);
  border-left:3px solid var(--brass);background:var(--surface);color:var(--text)}
.wq-autopilot-copy{min-width:0}
.wq-autopilot-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.wq-autopilot-copy .footnote{margin:4px 0 0;max-width:52ch}
.wq-autopilot-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.wq-autopilot-level{display:flex;align-items:center;gap:8px}
.wq-autopilot-level>span{color:var(--text-muted);font-size:.72rem;font-weight:750;white-space:nowrap}
.wq-autopilot-level select{padding:6px 26px 6px 10px;font-size:.8rem;border:1px solid var(--line-2);
  background:var(--surface);color:var(--text)}
@media (max-width:720px){.wq-autopilot-controls{width:100%;align-items:stretch}
  .wq-autopilot-level{flex:1 1 100%;flex-direction:column;align-items:stretch;gap:6px}
  .wq-autopilot-level select{width:100%;min-width:0;box-sizing:border-box}
  .wq-autopilot-controls>.btn{flex:1 1 100%}}
.wq-source-detail{margin:10px 0 12px;padding:10px 11px;border-left:3px solid var(--brass);
  background:var(--warn-soft);color:var(--text);font-size:12px;line-height:1.4}
.wq-source-detail strong{display:block;margin-bottom:5px}
.wq-source-detail ul{margin:0 0 6px;padding-left:18px}
.wq-source-detail span{display:block;color:var(--text-muted)}
.wq-source-drive-link{display:inline-flex;margin-top:8px;color:var(--teal);font-weight:800;
  text-decoration:underline;text-underline-offset:3px}
.wq-processing-banner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px}
.wq-processing-banner p{margin:0;font-weight:700;color:var(--text)}
.wq-processing-actions{display:flex;gap:8px}
.wq-board{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px;align-items:start}
.wq-column{display:flex;flex-direction:column;gap:10px;min-width:0}
.wq-column-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.wq-column-head h3{font-size:.82rem;font-weight:800;letter-spacing:.02em;color:var(--text);margin:0}
.wq-column-count{font:800 .74rem var(--num);color:var(--text-muted);background:var(--surface-alt);border-radius:var(--r-pill);padding:2px 9px;min-width:22px;text-align:center}
.wq-card-list{display:flex;flex-direction:column;gap:10px}
.wq-column-empty{padding:16px 12px;border:1px dashed var(--line-2);border-radius:var(--r-12);color:var(--text-muted);
  font-size:.78rem;line-height:1.5;text-align:center}
.wq-card{display:flex;flex-direction:column;gap:8px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--surface-alt);padding:12px 13px;cursor:pointer;text-align:left}
.wq-card:hover{border-color:var(--brand-accent)}
.wq-card:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.wq-card-head{display:flex;align-items:flex-start;gap:8px}
.wq-card-head-text{display:flex;flex-direction:column;gap:2px;min-width:0}
.wq-card-head-text strong{font-size:.86rem;color:var(--text);line-height:1.25}
.wq-card-period{font-size:.72rem;color:var(--text-muted)}
.wq-card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.wq-card-days{font-size:.7rem;color:var(--text-muted)}
.wq-card-model{display:flex;flex-direction:column;gap:4px;margin-top:1px}
.wq-card-model select{height:34px;padding:0 25px 0 8px;font-size:.68rem}
.wq-flag{display:inline-flex;align-items:center;gap:3px;font:700 .66rem var(--body);padding:2px 7px;border-radius:var(--r-pill)}
.wq-flag-warn{background:var(--warn-soft);color:var(--warning)}
.wq-flag-error{background:var(--neg-soft);color:var(--negative)}
.wq-flag-info{background:var(--accent-soft);color:var(--brand)}
.correction-working-copy{display:flex;align-items:center;justify-content:space-between;gap:16px}
.correction-working-copy p{margin:0}
.wq-card-action{align-self:flex-start;margin-top:2px}
.wq-card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:2px}
.wq-card-actions .wq-card-action{margin-top:0}
.wq-card-jobpill{align-self:flex-start;margin-top:2px;font:700 .7rem var(--body);color:var(--text-muted);
  background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-pill);padding:4px 10px}

/* ---- DUN-1988: batch analysis (checkboxes, batch bar, progress) ---- */
.wq-card-select{display:flex;align-items:center;padding-top:2px;cursor:pointer}
.wq-card-select input{margin:0;cursor:pointer}
.wq-card-batchable{padding-left:10px}
.wq-batch-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;
  padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface)}
.wq-batch-selectall{display:flex;align-items:center;gap:6px;font-size:.72rem;font-weight:700;color:var(--text-muted);cursor:pointer}
.wq-batch-selectall input{margin:0;cursor:pointer}
.wq-batch-actions{display:flex;flex-wrap:wrap;gap:6px}
.wq-batch-warning{flex-basis:100%;font-size:.7rem;color:var(--warning)}
.wq-batch-progress{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);padding:10px 12px}
.wq-batch-progress-head{display:flex;align-items:center;justify-content:space-between;gap:8px;font:700 .78rem var(--body);color:var(--text)}
.wq-batch-failed-list{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
.wq-batch-failed-item{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;
  font-size:.74rem;color:var(--negative)}
.wq-retry-model{display:flex;align-items:center;gap:6px;min-width:0;color:var(--text-muted)}
.wq-retry-model>span{font-size:.65rem;font-weight:750;white-space:nowrap}
.wq-retry-model select{max-width:190px;height:32px;padding:0 24px 0 7px;border:1px solid var(--line-2);
  background:var(--surface);color:var(--text);font-size:.67rem}
.wq-batch-failed-actions{display:flex;gap:6px;flex-wrap:wrap}
.wq-delivered{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);padding:14px 16px;margin-top:18px}
.wq-delivered summary{cursor:pointer;font-weight:800;font-size:.85rem;color:var(--text);list-style:none;
  display:flex;align-items:center;gap:8px}
.wq-delivered summary::-webkit-details-marker{display:none}
.wq-delivered summary:before{content:"▸";color:var(--text-muted);transition:transform .15s ease;display:inline-block}
.wq-delivered[open] summary:before{transform:rotate(90deg)}
.wq-delivered-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;margin-top:14px}
@media(max-width:900px){
  .wq-board{grid-template-columns:1fr}
  .wq-toolbar{flex-direction:column;align-items:flex-start}
  .wq-summary{order:-1}
  .wq-model-dock{grid-template-columns:1fr}
  .wq-model-default-badge{justify-self:start}
}
@media(prefers-reduced-motion:reduce){.wq-delivered summary:before{transition:none}}
/* ---------------- DUN-1982: review desk ----------------
 * Layout only — every color/spacing token below is one already used
 * elsewhere (--surface, --line, .panel, .callout, .report-chapter, .btn…),
 * so the screen stays visually consistent with the rest of the admin UI
 * instead of introducing its own palette. */
.review-desk-head{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:14px}
.review-desk-head h1{font-family:var(--display);font-size:1.3rem;margin:6px 0 2px}
.review-desk-head .psub{color:var(--text-muted);font-size:.82rem}
.review-desk-nav{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.review-desk-nav .workspace-card-actions{margin-top:0}
.main-col>.wrap:has(.review-desk){max-width:min(1540px,100%);padding-inline:24px}
.review-desk-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(460px,38%);gap:24px;align-items:start;margin-top:16px}
.review-desk-main{min-width:0}
.review-desk-side{display:grid;min-width:0;gap:16px;align-content:start;position:sticky;top:18px}
.review-desk-side>.panel{min-width:0;overflow:visible}
.verify-table{width:100%;table-layout:fixed}
.verify-table .verify-col-line{width:37%}
.verify-table .verify-col-value{width:22%}
.verify-table .verify-col-status{width:19%}
.verify-table th,.verify-table td{box-sizing:border-box;padding-inline:10px;white-space:normal;overflow-wrap:anywhere;vertical-align:top}
/* Headings wrap; only the figures stay on one line. The table is
   table-layout:fixed, so a heading that cannot wrap overflows its column and
   prints on top of the next one. */
.verify-table thead th{white-space:normal;letter-spacing:.04em;line-height:1.25;padding-bottom:6px}
.verify-table thead th.num{text-align:right}
.verify-table td.num{white-space:nowrap;text-align:right}
.verify-table td:last-child{padding-right:6px}
.verify-source-trigger{position:relative;display:inline-flex;align-items:center;justify-content:flex-end;gap:6px;
  min-height:36px;padding:5px 7px;border:1px solid transparent;border-radius:6px;background:transparent;
  color:var(--text);font:inherit;white-space:nowrap;cursor:pointer}
.verify-source-trigger:hover,.verify-source-trigger:focus-visible{border-color:var(--brand-accent);
  background:var(--ever-soft);outline:none}
.verify-source-trigger svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.8}
.verify-source-tooltip{position:absolute;z-index:30;right:0;bottom:calc(100% + 7px);width:max-content;max-width:280px;
  padding:8px 10px;border:1px solid var(--line-2);background:var(--ink);color:var(--surface);
  box-shadow:var(--shadow-float);font:650 .65rem/1.35 var(--body);text-align:left;white-space:normal;
  opacity:0;visibility:hidden;transform:translateY(3px);transition:.12s ease}
.verify-source-trigger:hover .verify-source-tooltip,.verify-source-trigger:focus-visible .verify-source-tooltip{
  opacity:1;visibility:visible;transform:none}
.status-square.unverified{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:3px;
  background:color-mix(in srgb,var(--warning) 14%,var(--surface));color:var(--warning);font-weight:850}
.verify-evidence-dialog{position:fixed;inset:0;margin:auto;width:min(940px,calc(100vw - 32px));
  max-height:min(860px,calc(100dvh - 32px));
  padding:0;border:1px solid var(--line-2);border-radius:16px;background:var(--surface);color:var(--text);
  box-shadow:var(--shadow-float)}
.verify-evidence-dialog::backdrop{background:rgba(4,22,19,.58);backdrop-filter:blur(2px)}
.verify-evidence-shell{display:grid;max-height:inherit;overflow:auto}
.verify-evidence-shell>header{position:sticky;top:0;z-index:2;display:flex;align-items:flex-start;
  justify-content:space-between;gap:20px;padding:24px 26px 18px;border-bottom:1px solid var(--line);
  background:color-mix(in srgb,var(--surface) 94%,transparent)}
.verify-evidence-shell>header h2{margin:5px 0 2px;font-size:1.45rem}
.verify-evidence-shell>header p{margin:0;color:var(--text-muted)}
.verify-evidence-shell>header .icon-btn{flex:0 0 44px;width:44px;height:44px;border:1px solid var(--line-2);
  border-radius:var(--r-round);background:var(--surface);color:var(--text);font-size:1.45rem;cursor:pointer}
.verify-evidence-summary{display:grid;grid-template-columns:1.4fr .8fr .7fr;gap:1px;margin:22px 26px;
  border:1px solid var(--line);background:var(--line)}
.verify-evidence-summary>div{min-width:0;padding:15px;background:var(--surface-alt)}
.verify-evidence-summary span,.verify-evidence-summary strong{display:block}
.verify-evidence-summary span{margin-bottom:5px;color:var(--text-muted);font-size:.65rem;font-weight:800;
  letter-spacing:.08em;text-transform:uppercase}
.verify-evidence-summary strong{overflow-wrap:anywhere}
.verify-evidence-shell>section{margin:0 26px;padding:18px 0;border-top:1px solid var(--line)}
.verify-evidence-shell>section h3{margin:0 0 8px;font-size:.92rem}
.verify-evidence-shell>section p{margin:0;line-height:1.55}
.verify-evidence-components{list-style:none;margin:12px 0 0;padding:0;border:1px solid var(--line)}
.verify-evidence-components li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 18px;
  padding:11px 13px;border-bottom:1px solid var(--line);background:var(--surface)}
.verify-evidence-components li:last-child{border-bottom:0}
.verify-evidence-components li>span:first-child strong,.verify-evidence-components li>span:first-child small{display:block}
.verify-evidence-components li small{margin-top:3px;color:var(--text-muted);font-size:.64rem}
.verify-evidence-components.nested{grid-column:1/-1;margin:2px 0 0 12px;border-left:3px solid var(--ever-soft)}
.verify-evidence-components.nested li{padding-block:7px;background:var(--surface-alt)}
.verify-reconciliation-list{display:grid;gap:8px}
.verify-reconciliation-list>div{display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:11px 13px;background:var(--surface-alt)}
.verify-evidence-shell>footer{position:sticky;bottom:0;display:flex;justify-content:flex-end;gap:10px;
  padding:16px 26px;border-top:1px solid var(--line);background:var(--surface)}
@media(max-width:1320px){
  .review-desk-grid{grid-template-columns:1fr}
  .review-desk-side{position:static}
  .review-desk-side>.panel{overflow:visible}
}
@media(max-width:640px){
  .main-col>.wrap:has(.review-desk){padding-inline:14px}
  .review-desk-head{flex-direction:column}
  .review-desk-nav{align-items:flex-start;width:100%}
  .verify-table,.verify-table tbody,.verify-table tr,.verify-table td{display:block;width:100%}
  .verify-table colgroup,.verify-table thead{display:none}
  .verify-table tr{margin-bottom:10px;padding:7px 12px;border:1px solid var(--line);background:var(--surface-alt)}
  .verify-table td,.verify-table th,.verify-table td.num{display:grid;grid-template-columns:minmax(110px,.8fr) minmax(0,1fr);
    align-items:start;gap:12px;padding:8px 0;border:0;border-bottom:1px solid var(--line);text-align:right;white-space:normal}
  .verify-table td:last-child{border-bottom:0}
  .verify-table td:before{content:attr(data-label);color:var(--text-muted);font-size:.64rem;font-weight:800;
    letter-spacing:.06em;text-align:left;text-transform:uppercase}
  .verify-source-trigger{margin-left:auto}
  .verify-source-tooltip{display:none}
  .verify-evidence-dialog{margin:0;width:100vw;max-width:none;max-height:100dvh;height:100dvh;
    border:0;border-radius:0}
  .verify-evidence-shell>header{padding:18px 16px 14px}
  .verify-evidence-summary{grid-template-columns:1fr;margin:16px}
  .verify-evidence-shell>section{margin-inline:16px}
  .verify-evidence-shell>footer{padding:12px 16px calc(12px + env(safe-area-inset-bottom))}
  .verify-evidence-shell>footer .btn{flex:1}
}

/* ---- Client-scoped operational workspace (Processing → Report → Publish) ---- */
.nav-label-mobile{display:none}
.sidebar-client-block{position:relative;margin:8px 0 10px;padding:10px;border-block:1px solid var(--line)}
.sidebar-client-block>label,.sidebar-admin-label{display:block;margin:0 2px 7px;color:var(--text-muted);
  font-size:.64rem;font-weight:800;letter-spacing:.11em;text-transform:uppercase}
.sidebar-client-input{position:relative}
.sidebar-client-input input{width:100%;height:44px;padding:0 34px 0 10px;border:1px solid var(--line-2);
  background:var(--surface);color:var(--text);font:650 .78rem var(--body)}
.sidebar-client-input>span{position:absolute;right:11px;top:50%;transform:translateY(-50%);color:var(--text-muted)}
.sidebar-client-results{position:absolute;z-index:180;top:calc(100% - 4px);left:0;width:320px;max-height:360px;
  overflow:auto;border:1px solid var(--line-2);background:var(--surface);box-shadow:var(--shadow-float)}
.sidebar-client-result{display:grid;grid-template-columns:minmax(0,1fr) 40px;border-bottom:1px solid var(--line)}
.sidebar-client-result:last-child{border-bottom:0}
.sidebar .views .sidebar-client-pick{min-width:0;border-radius:0;padding:10px}
.sidebar-client-pick span,.sidebar-client-pick strong,.sidebar-client-pick small{display:block;min-width:0}
.sidebar-client-pick strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-size:.78rem}
.sidebar-client-pick small{margin-top:3px;color:var(--text-muted);font-size:.65rem}
.sidebar .views .sidebar-favorite{justify-content:center;width:40px;padding:0;border-radius:0;color:var(--line-2)}
.sidebar .views .sidebar-favorite.on{background:transparent;color:var(--warning)}
.sidebar-client-empty{padding:14px;color:var(--text-muted);font-size:.75rem}
.verify-source-files{display:block;margin-top:5px;color:var(--text-muted);font-size:.62rem;line-height:1.35}
.verify-reconciliations{margin-top:14px;padding:14px 16px;border:1px solid var(--line);background:var(--paper)}
.verify-reconciliations h4{margin:0 0 10px}
.verify-reconciliations ul{display:grid;gap:8px;margin:0;padding:0;list-style:none}
.verify-reconciliations li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 12px;align-items:baseline}
.verify-reconciliations small{grid-column:1/-1;color:var(--text-muted)}
.verify-reconciliations strong.info{color:var(--brand-accent)}
.reconciliation-investigate{grid-column:1/-1;justify-self:start;border:0;background:none;padding:2px 0;color:var(--brand-accent);
  font:800 .68rem var(--body);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.reconciliation-assistant-dialog{width:min(720px,calc(100vw - 28px));max-height:min(86vh,860px);padding:0;border:1px solid var(--line-2);
  background:var(--surface);color:var(--text);box-shadow:var(--shadow-float)}
.reconciliation-assistant-dialog::backdrop{background:rgba(7,28,23,.55)}
.reconciliation-assistant-shell{display:grid;gap:16px;padding:22px}
.reconciliation-assistant-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.reconciliation-assistant-head span{font-size:.66rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--brand-accent)}
.reconciliation-assistant-head h2{margin:4px 0 0;font-size:1.25rem}
.reconciliation-deterministic{display:grid;gap:8px;padding:14px;border-left:3px solid var(--brand-accent);background:var(--ever-soft)}
.reconciliation-deterministic p,.reconciliation-deterministic small{margin:0;line-height:1.5}
.reconciliation-deterministic code{white-space:normal;color:var(--text);font:750 .8rem var(--num)}
.reconciliation-status{justify-self:start;padding:3px 8px;font-size:.64rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;background:var(--surface)}
.reconciliation-status.explained{color:var(--brand-accent)}.reconciliation-status.differs{color:var(--negative)}
.reconciliation-question{display:grid;gap:7px;font-size:.76rem;font-weight:750}.reconciliation-question textarea{width:100%}
.reconciliation-ai-answer{display:grid;gap:10px;margin-top:2px}.reconciliation-ai-answer section{padding:12px 14px;border:1px solid var(--line);background:var(--paper)}
.reconciliation-ai-answer strong{display:block;margin-bottom:4px;font-size:.7rem;color:var(--brand-accent);text-transform:uppercase;letter-spacing:.08em}
.reconciliation-ai-answer p{margin:0;color:var(--ink-2);line-height:1.55}
/* C5 (DUN-2444): the partial close, behind a disclosure. Available, never
   the obvious next click — a close that leaves work open should take a
   deliberate extra step. */
.readiness-gate{display:grid;gap:12px;padding:0 24px 22px}
.readiness-gate .btn{margin:0;justify-self:start}
.readiness-override summary{cursor:pointer;color:var(--text-muted);font-size:.82rem;
  font-weight:750}
.readiness-override[open] summary{margin-bottom:10px}
.readiness-override .footnote{max-width:70ch;margin:0 0 10px}
.readiness-override label{display:block;margin-bottom:6px;font-size:.76rem;font-weight:750}
.readiness-override textarea{width:100%;max-width:60ch;padding:11px;border:1px solid var(--line-2);
  border-radius:11px;background:var(--surface-alt);color:var(--text);
  font:500 16px/1.5 var(--body);resize:vertical}
.readiness-override .btn{margin-top:10px}
.readiness-override [aria-disabled="true"]{opacity:.5;cursor:not-allowed}

/* C4 (DUN-2443): the period the client is being asked about, named. The
   admin's own label stays, demoted to a subtitle — it is context, not the
   answer to "which month is this?". (.pending-cover-label / .pending-batch-label
   themselves moved into the consolidated pending block — DUN-2866.) */

/* C3 (DUN-2442): the close gate shows why it refuses, instead of being a
   button whose only feedback is the error it produces. */
.confirmation-close-month.readiness{display:block;padding:0}
.confirmation-close-month.readiness.ready{border-left-color:var(--brand-accent)}
.confirmation-close-month.readiness.blocked{border-left-color:var(--negative)}
.confirmation-close-month.readiness.sealed{border-left-color:var(--line-2)}
.readiness-head{padding:22px 24px}
.readiness-head span{color:var(--brand-accent);font:800 11px/1.2 var(--body);
  letter-spacing:.14em;text-transform:uppercase}
.confirmation-close-month.readiness.blocked .readiness-head span{color:var(--negative)}
.readiness-head h3{margin:5px 0}
.readiness-head p{max-width:720px;margin:0;color:var(--text-muted)}
.readiness-notes{display:grid;gap:7px;margin:0;padding:0 24px 18px;list-style:none}
.readiness-note{padding-left:16px;position:relative;font-size:.85rem;line-height:1.45}
.readiness-note b{font-weight:800}
.readiness-note.blocker b{color:var(--negative)}
.readiness-note::before{content:"";position:absolute;left:0;top:.55em;width:7px;height:7px;
  border-radius:var(--r-round);background:var(--warning)}
.readiness-note.blocker::before{background:var(--negative);border-radius:1px}
.readiness-actions{display:grid;gap:6px;margin:0;padding:0 24px 18px 44px;
  color:var(--text-muted);font-size:.85rem}
.readiness-actions strong{color:var(--text);font-family:var(--num)}
/* Scoped to a direct child: .readiness-gate below owns the padding, and
   this rule was adding 24px on top of it for both gate buttons. */
.confirmation-close-month.readiness > .btn{margin:0 24px 22px}
.confirmation-close-month.readiness [aria-disabled="true"]{opacity:.5;cursor:not-allowed}
/* M29: o selo do mes. Herda a forma do gate de fechamento acima -- sao os
   passos 1 e 2 da mesma aba, e ler como dois painis diferentes seria pior. */
.month-close-seal{display:block;padding:0}
.month-close-seal.ready{border-left-color:var(--brand-accent)}
.month-close-seal.blocked{border-left-color:var(--negative)}
.month-close-seal.stale{border-left-color:var(--warning)}
.month-close-seal.sealed{border-left-color:var(--positive)}
.month-close-seal.blocked .readiness-head span{color:var(--negative)}
.month-close-seal.stale .readiness-head span{color:var(--warning)}
.month-close-seal.sealed .readiness-head span{color:var(--positive)}
.month-close-accounts{display:grid;gap:8px;padding:0 24px 18px}
.month-close-accounts h4{margin:0 0 2px;font:800 11px/1.2 var(--body);letter-spacing:.14em;
  text-transform:uppercase;color:var(--text-muted)}
.month-close-account{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;
  gap:12px;padding:11px 14px;border:1px solid var(--line);background:var(--surface)}
.month-close-account.done{border-left:3px solid var(--positive)}
.month-close-account>div:first-child{display:grid;gap:2px;min-width:190px}
.month-close-account strong{font-size:.88rem}
.month-close-account small{color:var(--text-muted);font-size:.75rem}
/* Data, saldo e os dois botoes numa linha so: atestar uma conta tem de ser
   uma acao, nao um formulario. Quebra para duas linhas quando nao cabe. */
.month-close-attest-form{display:flex;flex-wrap:wrap;align-items:end;gap:8px}
.month-close-attest-form label{display:grid;gap:3px;color:var(--text-muted);
  font-size:.7rem;font-weight:750;letter-spacing:.04em;text-transform:uppercase}
.month-close-attest-form input{width:150px;padding:6px 8px;border:1px solid var(--line);
  background:var(--surface);color:var(--text);font:inherit;font-size:.82rem}
.month-close-attest-form .btn{margin:0}
.period-bar-scope{flex:1 1 100%;margin:0;color:var(--text-muted);font-size:.8rem}

/* C1 (DUN-2437): the working period, stated once above every stage of the
   confirmations desk. Quiet by default; it only raises its voice when the
   desk is genuinely behind, because a bar that always looks urgent stops
   meaning anything. */
.confirmations-period-bar{display:flex;align-items:center;gap:18px;flex-wrap:wrap;
  margin:0 0 22px;padding:14px 18px;border:1px solid var(--line);
  border-left:3px solid var(--brand-accent);background:var(--surface)}
.confirmations-period-bar.behind{border-left-color:var(--warning)}
.confirmations-period-bar.global-client-queue{background:var(--ever-soft)}
.period-bar-main{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.period-bar-main span{font-size:.66rem;font-weight:800;letter-spacing:.12em;
  text-transform:uppercase;color:var(--text-muted)}
.period-bar-main strong{font-size:1.1rem}
.period-bar-main small{color:var(--text-muted);font-size:.76rem}
.period-bar-behind{flex:1 1 100%;margin:0;color:var(--warning);font-size:.8rem}
.period-bar-ahead{flex:1 1 100%;margin:0;color:var(--text-muted);font-size:.8rem}
.period-bar-actions{display:flex;align-items:center;gap:10px;margin-left:auto;flex-wrap:wrap}
.period-bar-pin{display:flex;align-items:center;gap:8px;font-size:.72rem;
  font-weight:750;color:var(--text-muted)}
.period-bar-pin input{min-height:40px}
@media(max-width:640px){
  .confirmations-period-bar{gap:10px}
  .period-bar-actions{margin-left:0;width:100%}
  .period-bar-pin{flex:1 1 auto}
  .period-bar-pin input{flex:1 1 auto;min-width:0}
}

/* P5 (DUN-2445): the client-facing "what this report combines" section, and
   the review desk's stale-sources alert. */
.consolidation-panel .psub{margin:0 0 12px}
.consolidation-months{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));
  gap:6px 18px;margin:0 0 16px;padding-left:20px}
.consolidation-months li{padding:2px 0;color:var(--text)}
.consolidation-provenance{display:grid;grid-template-columns:minmax(250px,.75fr) minmax(420px,1.45fr);
  gap:22px;margin:-14px 0 30px;padding:20px 22px;border:1px solid var(--line);
  border-left:4px solid var(--brand-accent);background:var(--surface);box-shadow:var(--shadow)}
.consolidation-provenance.attention{border-left-color:var(--warning)}
.consolidation-provenance.unverified{border-left-color:var(--line-2)}
.consolidation-provenance.direct{border-left-color:var(--brass)}
.consolidation-provenance-head>span{display:block;margin-bottom:6px;color:var(--ever-mid);
  font-size:.64rem;font-weight:850;letter-spacing:.12em;text-transform:uppercase}
.consolidation-provenance-head h2{margin:0;font-size:1.12rem;line-height:1.25}
.consolidation-provenance-head p{max-width:55ch;margin:9px 0 0;color:var(--text-muted);font-size:.78rem;line-height:1.5}
.consolidation-provenance-flow{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:stretch}
.consolidation-source-ledger{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));
  gap:1px;margin:0;padding:1px;list-style:none;background:var(--line)}
.consolidation-source-ledger li{display:grid;align-content:center;gap:3px;min-height:78px;padding:11px 12px;background:var(--surface-alt)}
.consolidation-source-ledger li>span{color:var(--brand-accent);font:800 .64rem var(--num)}
.consolidation-source-ledger strong{font-size:.79rem}
.consolidation-source-ledger small{color:var(--ever-mid);font-size:.66rem;line-height:1.35}
.consolidation-result{display:grid;align-content:center;min-width:150px;padding:12px 15px;border:1px solid var(--brand-accent);
  background:var(--ever-soft)}
.consolidation-result>span{color:var(--brand-accent);font:850 1rem var(--num)}
.consolidation-result strong{margin:5px 0 2px;font-size:.88rem}
.consolidation-result small{color:var(--text-muted);font-size:.68rem;text-transform:capitalize}
.consolidation-direct-flow{display:flex;align-items:stretch;gap:12px}
.consolidation-direct-source{display:grid;align-content:center;min-width:250px;padding:13px 15px;border:1px solid var(--line);background:var(--surface-alt)}
.consolidation-direct-source>span{color:var(--brass);font:850 .72rem var(--num)}
.consolidation-direct-source strong{margin:4px 0 2px;font-size:.82rem}
.consolidation-direct-source small{color:var(--text-muted);font-size:.67rem}
.consolidation-flow-arrow{align-self:center;color:var(--brand-accent);font:850 1.1rem var(--num)}
.consolidation-lineage{grid-column:1 / -1;margin:0;padding-top:12px;border-top:1px solid var(--line);
  color:var(--text-muted);font-size:.76rem;line-height:1.5}
.consolidation-lineage b{color:var(--text)}
.consolidation-lineage.attention{color:var(--warning)}
.rd-stale-sources{border-left:4px solid var(--line-2)}
/* Only the states that actually refuse approval wear the alarm colour. */
.rd-stale-sources.blocking{border-left-color:var(--warning)}
.rd-stale-sources h3{margin:0 0 6px}
.rd-stale-sources .psub{max-width:70ch;margin:0 0 12px}

/* P4 (DUN-2440): the consolidation preflight panel. It sits between the
   period picker and the Generate button because that is the order of the
   decision: choose, see, then act. The verdict strip is the only coloured
   surface — the month list stays quiet so the eye lands on the exception,
   not on eleven rows of "published". */
.rollup-preflight{margin:14px 0;border:1px solid var(--line);border-left:3px solid var(--line-2);
  background:var(--paper)}
.rollup-preflight.ready{border-left-color:var(--brand-accent)}
.rollup-preflight.warn{border-left-color:var(--warning)}
.rollup-preflight.blocked{border-left-color:var(--negative)}
.rollup-preflight.loading{padding:14px;color:var(--text-muted);font-size:.82rem}
.preflight-verdict{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
  flex-wrap:wrap;padding:12px 14px;border-bottom:1px solid var(--line)}
.preflight-verdict span{font-size:.72rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase}
/* --ever-mid, not --brand-accent: the accent on --paper at this size
   measures 4.33:1, under the 4.5:1 WCAG 1.4.3 floor for normal text. */
.rollup-preflight.ready .preflight-verdict span{color:var(--ever-mid)}
.rollup-preflight.warn .preflight-verdict span{color:var(--warning)}
.rollup-preflight.blocked .preflight-verdict span{color:var(--negative)}
.preflight-verdict small{color:var(--text-muted);font-size:.76rem}
.preflight-months{display:grid;gap:1px;margin:0;padding:0;list-style:none;background:var(--line)}
.preflight-month{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:baseline;
  padding:8px 14px;background:var(--surface);font-size:.8rem}
.preflight-month-key{display:grid;gap:1px}
.preflight-month-key strong{font-size:.82rem}
.preflight-month-key small{color:var(--text-muted);font:650 .64rem var(--num)}
.preflight-month-state,.preflight-month-detail{color:var(--text-muted)}
.preflight-month-detail{font-size:.72rem}
.preflight-month.missing .preflight-month-key,
.preflight-month.missing .preflight-month-state{color:var(--negative)}
.preflight-month.warn .preflight-month-state{color:var(--text)}
.preflight-notes{display:grid;gap:6px;margin:0;padding:12px 14px;list-style:none;
  border-top:1px solid var(--line)}
.preflight-note{padding-left:16px;position:relative;font-size:.8rem;line-height:1.45}
.preflight-note b{font-weight:800}
.preflight-note.blocker b{color:var(--negative)}
.preflight-note.warning b{color:var(--text)}
/* Shape as well as colour: in greyscale a red dot and an amber dot are the
   same dot. The text tag carries the meaning; this is the redundant cue. */
.preflight-note::before{content:"";position:absolute;left:0;top:.5em;width:7px;height:7px;
  border-radius:var(--r-round);background:var(--line-2)}
.preflight-note.blocker::before{background:var(--negative);border-radius:1px}
/* Amber, not the brand green: a warning that looks like a success chip
   reads as "all clear" at a glance, which is the opposite of its job. */
.preflight-note.warning::before{background:var(--warning)}
/* R2 (DUN-2438): differences that may be accepted as exceptions. The left
   rule carries the state as position and colour together, and the leading
   <b> repeats it as a word — WCAG 1.4.1: "Not reconciled" and "Accepted" must
   not be the same sentence in greyscale. */
.preflight-diffs{list-style:none;margin:0;padding:0 14px 12px;display:grid;gap:8px}
.preflight-diff{border-left:3px solid var(--warning);padding:8px 0 8px 10px;
  background:var(--surface-2);border-radius:0 6px 6px 0}
.preflight-diff.explained{border-left-color:var(--positive)}
.preflight-diff-what{margin:0;font-size:.8rem;line-height:1.45}
.preflight-diff.open .preflight-diff-what b{color:var(--warning)}
.preflight-diff.explained .preflight-diff-what b{color:var(--positive)}
.preflight-diff-why{margin:4px 0 0;font-size:.78rem;line-height:1.5;color:var(--muted);
  display:flex;flex-wrap:wrap;gap:6px;align-items:baseline}
.preflight-diff-why small{width:100%;font-size:.72rem}
.preflight-diff .btn{margin-top:6px}
.rollup-preflight .footnote{margin:0;padding:0 14px 12px}
.preflight-retry{padding:0 14px 12px}
@media(max-width:520px){
  /* auto 1fr, not 1fr auto: the flexible track must hold the long status
     label, not the four-character period key. */
  .preflight-month{grid-template-columns:auto 1fr}
  .preflight-month-detail{grid-column:1 / -1}
}

/* P2 (DUN-2438): the continuity-break dialog. Deliberately the same shell
   geometry as the reconciliation assistant above — an operator meets both in
   the same review, and two different modal languages would read as two
   different products. The accent is the negative colour, not the brand one:
   this one is refusing something. */
/* margin:auto is not decoration: the universal reset above (`*{margin:0}`)
   overrides the UA stylesheet's own margin:auto on <dialog>, which is what
   centres a modal against its inset:0 box. Without it this opens flush
   against the top-left corner. */
.continuity-break-dialog{width:min(680px,calc(100vw - 28px));max-height:min(86vh,860px);margin:auto;padding:0;
  border:1px solid var(--line-2);background:var(--surface);color:var(--text);box-shadow:var(--shadow-float)}
.continuity-break-dialog::backdrop{background:rgba(7,28,23,.55)}
.continuity-break-shell{display:grid;gap:16px;padding:22px}
.continuity-break-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.continuity-break-head span{font-size:.66rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--negative)}
.continuity-break-head h2{margin:4px 0 0;font-size:1.25rem}
.continuity-break-lead{margin:0;color:var(--ink-2);line-height:1.55}
.continuity-break-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}
.continuity-break-row{display:grid;grid-template-columns:1fr auto;gap:2px 14px;align-items:baseline;
  padding:12px 14px;border-left:3px solid var(--negative);background:var(--paper)}
/* Advisories are not refusals: they must not wear the alarm colour. */
.continuity-break-row.position,.continuity-break-row.incomplete{border-left-color:var(--line-2)}
.continuity-break-kind{grid-column:1;font-size:.64rem;font-weight:800;letter-spacing:.08em;
  text-transform:uppercase;color:var(--text-muted)}
.continuity-break-row p{grid-column:1;margin:0;line-height:1.5}
.continuity-break-row strong{grid-column:2;grid-row:1 / span 2;font:750 .95rem var(--num);white-space:nowrap}
.continuity-break-row strong.neg{color:var(--negative)}
.continuity-advisories summary{cursor:pointer;font-size:.76rem;font-weight:750;color:var(--text-muted)}
.continuity-advisories .continuity-break-list{margin-top:10px}
.continuity-break-reason{display:block;margin-bottom:-9px;font-size:.76rem;font-weight:750}
/* 16px is not a style choice: iOS Safari zooms the viewport when a focused
   input is smaller, which throws the operator out of the modal mid-decision. */
.continuity-break-textarea{width:100%;padding:11px;border:1px solid var(--line-2);border-radius:11px;
  background:var(--surface-alt);color:var(--text);font:500 16px/1.5 var(--body);resize:vertical}
.continuity-break-actions{position:sticky;bottom:0;display:flex;justify-content:flex-end;gap:10px;
  flex-wrap:wrap;padding-top:12px;background:var(--surface)}
.continuity-break-actions [aria-disabled="true"]{opacity:.5;cursor:not-allowed}
@media(max-width:520px){
  .continuity-break-row{grid-template-columns:1fr}
  .continuity-break-row strong{grid-column:1;grid-row:auto}
  .continuity-break-actions .btn{flex:1 1 100%}
}

.workspace-ledger-nav{position:relative;display:grid;gap:3px;margin-bottom:14px;padding-left:10px}
.workspace-ledger-line{position:absolute;left:20px;top:14px;bottom:14px;width:2px;background:var(--brand-accent);opacity:.42}
.sidebar .views .workspace-ledger-nav button{position:relative;z-index:1;padding-left:11px}
.sidebar .views .workspace-ledger-nav .nav-icon{display:grid;place-items:center;border-radius:var(--r-round);background:var(--surface)}
.sidebar .views .workspace-ledger-nav button.on .nav-icon{background:var(--ever-soft)}
.sidebar-admin-label{margin:8px 12px 3px}

.admin-global-hero{margin:0 0 24px;padding:10px 0 18px;border-bottom:1px solid var(--line)}
.admin-global-hero h1{margin:12px 0 7px;font-size:clamp(2rem,4vw,3.2rem)}
.admin-global-hero p{max-width:66ch;color:var(--text-muted);line-height:1.5}
.workspace-shell-v2{margin-top:0;box-shadow:none;border-left:4px solid var(--brand-accent)}
.admin-workspace-pane{margin-top:22px}
.processing-consolidation{margin:18px 0;padding:20px 22px;border:1px solid var(--line);
  border-left:4px solid var(--brand-accent);background:var(--surface);box-shadow:var(--shadow)}
.consolidation-builder-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,.55fr);
  gap:24px;align-items:start;padding-bottom:17px;border-bottom:1px solid var(--line)}
.consolidation-builder-head>div:first-child>span{display:block;margin-bottom:6px;color:var(--ever-mid);
  font-size:.64rem;font-weight:850;letter-spacing:.12em;text-transform:uppercase}
.consolidation-builder-head h2{margin:0;font-size:1.24rem}
.consolidation-builder-head p{max-width:70ch;margin:7px 0 0;color:var(--text-muted);font-size:.8rem;line-height:1.5}
.consolidation-builder-rule{display:grid;gap:4px;padding:12px 14px;border-left:3px solid var(--brand-accent);background:var(--ever-soft)}
.consolidation-builder-rule b{font-size:.72rem}
.consolidation-builder-rule span{color:var(--ink-2);font-size:.72rem;line-height:1.45}
.consolidation-builder-controls{display:grid;grid-template-columns:minmax(180px,.6fr) minmax(230px,1fr);
  gap:12px;max-width:680px;margin-top:16px}
.consolidation-builder-controls label{display:grid;gap:5px}
.consolidation-builder-controls label>span{color:var(--text-muted);font-size:.66rem;font-weight:800;
  letter-spacing:.07em;text-transform:uppercase}
.consolidation-builder-controls select{width:100%;min-height:42px;padding:8px 34px 8px 11px;border:1px solid var(--line-2);background:var(--surface-alt)}
.consolidation-builder-action{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding-top:2px}
.consolidation-builder-action small{max-width:58ch;color:var(--text-muted);font-size:.7rem;line-height:1.45}
@media(max-width:520px){
  .consolidation-provenance{display:block;margin:-6px 0 20px;padding:16px}
  .consolidation-provenance-flow{grid-template-columns:1fr;margin-top:15px}
  .consolidation-direct-flow{display:grid;grid-template-columns:1fr;margin-top:15px}
  .consolidation-direct-source{min-width:0}
  .consolidation-flow-arrow{justify-self:center;transform:rotate(90deg)}
  .consolidation-source-ledger{grid-template-columns:1fr}
  .consolidation-source-ledger li{min-height:0}
  .consolidation-result{min-width:0}
  .consolidation-lineage{margin-top:14px}
  .processing-consolidation{padding:17px 15px}
  .consolidation-builder-controls{grid-template-columns:1fr}
  .consolidation-builder-action .btn{width:100%}
}
.processing-periods,.processing-advanced{margin:18px 0;border:1px solid var(--line);background:var(--surface)}
.processing-periods>summary,.processing-advanced>summary{display:flex;align-items:baseline;justify-content:space-between;gap:14px;
  min-height:52px;padding:14px 17px;cursor:pointer;list-style:none;font-weight:800}
.processing-periods>summary::-webkit-details-marker,.processing-advanced>summary::-webkit-details-marker{display:none}
.processing-periods>summary:after,.processing-advanced>summary:after{content:"＋";margin-left:auto;color:var(--brand-accent)}
.processing-periods[open]>summary:after,.processing-advanced[open]>summary:after{content:"−"}
.processing-periods>summary small,.processing-advanced>summary small{color:var(--text-muted);font-weight:600}
.processing-periods-body{padding:0 17px 17px;border-top:1px solid var(--line)}
.processing-periods-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 0}
.processing-periods-toolbar input{min-width:260px;height:42px;padding:0 11px;border:1px solid var(--line-2);background:var(--surface)}
.processing-advanced-grid{display:grid;grid-template-columns:1fr;gap:16px;padding:17px;border-top:1px solid var(--line)}
.processing-advanced-grid>.panel{margin:0;box-shadow:none}

.workspace-content-tabs,.settings-nav{display:flex;gap:0;margin:16px 0 22px;border-bottom:1px solid var(--line);overflow-x:auto}
.workspace-content-tabs button,.settings-nav button{min-height:46px;padding:0 18px;border:0;border-bottom:3px solid transparent;
  background:transparent;color:var(--text-muted);font-weight:750;white-space:nowrap}
.workspace-content-tabs button.on,.settings-nav button.on{border-bottom-color:var(--brand-accent);color:var(--text)}
/* SET-0 (DUN-3104): Settings as a role-organized left-rail, not a flat tab strip. */
.settings-layout{display:grid;grid-template-columns:minmax(184px,212px) 1fr;gap:30px;align-items:start;margin-top:18px}
.settings-rail{display:flex;flex-direction:column;gap:20px;position:sticky;top:14px}
.settings-group{display:flex;flex-direction:column;gap:2px}
.settings-group-label{margin:0 0 5px;padding:0 11px;font-size:.66rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--text-muted)}
.settings-rail button{min-height:38px;padding:0 12px;text-align:left;border:0;border-radius:var(--r-8);background:transparent;
  color:var(--text-muted);font-size:.9rem;font-weight:650;cursor:pointer;transition:background .12s,color .12s}
.settings-rail button:hover{background:var(--surface-alt);color:var(--text)}
.settings-rail button.on{background:var(--accent-soft);color:var(--text);font-weight:750;box-shadow:inset 2px 0 0 var(--brand-accent)}
@media (max-width:860px){
  .settings-layout{grid-template-columns:1fr;gap:16px}
  .settings-rail{position:static;flex-direction:row;flex-wrap:wrap;gap:6px 8px}
  .settings-group{flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px}
  .settings-group-label{width:100%;margin:8px 0 0;padding:0}
  .settings-rail button{min-height:34px;border-radius:var(--r-pill);border:1px solid var(--line)}
  .settings-rail button.on{box-shadow:none;border-color:var(--brand-accent)}
}
/* SET-2 (DUN-3105): fleet-health panel — cross-client setup gaps at a glance. */
.fleet-health-head{margin:0 0 16px}
.fleet-health-head h2{margin:0 0 4px;font-size:1.3rem}
.fleet-filters{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px}
.fleet-filter{display:inline-flex;align-items:center;gap:7px;min-height:34px;padding:0 12px;border:1px solid var(--line);
  border-radius:var(--r-pill);background:var(--surface);color:var(--text-muted);font-size:.82rem;font-weight:650;cursor:pointer;
  transition:background .12s,border-color .12s,color .12s}
.fleet-filter:hover{background:var(--surface-alt);color:var(--text)}
.fleet-filter.on{background:var(--accent-soft);border-color:var(--brand-accent);color:var(--text)}
.fleet-filter-n{min-width:20px;padding:0 6px;border-radius:var(--r-pill);background:var(--surface-alt);color:var(--text);
  font-size:.74rem;font-weight:750;text-align:center}
.fleet-list{display:flex;flex-direction:column;gap:10px}
.fleet-row{display:grid;grid-template-columns:minmax(150px,1fr) 2fr auto;gap:14px;align-items:center;
  padding:13px 15px;border:1px solid var(--line);border-radius:var(--r-12);background:var(--surface)}
.fleet-row-id h3{margin:0;font-size:.98rem}
.fleet-row-id code{color:var(--text-muted);font-size:.76rem}
.fleet-row-blockers{display:flex;flex-wrap:wrap;gap:6px}
@media (max-width:720px){
  .fleet-row{grid-template-columns:1fr;gap:10px}
  .fleet-row .btn{justify-self:start}
}
.workspace-action-list{display:grid;gap:10px}
.workspace-action-list article{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:16px 17px;
  border:1px solid var(--line);background:var(--surface-alt)}
.workspace-action-list article h3{margin:7px 0 3px;font-size:.95rem}
.workspace-action-list article p{margin:0;color:var(--text-muted);font-size:.76rem}
.workspace-empty-state{padding:44px 22px;border:1px dashed var(--line-2);text-align:center}
.workspace-empty-state.compact{padding:28px 18px}
.workspace-empty-state h2{margin-bottom:8px;font-size:1.05rem}
.workspace-empty-state p{max-width:54ch;margin:0 auto 16px;color:var(--text-muted);line-height:1.5}
.publish-release-panel{box-shadow:none}
.publish-history{display:grid}
.publish-history>div{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:11px 0;border-bottom:1px solid var(--line)}
.publish-history>div:last-child{border-bottom:0}
.publish-history span>strong,.publish-history span>small{display:block}
.publish-history span>small{margin-top:3px;color:var(--text-muted);font-size:.7rem}

.settings-company-sections{display:grid;gap:14px}
.settings-company-card{margin:0;box-shadow:none}
.settings-card-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--line)}
.settings-card-head>div{display:flex;align-items:center;gap:10px}
.settings-card-head>div>span{color:var(--brand-accent);font:800 .68rem var(--num)}
.settings-card-head h3{margin:0;font-size:.98rem}
.settings-security-note{padding:11px 13px;border-left:3px solid var(--brand-accent);background:var(--ever-soft);
  color:var(--ink-2);font-size:.76rem;line-height:1.5}
.permission-legend{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 16px}
.permission-legend span{padding:7px 9px;border:1px solid var(--line);background:var(--surface-alt);color:var(--text-muted);font-size:.69rem}
.permission-legend strong{color:var(--text)}
.permission-person-list{display:grid;border-top:1px solid var(--line)}
.permission-person-row{display:grid;grid-template-columns:minmax(190px,1.2fr) minmax(190px,1fr) minmax(155px,.8fr) minmax(210px,auto) auto;align-items:center;gap:12px;padding:14px 0;border-bottom:1px solid var(--line)}
.permission-person strong,.permission-person small{display:block;overflow-wrap:anywhere}
.permission-person small{margin-top:3px;color:var(--text-muted);font-size:.68rem}
.permission-person .state-chip{margin-top:7px}
.permission-scope>span{display:block;margin-bottom:5px;color:var(--text-muted);font-size:.65rem;font-weight:750;text-transform:uppercase;letter-spacing:.07em}
.permission-scope select{width:100%;min-height:40px;padding:0 9px;border:1px solid var(--line-2);background:var(--surface);font-size:.75rem}
.permission-notify{display:flex;align-items:center;gap:7px;color:var(--text-muted);font-size:.71rem;font-weight:700;line-height:1.35}
.permission-notify input{accent-color:var(--brand-accent)}
.permission-login .access-login-cell{display:flex;align-items:center;justify-content:flex-end;gap:7px}
.permission-remove{justify-self:end}
.permission-add{display:grid;grid-template-columns:minmax(150px,.8fr) minmax(210px,1fr) minmax(190px,.8fr) minmax(155px,.7fr) auto;align-items:end;gap:12px;margin-top:18px;padding:16px;border:1px solid var(--line);background:var(--surface-alt)}
.permission-add .adm-field{margin:0}.permission-add .permission-notify{min-height:42px}
.access-invite-dialog{width:min(720px,calc(100vw - 32px));padding:0;border:0;background:var(--surface);color:var(--text);box-shadow:var(--shadow-float)}
.access-invite-dialog::backdrop{background:rgba(7,28,23,.58);backdrop-filter:blur(2px)}
.access-invite-dialog>p{margin:0;padding:18px 22px 5px;color:var(--text-muted);line-height:1.55}
.access-invite-head{display:flex;align-items:center;gap:14px;padding:21px 22px;border-bottom:1px solid var(--line);background:var(--ever-soft)}
.access-invite-head>span{display:grid;place-items:center;width:40px;height:40px;background:var(--brand-accent);color:var(--brand-deep);font-size:1.1rem}
.access-invite-head h3{margin:4px 0 0;font-size:1.15rem}
.access-invite-summary{display:grid;grid-template-columns:1fr 1fr;gap:1px;margin:16px 22px;background:var(--line)}
.access-invite-summary>div{padding:13px;background:var(--surface-alt)}
.access-invite-summary dt{margin-bottom:5px;color:var(--text-muted);font-size:.63rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em}
.access-invite-summary dd{margin:0;font-size:.8rem;font-weight:750}.access-invite-summary small{display:block;margin-top:3px;color:var(--text-muted);font-weight:500}
.access-invite-actions{display:flex;justify-content:flex-end;gap:9px;padding:16px 22px;border-top:1px solid var(--line)}
.audit-toolbar{display:grid;grid-template-columns:minmax(220px,1fr) minmax(220px,.65fr) auto;align-items:end;gap:12px;margin-bottom:10px;padding:13px;background:var(--surface-alt);border:1px solid var(--line)}
.audit-toolbar label>span{display:block;margin-bottom:5px;color:var(--text-muted);font-size:.64rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em}
.audit-toolbar input,.audit-toolbar select{width:100%;height:40px;padding:0 10px;border:1px solid var(--line-2);background:var(--surface)}
.audit-filter-actions{display:flex;gap:7px}.audit-summary{padding:7px 0;color:var(--text-muted);font:650 .68rem var(--num)}
.company-audit-list{list-style:none;margin:0;padding:0}
.company-audit-list li{display:grid;grid-template-columns:minmax(0,1fr) minmax(200px,.8fr);gap:18px;padding:11px 0;border-bottom:1px solid var(--line)}
.company-audit-list li:last-child{border-bottom:0}
.company-audit-list span,.company-audit-list strong,.company-audit-list small,.company-audit-list time{display:block}
.company-audit-list strong{font-size:.78rem;text-transform:capitalize}
.company-audit-list small{margin-top:3px;color:var(--text-muted);font-size:.68rem;overflow-wrap:anywhere}
.company-audit-list li>span:last-child{text-align:right}
.company-audit-list time{font:650 .7rem var(--num);color:var(--text)}
.audit-pagination{display:flex;align-items:center;justify-content:center;gap:5px;margin-top:15px;padding-top:13px;border-top:1px solid var(--line)}
.audit-pagination button{min-width:35px;height:35px;padding:0 10px;border:1px solid var(--line);background:var(--surface);color:var(--text);font-size:.71rem;font-weight:750}
.audit-pagination button.on{border-color:var(--brand-accent);background:var(--ever-soft);color:var(--brand-accent)}
.audit-pagination button:disabled{opacity:.4;cursor:not-allowed}.audit-pagination>span{padding:0 3px;color:var(--text-muted)}
.danger-zone{border-left:4px solid var(--negative)}
.danger-period-list{display:grid;gap:9px;margin-top:14px}
.danger-period{display:grid;grid-template-columns:minmax(160px,1fr) minmax(220px,1fr) auto;align-items:end;gap:12px;padding:13px;border:1px solid var(--line);background:var(--surface-alt)}
.danger-period strong,.danger-period small,.danger-period label>span{display:block}
.danger-period small,.danger-period label>span{margin-top:3px;color:var(--text-muted);font-size:.67rem}
.danger-period input{width:100%;height:38px;padding:0 9px;border:1px solid var(--line-2);background:var(--surface)}
.danger-company{display:grid;grid-template-columns:minmax(280px,1fr) minmax(220px,.7fr) auto;align-items:end;gap:14px;margin-top:18px;padding:16px;border:1px solid color-mix(in srgb,var(--negative) 35%,var(--line));background:color-mix(in srgb,var(--negative) 5%,var(--surface))}
.danger-company strong,.danger-company label>span{display:block}
.danger-company p{max-width:760px;margin:5px 0 0;color:var(--text-muted);font-size:.72rem;line-height:1.5}
.danger-company label>span{margin-bottom:5px;color:var(--text-muted);font-size:.67rem}
.danger-company input{width:100%;height:40px;padding:0 10px;border:1px solid var(--line-2);background:var(--surface);font:700 .78rem var(--num)}
.danger-company .btn{white-space:nowrap}
.settings-savebar{position:sticky;bottom:12px;z-index:20;justify-content:flex-end;margin:0;padding:12px;border:1px solid var(--line);
  background:var(--glass-bg);box-shadow:var(--shadow-float)}

.wq-mobile-filter{display:none}
.wq-board{grid-template-columns:repeat(6,minmax(168px,1fr));min-width:1080px}

@media(max-width:940px){
  .sidebar .views{align-items:center;gap:4px;min-width:0}
  .sidebar .views>button{width:auto}
  .sidebar-client-block{flex:1 1 260px;min-width:180px;margin:0;padding:0 8px;border:0}
  .sidebar-client-block>label,.sidebar-admin-label{display:none}
  .workspace-ledger-nav{display:flex;flex:0 1 auto;margin:0;padding:0}
  .workspace-ledger-line{display:none}
  .sidebar .views .workspace-ledger-nav button{width:auto;padding:9px}
  .sidebar-client-results{left:auto;right:0}
  .consolidation-provenance{grid-template-columns:1fr}
  .consolidation-builder-head{grid-template-columns:1fr}
  .processing-advanced-grid{grid-template-columns:1fr}
}

@media(max-width:900px){
  .wq-board{min-width:0}
  .wq-mobile-filter{display:flex;align-items:center;gap:7px;color:var(--text-muted);font-size:.72rem;font-weight:750}
}

@media(max-width:820px){
  .sidebar{min-height:64px;padding:10px 12px}
  .admin-shell .sidebar .views{position:static;display:contents;width:auto;height:auto;margin:0;padding:0;transform:none;background:transparent;border:0;box-shadow:none}
  .sidebar .views>[data-admin-shell="clients"]{display:none}
  .sidebar-client-block{display:block;flex:1 1 auto;max-width:480px;padding:0}
  .sidebar-client-results{position:fixed;top:70px;left:10px;right:10px;width:auto;max-height:55dvh}
  .workspace-ledger-nav{position:fixed;left:10px;right:calc(20% + 7px);bottom:10px;z-index:130;display:grid;
    grid-template-columns:repeat(4,1fr);height:64px;padding:5px;border:1px solid var(--line);background:var(--glass-bg);box-shadow:var(--shadow-float)}
  .sidebar .views .workspace-ledger-nav button{width:100%;height:52px;justify-content:center;flex-direction:column;gap:2px;padding:4px 5px;font-size:.7rem}
  .sidebar .views .workspace-ledger-nav button>span:last-child{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.62rem}
  .sidebar .views>[data-admin-shell="settings"]{position:fixed;right:10px;bottom:10px;z-index:131;width:calc(20% - 10px);
    height:64px;justify-content:center;flex-direction:column;gap:2px;padding:5px;border:1px solid var(--line);
    background:var(--glass-bg);box-shadow:var(--shadow-float);font-size:.7rem}
  .nav-label-desktop{display:none}.nav-label-mobile{display:inline}
  .sidebar .views .nav-icon,.sidebar .views .nav-icon svg{width:19px;height:19px}
  .workspace-ledger-line{display:none}
  .processing-periods>summary,.processing-advanced>summary{align-items:flex-start;flex-direction:column}
  .processing-periods>summary:after,.processing-advanced>summary:after{position:absolute;right:17px}
  .processing-periods,.processing-advanced{position:relative}
  .processing-periods-toolbar{align-items:stretch;flex-direction:column}
  .processing-periods-toolbar input{min-width:0;width:100%}
  .wq-controls{width:100%;align-items:stretch}
  .wq-mobile-filter{width:100%}
  .wq-mobile-filter select{flex:1}
  .wq-focus-label,#wq-focus-select{display:none}
  .wq-column.wq-mobile-filtered{display:none}
  .workspace-action-list article{align-items:flex-start;flex-direction:column}
  .company-audit-list li{grid-template-columns:1fr}
  .company-audit-list li>span:last-child{text-align:left}
  .permission-person-row,.permission-add{grid-template-columns:1fr 1fr}
  .permission-login .access-login-cell{justify-content:flex-start}
  .permission-remove{justify-self:start}
  .audit-toolbar{grid-template-columns:1fr 1fr}.audit-filter-actions{grid-column:1/-1}
  .danger-period{grid-template-columns:1fr}
  .danger-period .btn{width:100%}
  .danger-company{grid-template-columns:1fr}
  .danger-company .btn{width:100%}
}

@media(max-width:620px){
  .permission-person-row,.permission-add,.audit-toolbar,.access-invite-summary{grid-template-columns:1fr}
  .audit-filter-actions{grid-column:auto}.audit-filter-actions .btn{flex:1}
  .audit-pagination{flex-wrap:wrap}
  .access-invite-actions{align-items:stretch;flex-direction:column}.access-invite-actions .btn{width:100%}
}

/* ==========================================================================
   CLIENT MOBILE — one calm reading surface for iPhone-class viewports.
   Admin workspace rules above are intentionally not reused here.
   ========================================================================== */
.login-provider-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.login-provider-row .login-provider{min-width:0;min-height:44px}
.chart-data-disclosure{margin-top:12px;border-top:1px solid var(--line)}
.chart-data-disclosure>summary{min-height:44px;display:flex;align-items:center;color:var(--brand-accent);font-size:.84rem;font-weight:750;cursor:pointer}
.chart-data-table{width:100%;margin-top:4px}
.trend-insight{max-width:68ch;margin:14px 0 12px;padding:14px 16px;border-left:3px solid var(--brand-accent);
  background:var(--ever-soft);color:var(--text);font-size:.95rem;line-height:1.5}
.trend-range{display:inline-flex;gap:4px;padding:4px;border:1px solid var(--line);background:var(--surface)}
.trend-range button{min-width:48px;min-height:44px;padding:0 12px;border:0;background:transparent;color:var(--text-muted);font-weight:750}
.trend-range button[aria-pressed="true"]{background:var(--ever-soft);color:var(--brand-accent)}

.client-more-dialog{position:fixed;inset:0;z-index:230;display:grid;place-items:end center;padding:16px}
.client-more-scrim{position:absolute;inset:0;width:100%;height:100%;border:0;background:color-mix(in srgb,var(--brand-primary) 48%,transparent)}
.client-more-sheet{position:relative;width:min(430px,100%);padding:20px;border:1px solid var(--line);border-radius:24px 24px 12px 12px;
  background:var(--surface);box-shadow:var(--shadow-float)}
.client-more-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}
.client-more-head span{display:block;color:var(--brand-accent);font-size:.8rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase}
.client-more-head h2{margin-top:3px;font-size:1.25rem}
.client-more-head button{width:44px;height:44px;border:1px solid var(--line);border-radius:var(--r-14);background:var(--surface);color:var(--text);font-size:1.35rem}
.client-more-actions{display:grid;gap:8px}
.client-more-actions button{min-height:52px;padding:0 14px;border:1px solid var(--line);background:var(--surface-alt);color:var(--text);text-align:left;font-size:1rem;font-weight:700}

/* .pending-page / .pending-hero / .pending-independent-context / .pending-batches / .pending-back / .pending-transaction / .pending-needs / .pending-answer-form / .pending-approval-check / .pending-answered / .pending-card-claim / .pending-card-conflict / .pending-loading moved into the consolidated pending block near the top of this file — DUN-2866. */

/* Receipt Drive is deliberately part of the review workspace: uploads made
   through this surface receive the duplicate preflight that drive.google.com
   itself cannot provide. */
.receipt-drive-card{position:relative;margin:0 0 24px;padding:24px;border:1px solid var(--line);border-left:5px solid var(--brand-accent);background:var(--surface);box-shadow:var(--shadow)}
.receipt-drive-card.is-disconnected{border-left-color:var(--warning)}
.receipt-drive-card.is-loading{min-height:126px;background:linear-gradient(110deg,var(--surface),var(--surface-alt),var(--surface))}
.receipt-drive-card>span,.receipt-drive-head>div>span{color:var(--brand-accent);font-size:.7rem;font-weight:900;letter-spacing:.14em;text-transform:uppercase}
.receipt-drive-card>h2,.receipt-drive-head h2{margin:6px 0 5px;font-size:clamp(1.35rem,4vw,1.8rem);letter-spacing:-.025em}
.receipt-drive-card>p,.receipt-drive-head p{max-width:620px;margin:0;color:var(--text-muted);font-size:.9rem;line-height:1.5}
.receipt-drive-head{display:flex;align-items:flex-start;justify-content:space-between;gap:24px}
.receipt-drive-status{display:inline-flex;align-items:center;gap:8px;flex:0 0 auto;padding:7px 10px;border:1px solid var(--line);background:var(--surface-alt);color:var(--text-muted);font-size:.72rem;font-weight:850;letter-spacing:.05em;text-transform:uppercase}
.receipt-drive-status i{width:8px;height:8px;border-radius:var(--r-round);background:var(--warning);box-shadow:0 0 0 4px var(--warn-soft)}
.receipt-drive-card.is-connected .receipt-drive-status i{background:var(--positive);box-shadow:0 0 0 4px var(--pos-soft)}
.receipt-drive-actions{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:14px;margin-top:20px}
.receipt-drive-actions form{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px}
.receipt-drive-drop{display:grid;gap:5px;padding:12px 14px;border:1px dashed var(--line-2);background:var(--surface-alt);cursor:pointer}
.receipt-drive-drop>span{font-size:.82rem;font-weight:850}.receipt-drive-drop>small{color:var(--text-muted);font-size:.72rem}
.receipt-drive-drop input{width:100%;min-height:34px;padding:4px 0;color:var(--text);font-size:.82rem}
.receipt-drive-drop input::file-selector-button{min-height:32px;margin-right:10px;padding:0 10px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:750 .76rem var(--body);cursor:pointer}
.receipt-drive-actions .btn{min-height:48px}.receipt-drive-open{white-space:nowrap}
.receipt-drive-upload-status{min-height:20px;margin-top:9px;color:var(--text-muted);font-size:.78rem;font-weight:700}
.receipt-drive-files{margin-top:12px;border-top:1px solid var(--line)}
.receipt-drive-files summary{display:flex;align-items:center;min-height:44px;color:var(--brand-accent);font-size:.78rem;font-weight:850;cursor:pointer}
.receipt-drive-files ul{display:grid;margin:0;padding:0;list-style:none;border:1px solid var(--line)}
.receipt-drive-files li{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:50px;padding:8px 11px;border-bottom:1px solid var(--line);background:var(--surface-alt)}
.receipt-drive-files li:last-child{border-bottom:0}.receipt-drive-files li span{min-width:0}.receipt-drive-files strong,.receipt-drive-files small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.receipt-drive-files strong{font-size:.8rem}.receipt-drive-files small{margin-top:3px;color:var(--text-muted);font-size:.7rem}
.receipt-drive-files a{flex:0 0 auto;color:var(--brand-accent);font-size:.76rem;font-weight:850}.receipt-drive-error{margin:10px 0 0!important;color:var(--warning)!important;font-size:.76rem!important}

.receipt-duplicate-dialog{width:min(520px,calc(100% - 28px));padding:0;border:1px solid var(--line);border-top:5px solid var(--warning);background:var(--surface);color:var(--text);box-shadow:var(--shadow-float)}
.receipt-duplicate-dialog::backdrop{background:color-mix(in srgb,var(--brand-primary) 58%,transparent);backdrop-filter:blur(3px)}
.receipt-duplicate-dialog form{display:grid;gap:12px;padding:28px}
.receipt-duplicate-kicker{color:var(--warning);font-size:.7rem;font-weight:900;letter-spacing:.14em}
.receipt-duplicate-dialog h2{margin:0;font-size:1.55rem;letter-spacing:-.025em}.receipt-duplicate-dialog h2:focus{outline:none}
.receipt-duplicate-dialog p{margin:0;color:var(--text-muted);font-size:.9rem;line-height:1.55}
.receipt-duplicate-file{display:grid;gap:4px;padding:13px 14px;border-left:3px solid var(--warning);background:var(--warn-soft)}
.receipt-duplicate-file strong{overflow-wrap:anywhere}.receipt-duplicate-file small{color:var(--text-muted);font-size:.76rem}
.receipt-duplicate-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:6px}

/* S9 (DUN-2774): the in-product report modal, built at runtime by
   web/bug-report.js. Same shell as .receipt-duplicate-dialog above, one size
   up, because this one is a form and has to scroll.
   margin:auto is not decoration: the universal reset at the top of this file
   (`*{margin:0}`) wipes the UA stylesheet's own margin:auto on <dialog>,
   which is what centers a modal in its containing block. DUN-2438 already
   shipped one off-center dialog that way. The `dialog{margin:auto}` rule
   restores it globally; repeating it here keeps the centering attached to
   this component even if that global rule is ever narrowed. */
.bug-report-dialog{width:min(640px,calc(100% - 28px));max-height:min(90vh,900px);margin:auto;overflow:auto;padding:0;
  border:1px solid var(--line);border-top:5px solid var(--warning);background:var(--surface);color:var(--text);box-shadow:var(--shadow-float)}
.bug-report-dialog::backdrop{background:color-mix(in srgb,var(--brand-primary) 58%,transparent);backdrop-filter:blur(3px)}
.bug-report-fieldset{border:0;padding:0;margin:0;min-width:0}
.bug-report-fieldset[disabled]{opacity:.6}
.bug-report-head{position:sticky;top:0;z-index:2;display:grid;gap:5px;padding:22px 26px 16px;
  border-bottom:1px solid var(--line);background:var(--warn-soft)}
.bug-report-kicker{color:var(--warning);font-size:.7rem;font-weight:900;letter-spacing:.14em}
.bug-report-dialog h2{margin:0;font-size:1.4rem;letter-spacing:-.025em}
.bug-report-dialog h2:focus{outline:none}
.bug-report-head p{margin:0;color:var(--text-muted);font-size:.84rem;line-height:1.5}
.bug-report-body{display:grid;gap:14px;padding:20px 26px}
.bug-report-field{display:grid;gap:5px}
.bug-report-field label,.bug-report-label{color:var(--text);font-size:.8rem;font-weight:750}
.bug-report-optional{color:var(--text-muted);font-size:.72rem;font-weight:600}
.bug-report-req{color:var(--warning)}
.bug-report-field input[type=text],.bug-report-field textarea,.bug-report-field select{
  width:100%;padding:9px 11px;border:1px solid var(--line-2);border-radius:var(--r-9);background:var(--surface);
  color:var(--text);font:inherit;font-size:.86rem}
.bug-report-field textarea{resize:vertical;line-height:1.5}
.bug-report-counter{justify-self:end;color:var(--text-muted);font-size:.72rem;font-variant-numeric:tabular-nums}
.bug-report-hint{margin:0;color:var(--text-muted);font-size:.76rem;line-height:1.45}
.bug-report-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 13px;
  border-left:3px solid var(--warning);background:var(--warn-soft)}
.bug-report-banner strong{display:block;font-size:.82rem}
.bug-report-banner small{display:block;margin-top:3px;color:var(--text-muted);font-size:.74rem;line-height:1.45}
.bug-report-drop{display:grid;justify-items:start;gap:9px;padding:14px;border:1px dashed var(--line-2);border-radius:11px;
  background:var(--surface-alt)}
.bug-report-drop.is-over{border-color:var(--brand-accent);background:var(--ever-soft)}
.bug-report-drop p{margin:0;color:var(--text-muted);font-size:.78rem}
.bug-report-shot-preview{display:grid;justify-items:start;gap:6px}
.bug-report-shot-preview img{max-width:100%;max-height:210px;border:1px solid var(--line);border-radius:var(--r-8)}
.bug-report-shot-preview span{color:var(--text-muted);font-size:.74rem;overflow-wrap:anywhere}
.bug-report-files{display:grid;gap:6px;margin:0;padding:0;list-style:none}
.bug-report-files li{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:40px;
  padding:6px 11px;border:1px solid var(--line);background:var(--surface-alt);font-size:.78rem}
.bug-report-files li span{min-width:0;overflow-wrap:anywhere}
.bug-report-remove{flex:0 0 auto;border:0;background:none;color:var(--negative);font-size:.75rem;font-weight:800}
.bug-report-check{display:flex;align-items:flex-start;gap:9px;padding:11px 13px;border:1px solid var(--line);
  border-radius:10px;background:var(--surface-alt)}
.bug-report-check strong{display:block;font-size:.8rem}
.bug-report-check small{display:block;margin-top:3px;color:var(--text-muted);font-size:.73rem;line-height:1.45}
.bug-report-error{margin:0;padding:10px 12px;border-left:3px solid var(--negative);background:var(--neg-soft);
  color:var(--negative);font-size:.8rem;line-height:1.45}
.bug-report-actions{position:sticky;bottom:0;display:flex;justify-content:flex-end;gap:8px;padding:14px 26px;
  border-top:1px solid var(--line);background:var(--surface)}
.bug-report-success{display:grid;gap:10px;padding:30px 26px 20px;text-align:center;justify-items:center}
.bug-report-success p{margin:0;color:var(--text-muted);font-size:.86rem;line-height:1.55}
.bug-report-protocol-label{font-size:.72rem;font-weight:850;letter-spacing:.12em;text-transform:uppercase}
.bug-report-protocol{padding:10px 20px;border:1px solid var(--warning);background:var(--warn-soft);
  color:var(--text)!important;font-size:1.6rem!important;font-weight:900;letter-spacing:.04em}
.bug-report-success .bug-report-actions{position:static;justify-content:center;border-top:0;background:none;padding:6px 0 0}

@media(max-width:480px){
  .bug-report-head{padding:18px 16px 13px}
  .bug-report-body{padding:16px}
  .bug-report-actions{padding:12px 16px;display:grid}
  .bug-report-actions .btn{width:100%}
  .bug-report-banner{display:grid}
}

@media(max-width:480px){
  #login-screen{align-items:flex-start;padding:calc(12px + env(safe-area-inset-top)) 16px calc(16px + env(safe-area-inset-bottom))}
  .login-shell{gap:0}
  .login-intro{display:none}
  .login-card{padding:24px 20px;border-radius:22px}
  .login-card-lockup{display:block;width:160px;max-width:62%}
  .login-card-identity{display:none}
  .login-card h1{font-size:1.2rem}
  .login-card input,.login-magiclink,.login-submit{min-height:48px;font-size:1rem}
  .login-provider-row .login-provider{font-size:.86rem}
}

@media(max-width:820px){
  .client-shell .sidebar{min-height:56px;height:56px;padding:8px 16px 8px max(16px,env(safe-area-inset-left))}
  .client-shell .sidebar .brand{height:40px;max-width:calc(100% - 116px);gap:10px}
  .client-shell .sidebar .dunamis-shell-icon{width:36px;height:36px}
  .client-shell .sidebar .client-company-context{display:grid;gap:1px;overflow:hidden;line-height:1.1}
  .client-shell .sidebar .client-company-context small{overflow:hidden;color:var(--text-muted);font-size:.56rem;font-weight:750;
    letter-spacing:.1em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}
  .client-shell .sidebar .client-company-context strong{overflow:hidden;color:var(--text);font-size:.78rem;font-weight:800;
    letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap}
  .client-shell .side-foot{display:none}
  .client-shell .main-col>.topbar{position:fixed;top:0;right:max(10px,env(safe-area-inset-right));z-index:65;width:auto;min-height:56px;
    padding:8px 0;background:transparent;border:0}
  .client-shell .main-col>.topbar .page-head,
  .client-shell .main-col>.topbar .top-right>*:not(.mobile-lang){display:none!important}
  .client-shell .main-col>.topbar .top-right{width:auto}
  .client-shell .main-col>.topbar .mobile-lang{display:flex}
  .client-shell .main-col>.topbar .mobile-lang button{min-width:44px;min-height:40px;padding:0 8px}
  .client-shell .sidebar .views{position:fixed;left:max(10px,env(safe-area-inset-left));right:max(10px,env(safe-area-inset-right));bottom:max(10px,env(safe-area-inset-bottom));
    z-index:130;display:flex;width:auto;height:68px;margin:0;padding:6px;transform:none;background:var(--glass-bg);border:1px solid var(--glass-border);
    border-radius:22px;box-shadow:var(--shadow-float);backdrop-filter:blur(26px) saturate(150%);-webkit-backdrop-filter:blur(26px) saturate(150%)}
  .client-shell .sidebar .views button{flex:1;min-width:0;width:auto;height:54px;padding:4px;justify-content:center;align-items:center;flex-direction:column;
    gap:2px;border-radius:17px;font-size:.75rem;font-weight:700}
  .client-shell .sidebar .views button.on{background:var(--ever-soft);color:var(--brand-accent)}
  .client-shell .sidebar .views button{position:relative}
  .client-shell .sidebar .views button.on::before{content:"";position:absolute;top:-6px;left:50%;width:24px;height:3px;
    border-radius:0 0 4px 4px;background:var(--brand-accent);transform:translateX(-50%)}
  /* M31: the tab bar centres its icon over its label, so the count is
     absolutely positioned on the icon's corner rather than added to that
     column. The ring separates it from the icon stroke on the glass bar. */
  .client-shell .sidebar .views .nav-badge{position:absolute;top:3px;left:calc(50% + 7px);margin-left:0;
    min-width:18px;height:18px;padding:0 5px;font-size:10px;box-shadow:0 0 0 2px var(--glass-bg)}
  .client-shell .sidebar .views .client-nav-icon,
  .client-shell .sidebar .views .client-nav-icon svg{width:22px;height:22px}
  .client-shell .sidebar .views .client-nav-icon svg{stroke-width:1.65}
  .client-shell .main-col>.ctxbar{position:sticky;top:0;z-index:55;padding:8px 16px;background:var(--surface-page);border-bottom:0}
  .client-shell .ctxbar{width:100%;height:auto;min-height:64px;margin:0;border-radius:0}
  .client-shell .mobile-context{height:48px;border:1px solid var(--line);border-radius:var(--r-14)}
  .client-shell .mobile-context strong{font-size:.95rem}
  .client-shell .mobile-context small{font-size:.82rem}
  /* Keep the period sheet above the persistent client tab bar. Previously
     bottom:0 placed its first period option underneath that bar, leaving the
     user with what looked like a scrim-only, unresponsive screen. */
  .client-shell .lens-controls{left:max(10px,env(safe-area-inset-left));right:max(10px,env(safe-area-inset-right));
    bottom:calc(88px + env(safe-area-inset-bottom));
    max-height:min(74dvh,680px,calc(100dvh - 164px - env(safe-area-inset-bottom)));gap:14px;
    padding:12px 16px 18px;border:1px solid var(--line-strong);border-radius:24px;
    overflow-y:auto;overscroll-behavior:contain;scroll-padding-bottom:12px;isolation:isolate}
  .client-shell .lens-controls::before{content:"";width:42px;height:4px;margin:0 auto 2px;border-radius:99px;background:var(--line-strong)}
  /* The chooser is a clear floating control, not a blocking takeover. Keep
     the invisible click target for outside-click dismissal while preserving
     the report's real color and contrast underneath it. */
  .client-shell .context-scrim{background:transparent}
  .client-shell .ctxbar.mobile-open .mobile-context{border-color:var(--brand-accent);
    box-shadow:0 0 0 3px color-mix(in srgb,var(--brand-accent) 16%,transparent)}
  .client-shell .mobile-context-head strong{font-size:1.2rem}
  .client-shell .mobile-context-head span{font-size:.72rem}
  .client-shell .lens-controls .co-select,
  .client-shell .lens-controls .search-trigger{display:none}
  .client-shell .search-panel{display:none!important}
  .client-shell .lens-controls #seg-pt{min-height:52px;padding:4px;border-radius:16px}
  .client-shell .lens-controls #seg-pt button{min-height:44px;border-radius:var(--r-12);font-size:.88rem}
  .client-shell .period-picker{display:none}
  .client-shell .mobile-period-list{display:grid;gap:8px;overflow:visible}
  .client-shell .mobile-period-option{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:68px;padding:11px 14px;
    border:1px solid var(--line);border-radius:15px;background:var(--surface);color:var(--text);text-align:left}
  .client-shell .mobile-period-option span,.client-shell .mobile-period-option strong,.client-shell .mobile-period-option small{display:block;min-width:0}
  .client-shell .mobile-period-option strong{font-size:1rem}
  .client-shell .mobile-period-option small{margin-top:3px;color:var(--text-muted);font-size:.82rem}
  .client-shell .mobile-period-option i{display:grid;place-items:center;flex:0 0 auto;width:28px;height:28px;margin-left:12px;
    border:1px solid var(--line);border-radius:var(--r-round);color:transparent;font-style:normal;font-weight:850}
  .client-shell .mobile-period-option.on{border-color:var(--brand-accent);background:var(--ever-soft);
    box-shadow:inset 4px 0 var(--brand-accent)}
  .client-shell .mobile-period-option.on i{border-color:var(--brand-accent);background:var(--brand-accent);color:var(--surface)}
  .client-shell .main-col>.wrap{padding:12px 16px calc(104px + env(safe-area-inset-bottom))}
  .client-shell #toasts{bottom:calc(90px + env(safe-area-inset-bottom))}
  .client-shell #btn-inspector{bottom:calc(92px + env(safe-area-inset-bottom))}
  .client-shell .kpi-grid,.client-shell .baseline-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 18px}
  .client-shell .kpi .lbl{min-height:38px;font-size:.82rem;letter-spacing:.08em}
  .client-shell .kpi .val{font-size:clamp(1.45rem,7vw,1.9rem)}
  .client-shell .kpi .note,.client-shell .delta{font-size:.82rem}
  .client-shell .hero .meta,.client-shell .ov-meta,.client-shell .ov-detail-hint{font-size:.85rem}
  .client-shell .panel,.client-shell .report-chapter{max-width:100%;overflow:hidden}
  .client-shell .sec-head h2{font-size:1.3rem}
  .client-shell .panel h3{font-size:1.12rem;line-height:1.3}
  .client-shell .panel .psub{font-size:.96rem;line-height:1.5}
  .client-shell .panel:has(.mobile-comparison-chart),
  .client-shell .panel:has(.mobile-bridge),
  .client-shell .panel:has(.mobile-trend-chart),
  .client-shell .panel:has(.mobile-money-flow){padding:18px 16px;overflow:visible}
  .client-shell .mobile-card-table,.client-shell .mobile-card-table tbody,.client-shell .mobile-card-table tr,.client-shell .mobile-card-table td{display:block;width:100%;min-width:0!important}
  .client-shell .mobile-card-table thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .client-shell .mobile-card-table tbody{display:grid;gap:10px}
  .client-shell .mobile-card-table tr{padding:12px;border:1px solid var(--line);background:var(--surface-alt)}
  .client-shell .mobile-card-table td{display:grid;grid-template-columns:minmax(110px,.8fr) minmax(0,1.2fr);gap:12px;padding:7px 0;border:0;
    text-align:right!important;font-size:.92rem;overflow-wrap:anywhere}
  .client-shell .mobile-card-table td::before{content:attr(data-label);color:var(--text-muted);font-weight:700;text-align:left}
  .client-shell .mobile-card-table td:first-child{font-weight:750}
  .client-shell .chart-data-table{min-width:0!important}
  .client-shell svg.chart [data-tt]{outline:none}
  .client-shell svg.chart [data-tt]:focus{filter:drop-shadow(0 0 4px var(--focus))}
  .client-shell .chart-data-disclosure>summary{font-size:.9rem}
  .client-more-dialog{padding:12px max(12px,env(safe-area-inset-right)) calc(12px + env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left))}
  .receipt-drive-head,.receipt-drive-actions{align-items:stretch;grid-template-columns:1fr}.receipt-drive-head{display:grid}.receipt-drive-status{justify-self:start}
  .receipt-drive-actions form{grid-template-columns:1fr}.receipt-drive-actions .btn{width:100%}
  /* .pending-independent-context / .pending-batches article / .pending-batches
     .btn / .pending-transaction / .pending-answer-form fieldset (+ label)
     moved into the consolidated pending block's own 820px cut — DUN-2866. */
}

@media(max-width:480px){
  .receipt-drive-card{margin-inline:-4px;padding:20px 16px}.receipt-drive-head{gap:12px}.receipt-drive-actions{margin-top:16px}
  .receipt-drive-files li{align-items:flex-start}.receipt-duplicate-dialog form{padding:22px 18px}.receipt-duplicate-actions{display:grid}.receipt-duplicate-actions .btn{width:100%}
}

@media(max-width:340px){
  .client-shell .kpi-grid,.client-shell .baseline-grid{grid-template-columns:1fr}
  /* .pending-answer-form fieldset's 1-column rule is now redundant here: the
     consolidated pending block's own 600px cut already forces 1 column for
     every width this query covers — DUN-2866. */
}

/* ==========================================================================
   PRINT MEMORANDUM — final authoritative layer
   Letter's print canvas is close to the mobile breakpoint, so every mobile
   table/card transformation is explicitly reset here. The report is allowed
   to paginate naturally; only genuinely atomic evidence stays together.
   ========================================================================== */
.print-stationery,.print-personal-finance{display:none}
@media print{
  @page{
    size:Letter portrait;
    /* Reserve a full footer band in the physical sheet. The fixed contact
       links do not participate in document flow, so the previous .82in
       margin still allowed a late chart/card to paint through that band. */
    margin:.74in .48in 1.08in;
    @top-center{
      content:"DUNAMIS · CONFIDENTIAL MANAGEMENT REPORT";
      width:100%;
      padding-bottom:6px;
      border-bottom:1px solid var(--line-2);
      color:var(--text-muted);
      font:650 6.8pt/1.2 Arial,sans-serif;
      letter-spacing:.08em;
      text-align:center;
    }
    @bottom-center{
      content:"";
      width:100%;
    }
    @bottom-right{
      content:counter(page);
      color:var(--text-muted);
      font:650 6.8pt/1.2 Arial,sans-serif;
      letter-spacing:.04em;
    }
  }

  html{font-size:10pt!important}
  body,#scroller,.main-col,#main{height:auto!important;min-height:0!important;overflow:visible!important}
  body{font-size:10pt;line-height:1.42}
  #main{position:relative}
  #main,#main *{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}

  /* A real image is used instead of a CSS background so the stationery is
     present even when Chromium's "Background graphics" option is disabled. */
  .print-stationery{display:block!important}
  .print-watermark{position:fixed;right:.18in;bottom:.28in;z-index:-1;width:3.05in;height:auto;opacity:.028}
  /* Fixed stationery repeats on every printed sheet. The enlarged @page
     margin above is the content safety zone; the footer itself remains close
     to the physical bottom edge, below its separating rule. */
  .print-link-footer{position:fixed;left:.48in;right:.48in;bottom:.17in;z-index:5;display:flex;
    align-items:center;justify-content:center;gap:7px;padding-top:6px;border-top:1px solid var(--line-2);
    color:var(--text-muted);
    font:650 7pt/1.2 Arial,sans-serif;letter-spacing:.025em}
  .print-link-footer a{color:inherit!important;text-decoration:underline!important;
    text-decoration-thickness:.5pt!important;text-underline-offset:2px}

  /* Leave a deterministic safety area inside Letter's printable box so the
     branded cover footer cannot be orphaned onto a second sheet. */
  .print-cover{height:9.12in!important;max-height:9.12in!important}
  .print-cover .pc-center{padding:16px 0!important}
  .print-cover .pc-foot{margin-bottom:.24in}

  /* Page two is a deliberate owner-finance brief. It answers the personal
     spending question before the operational chapters and closes with the
     related Financial Plan guardrail. */
  .print-personal-finance{display:flex!important;flex-direction:column;box-sizing:border-box;
    height:9.08in;max-height:9.08in;padding-bottom:.14in;break-after:page;page-break-after:always}
  .print-personal-head{margin-bottom:.16in;padding-bottom:.13in;border-bottom:2px solid var(--brand-accent)}
  .print-personal-head>span,.print-plan-context>div:first-child>span{color:var(--brand-accent);
    font:800 7pt/1.2 var(--body);letter-spacing:.16em;text-transform:uppercase}
  .print-personal-head h1{margin:.06in 0 .04in;font:700 20pt/1.06 var(--display);letter-spacing:-.025em}
  .print-personal-head p{max-width:70ch;margin:0;color:var(--text-muted);font-size:8.4pt;line-height:1.4}
  .print-personal-finance .owner-impact{display:block!important;margin:0!important;padding:.16in .18in!important;
    break-inside:avoid-page!important;page-break-inside:avoid!important}
  .print-personal-finance .owner-impact-head{margin-bottom:9px}
  .print-personal-finance .owner-limit{margin:5px 0 9px}
  .print-personal-finance .owner-equation{padding:8px 0}
  .print-personal-finance .owner-top{margin-top:9px;padding:8px 10px}
  .print-personal-finance .owner-allocation{margin-top:9px}
  .print-personal-finance .owner-account{margin-top:5px}
  .print-personal-finance .owner-note{margin-top:8px;padding-top:7px}
  .print-plan-context{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 18px;margin-top:auto;
    padding:.14in .17in;border:1px solid var(--line);border-top:3px solid var(--brand-accent);background:var(--surface-alt);
    break-inside:avoid-page;page-break-inside:avoid}
  .print-plan-context h2{margin:3px 0 0;font:700 13pt/1.1 var(--display)}
  .print-plan-status{display:grid;align-content:start;justify-items:end;gap:2px;text-align:right}
  .print-plan-status strong{color:var(--brand-accent);font-size:7.5pt;text-transform:uppercase;letter-spacing:.06em}
  .print-plan-status small{color:var(--text-muted);font-size:7pt}
  .print-plan-context>p{grid-column:1/-1;margin:3px 0 0;color:var(--ink-2);font-size:8pt;line-height:1.4}
  .overview .owner-impact,.financial-plan{display:none!important}

  /* Preserve the four-part reading architecture on paper. */
  .report-chapter{display:block!important;margin:0!important;border:0!important;background:transparent!important;
    overflow:visible!important;break-before:page;page-break-before:always}
  .report-chapter>summary{display:grid!important;grid-template-columns:auto 1fr!important;gap:10px!important;
    min-height:0!important;margin:0 0 .16in!important;padding:0 0 .1in!important;border-bottom:2px solid var(--brand-accent)!important;
    list-style:none!important;break-after:avoid-page;page-break-after:avoid}
  .report-chapter>summary .chapter-index{display:grid!important;place-items:center;width:24px;height:24px}
  .report-chapter>summary .chapter-copy{font-size:13pt;line-height:1.15}
  .report-chapter>summary .chapter-copy small{display:block;margin-top:2px;color:var(--text-muted);font:500 7.5pt/1.3 var(--body)}
  .report-chapter>summary .chapter-chevron{display:none!important}
  .report-chapter>.chapter-body{display:block!important;padding:0!important}

  /* Natural pagination eliminates the heading-only and mostly blank sheets. */
  .section{display:block!important;margin:0 0 .16in!important;break-inside:auto!important;page-break-inside:auto!important}
  .sec-head{margin:0 0 .08in!important;gap:8px!important;break-after:avoid-page;page-break-after:avoid}
  .sec-head h2{font-size:11.5pt!important;line-height:1.15!important}
  .sec-head .n{font-size:6.8pt!important}
  .panel{padding:.13in .15in!important;margin:0 0 .1in!important;overflow:visible!important;
    box-shadow:none!important;break-inside:auto!important;page-break-inside:auto!important}
  .callout{margin:.08in 0!important;padding:8px 11px!important;font-size:8.6pt!important;line-height:1.42!important;
    break-inside:avoid-page!important;page-break-inside:avoid!important}
  .fixed-policy-note{display:grid!important;grid-template-columns:minmax(0,1fr) auto!important;
    gap:8px 18px!important;padding:12px 14px!important;border-left-width:5px!important;
    font-size:9pt!important}
  .fixed-policy-note h3{font-size:11pt!important}
  .fixed-policy-note .fixed-policy-accounts{grid-template-columns:repeat(3,minmax(0,1fr))!important}
  .fixed-policy-note .fixed-policy-total{font-size:15pt!important}
  .footnote,.psub{font-size:7.2pt!important;line-height:1.38!important}

  /* Undo responsive stacking/cards triggered by the Letter-width canvas. */
  .grid-2{display:grid!important;grid-template-columns:1fr 1fr!important;gap:.1in!important}
  .kpi-grid,.baseline-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:.11in .2in!important}
  /* Performance scorecard: print it as a compact executive ledger, not as a
     narrow summary rail beside six full-width rows.  The old 1.05in rail
     forced words such as "favorable" to break one syllable per line and made
     section 03 consume almost an entire sheet.  A horizontal health strip
     followed by a 2 x 3 metric ledger preserves hierarchy and leaves room for
     the short data-quality section that follows it. */
  #kpitable{margin-bottom:.12in!important}
  #kpitable>.sec-head{margin-bottom:.07in!important}
  .kpit-panel{padding:.1in .12in!important;border:1px solid var(--line)!important;
    break-inside:avoid-page!important;page-break-inside:avoid!important}
  .kpit-grid{display:block!important}
  .kpit-gauge{display:grid!important;
    grid-template-columns:minmax(1.75in,auto) minmax(1.5in,1fr) auto auto!important;
    align-items:center!important;gap:.08in .14in!important;margin:0 0 .08in!important;
    padding:0 0 .08in!important;border-bottom:1px solid var(--line-2)!important}
  .kpit-gauge-copy{display:flex!important;align-items:baseline!important;gap:.08in!important;min-width:0}
  .kpit-gauge-copy .xsum-label{margin:0!important;font-size:6.4pt!important;white-space:nowrap}
  .kpit-gauge-copy strong{font-size:7.6pt!important;line-height:1.2!important;white-space:nowrap}
  .kpit-meter{height:6px!important;border-radius:0!important}
  .kpit-percent{font-size:10pt!important;white-space:nowrap}
  .kpit-watch{font-size:6.8pt!important;white-space:nowrap}
  .kpit-ledger{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;
    border-top:0!important;border-left:1px solid var(--line)!important}
  .kpit-columns{display:none!important}
  .kpit-item{display:grid!important;grid-template-columns:minmax(0,1fr) auto!important;
    grid-template-rows:auto auto!important;align-items:center!important;gap:3px .1in!important;
    min-height:.66in!important;padding:.07in .09in .065in .13in!important;
    border-right:1px solid var(--line)!important;border-bottom:1px solid var(--line)!important;
    background:var(--surface)!important;break-inside:avoid!important;page-break-inside:avoid!important}
  .kpit-item::before{left:.065in!important;top:.085in!important;width:2px!important;height:.22in!important}
  .kpit-item header{display:contents!important}
  .kpit-item h3{grid-column:1!important;grid-row:1!important;font-size:8.3pt!important;line-height:1.15!important}
  .kpit-status{grid-column:2!important;grid-row:1!important;gap:4px!important;
    font-size:6.5pt!important;white-space:nowrap}
  .kpit-status .stat-sq{width:15px!important;height:15px!important;font-size:6.5pt!important}
  .kpit-value{grid-column:1!important;grid-row:2!important;font-size:15pt!important;line-height:1!important}
  .kpit-item footer{grid-column:2!important;grid-row:2!important;display:grid!important;
    justify-items:end!important;gap:1px!important;text-align:right!important;font-size:6.2pt!important}
  .kpit-item footer>span:first-child{font-size:5.9pt!important;white-space:nowrap}
  .kpit-item footer .pos,.kpit-item footer .neg,.kpit-item footer .neutral{
    font-size:7.4pt!important;white-space:nowrap}
  .kpit-panel>.footnote{margin:.065in 0 0!important;font-size:6.3pt!important;line-height:1.25!important}
  .xsum{gap:.1in!important}
  .xsum-row{break-inside:avoid-page;page-break-inside:avoid}

  table,.client-shell .mobile-card-table{display:table!important;width:100%!important;min-width:0!important;
    border-collapse:collapse!important;font-size:7.7pt!important}
  thead,.client-shell .mobile-card-table thead{display:table-header-group!important;position:static!important;
    width:auto!important;height:auto!important;overflow:visible!important;clip:auto!important}
  tbody,.client-shell .mobile-card-table tbody{display:table-row-group!important}
  tr,.client-shell .mobile-card-table tr{display:table-row!important;width:auto!important;padding:0!important;
    border:0!important;background:transparent!important;break-inside:avoid-page;page-break-inside:avoid}
  th,.client-shell .mobile-card-table th{display:table-cell!important;padding:4px 6px!important}
  td,.client-shell .mobile-card-table td{display:table-cell!important;width:auto!important;min-width:0!important;
    padding:4px 6px!important;border-bottom:1px solid var(--line)!important;text-align:inherit!important;
    font-size:7.7pt!important;overflow:visible!important}
  th.num,td.num,.client-shell .mobile-card-table td.num{text-align:right!important}
  .client-shell .mobile-card-table td::before{display:none!important;content:none!important}
  table.jargon{display:table!important;width:100%!important}
  table.jargon tbody{display:table-row-group!important;width:auto!important}
  table.jargon tr{display:table-row!important;width:auto!important;padding:0!important;border:0!important}
  table.jargon td{display:table-cell!important;width:auto!important;min-width:0!important;padding:4px 6px!important;
    white-space:normal!important;overflow-wrap:normal!important;word-break:normal!important}
  table.jargon td:first-child{width:1.55in!important;margin:0!important}

  /* Charts are the primary print evidence; accessible fallback tables remain
     available on screen but are not duplicated underneath every chart. */
  svg.chart{display:block!important;width:100%!important;height:auto!important;max-height:3.15in!important;
    min-width:0!important;overflow:visible!important;break-inside:avoid-page}
  .panel:has(svg.chart){break-inside:avoid-page!important;page-break-inside:avoid!important}
  /* The profitability comparison and each aging evidence card are compact
     enough to fit on one sheet.  Treat the individual cards—not the entire
     section—as atomic, preventing an orphaned title or final row while still
     letting sections 06/12 paginate without a mostly empty page. */
  #s6>.panel,#ar>.panel,#ap>.panel{
    break-inside:avoid-page!important;page-break-inside:avoid!important}
  /* The calculation basis immediately above already contains the complete
     fixed-cost methodology. Repeating the shorter companion note in print
     can strand one line on an otherwise empty page before the next chapter. */
  #breakeven>.footnote:last-child{display:none!important}
  .sr-only-table,.chart-data-disclosure{display:none!important}
  .legend{margin-top:5px!important;gap:9px!important;font-size:7pt!important}
  .chart-comparison{margin:6px 0!important;break-inside:avoid-page}
  .chart-comparison-grid{grid-template-columns:repeat(auto-fit,minmax(105px,1fr))!important}
  .chart-comparison-item{padding:6px 7px!important;border-top:0!important}

  /* CSS-drawn evidence must survive printing with browser backgrounds off. */
  .bar-row{grid-template-columns:minmax(115px,1.3fr) 1fr auto auto!important;gap:8px!important;
    padding:3px 0!important;break-inside:avoid-page;page-break-inside:avoid}
  .bar-row .bar-track{grid-column:auto!important;grid-row:auto!important}
  .bar-track{height:7px!important;background:var(--line)!important}
  .bar-fill{background:var(--chart-1)!important}
  .aging-old .bar-fill{background:var(--negative)!important}
  .be-bar{height:12px!important;background:var(--neg-soft)!important}
  .be-safe{background:var(--pos-soft)!important}

  .kpi,.decision-card,.single-period-metric,.be-tiles,.service-group{
    break-inside:avoid-page!important;page-break-inside:avoid!important}
  .kpi{padding:0 0 5px!important}
  .kpi .lbl{margin-bottom:6px!important;padding-bottom:4px!important;font-size:6.8pt!important}
  .kpi .val{font-size:17pt!important}
  .single-period-metric{min-height:0!important;margin-top:6px!important;padding:14px!important}

  .print-disclaimer{font-size:8pt}
  .print-disclaimer li{font-size:7.5pt!important;line-height:1.4!important}

  /* Trends uses the same stationery contract as the executive report, but
     its historical charts benefit from a compact two-column memorandum.
     Four legible charts and their exact-value table replace a long browser
     screenshot while preserving the screen reading order. */
  .trends-document{display:block!important;overflow:visible!important}
  .trends-document>.hero{margin:0 0 .16in!important;padding:0 0 .14in!important;
    border-bottom:2px solid var(--brand-accent);break-inside:avoid-page;page-break-inside:avoid}
  .trends-document>.hero h1{margin:3px 0 2px!important;font:700 22pt/1.05 var(--display)!important;
    letter-spacing:-.025em}
  .trends-document>.hero .meta{font-size:8pt!important}
  .trends-document .trend-insight{margin:.1in 0!important;padding:.1in .12in!important;
    border-left:3px solid var(--brand-accent);background:var(--surface-alt);
    font-size:8.4pt!important;line-height:1.4!important}
  .trends-document .trend-range{display:none!important}
  .trends-document .kpi-grid,.trends-document .baseline-grid{
    grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:.11in .18in!important;margin-top:.12in!important}
  .trends-document .kpi .val{font-size:14pt!important;white-space:nowrap}
  .trends-document>.section{display:grid!important;grid-template-columns:1fr 1fr!important;
    gap:.12in!important;margin:0!important}
  .trends-document>.section>.grid-2{display:contents!important}
  .trends-document>.section .panel{margin:0!important;padding:.12in .13in!important;
    border:1px solid var(--line)!important;break-inside:avoid-page!important;page-break-inside:avoid!important}
  .trends-document>.section .panel h3{margin:0 0 4px!important;font:700 10.5pt/1.2 var(--display)}
  .trends-document svg.chart{max-height:2.25in!important}
  .trends-document .trends-data-panel{grid-column:1/-1!important;margin-top:.02in!important}
  .trends-document .trends-data-panel details>summary{display:none!important}
  .trends-document .trends-data-panel details>table{display:table!important;margin:0!important}
  .trends-document .unlock-card{break-inside:avoid-page;page-break-inside:avoid}
}

/* DUN-3123 (UIX-5): spacing utilities extracted from inline margin styles
 * in app.js and admin/publish.js. Kept minimal on purpose; add more only
 * when another inline margin pattern needs one. */
.mb-3{margin-bottom:3px}
.mb-4{margin-bottom:4px}
.mb-8{margin-bottom:8px}
.mb-10{margin-bottom:10px}
.mb-12{margin-bottom:12px}
.mt-6{margin-top:6px}
.mt-10{margin-top:10px}
.mt-12{margin-top:12px}
.mt-16{margin-top:16px}
.m-0{margin:0}
.footnote-tight{margin-top:-4px;margin-bottom:8px}
.label-strong{font-size:.82rem;font-weight:600;margin-bottom:5px}

/* UIX-7 (DUN-3124): mobile polish. Reuses the file's established mobile
   floor (max-width:820px, see the html{font-size:16px} rule near the top)
   rather than inventing a new breakpoint. Placed as the last block in the
   file on purpose: the 16px form-control rule and the selector-specific
   overrides below only win the cascade because they are declared last among
   rules of equal specificity - moving this block earlier would silently
   stop fixing the sub-16px selectors it lists. */
@media(max-width:820px){
  /* iOS Safari zooms the viewport when a focused input/select/textarea has
     a computed font-size under 16px. This broad rule catches every default
     and inherited case (including the bare "select{...}" rules declared
     earlier in this file). */
  input,select,textarea{font-size:16px}

  /* The broad rule above cannot win against these selectors on its own -
     each one is more specific than a plain element selector, so the
     cascade would keep their smaller mobile font-size and trigger the iOS
     zoom. Re-declared here, verbatim, so each wins on specificity too. */
  .project-combobox-rename-input,
  .sidebar-client-input input,
  .pl-search,
  .login-card input,
  .period-select-wrap select,
  .search-row input,.search-row select,
  .adm-field input:not([type=checkbox]):not([type=radio]):not([type=file]),.adm-field select,
  .notes-box textarea,
  .email-block-field input,.email-block-field textarea,
  .co-select select,
  .wq-model-control select,
  .wq-controls select,
  .wq-autopilot-level select,
  .wq-card-model select,
  .permission-scope select,
  .receipt-drive-drop input{font-size:16px}

  /* Touch targets: raise primary action controls that dropped under 44px to
     stay compact in dense toolbars back up to the 44px floor. .btn itself
     is already 44px min-height everywhere (see the unconditional .btn rule
     earlier in this file), so only the controls that explicitly override it
     smaller, plus the plain (non-.btn) toolbar action buttons, need a fix
     here. Chips, filters, mode switches and icon-only micro controls are
     deliberately left alone - they are not primary actions. */
  .email-template-actions .btn,
  .communication-recipient-actions button{min-height:44px}

  /* Admin tables/boards that can outgrow a narrow viewport: contain the
     overflow inside the component instead of letting the page body scroll
     sideways, matching the .tracking-table-wrap pattern used elsewhere. */
  .wq-board{overflow-x:auto}
}

@media(min-width:761px){
  .confirmation-tracking-shell{display:block;min-width:0}
  .tracking-batch-rail{position:static;display:flex;align-items:stretch;overflow-x:auto;border-right:0;border-bottom:1px solid var(--line)}
  .tracking-batch-rail>header{flex:0 0 150px;grid-column:auto;border-right:1px solid var(--line)}
  .tracking-batch-choice{flex:0 0 225px;width:auto;border-right:1px solid var(--line);border-bottom:0}
  .tracking-batch-choice.on{box-shadow:inset 0 -4px 0 var(--brand-accent)}
  .tracking-table-wrap{max-height:calc(100vh - 275px);overflow:auto}
  .tracking-table-wrap table{min-width:1080px;table-layout:fixed}
  .tracking-table-wrap th{top:0}
}

/* The review column is an action rail: compact labels must never split into
   individual letters just because the ledger is narrower than its contents. */
.tracking-table-wrap table{min-width:1435px}.track-col-decision{width:138px}.track-col-receipts{width:116px}.track-col-vendor{min-width:170px}
.tracking-decision{min-width:138px}.tracking-decision .state-chip{display:inline-flex;align-items:center;white-space:nowrap;font-size:8px;letter-spacing:.06em}.tracking-decision .btn{min-width:112px;white-space:nowrap}
.tracking-receipt-open{width:100%;min-height:30px;padding:5px 7px;overflow:hidden;border:1px solid var(--line);background:var(--surface);color:var(--brand-accent);font:800 10px/1.1 var(--body);text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.tracking-receipt-open:hover{border-color:var(--brand-accent);background:var(--ever-soft)}
.tracking-receipt-viewer{width:min(960px,calc(100vw - 40px));max-width:none;height:min(82vh,760px);padding:0;border:1px solid var(--line);background:var(--surface);color:var(--text);box-shadow:0 24px 70px rgba(7,28,23,.28)}.tracking-receipt-viewer::backdrop{background:rgba(7,28,23,.52)}.tracking-receipt-viewer>header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:13px 16px;border-bottom:1px solid var(--line)}.tracking-receipt-viewer header>div{display:grid;gap:3px;min-width:0}.tracking-receipt-viewer header span{color:var(--text-muted);font-size:9px;font-weight:850;letter-spacing:.12em;text-transform:uppercase}.tracking-receipt-viewer header strong{overflow:hidden;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.tracking-receipt-frame{height:calc(100% - 67px);background:var(--surface-alt)}.tracking-receipt-frame iframe{display:block;width:100%;height:100%;border:0}
