/* Quanby Operations Dashboard — plain CSS, no external assets */
:root{--navy:#0b2d55;--navy2:#123c6e;--blue:#1673c4;--ink:#1d2939;--mut:#667085;--line:#e4e7ec;--bg:#f3f5f9;--card:#fff;
--red:#b42318;--redbg:#fee4e2;--amb:#93590b;--ambbg:#fef0c7;--grn:#067647;--grnbg:#dcfae6;--r:10px;--sh:0 1px 2px rgba(16,24,40,.06),0 1px 3px rgba(16,24,40,.08)}
*{box-sizing:border-box}html,body{margin:0}body{font:14px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;background:var(--bg);color:var(--ink)}
a{color:var(--blue);text-decoration:none}a:hover{text-decoration:underline}
h1{font-size:22px;margin:0 0 4px;color:var(--navy)}h2{font-size:15px;margin:0}h3{font-size:14px;margin:0 0 10px;color:var(--navy)}
.ico{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;vertical-align:-4px}
/* shell */
.navtoggle{display:none}
.sidebar{position:fixed;inset:0 auto 0 0;width:240px;background:var(--navy);color:#c9d7ea;overflow-y:auto;z-index:30;transition:transform .2s}
.sidebar .logo{background:#fff;padding:14px 16px;display:flex;align-items:center;justify-content:space-between}.sidebar .logo img{height:40px;display:block}
.sidebar nav{padding:8px 10px 24px}.grp{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#7f9cc2;margin:16px 10px 6px}
.sidebar nav a,.sidebar nav .locked{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:7px;color:#dbe6f4;font-size:13.5px}
.sidebar nav a:hover{background:var(--navy2);text-decoration:none;color:#fff}.sidebar nav a.on{background:#1b4f8c;color:#fff;font-weight:600}
.sidebar nav .locked{color:#6f8bb0;cursor:not-allowed}.sidebar nav .locked .ico:last-child{margin-left:auto;width:14px;height:14px}
.you{margin-left:auto;font-size:10px;background:#2b6cb0;color:#fff;border-radius:8px;padding:0 6px}
.closenav,.burger,.scrim{display:none}
.shell{margin-left:240px;min-height:100vh}
.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:14px;background:#fff;border-bottom:1px solid var(--line);padding:10px 24px}
.apptitle{font-weight:600;color:var(--navy)}.who{margin-left:auto;display:flex;align-items:center;gap:10px}
.avatar{width:32px;height:32px;border-radius:50%;background:var(--navy);color:#fff;display:grid;place-items:center;font-weight:700}
.whotext{display:flex;flex-direction:column;line-height:1.2}.whotext small{color:var(--mut);font-size:12px}
main{padding:24px;max-width:1440px}
.authmain{max-width:420px;margin:60px auto;text-align:center}.authlogo{height:56px;margin-bottom:16px}.authmain .card{text-align:left}
/* hub */
.hero{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-bottom:18px}.hero p{margin:0}
.kpi{background:linear-gradient(135deg,var(--navy),#1b5a9c);color:#fff;border-radius:var(--r);padding:14px 20px;min-width:260px;box-shadow:var(--sh)}
.kpi span{font-size:12px;opacity:.85;display:block}.kpi b{font-size:24px;display:block}.kpi small{opacity:.7;font-size:11px}
.sec{margin:22px 0 10px;color:var(--navy)}
.today{background:#fff;border-radius:var(--r);box-shadow:var(--sh);padding:14px 16px;margin-bottom:6px}.today h2{display:flex;gap:8px;align-items:center;color:var(--navy);margin-bottom:10px}
.strip{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px}
.chip{flex:none;width:220px;border-radius:8px;padding:9px 12px;border-left:4px solid #98a2b3;background:#f8fafc;color:var(--ink);display:flex;flex-direction:column}
.chip:hover{text-decoration:none;background:#eef4fb}.chip small{color:var(--mut);font-size:11px}.chip span{font-size:12px;color:var(--mut)}
.chip.red{border-color:var(--red);background:#fff6f5}.chip.amber{border-color:#f79009;background:#fffaeb}.chip.cal{border-color:var(--blue)}
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px}
.tile{position:relative;display:flex;gap:12px;align-items:flex-start;background:#fff;border-radius:var(--r);padding:14px;box-shadow:var(--sh);color:var(--ink);border:1px solid transparent}
a.tile:hover{border-color:#b2ccec;text-decoration:none;transform:translateY(-1px)}.tile.own{border-color:var(--blue)}
.tile .tb{display:flex;flex-direction:column;min-width:0}.tile small{color:var(--mut);font-size:12px;line-height:1.35}
.ti{width:38px;height:38px;border-radius:9px;background:#e8f0fa;color:var(--navy);display:grid;place-items:center;flex:none}.ti.big{width:52px;height:52px}.ti.big .ico{width:26px;height:26px}
.tc{margin-left:auto;background:var(--navy);color:#fff;border-radius:12px;padding:0 9px;font-weight:700;font-size:13px}
.tile.locked{opacity:.55;cursor:not-allowed;background:#f2f4f7;box-shadow:none;border:1px dashed #d0d5dd}.tile.locked .ti{background:#e4e7ec;color:#98a2b3}.lk{margin-left:auto;color:#98a2b3}
.cols{display:grid;grid-template-columns:minmax(0,2fr) minmax(300px,1fr);gap:20px}
.panel{background:#fff;border-radius:var(--r);box-shadow:var(--sh);padding:14px 16px;margin-bottom:16px}
.ph{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}.ph h3{margin:0;display:flex;gap:8px;align-items:center}
.count{background:#eef2f7;color:var(--navy);border-radius:10px;padding:0 8px;font-size:12px}.more{font-size:12px;white-space:nowrap}
.empty{color:var(--mut);font-style:italic;margin:6px 0}
.events,.feed,.links{list-style:none;margin:0;padding:0}.events li,.feed li,.links li{display:flex;gap:10px;padding:8px 0;border-top:1px solid var(--line)}
.events li:first-child,.feed li:first-child,.links li:first-child{border-top:0}.events li>span:last-child,.links li{flex-direction:column}
.feed li{flex-wrap:wrap;align-items:baseline;gap:6px}.feed small{width:100%;font-size:11px}.links li{gap:0}.links small{font-size:12px}
.date{width:40px;flex:none;text-align:center;background:#e8f0fa;border-radius:7px;color:var(--navy);line-height:1.1;padding:4px 0}.date b{display:block;font-size:16px}.date small{font-size:10px}
.events small{display:block;font-size:12px}
.stages{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-bottom:8px}
.stage{background:#fff;border-radius:var(--r);padding:12px 14px;box-shadow:var(--sh);color:var(--ink);border-top:4px solid var(--c,#98a2b3)}
.stage:hover{text-decoration:none;box-shadow:0 4px 12px rgba(16,24,40,.12)}.stage b{display:block;font-size:26px;color:var(--c);line-height:1.1}.stage span{font-size:12px;color:var(--mut)}
.s1{--c:#1673c4}.s2{--c:#7a5af8}.s3{--c:#6941c6}.s4{--c:#dc6803}.s5{--c:#b54708}.s6{--c:#0e9384}.s7{--c:#067647}.s8{--c:#b42318}.s9{--c:#667085}
.crumb{font-size:12px;color:var(--mut);margin:0 0 8px}.dhead{display:flex;gap:14px;align-items:center}.actions{display:flex;gap:8px;flex-wrap:wrap}
/* tables */
.tw{overflow-x:auto}
table{width:100%;border-collapse:separate;border-spacing:0;background:#fff;border-radius:var(--r);box-shadow:var(--sh)}
main>table,main>form+table,main>p+table{display:block;overflow:auto;max-height:calc(100vh - 150px)}
th,td{padding:9px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
th{position:sticky;top:0;z-index:1;background:#f2f5f9;font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;color:#475467;font-weight:600}
tbody tr:hover td{background:#f8fbff}tbody tr:last-child td{border-bottom:0}
table.compact{box-shadow:none}table.compact td,table.compact th{padding:7px 8px}.panel table{box-shadow:none}
.r{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}.nw{white-space:nowrap}.muted{color:var(--mut)}.small{font-size:12px}
/* components */
.card{background:#fff;border-radius:var(--r);padding:16px 20px;box-shadow:var(--sh)}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:16px;margin-bottom:16px}
.login{max-width:400px;margin:0 auto}
label{display:block;margin:8px 0;font-weight:600;font-size:13px;color:#344054}
input,select,textarea{display:block;width:100%;padding:8px 10px;border:1px solid #d0d5dd;border-radius:7px;margin-top:4px;font:inherit;background:#fff}
input:focus,select:focus,textarea:focus{outline:2px solid #b2ccec;border-color:var(--blue)}
.filters{display:flex;flex-wrap:wrap;gap:14px;align-items:end;margin-bottom:14px;background:#fff;padding:12px 14px;border-radius:var(--r);box-shadow:var(--sh)}.filters label{margin:0}
.card .filters,.panel .filters{box-shadow:none;padding:0}
.btn{display:inline-block;padding:7px 14px;border:1px solid #d0d5dd;border-radius:7px;background:#fff;cursor:pointer;font:inherit;font-weight:500;color:var(--ink)}
.btn:hover{background:#f2f4f7;text-decoration:none}.btn.sm{padding:4px 10px;font-size:12px}
.primary{background:var(--navy);color:#fff;border-color:var(--navy)}.primary:hover{background:var(--navy2)}
.ok{background:#079455;color:#fff;border-color:#079455}.bad{background:#d92d20;color:#fff;border-color:#d92d20}.btns{display:flex;gap:8px}
.link{background:none;border:0;color:var(--blue);text-decoration:underline;cursor:pointer}.inline{display:inline}
.pill{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;font-weight:600;background:var(--grnbg);color:var(--grn);white-space:nowrap}
.pill.red{background:var(--redbg);color:var(--red)}.pill.amber{background:var(--ambbg);color:var(--amb)}.pill.gray{background:#eaecf0;color:#475467}.pill.green{background:var(--grnbg);color:var(--grn)}
.verdict{font-weight:600;color:var(--amb)}.big{font-size:18px}
.st{display:inline-block;padding:2px 9px;border-radius:12px;font-size:11.5px;font-weight:600;background:#eaecf0;color:#344054;white-space:nowrap}
.st.new{background:#d1e9ff;color:#175cd3}.st.pending-spec-matching{background:#ebe9fe;color:#5925dc}.st.specs-matched{background:#f4ebff;color:#6941c6}
.st.pending-costing{background:var(--ambbg);color:var(--amb)}.st.costed{background:#fdead7;color:#b93815}.st.ready-for-review{background:#ccfbef;color:#107569}
.st.approved{background:var(--grnbg);color:var(--grn)}.st.rejected{background:var(--redbg);color:var(--red)}.st.returned,.st.reopened{background:var(--ambbg);color:var(--amb)}
dl{display:grid;grid-template-columns:110px 1fr;gap:6px}dt{color:var(--mut)}dd{margin:0}ul.crit,ul.log{padding-left:0;list-style:none}ul li{margin:6px 0}
.stats{display:flex;flex-wrap:wrap;gap:12px}.stat{background:#fff;padding:14px 22px;border-radius:var(--r);color:inherit;box-shadow:var(--sh);border-top:4px solid var(--blue)}
.stat:hover{text-decoration:none}.stat b{display:block;font-size:26px;color:var(--navy)}.stat span{font-size:12px;color:var(--mut)}
.err{color:var(--red);background:var(--redbg);padding:8px 12px;border-radius:7px}.okmsg{color:var(--grn);background:var(--grnbg);padding:8px 12px;border-radius:7px}
details summary{cursor:pointer;margin:8px 0;color:var(--blue)}details{overflow-x:auto}table input{padding:5px;margin:0}
.btn:disabled{opacity:.45;cursor:not-allowed}
/* responsive */
@media (max-width:1100px){.cols{grid-template-columns:1fr}}
@media (max-width:860px){
 .sidebar{transform:translateX(-100%);box-shadow:4px 0 24px rgba(0,0,0,.25)}.navtoggle:checked~.sidebar{transform:none}
 .navtoggle:checked~.scrim{display:block;position:fixed;inset:0;background:rgba(16,24,40,.45);z-index:25}
 .closenav{display:block;color:var(--navy);cursor:pointer}.burger{display:block;cursor:pointer;color:var(--navy)}.burger .ico{width:24px;height:24px}
 .shell{margin-left:0}main{padding:16px}.topbar{padding:10px 14px}.whotext,.apptitle{display:none}
 .filters{flex-direction:column;align-items:stretch}.kpi{min-width:0;width:100%}
 main>table,main>form+table,main>p+table{max-height:none}
}
.lockedpage{max-width:520px;margin:40px auto;text-align:center;padding:32px}.lockedpage>.ico{width:44px;height:44px;color:#98a2b3}
.calbtn{display:inline-flex;align-items:center;gap:6px;margin-left:8px;background:#e8f0fa;border-color:#b2ccec;color:var(--navy);font-weight:600}
.calbtn.on,.calbtn:hover{background:var(--navy);color:#fff;border-color:var(--navy)}
.heroact{margin-top:10px!important}.calhero{display:inline-flex;align-items:center;gap:8px;padding:9px 16px}
@media (max-width:860px){.calbtn span{display:none}.calbtn{margin-left:0;padding:6px 9px}.topbar .apptitle+.calbtn{margin-left:4px}}
/* costing steps */
.steps{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:6px 0 12px}.step{display:inline-flex;gap:6px;align-items:center;padding:5px 12px;border-radius:16px;background:#eef2f7;color:#475467;font-size:12.5px;font-weight:600}
.step.on{background:var(--navy);color:#fff}.step.done{background:var(--grnbg);color:var(--grn)}a.step:hover{text-decoration:none;filter:brightness(.97)}
.steps.big .step{padding:10px 16px;font-size:14px;border-radius:var(--r);background:#fff;box-shadow:var(--sh);color:var(--ink)}.steps.big .step b{font-size:20px;color:var(--navy)}.steps.big .step.on{outline:2px solid var(--navy)}.arrow{color:#98a2b3;font-size:18px}
.stepb{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;font-weight:700;white-space:nowrap}.stepb.s1{background:#ebe9fe;color:#5925dc}.stepb.s2{background:var(--ambbg);color:var(--amb)}
.tabs{display:flex;gap:4px;align-items:center;flex-wrap:wrap;border-bottom:1px solid var(--line);margin-bottom:12px}.tabs a{padding:8px 14px;color:#475467;font-weight:600;border-bottom:2px solid transparent;margin-bottom:-1px}
.tabs a.on{color:var(--navy);border-bottom-color:var(--navy)}.tabs a:hover{text-decoration:none;color:var(--navy)}.tabx{margin-left:auto}
.filters form.filters{box-shadow:none;padding:0}
.locked-btn{opacity:.55;cursor:not-allowed;background:#f2f4f7;color:#667085;border:1px dashed #d0d5dd}
/* approvals + price requests */
.badge{margin-left:auto;background:#f04438;color:#fff;border-radius:10px;padding:0 7px;font-size:11px;font-weight:700}
.pinned{border-left:4px solid var(--navy)}.count.hot{background:#f04438;color:#fff}.count.big{font-size:15px;vertical-align:middle}
table.approvals td{vertical-align:middle}.rec{min-width:220px;max-width:320px}
.verdict-pill{display:inline-block;padding:2px 10px;border-radius:12px;font-weight:700;font-size:12px;background:#eaecf0}
.verdict-pill.go{background:var(--grnbg);color:var(--grn)}.verdict-pill.no-go{background:var(--redbg);color:var(--red)}.verdict-pill.conditional-go{background:var(--ambbg);color:var(--amb)}
.profit{color:var(--grn);font-size:15px}.profit.thin{color:var(--amb)}.profit.neg{color:var(--red)}
.decide{white-space:nowrap}.decide form.inline{display:inline}.rej{display:inline-block;vertical-align:top}.rej summary{list-style:none;display:inline-block;margin:0;color:#fff}.rej summary::-webkit-details-marker{display:none}
.rej[open] form{margin-top:6px;display:flex;flex-direction:column;gap:6px;min-width:200px}.rej textarea{margin:0}
input[type=checkbox]{display:inline-block;width:auto;margin:0 6px 0 0;vertical-align:-2px}
table.approvals th,table.approvals td{padding:8px 8px}.approvals .proj{min-width:170px}.approvals .rec{min-width:180px;max-width:260px}
.decide{display:flex;flex-direction:column;gap:6px;align-items:stretch;min-width:96px}.decide .btn{width:100%;text-align:center}.rej summary.btn{display:block}
.rej[open]{position:relative}.rej[open] form{position:absolute;right:0;z-index:5;background:#fff;padding:10px;border-radius:8px;box-shadow:0 8px 24px rgba(16,24,40,.18)}
/* phase B */
.bb{display:inline-block;background:#fdead7;color:#b93815;border-radius:10px;padding:0 8px;font-size:11px;font-weight:700;white-space:nowrap}a.bb:hover{text-decoration:none;background:#f9dbaf}
.cols.eq{grid-template-columns:1fr 1fr;margin-bottom:6px}
.alerts{list-style:none;margin:0;padding:0}.al{display:flex;gap:10px;align-items:flex-start;padding:9px 10px;border-radius:8px;margin:6px 0;background:#f8fafc;border-left:4px solid #98a2b3}
.al.warn{border-color:#f79009;background:#fffaeb}.al.critical{border-color:#d92d20;background:#fff6f5}.al.done{opacity:.6}.al .ab{flex:1;display:flex;flex-direction:column;min-width:0}.al small{font-size:12px}.ak{font-size:16px}
.recheck{border-left:4px solid #f79009;background:#fffaeb}.stalebox{border-left:4px solid #f79009}
.elig{list-style:none;padding:0;margin:0}.elig li{display:flex;gap:10px;align-items:center;padding:5px 0;border-top:1px solid var(--line)}.elig li:first-child{border:0}.elig li>span:nth-child(2){flex:1;display:flex;flex-direction:column}
.ed{width:10px;height:10px;border-radius:50%;background:#d0d5dd;flex:none}.ed.ok{background:#12b76a}.ed.risk{background:#f79009}.ed.fail{background:#f04438}.ed.na{background:#e4e7ec}
.es{font-size:11px}.es{background:none!important;width:auto;height:auto}.es.e-fail{color:var(--red)}.es.e-risk{color:var(--amb)}.es.e-ok{color:var(--grn)}.es.e-unknown,.es.e-na{color:#98a2b3;font-weight:500}
.flags{max-width:190px}.flags .pill,.flags .bb{margin:1px 2px 1px 0;white-space:normal}
.res{display:inline-block;padding:1px 9px;border-radius:10px;font-weight:700;font-size:12px;background:#eaecf0}.res.won{background:var(--grnbg);color:var(--grn)}.res.lost{background:var(--redbg);color:var(--red)}.res.disqualified{background:var(--ambbg);color:var(--amb)}
b.neg{color:var(--red)}b.pos{color:var(--grn)}
@media (max-width:1100px){.cols.eq{grid-template-columns:1fr}}
.panel .alerts{max-height:380px;overflow:auto}
.agents{display:flex;flex-wrap:wrap;gap:8px;align-items:center;background:#f0f6ff;border:1px solid #d1e3ff;border-radius:10px;padding:10px 14px;margin:0 0 12px}
.agents .chip{background:#fff;border:1px solid var(--line);border-radius:14px;padding:2px 10px;font-size:12px}.agents .chip.hot{border-color:#fda29b;background:#fff6f5}
.pulse{width:9px;height:9px;border-radius:50%;background:#12b76a;box-shadow:0 0 0 0 rgba(18,183,106,.6);animation:pl 1.8s infinite}@keyframes pl{70%{box-shadow:0 0 0 8px rgba(18,183,106,0)}100%{box-shadow:0 0 0 0 rgba(18,183,106,0)}}
details.override summary{cursor:pointer;font-weight:600}
