/* Layout: single phone column (max 640px), sticky header, fixed bottom tab bar, bottom-sheet detail panels */
/* Jury Homes look: bronze-gold (#A68B5E) on charcoal (#292D33), warm ivory grounds, geometric display type */
:root{
  --bg:#F4F1EC; --surface:#FFFFFF; --sunken:#EAE5DC; --ink:#292D33; --muted:#6B675F; --line:#DDD6CA;
  --accent:#8C7148; --accent-ink:#7A6140; --on-accent:#FFFFFF; --gold:#A68B5E;
  --st-open:#2F5F8A; --st-progress:#9A6A12; --st-referred:#6B4FA0; --st-hold:#6F7378; --st-closed:#3F7A4E; --st-reinspect:#1F7A78;
  --bad:#B3342B; --warn:#8F4E0B;
  --f-display:"Jost","Futura","Century Gothic",system-ui,sans-serif;
  --f-body:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  --f-mono:"IBM Plex Mono",ui-monospace,Menlo,Consolas,monospace;
  --r:10px;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --bg:#17181B; --surface:#212327; --sunken:#2B2D32; --ink:#ECE8E1; --muted:#A39E95; --line:#36383E;
  --accent:#C9AC7C; --accent-ink:#D6BC8F; --on-accent:#1C1A16; --gold:#C9AC7C;
  --st-open:#86B4E0; --st-progress:#E2B565; --st-referred:#B9A2E6; --st-hold:#A9ADB2; --st-closed:#7FC394; --st-reinspect:#7CCFCB;
  --bad:#F08A80; --warn:#E5A160; color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#17181B; --surface:#212327; --sunken:#2B2D32; --ink:#ECE8E1; --muted:#A39E95; --line:#36383E;
  --accent:#C9AC7C; --accent-ink:#D6BC8F; --on-accent:#1C1A16; --gold:#C9AC7C;
  --st-open:#86B4E0; --st-progress:#E2B565; --st-referred:#B9A2E6; --st-hold:#A9ADB2; --st-closed:#7FC394; --st-reinspect:#7CCFCB;
  --bad:#F08A80; --warn:#E5A160; color-scheme:dark}

*{box-sizing:border-box}
[hidden]{display:none!important}

/* site diary */
.segtabs .tdot{width:8px;height:8px;border-radius:50%;background:var(--st-closed)}
.dcard{display:flex;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:0;overflow:hidden}
.dcard .ddate{flex:none;width:58px;display:grid;place-content:center;text-align:center;background:var(--sunken);border-right:3px solid var(--st-closed);padding:8px 0;line-height:1.1}
.dcard .ddate b{font:600 11px var(--f-body);text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.dcard .ddate span{font:600 22px var(--f-display)}
.dcard .ddate small{font-size:11px;color:var(--muted)}
.dcard.d-partial .ddate{border-right-color:var(--warn)} .dcard.d-lost .ddate{border-right-color:var(--bad)} .dcard.d-none .ddate{border-right-color:var(--st-hold)}
.dcard .tmain{flex:1;min-width:0;padding:10px 12px;display:grid;gap:5px}
.dpill{--c:var(--st-closed);font:600 11px/1 var(--f-body);letter-spacing:.04em;text-transform:uppercase;padding:4px 7px;border-radius:4px;background:color-mix(in srgb,var(--c) 14%,transparent);color:var(--c);white-space:nowrap}
.dpill.d-partial{--c:var(--warn)} .dpill.d-lost{--c:var(--bad)} .dpill.d-none{--c:var(--st-hold)}
.wpick{display:flex;flex-wrap:wrap;gap:6px}
.field .wchip,.wchip{display:inline-flex;text-transform:none;letter-spacing:0;font-weight:inherit;color:inherit;margin:0;cursor:pointer}
.wchip input{position:absolute;opacity:0;pointer-events:none}
.wchip span{border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:7px 12px;font-size:13.5px;font-weight:500}
.wchip input:checked + span{background:var(--ink);border-color:var(--ink);color:var(--bg)}
.wchip.d-lost input:checked + span{background:var(--bad);border-color:var(--bad);color:#fff}
.wchip.d-partial input:checked + span{background:var(--warn);border-color:var(--warn);color:#fff}
.wchip.d-worked input:checked + span{background:var(--st-closed);border-color:var(--st-closed);color:#fff}
.wchip input:focus-visible + span{outline:2px solid var(--accent);outline-offset:2px}
.trlist{display:grid;gap:6px}
.trrow{display:grid;grid-template-columns:1fr 70px auto;gap:6px;align-items:center}
.wkstats{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:12px}
.wkstats div{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:8px 6px;text-align:center;display:grid}
.wkstats b{font:600 20px var(--f-display)} .wkstats span{font-size:11px;color:var(--muted)}
.wkstats .bad b{color:var(--bad)}

/* trades */
.trcard{display:flex;align-items:stretch;background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--gold);border-radius:var(--r);overflow:hidden}
.trcard.off{border-left-color:var(--line);opacity:.75}
.trcard .tmain{flex:1;min-width:0;text-align:left;background:none;border:0;padding:10px 12px;display:grid;gap:3px;color:inherit;font:inherit}
.trcall{flex:none;display:grid;place-items:center;align-content:center;gap:2px;padding:0 14px;border-left:1px solid var(--line);color:var(--accent-ink);font-size:11px;font-weight:600;text-decoration:none}
.warnc{color:var(--warn)}
.dl{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;font-size:14px;align-items:baseline}
.dl .k{margin:0}
.chk{display:flex;gap:8px;align-items:center;font-size:14px}
.chk input{width:18px;height:18px}
.logrow{display:flex;gap:10px;align-items:flex-start;padding:10px 0;border-bottom:1px solid var(--line)}
.wchip.r-good input:checked + span{background:var(--st-closed);border-color:var(--st-closed);color:#fff}
.wchip.r-ok input:checked + span{background:var(--warn);border-color:var(--warn);color:#fff}
.wchip.r-poor input:checked + span{background:var(--bad);border-color:var(--bad);color:#fff}

/* v11: stages, variations, certificates, client */
.stline{display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center;margin-top:8px;font-size:12.5px;color:var(--muted)}
.stline span:first-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}
.stline b{font:600 12px var(--f-mono);color:var(--ink)}
.stlist{display:grid;gap:6px}
.strow{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:6px 10px 6px 12px}
.strow .stdot{flex:none;width:12px;height:12px;border-radius:50%;border:2px solid var(--line)}
.strow.st-on .stdot{border-color:var(--st-progress);background:color-mix(in srgb,var(--st-progress) 30%,transparent)}
.strow.st-done .stdot{border-color:var(--st-closed);background:var(--st-closed)}
.strow.st-done .tt{color:var(--muted)}
.strow.st-on{border-color:color-mix(in srgb,var(--st-progress) 45%,var(--line))}
.amain{flex:1;min-width:0;text-align:left;background:none;border:0;padding:4px 0;display:grid;gap:2px;color:inherit;font:inherit}
.amain .tt{font-size:14.5px}
.alist{display:grid;gap:6px}
.arow{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:6px 10px}
.arow.auto{background:transparent;border-style:dashed}
.arow.over{border-color:color-mix(in srgb,var(--bad) 45%,var(--line))}
.arow.done .tt{text-decoration:line-through;color:var(--muted)}
.adate{flex:none;width:34px;display:grid;text-align:center;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);line-height:1.1}
.adate b{font:600 17px var(--f-display);color:var(--ink);letter-spacing:0}
.acheck{flex:none;width:24px;height:24px;border-radius:6px;border:2px solid var(--line);background:var(--surface);padding:0}
.acheck[aria-pressed="true"]{background:var(--st-closed);border-color:var(--st-closed);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3'%3E%3Cpath d='M5 12l5 5 9-10'/%3E%3C/svg%3E");background-size:16px;background-position:center;background-repeat:no-repeat}
.acheck.none{border:0;background:none;width:24px}
.wchip.st-on input:checked + span{background:var(--st-progress);border-color:var(--st-progress);color:#fff}
.wchip.st-done input:checked + span,.wchip.c-got input:checked + span{background:var(--st-closed);border-color:var(--st-closed);color:#fff}
.wchip.c-out input:checked + span{background:var(--bad);border-color:var(--bad);color:#fff}
.vno{font:600 12px var(--f-mono);color:var(--accent-ink)}
.vpill{--c:var(--st-hold);font:600 11px/1 var(--f-body);letter-spacing:.04em;text-transform:uppercase;padding:4px 7px;border-radius:4px;background:color-mix(in srgb,var(--c) 14%,transparent);color:var(--c);white-space:nowrap}
.vpill.v-submitted{--c:var(--warn)} .vpill.v-approved{--c:var(--st-closed)} .vpill.v-rejected{--c:var(--bad)} .vpill.v-withdrawn{--c:var(--muted)}
.icard.v-draft .stripe{background:var(--st-hold)} .icard.v-submitted .stripe{background:var(--warn)} .icard.v-approved .stripe{background:var(--st-closed)} .icard.v-rejected .stripe{background:var(--bad)} .icard.v-withdrawn .stripe{background:var(--line)}
.wkstats .warn b{color:var(--warn)}
.linkbtn{background:none;border:0;padding:0;color:var(--accent-ink);font:inherit;text-decoration:underline;text-underline-offset:2px}
.crow{display:flex;align-items:center;gap:12px;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px 12px}
.crow .tmain{flex:1;min-width:0;display:grid;gap:2px}
.crow .tt{font-size:14.5px}
.cicon{flex:none;width:22px;height:22px;border-radius:50%;border:2px solid var(--bad)}
.crow.c-got .cicon{border-color:var(--st-closed);background:var(--st-closed) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3'%3E%3Cpath d='M5 12l5 5 9-10'/%3E%3C/svg%3E") center/14px no-repeat}
.crow.c-na .cicon{border-color:var(--line);border-style:dashed}
.crow.c-na .tt{color:var(--muted)}
.flist{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
.fchip{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:6px 10px 6px 6px;font-size:13px;max-width:100%;color:inherit}
.fchip span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}
.fchip img{width:36px;height:36px;object-fit:cover;border-radius:4px}
.fchip.del{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 45%,var(--line));padding:6px 10px}
.pdfic{display:grid;place-items:center;width:36px;height:36px;border-radius:4px;background:var(--bad);color:#fff;font:700 10px var(--f-body);letter-spacing:.04em}
.ccard{display:flex;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--st-reinspect);border-radius:var(--r);padding:0}
.ccard .tmain{flex:1;min-width:0;padding:10px 12px;display:grid;gap:4px}
.ccard.ct-complaint{border-left-color:var(--bad)} .ccard.ct-selection{border-left-color:var(--gold)} .ccard.ct-request{border-left-color:var(--warn)}
.cpill{font:600 11px/1 var(--f-body);letter-spacing:.04em;text-transform:uppercase;padding:4px 7px;border-radius:4px;background:color-mix(in srgb,var(--st-reinspect) 14%,transparent);color:var(--st-reinspect)}
.cpill.ct-complaint{background:color-mix(in srgb,var(--bad) 14%,transparent);color:var(--bad)} .cpill.ct-selection{background:color-mix(in srgb,var(--gold) 18%,transparent);color:var(--accent-ink)} .cpill.ct-request{background:color-mix(in srgb,var(--warn) 14%,transparent);color:var(--warn)}

/* dashboard */
.dstats{grid-template-columns:repeat(4,minmax(0,1fr))}
.dstats .stat{padding:9px 8px 8px;min-width:0}
.dstats .stat b{font-size:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dstats .stat span{white-space:normal;line-height:1.15;font-size:10px}
.stat.warn b{color:var(--warn)}
.stat.ok b{color:var(--ok, #4F7A5A)}
.atlist{display:grid;gap:6px}
.atn{display:grid;gap:2px;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--st-open);border-radius:var(--r);padding:9px 12px;color:inherit;font:inherit}
.atn b{font-size:14px} .atn span{font-size:13px;color:var(--muted);overflow-wrap:anywhere}
.atn.bad{border-left-color:var(--bad)} .atn.bad b{color:var(--bad)}
.atn.warn{border-left-color:var(--warn)} .atn.warn b{color:var(--warn)}
.dsite{display:grid;gap:6px;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:11px 13px;color:inherit;font:inherit}
.dshead{display:flex;align-items:center;gap:6px} .dshead b{font:600 16px var(--f-display)}
.dsite .stline{margin-top:0}
.rdot{width:9px;height:9px;border-radius:50%;margin-left:auto;background:var(--warn)} .rdot.bad{background:var(--bad)}
.dgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;font-weight:600}
.dgrid b{display:block;font:500 18px/1.1 var(--f-display);color:var(--ink);text-transform:none;letter-spacing:0}
.dgrid .bad,.dgrid .bad b{color:var(--bad)} .dgrid small{font:600 11px var(--f-body)} .dgrid .warnc b{color:var(--warn)}
.wlist{display:grid;gap:4px}
.wrow{display:grid;grid-template-columns:minmax(90px,38%) 1fr auto;gap:10px;align-items:center;width:100%;text-align:left;background:none;border:0;border-bottom:1px solid var(--line);padding:8px 2px;color:inherit;font:inherit;font-size:14px}
.wn{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wbar{position:relative;height:8px;border-radius:4px;background:var(--sunken);overflow:hidden}
.wbar i{position:absolute;left:0;top:0;bottom:0;background:var(--gold);border-radius:4px}
.wbar i.o{background:var(--bad)}
.wc{font-size:13px;white-space:nowrap} .wc b{font-family:var(--f-mono)}

/* v13: safety, inductions, photos */
.pgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}
.pcell{position:relative;aspect-ratio:1;border:0;padding:0;background:var(--sunken);border-radius:6px;overflow:hidden}
.pcell img{width:100%;height:100%;object-fit:cover;display:block}
.pcell.sel{outline:3px solid var(--accent);outline-offset:-3px}
.pcell.sel::after{content:"✓";position:absolute;top:4px;right:4px;width:22px;height:22px;border-radius:50%;background:var(--accent);color:var(--on-accent);font:700 13px/22px var(--f-body);text-align:center}
.psrc{position:absolute;left:4px;bottom:4px;font:600 9.5px/1 var(--f-body);text-transform:uppercase;letter-spacing:.04em;padding:3px 5px;border-radius:3px;background:rgba(20,22,26,.65);color:#fff}
.psrc.s-safety{background:rgba(160,40,32,.85)} .psrc.s-insp{background:rgba(31,122,120,.85)}
.sigpad{width:100%;height:130px;border:1px dashed var(--muted);border-radius:8px;background:#fff;touch-action:none;display:block}
.sigimg{max-width:240px;background:#fff;border:1px solid var(--line);border-radius:6px;padding:4px}
.field .chk,.chk{text-transform:none;letter-spacing:0;font-weight:400;color:inherit;font-size:14px}
.indlist{display:grid;gap:6px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px 12px}

/* v14: checklists, defect walk */
.tplitems{display:grid;gap:6px}
.tprow{display:flex;gap:6px;align-items:center}
.tprow input{flex:1;min-width:0}
.walkcount{font-size:14px;color:var(--muted);margin:0 0 10px} .walkcount b{font:600 22px var(--f-display);color:var(--ink)}
.walkph{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.wcam{width:88px;height:88px;border:2px dashed var(--accent);border-radius:10px;background:color-mix(in srgb,var(--accent) 8%,var(--surface));color:var(--accent-ink);display:grid;place-items:center;align-content:center;gap:4px;font:600 12px var(--f-body)}
.wcam.alt{border-style:solid;border-color:var(--line);background:var(--surface);color:var(--muted)}
.wthumb{position:relative;width:88px;height:88px;border-radius:10px;overflow:hidden;background:var(--sunken)}
.wthumb img{width:100%;height:100%;object-fit:cover}
.wthumb button{position:absolute;top:4px;right:4px;width:24px;height:24px;border-radius:50%;border:0;background:rgba(20,22,26,.7);color:#fff;font-size:12px}
.rooms{max-height:118px;overflow-y:auto}

/* v15: construction supervisor */
.supfilter{display:flex;align-items:center;gap:8px;margin:8px 0 4px}
.supfilter label{font:600 11px var(--f-body);letter-spacing:.05em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.supfilter select{flex:1;min-width:0}
.supcard{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:8px 12px;margin-bottom:12px}
.supcard .smain{flex:1;min-width:0;display:grid}
.supcard .k{margin:0}
.banner.supb{border-color:color-mix(in srgb,var(--st-open) 45%,var(--line));background:color-mix(in srgb,var(--st-open) 8%,var(--surface))}
.banner.supb .dot{background:var(--st-open);box-shadow:0 0 0 4px color-mix(in srgb,var(--st-open) 22%,transparent)}

/* v16: tap a name */
.pname{cursor:pointer;touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;text-decoration:underline;text-decoration-style:dotted;text-decoration-color:color-mix(in srgb,currentColor 45%,transparent);text-underline-offset:2px}
.pname:hover{text-decoration-style:solid}
#personPop{z-index:40}
.pcard{max-width:380px}
.pcard a:not(.btn){color:var(--accent-ink)}
.prole{font-size:14px;font-weight:600;color:var(--accent-ink);margin-top:2px}
.phead{display:flex;align-items:center;gap:12px}
.phead h2{margin:0;font-size:20px}
.avatar.lg{width:52px;height:52px;font-size:18px;flex:none}
.linkrow{display:flex;justify-content:space-between;align-items:center;width:100%;background:none;border:0;padding:0;color:inherit;font:inherit;text-align:left}

/* v18: weather */
.wxstrip{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;margin:0 0 4px}
.wxd{display:grid;justify-items:center;gap:1px;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:6px 2px;font-size:11px;color:var(--muted);text-align:center;min-width:0}
.wxd.risk{border-color:color-mix(in srgb,var(--warn) 55%,var(--line));background:color-mix(in srgb,var(--warn) 7%,var(--surface))}
.wxd .wn{font-weight:600;text-transform:uppercase;letter-spacing:.04em;font-size:10px}
.wxd .wi{font-size:18px;line-height:1.2;color:var(--ink)}
.wxd .wl{font-size:9.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.wxd b{font:600 15px var(--f-display);color:var(--ink)}
.wxd .wr.bad,.wxd .ww.bad{color:var(--warn);font-weight:600}
.wxcred{font-size:11.5px;margin:2px 0 6px}
.wxline{display:flex;align-items:center;gap:8px;flex-wrap:wrap;background:var(--sunken);border-radius:8px;padding:8px 10px;margin-bottom:12px}
.wxline .wi{font-size:18px}
.wxline .meta{flex:1;min-width:150px}
.wxchip{display:inline-block;margin-top:3px;font:600 11px/1.2 var(--f-body);color:var(--warn);background:color-mix(in srgb,var(--warn) 12%,transparent);border-radius:4px;padding:3px 6px;justify-self:start}

/* v19: home, estimating, maintenance */
.hero{position:relative;text-align:center;background:linear-gradient(180deg,color-mix(in srgb,var(--gold) 9%,var(--surface)),var(--surface));border:1px solid color-mix(in srgb,var(--gold) 35%,var(--line));border-radius:14px;padding:26px 20px 22px;overflow:hidden}
.hero::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;background:var(--gold)}
.hlogo{width:118px;height:auto;display:block;margin:2px auto 14px}
:root[data-theme="dark"] .hlogo{filter:brightness(1.6) saturate(.8)}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .hlogo{filter:brightness(1.6) saturate(.8)}}
.hdate{font:600 11px var(--f-body);letter-spacing:.14em;text-transform:uppercase;color:var(--accent-ink)}
.hgreet{font:500 28px/1.15 var(--f-display);margin:6px 0 0;letter-spacing:.01em}
.hrule{display:block;width:44px;height:2px;background:var(--gold);margin:14px auto}
.hmsg{margin:0 auto;max-width:440px;font-size:15px;line-height:1.55;color:var(--ink)}
.htag{margin:12px 0 0;font:italic 500 15px var(--f-display);color:var(--accent-ink);letter-spacing:.02em}
.hglance{display:flex;gap:8px;margin:12px 0 0;overflow-x:auto;scrollbar-width:none}
.hglance button{flex:1 0 auto;display:flex;align-items:baseline;gap:6px;background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:8px 14px;font-size:13px;color:var(--muted);white-space:nowrap}
.hglance b{font:600 17px var(--f-display);color:var(--ink)} .hglance em{font-style:normal;color:var(--bad);font-weight:600}
.hcards{display:grid;gap:10px;margin-top:14px}
.sitesearch{width:100%;margin:10px 0 2px}

.tlist2{display:grid;gap:8px}
.trow2{display:flex;gap:10px;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.tmain2{flex:1;display:grid;gap:2px;min-width:0}.tmain2 .k{font:700 11px var(--f-body);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.myday{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:14px;margin:12px 0 0}
.mdhead{display:flex;align-items:center;justify-content:space-between;gap:10px}
.mdhead .k{display:block;font:700 11px var(--f-body);letter-spacing:.08em;text-transform:uppercase;color:var(--gold)}
.mdhead b{font-size:17px}
.mdhead .btn{min-height:44px}
.mdrows{display:grid;gap:6px;margin-top:10px}
.mdrow{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:10px 12px;min-height:52px;cursor:pointer;color:var(--ink);font:inherit}
.mdrow .mdmain{flex:1;display:grid;gap:1px}
.mdic{width:10px;height:10px;border-radius:50%;flex:none;background:var(--gold)}
.mdic.d{background:var(--warn,#b7791f)}.mdic.o{background:var(--st-closed)}
.hero.hsmall{margin-top:16px}
.hcard{display:flex;align-items:center;gap:14px;width:100%;text-align:left;background:#292D33;color:#F4F1EC;border:0;border-radius:14px;padding:18px 16px;position:relative;overflow:hidden;box-shadow:0 1px 2px rgba(0,0,0,.12)}
.hcard::after{content:"";position:absolute;right:-30px;top:-30px;width:120px;height:120px;border-radius:50%;border:1px solid rgba(166,139,94,.25)}
.hcard .hic{flex:none;width:52px;height:52px;border-radius:12px;display:grid;place-items:center;color:#C9AC7C;background:rgba(166,139,94,.14);border:1px solid rgba(166,139,94,.35)}
.hcard .hic svg{width:30px;height:30px}
.hcard .hbody{flex:1;min-width:0;display:grid;gap:3px}
.hcard .hk{font:600 10.5px var(--f-mono);letter-spacing:.14em;color:#C9AC7C}
.hcard b{font:500 21px/1.1 var(--f-display);letter-spacing:.03em;text-transform:uppercase}
.hcard .hsub{font-size:13px;color:#C8C2B6;line-height:1.4}
.hcard .hsub em{font-style:normal;color:#F3A89F;font-weight:600}
.hcard .harrow{font-size:28px;color:#C9AC7C;line-height:1}
.hcard .hbadge{display:inline-block;margin-left:8px;vertical-align:1px;font:600 9.5px var(--f-body);letter-spacing:.08em;text-transform:uppercase;color:#292D33;background:#E3A52F;border-radius:4px;padding:4px 6px}
.hcard.soon b{color:#E9E3D8}
.devpage{text-align:center;padding:18px 8px 30px}
.csign{width:200px;height:auto;margin:0 auto 6px;display:block}
.devk{font:600 11px var(--f-body);letter-spacing:.14em;text-transform:uppercase;color:var(--accent-ink);margin-top:8px}
.devpage h2{font:500 28px var(--f-display);margin:6px 0 0}
.devpage p{max-width:400px;margin:0 auto 18px;color:var(--muted);font-size:15px;line-height:1.5}
.devnote{display:flex;gap:12px;align-items:flex-start;background:color-mix(in srgb,#E3A52F 12%,var(--surface));border:1px solid color-mix(in srgb,#E3A52F 45%,var(--line));border-radius:var(--r);padding:12px 14px;margin-bottom:14px}
.devnote .dvdot{flex:none;width:22px;height:22px;margin-top:1px;background:#E3A52F;transform:rotate(45deg);border-radius:3px;border:2px solid #292D33}
.devnote p{margin:3px 0 0;font-size:13.5px;color:var(--muted);line-height:1.45}
.banner.mntb{border-color:color-mix(in srgb,var(--gold) 55%,var(--line));background:color-mix(in srgb,var(--gold) 10%,var(--surface))}
.banner.mntb .dot{background:var(--gold)}
.mcard .stline b{white-space:nowrap}

/* v20: layout */
#title.long{font-size:22px;line-height:1.15}
.subchips{margin:-4px 0 12px}
.ovtiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-bottom:12px}
.ovt{display:grid;gap:2px;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:9px 9px 8px;min-width:0;color:inherit;font:inherit}
.ovt b{font:500 22px/1 var(--f-display);color:var(--ink)}
.ovt span{font-size:10.5px;line-height:1.2;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;font-weight:600}
.ovt em{font-style:normal;color:var(--bad)}
.ovt.bad b{color:var(--bad)} .ovt.warn b{color:var(--warn)}
.mlist{display:grid;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.mrow2{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;text-align:left;background:none;border:0;border-bottom:1px solid var(--line);padding:12px 14px;color:inherit;font:inherit}
.mrow2:last-child{border-bottom:0}
.mrow2 > span:first-child{display:grid;gap:2px;min-width:0}
.mrow2 b{font-size:15px;font-weight:600}
.mrow2:disabled{opacity:.5}
.mright{display:flex;align-items:center;gap:8px;color:var(--muted)}
.mright .n{font:500 12px var(--f-mono)}
.pdfic.sm{width:auto;height:auto;padding:3px 5px;font-size:9px}
.hbanners:empty{display:none}
.hbanners{margin-top:12px}
.hbanners .banner{margin-bottom:8px}
.hsec{margin-top:22px}
.calhead{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.calhead b{flex:1;text-align:center;font:500 18px var(--f-display)}
.calgrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px}
.cwd{font:600 10px var(--f-body);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);text-align:center;padding:2px 0 4px}
.cday{position:relative;aspect-ratio:1/1.05;border:1px solid var(--line);background:var(--surface);border-radius:7px;padding:4px 3px;display:grid;align-content:space-between;justify-items:center;color:inherit;font:inherit;min-width:0}
.cday.out{opacity:.45}
.cday.today .cn{background:var(--ink);color:var(--bg);border-radius:999px;padding:0 6px}
.cday.sel{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 35%,transparent)}
.cn{font:600 13px var(--f-body)}
.cdots{display:flex;gap:2px;flex-wrap:wrap;justify-content:center;min-height:6px}
.cdots i,.ckey i,.cdot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--muted)}
.cc{position:absolute;top:2px;right:4px;font:600 9px var(--f-mono);color:var(--muted)}
.k-book{background:var(--st-open)!important} .k-task{background:var(--warn)!important} .k-rem{background:var(--accent)!important} .k-stage{background:var(--st-closed)!important}
.cev.k-book,.cev.k-task,.cev.k-rem,.cev.k-stage{background:transparent!important}
.ckey{display:flex;gap:12px;flex-wrap:wrap;font-size:11.5px;color:var(--muted);margin:8px 0 0}
.ckey span{display:inline-flex;align-items:center;gap:5px}
.cdot{flex:none;width:9px;height:9px;margin-left:4px}
.cev.done .tt{text-decoration:line-through;color:var(--muted)}
#siteMenuBtn{font-size:22px;line-height:1}
/* inspections */
.segtabs{display:flex;gap:4px;background:var(--sunken);border-radius:var(--r);padding:4px;margin-bottom:14px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.segtabs::-webkit-scrollbar{display:none}
.segtabs button{flex:none;white-space:nowrap;border:0;background:transparent;border-radius:7px;padding:9px 12px;font:600 13.5px var(--f-body);color:var(--muted);display:flex;align-items:center;justify-content:center;gap:6px}
.segtabs button[aria-selected="true"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.08)}
.segtabs .n{font:500 12px var(--f-mono);opacity:.7}
.segtabs .hdot{width:8px;height:8px;border-radius:50%;background:var(--bad)}
.icard{display:flex;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:0;overflow:hidden}
.icard .stripe{width:5px;flex:none;background:var(--st-open)}
.icard .tmain{flex:1;min-width:0;padding:10px 12px;display:grid;gap:5px}
.icard.o-passed .stripe{background:var(--st-closed)} .icard.o-defects .stripe{background:var(--warn)} .icard.o-holdfail .stripe{background:var(--bad)}
.ipill{--c:var(--st-open);font:600 11px/1 var(--f-body);letter-spacing:.04em;text-transform:uppercase;padding:4px 7px;border-radius:4px;background:color-mix(in srgb,var(--c) 14%,transparent);color:var(--c);white-space:nowrap}
.ipill.o-passed{--c:var(--st-closed)} .ipill.o-defects{--c:var(--warn)} .ipill.o-holdfail{--c:var(--bad)}
.ibar{display:block;height:5px;border-radius:3px;background:var(--sunken);overflow:hidden}
.ibar i{display:block;height:100%;background:var(--gold)}
.tag.hold{border-color:color-mix(in srgb,var(--bad) 55%,var(--line));color:var(--bad)}
.banner.holdb{border-color:color-mix(in srgb,var(--bad) 50%,var(--line));background:color-mix(in srgb,var(--bad) 9%,var(--surface));margin-bottom:12px}
.banner.holdb .dot{background:var(--bad);box-shadow:0 0 0 4px color-mix(in srgb,var(--bad) 22%,transparent)}
.tplist{display:grid;gap:8px}
.tpl{display:grid;gap:3px;text-align:left;width:100%;background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--gold);border-radius:var(--r);padding:12px 14px}
.ilist{display:grid;gap:8px}
.iitem{background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--line);border-radius:var(--r);padding:10px 12px;display:grid;gap:8px}
.iitem.r-pass{border-left-color:var(--st-closed)} .iitem.r-fail{border-left-color:var(--bad)} .iitem.r-na{border-left-color:var(--st-hold)}
.itop{display:flex;gap:10px;align-items:flex-start}
.inum{font:600 12px var(--f-mono);color:var(--muted);min-width:18px;padding-top:2px}
.itext{font-size:15px;font-weight:500;overflow-wrap:anywhere}
.isegs{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.seg{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:9px 6px;font:600 14px var(--f-body);color:var(--muted)}
.seg:disabled{opacity:.55}
.seg.r-pass[aria-pressed="true"]{background:var(--st-closed);border-color:var(--st-closed);color:#fff}
.seg.r-fail[aria-pressed="true"]{background:var(--bad);border-color:var(--bad);color:#fff}
.seg.r-na[aria-pressed="true"]{background:var(--st-hold);border-color:var(--st-hold);color:#fff}
.inote{margin:0;font-size:14px;font-style:italic;white-space:pre-wrap}
.ilink{display:flex;gap:8px;align-items:center;text-align:left;border:1px dashed color-mix(in srgb,var(--bad) 45%,var(--line));background:transparent;border-radius:8px;padding:7px 9px;font-size:13px;color:var(--ink)}
.iphotos{display:flex;gap:6px;flex-wrap:wrap}
.iphotos button{border:0;padding:0;background:none;width:64px;height:64px;border-radius:6px;overflow:hidden}
.iphotos img{width:100%;height:100%;object-fit:cover}
.itools{margin:0}
.inoteform{display:grid;gap:8px}
.inoteform textarea{min-height:60px}
b.bad,.meta.bad,.acwho .bad{color:var(--bad)}

img{max-width:100%}
html{padding-top:env(safe-area-inset-top,0px);background:var(--bg);-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:400 15px/1.45 var(--f-body);-webkit-tap-highlight-color:transparent}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.wrap{max-width:640px;margin:0 auto;padding-inline:16px;padding-block:0 140px}

header.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:5;background:var(--bg);display:flex;align-items:center;gap:10px;padding-block:14px 10px;border-bottom:1px solid var(--line);margin-bottom:14px}
header.top .ttl{flex:1;min-width:0}
.hmark{width:30px;height:auto;flex:none;align-self:center}
.empty b{font-weight:600}
.eyebrow{font:500 10.5px/1.2 var(--f-display);letter-spacing:.22em;text-transform:uppercase;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
h1{font:600 28px/1.1 var(--f-display);margin:2px 0 0;letter-spacing:0;text-wrap:balance;overflow-wrap:anywhere}
h2{font:600 24px/1.15 var(--f-display);margin:4px 0 0;text-wrap:balance;overflow-wrap:anywhere}
h3{font:600 12px/1.2 var(--f-body);letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin:22px 0 8px;display:flex;align-items:center;gap:8px}
h3 .n{font-family:var(--f-mono);letter-spacing:0;color:var(--muted)}
.iconbtn{border:1px solid var(--line);background:var(--surface);border-radius:999px;width:38px;height:38px;display:grid;place-items:center;font-size:20px;line-height:1;flex:none}
.sync{font:500 11px var(--f-mono);color:var(--muted);flex:none;border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:5px 9px;white-space:nowrap}
.sync.ok{color:var(--st-closed)} .sync.off{color:var(--warn)} .sync.bad{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 40%,var(--line))}
body.authing nav.tabs, body.authing #fab{display:none}
.authcard{max-width:420px;margin:8vh auto 0;background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:20px 18px}
.authcard h2{margin:0 0 4px}
.authlogo{display:block;width:120px;max-width:60%;margin:4px auto 18px}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .authlogo{background:#fff;border-radius:8px;padding:8px}}
:root[data-theme="dark"] .authlogo{background:#fff;border-radius:8px;padding:8px}
.authcard .meta{margin:0 0 16px}
.autherr{color:var(--bad);font-size:14px;margin:0 0 12px} .authmsg{color:var(--st-closed);font-size:14px;margin:0 0 12px}
input[type=email],input[type=password],input[type=tel],input[type=number]{width:100%;border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:9px 10px;font-size:16px;min-width:0}
.account{margin-top:28px;padding-top:14px;border-top:1px solid var(--line);display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between}
.account .meta{overflow-wrap:anywhere}
code{font-family:var(--f-mono);font-size:.9em}

.btn{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:9px 14px;font-weight:500;display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:var(--ink);font-size:14px}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent);font-weight:600}
.btn.danger{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 40%,var(--line))}
.btn.ghost{background:transparent}
.btn.sm{padding:6px 10px;font-size:13px}

.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}

/* stats */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.stat{background:var(--surface);padding:10px 10px 9px;border:0;text-align:left}
.stat b{display:block;font:500 26px/1 var(--f-display);font-variant-numeric:tabular-nums}
.stat span{display:block;font-size:10.5px;color:var(--muted);letter-spacing:.03em;text-transform:uppercase;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stat.bad b{color:var(--bad)} .stat.ref b{color:var(--st-referred)} .stat.rem b{color:var(--accent-ink)}

.banner{display:flex;align-items:center;gap:10px;width:100%;border:1px solid color-mix(in srgb,var(--accent) 45%,var(--line));background:color-mix(in srgb,var(--accent) 10%,var(--surface));border-radius:var(--r);padding:11px 14px;margin-bottom:14px;text-align:left}
.banner .dot{width:9px;height:9px;border-radius:50%;background:var(--accent);flex:none;box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 22%,transparent)}
.banner b{font-weight:600}

/* site cards */
.sites{display:grid;gap:10px}
.sitesearch{margin-top:14px}
.sitesearch input{width:100%}
.site{display:block;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px}
.site .nm{font:600 19px/1.2 var(--f-display);overflow-wrap:anywhere}
.site .ad{color:var(--muted);font-size:13px;margin-top:2px;overflow-wrap:anywhere}
.site .counts{display:flex;gap:14px;margin-top:10px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.site .counts b{font-family:var(--f-mono);font-weight:500;color:var(--ink);margin-right:3px;font-variant-numeric:tabular-nums}
.site .counts .bad b{color:var(--bad)}
.site .next{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line);font-size:13px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.job{font:500 11px var(--f-mono);color:var(--muted);border:1px solid var(--line);border-radius:4px;padding:2px 5px;margin-left:6px;vertical-align:3px}
.ex{font:600 10px var(--f-body);letter-spacing:.06em;text-transform:uppercase;color:var(--warn);border:1px dashed var(--warn);border-radius:4px;padding:2px 5px;margin-left:6px;vertical-align:4px}

/* tasks */
.list{display:grid;gap:8px}
.task{display:flex;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:0;overflow:hidden}
.task .stripe{width:5px;flex:none;background:var(--line)}
.task.overdue .stripe{background:var(--bad)} .task.today .stripe,.task.soon .stripe{background:var(--warn)} .task.done .stripe{background:var(--st-closed)}
.task .tmain{flex:1;min-width:0;padding:10px 12px;display:grid;gap:4px}
.trow{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.tt{font-weight:600;font-size:15px;overflow-wrap:anywhere}
.task.done .tt{color:var(--muted);text-decoration:line-through;text-decoration-color:var(--line)}
.meta{font-size:13px;color:var(--muted);overflow-wrap:anywhere}
.task.overdue .due{color:var(--bad);font-weight:600} .task.today .due{color:var(--warn);font-weight:600}
.pill{--c:var(--st-open);font:600 11px/1 var(--f-body);letter-spacing:.04em;text-transform:uppercase;padding:4px 7px;border-radius:4px;background:color-mix(in srgb,var(--c) 14%,transparent);color:var(--c);white-space:nowrap}
.s-open{--c:var(--st-open)} .s-in_progress{--c:var(--st-progress)} .s-referred{--c:var(--st-referred)} .s-on_hold{--c:var(--st-hold)} .s-closed{--c:var(--st-closed)} .s-reinspect{--c:var(--st-reinspect)}
.ttype{--tc:var(--muted);font:600 11px/1 var(--f-body);letter-spacing:.03em;padding:3px 7px 3px 6px;border-radius:4px;border:1px solid color-mix(in srgb,var(--tc) 45%,var(--line));color:var(--tc);display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.ttype::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--tc)}
.t-defect{--tc:var(--muted)} .t-safety{--tc:var(--warn)} .t-incident{--tc:var(--bad)} .t-quality{--tc:var(--st-open)} .t-housekeeping{--tc:var(--st-closed)} .t-variation{--tc:var(--accent-ink)} .t-client{--tc:var(--st-reinspect)} .t-delivery{--tc:var(--st-progress)}
.tag.esc{background:var(--bad);border-color:var(--bad);color:#fff}
.escbox{border-color:color-mix(in srgb,var(--bad) 55%,var(--line));background:color-mix(in srgb,var(--bad) 7%,var(--surface))}
.escbox .k{color:var(--bad)}
.banner.escb{border-color:color-mix(in srgb,var(--bad) 50%,var(--line));background:color-mix(in srgb,var(--bad) 9%,var(--surface))}
.banner.escb .dot{background:var(--bad);box-shadow:0 0 0 4px color-mix(in srgb,var(--bad) 22%,transparent)}
.escpick{display:grid;gap:6px;max-height:220px;overflow-y:auto}
.field .escp,.escp{display:flex;font-size:14px;align-items:center;gap:10px;border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:8px 10px;cursor:pointer;text-transform:none;letter-spacing:0;color:inherit;font-weight:inherit}
.escp input{width:18px;height:18px;accent-color:var(--bad);flex:none}
.escp span{display:grid;min-width:0}
.escp small{color:var(--muted);font-size:12px}
.escp:has(input:checked){border-color:color-mix(in srgb,var(--bad) 55%,var(--line));background:color-mix(in srgb,var(--bad) 6%,var(--surface))}
.typepick{display:flex;flex-wrap:wrap;gap:6px}
.field .typepick label,.typepick label{cursor:pointer;text-transform:none;letter-spacing:0;font-weight:inherit;color:inherit}
.typepick input{position:absolute;opacity:0;pointer-events:none}
.typepick input:checked + .ttype{background:color-mix(in srgb,var(--tc) 16%,var(--surface));border-color:var(--tc)}
.typepick input:focus-visible + .ttype{outline:2px solid var(--accent);outline-offset:2px}
.typepick .ttype{padding:7px 10px;font-size:12.5px}
.tag{font:600 11px/1 var(--f-body);letter-spacing:.04em;text-transform:uppercase;padding:3px 6px;border-radius:4px;border:1px solid var(--line);color:var(--muted)}
.tag.hi{border-color:color-mix(in srgb,var(--bad) 50%,var(--line));color:var(--bad)}
.tag.bell{border-color:var(--accent);color:var(--accent-ink)}

/* filters */
.chips{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:6px 12px;font-size:13px;font-weight:500;white-space:nowrap;flex:none}
.chip[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--bg)}
.filters{display:grid;gap:8px;margin-bottom:6px}
.frow{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px}
.filters .frow{grid-template-columns:1fr 1fr}
.filters .frow input[type=search]{grid-column:1/-1}
.frow > *{min-width:0}
input[type=search],input[type=text],input[type=date],input[type=datetime-local],select,textarea{width:100%;border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:9px 10px;font-size:16px;min-width:0}
textarea{resize:vertical;min-height:80px}

.empty{border:1px dashed var(--line);border-radius:var(--r);padding:22px 16px;text-align:center;color:var(--muted)}
.empty b{display:block;color:var(--ink);font:700 20px var(--f-display);margin-bottom:4px}
.empty .btn{margin-top:12px}

/* bottom nav + fab */
nav.tabs{position:fixed;left:0;right:0;bottom:0;z-index:6;background:var(--surface);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom,0px)}
nav.tabs .in{max-width:640px;margin:0 auto;display:grid;grid-template-columns:repeat(5,1fr)}
nav.tabs button{border:0;background:none;padding:10px 4px 9px;display:grid;justify-items:center;gap:3px;font-size:12px;font-weight:600;color:var(--muted);position:relative}
nav.tabs button svg{width:22px;height:22px}
nav.tabs button[aria-current="page"]{color:var(--accent-ink)}
nav.tabs .badge{position:absolute;top:5px;left:calc(50% + 6px);background:var(--accent);color:var(--on-accent);font:600 10px/1 var(--f-mono);padding:3px 5px;border-radius:999px}
.b3list{display:grid;gap:0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--surface)}
.b3row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-top:1px solid var(--line)}
.b3row:first-child{border-top:0}
.b3main{flex:1;min-width:0;display:grid;gap:2px}
.b3main b{font-size:14.5px}
.b3ok{color:var(--st-closed);font-weight:700;font-size:18px;padding:0 6px}
.task.selm{position:relative}
.task.selm .tmain{padding-left:40px}
.task.selm::before{content:'';position:absolute;left:16px;top:50%;width:18px;height:18px;margin-top:-9px;border:2px solid var(--muted);border-radius:5px;background:var(--bg)}
.task.selm[aria-pressed="true"]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 9%,var(--surface))}
.task.selm[aria-pressed="true"]::before{background:var(--accent);border-color:var(--accent);box-shadow:inset 0 0 0 3px var(--bg)}
.selbar{position:fixed;left:0;right:0;bottom:calc(60px + env(safe-area-inset-bottom,0px));z-index:7;padding:0 10px 8px;pointer-events:none}
.selin{max-width:620px;margin:0 auto;background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:0 8px 28px rgb(0 0 0 / .18);padding:10px 12px;pointer-events:auto;display:grid;gap:8px}
.selbtns{display:flex;flex-wrap:wrap;gap:6px}
body.selon main{padding-bottom:150px}
body.selon #fab{display:none}
.riprog{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:center;font:600 12.5px var(--f-mono);color:var(--muted)}
.riacts{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:14px}
.riacts .btn{justify-content:center;padding:14px 10px;font-size:15.5px}
.doclist{display:grid;gap:6px}
.docrow{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:8px 10px}
.docrow.old{opacity:.8;border-style:dashed}
.docrow .dmain{flex:1;min-width:0;display:grid;gap:2px}
.docrow .tt{font-weight:600;font-size:14.5px;overflow-wrap:anywhere}
.pdfic.img{background:var(--st-progress)}
.doff{font-size:15px;color:var(--faint,#999);width:22px;text-align:center}
.doff.on{color:var(--st-closed);font-weight:700}
.docpend{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:var(--r);padding:8px 10px;background:var(--surface)}
.docpend > span:nth-child(2){flex:1;min-width:0;overflow-wrap:anywhere}
.agday{margin-top:12px}
.agday .agd{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}
.agday .agd b{font-size:14px}
.agday .agd span{color:var(--muted);font-size:13px}
.agday .agd .linkbtn{margin-left:auto;font-size:13px}
.agday.today .agd b{color:var(--accent-ink)}
h3.bad{color:var(--bad)}
.gsearch input{width:100%;font-size:16.5px;padding:12px 14px}
.glist{display:grid;gap:6px}
.grow{display:grid;gap:2px;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:9px 12px}
.grow .gk{font:600 10.5px var(--f-body);letter-spacing:.08em;text-transform:uppercase;color:var(--accent-ink)}
.grow .tt{font-weight:600;font-size:14.5px;overflow-wrap:anywhere}
.gsn{font-size:13px;color:var(--muted);overflow-wrap:anywhere}
.gsn mark,.grow mark{background:color-mix(in srgb,var(--accent) 30%,transparent);color:inherit;border-radius:2px;padding:0 1px}
.gpill{display:flex;align-items:center;gap:8px;width:100%;margin:0 0 12px;background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:11px 16px;color:var(--muted);font:inherit;font-size:15px;text-align:left}
#searchBtn svg,#fbBtn svg{display:block}
body.nomgr [data-act=newSite],body.nomgr [data-act=varApprove],body.nomgr [data-act=varReject]{display:none!important}
.roleKey{display:grid;gap:6px;margin-top:10px}
.roleKey div{display:grid;gap:1px;font-size:13px}
.roleKey span{color:var(--muted)}
.mrolesel{padding:6px 8px;font-size:13.5px;width:auto}
body.portal nav.tabs,body.portal #fab,body.portal #searchBtn,body.portal #siteMenuBtn{display:none!important}
body.portal main{padding-bottom:40px}
.phero{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px;margin:0 0 14px}
.phero h2{margin:2px 0 0}
.pprog{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center}
.pprog .ibar{height:10px}
.pnews{margin-top:8px}
.pthumb img{width:64px;height:64px;object-fit:cover;border-radius:6px;display:block}
/* v36: quick task form */
.pthumb{position:relative;display:inline-block}
.tfph{margin-bottom:4px}
.field .pickers label{font-size:15px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--ink)}.tfph .pthumb img{width:76px;height:76px}
.iphotos .pdel,.pdel{position:absolute;right:-6px;top:-6px;width:28px;height:28px;border-radius:50%;border:2px solid var(--surface);background:var(--ink);color:var(--surface);font:700 16px/1 var(--f-body);display:grid;place-items:center;padding:0;cursor:pointer}
details.more{border:1px solid var(--line);border-radius:10px;padding:0 12px;margin:4px 0 0;background:var(--surface)}
details.more>summary{cursor:pointer;padding:12px 0;font-weight:700;list-style:none;display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;min-height:44px}
details.more>summary::-webkit-details-marker{display:none}
details.more>summary::before{content:'+';font-weight:700;width:14px}
details.more[open]>summary::before{content:'–'}
details.more[open]{padding-bottom:4px}
.routebox p{font-size:15px}
.pshare{position:absolute;right:4px;top:4px;background:var(--st-closed);color:#fff;font:700 9.5px var(--f-body);letter-spacing:.04em;padding:2px 5px;border-radius:4px;text-transform:uppercase}
.invPick{margin-top:8px}
@keyframes sfi{from{opacity:.6}to{opacity:1}}
.sfgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px}
.sffold{display:grid;gap:2px;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:12px 12px 10px;position:relative}
.sffold .sfic{width:30px;height:22px;border-radius:3px 6px 4px 4px;background:color-mix(in srgb,var(--accent) 28%,var(--surface));border-top:5px solid color-mix(in srgb,var(--accent) 55%,var(--surface));margin-bottom:6px}
.sffold .tt{font-weight:600;font-size:14px;line-height:1.25}
.pdfic.rec{background:var(--ink)}
.sfline{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line);font-size:14px}
.sfline select{width:auto;font-size:14px;padding:6px 8px}
#fab{position:fixed;z-index:6;right:max(16px,calc(50% - 304px));bottom:calc(72px + env(safe-area-inset-bottom,0px));background:var(--accent);color:var(--on-accent);border:0;border-radius:999px;padding:13px 18px;font-weight:600;font-size:15px;box-shadow:0 6px 18px color-mix(in srgb,var(--accent) 35%,transparent)}

/* sheet */
.sheet{position:fixed;inset:0;z-index:10;display:flex;align-items:flex-end;justify-content:center}
.scrim{position:absolute;inset:0;background:rgb(0 0 0 / .45)}
.panel{position:relative;width:100%;max-width:640px;max-height:94%;overflow-y:auto;background:var(--bg);border-radius:16px 16px 0 0;padding:0 16px calc(28px + env(safe-area-inset-bottom,0px));animation:up .22s ease-out}
@keyframes up{from{transform:translateY(24px);opacity:.6}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.panel{animation:none}}
.shead{position:sticky;top:0;background:var(--bg);display:flex;justify-content:space-between;align-items:center;padding-block:12px 10px;border-bottom:1px solid var(--line);margin-bottom:12px;z-index:1;gap:8px}
.shead .lbl{font-weight:600;font-size:14px;color:var(--muted)}
.field{display:grid;gap:5px;margin-bottom:12px}
.field label{font-size:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.field .hint{font-size:12px;color:var(--muted)}
.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.two > *{min-width:0}
.roview .statusbar,.roview .assignbox .frow,.roview #noteForm,.roview #referForm,.roview [data-act=editTask],.roview [data-act=escalate],.roview .pickers,.roview [data-act=takeTask],.roview [data-act=delTask],.roview [data-act=snooze],.roview [data-act=remDone],body.ro .staffonly{display:none!important}
body.ro [data-act=aheadDel],body.ro [data-act=aheadDone],body.ro [data-act=aheadEdit],body.ro [data-act=aheadNew],body.ro [data-act=certDel],body.ro [data-act=certFile],body.ro [data-act=certNew],body.ro [data-act=certSave],body.ro [data-act=certSetup],body.ro [data-act=diaryDel],body.ro [data-act=diaryNew],body.ro [data-act=diaryPast],body.ro [data-act=diaryPhoto],body.ro [data-act=diarySave],body.ro [data-act=incClose],body.ro [data-act=incDel],body.ro [data-act=incNew],body.ro [data-act=incPhoto],body.ro [data-act=incReopen],body.ro [data-act=incSave],body.ro [data-act=indDel],body.ro [data-act=indNew],body.ro [data-act=inspComplete],body.ro [data-act=inspDel],body.ro [data-act=inspNew],body.ro [data-act=inspNote],body.ro [data-act=inspPhoto],body.ro [data-act=inspReopen],body.ro [data-act=inspRes],body.ro [data-act=inspStart],body.ro [data-act=stageAct],body.ro [data-act=stageDel],body.ro [data-act=stageEdit],body.ro [data-act=stageMove],body.ro [data-act=stageNew],body.ro [data-act=stageSetup],body.ro [data-act=swmsDel],body.ro [data-act=swmsNew],body.ro [data-act=swmsSave],body.ro [data-act=tplCopy],body.ro [data-act=tplDel],body.ro [data-act=tplEdit],body.ro [data-act=tplNew],body.ro [data-act=tplReset],body.ro [data-act=tplSave],body.ro [data-act=varApprove],body.ro [data-act=varDel],body.ro [data-act=varEdit],body.ro [data-act=varNew],body.ro [data-act=varReject],body.ro [data-act=varStart],body.ro [data-act=varStat],body.ro [data-act=varTask],body.ro [data-act=walk],body.ro [data-act=walkDel],body.ro [data-act=walkDone],body.ro [data-act=walkFinish],body.ro [data-act=walkResume],body.ro [data-act=reinsp],body.ro [data-act=selMode],body.ro [data-act=weekly]{display:none!important}
.tapop{position:fixed;z-index:80;background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px rgba(0,0,0,.18);overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.tapop[hidden]{display:none}
.tapop .taopt{display:flex;justify-content:space-between;align-items:baseline;gap:10px;width:100%;text-align:left;background:none;border:0;border-bottom:1px solid var(--line);padding:11px 12px;font:inherit;font-size:15px;color:var(--ink);cursor:pointer}
.tapop .taopt:last-child{border-bottom:0}
.tapop .taopt[aria-selected="true"],.tapop .taopt:hover{background:color-mix(in srgb,var(--accent,#a68b5e) 12%,var(--surface))}
.tapop .taopt mark{background:none;color:inherit;font-weight:700;text-decoration:underline;text-underline-offset:2px}
.tapop .tasub{font-size:12px;color:var(--muted);white-space:nowrap;flex-shrink:0}
.tapop .tahead{padding:7px 12px;font-size:11.5px;color:var(--muted);background:var(--soft,rgba(127,127,127,.08));border-bottom:1px solid var(--line);position:sticky;top:0}
body.qmode .tabs,body.qmode #fab,body.qmode #sync,body.qmode #searchBtn,body.qmode #fbBtn,body.qmode #siteMenuBtn,body.qmode #backBtn{display:none!important}
body.qmode main{padding-bottom:30px}
.qwrap{max-width:560px;margin:0 auto}
.qsite{background:var(--surface);border:1px solid var(--line);border-left:4px solid #A68B5E;border-radius:var(--r);padding:10px 14px;margin:4px 0 12px}
.qsite .k{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:700}
.qsite b{display:block;font-size:17px}
.qsite .meta{display:block}
.qsteps{display:flex;gap:4px;margin:0 0 10px;font-size:11.5px;font-weight:700;color:var(--muted)}
.qsteps span{flex:1;text-align:center;padding:6px 2px;border-bottom:3px solid var(--line)}
.qsteps span.on{color:var(--ink);border-color:#A68B5E} .qsteps span.done{border-color:color-mix(in srgb,#A68B5E 45%,var(--line))}
.qform h2{margin-top:0}
.qbig{width:100%;justify-content:center;min-height:52px;font-size:16px;margin-top:6px}
.qbig.qin{background:#4F7A5A;border-color:#4F7A5A;color:#fff;font-weight:800;letter-spacing:.08em;min-height:72px;font-size:22px}
.qbig.qout{background:#A63A32;border-color:#A63A32;color:#fff;font-weight:800;letter-spacing:.08em;min-height:72px;font-size:22px}
/* v32: portal sign in / out and the company's workers */
.pwbig{width:100%;justify-content:center;min-height:54px;font-size:16px}
.pwbig.qin{background:#4F7A5A;border-color:#4F7A5A;color:#fff;font-weight:800;letter-spacing:.08em;font-size:18px}
.pwbig.qout{background:#A63A32;border-color:#A63A32;color:#fff;font-weight:800;letter-spacing:.08em;font-size:18px}
.pwbig:disabled{opacity:.45}
.pwsite{margin-top:0}
.pwtiles{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px}
.pwtiles>div{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px;text-align:center;display:flex;flex-direction:column;gap:2px}
.pwtiles b{font:700 20px var(--f-mono)}.pwtiles span{font-size:12px;color:var(--muted)}.pwtiles .bad b{color:var(--bad)}
b.warn{color:var(--warn)}
/* v33: admin change access */
.mopts{display:flex;flex-direction:column;gap:6px}
.mopt{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);cursor:pointer}
.mopt.on{border-color:var(--ink);box-shadow:0 0 0 1px var(--ink)}
.mopt input{margin-top:3px}.mopt>span{display:flex;flex-direction:column;gap:2px}
.field .mopt,.field .mopt b,.field .mopt .meta{text-transform:none;letter-spacing:normal}
.field .qtick,.field .qtick span{text-transform:none;letter-spacing:normal;font:500 15px var(--f-body);color:var(--ink)}.field .qtick .meta{font-weight:400;color:var(--muted);font-size:13px}
.field .mopt b{font:700 15px var(--f-body);color:var(--ink)}.field .mopt .meta{font:400 13px var(--f-body);color:var(--muted)}
.mopts>.k{text-transform:none;letter-spacing:normal;font:600 13px var(--f-body);color:var(--muted)}
.teamq{position:relative;margin:0 0 12px}.teamq input{width:100%;padding-left:36px}.teamq svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--muted)}
.qtick{display:flex;gap:10px;align-items:flex-start;padding:10px 4px;border-bottom:1px solid var(--line);font-size:15px;line-height:1.35}
.qtick input{width:22px;height:22px;flex-shrink:0;margin-top:1px}
.qtick.haz span{font-weight:600}
.qhaz{border:1.5px solid color-mix(in srgb,var(--bad) 45%,var(--line));background:color-mix(in srgb,var(--bad) 6%,var(--surface));border-radius:var(--r);padding:8px 10px;margin:8px 0}
.qhaz>.k{color:var(--bad);font-weight:800;font-size:12px;letter-spacing:.05em;text-transform:uppercase}
.qinfo{display:grid;grid-template-columns:minmax(110px,38%) 1fr;gap:8px;padding:8px 2px;border-bottom:1px solid var(--line);font-size:14.5px;position:relative}
.qinfo .k{color:var(--muted);font-size:12.5px;font-weight:600;overflow-wrap:anywhere;hyphens:auto;min-width:0}
.qinfo>span{min-width:0;overflow-wrap:anywhere}
.qchanged{background:color-mix(in srgb,#A68B5E 18%,var(--surface));border-radius:6px}
.qnew{display:inline-block;font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;background:#A68B5E;color:#fff;border-radius:4px;padding:1px 6px;margin-left:6px}
.qinfo .qnew{position:absolute;right:4px;top:6px}
.legal{margin:22px auto 6px;padding-top:14px;border-top:1px solid var(--line);text-align:center;font-size:11.5px;line-height:1.5;color:var(--muted);max-width:420px}
.legal .lname{font-weight:600;color:var(--ink);letter-spacing:.02em}
.legal .lname span{font-weight:500;color:var(--muted)}
.legal .lsmall{font-size:10.5px;margin-top:4px;opacity:.85}
.legallogo{height:26px;width:auto;display:block;margin:0 auto 8px;opacity:.85}
.robanner{background:var(--soft,rgba(127,127,127,.12));border-radius:8px;padding:8px 10px;font-size:13px;margin:0 0 10px}
.statusbar{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;margin-top:14px}
.statusbar button{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:8px 2px;font-size:12px;font-weight:600;color:var(--muted);line-height:1.15}
.statusbar button[aria-pressed="true"]{--c:var(--st-open);background:color-mix(in srgb,var(--c) 16%,var(--surface));border-color:var(--c);color:var(--c)}
.box{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:12px 14px;margin-top:12px}
.box .k{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.box .v{font-weight:600}
.tl{display:grid;grid-template-columns:1fr auto 1fr;gap:8px;align-items:end}
.tl .r{text-align:right}
.tl .mid{font:500 12px var(--f-mono);color:var(--muted);text-align:center;padding-bottom:2px}
.bar{height:8px;border-radius:99px;background:var(--sunken);margin-top:10px;position:relative;overflow:hidden}
.bar i{position:absolute;inset:0 auto 0 0;background:var(--st-progress);border-radius:99px}
.bar.over i{background:var(--bad)} .bar.done i{background:var(--st-closed)}
.tlnote{font-size:13px;margin-top:6px;color:var(--muted)}
.tlnote.bad{color:var(--bad);font-weight:600}
.notes{display:grid;gap:8px;margin-top:10px}
.note{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:9px 12px}
.note.sys{background:transparent;border-style:dashed}
.note .when{font:500 11px var(--f-mono);color:var(--muted)}
.note p{margin:3px 0 0;white-space:pre-wrap;overflow-wrap:anywhere}
.note.sys p{color:var(--muted);font-size:13px}
.desc{white-space:pre-wrap;overflow-wrap:anywhere;margin:0}
.confirm{border:1px solid var(--bad);border-radius:8px;padding:10px 12px;margin-top:10px;display:grid;gap:8px}
.avatar{--h:200;flex:none;width:32px;height:32px;border-radius:50%;display:grid;place-items:center;font:600 12px/1 var(--f-body);color:hsl(var(--h) 45% 25%);background:hsl(var(--h) 55% 85%)}
:root[data-theme="dark"] .avatar{color:hsl(var(--h) 60% 88%);background:hsl(var(--h) 30% 28%)}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .avatar{color:hsl(var(--h) 60% 88%);background:hsl(var(--h) 30% 28%)}}
.assignask{position:fixed;inset:0;z-index:28;display:flex;align-items:center;justify-content:center;padding:16px}
.assignask .scrim{position:absolute;inset:0;background:rgb(0 0 0 / .5)}
.acard{position:relative;width:100%;max-width:420px;max-height:90%;overflow-y:auto;background:var(--bg);border-radius:14px;padding:18px 16px 16px;box-shadow:0 12px 40px rgb(0 0 0 / .3);animation:up .18s ease-out}
.acard .k{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.acard h2{margin:2px 0 0;font-size:24px}
.acflow{display:grid;grid-template-columns:1fr auto 1fr;gap:8px;align-items:center;margin:14px 0 12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px 12px}
.acwho{display:grid;gap:6px;min-width:0}
.acp{display:flex;gap:8px;align-items:center;min-width:0;overflow-wrap:anywhere;font-size:14px}
.acarrow{font:700 22px var(--f-display);color:var(--accent-ink)}
.task .tav{flex:none;align-self:center;padding-right:12px}
.task .tav .avatar{width:28px;height:28px;font-size:11px}
.tag.new{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.meta .mine{color:var(--accent-ink);font-weight:600}
.banner .bad{color:var(--bad);font-weight:600}
.assignbox .arow{display:flex;gap:10px;align-items:center;margin-top:6px}
.avatar.none{background:var(--sunken);color:var(--muted)}
.member{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px 12px}
.member.inactive{opacity:.6}
.mrow{display:flex;gap:10px;align-items:center}
.mmain{flex:1;min-width:0}
.mname{font-weight:600;overflow-wrap:anywhere}
.mmain .meta{overflow-wrap:anywhere}
.mact{margin-top:8px;padding-left:42px}
.mact:empty{display:none}
.sharebox{margin-top:10px;padding:10px 12px;border:1px dashed var(--accent);border-radius:8px;display:grid;gap:8px;font-size:14px}
.linkline{overflow-x:auto}
.linkline code{white-space:nowrap;user-select:all}
.acts{display:grid;gap:6px}
.acts h3{margin-bottom:2px}
.act{display:flex;gap:10px;align-items:flex-start;text-align:left;width:100%;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px 12px}
.act .amain{display:grid;gap:2px;min-width:0;overflow-wrap:anywhere}
.note .who{font-family:var(--f-body);font-weight:600;color:var(--ink)}
nav.tabs button{font-size:11px}
.photos{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:10px}
.photos button{border:0;padding:0;border-radius:8px;overflow:hidden;aspect-ratio:1;background:var(--sunken);max-width:100%}
.photos img{width:100%;height:100%;object-fit:cover;display:block}
.pickers{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.pickers label{justify-content:center;cursor:pointer}
.pickers input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.uploading{font-size:13px;color:var(--accent-ink);margin-top:8px;font-weight:600}
.lightbox{position:fixed;inset:0;z-index:30;background:rgb(8 10 9 / .97);display:grid;grid-template-rows:auto 1fr auto;color:#F1F4F2;padding:calc(10px + env(safe-area-inset-top,0px)) 12px calc(14px + env(safe-area-inset-bottom,0px))}
.lightbox .lbbar{display:flex;justify-content:space-between;align-items:center;gap:8px;font:500 12px var(--f-mono)}
.lightbox .lbbtn{border:1px solid rgb(255 255 255 / .25);background:transparent;color:#F1F4F2;border-radius:8px;padding:8px 12px;font-size:14px}
.lightbox .lbbtn.del{color:#FF8A8A;border-color:rgb(255 138 138 / .45)}
.lightbox .stage{display:grid;place-items:center;min-height:0;position:relative}
.lightbox .stage img{max-width:100%;max-height:100%;object-fit:contain;border-radius:4px}
.lightbox .nav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;border:0;background:rgb(255 255 255 / .14);color:#fff;font-size:24px}
.lightbox .nav.l{left:0} .lightbox .nav.r{right:0}
.lightbox .cap{text-align:center;font-size:13px;opacity:.75;margin-top:8px}
.lightbox{grid-template-rows:auto 1fr auto auto}
.lightbox .lbbtn{display:inline-flex;align-items:center;gap:6px}
.lightbox .lbbtn.accent{background:var(--accent);border-color:var(--accent);color:var(--on-accent);font-weight:600}
.lbtools{display:flex;justify-content:center;gap:8px;margin-top:10px;flex-wrap:wrap}
.lightbox.markup{z-index:40;background:#0B0D0C;grid-template-rows:auto 1fr auto auto auto}
.mkstage{display:grid;place-items:center;min-height:0;overflow:hidden;margin-top:8px}
.mkstage canvas{touch-action:none;display:block;border-radius:4px;max-width:100%}
.mkbar{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-top:10px}
.mkgroup{display:flex;gap:4px;align-items:center;background:rgb(255 255 255 / .08);border-radius:12px;padding:4px}
.mkbtn{border:0;background:transparent;color:#F1F4F2;border-radius:9px;padding:6px 8px;font-size:11px;font-weight:600;display:grid;justify-items:center;gap:2px;min-width:48px}
.mkbtn[aria-pressed="true"]{background:rgb(255 255 255 / .2)}
.mkbtn:disabled{opacity:.35}
.mkswatch{width:30px;height:30px;border-radius:50%;border:2px solid rgb(255 255 255 / .35);background:var(--sw);margin:0 3px}
.mkswatch[aria-pressed="true"]{border-color:#fff;box-shadow:0 0 0 3px rgb(255 255 255 / .35)}
.mktext{display:flex;gap:6px;margin-top:10px}
.mktext input{flex:1;min-width:0;border:1px solid rgb(255 255 255 / .3);background:rgb(255 255 255 / .1);color:#fff;border-radius:8px;padding:9px 10px;font-size:16px}
.mkhint{text-align:center;font-size:12px;opacity:.6;margin:8px 0 0}
.photos button.marked{position:relative}
.photos button.marked::after{content:"";position:absolute;right:6px;top:6px;width:10px;height:10px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px var(--surface)}
#toast{pointer-events:none;position:fixed;left:50%;transform:translateX(-50%);bottom:calc(132px + env(safe-area-inset-bottom,0px));z-index:20;background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:8px;font-size:14px;max-width:calc(100% - 32px)}
.skel{height:76px;border-radius:var(--r);background:var(--sunken);opacity:.6}
@media (max-width:380px){.stat b{font-size:24px}.filters .frow{grid-template-columns:1fr 1fr}}
/* v36: bigger targets for gloved hands on phones and tablets */
@media (pointer:coarse){
  .btn{min-height:44px}
  .btn.sm{min-height:40px;padding:8px 12px;font-size:14px}
  .chip{min-height:40px;padding:8px 14px;font-size:14px}
  .statusbar button{min-height:46px}
  .wchip span,.typepick span{min-height:40px;display:inline-flex;align-items:center}
  .linkbtn{padding:8px 0;min-height:40px}
  input[type=checkbox],input[type=radio]{min-width:22px;min-height:22px}
}
/* v36: desktop layout for office and managers */
@media (min-width:900px){
  .wrap{max-width:1180px}
  nav.tabs .in{max-width:1180px}
  #fab{right:max(16px,calc(50% - 574px))}
  body.sheeton .wrap{margin-right:max(16px, calc(560px + 16px));margin-left:16px;max-width:none}
  .sheet{inset:0 0 0 auto;width:560px;align-items:stretch;justify-content:flex-end}
  .sheet .scrim{display:none}
  body.sheeton nav.tabs{right:560px}
  body.sheeton #fab{right:calc(560px + 24px);left:auto}
  .ttable td:nth-child(3){min-width:110px}
  .panel{max-width:none;max-height:none;height:100%;border-radius:0;border-left:1px solid var(--line);box-shadow:-12px 0 32px rgb(0 0 0 / .12);padding-top:4px}
  .hcards{grid-template-columns:repeat(3,1fr)}
  .filters .frow{grid-template-columns:2fr repeat(5,1fr)}
}
.tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
.ttable{width:100%;border-collapse:collapse;font-size:14px}
.ttable th{position:sticky;top:0;background:var(--sunken);text-align:left;padding:0;border-bottom:1px solid var(--line);white-space:nowrap}
.ttable th button{all:unset;cursor:pointer;display:block;padding:9px 10px;font:700 12px var(--f-body);letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
.ttable th button[aria-sort=ascending],.ttable th button[aria-sort=descending]{color:var(--ink)}
.ttable td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:top}
.ttable tr[data-id]{cursor:pointer}
.ttable tr[data-id]:hover td{background:color-mix(in srgb,var(--gold) 7%,var(--surface))}
.ttable tr.on td{background:color-mix(in srgb,var(--gold) 16%,var(--surface))}
.ttable tr.sel td{background:color-mix(in srgb,var(--st-open) 14%,var(--surface))}
.ttable td.tt{font-weight:600;min-width:220px}
.ttable td.due.overdue{color:var(--bad);font-weight:600}
.ttable small{font-weight:500}
/* v43: verbal approval waits for written approval */
.vpill.v-verbal{--c:var(--warn)} .icard.v-verbal .stripe{background:var(--warn)}
/* v43: Undo after a status change */
.undobar{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(84px + env(safe-area-inset-bottom,0px));z-index:60;display:flex;align-items:center;gap:12px;background:var(--ink);color:var(--bg);border-radius:10px;padding:8px 8px 8px 14px;box-shadow:0 6px 24px rgba(0,0,0,.25);font-size:14px;max-width:calc(100% - 32px)}
.undobar[hidden]{display:none}
.undobar .btn{background:transparent;color:var(--bg);border-color:currentColor}
/* v44: welcome message back at the top of Home */
.hero + .gpill{margin-top:14px}
/* v44: job list lookup on the site form, and More > Job list */
.jobfind{display:flex;gap:8px}.jobfind input{flex:1;min-width:0}
.field .hint.warn{color:var(--warn)}.field .hint.good{color:var(--ink)}
.confirm.jobask{border-color:var(--accent);margin:0 0 14px}
.jobcmp{width:100%;border-collapse:collapse;font-size:13px}.jobcmp th,.jobcmp td{text-align:left;vertical-align:top;padding:4px 6px;border-top:1px solid var(--line)}.jobcmp thead th{border-top:0;color:var(--muted);font-weight:600}.jobcmp tbody th{font-weight:600;white-space:nowrap}
.joblist{display:grid;gap:0;border-top:1px solid var(--line)}.jobrow{display:grid;gap:2px;padding:8px 2px;border-bottom:1px solid var(--line);font-size:14px}
/* v46: Jury Hub name and line on the sign-in screen and footer */
.authapp{display:grid;gap:2px;text-align:center;margin:2px 0 12px}.authapp b{font-family:var(--f-display,inherit);font-size:22px;letter-spacing:.02em;color:var(--ink)}.authapp span{font-size:13px;color:var(--muted)}
.legal .lline{font-style:italic;margin:2px 0}
/* v48: On Site Purchase Orders */
.o-pending{--c:var(--warn)} .o-est{--c:var(--bad)} .o-cancel{--c:var(--st-hold);text-decoration:line-through}
.ospoline{display:grid;grid-template-columns:1fr 1.2fr 1.3fr;gap:8px;padding:10px;margin:0 0 8px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}
.ospoline > .btn{grid-column:1/-1;justify-self:end}
.ospotot .dl{grid-template-columns:1fr auto;font-variant-numeric:tabular-nums} .ospotot .dl span:nth-child(even){text-align:right}
span.ok{color:var(--st-closed)} span.bad,p .bad{color:var(--bad)}
.ospotbl{width:100%;border-collapse:collapse;margin-top:10px;font-size:13px;font-variant-numeric:tabular-nums}
.ospotbl th{text-align:left;font:600 11px var(--f-body);color:var(--muted);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--line);padding:4px 4px 6px}
.ospotbl td{padding:6px 4px;border-bottom:1px solid var(--line);vertical-align:top}
.ospotbl th:nth-child(n+2),.ospotbl td:nth-child(n+2){text-align:right;white-space:nowrap}
.ospotbl tfoot td{border-bottom:0;padding-top:4px} .ospotbl tfoot td:first-child{text-align:right;color:var(--muted)}
.ospobars{display:grid;gap:6px;margin-bottom:6px}
.obar{display:grid;grid-template-columns:minmax(90px,38%) 1fr auto;gap:8px;align-items:center;font-size:13px;padding:3px 0;border-radius:4px}
.obar:hover{background:var(--sunken)}
.olab{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.otrack{height:10px;background:var(--sunken);border-radius:4px;overflow:hidden}
.otrack i{display:block;height:100%;background:var(--accent);border-radius:0 4px 4px 0}
.oval{font-variant-numeric:tabular-nums;color:var(--muted);font-size:12px;min-width:70px;text-align:right}
.ospoline > *{min-width:0} .ospoline input,.ospoline select{width:100%;min-width:0;box-sizing:border-box}
/* v49: stages 1-6 (in development, admins only) sit as slim cards on phones so 7 Construction stays near the top */
@media (max-width: 899px){
  .hcard.soon{padding:10px 14px;gap:12px;border-radius:12px}
  .hcard.soon .hic{width:38px;height:38px;border-radius:10px}
  .hcard.soon .hic svg{width:22px;height:22px}
  .hcard.soon .hsub{font-size:12px}
  .hcard.soon b{font-size:16px}
  .hcard.soon .harrow{font-size:22px}
  .hcard.soon::after{width:80px;height:80px;right:-24px;top:-24px}
}

/* v51: job stages */
.jgate{display:grid;gap:2px}
.jitem{display:flex;gap:10px;align-items:flex-start;padding:8px 2px;border-bottom:1px solid var(--line);cursor:pointer}
.jitem:last-of-type{border-bottom:0}
.jitem input{width:20px;height:20px;margin-top:1px;flex:none}
.jitem>span{display:grid;gap:2px;min-width:0}
.jitem>span b{font-weight:500;font-size:14.5px}
.jitem.done>span b{color:var(--muted)}
.jreopen{display:grid;gap:6px;max-height:220px;overflow:auto;padding:6px 0}
.jboard{display:flex;gap:10px;overflow-x:auto;padding-bottom:10px;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}
.jcol{flex:0 0 220px;scroll-snap-align:start;background:var(--sunken);border-radius:10px;padding:8px;display:grid;gap:6px;align-content:start}
.jcolh{display:flex;justify-content:space-between;align-items:baseline;gap:6px;font-size:13px;padding:2px 2px 4px}
.jcolh .n{font:600 12px var(--f-mono);color:var(--muted)}
.jchip{display:grid;gap:2px;text-align:left;width:100%;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:8px 10px;font:inherit;color:inherit;cursor:pointer}
.jchip b{font:600 12px var(--f-mono)}
.jchip span{font-size:13px;line-height:1.3;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.jchip em{font-style:normal;font-size:11.5px;font-weight:600;color:var(--warn)}
.hcard .hsub em{font-style:normal}
details.archive summary{cursor:pointer;padding:6px 0;font-size:15px}
/* v53: Stage 1 sales */
.jcard{display:grid;gap:2px;text-align:left;width:100%;font:inherit;color:inherit;cursor:pointer}
.jcard b{font-size:17px}
.warnbox{border-color:var(--warn)}
.jap{display:grid;gap:6px;border-top:1px solid var(--line);padding-top:10px}
.jap .chk{padding:4px 0}
/* v55: sales dashboard */
.drow{display:flex;gap:8px;align-items:baseline;padding:6px 0;border-bottom:1px solid var(--line);font-size:14px}
.drow:last-child{border-bottom:0}
.drow span:first-child{flex:1;min-width:0}
.drow b{font-variant-numeric:tabular-nums}
.drow .meta{flex:0 0 auto;text-align:right;max-width:55%}
/* v57: Job File */
.pdfic.doc{background:#2b579a}
.pdfic.xls{background:#217346}
.pdfic.file{background:#5b6470}
.jfline{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}
.jfchip{font:500 12.5px var(--f-body);padding:4px 9px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jfchip.add{border-style:dashed;color:var(--accent-ink)}
/* v58: Groundworks */
.tag.late{border-color:var(--bad);color:var(--bad)}
.gwline{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.gwfb{display:grid;gap:6px;margin-top:2px}
.gwfb>div{display:grid;gap:1px;padding:6px 8px;border-radius:6px;background:var(--sunken)}
.gwsite{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:4px 6px;padding:6px 0;border-bottom:1px solid var(--line);align-items:center}
.gwsite label{font-size:13.5px;grid-column:1/-1}
.gwsite select,.gwsite input{min-width:0;width:100%;padding-top:8px;padding-bottom:8px}
@media (min-width:640px){.gwsite{grid-template-columns:1.3fr 1fr 1.4fr}.gwsite label{grid-column:auto}}
.three{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:0 8px}
/* v59: Contract */
.ctdoc{display:grid;gap:4px;padding:8px 0;border-bottom:1px solid var(--line)}
.ctdoc b{font-weight:500;font-size:14px}
.ctcalc{display:grid;gap:4px;margin:2px 0 12px;padding:8px 10px;border-radius:6px;background:var(--sunken)}
.ctcalc>div{display:flex;justify-content:space-between;gap:8px}
.ctcalc .tot{border-top:1px solid var(--line);padding-top:4px}
/* v60: Approvals */
.apcons{padding:8px 0;border-bottom:1px solid var(--line)}
.apcons.na b{color:var(--muted);text-decoration:line-through}
.apcons b{font-weight:500;font-size:14px}
.aprisk{display:grid;gap:6px;margin-top:2px}
/* v61: Selections */
.slitem{padding:8px 0;border-bottom:1px solid var(--line);display:grid;gap:6px}
.slitem:last-child{border-bottom:0}
.slitem b{font-weight:500;font-size:14px}
.slitem.done b::before{content:'✓ ';color:var(--st-closed)}
.slitem select{width:auto;padding-top:6px;padding-bottom:6px}
.slrow{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:6px;align-items:center}
.slrow input{min-width:0;width:100%}
.slvar{padding:8px 0;border-bottom:1px solid var(--line)}
.slrow .chk{display:flex;align-items:center;gap:8px;justify-content:flex-start}
.slrow .chk input{width:20px;height:20px;flex:none}
