:root{--blue:#3DB5E6;--blue-d:#1f8fbf;--slate:#4B505A;--slate-d:#363a42;--light:#EAF6FC;--bg:#f3f5f8;--line:#d9dee5;--text:#1d2026;--muted:#6b7280;--ok:#16803c;--bad:#c62828;--warn:#d97706;--amber:#f59e0b;--radius:12px;--shadow:0 1px 2px rgba(0,0,0,.06),0 2px 8px rgba(0,0,0,.05)}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;font:16px/1.4 system-ui,-apple-system,"Segoe UI",Roboto,Lato,sans-serif;color:var(--text);background:var(--bg);padding-bottom:calc(72px + env(safe-area-inset-bottom))}
h1{font-size:1.5rem;margin:.2rem 0}
h2{font-size:1.08rem;margin:0 0 .8rem;color:var(--slate)}
h2 small{font-weight:400;font-size:.85rem}
h3{font-size:1rem;margin:.2rem 0;color:var(--slate)}
h4{font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;color:var(--blue-d);margin:.2rem 0 .5rem;display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}
a{color:var(--blue-d)}
.muted{color:var(--muted)} .small{font-size:.85rem} .center{text-align:center} .nowrap{white-space:nowrap}
.row{display:flex;align-items:center} .between{justify-content:space-between} .end{justify-content:flex-end} .wrap{flex-wrap:wrap} .gap{gap:.5rem} .grow{flex:1}
.mt{margin-top:1rem} .mb{margin-bottom:.6rem}

.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:.6rem;padding:.5rem .9rem;padding-top:calc(.5rem + env(safe-area-inset-top));background:#fff;border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:.5rem;text-decoration:none;color:var(--slate);font-weight:700}
.brand img{height:30px}
.brand span{border-left:1px solid var(--line);padding-left:.5rem}
.toplink{text-decoration:none;color:var(--slate);font-weight:600;padding:.4rem .6rem}
.iconbtn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:10px;border:1px solid var(--line);background:#fff;color:var(--slate);font-size:1.2rem;text-decoration:none;cursor:pointer}
.iconbtn.sm{width:32px;height:32px;font-size:.95rem}
.netbar{background:#fff7e6;color:#8a5a00;text-align:center;font-size:.85rem;padding:.3rem}

.page{max-width:1100px;margin:0 auto;padding:1rem .8rem}
.card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:1rem;margin-bottom:1rem;box-shadow:var(--shadow)}
.grid{display:grid;grid-template-columns:1fr;gap:.75rem}
@media(min-width:620px){.grid{grid-template-columns:1fr 1fr}.grid .wide{grid-column:1/-1}}
@media(min-width:1000px){.settings .grid,.editorpage .grid{grid-template-columns:repeat(3,1fr)}}

.field{display:flex;flex-direction:column;gap:.25rem;min-width:0}
.field label{font-size:.78rem;font-weight:600;color:var(--slate)}
.field label em{font-style:normal;color:var(--muted);font-weight:400}
input,select,textarea{font:inherit;font-size:16px;width:100%;padding:.6rem .65rem;border:1px solid #c6ccd5;border-radius:9px;background:#fff;color:var(--text);min-height:44px}
textarea{resize:vertical;min-height:70px}
input:focus,select:focus,textarea:focus{outline:2px solid var(--blue);outline-offset:0;border-color:var(--blue)}
select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,#777 50%),linear-gradient(135deg,#777 50%,transparent 50%);background-position:calc(100% - 15px) 52%,calc(100% - 10px) 52%;background-size:5px 5px;background-repeat:no-repeat;padding-right:1.8rem}
.help{color:var(--muted);font-size:.75rem}
.check{display:flex;align-items:center;gap:.5rem;font-size:.92rem;min-height:44px;cursor:pointer}
.check input{width:22px;height:22px;min-height:0;accent-color:var(--blue-d)}
.checks{display:flex;flex-wrap:wrap;gap:0 1.2rem}
.pair{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}
.sub>label{font-size:.85rem}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;min-height:44px;padding:.55rem 1rem;border-radius:10px;border:1px solid var(--line);background:#fff;color:var(--slate);font:inherit;font-weight:600;text-decoration:none;cursor:pointer;white-space:nowrap}
.btn:hover{border-color:#aab2bd}
.btn.primary{background:var(--blue-d);border-color:var(--blue-d);color:#fff}
.btn.primary:hover{background:#1a7ea9}
.btn.danger{background:var(--bad);border-color:var(--bad);color:#fff}
.btn.ghost{background:transparent}
.btn.small{min-height:36px;padding:.35rem .7rem;font-size:.85rem}
.btn:disabled{opacity:.4;cursor:default}
.danger-text{color:var(--bad)!important}
.linkbtn{background:none;border:0;color:var(--blue-d);font:inherit;font-size:.8rem;text-decoration:underline;cursor:pointer;padding:0}

.seg{display:flex;flex-wrap:wrap;gap:.35rem}
.seg button{min-height:40px;padding:.4rem .8rem;border:1px solid #c6ccd5;background:#fff;border-radius:9px;font:inherit;font-weight:600;color:var(--slate);cursor:pointer}
.seg button.on{background:var(--slate);color:#fff;border-color:var(--slate)}
.seg.big button{flex:1;min-height:52px;font-size:1rem}
.seg button.on.ok{background:var(--ok);border-color:var(--ok)}
.seg button.on.bad{background:var(--bad);border-color:var(--bad)}

.chip{display:inline-block;font-size:.72rem;font-weight:700;padding:.2rem .55rem;border-radius:99px;background:#eef0f3;color:var(--slate);white-space:nowrap}
.chip.ok{background:#e3f5e9;color:var(--ok)} .chip.bad{background:#fde8e8;color:var(--bad)}
.chip.conf.high{background:#e3f5e9;color:var(--ok)} .chip.conf.medium{background:#fff3d6;color:#9a6200} .chip.conf.low{background:#fde8e8;color:var(--bad)}
.badge{display:inline-block;font-size:.68rem;font-weight:700;padding:.12rem .45rem;border-radius:6px;background:#eef0f3;color:var(--slate);text-transform:none;letter-spacing:0;white-space:nowrap}
.badge.ai{background:#fff1d6;color:#9a5b00;border:1px solid var(--amber)}
.badge.assumed{background:#eaf6fc;color:#106f99;border:1px dashed var(--blue)}
.badge.ok{background:#e3f5e9;color:var(--ok)} .badge.bad{background:var(--bad);color:#fff} .badge.warn{background:#fff3d6;color:#9a6200}
.tag{font-size:.65rem;color:var(--muted);font-weight:400;border:1px solid var(--line);border-radius:4px;padding:0 .25rem}
.dot{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 4px;border-radius:9px;background:var(--amber);color:#fff;font-size:.7rem;font-weight:700}
.count{font-size:.75rem;color:var(--muted)}
.note{background:#fffbea;border:1px solid #f3e1a0;border-radius:9px;padding:.5rem .7rem;font-size:.85rem}
.assumed-note{background:var(--light);border-color:#bfe4f5}

/* jobs */
.search{margin:.8rem 0}
.joblist{display:grid;gap:.7rem}
@media(min-width:800px){.joblist{grid-template-columns:1fr 1fr}}
.jobcard{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.jobmain{display:flex;gap:.8rem;align-items:center;padding:.9rem;text-decoration:none;color:inherit}
.jobtype{background:var(--slate);color:#fff;font-weight:800;font-size:.75rem;border-radius:8px;padding:.6rem .5rem;letter-spacing:.03em}
.jobinfo{display:flex;flex-direction:column;flex:1;min-width:0}
.jobinfo span,.jobinfo small{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jobactions{display:flex;gap:.4rem;padding:.5rem .9rem;border-top:1px solid var(--line);background:#fafbfc}
.empty{text-align:center;padding:2rem;background:#fff;border-radius:var(--radius);border:1px dashed var(--line)}

/* editor */
.secnav{position:sticky;top:57px;z-index:10;display:flex;gap:.3rem;overflow-x:auto;background:#fff;border-bottom:1px solid var(--line);padding:.45rem .6rem;scrollbar-width:none}
.secnav::-webkit-scrollbar{display:none}
.secnav a{flex:none;text-decoration:none;color:var(--slate);font-weight:600;font-size:.88rem;padding:.5rem .8rem;border-radius:99px;background:#f1f3f6;white-space:nowrap}
.secnav a.on{background:var(--slate);color:#fff}
.jobhead{display:none}
@media(min-width:900px){
  .editor{display:grid;grid-template-columns:230px 1fr;max-width:1400px;margin:0 auto}
  .secnav{flex-direction:column;top:57px;height:calc(100vh - 57px);border-bottom:0;border-right:1px solid var(--line);padding:1rem .7rem;overflow:auto;align-self:start}
  .secnav a{background:none;border-radius:9px}
  .secnav a.on{background:var(--light);color:var(--slate-d);box-shadow:inset 3px 0 0 var(--blue)}
  .jobhead{display:flex;flex-direction:column;padding:.2rem .6rem .8rem;margin-bottom:.4rem;border-bottom:1px solid var(--line)}
  .jobhead small{color:var(--muted)}
  .editorpage{max-width:none;padding:1.2rem 1.5rem}
}
.pdfbar{position:fixed;left:0;right:0;bottom:0;z-index:15;display:flex;gap:.5rem;padding:.6rem .8rem;padding-bottom:calc(.6rem + env(safe-area-inset-bottom));background:rgba(255,255,255,.96);border-top:1px solid var(--line);backdrop-filter:blur(6px)}
.pdfbar .btn.primary{min-width:180px}

/* inspections */
.insplist{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:10px;overflow:hidden}
.insp{display:grid;grid-template-columns:2.6rem 1fr 6.2rem;gap:.5rem;align-items:center;padding:.45rem .6rem;border-top:1px solid #eef0f3;font-size:.88rem}
.insp:first-child{border-top:0}
.insp.head{background:var(--light);font-weight:700;color:var(--slate)}
.insp .no{color:var(--muted);font-variant-numeric:tabular-nums}
.insp.head .no{color:var(--slate)}
.outcome{min-height:40px;padding:.35rem 1.6rem .35rem .5rem;font-weight:700;text-align:center}
.outcome.ok{background-color:#e3f5e9;color:var(--ok);border-color:#9fd5b1}
.outcome.bad,.outcome.c1{background-color:#fde8e8;color:var(--bad);border-color:#f3a5a5}
.outcome.c2{background-color:#ffedd5;color:#c2410c;border-color:#fdba74}
.outcome.c3{background-color:#e0f2fe;color:#0369a1;border-color:#7dd3fc}
.outcome.fi{background-color:#f3e8ff;color:#7e22ce;border-color:#d8b4fe}
.outcome.lim,.outcome.na{background-color:#f1f3f6;color:var(--slate)}

/* observations */
.obs{border:1px solid var(--line);border-left:5px solid #c6ccd5;border-radius:10px;padding:.7rem;margin-bottom:.7rem;display:flex;flex-direction:column;gap:.5rem}
.obs.code-C1{border-left-color:var(--bad)} .obs.code-C2{border-left-color:#ea580c} .obs.code-C3{border-left-color:#0284c7} .obs.code-FI{border-left-color:#9333ea}
.presets{display:flex;flex-direction:column;align-items:stretch;gap:.35rem;margin-top:.5rem}
.presets .btn{white-space:normal;text-align:left;justify-content:flex-start}

/* boards & circuits */
.photo-cta{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;background:var(--light);border:1px dashed #9ed6ef;border-radius:10px;padding:.7rem;margin-bottom:.8rem}
.photo-btn{cursor:pointer}
.boarddetails{border:1px solid var(--line);border-radius:10px;padding:.2rem .8rem}
.boarddetails[open]{padding-bottom:.8rem}
.boarddetails>summary,.circuit>summary,details>summary{cursor:pointer;font-weight:600;color:var(--slate);padding:.6rem 0;list-style:none}
details>summary::-webkit-details-marker{display:none}
.boarddetails>summary::before,details.mt>summary::before{content:"▸ ";color:var(--blue-d)}
.boarddetails[open]>summary::before,details.mt[open]>summary::before{content:"▾ "}
.circuits{display:flex;flex-direction:column;gap:.45rem;margin:.6rem 0}
.circuit{border:1px solid var(--line);border-radius:10px;background:#fff}
.circuit[open]{border-color:#9ed6ef;box-shadow:0 0 0 3px #eaf6fc}
.circuit>summary{display:flex;align-items:center;gap:.5rem;padding:.55rem .7rem;flex-wrap:wrap}
.csum{display:grid;grid-template-columns:2rem 1fr auto;gap:.1rem .6rem;align-items:center;flex:1;min-width:0}
.cno{grid-row:span 2;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:8px;background:var(--slate);color:#fff;font-weight:800;font-size:.85rem}
.cdesc{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cdev{font-weight:800;color:var(--blue-d)}
.ccab{grid-column:2/4;font-size:.78rem;color:var(--muted);font-weight:500}
.cbadges{display:flex;gap:.3rem;flex-wrap:wrap}
@media(min-width:700px){.csum{grid-template-columns:2rem minmax(0,1fr) 5rem 7rem}.cno{grid-row:auto}.ccab{grid-column:auto;text-align:right}}
.cbody{padding:.2rem .8rem .8rem;border-top:1px solid #eef0f3}
.cgroup{padding:.5rem 0;border-bottom:1px dashed #e5e8ed}
.cgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem}
.cgrid .wide2{grid-column:1/-1}
@media(min-width:560px){.cgrid{grid-template-columns:repeat(4,minmax(0,1fr))}.cgrid .wide2{grid-column:span 2}}
@media(min-width:1100px){.cgrid{grid-template-columns:repeat(8,minmax(0,1fr))}.cgrid .wide2{grid-column:span 3}}
.cactions{padding-top:.7rem}
.field.ai-check input,.field.ai-check select{border:2px solid var(--amber);background-color:#fffbeb}
.field.ai-check label::after{content:" · AI check";color:#9a5b00;font-weight:700}
.field.assumed input,.field.assumed select{border-style:dashed;border-color:var(--blue);background-color:#f4fbfe}
.field.zs.fail input{border:2px solid var(--bad);background:#fde8e8;color:var(--bad);font-weight:700}
.field.zs.warn input{border:2px solid var(--warn);background:#fff7e6}
.field.zs.ok input{border-color:#7cc596;background:#f0fbf4}
.zsnote{font-size:.72rem;color:var(--muted)}
.field.zs.fail .zsnote{color:var(--bad);font-weight:700}
.switch{position:relative;display:inline-block;width:52px;height:30px;margin-top:.4rem}
.switch input{opacity:0;width:0;height:0;min-height:0}
.switch span{position:absolute;inset:0;background:#cfd5dd;border-radius:30px;transition:.15s;cursor:pointer}
.switch span::before{content:"";position:absolute;width:24px;height:24px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.15s;box-shadow:0 1px 2px rgba(0,0,0,.2)}
.switch input:checked+span{background:var(--blue-d)}
.switch input:checked+span::before{transform:translateX(22px)}

/* signature */
.sigbox{min-height:80px;border:1px dashed #c6ccd5;border-radius:10px;display:flex;align-items:center;justify-content:center;background:#fcfcfd;padding:.4rem;margin-bottom:.4rem}
.sigbox img{max-height:90px;max-width:100%}
.sig-area{position:relative;height:220px;border:1px solid var(--line);border-radius:10px;background:#fff;touch-action:none;margin:.6rem 0}
.sig-area canvas{position:absolute;inset:0;touch-action:none}
.sig-line{position:absolute;left:8%;right:8%;bottom:28%;border-bottom:1px solid #c6ccd5;pointer-events:none}

/* modal, toast */
.modal-backdrop{position:fixed;inset:0;z-index:100;background:rgba(20,24,31,.5);display:flex;align-items:flex-end;justify-content:center}
.modal{background:#fff;width:100%;max-width:560px;max-height:92vh;overflow:auto;border-radius:16px 16px 0 0;padding:1.1rem;padding-bottom:calc(1.1rem + env(safe-area-inset-bottom))}
.modal.wide{max-width:1000px}
.modal h3{margin-top:0}
@media(min-width:700px){.modal-backdrop{align-items:center}.modal{border-radius:16px}}
.sig-modal{max-width:640px}
.spinner{width:42px;height:42px;border:4px solid var(--light);border-top-color:var(--blue-d);border-radius:50%;margin:1rem auto;animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.toast{position:fixed;left:50%;bottom:calc(84px + env(safe-area-inset-bottom));transform:translate(-50%,20px);background:var(--slate-d);color:#fff;padding:.6rem 1rem;border-radius:10px;opacity:0;transition:.25s;z-index:200;max-width:90vw;font-size:.9rem}
.toast.show{opacity:1;transform:translate(-50%,0)}
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line);border-radius:10px}
table{border-collapse:collapse;width:100%;font-size:.85rem}
th,td{padding:.45rem .5rem;border-bottom:1px solid #eef0f3;text-align:left;vertical-align:top}
th{background:var(--light);color:var(--slate);font-size:.75rem;white-space:nowrap}
table.review td input[type=checkbox]{width:22px;height:22px;min-height:0}
tr.conf-low{background:#fff7f7}
tr.conf-medium{background:#fffcf2}
.exists{color:#9a5b00} .new{color:var(--ok);font-weight:700}
.review-top{display:flex;gap:.8rem;align-items:flex-start;margin-bottom:.7rem}
.thumb{width:120px;max-height:120px;object-fit:cover;border-radius:8px;border:1px solid var(--line)}
.radios{display:flex;flex-direction:column;gap:.45rem;margin:.8rem 0;font-size:.9rem}
.radios input{width:20px;height:20px;min-height:0;vertical-align:middle;margin-right:.35rem}
table.rules input,table.rules select{min-height:38px;padding:.35rem .45rem;font-size:15px}
table.rules td{padding:.3rem}
table.rules td:nth-child(2) input,table.rules td:nth-child(3) input{width:4.2rem}
.readonly-addr{min-height:44px;display:flex;align-items:center;padding:.55rem .7rem;border:1px solid var(--line);border-radius:9px;background:#f6f8fa;color:var(--slate);font-weight:600}
.switch.inline{margin:0;vertical-align:middle}
.jobinfo .ref{color:var(--blue-d);font-weight:700;font-variant-numeric:tabular-nums}
.addrlist{display:flex;flex-direction:column;gap:.3rem;max-height:60vh;overflow:auto}
.addrpick{justify-content:space-between;white-space:normal;text-align:left}
@media(max-width:699px){.cbadges:not(:empty){flex-basis:100%;padding-left:2.6rem}}
.field.choice .other-input{margin-top:.35rem;border-style:dashed}
.check.small{min-height:32px;font-size:.85rem}
input[type=date]{min-height:44px;-webkit-appearance:none;appearance:none;background:#fff}
input:disabled{background:#f1f3f6;color:#9aa1ab}

/* ---- calculated values ---- */
.tag.calc{color:#5b21b6;border-color:#c4b5fd;background:#f5f3ff;font-weight:700}
.field.calc input{color:#5b21b6}
.zdbnote{margin:.25rem 0 .5rem}

/* ---- circuit view toggle ---- */
.viewtoggle{display:inline-flex;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:#fff}
.viewtoggle button{border:0;background:transparent;padding:.4rem .7rem;font:inherit;font-size:.85rem;cursor:pointer;color:var(--slate)}
.viewtoggle button.on{background:var(--slate);color:#fff}

/* ---- all-circuits table ---- */
.ctable-wrap{overflow:auto;max-height:72vh;border:1px solid var(--line);border-radius:10px;background:#fff;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain}
.ctable-wrap .pad{padding:.75rem}
table.ctable{border-collapse:separate;border-spacing:0;font-size:13px;width:max-content;min-width:100%}
table.ctable th,table.ctable td{border-right:1px solid #e3e8ee;border-bottom:1px solid #e3e8ee;padding:0;position:relative;background:#fff;vertical-align:middle}
table.ctable thead th{position:sticky;top:0;z-index:3;background:var(--slate-d);color:#fff;font-weight:600;font-size:11.5px;padding:6px 4px 6px 6px;text-align:left;white-space:nowrap}
table.ctable .th{display:flex;align-items:center;gap:2px;justify-content:space-between}
table.ctable .fd{background:transparent;border:0;color:#9fdcf6;cursor:pointer;font-size:14px;line-height:1;padding:0 2px;border-radius:4px}
table.ctable .fd:hover{background:rgba(255,255,255,.15)}
table.ctable .c-no{position:sticky;left:0;z-index:2;min-width:46px;width:46px;max-width:46px}
table.ctable .c-desc{position:sticky;left:46px;z-index:2;min-width:200px;box-shadow:3px 0 0 -1px #cfd6de}
table.ctable thead .c-no,table.ctable thead .c-desc{z-index:4}
table.ctable tbody tr:nth-child(even) td{background:#f8fafc}
table.ctable td input:not([type=checkbox]),table.ctable td select{width:100%;border:0;border-radius:0;background:transparent;padding:8px 6px;font:inherit;min-height:36px;box-shadow:none;margin:0;color:var(--text)}
table.ctable td select{padding-right:2px;appearance:auto}
table.ctable td input:focus,table.ctable td select:focus{outline:2px solid var(--blue-d);outline-offset:-2px;background:#eef8fd}
table.ctable td input[type=checkbox]{margin:10px auto;display:block;width:18px;height:18px}
table.ctable .c-no input{font-weight:700}
table.ctable td.c-act{white-space:nowrap;padding:0 4px;text-align:center}
table.ctable td.c-act .iconbtn{margin:0 1px}
table.ctable td.c-act .iconbtn.ok{color:var(--ok)}
table.ctable td.assumed{background:#eaf6fc !important;box-shadow:inset 0 0 0 1px var(--blue)}
table.ctable td.ai-check{background:#fff7e6 !important;box-shadow:inset 0 0 0 1px var(--amber)}
table.ctable td.assumed::after,table.ctable td.calc::after,table.ctable td.ai-check::before{position:absolute;top:1px;font-size:8.5px;line-height:1;padding:1px 3px;border-radius:3px;pointer-events:none;font-weight:700;letter-spacing:.02em}
table.ctable td.assumed::after{content:'assumed';right:2px;background:var(--blue);color:#fff}
table.ctable td.calc::after{content:'calc';right:2px;background:#7c3aed;color:#fff}
table.ctable td.ai-check::before{content:'AI';left:2px;background:var(--amber);color:#4a2c00;z-index:1}
table.ctable td.calc input{color:#5b21b6}
table.ctable td.zs-ok input{color:var(--ok);font-weight:600}
table.ctable td.zs-warn{background:#fff3d6 !important}
table.ctable td.zs-warn input{color:#9a6200;font-weight:700}
table.ctable td.zs-fail{background:#fde4e4 !important;box-shadow:inset 0 0 0 2px var(--bad)}
table.ctable td.zs-fail input{color:var(--bad);font-weight:700}
table.ctable .resetcalc{position:absolute;right:1px;bottom:1px;border:0;background:#ede9fe;color:#5b21b6;border-radius:4px;font-size:11px;line-height:1;padding:2px 4px;cursor:pointer}
.tablefoot .badge,.tablefoot .tag{vertical-align:middle}
@media (max-width:700px){
  table.ctable{font-size:12.5px}
  table.ctable .c-desc{min-width:132px}
  .ctable-wrap{max-height:68vh;margin:0 -.25rem}
}
/* keep wide tables inside their card (grid/flex children default to min-width:auto) */
.editor,.editorpage,.board,.board > *{min-width:0}
.editorpage{max-width:100%}
.ctable-wrap{max-width:100%;width:100%}
table.ctable td select{min-width:0;max-width:100%}
table.ctable .c-remarks{min-width:190px}
table.ctable td input[type=checkbox]{min-height:0;padding:0;margin:8px auto}
table.ctable td input:not([type=checkbox]),table.ctable td select{min-height:0;height:34px;padding:6px 6px}
@media (max-width:700px){ table.ctable td input:not([type=checkbox]),table.ctable td select{font-size:16px;height:40px} } /* 16px stops iOS zooming on focus */

/* ---- quick fill N/A / -- / LIM ---- */
.btn.tiny{min-height:26px;padding:.1rem .5rem;font-size:.75rem;border-radius:7px;font-weight:700}
.qfill{display:inline-flex;align-items:center;gap:.25rem;margin-left:.5rem;font-size:.72rem;font-weight:500;color:var(--muted);text-transform:none;letter-spacing:0}
.qtoks .qtok{min-width:72px;font-size:1rem;font-weight:800}
table.ctable td.c-act .natok{width:auto;padding:0 .35rem;font-size:.68rem;font-weight:800}
.chip .iconbtn.xs{width:18px;height:18px;font-size:.7rem;border:0;background:transparent;margin-left:.2rem;vertical-align:middle}
.dictlist{display:flex;flex-wrap:wrap;gap:.35rem}

/* ---- check cert ---- */
.modal.checkmodal{max-width:820px;display:flex;flex-direction:column;max-height:92vh}
.checkmodal .ck-head h3{margin:0}
.ck-summary{display:flex;gap:.4rem;flex-wrap:wrap;margin:.6rem 0}
.ck-pill{font-size:.8rem;font-weight:800;padding:.25rem .65rem;border-radius:99px}
.ck-pill.error{background:#fde4e4;color:var(--bad)} .ck-pill.warning{background:#fff3d6;color:#9a6200} .ck-pill.info{background:#e8f3fb;color:#106f99}
.ck-note{background:#fff5f5;border-left:4px solid var(--bad);padding:.4rem .6rem;border-radius:6px}
.ck-body{overflow:auto;flex:1;min-height:120px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:0 -1.1rem;padding:0 1.1rem}
.ck-group{margin:.5rem 0}
.ck-group>summary{cursor:pointer;padding:.5rem 0;font-size:.98rem;list-style:none;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.ck-group>summary::-webkit-details-marker{display:none}
.ck-dot{width:11px;height:11px;border-radius:50%;display:inline-block}
.ck-dot.error{background:var(--bad)} .ck-dot.warning{background:var(--amber)} .ck-dot.info{background:var(--blue)}
.ck-n{font-weight:800;background:#eef0f3;border-radius:99px;padding:0 .5rem;font-size:.8rem}
.ck-group ul{list-style:none;margin:0;padding:0}
.ck-item{padding:.5rem .6rem;border-left:4px solid var(--line);background:#fafbfc;border-radius:6px;margin:.3rem 0}
.ck-item.error{border-left-color:var(--bad)} .ck-item.warning{border-left-color:var(--amber)} .ck-item.info{border-left-color:var(--blue)}
.ck-line{display:flex;gap:.5rem;align-items:baseline;flex-wrap:wrap}
.ck-cat{font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);min-width:88px}
.ck-msg{flex:1;min-width:200px;font-size:.9rem}
.ck-go{white-space:nowrap;font-size:.85rem}
.ck-fix{display:flex;gap:.3rem;flex-wrap:wrap;margin-top:.35rem;padding-left:96px}
.ck-ok{font-size:1.05rem;color:var(--ok);font-weight:700;padding:1rem 0}
.ck-foot{padding-top:.7rem}
@media(max-width:700px){.ck-fix{padding-left:0}.ck-cat{min-width:0}.modal.checkmodal{max-height:94vh}}
.flash{animation:flash 2.2s ease-out}
@keyframes flash{0%,40%{box-shadow:0 0 0 3px var(--amber);background-color:#fff7e0}100%{box-shadow:0 0 0 0 transparent}}
@media(max-width:520px){.hide-sm{display:none}.pdfbar .btn.primary{min-width:0;flex:0 0 auto}}

/* ---- certificate types ---- */
.modal.typemodal{max-width:620px}
.typepick{display:grid;gap:.55rem;margin-top:.6rem}
.typebtn{display:flex;align-items:center;gap:.8rem;text-align:left;width:100%;background:#fff;border:1px solid var(--line);border-radius:12px;padding:.75rem .9rem;cursor:pointer;font:inherit;color:var(--text);transition:border-color .15s,box-shadow .15s}
.typebtn:hover,.typebtn:focus-visible{border-color:var(--blue);box-shadow:0 0 0 3px #d6effa;outline:0}
.typebtn .ti{font-size:1.6rem;width:2.2rem;text-align:center;flex:none}
.typebtn .tt{flex:1;display:flex;flex-direction:column;gap:.15rem}
.typebtn .tt small{color:var(--muted);font-size:.82rem;line-height:1.3}
.typebtn .tc{font-weight:800;font-size:.72rem;background:var(--slate);color:#fff;border-radius:6px;padding:.25rem .45rem;letter-spacing:.03em}
.jobtype.t-EIC{background:#0e7490}.jobtype.t-MW{background:#7c3aed}.jobtype.t-PVT{background:#d97706}.jobtype.t-PVC{background:#15803d}
.declnote{grid-column:1/-1;background:var(--light);border-left:3px solid var(--blue);padding:.55rem .7rem;border-radius:6px;font-size:.88rem;margin:0}
table.pvtable th.w4{min-width:64px}table.pvtable th.w5{min-width:84px}table.pvtable th.w6{min-width:120px}table.pvtable th.w8{min-width:180px}
table.pvtable .calcslot{position:absolute;right:1px;bottom:1px}
table.pvtable .calcslot .linkbtn{font-size:10.5px;background:#ede9fe;color:#5b21b6;border-radius:4px;padding:1px 4px;text-decoration:none}
table.pvtable .devslot{position:absolute;right:3px;bottom:1px;font-size:10px;font-weight:700;pointer-events:none;color:var(--muted)}
table.pvtable td.zs-fail .devslot{color:var(--bad)}table.pvtable td.zs-ok .devslot{color:var(--ok)}
table.functable{width:100%;border-collapse:collapse;font-size:.9rem}
table.functable th{text-align:left;font-size:.78rem;color:var(--muted);font-weight:600;padding:.35rem .4rem;border-bottom:1px solid var(--line)}
table.functable td{padding:.35rem .4rem;border-bottom:1px solid #eef1f4;vertical-align:middle}
table.functable td:first-child{min-width:180px}
table.functable select,table.functable input{min-height:38px;margin:0}
.unitin{display:flex;align-items:center;gap:.3rem}.unitin input{min-width:70px}.unitin em{font-style:normal;color:var(--muted);font-size:.8rem;white-space:nowrap}
.photogrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.7rem;margin-top:.6rem}
.photogrid .photo{margin:0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff;display:flex;flex-direction:column}
.photogrid .photo img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;background:#eef1f4}
.photogrid .photo figcaption{padding:.4rem;display:grid;gap:.3rem}
.photogrid .photo figcaption select,.photogrid .photo figcaption input{min-height:34px;font-size:.85rem;margin:0}
.vstatus{border:1px solid var(--line);border-radius:10px;padding:.65rem .8rem;background:#fcfcfd;margin-bottom:.6rem;line-height:1.5}
.okc{color:var(--ok);font-weight:700}.badc{color:var(--bad);font-weight:700}
@media (max-width:700px){.typebtn{padding:.65rem}.typebtn .tt small{font-size:.78rem}table.functable td:first-child{min-width:130px}}
.insp.two{grid-template-columns:1fr 6.2rem}
table.functable select{min-width:5.4rem}
@media (max-width:700px){
  table.functable thead{display:none}
  table.functable,table.functable tbody{display:block}
  table.functable tr{display:grid;grid-template-columns:5.6rem 1fr;gap:.35rem .5rem;padding:.55rem 0;border-bottom:1px solid #eef1f4}
  table.functable td{border:0;padding:0}
  table.functable td:first-child,table.functable td:last-child{grid-column:1/-1;min-width:0}
  table.functable td:first-child{font-weight:600}
  table.functable td:last-child input{width:100%}
  table.functable td:last-child input::placeholder{color:#a0a8b3}
}
.buildinfo{text-align:center;margin:1.5rem 0 .5rem;opacity:.7}
.vchip{display:inline-block;margin-left:.5rem;font-size:.8rem;padding:.15rem .5rem;border-radius:999px;background:#eee;color:#444}
.vchip.ok{background:#e3f6e8;color:#1d6b33}.vchip.bad{background:#fde8e8;color:#9b1c1c}.vchip.warn{background:#fff4dc;color:#8a5a00}
.badge.imp{background:#fff1d6;color:#8a5a00;border:1px solid #f0b54a}
.field.imported>label .badge.imp{margin-left:.3rem;font-size:.7rem;vertical-align:middle}
.prevres{color:#8a8f98;background:#f5f6f8;border:1px dashed #d5d8de;border-radius:6px;padding:.3rem .5rem;margin:.4rem 0 0}
.prevres b{color:#6b7079;font-weight:600}
.impsec{margin:.4rem 0;border:1px solid #e3e5ea;border-radius:8px;padding:.3rem .6rem}
.impsec>summary{cursor:pointer;list-style:none}
.impsec>summary label{display:inline-flex;gap:.4rem;align-items:center}
.impboard{margin:.6rem 0;padding:.6rem}
.jobhead .certimp{margin-top:.4rem;align-self:flex-start}

tr.prevrow td{padding:0 6px 4px;border-top:0}
tr.prevrow .prevres{margin:0}
/* ---------------- MCS PV module ---------------- */
.page.wide{max-width:1400px}
.mcstabs,.qmstabs{display:flex;flex-wrap:wrap;gap:4px;margin:0 0 12px}
.mcstabs a,.qmstabs a{padding:6px 10px;border-radius:8px;background:#eef3f7;color:#2b3a46;text-decoration:none;font-size:.9rem}
.mcstabs a.on,.qmstabs a.on{background:#3db5e6;color:#fff}
.qmstabs a{font-size:.8rem;padding:4px 8px}
.pipeline{display:grid;grid-template-columns:repeat(7,minmax(170px,1fr));gap:8px}
@media(max-width:1100px){.pipeline{grid-template-columns:repeat(2,1fr)}}
.pcol{background:#f3f6f9;border-radius:10px;padding:6px;min-height:80px}
.pcol h3{font-size:.8rem;margin:2px 4px 6px;display:flex;gap:4px;align-items:center}.pcol h3 small{margin-left:auto;color:#678}
.sn{display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;background:#4b505a;color:#fff;font-size:.7rem}
.pcard{display:flex;flex-direction:column;gap:2px;background:#fff;border:1px solid #dde5ec;border-radius:8px;padding:6px 8px;margin-bottom:6px;color:inherit;text-decoration:none;font-size:.82rem}
.pcard.overdue{border-color:#d33;box-shadow:inset 3px 0 #d33}.pcard small{color:#567}.pcard small.bad,.bad{color:#c22!important}.warn{color:#b86b00}.ok{color:#18803b}.error{color:#c22}
.pbar{height:6px;background:#e3e9ee;border-radius:4px;overflow:hidden;position:relative}.pbar i{display:block;height:100%;background:#3db5e6}
.pbar.big{height:18px;margin:6px 0 12px}.pbar.big span{position:absolute;inset:0;font-size:.72rem;line-height:18px;padding-left:8px}
.mjobhead{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;align-items:flex-start}.mjobhead h1{margin:0}
.mjob{display:grid;grid-template-columns:210px 1fr;gap:14px}@media(max-width:800px){.mjob{grid-template-columns:1fr}}
.stagenav{display:flex;flex-direction:column;gap:2px;position:sticky;top:8px;align-self:start}
.stagenav a{display:grid;grid-template-columns:22px 1fr;column-gap:6px;padding:6px;border-radius:8px;color:#2b3a46;text-decoration:none;font-size:.85rem}
.stagenav a small{grid-column:2;color:#789;font-size:.7rem}.stagenav a.on{background:#e3f4fb}.stagenav a.done .sn{background:#18803b}
.checklist{list-style:none;padding:0;margin:0 0 12px}.checklist li{border-bottom:1px solid #eef1f4;padding:6px 0}.checklist li.done .ckrow span:first-of-type{color:#456}
.ckrow{display:flex;gap:6px;align-items:baseline;flex-wrap:wrap;cursor:pointer}.ckmeta{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:3px 0 0 24px}
.cknote{flex:1;min-width:160px;font-size:.8rem;padding:3px 6px}
.badge.mand{background:#fde3e3;color:#a11}.badge.opt{background:#e8eef3;color:#567}.badge.check{background:#fff0c2;color:#7a5600;border:1px solid #e7c200}
.clause{font-size:.7rem;color:#7a8a99;cursor:help}
.evlist{display:flex;gap:4px;flex-wrap:wrap}.ev img{height:36px;border-radius:4px;vertical-align:middle}.ev{font-size:.75rem}
.mform h3{margin-top:0}.mtable{width:100%;border-collapse:collapse;font-size:.82rem}.mtable th,.mtable td{border:1px solid #e0e6eb;padding:3px 5px;text-align:left}.mtable input{width:100%;min-width:50px}
.mtable tr.tot td{font-weight:bold;background:#f3f8fb}.rem tr.overdue{background:#fde8e8}.rem tr.soon{background:#fff6dc}
.sunpathbox{overflow-x:auto;cursor:crosshair}.sunpathbox svg{width:100%;height:auto;max-width:900px}
.pair{display:inline-flex;gap:2px;margin:0 6px 4px 0}.pair input{width:64px}
.wording{background:#f6f8fa;border-left:3px solid #3db5e6;padding:6px 10px;font-size:.8rem}
.ckbox{background:#fff8f0;border:1px solid #f0d7b8;border-radius:8px;padding:4px 10px;margin:6px 0}.ckbox p{margin:3px 0;font-size:.85rem}
.docrow{padding:6px 0;border-bottom:1px solid #eef1f4}.countdown{font-size:1.3rem;font-weight:bold}
.stagefoot{margin:14px 0}.audit{font-size:.8rem;margin-top:10px}.contents{list-style:none;padding:0}.linkrow{margin:6px 0}
.ready td{padding:6px}.ready tr.gap{background:#fde8e8}.ready tr.ok td:first-child{color:#18803b;font-weight:bold}
.qrow .grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}.chkval input{background:#fffbea}
.cklist li{margin:3px 0}
.ckrow{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.ckrow input[type=checkbox],.mcs input[type=checkbox],label.check input[type=checkbox]{width:22px;height:22px;min-height:0;flex:0 0 auto;margin:0}
@media (max-width:520px){.toplink{padding:.3rem .35rem;font-size:14px}.toplink[href="#/"]{display:none}.topbar .brand span{display:none}.topbar{flex-wrap:nowrap}}
/* ---- roof design tool (Easy PV-style) */
.rd{--g:#1e9e55;--a:#d68910;--r:#c0392b}
.rd-summary{display:flex;flex-wrap:wrap;gap:.4rem 1rem;align-items:center;padding:.6rem .8rem;border-radius:10px;margin:.4rem 0;border:2px solid #ddd;background:#fff}
.rd-summary.green{border-color:var(--g);background:#eefaf2}.rd-summary.amber{border-color:var(--a);background:#fff7e8}.rd-summary.red{border-color:var(--r);background:#fdeeee}
.rd-summary small{flex-basis:100%;color:#444}
.rd-status{font-weight:700;padding:.15rem .6rem;border-radius:99px;color:#fff;white-space:nowrap}.rd-status.green{background:var(--g)}.rd-status.amber{background:var(--a)}.rd-status.red{background:var(--r)}.rd-status.sm{font-size:.75rem;padding:0 .45rem}
.rd-tabs{display:flex;gap:.3rem;flex-wrap:wrap;margin:.3rem 0}.rd-tab{border:1px solid #ccd;background:#f6f7f9;border-radius:8px 8px 0 0;padding:.35rem .7rem;cursor:pointer;font:inherit}.rd-tab.on{background:#fff;border-bottom-color:#fff;font-weight:600}.rd-tab .dot{display:inline-block;width:.6rem;height:.6rem;border-radius:50%;margin-right:.35rem;vertical-align:middle}.dot.green{background:var(--g)}.dot.amber{background:var(--a)}.dot.red{background:var(--r)}
.rd-grid{display:grid;grid-template-columns:minmax(280px,340px) minmax(0,1fr);gap:1rem;align-items:start}
@media (max-width:1000px){.rd-grid{grid-template-columns:1fr}}
.rd-side{display:flex;flex-direction:column;gap:.6rem;min-width:0}
.rd-step{background:#fff;border:1px solid #e1e4e8;border-radius:10px;padding:.6rem .7rem}.rd-step h4{margin:.1rem 0 .5rem}.rd-step .sn{display:inline-grid;place-items:center;width:1.4rem;height:1.4rem;border-radius:50%;background:#1f3b63;color:#fff;font-size:.8rem;margin-right:.3rem}
.rd .grid.g2{display:grid;grid-template-columns:1fr 1fr;gap:.4rem .6rem}.rd .field{min-width:0}.rd .field input,.rd .field select{width:100%;box-sizing:border-box}
.rd-shapes{display:flex;gap:.4rem;margin-bottom:.4rem}.rd-shape{flex:1;border:2px solid #dde;background:#fff;border-radius:8px;padding:.25rem;cursor:pointer;display:flex;flex-direction:column;align-items:center;font:inherit;font-size:.75rem}.rd-shape svg{width:46px;height:30px}.rd-shape.on,.rd-tile.on{border-color:#1f3b63;background:#eef3fa}
.rd-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:.3rem;margin:.2rem 0 .5rem}.rd-tile{border:2px solid #e3e3e3;background:#fff;border-radius:8px;padding:.25rem;cursor:pointer;font:inherit;font-size:.68rem;line-height:1.1;display:flex;flex-direction:column;align-items:center;gap:.15rem}.rd-tile i{display:block;width:100%;height:16px;border-radius:4px;background-image:repeating-linear-gradient(0deg,rgba(255,255,255,.25) 0 2px,transparent 2px 6px)}
.rd-pick{margin-bottom:.45rem}.rd-pick .row input{flex:1;min-width:0}.rd-new{margin:.4rem 0;padding:.5rem;background:#f7f9fc}.rd-new .grid{display:grid;grid-template-columns:1fr 1fr;gap:.3rem .5rem}
.rd-obs{display:flex;align-items:center;gap:.3rem;margin:.25rem 0;font-size:.85rem}.rd-obs input{width:3.4rem}
.rd-main{min-width:0}.rd-toolbar{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin-bottom:.4rem}
.rd .roofdraw{background:#fff;border:1px solid #e1e4e8;border-radius:10px;padding:.3rem;overflow:hidden}.rd .roofdraw svg{width:100%;height:auto;display:block;touch-action:none}
.rd-bom table{width:100%}.rd-details summary,.rd-adv summary{cursor:pointer}
.roollib .tablewrap{overflow-x:auto}.roollib input{min-width:0}
.rd .field label .badge{display:inline-block;padding:0 .35rem;font-size:.66rem;line-height:1.3;height:auto;vertical-align:middle}
.mjob>.stagebody{min-width:0}.mjob>*{min-width:0}.stagebody .tablewrap{overflow-x:auto;max-width:100%}
.rd-ds{display:flex;flex-wrap:wrap;gap:4px;align-items:center;margin-top:4px}.rd-sheet{display:inline-flex;gap:3px;align-items:center;font-size:12px;background:var(--bg2,#f3f5f8);border-radius:6px;padding:1px 4px}
.dsreview td{vertical-align:top;font-size:13px}.dsreview small{word-break:break-word}.modal:has(.dsreview){max-width:min(980px,96vw)}
.rd-todo{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:4px;font-size:13px;flex-basis:100%}.rd-todo li{display:flex;gap:6px;align-items:center;flex-wrap:wrap;background:#fff;border:1px solid #e3e7ee;border-left:4px solid #999;border-radius:6px;padding:4px 8px}
.rd-todo li .tx{flex:1 1 220px;min-width:0}.rd-todo li .ic{font-weight:700;width:1.1em;text-align:center}
.rd-todo li.need{border-left-color:#e0a100}.rd-todo li.fail{border-left-color:#c0392b}.rd-todo li.confirm{border-left-color:#7d93b3}.rd-todo li.advice{border-left-color:#2e86c1;color:#345}
.rd-flash{outline:3px solid #e0a100!important;outline-offset:2px;transition:outline .3s}
.mintoggle{display:inline-flex;align-items:center;gap:6px;border:1px solid #cfd6e0;border-radius:999px;padding:3px 10px;font-size:13px;background:#fff}.mintoggle.on{border-color:#2e86c1;background:#eef6fc}.mintoggle label{margin:0}
.minnote{background:#f6f8fb;border-radius:6px;padding:6px 8px}
/* task 6: job documents, quote builder, signatures, cert lock */
.jobdocs summary{cursor:pointer}.jobdocs .chip.warn{background:#fff4d6;color:#7a5200}.jobdocs .chip.bad{background:#fde8e8;color:#9b1c1c}
.lockbar{background:#eef6ee;border:1px solid #9bc59b;border-radius:8px;padding:8px 12px;margin:8px 0;display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.sigs .siggrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.sigcell{border:1px dashed #aab;border-radius:8px;padding:8px;display:flex;flex-direction:column;gap:6px}
.sigcell img{max-height:70px;max-width:100%;background:#fff;border-bottom:1px solid #333;align-self:flex-start}.pricelist input{min-width:0}.pricelist td{padding:2px 4px}
/* ---- job management (trade) ---- */
.page.trade{max-width:1400px}.ttabs{display:flex;flex-wrap:wrap;gap:2px;margin:0 0 12px;border-bottom:1px solid #d8dde4}.ttabs a{padding:7px 11px;text-decoration:none;color:#445;border-radius:6px 6px 0 0;font-size:.92em}.ttabs a.on{background:#fff;border:1px solid #d8dde4;border-bottom-color:#fff;margin-bottom:-1px;font-weight:600;color:#0a78a8}
.jtabs{display:flex;flex-wrap:wrap;gap:2px;margin-top:8px}.jtabs a{padding:8px 14px;background:#e9ecef;color:#556;text-decoration:none;border-radius:6px 6px 0 0}.jtabs a.on{background:#fff;color:#123;font-weight:600}.jobtab{border-top-left-radius:0}
.dashgrid{display:grid;grid-template-columns:minmax(220px,1fr) 2fr minmax(180px,.8fr);gap:12px}.jobmap{height:260px;border-radius:8px}.daytiles{display:flex;flex-direction:column;gap:12px}.dt{display:flex;flex-direction:column;padding:14px;border-radius:8px;color:#fff;text-decoration:none}.dt.blue{background:#0aa2cf}.dt.green{background:#3ebd8a}.dt span{font-size:1.7em}.dt b{font-size:.8em}
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-top:12px}.dtile h3{font-size:.85em;text-transform:uppercase;color:#556}.drow{display:flex;justify-content:space-between;padding:7px 0;border-top:1px solid #eef0f2;color:#556;text-decoration:none;font-size:.85em;text-transform:uppercase}
.cnt{min-width:22px;text-align:center;border-radius:10px;color:#fff;padding:0 6px;font-size:.85em;background:#889}.cnt.orange{background:#f0a030}.cnt.blue{background:#4aa3df}.cnt.red{background:#e5484d}.cnt.green{background:#2a9d6f}.cnt.teal{background:#3cc0d0}
.fab{position:fixed;right:24px;bottom:24px;width:54px;height:54px;border-radius:50%;background:#3ebd8a;color:#fff;font-size:30px;display:flex;align-items:center;justify-content:center;text-decoration:none;box-shadow:0 2px 8px #0003}
.filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:8px 0}.ttable{width:100%;border-collapse:collapse;font-size:.9em}.ttable th{text-align:left;color:#556;font-weight:600;border-bottom:2px solid #dde;padding:6px}.ttable td{border-bottom:1px solid #eef0f2;padding:5px 6px;vertical-align:middle}.ttable tr[data-go]{cursor:pointer}.ttable tr[data-go]:hover{background:#f5fafd}.ttable .num{text-align:right}
.tstat{display:inline-block;padding:2px 8px;border-radius:4px;font-size:.78em;background:#ccd;color:#223}.s-in-progress,.s-paid,.s-accepted,.s-approved,.s-completed{background:#3cc44c;color:#fff}.s-overdue,.s-declined,.s-void,.s-cancelled{background:#e5484d;color:#fff}.s-unpaid,.s-awaiting,.s-sent,.s-scheduled{background:#4aa3df;color:#fff}.s-draft,.s-pending{background:#f0a030;color:#fff}.s-xero{background:#13b5ea;color:#fff}.s-part-paid{background:#8a63d2;color:#fff}
.istat{font-size:.85em}.i-overdue{color:#e5484d}.i-unpaid{color:#4aa3df}.i-draft{color:#f0a030}.i-paid{color:#2a9d6f}
.staffchip{display:inline-flex;width:26px;height:26px;border-radius:50%;align-items:center;justify-content:center;background:#7c4dcc;color:#fff;font-size:.7em;font-weight:700;margin-right:3px}.staffpick{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border:1px solid #dde;border-radius:16px}.staffpick.on{border-color:#0aa2cf;background:#eef8fc}
.grid2,.grid3,.grid4{display:grid;gap:8px 12px;margin:6px 0}.grid2{grid-template-columns:repeat(2,1fr)}.grid3{grid-template-columns:repeat(3,1fr)}.grid4{grid-template-columns:repeat(4,1fr)}.grid3 label,.grid4 label,.grid2 label{display:flex;flex-direction:column;font-size:.85em}
@media(max-width:800px){.dashgrid,.grid3,.grid4{grid-template-columns:1fr}}
.rtbar{display:flex;gap:4px;margin-top:4px}.rtedit{min-height:120px;border:1px solid #cfd6de;border-radius:6px;padding:8px;background:#fff}.totals{display:flex;flex-wrap:wrap;gap:16px;justify-content:flex-end}
.dot{display:inline-block;width:10px;height:10px;border-radius:50%}.dot.red{background:#e5484d}.dot.green{background:#2a9d6f}.dot.blue{background:#4aa3df}
.apptrow{display:block;padding:6px 4px;border-bottom:1px solid #eef0f2;text-decoration:none;color:inherit;cursor:pointer}.week{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.day{min-height:240px;background:#fff;border:1px solid #e1e5ea;border-radius:6px;padding:6px}.day.today{border-color:#0aa2cf}.appt{background:#eef8fc;border-left:3px solid #0aa2cf;padding:4px;margin:4px 0;font-size:.82em;cursor:pointer}
.lines textarea{width:100%;min-width:220px}.mapgrid select{max-width:100%}.a-skip td{color:#a33}.a-update td{color:#246}.importbar{border-left:4px solid #f0a030}
.login .loginbox{max-width:380px;margin:60px auto;display:flex;flex-direction:column;gap:6px}.loginbox form{display:flex;flex-direction:column;gap:8px}.loginbox label{display:flex;flex-direction:column;font-size:.9em}.loginlogo{max-width:160px}.err{color:#b42318}.userchip{display:inline-flex;width:28px;height:28px;border-radius:50%;background:#7c4dcc;color:#fff;align-items:center;justify-content:center;font-size:.72em;font-weight:700;margin-left:6px}
.xerohow li{margin:4px 0}.notes{list-style:none;padding:0}.notes li{border-bottom:1px solid #eef0f2;padding:6px 0}
.jobhead h1{display:flex;align-items:center;gap:12px;margin:4px 0}.jobhead .statussel{width:auto;font-size:.55em}.staffpick input[type=checkbox]{width:16px;height:16px;margin:0}.staffpick{font-size:.9em}
/* ---- left sidebar (whole app) */
body.withside{padding-left:232px}body.withside.sn-mini{padding-left:58px}
.sidenav{position:fixed;left:0;top:0;bottom:0;width:232px;background:#2b3a42;color:#cfd8dc;display:flex;flex-direction:column;z-index:30;font-size:.9rem}
.sn-head{display:flex;align-items:center;gap:8px;padding:10px;border-bottom:1px solid #3c4d56}.sn-av{background:#7b3fd1;color:#fff;border-radius:50%;width:32px;height:32px;display:grid;place-items:center;font-weight:700;flex:none}
.sn-co{display:flex;flex-direction:column;line-height:1.1;overflow:hidden;white-space:nowrap}.sn-co b{color:#fff;font-size:.85rem;letter-spacing:.04em;text-transform:uppercase}.sn-co small{color:#9fb0b8}
.sn-col{margin-left:auto;background:none;border:0;color:#cfd8dc;font-size:1.2rem;cursor:pointer}
.sn-nav{flex:1;overflow-y:auto;padding:4px 0}.sn-h{padding:12px 14px 4px;font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;color:#8aa0aa}
.sn-i{display:flex;align-items:center;gap:10px;width:100%;padding:7px 14px;color:#dfe6e9;text-decoration:none;background:none;border:0;font:inherit;cursor:pointer;text-align:left}
.sn-i:hover{background:#34464f}.sn-i.on{background:#1d282e;color:#fff;box-shadow:inset 3px 0 #1fa2d6}.sn-ic{width:20px;text-align:center;flex:none}.sn-l{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sn-b{background:#e74c3c;color:#fff;border-radius:9px;padding:0 6px;font-size:.72rem;font-weight:700}.sn-car{transition:transform .15s}.sn-grp.open .sn-car{transform:rotate(90deg)}
.sn-kids{display:none;padding:2px 0 4px}.sn-grp.open .sn-kids{display:block}.sn-k{display:block;padding:5px 14px 5px 44px;color:#c3ced3;text-decoration:none}.sn-k:hover{background:#34464f}.sn-k.on{color:#fff;background:#1d282e;box-shadow:inset 3px 0 #1fa2d6}
.sn-grp.has-on>.sn-tog{color:#fff}.sn-foot{display:flex;align-items:center;gap:8px;padding:8px 10px;border-top:1px solid #3c4d56}.sn-foot .btn{color:#dfe6e9;border-color:#5a6d76}.sn-logo{height:22px;margin-left:auto;filter:brightness(0) invert(.85)}
.mtopbar{display:none}
body.sn-mini .sidenav{width:58px}body.sn-mini .sn-l,body.sn-mini .sn-co,body.sn-mini .sn-h,body.sn-mini .sn-car,body.sn-mini .sn-kids,body.sn-mini .sn-logo,body.sn-mini .sn-foot .btn{display:none}body.sn-mini .sn-b{position:absolute;margin-left:26px;margin-top:-14px}
body.sn-mini .sn-i{justify-content:center;padding:9px 0}body.sn-mini .sn-head{flex-direction:column}
@media (min-width:641px) and (max-width:900px){body.withside{padding-left:58px}body.withside:not(.sn-wide) .sidenav{width:58px}body.withside:not(.sn-wide) :is(.sn-l,.sn-co,.sn-h,.sn-car,.sn-kids,.sn-logo,.sn-foot .btn){display:none}body.withside:not(.sn-wide) .sn-i{justify-content:center;padding:9px 0}body.withside:not(.sn-wide) .sn-head{flex-direction:column}body.sn-wide .sidenav{box-shadow:4px 0 18px #0004}body.withside .pdfbar{left:58px}}
@media (min-width:901px){body.withside .pdfbar{left:232px}body.withside.sn-mini .pdfbar{left:58px}}
@media (max-width:640px){body.withside,body.withside.sn-mini{padding-left:0}.sidenav{transform:translateX(-105%);transition:transform .2s;width:250px!important;box-shadow:4px 0 18px #0005}body.sn-open .sidenav{transform:none}
  .mtopbar{display:flex;position:sticky;top:0;z-index:25;align-items:center;gap:10px;background:#2b3a42;color:#fff;padding:6px 10px;padding-top:calc(6px + env(safe-area-inset-top))}.mtopbar button{background:none;border:0;color:#fff;font-size:1.4rem;padding:2px 6px}.mtopbar img{height:22px;filter:brightness(0) invert(1)}body.withside .secnav{top:44px}.sn-col{display:none}
  body.sn-mini .sn-l,body.sn-mini .sn-co,body.sn-mini .sn-h,body.sn-mini .sn-car,body.sn-mini .sn-logo,body.sn-mini .sn-foot .btn{display:revert}body.sn-mini .sn-i{justify-content:flex-start;padding:7px 14px}body.sn-mini .sn-grp.open .sn-kids{display:block}}
@media (min-width:641px){body.withside .secnav{top:0}}
.sn-scrim{display:none}body.sn-open .sn-scrim{display:block;position:fixed;inset:0;z-index:29;background:#0004}
body.withside .ttabs,body.withside .mcstabs{display:none}
.certimp.flash{outline:3px solid #1fa2d6;outline-offset:2px}
/* ---- Tradify-style list view */
.lv-top{display:flex;align-items:center;justify-content:space-between;margin:-4px 0 8px}.lv-crumb{color:#667}.lv-crumb a{text-decoration:none}
.lv-tools{display:flex;gap:4px}.lv-ic{background:none;border:0;font-size:1.15rem;padding:6px 8px;border-radius:6px;cursor:pointer;color:#2b3a42}.lv-ic:hover:not(:disabled){background:#e8eef2}.lv-ic:disabled{opacity:.35;cursor:default}
.lv-tabs{display:flex;flex-wrap:wrap;gap:2px;border-bottom:0}.lv-tabs a{padding:9px 16px;background:#e9edf0;color:#667;text-decoration:none;border-radius:6px 6px 0 0;font-size:.92em}.lv-tabs a.on{background:#fff;color:#223;font-weight:600}
.lv-n{display:inline-block;min-width:18px;padding:0 6px;border-radius:9px;background:#5f6b73;color:#fff;font-size:.75em;text-align:center}.lv-n.red{background:#e74c3c}.lv-n.zero{opacity:.55}
.lv-body{border-top-left-radius:0;padding-top:18px}.lv-bar{margin:12px 0}.lv-search{display:flex}.lv-search input{width:320px;max-width:60vw;border-radius:4px 0 0 4px}.lv-search .btn{border-radius:0 4px 4px 0}
.lv-colwrap{position:relative}.lv-colmenu{position:absolute;right:0;top:110%;background:#fff;border:1px solid #d8dde4;border-radius:8px;box-shadow:0 6px 20px #0002;padding:8px 12px;z-index:5;min-width:180px}.lv-colmenu label{display:flex;gap:6px;align-items:center;padding:3px 0;white-space:nowrap}
.lv-colmenu input,.lv-cb input{width:16px;height:16px;margin:0}.lv-cb{width:28px}.lv-t th.sortable{cursor:pointer;user-select:none}.lv-t th{white-space:nowrap}.lv-t td{white-space:nowrap}
.pill{display:inline-block;padding:2px 9px;border-radius:3px;color:#fff;font-size:.78em;background:#8a96a0}.p-paid,.p-accepted,.p-billed,.p-approved,.p-completed{background:#26a17b}.p-unpaid,.p-awaiting,.p-sent,.p-in-progress,.p-scheduled{background:#4a90d9}.p-overdue,.p-declined{background:#e74c3c}.p-part-paid{background:#8e5bd1}.p-draft,.p-pending,.p-quoting{background:#f0a020}.p-void,.p-cancelled,.p-on-hold{background:#6c7a84}.p-invoiced{background:#20a0b0}
.mapkind{display:flex;background:#fff}.mapkind a{width:auto!important;padding:0 9px;font-size:12px;color:#334}.mapkind a.on{background:#e3ecf2;font-weight:700}
.jobmap.big{height:calc(100vh - 160px);min-height:420px}.mapcard:fullscreen{padding:0;background:#fff}.mapcard:fullscreen .jobmap{height:100vh}
ul.todo{margin:0;padding-left:18px}ul.todo li{margin:4px 0}.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:14px}
.lv-bar .row select,.lv-bar .row input{width:auto;min-width:0;padding:5px 8px}.lv-bar .row label{display:flex;align-items:center;gap:4px;margin:0}
.wide-modal .modal{max-width:min(1000px,96vw);width:96vw}

/* demo instance (PPM_DEMO=1) */
.demobanner { position: fixed; left: 0; right: 0; bottom: 0; z-index: 9999; background: #b45309; color: #fff; font-weight: 600; font-size: 14px; text-align: center; padding: 7px 12px; box-shadow: 0 -2px 6px rgba(0,0,0,.2); }
.demobanner .btn { margin-left: 10px; background: #fff; color: #7c2d12; border: 0; }
body.demo, .page.login { padding-bottom: 44px; }
@media print { .demobanner { display: none; } }

/* Standard limitations pick-list (EICR section D) */
.limpick{border:1px solid var(--line);border-radius:10px;padding:.4rem .8rem .6rem;margin:0}
.limpick legend{font-size:.78rem;font-weight:600;color:var(--slate);padding:0 .3rem}
.limpick .limlist{display:flex;flex-direction:column;max-height:22rem;overflow-y:auto;-webkit-overflow-scrolling:touch}
.limpick .check{align-items:flex-start;padding:.3rem 0;border-bottom:1px solid var(--line)}
.limpick .check:last-child{border-bottom:0}
.limpick .check input{flex:none;margin-top:.1rem}
