/* Approved loopless Thai family; self-hosted so the existing self-only CSP stays intact. */
@font-face{font-family:"Noto Sans Thai";src:url("./NotoSansThai-Variable.ttf") format("truetype");font-style:normal;font-weight:100 900;font-stretch:62.5% 100%;font-display:swap}
html,body,button,input,select,textarea,option,optgroup,summary{font-family:var(--f,"Noto Sans Thai",sans-serif)}
/* ===== Main Surface Prototype v0.1 additions (EST-UX-MAIN-SURFACE-BUILD-20261005-09) ===== */
.ms .sb .nv,.sb .nv{position:relative}
.dirtydot{width:8px;height:8px;border-radius:50%;background:#F2B44B;margin-left:auto;box-shadow:0 0 0 3px rgba(242,180,75,.25)}
.nv .dirtydot+.ct{margin-left:6px}
.okc{color:var(--ok)}.neg{color:var(--bad)!important}.pend{color:var(--warn)}
.bare{border:0;outline:0;background:transparent;font:inherit;color:var(--tx);flex:1;min-width:0}
.search input.bare{height:34px}
.lib{width:100%;border:0;border-bottom:1px solid var(--ln);background:#fff;text-align:left;font:inherit;color:var(--tx);cursor:pointer}
.lib:hover{background:var(--el2)}
.rowbtn{width:100%;border:0;background:#fff;text-align:left;font:inherit;color:var(--tx);cursor:pointer}
.g5{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;padding:14px 16px}
.g5 .sum-i .v{font-size:17px}
/* topbar project context */
.pjwrap{position:relative}
.pjchip{display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 10px;border-radius:9px;border:1px solid rgba(165,92,200,.35);background:var(--el2);font:500 13px/1 var(--f);color:var(--tx);cursor:pointer;max-width:470px}
.pjchip:hover{border-color:var(--p5)}
.pop{position:absolute;right:0;top:42px;width:470px;max-height:420px;overflow:auto;background:#fff;border:1px solid var(--ln2);border-radius:12px;box-shadow:0 24px 60px rgba(26,16,44,.25);z-index:30;padding:6px}
.pop-h{font-size:11px;color:var(--tx3);padding:6px 10px;letter-spacing:.03em;text-transform:uppercase}
.pop-i{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border:0;background:none;border-radius:8px;cursor:pointer;font:inherit;color:var(--tx);text-align:left}
.pop-i:hover,.pop-i.on{background:var(--el2)}
.pop-i .bd{margin-left:auto}
/* hub */
.modal.xl{width:1120px;max-width:96vw;max-height:92vh;display:flex;flex-direction:column;overflow:hidden}
.hubh{padding:18px 22px;background:linear-gradient(135deg,#4C2768,#843FA6);color:#fff}
.hubh .bd{background:rgba(255,255,255,.18);color:#fff}
.hubb{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:16px;padding:16px 18px;overflow:auto;background:var(--bg)}
.deskgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.dk{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;border:1px solid var(--ln);background:#fff;cursor:pointer;text-align:left;font:inherit;color:var(--tx);min-width:0}
.dk:hover{border-color:rgba(165,92,200,.5);background:#FBF7FD}
.dk>.i{color:var(--p3)}
.dk b{font-size:13px;font-weight:600}
.pick.on{background:var(--el2)}
/* desk header */
.dkh{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap;padding:18px 28px 14px;border-bottom:1px solid var(--ln);background:#fff}
.dkh h1{font-size:20px;font-weight:600;line-height:1.25}
.dkh .ctxl{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:12.5px;color:var(--tx2);align-items:center}
.savebox{display:flex;align-items:center;gap:10px;margin-left:auto;flex-wrap:wrap}
.savest{font-size:11.5px;color:var(--tx3);text-align:right;line-height:1.35}
.dkb{padding:18px 28px 40px;display:flex;flex-direction:column;gap:16px;min-width:0}
.dktabs{display:flex;gap:2px;border-bottom:1px solid var(--ln);padding:0 28px;background:#fff;overflow-x:auto}
.protobar{display:flex;align-items:center;gap:8px;padding:6px 28px;background:#FFF7E8;border-bottom:1px solid rgba(154,100,0,.2);font-size:11.5px;color:#7A4B00}
.protobar b{font-weight:600}
.saloneh{display:flex;align-items:center;gap:10px;padding:8px 28px;background:#3A1F52;color:#E9DDF6;font-size:12px}
.saloneh select{height:28px;border-radius:6px;border:1px solid rgba(255,255,255,.3);background:rgba(255,255,255,.1);color:#fff;font:inherit;font-size:12px;padding:0 6px}
.saloneh select option{color:#222}
/* grids */
.grid{border:1px solid var(--ln);border-radius:12px;background:#fff;overflow:auto;max-height:640px}
.grid .tr{display:grid;grid-template-columns:var(--cols);align-items:center;column-gap:6px;padding:3px 10px;min-height:36px;border-bottom:1px solid var(--ln);font-size:12.5px;min-width:var(--minw,1000px)}
.grid .th{position:sticky;top:0;z-index:4;background:var(--head);color:var(--tx2);font-size:11.5px;font-weight:600;min-height:34px}
.grid .th2{position:sticky;top:0;z-index:5;background:#F1E3F6;color:var(--p7);font-size:10.5px;font-weight:700;letter-spacing:.03em;min-height:24px;text-transform:uppercase}
.grid .th+.tr.th,.grid .th2+.th{top:24px}
.grid .grp{background:var(--el2);font-weight:600;color:var(--p7)}
.grid .gsum{background:var(--head);color:var(--tx2);font-weight:600}
.grid .chl{background:#FDFBFE}
.grid .chl .ds{padding-left:18px;position:relative}
.grid .chl .ds::before{content:"";position:absolute;left:6px;top:50%;width:8px;border-top:1px solid var(--ln2)}
.grid .rw:hover{background:rgba(165,92,200,.05)}
.grid .rw.sel{background:rgba(165,92,200,.11)}
.grid .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.grid .ci{height:28px;font-size:12.5px}
.grid .pinR{position:sticky;right:0;background:inherit}
.pin{background:linear-gradient(90deg,rgba(255,255,255,0),#fff 8px)}
.cellsep{border-left:1px solid var(--ln2);padding-left:6px}
.colgrp{display:flex;align-items:center;gap:6px}
.mcell{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap;font-weight:500}
.mcell.pend{color:var(--warn);font-weight:600;font-size:11.5px}
.mcell.neg{color:var(--bad)}
.mcell.na{color:var(--tx3);font-size:11.5px}
.pf{background:rgba(165,92,200,.045)}
.dense .tr{min-height:30px}
.ptab{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 12px;border-radius:9px;border:1px solid var(--ln2);background:#fff;font:500 12.5px/1 var(--f);color:var(--tx2);cursor:pointer;white-space:nowrap}
.ptab.on{background:var(--grb);color:#fff;border-color:transparent}
.ptab.cur{border-color:var(--p5);color:var(--p7)}
.ptab .pchip{width:20px;height:20px;font-size:8.5px}
.ptab.on .pchip{background:#fff;color:var(--p7)}
.banner{display:flex;gap:10px;align-items:flex-start;padding:10px 14px;border-radius:10px;font-size:12.5px;border:1px solid rgba(46,106,209,.25);background:rgba(46,106,209,.06);color:#1F4C99}
.banner.wn{border-color:rgba(154,100,0,.3);background:rgba(154,100,0,.06);color:#7A4B00}
.banner.pp{border-color:rgba(165,92,200,.35);background:rgba(165,92,200,.07);color:var(--p7)}
.banner b{font-weight:600}
/* drawers: kv rows */
.kvt{display:grid;grid-template-columns:150px minmax(0,1fr);gap:6px 12px;font-size:12.5px}
.kvt dt{color:var(--tx2)}.kvt dd{margin:0;min-width:0}
.step{display:grid;grid-template-columns:34px minmax(0,1fr) 110px;gap:8px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--ln);font-size:12.5px}
.step:last-child{border-bottom:0}
.sid{font:600 10.5px/1 var(--mono);color:var(--p7);background:var(--el2);padding:4px 6px;border-radius:5px;text-align:center}
/* takeoff viewer */
.tkv{position:relative;height:440px;border-radius:10px;overflow:hidden;border:1px solid var(--ln2);background:#F4F2F7;cursor:crosshair;user-select:none}
.tkv.sel{cursor:default}
.tkv .plan{position:absolute;inset:24px;border:2px solid #4A3F57;background:repeating-linear-gradient(0deg,transparent 0 39px,rgba(74,63,87,.06) 39px 40px),repeating-linear-gradient(90deg,transparent 0 39px,rgba(74,63,87,.06) 39px 40px)}
.tkv .wall{position:absolute;background:#4A3F57}
.tkv .room{position:absolute;font:600 11px/1.2 var(--mono);color:#6E6380;letter-spacing:.04em}
.tkv .win{position:absolute;background:#9CC3E6;border:1px solid #4A6F94}
.tkv .door{position:absolute;border:1.5px solid #6E6380;border-radius:0 100% 0 0;border-left:0;border-bottom:0}
.mk{position:absolute;pointer-events:auto}
.mk.hl{background:rgba(255,214,0,.32);border:1px solid rgba(200,160,0,.6)}
.mk.cloud{border:2.5px dashed #C23A3A;border-radius:40% 45% 38% 50%;background:rgba(194,58,58,.05)}
.mk.q{width:28px;height:28px;margin:-14px 0 0 -14px;border-radius:50%;background:#C23A3A;color:#fff;font:700 16px/28px var(--f);text-align:center;box-shadow:0 0 0 4px rgba(194,58,58,.25)}
.mk.q.res{background:#128A5A;box-shadow:0 0 0 4px rgba(18,138,90,.2)}
.mk.ms{height:0;border-top:2px solid #2E6AD1;margin-top:-1px}
.mk.ms::before,.mk.ms::after{content:"";position:absolute;top:-7px;width:2px;height:12px;background:#2E6AD1}
.mk.ms::before{left:0}.mk.ms::after{right:0}
.mk .mkl{position:absolute;left:50%;top:-22px;transform:translateX(-50%);white-space:nowrap;font:600 10.5px/1 var(--mono);background:#2E6AD1;color:#fff;padding:3px 5px;border-radius:4px}
.mk.on{outline:2px solid var(--p5);outline-offset:2px}
.tool{display:inline-flex;flex-direction:column;align-items:center;gap:3px;width:70px;padding:7px 4px;border-radius:9px;border:1px solid var(--ln2);background:#fff;font:500 11px/1.1 var(--f);color:var(--tx2);cursor:pointer}
.tool.on{background:var(--grb);color:#fff;border-color:transparent}
.tool .tq{font:700 15px/16px var(--f)}
.phases{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.phase{display:flex;align-items:center;gap:10px;padding:12px 14px;border-radius:12px;border:1px solid var(--ln2);background:#fff;cursor:pointer;text-align:left;font:inherit;color:var(--tx)}
.phase .dot{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-weight:700;font-size:13px;border:1.5px solid var(--ln2);flex:none}
.phase.on{border-color:var(--p5);box-shadow:0 0 0 2px rgba(165,92,200,.2);background:linear-gradient(160deg,rgba(165,92,200,.1),#fff 70%)}
.phase.on .dot{background:var(--grb);color:#fff;border-color:transparent}
.phase.dn .dot{background:rgba(18,138,90,.13);color:var(--ok);border-color:var(--ok)}
.stg{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 8px;border-radius:999px;font-size:10.5px;font-weight:600;border:1px solid var(--ln2);color:var(--tx3);background:#fff}
.stg.dn{color:var(--ok);border-color:rgba(18,138,90,.35);background:rgba(18,138,90,.06)}
.stg.cu{color:#fff;background:var(--p7);border-color:transparent}
/* charts (presentation only — values come from the numeric table) */
.donut{width:180px;height:180px;border-radius:50%;position:relative;flex:none}
.donut::after{content:"";position:absolute;inset:34px;border-radius:50%;background:#fff}
.donut .dc{position:absolute;inset:0;display:grid;place-items:center;z-index:1;text-align:center;font-size:11px;color:var(--tx2)}
.donut .dc b{display:block;font-size:16px;color:var(--tx)}
.lgd{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border-radius:8px;border:0;background:none;cursor:pointer;font:inherit;font-size:12.5px;color:var(--tx);text-align:left}
.lgd:hover,.lgd.on{background:var(--el2)}
.hb{display:grid;grid-template-columns:200px minmax(0,1fr) 84px;gap:10px;align-items:center;width:100%;padding:5px 6px;border:0;background:none;border-radius:8px;cursor:pointer;font:inherit;font-size:12px;color:var(--tx);text-align:left}
.hb:hover,.hb.on{background:var(--el2)}
.hbt{height:16px;position:relative;background:rgba(32,16,56,.05);border-radius:4px}
.hbt .zero{position:absolute;top:-3px;bottom:-3px;width:1px;background:var(--ln2)}
.hbt i{position:absolute;top:0;bottom:0;border-radius:4px;background:var(--gr)}
.hbt i.neg{background:#E07A7A}
.hbt i.pend{background:repeating-linear-gradient(135deg,rgba(154,100,0,.25) 0 6px,transparent 6px 12px);border:1px dashed rgba(154,100,0,.5)}
.wf{display:flex;align-items:flex-end;gap:14px;height:220px;padding:10px 6px 0;border-bottom:1px solid var(--ln2)}
.wfc{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:4px;min-width:0}
.wfb{width:70%;position:relative;border-radius:4px 4px 0 0}
.wfl{font-size:11px;color:var(--tx2);text-align:center;line-height:1.2}
.wfv{font-size:11px;font-weight:600;font-variant-numeric:tabular-nums}
.stk{display:flex;height:18px;border-radius:5px;overflow:hidden;background:rgba(32,16,56,.05)}
.stk i{display:block;height:100%}
/* composition */
.modesel{height:28px;border-radius:7px;border:1px solid var(--ln2);font:500 12px/1 var(--f);padding:0 6px;background:#fff;color:var(--tx)}
.modesel.Pending{border-color:rgba(154,100,0,.6);background:rgba(154,100,0,.07);color:#7A4B00}
.modesel.Include{border-color:rgba(18,138,90,.45);background:rgba(18,138,90,.06);color:#0F6A45}
.modesel.Exclude{color:var(--tx3)}
.dbl{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 7px;border-radius:999px;background:rgba(194,58,58,.1);color:var(--bad);font-size:10.5px;font-weight:700;white-space:nowrap}
.dbl.ok{background:rgba(18,138,90,.1);color:var(--ok)}
/* BOQ composer */
.boqwrap{display:grid;grid-template-columns:330px minmax(0,1fr);gap:16px;align-items:start}
.blk{display:flex;flex-direction:column;gap:8px;padding:10px 12px;border:1px solid var(--ln);border-radius:10px;background:#fff}
.blk h4{font-size:12.5px;font-weight:600;display:flex;align-items:center;gap:8px}
.palitem{display:grid;grid-template-columns:18px minmax(0,1fr) auto;gap:8px;align-items:center;padding:6px 8px;border-bottom:1px solid var(--ln);font-size:12px}
.colrow{display:grid;grid-template-columns:minmax(0,1fr) 108px 24px 24px 24px;gap:4px;align-items:center}
.paper.land{max-width:1060px}
.paper .pt{font-size:10.5px}
.paper .pt.lv2 .pdesc{padding-left:14px;color:#5F556E}
.paper .ptot{display:grid;grid-template-columns:minmax(0,1fr) 140px;gap:6px;padding:5px 8px;font-size:11px}
.paper .ptot.b{font-weight:700;background:#F3EEF8}
/* Formula Library / Logic */
.lrow{display:grid;grid-template-columns:28px 110px 92px 82px 82px 120px 70px minmax(110px,1fr) 56px minmax(120px,1fr) 28px;gap:4px;align-items:center;padding:4px 8px;border-bottom:1px solid var(--ln);font-size:12px}
.lrow.h{background:var(--head);font-weight:600;color:var(--tx2);font-size:11px}
.lrow.bad{background:rgba(194,58,58,.06)}
.pillv{display:inline-flex;align-items:center;height:20px;padding:0 7px;border-radius:5px;background:var(--el2);border:1px solid var(--ln2);font:600 10.5px/1 var(--mono);color:var(--p7);white-space:nowrap}
.rangebar{position:relative;height:30px;border-radius:6px;background:rgba(32,16,56,.04);border:1px solid var(--ln)}
.rangebar i{position:absolute;top:4px;bottom:4px;border-radius:4px;background:rgba(165,92,200,.35);border:1px solid rgba(122,58,158,.5);font:600 9.5px/20px var(--mono);color:var(--p9);text-align:center;overflow:hidden;font-style:normal}
.rangebar i.ov{background:rgba(194,58,58,.35);border-color:var(--bad)}
.rangebar i.gp{background:repeating-linear-gradient(135deg,rgba(154,100,0,.25) 0 5px,transparent 5px 10px);border:1px dashed var(--warn)}
/* Flow canvas */
.fwrap{display:grid;grid-template-columns:140px minmax(0,1fr) 260px;gap:12px;align-items:start}
.fpal{display:flex;flex-direction:column;gap:6px}
.fpal button{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:8px;border:1px solid var(--ln2);background:#fff;font:500 12px/1.1 var(--f);cursor:pointer;color:var(--tx);text-align:left}
.fpal button i{width:12px;height:12px;border-radius:3px;display:inline-block;flex:none}
.fc{position:relative;height:420px;border:1px solid var(--ln2);border-radius:12px;overflow:auto;background:#FCFBFE;background-image:radial-gradient(rgba(60,20,70,.12) 1px,transparent 1px);background-size:20px 20px}
.fc.connect{cursor:crosshair}
.fcin{position:relative;width:1320px;height:540px}
.fn{position:absolute;border-radius:10px;background:#fff;border:2px solid var(--c,#7A3A9E);box-shadow:0 4px 12px rgba(32,16,56,.08);display:flex;flex-direction:column;justify-content:center;padding:6px 10px;cursor:grab;user-select:none;touch-action:none;font-size:12px;line-height:1.25;color:var(--tx)}
.fn:active{cursor:grabbing}
.fn .ft{font:700 9px/1 var(--mono);letter-spacing:.06em;color:var(--c,#7A3A9E);text-transform:uppercase;margin-bottom:3px}
.fn .fr{font:600 9.5px/1.2 var(--mono);color:var(--tx3);margin-top:3px}
.fn.Decision{border-radius:4px;border-style:solid;transform-origin:center}
.fn.Start,.fn.Stop{border-radius:999px;align-items:center;text-align:center}
.fn.Note{background:#FFF8D9;border-style:dashed}
.fn.sel{box-shadow:0 0 0 4px rgba(165,92,200,.3)}
.fn.hot{box-shadow:0 0 0 5px rgba(18,138,90,.35);border-color:#128A5A}
.fn.cold{opacity:.38}
.fn .rz{position:absolute;right:-6px;bottom:-6px;width:12px;height:12px;border-radius:3px;background:var(--c,#7A3A9E);cursor:nwse-resize}
.fn .port{position:absolute;right:-8px;top:50%;margin-top:-8px;width:16px;height:16px;border-radius:50%;background:#fff;border:2px solid var(--c,#7A3A9E);cursor:crosshair}
.fsvg{position:absolute;inset:0;pointer-events:none;overflow:visible}
.elab{position:absolute;transform:translate(-50%,-50%);background:#fff;border:1px solid var(--ln2);border-radius:5px;padding:1px 6px;font:600 10.5px/16px var(--f);color:var(--tx2);cursor:pointer;white-space:nowrap}
.elab.sel{border-color:var(--p5);color:var(--p7)}
.elab.hot{border-color:#128A5A;color:#128A5A}
.swatch{width:22px;height:22px;border-radius:6px;border:2px solid #fff;box-shadow:0 0 0 1px var(--ln2);cursor:pointer}
.swatch.on{box-shadow:0 0 0 2px var(--p5)}
.grid .tr{background:#fff}
.grid .tr.grp{background:var(--el2)}
.grid .tr.gsum,.grid .tr.th{background:var(--head)}
.grid .tr.th2{background:#F1E3F6}
.grid .tr.chl{background:#FDFBFE}
.grid .tr.sel{background:#F3E6F8}
.grid .tr.tot{background:#3A1F52;color:#fff;font-weight:600}
.grid .tr.tot .mcell{color:#fff}
.grid .tr.tot .mcell.pend{color:#FFD58A}
.grid .tr.tot .mcell.neg{color:#FFB3B3}
.grid .ci[readonly]{background:transparent;border-color:transparent;cursor:default}
.grid select.ci{padding:0 4px}
.grid select.ci[disabled]{background:transparent;border-color:transparent;color:var(--tx);appearance:none;opacity:1}
.seqc{display:flex;align-items:center;gap:5px;font:600 11px/1 var(--mono);color:var(--tx3)}
.seqc input{width:14px;height:14px;accent-color:var(--p5);margin:0}
.ptype{display:inline-flex;height:20px;align-items:center;padding:0 7px;border-radius:5px;font-size:10.5px;font-weight:700;background:var(--el2);color:var(--p7);border:1px solid rgba(165,92,200,.3)}
.ptype.Set{background:rgba(46,106,209,.08);color:#2E5BB0;border-color:rgba(46,106,209,.3)}
.ptype.Child{background:#fff;color:var(--tx2);border-color:var(--ln2)}
.ptype.Upgrade{background:rgba(154,100,0,.1);color:#7A4B00;border-color:rgba(154,100,0,.3)}
.sbar{position:sticky;bottom:0;z-index:15;display:flex;align-items:center;gap:22px;padding:10px 28px;background:rgba(255,255,255,.97);border-top:1px solid var(--ln2);box-shadow:0 -6px 20px rgba(32,16,56,.06);flex-wrap:wrap}
.sbar .sum-i .v{font-size:15px}
.sbar .sum-i .v.pend{font-size:13px}
.qb{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:#C23A3A;color:#fff;font-weight:700;font-size:12px;flex:none}
.qb.res{background:#128A5A}
.life{display:flex;align-items:center;gap:0;flex-wrap:wrap}
.life .st{padding:4px 0}
.boqwrap .paper{max-width:1000px;padding:32px 34px}
.boqwrap .paper.land,.modal .paper.land{max-width:1240px}
.modal .paper{max-width:1000px}
.ws .dt.cg .tr{column-gap:14px}
.hubh .pchip{background:rgba(255,255,255,.16);color:#fff;border-color:rgba(255,255,255,.32)}
.card-h h3{white-space:nowrap}
/* ---- -11 Project area + shell ---- */
.thh{display:block;font-size:11px;font-weight:400;color:var(--tx3);line-height:1.35;margin-top:1px;letter-spacing:0;text-transform:none}
.kpi.hero .thh{color:#E4D5F5}
.card-h h3 .thh{font-size:10.5px}
.kbtn{font:inherit;text-align:left;cursor:pointer;border:1px solid var(--ln);color:var(--tx)}
.kbtn:hover{border-color:rgba(165,92,200,.5)}
.kbtn.on{border-color:var(--p5);box-shadow:0 0 0 2px rgba(165,92,200,.25)}
.seg .cnt{min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:rgba(32,16,56,.08);font-size:10.5px;display:inline-grid;place-items:center}
.seg .on .cnt{background:rgba(165,92,200,.18)}
.flt{display:flex;flex-direction:column;gap:3px;font-size:11px;color:var(--tx2);font-weight:500}
.flt .in{height:32px;font-size:12.5px;min-width:150px}
.lnk{background:none;border:0;padding:0;font:inherit;color:var(--tx);cursor:pointer;text-align:left}
.lnk:hover b{color:var(--p7);text-decoration:underline}
.svtag{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:6px;background:var(--el2);border:1px solid var(--ln2);font-size:11.5px;color:var(--tx2);white-space:nowrap}
.dt.pin2 .tr{background:#fff}
.dt.pin2 .tr.th{background:var(--head)}
.dt.pin2 .tr.sel{background:#F3E6F8}
.dt.pin2 .stl{position:sticky;left:0;z-index:3;background:inherit;align-self:stretch;display:flex;align-items:center;margin-left:-16px;padding-left:16px;box-shadow:6px 0 8px -6px rgba(32,16,56,.18)}
.dt.pin2 .str{position:sticky;right:0;z-index:3;background:inherit;align-self:stretch;display:flex;align-items:center;margin-right:-16px;padding-right:16px;box-shadow:-6px 0 8px -6px rgba(32,16,56,.18)}
.dt.pin2 .rw:hover{background:#FBF7FD}
.actdot{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;background:var(--el2);border:1px solid var(--ln2);color:var(--tx2);flex:none}

.kpi .lb{flex-wrap:wrap}
.kpi .lb .thh{flex-basis:100%}
.boqwrap>.col{min-width:0}
.boqwrap .paperwrap{overflow-x:auto;justify-content:flex-start}
.boqwrap .paperwrap .paper{margin:0 auto;flex:none;width:100%;min-width:760px}
.boqwrap .dt.dn .tr{column-gap:8px;padding:0 10px}
.dt.pin2 .str{margin-left:-10px;padding-left:10px}
.dt.pin2 .stl{margin-right:-10px;padding-right:10px}
/* ---- -12 Project area closeout ---- */
.login{min-height:100vh;display:grid;place-items:center;background:linear-gradient(160deg,#4C2768,#2B1640);padding:24px}
.login-card{width:400px;max-width:94vw;background:var(--sf);border-radius:16px;box-shadow:0 30px 80px rgba(0,0,0,.4);padding:26px 26px 20px;display:flex;flex-direction:column;gap:12px}
.login-card .logo.lg{background:var(--gr);border-radius:12px}
.sbicon{width:28px;height:28px;border-radius:7px;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.08);color:#D4C8E6;cursor:pointer;display:grid;place-items:center;flex:none}
.sbicon:hover{background:rgba(255,255,255,.16);color:#fff}
.protobox{display:flex;flex-direction:column;gap:7px;padding:10px;border-radius:9px;background:rgba(242,180,75,.08);border:1px solid rgba(242,180,75,.28)}
.sblink{display:inline-flex;align-items:center;gap:7px;background:none;border:0;color:#E3A9EA;font:inherit;font-size:12.5px;cursor:pointer;padding:2px 0}
.sblink:hover{color:#fff}
.ctxlbl{font-size:9.5px;font-weight:700;letter-spacing:.06em;color:var(--tx3);white-space:nowrap}
.pjchip.none{border-style:dashed;color:var(--tx2);background:#fff}
.pjchip.none:hover{border-color:var(--p5);color:var(--p7)}
.menuwrap{position:relative}
.rowmenu{position:absolute;right:0;top:34px;z-index:20;background:#fff;border:1px solid var(--ln2);border-radius:10px;box-shadow:0 18px 44px rgba(26,16,44,.22);padding:5px;display:flex;flex-direction:column;min-width:200px}
.rowmenu button{display:flex;align-items:center;gap:9px;padding:8px 10px;border:0;background:none;border-radius:7px;font:inherit;font-size:13px;color:var(--tx);cursor:pointer;text-align:left;white-space:nowrap}
.rowmenu button:hover{background:var(--el2)}
.rowmenu button .i{color:var(--p3)}
.npsteps{display:flex;gap:8px;padding:0 20px 2px}
.npdot{font-size:11.5px;color:var(--tx3);font-weight:600;padding:3px 10px;border-radius:999px;background:var(--el2);border:1px solid var(--ln)}
.npdot.on{background:var(--grb);color:#fff;border-color:transparent}
.npdot.dn{color:var(--ok);border-color:rgba(18,138,90,.4)}
.btn.dis{opacity:.4;cursor:not-allowed;pointer-events:none}
/* ---- -13 Project Hub closeout ---- */
/* Hub: one template, scrolls internally; header stays */
.hubb{display:flex;flex-direction:column;gap:14px;padding:16px 18px;overflow:auto;background:var(--bg)}
.hubgrid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:16px;align-items:start}
@media(max-width:900px){.hubgrid{grid-template-columns:minmax(0,1fr)}}
.hubh{position:sticky;top:0;z-index:5}
.hubb .card{min-width:0}
.hubb .dt.dn{border:1px solid var(--ln);border-radius:10px;overflow:auto}
.hubb .dt.dn .tr{column-gap:8px;padding:5px 10px}
.str2{display:flex;align-items:center;justify-content:flex-end}
/* Quotations / BOQ */
.qline{display:flex;align-items:center;gap:10px;padding:9px 11px;border:1px solid rgba(165,92,200,.3);border-radius:9px;background:#FBF7FD}
.qline.draft{border-color:rgba(242,180,75,.55);background:rgba(242,180,75,.09)}
.qline>.i{color:var(--p3);flex:none}
/* Quotation snapshot modal (above the hub) */
.snap-scrim{z-index:60}
.modal.snapm{width:560px;max-width:94vw;z-index:61;display:flex;flex-direction:column;max-height:88vh}
.modal.snapm .db{overflow:auto}
/* New Project modal: fixed, stable size — no jump when switching customer mode */
.modal.npm{width:720px;max-width:94vw;height:min(92vh,760px);display:flex;flex-direction:column;overflow:hidden}
.modal.npm .dh,.modal.npm .df{flex:none}
.modal.npm .npb{flex:1;min-height:0;overflow:auto}
.modal.npm .npb>*{flex-shrink:0}
/* ERP customer rows — aligned columns, radio in its own right column */
.pick{display:grid;grid-template-columns:minmax(0,1fr) auto 22px;gap:12px;align-items:center;width:100%;padding:9px 12px;border:0;border-bottom:1px solid var(--ln);background:#fff;text-align:left;font:inherit;color:var(--tx);cursor:pointer}
.pick:last-child{border-bottom:0}
.pick:hover{background:#FBF7FD}
.pick.on{background:var(--el2)}
.pick>.col{min-width:0}
.nprad{width:18px;height:18px;border-radius:50%;border:2px solid var(--ln2);display:block;justify-self:center;flex:none;background:#fff}
.pick.on .nprad,.nprad.on{border-color:var(--p5);box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px var(--p5)}
/* ---- -13b feedback: hub summary number alignment + table breathing room ---- */
.g5{align-items:stretch}
.g5 .sum-i{display:flex;flex-direction:column;gap:3px;height:100%}
.g5 .sum-i .lb{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-height:15px}
.g5 .sum-i .v{margin-top:auto}
/* ---- -13c: simple sideways scroll (no pinned columns) with an easy, visible scrollbar ---- */
.ws.xscroll{overflow-x:auto;overflow-y:visible;padding-bottom:4px;scrollbar-color:var(--p5) var(--el2);scrollbar-width:auto}
.ws.xscroll::-webkit-scrollbar{height:14px}
.ws.xscroll::-webkit-scrollbar-track{background:var(--el2);border-radius:8px}
.ws.xscroll::-webkit-scrollbar-thumb{background:var(--p5);border-radius:8px;border:3px solid var(--el2)}
.ws.xscroll::-webkit-scrollbar-thumb:hover{background:var(--p7)}
/* rows span the full min width so the table extends past the screen and scrolls */
.ws.xscroll .dt.cg .tr{min-width:var(--minw)}
/* ---- -14 Furniture Estimate: Excel-like full-width scroll + left-pinned #, Code, Description ---- */
.deskroot .grid{scrollbar-color:var(--p5) var(--el2);scrollbar-width:auto}
.deskroot .grid::-webkit-scrollbar{height:14px;width:12px}
.deskroot .grid::-webkit-scrollbar-track{background:var(--el2)}
.deskroot .grid::-webkit-scrollbar-thumb{background:var(--p5);border-radius:8px;border:3px solid var(--el2)}
.deskroot .grid::-webkit-scrollbar-thumb:hover{background:var(--p7)}
/* opaque backgrounds on sticky (pinned) cells per row type, so scrolled cells don't show through */
.deskroot .grid .tr>[style*="position: sticky"]{background:#fff}
.deskroot .grid .tr.grp>[style*="position: sticky"]{background:var(--el2)}
.deskroot .grid .tr.sel>[style*="position: sticky"]{background:#F3E6F8}
.deskroot .grid .tr.chl>[style*="position: sticky"]{background:#FDFBFE}
.deskroot .grid .tr.gsum>[style*="position: sticky"]{background:var(--head)}
.deskroot .grid .tr.tot>[style*="position: sticky"]{background:#3A1F52}
.deskroot .grid .tr.tot>[style*="position: sticky"] *{color:#fff}
/* ---- -15 review corrections ---- */
/* Furniture: Auto/Formula-locked Material/Labour inputs (switch Mode to Manual to edit) */
.grid .ci.autov{background:rgba(165,92,200,.07);color:var(--tx2);cursor:not-allowed}
.grid .ci.autov:hover{background:rgba(165,92,200,.12)}
/* Material Takeoff: multi-image Image Set */
.imgset{display:flex;flex-direction:column;gap:8px;padding:10px 12px;border:1px solid var(--ln);border-radius:10px;background:#fff}
.imgstrip{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}
.imgcard{display:flex;flex-direction:column;gap:6px;min-width:154px;max-width:170px;padding:8px;border:1px solid var(--ln2);border-radius:9px;background:#FCFBFE;flex:none}
.imgcard.on{border-color:var(--p5);box-shadow:0 0 0 2px rgba(165,92,200,.2)}
.imgthumb{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;height:56px;justify-content:center;border:1px dashed var(--ln2);border-radius:7px;background:repeating-linear-gradient(135deg,rgba(60,20,70,.05) 0 6px,transparent 6px 12px);cursor:pointer;padding:6px;color:var(--tx2);font:inherit;text-align:left}
.imgcard.on .imgthumb{border-color:var(--p5);color:var(--p7)}
.imgf{display:flex;flex-direction:column;gap:4px}
.imgf .in{height:28px;font-size:11.5px;padding:0 6px;min-width:0}
.imgf select.in{padding:0 4px}
/* Cost & Profit: compact Include / Pending toggle */
.seg.ip{height:30px}
.seg.ip button{min-width:72px;font-size:12px}
.seg.ip button.on{background:var(--grb);color:#fff}
/* -18: Furniture Group/Room sub-header inside Cost composition (visual grouping only) */
.dt.dn .tr.grphdr{padding:4px 10px;background:var(--head);border-top:1px solid var(--ln)}
.dt.dn .tr.grphdr .xs{font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--mut)}
/* -18: Add Manual Line discoverable box in BOQ Lines */
.mlbox{border:1px dashed var(--grb);border-radius:10px;padding:10px;background:rgba(122,58,158,.04)}

.pending-action[aria-disabled="true"]{opacity:.7;border-style:dashed;cursor:not-allowed;background:var(--el2);color:var(--muted)}
.synthetic-session{font-size:11px;padding:4px 12px;background:#fff1d6;color:#7a4b00;border-bottom:1px solid #dec58e}

/* Verified 1265px Cost breadcrumb overflow: wrap complete controls, never overlap. */
.top{height:auto;min-height:56px;flex-wrap:wrap;padding-top:8px;padding-bottom:8px;row-gap:8px}.top>.crumb,.top>.ctxlbl,.top>.seg,.top>.pv,.top>.btn{flex-shrink:0}.top .pjchip b{max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.top .pjchip{max-width:320px}.dkh{flex-wrap:wrap;row-gap:10px}.dkh>.savebox{flex-wrap:wrap;max-width:100%}

.price-registry .rw>span{min-width:0;white-space:normal;overflow-wrap:anywhere}.price-registry .rw .tag{display:inline-block;max-width:100%;white-space:normal;overflow-wrap:anywhere}.price-registry .rw{align-items:start}

/* E06 UI-P1-P4: presentation only; server values, policy and action handlers unchanged. */
.customer-paper .pt{width:100%;min-width:0;box-sizing:border-box;column-gap:6px;grid-template-columns:var(--cols)}
.customer-paper .pt>span{min-width:0;white-space:normal;overflow-wrap:anywhere}
.customer-paper .pth>span{align-self:end}
.cost-source[data-source="takeoff"] .card-h{flex-wrap:wrap;gap:10px;align-items:flex-start}
.cost-source[data-source="takeoff"] .card-h>.row{flex-wrap:wrap;max-width:100%}
.cost-source[data-source="takeoff"] .tr.rw{align-items:start;padding-top:12px;padding-bottom:12px}
.cost-source[data-source="takeoff"] .cost-toggle-cell,.cost-source[data-source="takeoff"] .cost-flags{min-width:0}
.cost-source[data-source="takeoff"] .seg.ip{display:flex;flex-direction:column;align-items:stretch;max-width:100%;gap:4px}
.cost-source[data-source="takeoff"] .seg.ip>button,.cost-source[data-source="takeoff"] .cost-flags .btn{width:100%;min-width:0;max-width:100%;height:auto;min-height:32px;white-space:normal;overflow-wrap:anywhere;line-height:1.4;padding:6px 8px}
.cost-source[data-source="takeoff"] .doublecount-block{width:100%;min-width:0}
.cost-source[data-source="takeoff"] .cost-flags .dbl{max-width:100%;height:auto;min-height:22px;white-space:normal;overflow-wrap:anywhere;padding:4px 8px}
.price-registry-wrap{flex:0 0 auto;min-height:240px;overflow-x:auto;overflow-y:visible}
.price-registry .rw{min-height:68px;padding-top:10px;padding-bottom:10px}
.price-registry .rw .tag{height:auto;min-height:22px;line-height:1.35;padding:4px 6px}
.price-item-list{display:flex;flex-direction:column;gap:8px;padding:12px}
.price-item-detail{min-width:0;padding:12px;border:1px solid var(--ln);border-radius:8px;background:#fff}
.price-item-trace{display:grid;grid-template-columns:100px minmax(0,1fr);gap:6px 12px;margin:10px 0 0;font-size:12px}
.price-item-trace dt,.quote-trace dt{font-weight:600;color:var(--tx2)}
.price-item-trace dd,.quote-trace dd{margin:0;min-width:0;white-space:normal;overflow-wrap:anywhere}
.quote-trace{display:grid;grid-template-columns:minmax(0,1fr);gap:2px;margin:0;font-size:11px;line-height:1.45}
.quote-trace dd{margin-bottom:6px}.quote-trace-cell{align-self:start;padding:6px 0}

/* Unified page title and service-first Project context, Cliff 2026-10-22. */
.main .top .page-title{display:flex;align-items:center;gap:10px;margin:0;font-size:21px;font-weight:600;line-height:1.4;color:var(--tx)}
.main .page-title>.i{color:var(--p3);flex-shrink:0}
.project-context{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:14px 28px 0;background:var(--bg)}
.project-context .pjchip{height:40px;max-width:390px}
.project-context .pjchip b{max-width:285px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.project-context .pop{left:0;right:auto;max-width:calc(100vw - 40px)}
.main .deskroot>.dkh>.col:first-child,.main .deskroot .service-only{display:none}
.main .deskroot>.dkh{padding-top:10px;padding-bottom:10px;background:var(--bg);border-bottom:0;justify-content:flex-end}
.main .deskroot>.dkh:has(>.col:only-child){display:none}
@media(max-width:700px){.project-context{padding:12px 16px 0}.project-context .pjchip{max-width:100%}.project-context .pjwrap{max-width:100%}.main .top .page-title{font-size:19px}}

/* Formula service buttons sit directly on the page background. */
.rate-service-tabs{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:0;background:transparent;border:0}

.customer-detail{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0}
.boq-option-tools{padding:12px 28px 0}.boq-option-tools summary{cursor:pointer;color:var(--p3);font-weight:600}

/* Project registers: matching header/row grids, centered cells, horizontal overflow. */
.hub-register-card{min-width:0;flex-shrink:0;overflow-x:auto}
.hub-register .tr{column-gap:16px;align-items:center;padding:12px 16px}
.hub-register .tr>*{text-align:center;min-width:0;white-space:normal;overflow-wrap:anywhere;justify-content:center;align-items:center}
.hub-register .th{position:static}
.hub-register .tr>.col{gap:4px}
.estimate-option-tools{padding:12px 28px 0}.estimate-option-tools summary{cursor:pointer;color:var(--p3);font-weight:600}

/* Working-document actions share a centered text baseline. */
.estimate-option-tools .btn.sm{display:inline-flex;align-items:center;justify-content:center;line-height:1.2;min-height:28px;padding-block:0}

.autosave-status{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:8px 28px;font-size:12px;color:var(--dim);min-height:34px}

/* Readable centered financial tables and the compact live Estimate summary. */
.financial-grid .tr>*{text-align:center!important;justify-content:center}
.financial-grid .tr>.col{align-items:center}
.financial-grid input,.financial-grid select{ text-align:center!important;text-align-last:center }
.cost-source .tr>*{text-align:center!important;justify-content:center;min-width:0}
.cost-source .tr>.col{align-items:center}
.cost-source .tr{column-gap:10px}
.cost-source .th{font-weight:600}
.estimate-summary.sbar{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;padding:12px 28px;background:linear-gradient(180deg,#faf7fd 0%,#f3edf8 100%);border-top:1px solid #ded0e9;box-shadow:0 -8px 24px rgba(65,31,86,.08)}
.estimate-summary .sum-i{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;min-height:66px;padding:9px 12px;border:1px solid #e6dcec;border-radius:12px;background:#fff;box-shadow:0 2px 5px rgba(49,24,69,.035);transition:transform .16s ease,box-shadow .16s ease}
.estimate-summary .sum-i:hover{transform:translateY(-2px);box-shadow:0 5px 14px rgba(65,31,86,.1)}
.estimate-summary .sum-i .lb{display:flex;align-items:center;justify-content:center;gap:6px;font-size:11px;line-height:1.4;color:#786983;text-align:center}
.estimate-summary .sum-i .lb:before{content:"";width:6px;height:6px;border-radius:50%;background:#b29ac4}
.estimate-summary .sum-i .v{font-size:22px;line-height:1.35;font-weight:700;letter-spacing:-.25px;font-variant-numeric:tabular-nums;text-align:center;color:#382247}
.estimate-summary .sum-i[data-metric="Selling"]{background:linear-gradient(120deg,#613184,#8d4db0);border-color:#754095}
.estimate-summary .sum-i[data-metric="Selling"] .lb{color:#eee2f7}
.estimate-summary .sum-i[data-metric="Selling"] .lb:before{background:#dbc0ee}
.estimate-summary .sum-i[data-metric="Selling"] .v{color:#fff}
.estimate-summary .sum-i[data-metric="Cost"]{background:#fffaf0;border-color:#f0e1bd}
.estimate-summary .sum-i[data-metric="Cost"] .lb:before{background:#c58b2a}
.estimate-summary .sum-i[data-metric="Cost"] .v{color:#86601d}
.estimate-summary .sum-i[data-metric="Gross Difference"],.estimate-summary .sum-i[data-metric="Profit"]{background:#f0faf6;border-color:#cde6da}
.estimate-summary .sum-i[data-metric="Gross Difference"] .lb:before,.estimate-summary .sum-i[data-metric="Profit"] .lb:before{background:#22936a}
.estimate-summary .sum-i[data-metric="Gross Difference"] .v,.estimate-summary .sum-i[data-metric="Profit"] .v{color:#167854}
.estimate-summary .sum-i:has(.neg){background:#fff2f2;border-color:#edcccc}
.estimate-summary .sum-i .v.pend{font-size:16px;color:#a06b1d}
@media(max-width:900px){.estimate-summary.sbar{padding:10px 16px;gap:7px;grid-template-columns:repeat(auto-fit,minmax(105px,1fr))}.estimate-summary .sum-i{min-height:58px;padding:7px}.estimate-summary .sum-i .v{font-size:18px}}
@media(prefers-reduced-motion:reduce){.estimate-summary .sum-i{transition:none}.estimate-summary .sum-i:hover{transform:none}}

/* Cost scope toggles fit inside their track instead of overflowing below it. */
.cost-source:not([data-source="takeoff"]) .cost-toggle-cell{display:flex;align-items:center;justify-content:center;align-self:stretch}
.cost-source:not([data-source="takeoff"]) .seg.ip{display:inline-flex;align-items:stretch;box-sizing:border-box;height:30px;padding:2px;gap:2px}
.cost-source:not([data-source="takeoff"]) .seg.ip>button{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;height:24px;min-height:0;padding:0 10px;line-height:1.35;margin:0;flex:1}
.cost-source .cost-total{min-height:44px;background:linear-gradient(110deg,#4d2967,#693884);border-top:1px solid #714991;border-radius:0 0 10px 10px;color:#fff;font-variant-numeric:tabular-nums;font-weight:600}
.cost-source .cost-total>*{color:inherit;white-space:nowrap}
.cost-source .cost-total>span{font-size:11px;color:#e5d6ef}

/* Margin quality colors; Markup uses the margin of its own row, never its own scale. */
.pct-loss{color:#b72d38!important}.pct-low{color:#927000!important}.pct-mid{color:#b65b16!important}.pct-good{color:#187547!important}.pct-high{color:#7839a6!important}.pct-unknown{color:#81778a!important}
.estimate-summary.sbar{padding:7px 28px;gap:8px;background:#f6f0fa}
.estimate-summary .sum-i,.estimate-summary .sum-i[data-metric]{min-height:44px;padding:5px 10px;gap:2px;border-radius:9px;background:#eee3f5;border:1px solid #e1d1eb;box-shadow:none}
.estimate-summary .sum-i .lb,.estimate-summary .sum-i[data-metric] .lb{color:#201b24;font-size:10px}
.estimate-summary .sum-i .lb:before,.estimate-summary .sum-i[data-metric] .lb:before{background:#b49ac7}
.estimate-summary .sum-i .v,.estimate-summary .sum-i[data-metric] .v{font-size:19px;color:#17131a;line-height:1.3}
.estimate-summary .sum-i:has(.neg){background:#eee3f5;border-color:#e1d1eb}
.cost-total [class*="pct-"],.grid .tr.tot [class*="pct-"]{background:#f5edf9;border-radius:5px;padding:2px 4px}
@media(max-width:900px){.estimate-summary.sbar{padding:6px 16px}.estimate-summary .sum-i{min-height:40px}.estimate-summary .sum-i .v{font-size:17px}}

/* Same light-purple Total treatment in Estimate and Cost. */
.financial-grid .tr.tot,.cost-source .cost-total{background:#e4d2ee;color:#302039;border-top:1px solid #ccb2dc;font-weight:700;min-height:40px}
.financial-grid .tr.tot .mcell,.cost-source .cost-total>span{color:#302039}
.financial-grid .tr.tot>*{background:#e4d2ee!important;color:#302039}
.deskroot .financial-grid .tr.tot>[style*="position: sticky"]{background:#e4d2ee!important}
.deskroot .financial-grid .tr.tot>[style*="position: sticky"] *{color:inherit}
.financial-grid .tr.tot .mcell.pend{color:#927000}
.financial-grid .tr.tot .mcell.neg{color:#b72d38}
.financial-grid .tr.tot [class*="pct-"],.cost-source .cost-total [class*="pct-"]{background:transparent;border-radius:0;padding:0}

.boq-top-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-left:auto}
.main .deskroot>.dkh:has(.savebox):not(:has(.savebox button)){display:none}

.document-remark{width:100%;min-width:0;height:28px;font:inherit;font-size:12px;background:transparent!important;border:0!important;border-bottom:1px solid transparent!important;border-radius:0;padding:2px 4px;box-shadow:none!important;outline:none;color:inherit;text-align:left!important;box-sizing:border-box}
.document-remark:focus{border-bottom-color:#ad85c6!important}
.document-remark::placeholder{color:#93849d;font-size:11px}
.estimate-document-row.is-selected .document-remark{color:#fff}
.estimate-document-row.is-selected .document-remark::placeholder{color:#d4bddf}
.document-remark[readonly]{cursor:default}


/* Cost commercial detail panels share the row on desktop. */
.cost-commercial-pair{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start;min-width:0}
.cost-commercial-pair>.card,.cost-commercial-pair .cost-reconciliation-card{min-width:0;margin:0}
.cost-commercial-pair .card-h{gap:10px;flex-wrap:wrap}
.cost-commercial-pair .card-h h3{min-width:0}
.cost-commercial-pair .li{gap:10px;flex-wrap:wrap}
.cost-commercial-pair .tnum{white-space:nowrap;text-align:right}
.cost-commercial-pair .card-f:empty{display:none}
@media(max-width:1000px){.cost-commercial-pair{grid-template-columns:minmax(0,1fr)}}

.cost-commercial-pair .cost-reconciliation-card .card-b{padding:0;gap:0!important}
.cost-commercial-pair .cost-reconciliation-card .card-b>.row{padding:8px 14px;border-bottom:1px solid var(--ln);gap:10px}
.cost-commercial-pair .cost-reconciliation-card .card-b>.xs{padding:10px 14px}

/* Monetary data align right; headers, quantities and percentages keep their alignment. */
.cost-source .tr:not(.th)>:nth-child(4),.cost-source .tr:not(.th)>:nth-child(5),.cost-source .tr:not(.th)>:nth-child(6),.cost-source .tr:not(.th)>:nth-child(7){text-align:right!important;justify-content:flex-end}

.financial-grid .tr:not(.th)>[style*="text-align: right"],.financial-grid .tr:not(.th)>[style*="text-align:right"]{text-align:right!important;text-align-last:right!important;justify-content:flex-end}

/* Editable fields are white; fetched/derived values have no individual box. */
.financial-grid input.ci:not([readonly]):not(:disabled),.financial-grid select.ci:not(:disabled),.financial-grid button.ci:not(:disabled){background:#fff!important;border:1px solid var(--ln)!important;box-shadow:none}
.financial-grid input.ci[readonly],.financial-grid input.ci:disabled,.financial-grid select.ci:disabled,.financial-grid button.ci:disabled{background:transparent!important;border-color:transparent!important;box-shadow:none!important;color:inherit;opacity:1}
.financial-grid input.ci[readonly]:focus,.financial-grid input.ci:disabled:focus{outline:none}
.financial-grid .tr:not(.tot)>.mcell,.cost-source .tr:not(.cost-total)>.mcell{background:transparent!important;border-radius:0;box-shadow:none}
.financial-grid input.ci:not([readonly]):not(:disabled):focus-visible,.financial-grid select.ci:not(:disabled):focus-visible,.financial-grid button.ci:not(:disabled):focus-visible{outline:2px solid #b68bcc;outline-offset:1px}

/* Unboxed monetary inputs share the exact text edge of computed values. */
.financial-grid input.ci[readonly][style*="text-align: right"],.financial-grid input.ci[readonly][style*="text-align:right"]{padding-left:0;padding-right:0;border-left-width:0!important;border-right-width:0!important}

.cost-source .tr:not(.th)>:nth-child(9){text-align:right!important;text-align-last:right!important;justify-content:flex-end}

.financial-grid .tr[data-furniture-group]>span{justify-content:flex-start!important;text-align:left!important}

.cost-source .tr:not(.th)>:nth-child(8){text-align:right!important;text-align-last:right!important;justify-content:flex-end}

/* Table headings always center; body cells retain their type-specific alignment. */
.tr.th>*,.tr.th2>*,.customer-paper .pth>span,thead th,[role="columnheader"]{text-align:center!important;text-align-last:center!important;justify-content:center!important}

/* The working-document register is a centered set on every consuming page. */
#estimate-document-list .estimate-document-row>*,.working-document-register .tr>*{text-align:center!important;text-align-last:center!important;justify-content:center!important;align-items:center}
#estimate-document-list .document-remark,.working-document-register .document-remark{text-align:center!important;text-align-last:center!important}

.document-category-picker{flex-wrap:wrap}.document-category-picker>button{min-height:34px;padding:6px 16px;display:inline-flex;align-items:center;justify-content:center;font-weight:600}

.document-category-picker>button.on{background:#843bab;color:#fff;box-shadow:none}

.document-remark-cell{display:flex;position:relative;align-items:center;min-width:0;width:100%;padding-right:30px;box-sizing:border-box}
.document-remark-cell .document-remark{flex:1;min-width:0}
.document-remark-pen{position:absolute;right:2px;display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:0;border-radius:5px;background:transparent;color:inherit;cursor:pointer;font-size:20px;line-height:1}
.document-remark-pen:hover,.document-remark-pen:focus-visible{background:#b991cd40;outline:1px solid #b991cd}

.document-remark-pen>span{display:inline-block;transform:scaleX(-1)}
