
:root{
  --bg:#f3f6fa;--card:#fff;--ink:#142033;--muted:#6b7789;--line:#e1e7ef;
  --navy:#0f4c81;--navy2:#173e63;--blue:#2378b8;--bluebg:#eaf3fb;
  --green:#22743a;--greenbg:#eaf7ee;--amber:#956100;--amberbg:#fff5d9;
  --red:#a92b22;--redbg:#fff0ee;--purple:#6d45a8;--shadow:0 8px 28px rgba(19,44,70,.07);
}
*{box-sizing:border-box}
html{background:var(--bg)}
body{margin:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Tahoma,Arial,sans-serif}
button,input,select,textarea{font:inherit}
button{touch-action:manipulation}
.hidden{display:none!important}
.mt8{margin-top:8px}
.wide{width:100%}
.logo{width:48px;height:48px;border-radius:14px;background:linear-gradient(135deg,#0f4c81,#278bd0);color:#fff;display:grid;place-items:center;font-weight:900;box-shadow:0 8px 22px rgba(15,76,129,.2)}
.logo.small{width:36px;height:36px;border-radius:11px;font-size:13px;box-shadow:none}

.login{min-height:100vh;display:grid;place-items:center;padding:24px;background:
 radial-gradient(circle at 20% 20%,rgba(35,120,184,.08),transparent 32%),
 radial-gradient(circle at 80% 80%,rgba(15,76,129,.06),transparent 35%),var(--bg)}
.login-card{width:min(470px,100%);background:#fff;border:1px solid var(--line);border-radius:20px;padding:25px;box-shadow:0 22px 70px rgba(18,48,78,.13)}
.login-brand{display:flex;align-items:center;gap:13px;margin-bottom:18px}
.login-brand h1{margin:0;font-size:21px}.login-brand p{margin:3px 0 0;color:var(--muted);font-size:12px}
.login-callout{background:#eef5fb;border:1px solid #d4e5f3;color:#2a5679;border-radius:11px;padding:10px 12px;font-size:13px;line-height:1.5;margin-bottom:16px}
.field{margin:13px 0}.field label,.detailbox label,.compare label{display:block;font-size:11px;color:var(--muted);font-weight:800;margin-bottom:6px;text-transform:none}
.field input,.field select,.field textarea,.input,.select{width:100%;border:1px solid #d6dee8;border-radius:9px;padding:10px;background:#fff;color:var(--ink);outline:none}
.field textarea{resize:vertical;direction:ltr;text-align:left;line-height:1.45}
.field input:focus,.field select:focus,.field textarea:focus,.input:focus,.select:focus{border-color:#6fa7d1;box-shadow:0 0 0 3px rgba(35,120,184,.12)}
.primary,.save{border:0;background:var(--navy);color:#fff;border-radius:10px;padding:10px 15px;font-weight:800;cursor:pointer}
.primary:hover,.save:hover{background:#0b426f}.primary:disabled,.save:disabled{opacity:.42;cursor:not-allowed}
.btn{border:1px solid #d4dde7;background:#fff;color:#34485e;border-radius:9px;padding:8px 11px;font-weight:700;cursor:pointer;white-space:nowrap}
.btn:hover{background:#f7f9fb}.btn:disabled{opacity:.42;cursor:not-allowed}
.btn.good{background:var(--greenbg);color:#17602d;border-color:#bee1c7}.btn.good:hover{background:#def2e4}
.btn.warn{background:var(--amberbg);color:#7f5200;border-color:#ead18f}.btn.warn:hover{background:#ffefc5}
.btn.danger{background:var(--redbg);color:#92261e;border-color:#eec8c3}.btn.danger:hover{background:#ffe3df}
.btn.export{background:#f0f7fd;border-color:#c6dded;color:#175b88}.btn.export:hover{background:#e3f1fb}
.btn.ghost{background:transparent;border-color:transparent;color:#c6d1de}
.iconbtn{width:38px;height:38px;padding:0;display:grid;place-items:center;font-size:17px}
.hint{font-size:12px;color:var(--muted);line-height:1.5}.form-msg{min-height:17px;margin:8px 0 0;font-size:12px}.form-msg.error{color:var(--red)}.form-msg.success{color:var(--green)}

.top{position:sticky;top:0;z-index:60;background:rgba(255,255,255,.97);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.topin{max-width:1780px;margin:auto;padding:10px 17px;display:flex;align-items:center;gap:10px}
.brand{display:flex;align-items:center;gap:9px;min-width:220px}.brand b{display:block;font-size:14px}.brand small{display:block;color:var(--muted);font-size:11px;margin-top:2px;direction:ltr;text-align:right}
.tabs{display:flex;gap:4px;background:#eff3f7;padding:4px;border-radius:11px}
.tab{border:0;background:transparent;padding:8px 11px;border-radius:8px;font-weight:750;color:#516177;cursor:pointer}
.tab.active{background:#fff;color:var(--navy);box-shadow:0 2px 7px rgba(33,57,82,.1)}
.spacer{flex:1}
.live-pill{display:flex;align-items:center;gap:6px;border:1px solid #dbe4ec;border-radius:999px;padding:6px 9px;color:var(--muted);font-size:11px;direction:ltr}
.live-dot{width:8px;height:8px;border-radius:50%;background:#9ba7b3}.live-pill.connected .live-dot{background:#2fa34b;box-shadow:0 0 0 3px rgba(47,163,75,.12)}.live-pill.error .live-dot{background:var(--red)}
.identity{text-align:right;max-width:165px;line-height:1.15}.identity b{font-size:12px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.identity small{font-size:10px;color:var(--muted);text-transform:uppercase}
.save.unsaved{box-shadow:0 0 0 3px rgba(234,160,0,.2)}

.container{max-width:1780px;margin:auto;padding:16px}
.banner{display:none;border-radius:10px;padding:10px 12px;margin-bottom:10px;font-size:12px;gap:8px;align-items:center}.banner.show{display:flex}
.banner.warn{background:var(--amberbg);color:#775000}.banner.danger{background:var(--redbg);color:var(--red)}.banner.ok{background:var(--greenbg);color:var(--green)}.banner.info{background:var(--bluebg);color:#285d82}
.health-row{background:#fff;border:1px solid var(--line);border-radius:12px;padding:9px 12px;margin-bottom:11px;display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--muted)}
.health-left,.health-right{display:flex;align-items:center;gap:8px}.health-badge{border-radius:999px;padding:4px 8px;font-weight:800}.health-badge.good{background:var(--greenbg);color:var(--green)}.health-badge.warn{background:var(--amberbg);color:var(--amber)}

.kpis{display:grid;grid-template-columns:repeat(6,minmax(130px,1fr));gap:10px;margin-bottom:13px}
.kpi{background:#fff;border:1px solid var(--line);border-radius:13px;padding:12px 13px;box-shadow:0 3px 14px rgba(19,40,67,.025)}
.kpi .value{font-size:23px;font-weight:900;direction:ltr;text-align:right;letter-spacing:-.5px}.kpi .label{font-size:11px;color:var(--muted);margin-top:3px}.kpi .subvalue{font-size:10px;color:var(--muted);direction:ltr;text-align:right;margin-top:2px}
.kpi.green .value{color:var(--green)}.kpi.amber .value{color:var(--amber)}.kpi.red .value{color:var(--red)}
.moneykpi .value{font-size:19px;color:var(--navy)}

.card{background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 3px 15px rgba(19,40,67,.025);overflow:hidden}
.quickbar{padding:10px 11px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;justify-content:space-between}
.quickfilters{display:flex;gap:6px;flex-wrap:wrap}.chip{border:1px solid #d9e2eb;background:#fff;color:#516176;border-radius:999px;padding:6px 10px;font-size:11px;font-weight:800;cursor:pointer}.chip span{opacity:.75;margin-inline-start:3px}.chip.active{background:var(--navy);color:#fff;border-color:var(--navy)}.chip.ok:not(.active){color:var(--green);background:#f6fbf7}.chip.review:not(.active){color:var(--amber);background:#fffbf0}.chip.pending:not(.active),.chip.open:not(.active),.chip.action:not(.active){color:var(--red);background:#fff8f7}.saved-only{font-size:10px;color:var(--muted)}
.toolbar{padding:10px 11px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.searchwrap{position:relative;min-width:300px;flex:1;max-width:520px}.searchwrap span{position:absolute;right:11px;top:50%;transform:translateY(-50%);color:#8995a3;font-size:17px}.searchwrap .input{padding-right:34px}
.toolbar .select{width:auto;min-width:170px}.toggle{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);white-space:nowrap}.viewcount{font-size:11px;color:var(--muted);margin-inline-start:auto}

.tablewrap{overflow:auto;max-height:calc(100vh - 310px);direction:ltr}
table{border-collapse:separate;border-spacing:0;width:100%;min-width:1450px;font-size:11px}
th{position:sticky;top:0;z-index:4;background:#f1f5f9;color:#536275;text-align:left;padding:9px 8px;border-bottom:1px solid #dae3ec;white-space:nowrap;font-size:10px;text-transform:uppercase;letter-spacing:.2px}
td{padding:8px;border-bottom:1px solid #edf1f5;vertical-align:top;text-align:left;background:#fff}
tr:hover td{background:#fbfdff}tr.selected td{background:#eff7ff}
.req,.offered,.note{max-width:350px;white-space:normal;line-height:1.38}.note{color:#586a7d;max-width:370px}
.itemno{font-weight:900;color:#244d70;white-space:nowrap}.scope-cell{min-width:110px}.money{text-align:right;white-space:nowrap;direction:ltr;font-weight:750}.money.excluded{color:#8d6d20;text-decoration:line-through;font-weight:500}
.dirty{display:inline-block;width:7px;height:7px;background:#e99a00;border-radius:50%;margin-left:5px}
.badge{display:inline-flex;padding:4px 8px;border-radius:999px;font-size:10px;font-weight:900;white-space:nowrap}.badge.matched{background:var(--greenbg);color:var(--green)}.badge.review{background:var(--amberbg);color:var(--amber)}.badge.pending,.badge.open{background:var(--redbg);color:var(--red)}.badge.check{background:#eef1f5;color:#657184}
.statusline{font-size:9px;color:var(--muted);margin-top:5px;max-width:150px;line-height:1.2}
.quick-actions{display:flex;gap:4px;white-space:nowrap}.quick-actions .mini{border:1px solid #d8e0e8;border-radius:7px;background:#fff;padding:5px 7px;font-size:10px;font-weight:800;cursor:pointer}.quick-actions .mini.ok{color:var(--green)}.quick-actions .mini.review{color:var(--amber)}.quick-actions .mini.more{color:var(--navy)}
.cost-flag{display:block;font-size:9px;color:var(--amber);margin-top:3px;font-weight:700}

.page{display:none}.page.active{display:block}
.section-head,.section-title{display:flex;align-items:center;justify-content:space-between;padding:14px 15px}.section-head{border-bottom:1px solid var(--line)}.section-head h2,.section-title h2{font-size:16px;margin:0}.section-head p,.section-title p{font-size:11px;color:var(--muted);margin:3px 0 0}.countpill{background:#edf3f8;color:var(--navy);font-weight:900;border-radius:999px;padding:5px 10px}
.control-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(285px,1fr));gap:9px;margin-bottom:12px}.control{background:#fff;border:1px solid var(--line);border-radius:12px;padding:11px 12px}.control b{font-size:12px}.control p{font-size:11px;color:#586a7d;line-height:1.45;margin:5px 0 0}.control.warning{border-left:4px solid #d79a17}.control.critical{border-left:4px solid #ce4a40}.control.info{border-left:4px solid #4a8fc3}
.vendorgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:10px}.vendor{background:#fff;border:1px solid var(--line);border-radius:13px;padding:13px;box-shadow:0 3px 12px rgba(19,40,67,.025)}.vendor-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.vendor h4{margin:0;font-size:13px;line-height:1.3}.vendor .overall{font-size:9px;font-weight:900;padding:4px 7px;border-radius:999px;white-space:nowrap}.overall.complete{background:var(--greenbg);color:var(--green)}.overall.review{background:var(--amberbg);color:var(--amber)}.overall.pending{background:var(--redbg);color:var(--red)}
.vendor .mini{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin-top:9px}.vendor .mini div{background:#f7f9fb;border-radius:7px;padding:6px;text-align:center;font-size:9px;color:var(--muted)}.vendor .mini b{display:block;font-size:13px;color:var(--ink)}
.vendor .cost{font-weight:900;direction:ltr;margin-top:10px;color:var(--navy)}.vendor .cost small{display:block;color:var(--muted);font-weight:500;font-size:9px;margin-top:2px}.vendor-meta{border-top:1px solid #edf1f5;margin-top:9px;padding-top:8px;display:grid;gap:4px}.vendor-meta div{font-size:10px;color:#586a7d;line-height:1.35}.vendor-meta b{color:#2f4154}
.activity{padding:0;margin:0;list-style:none}.activity li{padding:12px 14px;border-bottom:1px solid var(--line);display:flex;gap:10px;align-items:flex-start}.activity-icon{width:32px;height:32px;border-radius:9px;background:#edf4fa;color:var(--navy);display:grid;place-items:center;flex:none;font-weight:900}.activity-body{flex:1}.activity-title{font-size:12px}.activity-detail{font-size:10px;color:#586a7d;margin-top:4px;line-height:1.4}.activity small{font-size:9px;color:var(--muted);display:block;margin-top:3px;direction:ltr}

.bulk{position:fixed;z-index:80;bottom:15px;left:50%;transform:translateX(-50%);width:min(1190px,calc(100% - 26px));background:#14243a;color:#fff;border-radius:14px;padding:9px 10px;display:none;gap:7px;align-items:center;box-shadow:0 18px 50px rgba(0,0,0,.24);direction:ltr}.bulk.show{display:flex}.bulk .input{flex:1;min-width:190px;background:#fff}.bulk .btn{background:#263b55;color:#fff;border-color:#465a73}.bulk .btn.good{background:#1d6934}.bulk .btn.warn{background:#795709}.bulk .btn.danger{background:#8a3028}.bulkcount{display:flex;align-items:baseline;gap:4px;min-width:65px}.bulkcount span{font-size:19px;font-weight:900}.bulkcount small{font-size:9px;color:#bac6d3}

.drawerbg{position:fixed;inset:0;background:rgba(15,32,52,.38);z-index:95;display:none}.drawerbg.show{display:block}.drawer{position:absolute;right:0;top:0;bottom:0;width:min(720px,96vw);background:#fff;padding:18px;overflow:auto;box-shadow:-22px 0 55px rgba(0,0,0,.19);direction:rtl}.drawer-top{display:flex;justify-content:space-between;gap:10px}.drawer h2{margin:2px 0;font-size:19px}.eyebrow{font-size:9px;letter-spacing:.7px;color:var(--blue);font-weight:900;text-transform:uppercase}.drawer .meta{font-size:10px;color:var(--muted);direction:ltr;text-align:right}
.compare-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:15px 0 9px}.compare{border-radius:11px;padding:12px;line-height:1.5;direction:ltr;text-align:left;font-size:12px;min-height:115px}.compare.required{background:#edf5fb;border:1px solid #cee2f1}.compare.offered{background:#f7f8fa;border:1px solid #e1e5ea}.qtystrip{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;margin-bottom:9px}.qtystrip div{background:#f6f8fa;border:1px solid #e8edf2;border-radius:8px;padding:7px;text-align:center}.qtystrip small{display:block;color:var(--muted);font-size:9px}.qtystrip b{font-size:13px}
.detail-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;margin:9px 0}.detailbox{border:1px solid var(--line);border-radius:9px;padding:9px;min-height:68px}.detailbox div{font-size:11px;direction:ltr;text-align:left;line-height:1.35;overflow-wrap:anywhere}.drawer-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:12px}.drawer-hint{margin-top:10px;background:#fff8e7;color:#775000;border-radius:8px;padding:8px 10px;font-size:10px}

.fxgrid{display:grid;grid-template-columns:minmax(310px,500px) 1fr;gap:12px}.fxpanel{padding:20px}.fxpanel h2{font-size:18px;margin:5px 0 15px}.fxpanel label{font-size:11px;color:var(--muted)}.fxrate{width:100%;font-size:35px;font-weight:900;text-align:center;direction:ltr;border:2px solid #e5c56a;background:#fff9e7;border-radius:12px;padding:12px;color:#584200}.fxhelp{font-size:11px;color:var(--muted);line-height:1.55;margin-top:10px}.project-value{display:flex;flex-direction:column;justify-content:center}.bigmoney{font-size:33px;font-weight:900;direction:ltr;color:var(--navy)}.bigiqd{font-size:22px;font-weight:850;direction:ltr;color:#52708b;margin-top:5px}

@media(max-width:1250px){
  .identity{display:none}.kpis{grid-template-columns:repeat(3,1fr)}.tabs{overflow:auto;max-width:430px}.brand{min-width:auto}.brand small{display:none}
}
@media(max-width:850px){
  .topin{flex-wrap:wrap}.brand{order:1}.spacer{display:none}.tabs{order:3;width:100%;max-width:none;overflow:auto}.live-pill{display:none}
  .kpis{grid-template-columns:repeat(2,1fr)}.health-right{display:none}.quickbar{align-items:flex-start;flex-direction:column}.saved-only{display:none}
  .searchwrap{min-width:100%;max-width:none}.tablewrap{max-height:none}.compare-grid,.detail-grid,.fxgrid{grid-template-columns:1fr}.qtystrip{grid-template-columns:repeat(2,1fr)}
  .bulk{flex-wrap:wrap}.bulk .input{order:5;width:100%}
}


/* ===== Collaboration + Undo/Redo + Vendor Completion ===== */
.collab-strip{
  background:#fff;border:1px solid var(--line);border-radius:12px;padding:9px 12px;margin-bottom:11px;
  display:flex;align-items:center;justify-content:space-between;gap:12px
}
.collab-title{display:flex;align-items:center;gap:9px;min-width:260px}
.collab-title b{display:block;font-size:11px}.collab-title small{display:block;color:var(--muted);font-size:9px;margin-top:2px}
.collab-pulse{width:9px;height:9px;border-radius:50%;background:#36a853;box-shadow:0 0 0 4px rgba(54,168,83,.11);flex:none}
.collab-panel{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.collab-card{
  border:1px solid #dfe7ef;border-radius:10px;padding:7px 9px;min-width:260px;background:#f9fbfd;
  display:grid;grid-template-columns:auto 1fr;gap:8px;align-items:start
}
.collab-avatar{
  width:31px;height:31px;border-radius:9px;background:#e8f2fa;color:var(--navy);display:grid;place-items:center;
  font-weight:900;font-size:11px
}
.collab-card.online{border-color:#bfe2c7;background:#f7fcf8}
.collab-card.idle{opacity:.78}
.collab-name{font-size:11px;font-weight:900}
.collab-state{font-size:9px;color:var(--muted);line-height:1.35;margin-top:2px}
.collab-action{font-size:10px;color:#33536f;font-weight:700;margin-top:3px;line-height:1.3}
.collab-dirty{display:inline-flex;margin-top:4px;background:#fff2cd;color:#7b5500;border-radius:999px;padding:2px 6px;font-size:8px;font-weight:900}
.muted{color:var(--muted);font-size:10px}

.watching{
  display:inline-flex;margin-left:5px;padding:2px 5px;border-radius:999px;background:#eaf3fb;color:#25658e;
  font-size:8px;font-weight:800;vertical-align:middle
}

.vendor.completed{
  border-color:#9bd3aa;background:linear-gradient(180deg,#fbfffc,#fff)
}
.vendor-check{
  width:27px;height:27px;border-radius:50%;display:grid;place-items:center;border:2px solid #ccd8e3;color:#93a1ae;
  font-weight:1000;font-size:14px;flex:none
}
.vendor-check.done{background:#2a8b47;border-color:#2a8b47;color:#fff;box-shadow:0 0 0 4px rgba(42,139,71,.1)}
.vendor-completion{
  margin-top:9px;padding-top:9px;border-top:1px solid #edf1f5;display:flex;align-items:center;justify-content:space-between;gap:8px
}
.vendor-completion .statuscopy{font-size:9px;color:var(--muted);line-height:1.35}
.vendor-completion .statuscopy b{display:block;font-size:10px;color:#31495f}
.complete-btn{
  border:1px solid #b8ddc2;background:#edf9f0;color:#17622f;border-radius:8px;padding:6px 8px;font-size:9px;font-weight:900;cursor:pointer
}
.complete-btn[disabled]{opacity:.45;cursor:not-allowed}
.complete-btn.reopen{background:#fff;border-color:#d5dee7;color:#56677a}
.readytag{display:inline-flex;background:#eaf7ee;color:#1f6e37;border-radius:999px;padding:2px 6px;font-size:8px;font-weight:900}
.openflag{display:inline-flex;background:#fff1ef;color:#9b3027;border-radius:999px;padding:2px 6px;font-size:8px;font-weight:900}

#undoBtn,#redoBtn{font-size:20px;line-height:1}
#undoBtn:not(:disabled),#redoBtn:not(:disabled){color:var(--navy);background:#f2f8fc;border-color:#c9deed}

@media(max-width:900px){
  .collab-strip{align-items:flex-start;flex-direction:column}
  .collab-panel{justify-content:flex-start;width:100%}.collab-card{min-width:100%}
}
