:root {
  color-scheme: light dark;
  --paper:#f3efe6; --paper-raised:#fffdf7; --ink:#1e211c; --ink-muted:#68695f; --rule:#cbc7ba;
  --accent:#c84b31; --accent-strong:#8f2f1f; --accent-wash:#f4d8cd; --positive:#2f7356; --warning:#916317; --danger:#a4382c; --focus:#185f95;
  /* Deliberately not redefined per theme (unlike --danger above): a solid
     danger surface paired with light text needs one fixed pairing with
     proven contrast, not the text-on-page --danger value, which is tuned
     light in dark mode and drops an urgent toast's white-on-danger contrast
     to 2.58:1. */
  --danger-solid:#a4382c;
  --cat-food:#c96e43; --cat-home:#6f8665; --cat-transit:#587d91; --cat-health:#99709a; --cat-other:#9a8c69;
  --chart-muted:#aba795; --display:Fraunces,"Iowan Old Style",Baskerville,Georgia,serif; --body:"Avenir Next",Avenir,"Segoe UI",sans-serif; --data:"IBM Plex Mono","SFMono-Regular",Consolas,monospace;
  --row-height:48px; --nav-width:176px; --mast-height:108px;
}
html[data-theme="dark"] { color-scheme:dark; --paper:#171916; --paper-raised:#22241f; --ink:#f1ede2; --ink-muted:#aaa99f; --rule:#454740; --accent:#ef765a; --accent-strong:#ff9a82; --accent-wash:#4b2923; --positive:#73b58d; --warning:#e1ae58; --danger:#ed8174; --focus:#7dc4f4; --chart-muted:#55584e; }
html[data-theme="light"] { color-scheme:light; }
html[data-density="compact"] { --row-height:44px; }
@media (prefers-color-scheme:dark) { html[data-theme="system"] { color-scheme:dark; --paper:#171916; --paper-raised:#22241f; --ink:#f1ede2; --ink-muted:#aaa99f; --rule:#454740; --accent:#ef765a; --accent-strong:#ff9a82; --accent-wash:#4b2923; --positive:#73b58d; --warning:#e1ae58; --danger:#ed8174; --focus:#7dc4f4; --chart-muted:#55584e; } }
* { box-sizing:border-box; }
html { background:var(--paper); }
body { margin:0; min-width:320px; background:var(--paper); color:var(--ink); font:15px/1.45 var(--body); }
button,input,select { color:inherit; font:inherit; }
button { border:0; background:none; cursor:pointer; }
button:focus-visible,input:focus-visible,select:focus-visible,[tabindex="0"]:focus-visible { outline:3px solid var(--focus); outline-offset:2px; }
button:disabled { cursor:not-allowed; opacity:.55; }
h1,h2,p { margin-top:0; }
h1 { margin-bottom:0; font-family:var(--display); font-weight:500; letter-spacing:-.045em; line-height:.94; }
.sr-only { position:absolute!important; width:1px!important; height:1px!important; padding:0!important; margin:-1px!important; overflow:hidden!important; clip:rect(0,0,0,0)!important; white-space:nowrap!important; border:0!important; }
.skip-link { position:fixed; left:16px; top:-60px; z-index:100; padding:10px 14px; background:var(--ink); color:var(--paper); }
.skip-link:focus { top:12px; }
.app-shell { display:grid; min-height:100dvh; grid-template-columns:var(--nav-width) minmax(0,1fr) 72px; grid-template-rows:var(--mast-height) 1fr; }
.masthead { grid-column:1; grid-row:1; border-right:1px solid var(--rule); border-bottom:1px solid var(--rule); display:flex; align-items:center; justify-content:space-between; padding:20px 18px; }
.wordmark { display:flex; align-items:center; gap:9px; padding:0; color:var(--ink); text-align:left; font:700 12px/1 var(--body); letter-spacing:.01em; text-transform:uppercase; }
.wordmark svg { width:29px; height:29px; fill:currentcolor; }
.wordmark svg path:last-child { fill:var(--accent); }
.month-marker { display:none; font-family:var(--data); }
.masthead-settings { display:none; width:38px; height:38px; border:1px solid var(--rule); align-items:center; justify-content:center; color:var(--ink-muted); }
.masthead-settings svg { width:19px; height:19px; fill:none; stroke:currentcolor; stroke-width:1.7; stroke-linecap:round; }
.masthead-settings:hover,.masthead-settings[aria-current="page"] { color:var(--ink); border-color:var(--ink); }
.primary-nav { grid-column:1; grid-row:2; position:sticky; top:0; height:calc(100dvh - var(--mast-height)); border-right:1px solid var(--rule); display:flex; flex-direction:column; padding-top:24px; }
.primary-nav button { min-height:49px; padding:0 18px; display:grid; grid-template-columns:28px 1fr auto; align-items:center; gap:8px; text-align:left; border-left:3px solid transparent; color:var(--ink-muted); }
.primary-nav button:hover { color:var(--ink); background:var(--paper-raised); }
.primary-nav button[aria-current="page"] { color:var(--ink); border-left-color:var(--accent); font-weight:700; }
.nav-index { font:10px var(--data); color:var(--ink-muted); }
.nav-count { display:inline-grid; place-items:center; min-width:22px; height:19px; border:1px solid var(--accent); font:10px var(--data); color:var(--accent-strong); }
#workspace { grid-column:2; grid-row:1 / 3; min-width:0; min-height:100dvh; }
.utility-rail { grid-column:3; grid-row:1 / 3; border-left:1px solid var(--rule); display:flex; flex-direction:column; align-items:stretch; }
.connection-note { min-height:170px; padding:16px 24px; display:flex; align-items:center; gap:9px; writing-mode:vertical-rl; transform:rotate(180deg); font:10px var(--data); color:var(--ink-muted); border-bottom:1px solid var(--rule); }
.connection-note span { width:7px; height:7px; flex:0 0 7px; background:var(--positive); border-radius:50%; }
.connection-note.is-offline span { background:var(--warning); }
.utility-button { min-height:82px; padding:10px 8px; border-bottom:1px solid var(--rule); font-size:10px; line-height:1.2; text-transform:uppercase; letter-spacing:.08em; }
.utility-button strong { display:block; margin-top:6px; font:12px var(--data); color:var(--accent-strong); }
.scan-launch { position:fixed; right:91px; bottom:24px; z-index:15; width:74px; height:74px; display:grid; place-content:center; gap:3px; background:var(--accent); color:#fffdf7; border:2px solid var(--ink); box-shadow:5px 5px 0 var(--ink); }
.scan-launch svg { width:27px; margin:auto; fill:none; stroke:currentcolor; stroke-width:1.8; }
.scan-launch span { font-size:11px; text-transform:uppercase; letter-spacing:.08em; }
.scan-launch:hover { transform:translate(-2px,-2px); box-shadow:7px 7px 0 var(--ink); }
.view-enter { animation:view-in 210ms cubic-bezier(.2,.8,.2,1) both; }
@keyframes view-in { from { opacity:0; transform:translateY(5px); } }
.eyebrow { margin-bottom:12px; color:var(--accent-strong); font:700 10px var(--data); letter-spacing:.13em; text-transform:uppercase; }
.solid-action { min-height:44px; padding:0 18px; background:var(--ink); color:var(--paper); border:1px solid var(--ink); font-weight:700; }
.solid-action:hover { background:var(--accent-strong); border-color:var(--accent-strong); color:#fffdf7; }

/* Home */
.home-view { padding:50px clamp(24px,5vw,78px) 90px; }
.hero-ledger { min-height:330px; display:grid; grid-template-columns:minmax(330px,1.25fr) minmax(260px,.75fr); border-bottom:1px solid var(--ink); }
.hero-copy { align-self:start; }
.hero-copy h1 { max-width:650px; font-size:clamp(58px,7.4vw,112px); }
.hero-copy h1 em { color:var(--accent); font-weight:400; }
.hero-note { max-width:320px; margin-top:24px; color:var(--ink-muted); }
.hero-total { position:relative; min-height:280px; padding:38px 0 0 34px; border-left:1px solid var(--rule); align-self:end; }
.hero-total>span,.hero-total>small { display:block; color:var(--ink-muted); font-size:12px; }
.hero-total>strong { display:block; margin:12px 0 7px; font:500 clamp(34px,4.5vw,68px) var(--data); letter-spacing:-.07em; }
.hero-total canvas { position:absolute; left:34px; bottom:16px; width:calc(100% - 34px); height:52px; }
.health-strip { min-height:50px; display:grid; grid-template-columns:12px auto 1fr auto; align-items:center; gap:12px; padding:8px 0; border-bottom:1px solid var(--rule); font-size:12px; }
.health-strip .status-mark { width:8px; height:8px; background:var(--positive); }
.health-strip.is-warn .status-mark { background:var(--warning); }
.health-strip>span:nth-child(3) { color:var(--ink-muted); }
.health-strip button { color:var(--accent-strong); font-weight:700; }
.daily-loop { display:grid; grid-template-columns:minmax(220px,.55fr) minmax(0,1.45fr); gap:28px; padding:24px 0; border-bottom:1px solid var(--ink); }
.daily-loop h2 { margin:0; font:500 27px/1.05 var(--display); }
.weekly-health { display:flex; flex-direction:column; gap:3px; margin-top:16px; padding:10px 0; text-align:left; border-top:1px solid var(--rule); color:var(--ink); }
.weekly-health strong { color:var(--accent-strong); font-size:13px; }
.weekly-health small { color:var(--ink-muted); }
.daily-actions { display:grid; grid-template-columns:repeat(auto-fit,minmax(145px,1fr)); gap:8px; }
.daily-actions button { min-height:76px; padding:12px; border:1px solid var(--rule); text-align:left; background:var(--paper-raised); transition:border-color 180ms,color 180ms; }
.daily-actions button:hover { border-color:var(--ink); color:var(--accent-strong); }
.daily-actions strong,.daily-actions small { display:block; }
.daily-actions strong { font-size:12px; }
.daily-actions small { margin-top:5px; color:var(--ink-muted); font-size:10px; line-height:1.35; }
.home-columns { display:grid; grid-template-columns:minmax(0,1.5fr) minmax(280px,.5fr); gap:44px; padding-top:38px; }
.month-block { border-left:1px solid var(--rule); padding-left:30px; }
.section-rule { min-height:40px; display:flex; justify-content:space-between; align-items:start; border-bottom:1px solid var(--ink); }
.section-rule h2 { margin:0; font-size:13px; text-transform:uppercase; letter-spacing:.08em; }
.section-rule button,.section-rule span { font-size:11px; color:var(--ink-muted); }
.bar-chart { width:100%; height:180px; margin:24px 0 13px; }
.month-block>p { color:var(--ink-muted); font-size:13px; }
.month-block>p strong { color:var(--ink); }
.attention-callout { width:100%; margin-top:30px; padding:16px 0; border-top:4px solid var(--accent); border-bottom:1px solid var(--rule); text-align:left; display:grid; grid-template-columns:auto 1fr; gap:5px 12px; }
.attention-callout span { grid-row:1/3; font:28px var(--display); color:var(--accent-strong); }
.attention-callout strong { font-size:13px; }
.attention-callout small { color:var(--ink-muted); }

/* Monthly summary, budgets, recurring */
.insight-lines { margin-top:14px; }
.insight-lines p { margin:0 0 8px; color:var(--ink-muted); font-size:13px; }
.insight-lines p strong { color:var(--ink); font-weight:600; }
.category-summary,.recurring-block { margin-top:52px; }
.breakdown-chart { width:100%; height:10px; margin:18px 0 6px; }
.summary-row { display:grid; grid-template-columns:minmax(140px,.8fr) minmax(190px,.7fr) minmax(140px,1fr) minmax(90px,auto); gap:18px; align-items:center; min-height:42px; border-bottom:1px solid var(--rule); }
.summary-name { font-size:13px; }
.summary-figures { font-variant-numeric:tabular-nums; }
.summary-figures strong { font:500 14px var(--data); }
.summary-figures span { margin-left:10px; color:var(--ink-muted); font-size:11px; }
.budget-track { height:4px; background:var(--rule); }
.budget-fill { display:block; height:100%; background:var(--accent); }
.budget-fill.is-over { background:var(--danger); }
.summary-status { color:var(--ink-muted); font-size:11px; text-align:right; font-variant-numeric:tabular-nums; }
.summary-row:has(.is-over) .summary-status { color:var(--danger); }
.recurring-row { display:flex; align-items:center; width:100%; justify-content:space-between; gap:16px; padding:12px 0; border-bottom:1px solid var(--rule); text-align:left; }
.recurring-row:hover { background:var(--paper-raised); }
.recurring-spark { flex:0 0 64px; width:64px; height:28px; }
.recurring-name { flex:1; min-width:0; }
.recurring-row small { display:block; margin-top:2px; color:var(--ink-muted); font-size:11px; }
.recurring-right { flex:0 0 auto; text-align:right; font-variant-numeric:tabular-nums; }
.recurring-right>strong { font:500 15px var(--data); }
.recurring-right .price-change { color:var(--warning); }
.budget-register { margin:0 clamp(24px,5vw,68px) 28px; padding:20px 0; border-bottom:1px solid var(--ink); }
.budget-register header { display:flex; justify-content:space-between; align-items:end; }
.budget-register header span { color:var(--accent-strong); font:700 10px var(--data); letter-spacing:.08em; }
.budget-register header .budget-note { color:var(--ink-muted); font:11px var(--body); letter-spacing:0; text-transform:none; }
.budget-register h2 { margin:2px 0 14px; font-size:30px; }
.budget-row { display:grid; grid-template-columns:minmax(160px,1fr) minmax(90px,auto) auto; gap:16px; align-items:center; min-height:40px; border-bottom:1px solid var(--rule); font-size:13px; }
.budget-row strong { font:500 13px var(--data); font-variant-numeric:tabular-nums; text-align:right; }
.budget-actions button { margin-left:12px; color:var(--accent-strong); font-size:12px; }

/* Shared ledger */
.workspace-head { min-height:190px; display:flex; align-items:end; justify-content:space-between; gap:30px; padding:42px clamp(24px,5vw,68px) 30px; border-bottom:1px solid var(--ink); }
.workspace-head h1 { font-size:clamp(46px,6vw,84px); }
.workspace-head .head-note { max-width:360px; margin:0; color:var(--ink-muted); }
.ledger-tools { min-height:74px; display:grid; grid-template-columns:minmax(240px,.7fr) 1fr; gap:24px; align-items:center; padding:12px clamp(24px,5vw,68px); border-bottom:1px solid var(--rule); }
.search-field input { width:100%; height:42px; border:0; border-bottom:1px solid var(--ink); background:transparent; border-radius:0; padding:0 5px; }
.filter-line { display:flex; justify-content:flex-end; flex-wrap:wrap; gap:4px; }
.filter-line button { min-height:34px; padding:0 11px; border:1px solid transparent; color:var(--ink-muted); }
.filter-line button[aria-pressed="true"] { border-color:var(--ink); color:var(--ink); background:var(--paper-raised); }
.ledger-table { padding:18px clamp(24px,5vw,68px) 0; }
.ledger-heading,.transaction-row { display:grid; grid-template-columns:28px minmax(230px,1.5fr) minmax(100px,.55fr) minmax(130px,.65fr) minmax(100px,.5fr); gap:12px; }
.ledger-heading { min-height:34px; align-items:center; border-bottom:1px solid var(--ink); color:var(--ink-muted); font:9px var(--data); text-transform:uppercase; letter-spacing:.1em; }
.ledger-heading span:last-child { text-align:right; }
.ledger-heading .ledger-sort { border:0; background:none; color:inherit; font:inherit; text-transform:inherit; letter-spacing:inherit; padding:0; cursor:pointer; text-align:left; }
.ledger-heading .ledger-sort[aria-pressed="true"] { color:var(--accent-strong); }
.ledger-heading .ledger-sort:last-child { text-align:right; }
.date-range { display:flex; align-items:center; gap:6px; }
.date-range input[type="date"] { border:1px solid var(--rule); background:var(--paper); color:var(--ink); font:13px var(--data); padding:6px 8px; border-radius:4px; }
.date-range button { border:0; background:none; color:var(--accent-strong); font:11px var(--data); cursor:pointer; padding:4px 2px; }
.date-range button:hover { text-decoration:underline; }
.transaction-row { position:relative; min-height:var(--row-height); align-items:center; border-bottom:1px solid var(--rule); }
.recent-block .transaction-row { grid-template-columns:minmax(220px,1fr) 110px 130px 105px; }
.recent-block .row-select { display:none; }
.transaction-row:hover { background:var(--paper-raised); }
.transaction-row.has-attention::before { content:""; position:absolute; left:-8px; top:8px; bottom:8px; width:3px; background:var(--accent); }
.row-select { display:grid; place-items:center; }
input[type="checkbox"] { width:16px; height:16px; accent-color:var(--accent); }
.merchant-cell { min-width:0; padding:7px 0; }
.merchant-cell strong { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:13px; }
.merchant-cell small,.amount-cell small { display:block; color:var(--ink-muted); font-size:10px; }
.row-note { display:block; margin-top:4px; color:var(--accent-strong); font-size:10px; }
.state-cell,.account-cell { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--ink-muted); font-size:11px; }
.state-text { color:var(--ink-muted); }
.state-suggested,.state-review,.state-recurring-change { color:var(--accent-strong); font-weight:700; }
.state-pending { font-style:italic; }
.amount-cell { text-align:right; font-variant-numeric:tabular-nums; }
.amount-cell strong { font:600 13px var(--data); }
.amount-cell.is-credit strong { color:var(--positive); }
.result-count { padding:15px clamp(24px,5vw,68px) 8px; color:var(--ink-muted); font-size:11px; }
.ledger-more { display:block; margin:0 clamp(24px,5vw,68px) 80px; min-height:42px; padding:0 14px; border:1px solid var(--ink); background:transparent; color:var(--ink); }
.bulk-bar { position:sticky; top:0; z-index:5; min-height:48px; display:flex; align-items:center; gap:16px; padding:0 clamp(24px,5vw,68px); background:var(--ink); color:var(--paper); }
.bulk-bar[hidden] { display:none; }
.bulk-bar button { color:inherit; text-decoration:underline; text-underline-offset:3px; }

/* Purchase vault */
.vault-search { display:grid; grid-template-columns:minmax(260px,1fr) auto; gap:24px; align-items:center; padding:16px clamp(24px,5vw,68px); border-bottom:1px solid var(--rule); }
.vault-search p,.vault-status { margin:0; color:var(--ink-muted); font-size:11px; }
.vault-status { padding:10px clamp(24px,5vw,68px) 0; }
.purchase-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:16px; padding:24px clamp(24px,5vw,68px) 12px; }
.purchase-grid>.quiet-empty { grid-column:1/-1; }
.purchase-card { min-height:245px; padding:18px; display:flex; flex-direction:column; border:1px solid var(--rule); border-top:4px solid var(--accent); background:var(--paper-raised); cursor:pointer; transition:border-color 180ms,box-shadow 180ms; }
.purchase-card:hover { border-color:var(--ink); }
.purchase-card header,.purchase-card footer { display:flex; justify-content:space-between; gap:12px; align-items:start; }
.purchase-card header span,.purchase-card footer { color:var(--ink-muted); font:10px var(--data); }
.purchase-card header strong { font:600 14px var(--data); }
.purchase-card h2 { margin:25px 0 3px; font:500 28px/1.05 var(--display); }
.purchase-card>p { color:var(--ink-muted); font-size:11px; }
.purchase-card ul { margin:12px 0 20px; padding:10px 0 0 18px; border-top:1px solid var(--rule); font-size:12px; }
.purchase-card li { margin-bottom:4px; }
.purchase-card .purchase-card-empty { margin:auto 0 20px; max-width:34ch; }
.purchase-card footer { margin-top:auto; padding-top:12px; border-top:1px solid var(--rule); align-items:center; }
.purchase-card footer button { min-height:42px; color:var(--accent-strong); font:700 11px var(--body); }

/* Attention */
.attention-list { padding:0 clamp(24px,5vw,68px) 90px; }
.attention-item { min-height:170px; display:grid; grid-template-columns:60px minmax(240px,1fr) auto; gap:20px; align-items:center; border-bottom:1px solid var(--rule); }
.attention-rank { align-self:start; padding-top:28px; font:11px var(--data); color:var(--accent-strong); }
.attention-item p { margin:0 0 5px; color:var(--accent-strong); font:700 10px var(--data); text-transform:uppercase; letter-spacing:.1em; }
.attention-item h2 { margin:0; font:500 29px var(--display); }
.attention-item div>span { color:var(--ink-muted); font:11px var(--data); }
.attention-item div>small { display:block; max-width:620px; margin-top:13px; color:var(--ink-muted); }
.attention-actions { display:flex; gap:8px; }
.attention-actions button:not(.solid-action) { min-height:42px; padding:0 12px; border:1px solid var(--rule); }
.quiet-empty { padding:70px 0; }
.quiet-empty h2 { font:42px var(--display); }

/* Reconciliation */
.match-workspace { min-height:475px; display:grid; grid-template-columns:1fr 100px 1fr; padding:34px clamp(24px,5vw,68px); border-bottom:1px solid var(--ink); }
.match-side { padding:0 clamp(10px,3vw,44px); }
.side-label { display:block; margin-bottom:20px; font:10px var(--data); text-transform:uppercase; color:var(--ink-muted); }
.receipt-paper { width:min(100%,280px); margin:auto; padding:27px 24px; background:#fffef7; color:#292b25; border:1px solid #cbc7ba; box-shadow:4px 5px 0 #cbc7ba; font:11px var(--data); }
.receipt-brand { font:700 21px/1.05 var(--body); letter-spacing:.04em; }
.receipt-rule { height:1px; margin:20px 0; background:#68695f; }
.receipt-paper p { display:flex; justify-content:space-between; margin:8px 0; }
.receipt-total { display:flex; justify-content:space-between; margin:15px 0; padding-top:10px; border-top:2px solid #292b25; font-size:15px; font-weight:700; }
.receipt-paper>small { display:block; margin-top:24px; }
.match-side dl { margin:24px auto 0; max-width:280px; }
.match-side dl div { display:flex; justify-content:space-between; padding:8px 0; border-bottom:1px solid var(--rule); }
.match-side dt { color:var(--ink-muted); }
.match-side dd { margin:0; font-weight:700; text-align:right; }
.match-side dd small { display:block; color:var(--accent-strong); font-weight:400; }
.match-score { align-self:center; text-align:center; color:var(--accent-strong); }
.match-score span { display:block; font:52px var(--display); }
.match-score strong,.match-score small { display:block; font-size:10px; text-transform:uppercase; letter-spacing:.08em; }
.match-score i { display:block; margin-top:22px; color:var(--ink); font-size:25px; font-style:normal; }
.bank-side { align-self:center; }
.bank-side h2 { max-width:400px; font:500 clamp(28px,3vw,46px)/1.05 var(--display); }
.bank-amount { display:block; margin:25px 0 8px; font:500 42px var(--data); }
.bank-side>p { color:var(--ink-muted); }
.evidence-list { margin-top:35px; border-top:1px solid var(--ink); }
.evidence-list span { display:flex; gap:14px; padding:8px 0; border-bottom:1px solid var(--rule); font-size:12px; }
.evidence-list b { width:32px; color:var(--positive); font:12px var(--data); }
.match-decision { min-height:90px; display:flex; justify-content:flex-end; align-items:center; gap:12px; padding:18px clamp(24px,5vw,68px) 132px; }
.match-decision p { margin:0 auto 0 0; color:var(--ink-muted); }
.match-decision p strong { color:var(--ink); }
.match-decision button:not(.solid-action) { min-height:42px; padding:0 14px; border:1px solid var(--rule); }
.match-chip { display:inline-block; margin-top:14px; padding:4px 10px; border:1px solid var(--accent-strong); color:var(--accent-strong); font:700 10px var(--data); text-transform:uppercase; letter-spacing:.08em; }
.reconcile-switch,.alloc-pick { display:flex; align-items:center; gap:14px; padding:14px clamp(24px,5vw,68px); border-bottom:1px solid var(--rule); }
.reconcile-switch>span,.alloc-pick label { color:var(--ink-muted); font:700 10px var(--data); text-transform:uppercase; letter-spacing:.1em; }
.reconcile-switch button { min-height:34px; padding:0 12px; border:1px solid var(--rule); }
.reconcile-switch button[aria-current="page"] { border-color:var(--ink); font-weight:700; color:var(--ink); opacity:1; cursor:default; }
.alloc-pick select { margin-left:12px; height:38px; padding:0 8px; border:1px solid var(--rule); border-radius:0; background:var(--paper); color:var(--ink); }
.candidate-list,.linked-pairs { padding:24px clamp(24px,5vw,68px); border-bottom:1px solid var(--rule); }
.candidate-list h2,.linked-pairs h2 { margin:0 0 8px; color:var(--ink-muted); font:700 11px var(--data); text-transform:uppercase; letter-spacing:.1em; }
.candidate-row { display:flex; justify-content:space-between; align-items:center; gap:16px; padding:10px 0; border-bottom:1px solid var(--rule); }
.candidate-row strong { font-weight:500; }
.candidate-row small { display:block; margin-top:3px; color:var(--ink-muted); font:11px var(--data); }
.candidate-row button { min-height:38px; padding:0 14px; border:1px solid var(--rule); }
.alloc-strip { padding:25px 40px; border-top:1px solid var(--ink); }
.alloc-strip h2 { font-size:12px; text-transform:uppercase; }
.alloc-strip p { display:grid; grid-template-columns:1fr auto auto; gap:10px; align-items:center; margin:0; padding:8px 0; border-bottom:1px solid var(--rule); font-size:11px; }
.alloc-strip p>span { color:var(--ink-muted); font-family:var(--data); }
.alloc-strip form { padding:18px 0 0; }
.alloc-strip .form-help { display:block; border:none; }

/* Accounts */
.account-ledger { padding:22px clamp(24px,5vw,68px); }

/* Warranties */
.warranties-view { padding-bottom:90px; }
.warranty-alert { padding:12px clamp(24px,5vw,68px); color:var(--accent-strong); font:700 12px var(--data); text-transform:uppercase; letter-spacing:.06em; }
.warranty-alert.is-urgent { color:var(--danger); }
.warranty-section { padding:0 clamp(24px,5vw,68px); margin-bottom:30px; }
.warranty-section h2 { margin:0 0 12px; font:700 11px var(--data); text-transform:uppercase; letter-spacing:.1em; color:var(--ink-muted); }
.warranty-row { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:16px; align-items:start; padding:16px 0; border-bottom:1px solid var(--rule); }
.warranty-row.is-expired { opacity:.6; }
.warranty-row.is-expiring { border-left:3px solid var(--warning); padding-left:13px; }
.warranty-main strong { display:block; font:500 14px var(--data); margin-bottom:4px; }
.warranty-main small { display:inline-block; margin-right:8px; color:var(--ink-muted); font:11px var(--data); }
.warranty-source { color:var(--accent-strong) !important; }
.warranty-coverage { margin:8px 0 0; color:var(--ink-muted); font:12px var(--body); }
.warranty-claim { margin-top:8px; font:12px var(--body); }
.warranty-claim a { color:var(--accent-strong); text-decoration:underline; text-underline-offset:2px; }
.warranty-actions { display:flex; gap:8px; }
.warranty-actions button { min-height:38px; padding:0 12px; border:1px solid var(--rule); color:var(--accent-strong); font-size:12px; }
.warranty-suggestions { margin:0 clamp(24px,5vw,68px) 30px; padding:22px; border:1px solid var(--accent-strong); background:color-mix(in srgb,var(--accent) 7%,var(--paper)); }
.warranty-suggestions h2 { margin:4px 0 6px; font:500 22px var(--display); }
.warranty-suggestions>div>p:last-child { margin:0 0 16px; color:var(--ink-muted); }
.warranty-suggestion { display:grid; grid-template-columns:auto minmax(0,1fr) auto auto; gap:12px; align-items:center; padding:12px 0; border-top:1px solid var(--rule); }
.warranty-suggestion input { width:18px; height:18px; }
.warranty-suggestion strong,.warranty-suggestion small { display:block; }
.warranty-suggestion small { margin-top:3px; color:var(--ink-muted); }
.warranty-suggestion button,.warranty-card-profiles header button { min-height:36px; padding:0 10px; border:1px solid var(--rule); color:var(--accent-strong); }
.warranty-suggestions form>.solid-action { margin-top:14px; min-height:42px; padding:0 16px; }
.warranty-card-profiles>header { display:flex; justify-content:space-between; align-items:center; border-bottom:1px solid var(--rule); }
.warranty-card-profiles>header h2 { margin:0; }

/* Accounts */
.account-row { min-height:112px; display:grid; grid-template-columns:46px minmax(220px,1fr) minmax(180px,.7fr) 140px 70px; gap:16px; align-items:center; border-bottom:1px solid var(--rule); }
.account-initial { width:38px; height:38px; display:grid; place-items:center; background:var(--ink); color:var(--paper); font:20px var(--display); }
.account-row>div:nth-child(2)>span { color:var(--ink-muted); font-size:10px; text-transform:uppercase; }
.account-row h2 { margin:3px 0; font:500 24px var(--display); }
.account-row h2 small { font:12px var(--data); }
.account-row p { margin:0; color:var(--ink-muted); font-size:11px; }
.account-health strong,.account-health small { display:block; }
.account-health strong { font-size:12px; }
.account-health small { color:var(--ink-muted); }
.account-row.state-stale .account-health strong { color:var(--warning); }
.account-balance { text-align:right; font:15px var(--data); }
.account-row>button { color:var(--accent-strong); }
.account-row.state-paused .account-health strong { color:var(--ink-muted); }
.account-row-actions { display:flex; flex-direction:column; align-items:flex-end; gap:4px; }
.account-row-actions button { color:var(--accent-strong); font-size:11px; }
/* One institution row carries its own accounts, so it grows past the fixed
   112px of a single-line account row. */
.institution-row { align-items:start; padding:16px 0; }
.institution-accounts { margin:6px 0 0; padding:0; list-style:none; display:grid; gap:4px; }
.institution-account { display:grid; grid-template-columns:minmax(0,1fr) auto minmax(70px,auto) auto; gap:10px; align-items:baseline; font-size:12px; }
.institution-account strong { font:12px var(--data); text-align:right; }
/* The pending row's call to action is a sentence, not a "Details →" glyph, so
   it takes the two trailing columns instead of the 70px one. */
.institution-row.is-pending>button { grid-column:4 / span 2; justify-self:end; text-align:right; }
.institution-account small { color:var(--ink-muted); font-size:11px; }
.institution-account button { color:var(--accent-strong); font-size:11px; }
.institution-account.is-paused span,.institution-account.is-paused small { color:var(--ink-muted); text-decoration:line-through; }
.add-bank-options { margin:14px 0 0; padding:0; list-style:none; display:grid; gap:14px; }
.add-bank-options li { display:grid; gap:4px; padding-bottom:12px; border-bottom:1px solid var(--rule); }
.add-bank-options button { justify-self:start; min-height:42px; padding:0 14px; border:1px solid var(--ink); color:var(--accent-strong); }
.add-bank-options small { color:var(--ink-muted); font-size:11px; }
.connection-institution { margin:12px 0; padding-top:10px; border-top:1px solid var(--rule); }
.connection-institution h3 { margin:0 0 4px; font:500 17px var(--display); }
.account-actions { display:flex; gap:10px; align-items:center; }
.account-actions>button:not(.solid-action) { min-height:44px; padding:0 14px; border:1px solid var(--rule); }
.manual-register { margin-top:18px; }
.ledger-heading { padding:0 clamp(24px,5vw,68px); }
.ledger-heading span { color:var(--accent-strong); font:700 10px var(--data); letter-spacing:.08em; }
.ledger-heading h2 { margin:2px 0 0; font:500 24px var(--display); }
.category-register { margin:28px clamp(24px,5vw,68px); padding:20px 0; border-block:1px solid var(--ink); }
.category-register header { display:flex; justify-content:space-between; align-items:end; }
.category-register header span { color:var(--accent-strong); font:700 10px var(--data); letter-spacing:.08em; }
.category-register h2 { margin:2px 0 14px; font-size:30px; }
.category-register header button { min-height:42px; color:var(--accent-strong); }
.category-register>div { display:flex; flex-wrap:wrap; gap:8px; }
.category-chip { padding:8px 12px; border-left:5px solid var(--category-color); background:var(--paper-raised); color:var(--ink); font-size:12px; min-height:auto; }
.category-chip.is-archived { opacity:.6; border-left-style:dashed; }
/* The global button:focus-visible outline inherits this element's opacity,
   dropping its contrast below the 3:1 UI-component minimum (2.81:1 measured
   composited against the raised surface). Full opacity while focused keeps
   the dashed/dimmed archived treatment for the resting state only. */
.category-chip.is-archived:focus-visible { opacity:1; }
.category-chip small { display:block; color:var(--ink-muted); font-size:10px; text-transform:uppercase; letter-spacing:.06em; }
.provider-note { margin:14px clamp(24px,5vw,68px) 90px; padding:18px 0; border-top:4px solid var(--ink); display:grid; grid-template-columns:160px 1fr; }
.provider-note span { font:700 11px var(--data); text-transform:uppercase; }
.provider-note p { max-width:650px; color:var(--ink-muted); }

/* Scanner */
body[data-route="scan"] .scan-launch,body[data-route="scan"] .utility-rail,body[data-route="scan"] .primary-nav,body[data-route="scan"] .masthead { display:none; }
body[data-route="scan"] .app-shell { display:block; }
.scanner-view { position:fixed; inset:0; z-index:20; overflow:hidden; background:#121510; color:#fffdf7; }
#camera-preview { width:100%; height:100%; object-fit:cover; filter:saturate(.78) contrast(1.05); }
.camera-fallback { position:absolute; inset:0; display:grid; place-content:center; text-align:center; padding:24px; background:#171916; }
.camera-fallback.camera-ready { display:none; }
.camera-fallback h1 { font-size:48px; }
.camera-fallback p { color:#aaa99f; }
.import-action { display:inline-flex; min-height:44px; align-items:center; justify-content:center; padding:0 16px; border:1px solid #cbc7ba; cursor:pointer; }
.import-action input { position:absolute; opacity:0; pointer-events:none; }
.viewfinder { position:absolute; inset:clamp(90px,12vh,150px) clamp(24px,17vw,280px) clamp(145px,20vh,220px); }
.viewfinder i { position:absolute; width:52px; height:52px; border-color:#ef765a; border-style:solid; transition:all 460ms cubic-bezier(.2,.8,.2,1); }
.viewfinder i:nth-child(1){left:0;top:0;border-width:3px 0 0 3px}.viewfinder i:nth-child(2){right:0;top:0;border-width:3px 3px 0 0}.viewfinder i:nth-child(3){right:0;bottom:0;border-width:0 3px 3px 0}.viewfinder i:nth-child(4){left:0;bottom:0;border-width:0 0 3px 3px}
.scanner-view.is-steady .viewfinder i { width:70px; height:70px; border-color:#fffdf7; }
.scan-line { position:absolute; left:15%; right:15%; top:51%; height:1px; background:#ef765a; opacity:.8; }
.scanner-top { position:absolute; left:0; right:0; top:0; min-height:72px; padding:max(16px,env(safe-area-inset-top)) 22px 8px; display:flex; justify-content:space-between; align-items:center; background:#171916; border-bottom:1px solid #454740; }
.scanner-top button { min-height:42px; color:#fffdf7; }
.scanner-top span { font-size:11px; color:#aaa99f; }
.scanner-dock { position:absolute; left:0; right:0; bottom:0; min-height:128px; padding:14px max(22px,env(safe-area-inset-right)) max(18px,env(safe-area-inset-bottom)); display:grid; grid-template-columns:1fr 90px 1fr; align-items:center; background:#171916; border-top:1px solid #454740; }
.stability { display:flex; gap:9px; align-items:center; font-size:11px; }
.stability span { width:12px; height:12px; border:2px solid #ef765a; border-radius:50%; }
.is-steady .stability span { background:#fffdf7; border-color:#fffdf7; }
.capture-button { width:76px; height:76px; place-self:center; display:grid; place-items:center; border:2px solid #fffdf7; border-radius:50%; }
.capture-button span { width:56px; height:56px; background:#fffdf7; border-radius:50%; transition:transform 120ms; }
.capture-button:active span { transform:scale(.82); }
.scanner-dock>p { margin:0; justify-self:end; max-width:220px; color:#aaa99f; font-size:11px; text-align:right; }
.scanner-tools { position:absolute; top:82px; right:18px; display:flex; gap:8px; z-index:2; }
.scanner-tools>button,.scanner-tools .compact { min-height:38px; padding:0 12px; border:1px solid #77796f; background:#171916dd; color:#fffdf7; font-size:11px; }
.scanner-tools [aria-pressed="true"] { border-color:#ef765a; color:#ffb09d; }
.capture-review { position:absolute; left:50%; bottom:145px; z-index:3; display:grid; grid-template-columns:112px 1fr; gap:16px; width:min(720px,calc(100% - 32px)); transform:translateX(-50%); padding:16px 18px; background:var(--paper-raised); color:var(--ink); border:1px solid var(--rule); border-top:5px solid var(--accent); }
.capture-original { width:112px; height:132px; object-fit:contain; background:#ddd8cc; border:1px solid var(--rule); }
.capture-pdf { display:grid; place-content:center; padding:10px; color:var(--ink-muted); text-align:center; font:700 10px var(--data); }
.capture-review-copy>span { color:var(--ink-muted); font:700 10px var(--data); text-transform:uppercase; letter-spacing:.08em; }
.capture-facts { display:grid; grid-template-columns:1.5fr 1fr 1fr; gap:12px; margin:10px 0; }
.capture-facts div { min-width:0; }.capture-facts small { display:block; color:var(--ink-muted); }.capture-facts strong { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font:600 20px var(--display); }
.capture-match { margin:8px 0; padding:8px; background:var(--accent-wash); font-size:12px; }
.capture-review-actions { display:flex; justify-content:flex-end; gap:8px; }.capture-review-actions button { min-height:40px; padding:0 14px; }
.capture-review-actions .solid-action { min-width:120px; }
.just-captured::after { content:"Preserved"; position:absolute; inset:0; display:grid; place-content:center; background:#fffdf7; color:#171916; font:42px var(--display); animation:shutter 460ms both; }
@keyframes shutter { 0%{opacity:0} 25%{opacity:1} 70%{opacity:1} 100%{opacity:0;visibility:hidden} }

/* Receipt intake */
.inbox-view { padding-bottom:90px; }.inbox-view .workspace-head p { color:var(--ink-muted); }
.inbox-list { display:grid; gap:0; padding:0 clamp(24px,5vw,68px); }
.inbox-card { display:grid; grid-template-columns:1fr auto; gap:20px; align-items:center; padding:18px 0; border-bottom:1px solid var(--rule); }
.inbox-card>div>span { color:var(--ink-muted); font:700 10px var(--data); text-transform:uppercase; letter-spacing:.06em; }
.inbox-card h2 { margin:5px 0 2px; font:600 23px var(--display); }.inbox-card p { margin:0; color:var(--ink-muted); font-size:12px; }
.inbox-review { border-left:4px solid var(--warning); padding-left:14px; }.inbox-matched { border-left:4px solid var(--positive); padding-left:14px; }
.inbox-actions button { min-height:42px; padding:0 16px; }

/* Toast: visible echo of the sr-only live regions, for sighted users */
.toast-root { position:fixed; left:50%; bottom:24px; z-index:60; transform:translateX(-50%); pointer-events:none; display:flex; justify-content:center; width:100%; padding:0 16px; }
.toast { max-width:440px; padding:12px 18px; background:var(--ink); color:var(--paper); border:1px solid var(--ink); font:500 13px var(--display,inherit); animation:toast-in 180ms cubic-bezier(.2,.8,.2,1); }
.toast.is-urgent { background:var(--danger-solid); border-color:var(--danger-solid); color:#fffdf7; }
@keyframes toast-in { from{opacity:0;transform:translateY(8px)} }

/* Update banner: shown once a newly deployed service worker takes over this
   page, which leaves it running a mixed set of modules (issue #136). A PWA
   has no address bar, so the reload has to be offered here. Pinned to the top
   rather than the bottom so it never sits under the toast root or the mobile
   tab bar. */
.update-banner { position:fixed; top:0; left:0; right:0; z-index:70; display:flex; align-items:center; justify-content:center; gap:12px; padding:10px 16px; background:var(--ink); color:var(--paper); font:500 13px var(--display,inherit); }
.update-banner button { padding:6px 14px; background:var(--paper); color:var(--ink); border:1px solid var(--paper); font:600 13px var(--display,inherit); cursor:pointer; }
.update-banner button:hover { background:transparent; color:var(--paper); }

/* Dialog */
#overlay-root { position:fixed; inset:0; margin:0; padding:0; width:100%; height:100%; max-width:none; max-height:none; border:none; background:transparent; }
#overlay-root::backdrop { background:rgba(23,25,22,.72); }
.detail-sheet { position:fixed; top:0; right:0; width:min(520px,100%); height:100dvh; overflow:auto; background:var(--paper-raised); border-left:1px solid var(--ink); box-shadow:-18px 0 50px rgba(22,24,20,.18); animation:sheet-in 210ms cubic-bezier(.2,.8,.2,1); }
@keyframes sheet-in { from{transform:translateX(15px);opacity:0} }
.detail-sheet>header { height:58px; display:flex; justify-content:space-between; align-items:center; padding:0 28px; border-bottom:1px solid var(--rule); color:var(--ink-muted); text-transform:uppercase; font-size:10px; letter-spacing:.08em; }
.detail-sheet>header button { min-height:42px; }
.detail-sheet form { padding:38px 40px; }
.detail-sheet h1 { margin-bottom:38px; font-size:48px; }
.detail-sheet label { display:block; margin-bottom:18px; color:var(--ink-muted); font-size:11px; }
.detail-sheet input,.detail-sheet select { width:100%; height:42px; margin-top:6px; padding:0 8px; border:1px solid var(--rule); border-radius:0; background:var(--paper); color:var(--ink); }
.detail-sheet textarea { width:100%; min-height:96px; margin-top:6px; padding:8px; border:1px solid var(--rule); border-radius:0; background:var(--paper); color:var(--ink); font:13px var(--body); resize:vertical; }
.receipt-viewer { border-bottom:1px solid var(--ink); background:var(--paper); }
.receipt-viewer-status { margin:0; padding:20px 40px; color:var(--ink-muted); font-size:11px; font-family:var(--data); text-transform:uppercase; letter-spacing:.04em; }
.receipt-image { display:block; width:100%; max-height:60vh; object-fit:contain; background:var(--ink); }
.receipt-pdf-link { display:block; padding:20px 40px; color:var(--accent-strong); font-size:12px; font-weight:600; text-decoration:underline; text-underline-offset:3px; }
.tag-editor { padding:24px 40px; border-top:1px solid var(--rule); }
.tag-editor-label { display:block; margin-bottom:10px; color:var(--ink-muted); font:700 10px var(--data); text-transform:uppercase; letter-spacing:.06em; }
.tag-list { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:12px; }
.tag-chip { display:inline-flex; align-items:center; gap:4px; padding:6px 6px 6px 12px; border:1px solid var(--rule); background:var(--paper-raised); color:var(--ink); font-size:12px; }
.tag-chip button { display:inline-flex; align-items:center; justify-content:center; width:22px; height:22px; min-height:auto; padding:0; border:0; background:none; color:var(--ink-muted); font-size:15px; line-height:1; cursor:pointer; }
.tag-chip button:hover,.tag-chip button:focus-visible { color:var(--danger); }
.tag-empty { color:var(--ink-muted); font-size:12px; font-style:italic; }
.tag-add { display:flex; gap:8px; margin-bottom:10px; }
.tag-add select { flex:1; height:38px; border:1px solid var(--rule); background:var(--paper); color:var(--ink); padding:0 8px; }
.tag-add button { height:38px; padding:0 14px; }
#tag-create-form { display:flex; gap:8px; }
#tag-create-form input { flex:1; height:38px; border:1px solid var(--rule); background:var(--paper); color:var(--ink); padding:0 10px; }
#tag-create-form button { height:38px; padding:0 14px; }
.line-items-editor { padding:24px 40px; border-top:1px solid var(--rule); }
.line-items-editor-label { display:block; margin-bottom:12px; color:var(--ink-muted); font:700 10px var(--data); text-transform:uppercase; letter-spacing:.06em; }
.line-item-row { padding:12px; border:1px solid var(--rule); background:var(--paper-raised); margin-bottom:12px; }
.line-item-header { display:flex; justify-content:space-between; align-items:baseline; margin-bottom:8px; font-size:13px; font-weight:600; }
.line-item-amount { font-family:var(--data); color:var(--ink-strong); }
.line-item-classification { display:flex; flex-direction:column; gap:8px; }
.line-item-category-label { display:flex; align-items:center; gap:8px; font-size:12px; color:var(--ink-muted); }
.line-item-category-label select { flex:1; height:34px; border:1px solid var(--rule); background:var(--paper); color:var(--ink); font-size:12px; padding:0 8px; }
.line-item-tags { margin-top:4px; }
.line-item-tag-add { display:flex; gap:6px; margin-top:6px; }
.line-item-tag-add select { flex:1; height:32px; border:1px solid var(--rule); background:var(--paper); color:var(--ink); font-size:12px; padding:0 6px; }
.line-item-tag-add button { height:32px; padding:0 10px; font-size:12px; }
.field-pair { display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.detail-note { margin:24px 0; padding:15px 0; border-top:3px solid var(--accent); border-bottom:1px solid var(--rule); }
.detail-note span { color:var(--accent-strong); font:700 10px var(--data); text-transform:uppercase; }
.detail-note p { margin:7px 0 0; }
.detail-sheet form>.solid-action { width:100%; margin-top:12px; }
.form-help { margin-top:12px; color:var(--ink-muted); font-size:11px; }
.field-error { display:block; margin-top:4px; color:var(--danger); font-size:11px; }
input[aria-invalid="true"],select[aria-invalid="true"],textarea[aria-invalid="true"] { border-color:var(--danger); }
.history-strip { padding:25px 40px 60px; border-top:1px solid var(--ink); }
.history-strip h2 { font-size:12px; text-transform:uppercase; }
.history-strip p { display:grid; grid-template-columns:80px 1fr; margin:0; padding:8px 0; border-bottom:1px solid var(--rule); font-size:11px; }
.history-strip span { color:var(--ink-muted); font-family:var(--data); }
.delete-strip { padding:0 40px 44px; }
.delete-strip>button,.delete-strip div button { min-height:42px; color:var(--danger); text-decoration:underline; text-underline-offset:4px; }
.delete-strip div { padding:16px; border:1px solid var(--danger); }
.delete-strip div p { margin:0 0 10px; font-size:12px; line-height:1.5; }
.delete-strip div button+button { margin-left:16px; font-weight:700; }

/* Conflict resolution */
.conflict-body { padding:38px 40px 44px; }
.conflict-body h1 { margin-bottom:14px; font-size:40px; }
.conflict-body .head-note { margin-bottom:28px; color:var(--ink-muted); font-size:13px; line-height:1.5; }
.conflict-status { color:var(--ink-muted); font-size:14px; }
.conflict-compare { display:grid; gap:14px; }
.conflict-panel { padding:15px; border:1px solid var(--rule); }
.conflict-panel span { display:block; color:var(--accent-strong); font:700 10px var(--data); text-transform:uppercase; letter-spacing:.04em; }
.conflict-panel strong { display:block; margin-top:6px; font-size:18px; font-weight:700; }
.conflict-panel p { margin:4px 0 0; font-family:var(--data); font-size:13px; color:var(--ink-muted); }
.conflict-panel small { display:block; margin-top:2px; color:var(--ink-muted); }
.conflict-actions { display:flex; gap:10px; margin-top:28px; }
.conflict-actions button { min-height:44px; padding:0 18px; border:1px solid var(--ink); }
.conflict-actions .solid-action { flex:1; }

/* Design lab */
.lab-directions { display:grid; grid-template-columns:repeat(3,1fr); gap:18px; padding:36px clamp(24px,5vw,68px); }
.lab-card { min-width:0; border-top:6px solid var(--ink); }
.lab-card>header { display:flex; gap:12px; padding:14px 0; }
.lab-card>header>span { font:30px var(--display); color:var(--accent-strong); }
.lab-card h2 { margin:0; font:500 24px var(--display); }
.lab-card header small { color:var(--ink-muted); }
.lab-card>p { color:var(--ink-muted); font-size:12px; }
.lab-screen { height:260px; display:grid; grid-template-columns:60px 1fr; overflow:hidden; background:var(--paper-raised); border:1px solid var(--rule); }
.lab-screen nav { padding:16px 8px; border-right:1px solid var(--rule); font:8px/3 var(--data); }
.lab-screen main { padding:20px 14px; }
.lab-screen main>p { margin:0; font:8px var(--data); }
.lab-screen main>strong { display:block; margin:8px 0; font:27px var(--display); }
.lab-chart { height:55px; display:flex; align-items:end; gap:5px; border-bottom:1px solid var(--ink); }
.lab-chart i { width:16%; background:var(--accent); }
.lab-chart i:nth-child(1){height:25%}.lab-chart i:nth-child(2){height:55%}.lab-chart i:nth-child(3){height:35%}.lab-chart i:nth-child(4){height:80%}.lab-chart i:nth-child(5){height:65%}
.lab-screen ul { list-style:none; padding:8px 0 0; margin:0; }
.lab-screen li { display:flex; justify-content:space-between; padding:5px 0; border-bottom:1px solid var(--rule); font-size:8px; }
.lab-transit { border-top-color:#587d91; font-family:Arial Narrow,var(--body); }
.lab-transit .lab-screen { grid-template-columns:1fr; border:2px solid var(--ink); }
.lab-transit .lab-screen nav { height:32px; padding:6px; border:0; border-bottom:2px solid var(--ink); word-spacing:16px; }
.lab-transit .lab-screen main>strong { font-family:var(--data); }
.lab-transit .lab-chart i { background:#587d91; }
.lab-folio { border-top-color:#6f8665; }
.lab-folio .lab-screen { display:flex; flex-direction:column-reverse; }
.lab-folio .lab-screen nav { height:34px; border:0; border-top:1px solid var(--rule); word-spacing:13px; }
.lab-folio .lab-screen main { flex:1; background:var(--accent-wash); }
.lab-folio .lab-screen main>strong { font-family:var(--body); }
.lab-folio .lab-chart i { background:#6f8665; }
.lab-review { margin:0 clamp(24px,5vw,68px) 90px; border-top:1px solid var(--ink); }
.lab-review h2 { padding-top:18px; font:500 30px var(--display); }
.lab-review table { width:100%; border-collapse:collapse; font:12px var(--data); }
.lab-review th,.lab-review td { padding:9px; border-bottom:1px solid var(--rule); text-align:left; }

@media (max-width:1000px) {
  :root { --nav-width:72px; }
  .wordmark span,.primary-nav button:not([aria-current]) .nav-index,.primary-nav button .nav-count { display:none; }
  .masthead { justify-content:center; padding:18px 8px; }
  .primary-nav button { grid-template-columns:1fr; padding:0 7px; text-align:center; font-size:10px; }
  .primary-nav button[aria-current] .nav-index { display:block; }
  .hero-ledger { grid-template-columns:1fr .72fr; }
  .hero-copy h1 { font-size:clamp(54px,8vw,82px); }
  .ledger-heading,.transaction-row { grid-template-columns:28px minmax(190px,1.5fr) 105px 100px; }
  .ledger-heading span:nth-child(4),.account-cell { display:none; }
  .recent-block .transaction-row { grid-template-columns:1fr 100px 95px; }
  .recent-block .account-cell { display:none; }
  .lab-directions { grid-template-columns:1fr; }
  .lab-card { display:grid; grid-template-columns:1fr 1fr; gap:18px; }
  .lab-card header,.lab-card>p { grid-column:1; }
  .lab-screen { grid-column:2; grid-row:1/3; }
  .account-row { grid-template-columns:40px minmax(130px,1.2fr) minmax(100px,.8fr) minmax(85px,auto) auto; gap:10px; }
  .account-row h2 { font-size:20px; }
}

@media (max-width:720px) {
  :root { --mast-height:58px; }
  .app-shell { display:block; padding-bottom:156px; }
  .masthead { position:sticky; top:0; z-index:12; height:58px; padding:8px 16px; justify-content:space-between; background:var(--paper); border-right:0; }
  .wordmark span { display:block; }
  .month-marker { display:flex; gap:4px; align-items:baseline; }
  .month-marker span { font-size:9px; }.month-marker strong{font-size:14px}
  .masthead-settings { display:flex; }
  .primary-nav { position:fixed; z-index:19; left:0; right:0; bottom:0; top:auto; width:auto; height:64px; flex-direction:row; padding:0; border:0; border-top:1px solid var(--ink); background:var(--paper); }
  .primary-nav button { flex:1; min-width:0; height:64px; display:grid; place-items:center; border:0; border-top:3px solid transparent; font-size:9px; padding:0 2px; }
  .primary-nav button[aria-current="page"] { border-left:0; border-top-color:var(--accent); }
  .primary-nav button[data-nav="settings"] { display:none; }
  .utility-rail { display:none; }
  #workspace { min-height:auto; }
  .toast-root { bottom:74px; }
  /* Floats clear of the 64px nav bar's own height (plus a 12px gap) instead of overlapping
     it — at bottom:8px this 68px circle physically covered the nav row's center button
     (Attention on a 5-item mobile row), stealing its taps at a higher z-index. */
  .scan-launch { right:calc(50% - 34px); bottom:76px; width:68px; height:68px; z-index:21; border-radius:50%; box-shadow:none; border:3px solid var(--paper); }
  .scan-launch:hover { transform:none; box-shadow:none; }
  .home-view { padding:32px 18px 52px; }
  .hero-ledger { display:block; min-height:0; }
  .hero-copy h1 { font-size:clamp(50px,16vw,76px); }
  .hero-note { font-size:12px; }
  .hero-total { min-height:190px; margin-top:30px; padding:24px 0 0; border-left:0; border-top:1px solid var(--rule); }
  .hero-total canvas { left:0; width:100%; }
  .health-strip { grid-template-columns:12px 1fr auto; padding:12px 0; }
  .health-strip>span:nth-child(3) { grid-column:2/4; }.health-strip button{grid-column:3;grid-row:1}
  .daily-loop { display:block; }
  .daily-actions { margin-top:18px; grid-template-columns:1fr 1fr; }
  .home-columns { display:block; padding-top:28px; }
  .summary-row { grid-template-columns:minmax(0,1fr) auto; gap:6px 12px; padding:10px 0; min-height:0; }
  .summary-row .summary-name { grid-column:1; }
  .summary-row .summary-figures { grid-column:2; text-align:right; }
  .summary-row .budget-track { grid-column:1; align-self:center; }
  .summary-row .summary-status { grid-column:2; text-align:right; }
  .summary-row>span:empty { display:none; }
  .month-block { margin-top:38px; padding:0; border-left:0; }
  .recent-block .transaction-row { grid-template-columns:minmax(0,1fr) 96px; min-height:56px; }
  .recent-block .state-cell { display:none; }
  .workspace-head { min-height:auto; padding:28px 18px 22px; flex-wrap:wrap; gap:14px; align-items:flex-end; }
  .workspace-head h1 { font-size:clamp(34px,11vw,50px); }
  .workspace-head .head-note { display:none; }
  .workspace-head>.solid-action { padding:0 10px; font-size:11px; }
  .ledger-tools { display:block; padding:12px 18px; }
  .filter-line { margin-top:10px; justify-content:flex-start; flex-wrap:nowrap; overflow:auto; }
  .ledger-table { padding:10px 18px 0; }
  .ledger-heading { display:none; }
  .transaction-row { grid-template-columns:24px minmax(0,1fr) 96px; min-height:58px; gap:8px; }
  .transaction-row .state-cell,.transaction-row .account-cell { display:none; }
  .merchant-cell strong { font-size:13px; }
  .result-count { padding:12px 18px 8px; }
  .ledger-more { margin:0 18px 45px; }
  .vault-search { display:block; padding:12px 18px; }
  .vault-search p { margin-top:9px; }
  .purchase-grid { grid-template-columns:1fr; padding:14px 18px 8px; }
  .bulk-bar { padding:8px 18px; flex-wrap:wrap; }
  .attention-list { padding:0 18px 40px; }
  .attention-item { grid-template-columns:34px 1fr; padding:20px 0; }
  .attention-rank { padding-top:5px; }.attention-actions{grid-column:2;flex-wrap:wrap}.attention-item h2{font-size:25px}
  .match-workspace { display:block; padding:24px 18px; }
  .match-side { padding:0; }
  .match-score { margin:24px 0; }.match-score i{margin-top:5px;transform:rotate(90deg)}
  .bank-side { border-top:1px solid var(--ink); padding-top:20px; }
  .match-decision { padding:16px 18px 96px; flex-wrap:wrap; }.match-decision p{width:100%;}
  .account-ledger { padding:10px 18px; }
  .account-actions{align-items:stretch;flex-direction:column}.account-actions>button{min-height:42px}.account-actions>[data-mobile-hide]{display:none}
  .account-row { grid-template-columns:40px 1fr auto; padding:15px 0; }.account-health,.account-balance{display:none}.account-row>button{grid-column:3;grid-row:1/3}
  .category-register{margin:24px 18px}.provider-note { margin:15px 18px 45px; grid-template-columns:1fr; }
  .budget-register { margin:0 18px 28px; }
  .budget-row { grid-template-columns:minmax(0,1fr) auto auto; gap:10px; font-size:12px; }
  .scanner-top span { display:none; }
  .viewfinder { inset:100px 22px 160px; }
  .scanner-dock { grid-template-columns:1fr 86px 1fr; }
  .scanner-dock>p { font-size:9px; }
  .scanner-tools { top:76px; left:12px; right:12px; justify-content:center; }
  .scanner-tools>button,.scanner-tools .compact { padding:0 8px; }
  .capture-review { bottom:140px; grid-template-columns:76px 1fr; gap:10px; padding:13px; }
  .capture-original { width:76px; height:106px; }
  .capture-facts { grid-template-columns:1.4fr 1fr; }.capture-facts div:last-child { display:none; }
  .capture-facts strong { font-size:17px; }
  .capture-review-actions { justify-content:stretch; }.capture-review-actions button { flex:1; padding:0 8px; }
  .inbox-card { grid-template-columns:1fr; gap:10px; }.inbox-actions button { width:100%; }
  .stability strong { display:none; }
  .detail-sheet form { padding:30px 24px; }.detail-sheet h1{font-size:42px}.history-strip{padding:22px 24px 50px}.delete-strip{padding:0 24px 36px}.alloc-strip{padding:22px 24px}.reconcile-switch,.alloc-pick{flex-wrap:wrap}
  .lab-directions { padding:24px 18px; }.lab-card{display:block}.lab-screen{height:240px}.lab-review{margin:0 18px 45px;overflow:auto}
}

@media (prefers-reduced-motion:reduce) { *,*::before,*::after { scroll-behavior:auto!important; animation:none!important; transition:none!important; } }
.sync-flag { display:block; margin-top:3px; color:var(--accent-strong); font-size:10px; letter-spacing:.04em; text-transform:uppercase; }
.duplicate-badge { display:inline-block; padding:1px 7px; border:1px solid var(--accent-strong); color:var(--accent-strong); font-size:10px; letter-spacing:.04em; text-transform:uppercase; }
.detail-body { padding:38px 40px; }
.detail-body form { padding:0; }
.detail-body h1 { margin-bottom:28px; font-size:42px; }
.detail-facts div { display:flex; justify-content:space-between; gap:18px; padding:9px 0; border-bottom:1px solid var(--rule); font-size:13px; }
.detail-facts dt { color:var(--ink-muted); }
/* Quiet ok/warn/error treatment for status readouts (issue #16): a colored
   word inline with the fact, never a badge or icon. */
.detail-facts dd[data-state="warn"] { color:var(--warning); }
.detail-facts dd[data-state="error"] { color:var(--danger); font-weight:700; }
.form-help[data-state="warn"] { color:var(--warning); }
.detail-body h2 { margin:28px 0 10px; font-size:20px; }
.connection-account { padding:7px 0; border-bottom:1px solid var(--rule); font-size:13px; }
@media (forced-colors:active) { .status-mark,.connection-note span,.viewfinder i { forced-color-adjust:none; } .transaction-row.has-attention::before { background:CanvasText; } }

/* Boot gate and splash */
body[data-gate="pending"] .app-shell, body[data-gate="pending"] .scan-launch,
body[data-gate="locked"] .app-shell, body[data-gate="locked"] .scan-launch { display:none; }
body[data-gate="error"] .masthead, body[data-gate="error"] .primary-nav,
body[data-gate="error"] .utility-rail, body[data-gate="error"] .scan-launch { display:none; }
.noscript-note { max-width:480px; margin:4rem auto; padding:2rem; background:var(--paper-raised); border:1px solid var(--ink); }
.noscript-note h1 { font-size:1.5rem; margin-bottom:1rem; }
/* Flex + margin:auto, not grid centering: auto margins collapse when the
   panel overflows a small viewport, keeping its top reachable by scroll. */
.splash { position:fixed; inset:0; z-index:50; overflow:auto; display:flex; padding:24px; background:var(--paper); }
.splash-panel { width:min(480px,100%); margin:auto; padding:34px 36px 30px; background:var(--paper-raised); border:1px solid var(--ink); border-bottom:4px solid var(--accent); }
.splash-brand { display:flex; align-items:center; gap:9px; margin-bottom:26px; font:700 12px/1.1 var(--body); letter-spacing:.01em; text-transform:uppercase; }
.splash-brand svg { width:29px; height:29px; fill:currentcolor; }
.splash-brand svg path:last-child { fill:var(--accent); }
.splash-panel h1 { font-size:clamp(40px,9vw,54px); margin-bottom:14px; }
.splash-panel h1 em { color:var(--accent); font-weight:400; }
.splash-note { margin-bottom:22px; color:var(--ink-muted); font-size:13px; line-height:1.5; }
.splash-panel label { display:block; margin-bottom:14px; color:var(--ink-muted); font-size:11px; }
.splash-panel input { width:100%; height:42px; margin-top:6px; padding:0 8px; border:1px solid var(--rule); border-radius:0; background:var(--paper); color:var(--ink); }
.splash-panel form>.solid-action,.splash-panel>.solid-action { width:100%; margin-top:6px; }
.splash-demo { margin-top:24px; padding-top:18px; border-top:1px solid var(--rule); }
.splash-demo button { padding:0; color:var(--accent-strong); font-weight:700; }
.splash-demo small { display:block; margin-top:6px; color:var(--ink-muted); font-size:11px; }
.splash-footer { display:flex; justify-content:space-between; align-items:center; margin-top:24px; padding-top:16px; border-top:1px solid var(--rule); font-size:11px; color:var(--ink-muted); }
.splash-footer a { color:var(--ink-muted); text-decoration:underline; }

/* Settings */
.settings-blocks { display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:34px 44px; padding:34px clamp(24px,5vw,68px) 90px; }
/* Only the connected account/AI/data blocks ever swap loading text for fetched facts —
   reserve their space while that fetch is in flight so it doesn't jump on arrival.
   Unauthenticated and demo workspaces render their (static) content immediately and
   never need this: forcing it on them would just add empty space, against
   design/anti-patterns.md's "density is a feature" position. */
.settings-blocks[data-loading] .settings-block { min-height:168px; }
.settings-block .section-rule { margin-bottom:14px; }
.settings-field { display:block; margin-bottom:14px; color:var(--ink-muted); font-size:11px; }
.settings-field select, .settings-field input { display:block; width:100%; height:42px; margin-top:6px; padding:0 8px; border:1px solid var(--rule); border-radius:0; background:var(--paper); color:var(--ink); font:13px var(--body); }
.settings-field-inline { display:flex; align-items:center; gap:8px; margin:-6px 0 14px; color:var(--ink-muted); font-size:12px; }
.settings-field-inline input { width:auto; height:auto; }
.settings-subhead { margin:26px 0 14px; padding-top:18px; border-top:1px solid var(--rule); }
.settings-mode { color:var(--ink-muted); font-size:13px; }
.provider-card { margin-bottom:22px; padding:16px; border:1px solid var(--rule); }
.provider-card-head { display:flex; justify-content:space-between; align-items:flex-end; gap:12px; }
.provider-card-head .settings-field { flex:1; }
.provider-card-external { margin-top:2px; }
.provider-card-privacy { margin:0 0 12px; padding:10px 12px; border-left:2px solid var(--accent-strong); background:var(--paper-raised); color:var(--ink-muted); font-size:12px; line-height:1.5; }
.settings-actions-inline { min-height:32px; padding:0 10px; border:1px solid var(--rule); font-size:11px; }
.test-result { font-size:12px; align-self:center; }
.test-result[data-state="ok"] { color:var(--positive); }
.test-result[data-state="fail"] { color:var(--danger); }
.fallback-chain-head { display:flex; justify-content:space-between; align-items:center; margin:26px 0 14px; padding-top:18px; border-top:1px solid var(--rule); }
.session-row { display:flex; justify-content:space-between; align-items:center; gap:14px; padding:10px 0; border-bottom:1px solid var(--rule); }
.session-row strong { font-size:13px; font-weight:600; }
.session-row small { display:block; margin-top:3px; color:var(--ink-muted); font:11px var(--data); }
.session-chip { flex:none; padding:2px 8px; border:1px solid var(--positive); color:var(--positive); font:700 10px var(--data); text-transform:uppercase; letter-spacing:.06em; }
.notification-log-row { padding:10px 0; border-bottom:1px solid var(--rule); }
.notification-log-row strong { font-size:13px; font-weight:600; }
.notification-log-row small { display:block; margin-top:2px; color:var(--ink-muted); font:11px var(--data); }
.notification-log-row p { margin:4px 0 0; font-size:12px; line-height:1.5; color:var(--ink-muted); }
.settings-actions { display:flex; flex-wrap:wrap; gap:10px; margin-top:16px; }
.settings-actions button:not(.solid-action) { min-height:42px; padding:0 14px; border:1px solid var(--rule); }
.settings-confirm { margin-top:14px; padding:16px; border:1px solid var(--danger); }
.settings-confirm p { margin:0 0 10px; font-size:12px; line-height:1.5; }
.settings-confirm button { min-height:42px; padding:0 10px; }
.settings-confirm button+button { margin-left:14px; color:var(--danger); font-weight:700; }
.connection-disconnect { display:flex; flex-direction:column; align-items:flex-end; flex:none; }
.connection-disconnect .settings-confirm { width:260px; text-align:left; }
.simplefin-steps { margin:0 0 22px; padding-left:20px; color:var(--ink-muted); font-size:12px; line-height:1.6; }
.simplefin-steps li { margin-bottom:8px; }
.mx-widget { width:100%; height:520px; border:1px solid var(--rule); }
@media (max-width:720px) { .settings-blocks { display:block; padding:24px 18px 60px; } .settings-block { margin-bottom:30px; } .splash-panel { padding:26px 22px; } .connection-disconnect .settings-confirm { width:auto; } }

/* Reports and Exports (Issues #110, #111) */
.reports-view { padding-bottom:60px; }
.report-controls { display:flex; flex-wrap:wrap; gap:24px; padding:20px clamp(24px,5vw,68px); background:var(--paper-raised); border-bottom:1px solid var(--rule); }
.report-controls .control-group { display:flex; align-items:center; gap:12px; }
.report-controls .control-label { font-size:11px; text-transform:uppercase; letter-spacing:.05em; color:var(--ink-muted); }
.report-controls .chip-row { display:flex; gap:6px; }
.report-container { padding:24px clamp(24px,5vw,68px); }
.report-header-line { display:grid; grid-template-columns:1fr 200px 180px; padding:12px 16px; font-size:11px; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-muted); border-bottom:2px solid var(--ink); }
.report-header-line .right, .report-figures { text-align:right; }
.report-rows-list { display:flex; flex-direction:column; }
.report-row { display:grid; grid-template-columns:1fr 200px 180px; align-items:center; padding:16px; border-bottom:1px solid var(--rule); transition:background .1s ease; }
.report-row:hover { background:var(--paper-raised); }
.report-identity strong { display:block; font-size:15px; }
.report-identity small { display:block; color:var(--ink-muted); font-size:12px; margin-top:3px; }
.report-slug { display:inline-block; font-family:var(--data); color:var(--accent-strong); margin-left:6px; font-size:12px; }
.report-evidence { display:flex; flex-direction:column; gap:4px; }
.report-evidence .evidence-count { color:var(--ink-muted); font-size:12px; }
.badge-warn { display:inline-flex; align-items:center; width:fit-content; padding:2px 8px; border:1px solid var(--warning); color:var(--warning); background:rgba(217,119,6,.08); font:600 11px var(--body); }
.badge-clean { display:inline-flex; align-items:center; width:fit-content; padding:2px 8px; border:1px solid var(--rule); color:var(--ink-muted); font:11px var(--body); }
.report-figures .currency-label { font-size:11px; color:var(--ink-muted); margin-right:6px; }
.report-figures .report-total { font:700 16px/1 var(--data); font-variant-numeric:tabular-nums; }
.export-status-panel { margin-top:20px; padding:18px; border:1px solid var(--rule); background:var(--paper-raised); }
.export-status-panel strong { display:block; font-size:14px; margin-bottom:4px; }
.export-status-panel p { margin:0 0 12px; font-size:12px; color:var(--ink-muted); }
@media (max-width:720px) {
  .report-header-line { display:none; }
  .report-row { grid-template-columns:1fr; gap:12px; padding:16px 0; }
  .report-figures { text-align:left; }
  .report-controls { padding:16px 18px; }
  .report-container { padding:16px 18px; }
}
