:root{
  --bg:#f4f6fa; --card:#fff; --ink:#1f2733; --muted:#6b7686; --line:#e3e8ef;
  --brand:#2f5496; --accent:#0d9488; --danger:#c0392b; --ok:#2e7d32;
  --radius:10px;
}
/* dark theme — overrides the palette vars + the few hardcoded light surfaces */
[data-theme="dark"]{
  --bg:#0f141b; --card:#1a212b; --ink:#e4e8ee; --muted:#9aa4b2; --line:#2a333f;
  --accent:#2dd4bf; --danger:#f1707b; --ok:#6cc283;
}
[data-theme="dark"] a{color:#6ea8fe}
[data-theme="dark"] .tile,
[data-theme="dark"] .filterbar,
[data-theme="dark"] .kpi,
[data-theme="dark"] .tab,
[data-theme="dark"] .btn.ghost,
[data-theme="dark"] input,
[data-theme="dark"] select,
[data-theme="dark"] textarea{background:var(--card)}
[data-theme="dark"] input,
[data-theme="dark"] select,
[data-theme="dark"] textarea{border-color:#3a4554;color:var(--ink)}
[data-theme="dark"] table.grid thead th{background:#222b37;color:#c7d0db}
[data-theme="dark"] table.grid tbody tr:hover{background:#222b37}
[data-theme="dark"] table.lines tfoot .totrow td{background:#222b37}
[data-theme="dark"] .split-group input[readonly]{background:#222b37;color:#c7d0db}
[data-theme="dark"] tr.editrow>td{background:#1d2942}
[data-theme="dark"] .tile.t-amber .tval{color:#e0a106}
[data-theme="dark"] .tile.t-green .tval{color:#6cc283}
[data-theme="dark"] .btn.ghost{color:#6ea8fe;border-color:#6ea8fe}
[data-theme="dark"] .btn.ghost:hover{background:#222b37}
[data-theme="dark"] .kpi.accent{background:#10312e}
[data-theme="dark"] button.link{color:#6ea8fe}
[data-theme="dark"] button.link.danger,[data-theme="dark"] .danger{color:var(--danger)}

*{box-sizing:border-box}
body{margin:0;font:15px/1.5 -apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;
  background:var(--bg);color:var(--ink)}
a{color:var(--brand);text-decoration:none}
a:hover{text-decoration:underline}

.topbar{display:flex;justify-content:space-between;align-items:center;
  background:var(--brand);color:#fff;padding:.7rem 1.4rem}
.topbar .brand{display:flex;align-items:center;gap:.6rem;color:#fff;font-weight:700;font-size:1.05rem}
.topbar .brand:hover{text-decoration:none}
.brand-logo{height:32px;width:auto;display:block;background:#fff;padding:5px 10px;border-radius:7px}
.brand-word{color:#fff;font-weight:600}
.topbar nav{display:flex;gap:1.2rem;align-items:center}
.topbar nav a{color:#dfe7f5}
.topbar nav a:hover{color:#fff}
.theme-toggle{background:rgba(255,255,255,.15);border:0;color:#fff;font-size:1rem;line-height:1;
  width:34px;height:34px;border-radius:8px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.theme-toggle:hover{background:rgba(255,255,255,.3)}

main{max-width:1680px;margin:1.5rem auto;padding:0 1.2rem}
h1{margin:.2rem 0}
h2{margin:.2rem 0;font-size:1.15rem}
h3{margin:.6rem 0;font-size:1rem}
.sub,.muted{color:var(--muted)}
.muted{font-weight:400;font-size:.85em}
.hint{color:var(--muted);font-size:.85rem;margin:.3rem 0}

.btn{display:inline-block;background:var(--brand);color:#fff;border:0;border-radius:8px;
  padding:.5rem .9rem;font-size:.9rem;cursor:pointer}
.btn:hover{background:#26427a;text-decoration:none}
/* a disabled submit must not look clickable — used by the bill upload drop zone */
.btn:disabled,.btn:disabled:hover{background:#aab4c4;cursor:not-allowed}
.btn.small{padding:.35rem .7rem;font-size:.85rem}
.btn.ghost{background:#fff;color:var(--brand);border:1px solid var(--brand)}
.btn.ghost:hover{background:#eef2fb}
button.link{background:none;border:0;color:var(--brand);cursor:pointer;font-size:.85rem;padding:0}
button.link.danger,.danger{color:var(--danger)}
.ok{color:var(--ok)}
.row-actions{white-space:nowrap}
.inline-delete{display:inline;margin-left:.6rem}
.inline-delete button.link{font-size:.95rem;line-height:1;opacity:.45}
.inline-delete button.link:hover{opacity:1}
.topbar nav .signout{font-size:.85rem;opacity:.85}

/* styled confirmation modal */
.modal-overlay{position:fixed;inset:0;background:rgba(15,20,27,.55);
  display:flex;align-items:center;justify-content:center;z-index:1000;padding:1rem}
.modal-overlay[hidden]{display:none}
.modal-box{background:var(--card);color:var(--ink);border:1px solid var(--line);
  border-radius:var(--radius);max-width:420px;width:100%;padding:1.4rem 1.4rem 1.1rem;
  box-shadow:0 18px 48px rgba(0,0,0,.28)}
.modal-text{margin:0 0 1.2rem;font-size:1rem;line-height:1.45}
.modal-actions{display:flex;justify-content:flex-end;gap:.6rem}
.btn.danger-btn{background:var(--danger)}
.btn.danger-btn:hover{background:#a93226}

/* standalone login page */
.login-page{display:flex;min-height:100vh}
.login-wrap{margin:auto;width:100%;max-width:380px;padding:1.5rem}
.login-card{display:flex;flex-direction:column;gap:.2rem;padding:1.8rem}
.login-card .login-logo{height:44px;width:auto;max-width:100%;align-self:flex-start;
  display:block;margin-bottom:.5rem}
/* sized to keep "Internal Tools and Apps" on one line in the 380px card */
.login-card h1{margin:0 0 .1rem;font-size:1.5rem;line-height:1.2}
.login-card label{display:flex;flex-direction:column;gap:.25rem;margin:.6rem 0 0;font-size:.85rem;color:var(--muted)}
.login-card input{font-size:1rem}
.login-card .btn{margin-top:1.1rem}
.login-card .banner{margin:.6rem 0 0}

.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:1.1rem;margin-bottom:1.2rem}
.empty{text-align:center;padding:3rem;color:var(--muted)}

/* help / instructions page */
.card.help{max-width:860px}
.card.help h2{margin:.1rem 0 .6rem;font-size:1.1rem}
.card.help h3{margin:1rem 0 .4rem}
.card.help ul,.card.help ol{margin:.3rem 0;padding-left:1.3rem}
.card.help li{margin:.35rem 0}
.card.help table.grid{margin:.4rem 0 .2rem}
.card.help code{background:rgba(127,127,127,.15);padding:.05rem .3rem;border-radius:4px;font-size:.92em}

/* dashboard summary tiles — metric cards with a colour accent */
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.8rem;margin:.6rem 0 1.3rem}
.tile{position:relative;background:#fff;border:1px solid var(--line);border-radius:12px;
  padding:.8rem 1rem .8rem 1.15rem;box-shadow:0 1px 3px rgba(16,24,40,.05);overflow:hidden}
.tile::before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;background:var(--brand)}
.tile .tlabel{display:block;color:var(--muted);font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;font-weight:600}
.tile .tval{display:block;font-size:1.55rem;font-weight:700;line-height:1.35;color:var(--ink);font-variant-numeric:tabular-nums}
.tile .tsub{display:block;color:var(--muted);font-size:.72rem}
.tile.t-blue::before{background:var(--brand)}
.tile.t-teal::before{background:var(--accent)}
.tile.t-amber::before{background:#e0a106}
.tile.t-amber .tval{color:#a9730a}
.tile.t-green::before{background:var(--ok)}
.tile.t-green .tval{color:#1e6b2b}
.tile.t-grey::before{background:#9aa4b2}

/* dashboard filter bar */
.filterbar{display:flex;align-items:flex-end;gap:.8rem;flex-wrap:wrap;margin:0 0 1rem;
  padding:.6rem .8rem;background:#fff;border:1px solid var(--line);border-radius:8px}
.filterbar label{display:flex;flex-direction:column;gap:.2rem;font-size:.78rem;color:#3a4554}
.filterbar .clear{font-size:.82rem}
.filterbar .filter-count{margin-left:auto;color:var(--muted);font-size:.82rem;align-self:center}

table.grid{width:100%;border-collapse:collapse;font-size:.88rem}
table.grid th,table.grid td{padding:.45rem .55rem;border-bottom:1px solid var(--line);text-align:left}
table.grid thead th{background:#eef1f6;color:#33415a;font-weight:600;white-space:nowrap}
table.grid tbody tr:hover{background:#f7f9fc}
table.grid .num{text-align:right;font-variant-numeric:tabular-nums}
table.grid.compact td,table.grid.compact th{padding:.25rem .5rem}
table.lines tfoot .totrow td{border-top:2px solid var(--line);font-weight:700;background:#f7f9fc}
.lines-wrap{overflow-x:auto;max-width:100%}
/* compact line tables so the many columns fit the wider container without scrolling */
table.lines{width:auto;min-width:100%;font-size:.8rem}
table.lines th,table.lines td{padding:.3rem .45rem}
table.lines th,table.lines td.num{white-space:nowrap}
table.lines td:nth-child(2){white-space:normal;min-width:130px}

.head-row{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;flex-wrap:wrap}
.views{display:flex;gap:.4rem;align-items:center}
.tab{padding:.35rem .8rem;border:1px solid var(--line);border-radius:20px;background:#fff;color:var(--muted)}
.tab.active{background:var(--brand);color:#fff;border-color:var(--brand)}
.tab:hover{text-decoration:none}

.totals{display:flex;gap:1rem;flex-wrap:wrap;margin:1rem 0 1.4rem}
.kpi{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:.8rem 1.1rem;min-width:180px}
.kpi span{display:block;color:var(--muted);font-size:.78rem;text-transform:uppercase;letter-spacing:.03em}
.kpi strong{font-size:1.35rem}
.kpi.accent{border-color:var(--accent);background:#effbf9}
.kpi.accent strong{color:var(--accent)}

.form .row{display:flex;gap:1rem;flex-wrap:wrap;margin-bottom:.8rem}
.form label{display:flex;flex-direction:column;gap:.25rem;font-size:.85rem;color:#3a4554}
input,select,textarea{font:inherit;padding:.4rem .5rem;border:1px solid #cfd6e0;border-radius:6px;background:#fff}
input:focus,select:focus,textarea:focus{outline:2px solid #bcd0f7;border-color:var(--brand)}
fieldset{border:1px solid var(--line);border-radius:8px;margin:1rem 0;padding:.8rem 1rem}
legend{font-weight:600;padding:0 .4rem}
.split{display:flex;gap:1.2rem;align-items:flex-end;flex-wrap:wrap}
.split label{flex-direction:column}
.actions{display:flex;gap:1rem;align-items:center;margin-top:1rem}

.inline-form{display:flex;gap:.6rem;align-items:flex-end;flex-wrap:wrap;margin:.5rem 0}
.inline-form label{display:flex;flex-direction:column;font-size:.78rem;color:#3a4554;gap:.2rem}
.inline-form .desc{flex:1;min-width:220px}
.inline-form label.grow{flex:1;min-width:220px}
.inline-form label.grow .desc{width:100%;min-width:0}
/* field title sitting above an inline-form input, with its little (i) help icon */
.inline-form .fld{display:inline-flex;align-items:center;gap:.3rem;white-space:nowrap;
  font-weight:600;color:#3a4554}
/* ✎ toggle that unlocks an auto-filled (readonly) field */
.lockedit{background:none;border:0;color:var(--muted);cursor:pointer;font-size:.8rem;
  line-height:1;padding:0;flex:none}
.lockedit:hover{color:var(--brand)}
.lockedit.on{color:var(--brand)}
input.locked{background:#eef1f6;color:#4a5566;cursor:default}
[data-theme="dark"] input.locked{background:#222b37;color:#c7d0db}
details.addline{margin:.6rem 0}
details.addline summary{cursor:pointer;color:var(--brand);font-size:.9rem}

/* little (i) help icon with a hover tooltip */
.info{display:inline-flex;align-items:center;justify-content:center;flex:none;
  width:15px;height:15px;border-radius:50%;background:var(--muted);color:#fff;
  font:italic 700 .66rem/1 Georgia,"Times New Roman",serif;cursor:help;position:relative}
.info:hover{background:var(--brand)}
.info::after{content:attr(data-tip);position:absolute;left:50%;bottom:calc(100% + 8px);
  transform:translateX(-50%);width:max-content;max-width:240px;white-space:normal;text-align:left;
  background:#1f2733;color:#fff;font-style:normal;font-weight:400;font-size:.75rem;line-height:1.4;
  padding:.5rem .65rem;border-radius:6px;box-shadow:0 8px 22px rgba(0,0,0,.28);
  opacity:0;visibility:hidden;transition:opacity .12s ease;z-index:100;pointer-events:none}
.info::before{content:"";position:absolute;left:50%;bottom:calc(100% + 3px);transform:translateX(-50%);
  border:5px solid transparent;border-top-color:#1f2733;
  opacity:0;visibility:hidden;transition:opacity .12s ease;z-index:100;pointer-events:none}
.info:hover::after,.info:hover::before{opacity:1;visibility:visible}
[data-theme="dark"] .info::after{background:#0b0f14}
[data-theme="dark"] .info::before{border-top-color:#0b0f14}
[data-theme="dark"] .inline-form .fld{color:#c7d0db}

.claim-panel{margin-top:1rem;padding-top:.8rem;border-top:1px dashed var(--line)}
.claim-summary{display:flex;gap:1.5rem;flex-wrap:wrap;margin:.2rem 0 .4rem}
.claim-summary p{margin:.1rem 0}
.claim-summary .lbl{display:inline-block;min-width:96px;font-weight:600;color:#3a4554}
.retailer{padding-bottom:1rem}

.pill{display:inline-block;font-size:.72rem;padding:.12rem .55rem;border-radius:20px;
  background:#eef1f6;color:#4a5566;vertical-align:middle;margin-left:.3rem}
/* workflow status colour groups */
.pg-grey{background:#e2e3e5;color:#41464b}
.pg-red{background:#f8d7da;color:#842029}
.pg-amber{background:#fff3cd;color:#8a6d00}
.pg-blue{background:#cfe2ff;color:#084298}
.pg-green{background:#d1e7dd;color:#0f5132}

/* 'whose turn' hint shown next to a status */
.nexthint{color:var(--muted);font-size:.82rem;font-weight:400;margin-left:.5rem}
.workflow{padding:.7rem 1.1rem}
.workflow .inline-form{margin:0;align-items:center}

.rowactions{display:flex;gap:.5rem;align-items:center;white-space:nowrap}
.rowactions form{display:inline}
tr.editrow>td{background:#f0f5ff;border-bottom:2px solid var(--line)}
tr.editrow .inline-form{margin:.4rem 0;gap:.5rem .8rem}
tr.editrow label.grow{flex:1;min-width:200px}

td.cell-up{background:#d1e7dd;color:#0f5132;font-weight:600}
td.cell-down{background:#f8d7da;color:#842029;font-weight:600}

.attachments{margin-top:.9rem;padding-top:.7rem;border-top:1px dashed var(--line)}
.attachments h4{margin:.2rem 0 .4rem;font-size:.9rem}
.attachments ul.files{list-style:none;padding:0;margin:.2rem 0 .6rem}
.attachments ul.files li{display:flex;align-items:center;gap:.5rem;padding:.15rem 0}
.attachments ul.files form{display:inline}

.split-group{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;border:1px solid var(--line);border-radius:8px;padding:.3rem .6rem;margin:0}
.split-group.wide{margin:1rem 0;padding:.6rem .9rem}
.split-group legend{font-size:.78rem;font-weight:600;padding:0 .3rem}
.split-group label{font-size:.78rem;color:#3a4554}
.split-group label.chk{display:flex;align-items:center;gap:.3rem}
.split-group input[readonly]{background:#eef1f6;color:#4a5566}
.split-total{font-size:.8rem;font-weight:600}
.split-total.ok{color:var(--ok)}
.split-total.bad{color:var(--danger)}

.banner{padding:.6rem 1rem;border-radius:8px;margin-bottom:1rem;font-size:.9rem}
.banner.error{background:#f8d7da;color:#842029;border:1px solid #f1aeb5}

.delete-promo{margin:2rem 0}

/* ---- landing page (tool picker) -------------------------------------------- */
.home-title{margin:.6rem 0 1.2rem;font-size:1.5rem;font-weight:600}
.toolgrid{display:grid;gap:1.1rem;
  grid-template-columns:repeat(auto-fill,minmax(230px,1fr))}
.toolcard{display:flex;flex-direction:column;justify-content:center;gap:.5rem;
  min-height:170px;padding:1.3rem;border-radius:18px;border:1px solid var(--line);
  background:var(--card);color:var(--ink);text-decoration:none;
  transition:transform .12s ease,box-shadow .12s ease,border-color .12s ease}
.toolcard:hover{text-decoration:none;transform:translateY(-2px);
  border-color:var(--brand);box-shadow:0 6px 18px rgba(47,84,150,.14)}
.toolcard-title{font-size:1.05rem;font-weight:600}
.toolcard-blurb{font-size:.85rem;color:var(--muted);line-height:1.45}

/* ---- vendor bill importer -------------------------------------------------- */
.uploadbar,.downloadbar{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;
  margin:1rem 0;padding:.9rem 1.1rem;border:1px solid var(--line);
  border-radius:var(--radius);background:var(--card)}
.uploadbar{align-items:stretch}

/* Drop zone. Without JS the .enhanced class is never added, so the bare file
   input shows and everything below is inert. */
.dropzone{flex:1;min-width:260px;display:flex;align-items:center;gap:.6rem}
.dropzone.enhanced{flex-direction:column;justify-content:center;gap:.25rem;
  padding:1.4rem 1rem;cursor:pointer;text-align:center;
  border:2px dashed var(--line);border-radius:var(--radius);
  transition:border-color .12s ease,background .12s ease}
.dropzone.enhanced:hover{border-color:var(--brand)}
.dropzone.enhanced.dragging{border-color:var(--brand);background:#eef3fb}
/* visually hidden, still focusable and still the control the form posts */
.dropzone.enhanced input[type=file]{position:absolute;width:1px;height:1px;
  padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.dropzone-prompt{display:none;flex-direction:column;gap:.15rem;pointer-events:none}
.dropzone.enhanced .dropzone-prompt{display:flex}
.dropzone-lead{font-weight:600}
.dropzone-sub{font-size:.82rem;color:var(--muted)}
.dropzone-files{font-size:.85rem;color:var(--brand);font-weight:600;
  word-break:break-all;pointer-events:none}
.dropzone.enhanced.dragging .dropzone-lead{color:var(--brand)}

[data-theme="dark"] .dropzone.enhanced.dragging{background:#1d2942}
[data-theme="dark"] .dropzone-files{color:#6ea8fe}
.banner.warn{background:#fff3cd;color:#8a6d00;border:1px solid #ffe69c}
.pill.warn{background:#fff3cd;color:#8a6d00}
/* numbers the CSV will differ on, so they get looked at rather than scrolled past */
table.grid td.num.differs{color:#8a6d00;font-weight:600}
table.grid tr.flagged td{background:#fffdf5}
table.grid tr.warnrow td{background:#fffdf5;border-bottom:1px solid var(--line);
  padding-top:.15rem;padding-bottom:.5rem}
.warnline{font-size:.82rem;color:#8a6d00}
.warnline::before{content:"⚠ ";}
.chip{display:inline-block;font-size:.75rem;padding:.1rem .5rem;margin:0 .25rem .15rem 0;
  border-radius:6px;background:#eef1f6;color:#4a5566;font-variant-numeric:tabular-nums}
table.grid tfoot .totrow td{border-top:2px solid var(--line);font-weight:600;
  background:#f7f9fc}

[data-theme="dark"] .toolcard{background:var(--card)}
[data-theme="dark"] .uploadbar,[data-theme="dark"] .downloadbar{background:var(--card)}
[data-theme="dark"] .banner.warn{background:#3a2f05;color:#e8cf7a;border-color:#5a4a0d}
[data-theme="dark"] .pill.warn{background:#3a2f05;color:#e8cf7a}
[data-theme="dark"] table.grid td.num.differs{color:#e0a106}
[data-theme="dark"] table.grid tr.flagged td{background:#232019}
[data-theme="dark"] table.grid tr.warnrow td{background:#232019}
[data-theme="dark"] .warnline{color:#e0a106}
[data-theme="dark"] .chip{background:#222b37;color:#c7d0db}
[data-theme="dark"] table.grid tfoot .totrow td{background:#222b37}

/* ---- user management ------------------------------------------------------- */
.topbar nav .whoami{font-size:.85rem;opacity:.85;max-width:200px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.formcard{max-width:640px;padding:1.3rem;display:flex;flex-direction:column;gap:.9rem;
  margin:1rem 0}
.formcard label{display:flex;flex-direction:column;gap:.3rem;font-size:.85rem;
  color:var(--muted)}
.formcard label.chk{flex-direction:row;align-items:center;gap:.45rem;color:var(--ink)}
.formcard input[type=text],.formcard input[type=email],.formcard select{font-size:1rem}
.formact{display:flex;gap:.8rem;align-items:center;margin:1rem 0;max-width:640px}
.formact form{display:inline}
/* the set-password link: wide, readonly, obviously copyable */
.setlink{max-width:640px;padding:1.1rem;margin:1rem 0}
.copyrow{display:flex;gap:.6rem;margin:.5rem 0}
.copyrow input{flex:1;font-family:ui-monospace,Consolas,monospace;font-size:.82rem}
.denied{max-width:520px;padding:1.6rem;margin:2rem auto;text-align:center}
.denied h1{margin-bottom:.6rem}
