:root{--green:rgb(9,121,11);--green-d:#076509;--navy:rgb(24,76,128);--navy-d:#123a62;--ink:#16202b;--mute:#5d6b7a;--line:#d5dce4;--bg:#f2f5f8;--tint:#eaf1f7;--card:#fff;--bad:#b3261e;--warn:#8a5a00;--r:10px}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.45 Barlow,system-ui,Arial,sans-serif}
h1{font:700 1.6rem/1.15 "Barlow Condensed",Barlow,sans-serif;margin:0;letter-spacing:.01em;color:var(--navy)}
h2{font:700 1.15rem/1.2 "Barlow Condensed",Barlow,sans-serif;color:var(--navy);margin:30px 0 10px;text-transform:uppercase;letter-spacing:.05em;display:flex;align-items:center;gap:10px}
h2::before{content:"";width:4px;height:1em;background:var(--green);border-radius:2px;flex:none}
h3{font-size:.95rem;margin:18px 0 6px;color:var(--mute)}
button,input,select,textarea{font:inherit;color:inherit}
.muted{color:var(--mute)}.small{font-size:.85rem}.bad{color:var(--bad);font-weight:600}.center{text-align:center;margin-top:30vh}.hide{display:none}.grow{flex:1}
/* header: white bar with the logo, green line underneath, as on techtrixni.com */
.top{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:18px;background:#fff;padding:10px 20px;border-bottom:3px solid var(--green);box-shadow:0 2px 10px rgba(18,58,98,.08)}
.brand{display:flex;align-items:center;gap:10px;background:none;border:0;padding:0;cursor:pointer}
.brand .full{height:30px;display:block}.brand .mark{height:32px;display:none}
.brand .tag{font:700 .78rem/1 "Barlow Condensed",Barlow,sans-serif;letter-spacing:.12em;text-transform:uppercase;color:#fff;background:var(--navy);padding:5px 8px 4px;border-radius:4px}
.top .link{white-space:nowrap;color:var(--navy);text-decoration:none;font-weight:600;padding:8px 2px;border-bottom:3px solid transparent;margin-bottom:-3px}
.top .link:hover{color:var(--green)}.top .link.on{color:var(--navy);border-bottom-color:var(--green)}
.save{font-size:.85rem;color:var(--mute)}.save.ok{color:var(--green)}.save.bad{color:var(--bad)}
main{max-width:860px;margin:0 auto;padding:18px 16px 90px}
.bar{display:flex;align-items:center;gap:12px;margin-bottom:14px}.row{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin:12px 0}
.btn{border:1.5px solid var(--navy);background:#fff;color:var(--navy);border-radius:8px;padding:10px 16px;font-weight:600;cursor:pointer;min-height:44px}.btn:hover{background:var(--tint)}
.btn.primary{background:var(--green);border-color:var(--green);color:#fff}.btn.primary:hover{background:var(--green-d)}.btn:disabled{opacity:.6;cursor:default}
.link{background:none;border:0;padding:6px 0;color:var(--navy);cursor:pointer;text-decoration:underline}.link.danger{color:var(--bad)}
.search,.f input,.f select,.f textarea,.riskrow textarea,.addline select,#monzo{width:100%;border:1px solid var(--line);border-radius:8px;padding:10px 12px;background:#fff;min-height:44px}
textarea{resize:vertical}
:focus-visible{outline:3px solid rgba(24,76,128,.35);outline-offset:1px}
.search{margin-bottom:12px}
.card:hover{border-color:var(--navy);box-shadow:0 2px 10px rgba(18,58,98,.1)}
.card{border-left:4px solid var(--navy)!important;display:grid;grid-template-columns:1fr auto;gap:2px 10px;width:100%;text-align:left;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;margin-bottom:10px;cursor:pointer}
.card .muted,.card .chips{grid-column:1/-1}
.pill{font-size:.75rem;font-weight:600;padding:2px 10px;border-radius:99px;background:#e6edf4;color:var(--navy);align-self:start}
.pill.s-accepted,.pill.s-installed,.pill.s-invoiced{background:#e2f3e2;color:var(--green)}.pill.s-lost{background:#f1e4e3;color:var(--bad)}
.empty{background:#fff;border:1px dashed var(--line);border-radius:var(--r);padding:22px;text-align:center;color:var(--mute)}
.tabs{display:flex;gap:4px;overflow-x:auto;border-bottom:2px solid var(--line);margin-bottom:6px}
.tabs button{background:none;border:0;padding:12px 14px;font-weight:600;color:var(--mute);cursor:pointer;white-space:nowrap;border-bottom:3px solid transparent;margin-bottom:-2px}
.tabs button.on{color:var(--navy);border-bottom-color:var(--green)}
.status select{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.wide{grid-column:1/-1}
.f{display:block}.f>span{display:block;font-size:.82rem;font-weight:600;color:var(--mute);margin-bottom:4px}
.checks{border:1px solid var(--line);border-radius:var(--r);background:#fff;padding:10px 14px;margin:12px 0}.checks legend{font-size:.82rem;font-weight:600;color:var(--mute);padding:0 6px}
.checks label,.approve{display:flex;gap:10px;align-items:flex-start;padding:7px 0}.checks input,.approve input{width:20px;height:20px;margin-top:2px;accent-color:var(--green);flex:none}
.cam,.line,.prow,.riskrow{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:12px 14px;margin-bottom:10px}
.cam{border-left:4px solid var(--green)}
.camhead{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.camhead b{color:var(--navy);font-size:1.1rem}
.riskrow p{margin:0 0 8px;font-weight:500}
.seg{display:flex;gap:8px;margin-top:8px}.seg label{flex:1}.seg input{position:absolute;opacity:0}
.seg span{display:block;text-align:center;border:1px solid var(--line);border-radius:8px;padding:9px 0;font-weight:600;cursor:pointer;background:#fff}
.seg input:checked+span{color:#fff;border-color:transparent}.seg input:checked+span.high{background:var(--bad)}.seg input:checked+span.medium{background:#b26a00}.seg input:checked+span.low{background:var(--green)}
.seg input:focus-visible+span{outline:3px solid rgba(24,76,128,.35)}
.line,.prow{display:grid;grid-template-columns:1fr 1fr 1.3fr auto;gap:10px;align-items:end}.line .wide,.prow .wide,.specs{grid-column:1/-1}
.lt{font-weight:700;padding-bottom:11px;white-space:nowrap}
.specs{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.addline{display:flex;flex-wrap:wrap;gap:10px;margin:12px 0}.addline select{flex:1 1 240px}
table.tot{margin:16px 0 6px auto;border-collapse:collapse}table.tot td{padding:4px 0 4px 28px;text-align:right}table.tot .big td{font-size:1.2rem;font-weight:700;border-top:2px solid var(--ink);padding-top:8px}
.note{border-radius:var(--r);padding:12px 14px;margin:12px 0;background:#fff;border:1px solid var(--line)}.note.warn{border-color:#e2c27a;background:#fff8e6}.note.ok{border-color:#a9d6aa;background:#eef8ee}.note ul{margin:6px 0 0;padding-left:20px}
.issues{list-style:none;padding:0;margin:0}.issues li{padding:9px 12px 9px 14px;border-left:4px solid;background:#fff;margin-bottom:6px;border-radius:0 8px 8px 0}
.issues .stop{border-color:var(--bad)}.issues .warn{border-color:#d49a1c}
.aif{display:grid;gap:12px;margin-top:8px}.approve{font-weight:600;background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:12px 14px;margin-top:12px}.approve em{font-weight:400;color:var(--mute)}
.nextbar{display:flex;justify-content:flex-end;margin-top:22px}
.login{max-width:400px;margin:9vh auto;padding:30px 24px;background:#fff;border:1px solid var(--line);border-top:4px solid var(--green);border-radius:14px;display:grid;gap:14px;box-shadow:0 6px 24px rgba(18,58,98,.08)}.login .slogo{height:auto;width:100%;max-width:300px}.login h1{font-size:1.3rem}.msg{margin:0;color:var(--bad);font-weight:600}
.sheetwrap{overflow-x:auto;margin-top:12px;border:1px solid var(--line);border-radius:var(--r);background:#e8edf2;padding:14px}
.sheet{background:#fff;width:182mm;min-width:182mm;padding:10mm;margin:0 auto;box-shadow:0 1px 6px rgba(0,0,0,.15)}
#paper{display:none}
.signpage{background:var(--bg)}.signwrap{max-width:860px;margin:0 auto;padding:16px 12px 40px}.slogo{height:44px;display:block;margin:10px auto 18px;max-width:100%}
.signintro{font-weight:600;color:var(--navy);margin:4px 4px 0}
.signbar{background:#fff;border:2px solid var(--navy);border-radius:14px;padding:18px 18px 20px;margin-top:16px;display:grid;gap:12px}.signbar h2{margin:0}.signbar p{margin:0}
.signbar.done{border-color:var(--green)}.signbar .btn{justify-self:start;text-decoration:none;display:inline-flex;align-items:center}
.okmsg{margin:0;color:var(--green);font-weight:600}
.sigs{display:grid;gap:8px;margin:10px 0}.sigrow{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:10px 14px;display:grid;gap:4px}
.sigrow .pill.s-signed{background:#e2f3e2;color:var(--green)}.sigrow .pill.s-void,.sigrow .pill.s-expired{background:#f1e4e3;color:var(--bad)}
.sigrow .acts{display:flex;flex-wrap:wrap;gap:14px}.sigs{grid-template-columns:minmax(0,1fr)}.sigrow{min-width:0}.sigrow span{overflow-wrap:anywhere}
.upload{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin:8px 0 4px}.upload img{max-width:220px;max-height:160px;border:1px solid var(--line);border-radius:8px;background:#fff}
.upload .noimg{width:160px;height:100px;display:grid;place-items:center;border:1px dashed var(--line);border-radius:8px;color:var(--mute);font-size:.85rem;background:#fff}
.upmsg{font-size:.85rem;color:var(--mute)}
.riskrow .remark{width:100%;border:1px solid var(--line);border-radius:8px;padding:9px 12px;margin-top:8px;min-height:44px;background:#fff}
@media (max-width:640px){.grid2{grid-template-columns:1fr}.line,.prow{grid-template-columns:1fr 1fr}.specs{grid-template-columns:1fr 1fr}}

/* systems on a job */
.chips{display:flex;flex-wrap:wrap;gap:6px}.chip{font-style:normal;font-size:.78rem;font-weight:600;color:var(--navy);background:var(--tint);border-radius:99px;padding:2px 10px}.chip.none{color:var(--bad);background:#f6e8e7}
.jt{display:grid;gap:6px}.jside{display:grid;justify-items:end;gap:4px}.bar{align-items:flex-start}
.syspick{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:10px 0}
.sys input{position:absolute;opacity:0;pointer-events:none}
.sys span{display:grid;gap:2px;height:100%;padding:14px 16px 14px 44px;background:#fff;border:1.5px solid var(--line);border-radius:var(--r);cursor:pointer;position:relative}
.sys span::before{content:"";position:absolute;left:14px;top:16px;width:20px;height:20px;border:2px solid var(--mute);border-radius:5px;background:#fff}
.sys b{color:var(--navy);font-size:1.05rem}.sys small{color:var(--mute);font-size:.82rem}
.sys input:checked+span{border-color:var(--green);background:#f0f8f0;box-shadow:inset 0 0 0 1px var(--green)}
.sys input:checked+span::before{background:var(--green) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M5 10.5l3.2 3.2L15 6.8' fill='none' stroke='%23fff' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/16px no-repeat;border-color:var(--green)}
.sys input:focus-visible+span{outline:3px solid rgba(24,76,128,.35)}
.danger-zone{margin-top:40px;padding:14px 16px;border:1px dashed #d9a6a2;border-radius:var(--r);background:#fff}.danger-zone h3{margin-top:0;color:var(--bad)}
.btn.danger{border-color:var(--bad);color:var(--bad)}.btn.danger:hover{background:#fbeeed}
.xbox{background:#fff;border:1px solid var(--line);border-left:4px solid var(--navy);border-radius:var(--r);padding:6px 14px;margin:10px 0}
.xrow{display:grid;grid-template-columns:110px 1fr;gap:10px;padding:7px 0;border-bottom:1px solid #eef2f6;min-width:0}.xrow:last-child{border-bottom:0}.xrow>*{min-width:0;overflow-wrap:anywhere}.xk{font-weight:600;color:var(--mute);font-size:.88rem}
.xlog{margin:10px 0}.xlog summary{cursor:pointer;color:var(--navy);font-weight:600}.xlog ul{margin:8px 0 0;padding-left:18px}.xlog li{margin:3px 0}
.chip.bill{background:#e2f3e2;color:var(--green)}.chip.b-invoice-draft{background:#fff3d6;color:var(--warn)}
.pill.s-paid{background:#e2f3e2;color:var(--green)}
a.btn{display:inline-flex;align-items:center;text-decoration:none}
.pcat{font:700 .95rem/1.2 "Barlow Condensed",Barlow,sans-serif;color:var(--green);text-transform:uppercase;letter-spacing:.06em;margin:20px 0 8px}
@media (max-width:640px){.syspick{grid-template-columns:1fr}.brand .full{display:none}.brand .mark{display:block}.top{padding:8px 12px;gap:14px}.top .link{font-size:.95rem}}

/* ---------- documents (preview and print share these) ---------- */
.doc{font:10pt/1.4 Barlow,Arial,sans-serif;color:#16202b}
.doc .dh{display:flex;justify-content:space-between;align-items:flex-end;gap:12mm;border-bottom:1.2mm solid rgb(9,121,11);padding-bottom:4mm;margin-bottom:5mm}
.doc .logo{height:13mm;display:block}
.doc .tag{font-size:8pt;color:#5d6b7a;margin-top:1mm;letter-spacing:.04em}
.doc .dt{text-align:right}.doc h1{font:700 17pt/1.1 "Barlow Condensed",Barlow,sans-serif;color:rgb(24,76,128)}.doc .sub{font-weight:600}.doc .ref{font-size:8.5pt;color:#5d6b7a}
.doc h2::before,.signbar h2::before,.login h2::before{content:none}
.doc h2{display:block;font:700 11pt/1.2 "Barlow Condensed",Barlow,sans-serif;color:rgb(24,76,128);margin:5mm 0 2mm;letter-spacing:.04em;break-after:avoid}
.doc h3{font:700 10pt/1.2 "Barlow Condensed",Barlow,sans-serif;color:rgb(9,121,11);margin:3.5mm 0 1.5mm;letter-spacing:.03em;break-after:avoid}
.doc p{margin:0 0 2mm}.doc .small{font-size:9pt;color:#44505d}
.doc table{width:100%;border-collapse:collapse;margin:0 0 2mm}
.doc th,.doc td{border:.2mm solid #b9c3cd;padding:1.4mm 2mm;vertical-align:top;text-align:left}
.doc .kv th{width:34%;background:#f1f5f8;font-weight:600}
.doc thead th{background:rgb(24,76,128);color:#fff;font-weight:600;border-color:rgb(24,76,128)}
.doc tr{break-inside:avoid}
.doc .grp td{background:#f1f5f8;font-weight:700}
.doc .risk td:nth-child(1){width:40%}.doc .rate{width:16mm;font-weight:700;text-align:center}.doc .rate.high{color:#b3261e}.doc .rate.medium{color:#8a5a00}.doc .rate.low{color:rgb(9,121,11)}
.doc .cams,.doc .zones,.doc .doors{font-size:8.5pt}.doc .cams td:first-child,.doc .zones td:first-child,.doc .doors td:first-child{font-weight:700;width:9mm}
.doc .n{text-align:right;white-space:nowrap}
.doc .money tfoot td{border:0;padding:1mm 2mm}.doc .money .tot td{font-weight:700;font-size:11.5pt;border-top:.5mm solid #16202b}
.doc .ticks{list-style:none;margin:0 0 2mm;padding:0}.doc .ticks li{display:flex;gap:2mm;align-items:flex-start;padding:.6mm 0;color:#7a8794}.doc .ticks li.on{color:#16202b}
.doc .ticks i{flex:none;width:3.6mm;height:3.6mm;border:.3mm solid #5d6b7a;font:700 8pt/3.2mm Arial,sans-serif;text-align:center;color:rgb(9,121,11);margin-top:.5mm}
.doc .terms{margin:0;padding-left:5mm}
.doc .tbc{color:#b3261e;font-style:italic}
.doc .cols{display:grid;grid-template-columns:1.25fr 1fr;gap:5mm}
.doc .signs{display:grid;grid-template-columns:1fr 1fr;gap:8mm;margin-top:3mm;break-inside:avoid}
.doc .sign .who{font-weight:700;margin-bottom:5mm}.doc .sign .row{display:grid;grid-template-columns:auto 1fr;gap:2mm;align-items:end;margin:0 0 5mm}
.doc .sign .row.two{grid-template-columns:auto 1.6fr auto 1fr}.doc .sign span{font-size:8.5pt;color:#5d6b7a}.doc .sign b{border-bottom:.2mm solid #16202b;min-height:5mm;font-weight:500}
.doc .plan{margin:3mm 0;break-inside:avoid}.doc .plan .cap{font-weight:600;font-size:9pt;margin-bottom:1.5mm}.doc .plan img{max-width:100%;max-height:120mm;border:.2mm solid #b9c3cd}
.doc .views{display:grid;grid-template-columns:1fr 1fr;gap:4mm;margin:3mm 0}.doc .views figure{margin:0;break-inside:avoid}.doc .views img{width:100%;border:.2mm solid #b9c3cd;display:block}
.doc .views figcaption{font-size:8.5pt;font-weight:600;margin-top:1mm}.doc .noimg{height:30mm;display:grid;place-items:center;border:.2mm dashed #b9c3cd;color:#b3261e;font-style:italic}
.doc .checks td:nth-child(1){width:58%}.doc .checks .rate{width:14mm}
.doc .keep{break-inside:avoid}
.doc td.ctr,.doc th.ctr{text-align:center}.doc td.b{font-weight:700}.doc td.high{color:#b3261e}.doc td.medium{color:#8a5a00}.doc td.low{color:rgb(9,121,11)}
.doc .stmt{margin:0 0 3mm;padding-left:5mm;font-size:9pt;color:#44505d}.doc .note-in{background:#f1f5f8;border-left:1mm solid rgb(24,76,128);padding:2mm 3mm}
.doc .esign{border:.5mm solid rgb(9,121,11);border-radius:1.5mm;padding:3mm 4mm 1mm;margin:3mm 0;break-inside:avoid}.doc .esign .who{font-weight:700;color:rgb(9,121,11);margin-bottom:2mm}
.doc .esign td{word-break:break-all}
.doc .cancelform{break-before:page;border:.3mm dashed #5d6b7a;padding:4mm 5mm;margin-top:6mm}.doc .cancelform h2{margin-top:0}
.doc .sign .row.two + .row{margin-top:0}
.doc .cf{margin-top:7mm;padding-top:2.5mm;border-top:.2mm solid #b9c3cd;font-size:7.5pt;color:#5d6b7a;text-align:center;break-inside:avoid}

@media print{
  body{background:#fff}
  #app{display:none}
  #paper{display:block}
  .doc{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}
/* customer signing page on a phone: the document reflows to the screen instead of scrolling sideways */
@media screen and (max-width:760px){
  .signpage .sheetwrap{padding:0;border:0;background:none;overflow:visible}
  .signpage .sheet{width:auto;min-width:0;padding:16px 14px;border:1px solid var(--line);border-radius:var(--r);box-shadow:none}
  .signpage .doc{font-size:11pt}
  .signpage .doc .dh{display:block}.signpage .doc .dh .dt{text-align:left;margin-top:10px}.signpage .doc .logo{max-width:100%;height:auto;width:240px}
  .signpage .doc .cols{grid-template-columns:1fr;gap:0}
  .signpage .doc table.cams,.signpage .doc table.zones,.signpage .doc table.doors{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .signpage .doc table.money{font-size:9.5pt}.signpage .doc table.money td,.signpage .doc table.money th{padding-left:4px;padding-right:4px}
  .signpage .doc table.kv th{width:38%}
  .signpage .doc .views{grid-template-columns:1fr}
  .signpage .doc td,.signpage .doc th{overflow-wrap:anywhere}
  .signpage .doc table.cams td,.signpage .doc table.cams th,.signpage .doc table.zones td,.signpage .doc table.zones th,.signpage .doc table.doors td,.signpage .doc table.doors th{overflow-wrap:normal;min-width:64px}
  .signpage .doc table.money td:nth-child(3){white-space:nowrap}
  .signpage .doc table.money td.n,.signpage .doc table.money th.n{overflow-wrap:normal;white-space:nowrap}
}
