:root{--canvas:#f4f6f8;--surface:#fff;--ink:#1d2939;--muted:#647386;--line:#e1e6ed;--accent:#2494c4;--navy:#172b42;--radius:10px;--space:8px;font-family:Inter,Geist,system-ui,sans-serif;color:var(--ink);background:var(--canvas);font-size:13px}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button,a{touch-action:manipulation}button{cursor:pointer;background:white;color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:9px 13px;font-weight:600}button:hover{background:#eff5f8}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--accent);color:white;border-color:var(--accent)}button.quiet{border:0;background:transparent}button.danger{color:#a53032}input,select,textarea{width:100%;padding:10px 12px;border:1px solid #ced7e1;border-radius:8px;background:white;color:var(--ink);min-height:40px}textarea{min-height:88px;resize:vertical}input[type=checkbox]{width:18px;min-height:18px;height:18px;accent-color:var(--accent)}:focus-visible{outline:3px solid #8bd2ef;outline-offset:2px}a{color:#167fa9}.layout{display:grid;grid-template-columns:224px minmax(0,1fr);min-height:100vh}.sidebar{background:white;border-right:1px solid var(--line);padding:20px 12px;position:sticky;top:0;height:100vh;display:flex;flex-direction:column}.logo-window{width:116px;flex-shrink:0}.logo-window img{width:100%;height:auto;display:block}.brand{--k:1.18;padding:0 12px 20px;border-bottom:1px solid var(--line);margin-bottom:16px}.brand .logo-window{width:calc(116px*var(--k))}.brand small{display:block;margin-top:calc(4px*var(--k));font-size:calc(10px*var(--k));letter-spacing:.06em;white-space:nowrap;color:var(--muted)}.nav button{display:flex;align-items:center;gap:12px;width:100%;border:0;border-radius:8px;text-align:left;margin:3px 0;padding:11px 13px;font-weight:500;color:#526174}.nav button.active{color:#117da8;background:#e8f5fb;font-weight:650}.nav-symbol{font-size:18px;width:20px;text-align:center}.sidebar-foot{margin-top:auto;border-top:1px solid var(--line);padding:16px 12px 0;font-size:11px;color:var(--muted);line-height:1.8}.topbar{height:65px;background:white;border-bottom:1px solid var(--line);padding:0 28px;display:flex;align-items:center;justify-content:space-between;gap:16px}.crumb{font-size:12px;color:var(--muted)}.top-actions,.actions,.toolbar,.tabs,.chips{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.avatar{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:#edf1f5;font-size:11px;font-weight:700}.sync{color:var(--muted);font-size:11px}.sync.offline{color:#a55a14}.main{padding:28px;max-width:1900px;margin:auto}.heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:24px}.eyebrow{font-size:10px;letter-spacing:.11em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}h1{font-size:27px;font-weight:650;letter-spacing:-.7px;line-height:1.15;margin:0 0 8px}h2{font-size:16px;margin:0 0 16px}h3{font-size:13px;margin:0 0 6px}p{line-height:1.6;margin:6px 0;color:var(--muted)}.muted,small{color:var(--muted)}.mono{font-variant-numeric:tabular-nums}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:24px}.stat,.panel{background:white;border:1px solid var(--line);border-radius:var(--radius)}.stat{padding:20px}.stat strong{display:block;font-size:28px;font-weight:600;margin:10px 0 6px;letter-spacing:-.5px}.stat small{font-size:11px}.panel{padding:20px;margin-bottom:16px}.table-panel{padding:0;overflow:hidden}.toolbar{justify-content:space-between;margin:16px 0}.toolbar input{max-width:300px}.toolbar select{width:auto;max-width:240px}.tabs{border-bottom:1px solid var(--line);margin-bottom:20px;gap:0;overflow:auto;flex-wrap:nowrap}.tabs button{border:0;background:transparent;border-radius:0;white-space:nowrap;font-weight:500;padding:12px 16px;color:var(--muted);border-bottom:2px solid transparent}.tabs button.active{color:#117da8;border-bottom-color:var(--accent)}.table-wrap{overflow:auto;max-height:65vh}table{border-collapse:collapse;width:100%;font-size:12px;text-align:left}th{background:#f8fafb;font-weight:600;color:#677588;padding:12px 16px;white-space:nowrap;position:sticky;top:0;z-index:1}td{border-top:1px solid #edf0f4;padding:13px 16px;vertical-align:middle;max-width:320px}td strong{display:block;font-weight:600}td small{display:block;font-size:11px;margin-top:4px;line-height:1.4}tbody tr:hover{background:#f9fcfd}.link{padding:0;border:0;background:none;color:#243a50;text-align:left}.link:hover{color:#117da8;background:none}.pill{display:inline-block;white-space:nowrap;border-radius:20px;background:#edf1f5;color:#566679;padding:4px 9px;font-size:10px;font-weight:600}.pill.good{background:#e8f5ee;color:#2d7350}.pill.warn{background:#fff3dc;color:#946422}.pill.active{background:#eaf3fb;color:#316d9b}.note{border:1px solid var(--line);border-left:3px solid var(--accent);background:white;padding:12px 16px;border-radius:6px;margin:16px 0;color:#526174;font-size:12px;line-height:1.6}.note.warn{border-left-color:#bf8d3c}.empty{text-align:center;padding:48px 20px}.empty p{margin-bottom:16px}.section-label{text-transform:uppercase;font-size:10px;letter-spacing:.09em;color:var(--muted);margin:20px 0 12px}.two-col{display:grid;grid-template-columns:1.4fr 1fr;gap:20px}.queue-row{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:15px 0;border-bottom:1px solid var(--line)}.queue-row:last-child{border:0}.queue-row p{margin:3px 0;font-size:11px}.count{background:#edf2f6;border-radius:6px;padding:4px 8px;font-size:11px}.job-context{background:var(--navy);color:white;padding:22px 24px;border-radius:var(--radius);margin-bottom:20px;display:flex;justify-content:space-between;gap:24px}.job-context h2{margin-bottom:8px;color:white;font-size:20px}.job-context p,.job-context small{color:#c1cdd9}.job-context .next{max-width:300px}.job-context .next strong{display:block;margin:8px 0;font-size:13px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.field{display:flex;flex-direction:column;gap:7px;font-size:12px;color:#566679}.field.wide{grid-column:1/-1}.field small{font-size:11px}.form-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:24px;position:sticky;bottom:0;background:white;padding:16px 0}#drawer{position:fixed;right:0;top:0;height:100vh;width:min(620px,100vw);background:white;z-index:30;border-left:1px solid var(--line);box-shadow:-10px 0 60px #162b4220;overflow:auto;padding:28px}#drawer[hidden]{display:none}.drawer-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.drawer-head h2{margin:0;font-size:20px}.detail-row{display:grid;grid-template-columns:150px 1fr;gap:12px;border-bottom:1px solid var(--line);padding:12px 0;line-height:1.6}.detail-row dt{color:var(--muted)}.detail-row dd{margin:0;overflow-wrap:anywhere;white-space:pre-wrap}#toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);max-width:600px;background:var(--navy);color:white;border-radius:8px;padding:14px 20px;z-index:50;display:none;box-shadow:0 6px 25px #15294130}#toast.show{display:block}.login{max-width:410px;margin:10vh auto;padding:32px;background:white;border:1px solid var(--line);border-radius:12px}.login h1{margin:20px 0 8px;font-size:24px}.login .field{margin:16px 0}.login button{width:100%;margin-top:8px}.error{color:#a6343a;font-size:12px;line-height:1.5;white-space:pre-line}.board{display:grid;grid-template-columns:repeat(5,minmax(210px,1fr));gap:12px;overflow:auto;padding-bottom:16px}.day{background:#edf1f5;border:1px solid var(--line);border-radius:10px;padding:14px;min-height:330px}.day h3{margin-bottom:16px}.schedule-card{border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:8px;background:white;padding:16px;margin-bottom:12px}.schedule-card p{font-size:12px}.tv .sidebar,.tv .topbar{display:none}.tv.layout{grid-template-columns:1fr}.tv .main{padding:32px}.tv .schedule-card h3{font-size:20px}.tv .schedule-card p{font-size:17px}.tv .day{min-height:60vh}.tv h1{font-size:36px}.source-tag{font-size:10px;border:1px solid var(--line);padding:5px 8px;border-radius:6px;color:var(--muted)}.matrix{font-size:11px}.matrix input{width:16px}.import-changes{font-size:11px;white-space:pre-wrap;max-width:420px}.bottom-note{font-size:11px;color:#8090a0;margin:20px 0}.menu-button{display:none}.split-settings{display:grid;grid-template-columns:200px 1fr;gap:20px}.role-list button{display:block;width:100%;text-align:left;margin-bottom:4px}.role-list button.active{background:#e8f5fb;color:#127fa9;border-color:#b5dcec}.file-row{padding:10px 0;border-bottom:1px solid var(--line)}@media(max-width:1000px){.layout{grid-template-columns:190px minmax(0,1fr)}.brand{--k:1}.main{padding:20px}.stats{grid-template-columns:repeat(2,1fr)}.two-col{grid-template-columns:1fr}.topbar{padding:0 20px}.sync{display:none}}@media(max-width:720px){.top-actions>span:not([class]){display:none}.topbar .actions{flex-wrap:nowrap;min-width:0}.topbar .top-actions{flex-wrap:nowrap;flex-shrink:0}.crumb{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.layout{display:block}.sidebar{display:none;position:fixed;width:240px;z-index:25}.brand{--k:1.18}.sidebar.open{display:flex;box-shadow:8px 0 30px #182b4230}.menu-button{display:block}.topbar{padding:0 16px}.main{padding:16px}.heading{flex-direction:column}.stats{gap:8px}.stat{padding:16px}.stat strong{font-size:23px}.form-grid{grid-template-columns:1fr}.field.wide{grid-column:auto}.job-context{flex-direction:column}.job-context .next{max-width:none}.toolbar input{max-width:100%}.toolbar select{max-width:100%}.split-settings{grid-template-columns:1fr}td,th{padding:12px}button{min-height:44px}.board{grid-template-columns:repeat(5,250px)}}@media print{.sidebar,.topbar,.actions,.tabs,#drawer,.toolbar,.bottom-note{display:none!important}.layout{display:block}.main{padding:0}.table-wrap{max-height:none;overflow:visible}th{position:static}.panel{break-inside:avoid}.job-context{background:white;color:black;border:1px solid #aaa}}
/* LB's logo (logo() in app.js): a shooting star rides the black ring. The SVG lies over the picture in the picture's own pixels, so the
   path traced from logo.png fits at any size, and it is screened onto the picture: white stays white, so the star shows only on the black
   and narrows with the ring into its tips. The layers run one path, from the lower-left tip back to the upper tip (pathLength 1000); a
   dash's leading end is its start, so raising the offset carries the heads together clockwise from the upper tip, each tail as long as its
   dash. A cycle starts at rest, so a page drawn again mid-lap never jumps the star back. Still for reduced motion and in print. */
.logo-window{position:relative}.logo-star{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;mix-blend-mode:screen;filter:blur(.3px) drop-shadow(0 0 2px #7fcff7)}
.logo-star path{fill:none;stroke-linecap:round;stroke-dashoffset:-1000;animation:logo-star 7.2s cubic-bezier(.4,0,.3,1) infinite}
.star-tail{stroke:#4aa9dc;stroke-width:4.5;stroke-dasharray:330 2000;opacity:.45}.star-trail{stroke:#72bfe8;stroke-width:6;stroke-dasharray:240 2000;opacity:.45}
.star-wake{stroke:#9ad2f1;stroke-width:8;stroke-dasharray:150 2000;opacity:.5}.star-neck{stroke:#c6e9fa;stroke-width:10;stroke-dasharray:75 2000;opacity:.6}.star-head{stroke:#fff;stroke-width:15;stroke-dasharray:12 2000}
@keyframes logo-star{0%,15%{stroke-dashoffset:-1000}62%,100%{stroke-dashoffset:340}}
@media(prefers-reduced-motion:reduce){.logo-star{display:none}}@media print{.logo-star{display:none}}

@media print{body.printing-record #app{display:none!important}body.printing-record #drawer{display:block!important;position:static;width:100%;height:auto;box-shadow:none;border:0;padding:0}body.printing-record #drawer .actions,body.printing-record #drawer button{display:none!important}}
.onedrive{margin:10px 0 0;font-size:12px}.job-context .onedrive,.job-context .onedrive a{color:#fff}.job-context .move-note{color:#ffd88a}.job-context .onedrive button{color:#fff;border:1px solid #ffffff66;border-radius:6px;padding:4px 10px;margin-left:8px}.queue-row .actions a{font-size:12px;white-space:nowrap}.retire-row{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}.retire-row input[name^="reason-"]{grid-column:1/-1}
/* Field reporting: install progress, photos, plan sheets and pins */
.panel-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}.panel-head h2{margin:0}.field-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}.field-head .big{font-size:40px;font-weight:650;letter-spacing:-1px;line-height:1.1}svg.progress{width:100%;height:14px;border-radius:7px;display:block;background:#eef2f5;margin:14px 0 8px}.seg.verified{fill:#3a9a67}.seg.claimedWithPhoto{fill:#2494c4}.seg.claimedNoPhoto{fill:#e2a13b}.seg.rework{fill:#c8454a}.seg.notInstalled{fill:#dfe5eb}.legend{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:11px;color:var(--muted)}.legend .key::before{content:'';display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:5px;vertical-align:-1px}.key.verified::before{background:#3a9a67}.key.claimedWithPhoto::before{background:#2494c4}.key.claimedNoPhoto::before{background:#e2a13b}.key.rework::before{background:#c8454a}.key.notInstalled::before{background:#dfe5eb}.attention{margin:12px 0;padding-left:18px;color:#946422;font-size:12px;line-height:1.7}.floors{margin-top:12px;border-top:1px solid var(--line)}.floor-row{display:flex;justify-content:space-between;align-items:center;gap:8px 16px;flex-wrap:wrap;padding:10px 0;border-bottom:1px solid var(--line)}.floor-row small{display:block;margin-top:3px}.milestones{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px}.milestone{font-size:11px;border:1px solid var(--line);border-radius:14px;padding:4px 10px;color:var(--muted)}.milestone.met{background:#e8f5ee;color:#2d7350;border-color:#cbe8d6}
.unit-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}.unit-row:last-child{border-bottom:0}.unit-main small{display:block;margin-top:3px}.unit-photos,.shots{display:flex;flex-wrap:wrap;gap:6px}.shots{margin:8px 0}.shot{padding:0;border:1px solid var(--line);border-radius:6px;overflow:hidden;width:48px;height:48px;background:#f4f6f8;display:inline-block;min-height:0}.shot img{width:100%;height:100%;object-fit:cover;display:block}.shots.large .shot{width:96px;height:96px}.camera{position:relative;display:flex;align-items:center;justify-content:center;gap:8px;border:2px dashed #9fcbe0;border-radius:10px;padding:18px;font-weight:650;color:#117da8;cursor:pointer;background:#f3fafd;margin:12px 0}.camera input{position:absolute;inset:0;opacity:0;cursor:pointer;min-height:0}.chips{display:flex;flex-wrap:wrap;gap:6px}.chip,button.chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:18px;padding:6px 12px;font-size:12px;background:white;font-weight:500;cursor:pointer;min-height:0}.chip.active,button.chip.active{background:#e8f5fb;border-color:#b5dcec;color:#117da8}.chip input{width:auto;min-height:0;margin:0}.pill.install-verified{background:#e8f5ee;color:#2d7350}.pill.install-claimedWithPhoto{background:#eaf3fb;color:#316d9b}.pill.install-claimedNoPhoto{background:#fff3dc;color:#946422}.pill.install-rework{background:#fdecec;color:#a53032}.inline-form{display:flex;gap:8px;margin:8px 0}.inline-form select{flex:1}details summary{cursor:pointer;color:var(--muted);margin:12px 0 4px}
.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px}.photo-grid figure{margin:0}.photo-grid .shot{width:100%;height:auto;aspect-ratio:1}.photo-grid figcaption{font-size:11px;color:var(--muted);margin-top:4px}.photo-full{width:100%;height:auto;border-radius:8px;margin-bottom:12px}.sheet-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}.sheet-card{display:flex;flex-direction:column;align-items:flex-start;gap:4px;text-align:left;padding:14px;border-radius:10px;min-height:92px}.sheet-card strong{font-size:16px}.sheet-card span{font-size:11px;color:var(--muted);margin-top:auto}.page-list{display:flex;flex-direction:column}.page-row{display:grid;grid-template-columns:auto auto 1fr 1.4fr .7fr;gap:8px;align-items:center;border-bottom:1px solid var(--line);padding:8px 0}.page-row canvas{border:1px solid var(--line);max-width:80px;height:auto;background:white}progress{width:100%;height:10px;margin:12px 0}
body.viewer-open{overflow:hidden}.viewer{position:fixed;inset:0;z-index:20;background:#e4e9ee;display:flex;flex-direction:column}.viewer-bar{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;background:white;border-bottom:1px solid var(--line);padding:6px 10px}.viewer-bar .actions{flex-wrap:nowrap;gap:4px}.viewer-title{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:40vw}.arm-group{display:flex;gap:4px;margin-left:8px}.viewer-stage{position:relative;flex:1;overflow:hidden;touch-action:none;cursor:default;outline:none;user-select:none;-webkit-user-select:none}.viewer-page{position:absolute;left:0;top:0;transform-origin:0 0;background:white;box-shadow:0 2px 14px #1d293933}.viewer-page canvas{display:block}.viewer-page canvas.detail{position:absolute;left:0;top:0}.viewer-page canvas.detail[hidden]{display:none}.pins{position:absolute;inset:0}.pins .pin{position:absolute;transform:translate(-50%,-50%) scale(var(--inv,1));min-width:30px;height:30px;min-height:0;padding:0 7px;border-radius:15px;border:2px solid white;background:#7b8a9a;color:white;font-size:11px;font-weight:700;line-height:26px;box-shadow:0 1px 5px #0006;white-space:nowrap}.pins .pin::after{content:'';position:absolute;inset:-9px}.pins .pin:hover{filter:brightness(1.12)}.pins .pin.type-issue{background:#e07b24;border-radius:4px}.pins .pin.type-issue.state-resolved{background:#9aa6b2}.pins .pin.type-punch{background:var(--s-rework);border-radius:2px}.pins .pin.type-punch.state-verified{background:var(--s-verified)}.pins .pin.type-punch.state-done{background:var(--s-delivered)}.pins .pin.type-punch.state-waiting{background:#9aa6b2}.pins .pin.type-photo{background:#0e8c8c;border-radius:4px 15px 15px 4px}.pins .pin.type-rfi{background:#172b42}.pins .pin.moving{outline:3px solid #ffc933;outline-offset:2px}.crosshair{position:absolute;left:50%;top:50%;width:40px;height:40px;margin:-20px 0 0 -20px;border:2px solid #c8454a;border-radius:50%;pointer-events:none}.crosshair::before,.crosshair::after{content:'';position:absolute;background:#c8454a}.crosshair::before{left:50%;top:-10px;bottom:-10px;width:2px;margin-left:-1px}.crosshair::after{top:50%;left:-10px;right:-10px;height:2px;margin-top:-1px}.crosshair[hidden],.viewer-drop[hidden]{display:none}.viewer-drop{position:absolute;bottom:18px;left:50%;transform:translateX(-50%);display:flex;gap:8px;align-items:center;background:white;padding:8px 12px;border-radius:12px;box-shadow:0 4px 20px #1d293940;max-width:calc(100vw - 24px);flex-wrap:wrap;justify-content:center}.viewer-hint{font-size:11px;max-width:320px}.viewer-status{position:absolute;top:64px;left:16px;margin:0}
@media(max-width:720px){.unit-row{grid-template-columns:minmax(0,1fr) auto}.unit-row>.pill{grid-column:2;grid-row:1;align-self:start;justify-self:end}.unit-row .actions,.unit-row .unit-photos{grid-column:1/-1}.page-row{grid-template-columns:auto 1fr 1fr}.page-row canvas{grid-row:span 2}.field-head .big{font-size:34px}.viewer-bar{padding:4px 6px}.viewer-bar button{padding:6px 9px}.viewer-title{max-width:48vw}.arm-group{margin-left:0;overflow-x:auto}.viewer-bar>.actions:last-child{width:100%;overflow-x:auto}}
/* The job page as the project's flow, with its plans beside it */
.flow-steps{display:flex;gap:5px;overflow-x:auto;padding:2px 0 8px;margin-bottom:12px}.flow-steps button{white-space:nowrap;border-radius:18px;font-weight:500;font-size:12px;padding:7px 10px;min-height:0}.flow-steps button.done{background:#e8f5ee;color:#2d7350;border-color:#cbe8d6}.flow-steps button.current{background:var(--accent);color:white;border-color:var(--accent)}.project{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(360px,1fr);gap:20px;align-items:start}.project-side{position:sticky;top:12px}.step{padding:0;overflow:hidden}.step-head{display:flex;align-items:center;gap:14px;width:100%;border:0;border-radius:0;background:transparent;text-align:left;padding:16px 20px;font-weight:400}.step-head:hover{background:#f7fafc}.step-title{min-width:0}.step-title small{display:block;margin-top:2px;font-size:12px}.step-n{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:#edf1f5;font-weight:700;flex-shrink:0}.step.done .step-n{background:#e8f5ee;color:#2d7350}.step.current{border-color:#9fcbe0;box-shadow:0 0 0 1px #9fcbe0}.step.current .step-n{background:var(--accent);color:white}.step-state{margin-left:auto;font-size:11px;color:var(--muted);white-space:nowrap}.step-body{padding:4px 20px 18px;border-top:1px solid var(--line)}.step-body>.panel,.step-body>#field-summary>.panel{border:0;border-radius:0;padding:14px 0;margin:0;border-bottom:1px solid var(--line)}.record-group{padding:12px 0;border-bottom:1px solid var(--line)}.record-group:last-child{border-bottom:0}.record-group-head{display:flex;align-items:center;gap:8px}.record-group-head small{background:#edf2f6;border-radius:6px;padding:1px 7px}.record-group-head .actions{margin-left:auto}.record-row{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:5px 0}.next-step{display:flex;justify-content:flex-end;padding-top:14px}.job-details summary{cursor:pointer;font-weight:600}.job-top{display:flex;justify-content:space-between;align-items:center;gap:8px;margin:-8px 0 12px}.back-row{margin-bottom:12px}.plans-panel .sheet-chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}.plan-slot{position:relative}.plan-hint{border:1px dashed #c9d6e2;border-radius:10px;padding:40px 16px;text-align:center}.viewer.inline{position:relative;inset:auto;z-index:auto;height:calc(100vh - 150px);min-height:420px;border:1px solid var(--line);border-radius:10px;overflow:hidden}.viewer.inline .viewer-status{top:52px}.pins .pin.flash{animation:pin-flash .5s ease-in-out 4}@keyframes pin-flash{50%{box-shadow:0 0 0 8px #ffc93399}}.remember{display:flex;align-items:center;gap:8px;font-size:12px;color:#566679;margin:4px 0 8px}
@media(max-width:1180px){.project{grid-template-columns:minmax(0,1fr)}.project-side{position:static;order:-1}.viewer.inline{height:62vh;min-height:360px}}
@media(max-width:720px){.step-head{padding:14px 14px}.step-body{padding:4px 14px 14px}.plans-panel{padding:14px}}
/* PlanPin's pin states (its colours, so crews see what they know): To measure, Measured, Ordered, Delivered, then
   Installed (hollow: claimed, not checked yet) and Verified (solid with a tick); Rework and Blocked on top. */
:root{--s-measure:#d93a3a;--s-measured:#1f6fb2;--s-ordered:#7a4fbf;--s-delivered:#c2760d;--s-installed:#1e8a55;--s-verified:#1e8a55;--s-rework:#b33a80;--s-blocked:#6b7a8d;--s-waiting:#8a97a6}
.pins .pin.state-measure{background:var(--s-measure)}.pins .pin.state-measured{background:var(--s-measured)}.pins .pin.state-ordered{background:var(--s-ordered)}.pins .pin.state-delivered{background:var(--s-delivered)}.pins .pin.state-installed{background:white;color:var(--s-installed);border-color:var(--s-installed)}.pins .pin.state-verified{background:var(--s-verified)}.pins .pin.type-shade.state-verified::before{content:'✓';margin-right:3px}.pins .pin.state-rework{background:var(--s-rework)}.pins .pin.state-blocked{background:var(--s-blocked)}.pins .pin.state-waiting{background:var(--s-waiting)}
.pins .pin.partial::before{content:'';position:absolute;top:-5px;right:-5px;width:9px;height:9px;border-radius:50%;background:white;border:2px solid currentColor;box-shadow:0 0 0 1px #0003}.pins .pin.state-installed.partial::before{border-color:var(--s-installed)}
.pins .pin.off{display:none}.pins .pin.picked{box-shadow:0 0 0 3px white,0 0 0 6px var(--accent),0 1px 5px #0006;z-index:3}
.spine{background:white;border-bottom:1px solid var(--line);padding:4px 10px 6px}.spine-band{display:flex;gap:2px}.spine .seg{height:22px;min-height:0;min-width:6px;border:0;border-radius:5px;padding:0 7px;color:white;font-size:11px;font-weight:700;text-align:left;overflow:hidden;white-space:nowrap}.spine .seg.zero{display:none}.spine .seg.off{opacity:.22}.spine .seg.state-installed{background:white;color:var(--s-installed);box-shadow:inset 0 0 0 2px var(--s-installed)}.spine-empty{margin:2px 0;font-size:12px}
.spine .seg.state-measure,.sw.state-measure{background:var(--s-measure)}.spine .seg.state-measured,.sw.state-measured{background:var(--s-measured)}.spine .seg.state-ordered,.sw.state-ordered{background:var(--s-ordered)}.spine .seg.state-delivered,.sw.state-delivered{background:var(--s-delivered)}.spine .seg.state-verified,.sw.state-verified{background:var(--s-verified)}.spine .seg.state-rework,.sw.state-rework{background:var(--s-rework)}.spine .seg.state-blocked,.sw.state-blocked{background:var(--s-blocked)}.sw.state-installed{background:white;box-shadow:inset 0 0 0 2px var(--s-installed)}
.legend{display:flex;flex-wrap:wrap;gap:2px 10px;padding-top:6px}.legend[hidden]{display:none}.legend button{display:flex;align-items:center;gap:6px;border:0;background:none;padding:3px 4px;min-height:0;font-weight:500;font-size:12px}.legend button.off{opacity:.35}.legend b{font-variant-numeric:tabular-nums}.sw{display:inline-block;width:11px;height:11px;border-radius:50%;flex:none}.sw.type-issue{background:#e07b24;border-radius:2px}.sw.type-punch{background:var(--s-rework);border-radius:1px}.sw.type-photo{background:#0e8c8c;border-radius:2px}.sw.type-rfi{background:#172b42}
.pill.state-measure{background:#fde8e8;color:#a52a2a}.pill.state-measured{background:#e3eef8;color:#1f5f99}.pill.state-ordered{background:#efe8fa;color:#5f3a9e}.pill.state-delivered{background:#fcf0dc;color:#8f560a}.pill.state-installed{background:white;color:#1e7a4b;box-shadow:inset 0 0 0 1.5px #1e8a55}.pill.state-verified{background:#e3f4ea;color:#1e7a4b}.pill.state-rework{background:#f8e4f0;color:#8f2d67}.pill.state-blocked{background:#e9edf1;color:#46525f}
.pin-status{display:flex;align-items:center;gap:8px;margin:-12px 0 10px}.next-hint{border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:6px;padding:9px 12px;margin-bottom:12px;font-size:12px;color:#3d4b5c;line-height:1.5}.next-hint button{padding:2px 8px;min-height:0;margin-left:4px}
.pin-tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:12px;overflow-x:auto}.pin-tabs button{border:0;border-radius:0;background:transparent;padding:9px 12px;min-height:0;font-weight:500;color:var(--muted);border-bottom:2px solid transparent;white-space:nowrap}.pin-tabs button.active{color:#117da8;border-bottom-color:var(--accent);font-weight:650}
.check{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:13px}
@media(max-width:720px){body.viewer-open #drawer{top:auto;bottom:0;height:66vh;width:100vw;border-left:0;border-top:1px solid var(--line);border-radius:14px 14px 0 0;padding:18px 16px;box-shadow:0 -10px 40px #162b4230}.spine{padding:3px 6px 5px}}
/* Zoomed out, pins are dots so neighbouring windows do not pile up; zoom in (or hover) to read their labels. */
.viewer.compact .pins .pin{min-width:0;width:16px;height:16px;padding:0;font-size:0;line-height:0;border-width:2px}.viewer.compact .pins .pin.type-shade.state-verified::before{content:none}.viewer.compact .pins .pin:hover,.viewer.compact .pins .pin:focus-visible,.viewer.compact .pins .pin.flash,.viewer.compact .pins .pin.moving{width:auto;min-width:30px;height:30px;padding:0 7px;font-size:11px;line-height:26px;z-index:4}
/* Home pages by role: cards in a grid, each a panel; Customize adds, removes and reorders them. */
.home-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(440px,1fr));gap:16px;align-items:start}.home-grid .panel{margin:0}.home-card .queue-row{padding:10px 0}.home-card .queue-row p{margin:2px 0}
.home-add{margin-top:16px}.home-add .chips{margin-bottom:10px}.field.inline{flex-direction:row;align-items:center;gap:8px}.field.inline select{width:auto}
.mini-bar{position:relative;height:6px;border-radius:3px;background:#e6ebf0;margin:6px 0 2px;overflow:hidden;min-width:160px}.mini-bar span{position:absolute;left:0;top:0;bottom:0;border-radius:3px}.mini-bar .reported{background:#9fd7b8}.mini-bar .verified{background:var(--s-verified)}
.stage-row{display:grid;grid-template-columns:130px 1fr 44px;align-items:center;gap:10px;width:100%;border:0;background:none;padding:7px 4px;text-align:left;font-weight:500;min-height:0;border-radius:6px}.stage-row:hover{background:#f3f7fa}.stage-row b{text-align:right;font-variant-numeric:tabular-nums}.stage-bar{height:10px;background:#eef2f5;border-radius:5px;overflow:hidden}.stage-bar span{display:block;height:100%;background:var(--accent);border-radius:5px}
.stats.compact{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0}.stats.compact .stat{padding:14px}.stats.compact .stat strong{font-size:22px;margin:6px 0 4px}
@media(max-width:720px){.home-grid{grid-template-columns:minmax(0,1fr)}.stage-row{grid-template-columns:100px 1fr 36px}}
/* Warehouse in WaunaFab's style (its desktop ModernUi colours and grid), scoped to the Warehouse page. LB logo and frame stay. */
.warehouse{--wf-nav:#294760;--wf-nav-hover:#335775;--wf-tab-on:#dcedfe;--wf-tab-on-ink:#0e3754;--wf-border:#cdd8e1;--wf-ink:#192a37;--wf-muted:#5c6c79;--wf-blue:#0078d4;--wf-blue-deep:#0066b8;--wf-line:#d8e0e7;--wf-head:#f1f4f7;--wf-alt:#fafcfd;--wf-active:#e1effc;--wf-error:#b91e1e;color:var(--wf-ink);font-family:"Segoe UI",system-ui,sans-serif}
.warehouse .wf-head h1{font-size:26px;margin:0 0 4px}.warehouse .wf-head p{margin:0 0 14px;color:var(--wf-muted);font-size:13px}
.warehouse .wf-tabs{display:flex;flex-wrap:wrap;background:var(--wf-nav);min-height:48px;border-radius:8px 8px 0 0;overflow:hidden}.warehouse .wf-tabs button{border:0;border-radius:0;background:none;color:white;text-transform:uppercase;font-size:12px;font-weight:600;letter-spacing:.03em;padding:0 20px;min-height:48px}.warehouse .wf-tabs button:hover{background:var(--wf-nav-hover)}.warehouse .wf-tabs button.active{background:var(--wf-tab-on);color:var(--wf-tab-on-ink);font-weight:700}
.warehouse .wf-summary{font-weight:700;font-size:12px;margin:10px 0 12px;color:var(--wf-ink)}.warehouse .wf-summary.bad{color:var(--wf-error)}.warehouse .wf-status{font-weight:700;font-size:12px;min-height:18px;color:var(--wf-muted);text-transform:uppercase}
.warehouse .wf-section{margin-bottom:20px}.warehouse .wf-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 8px}.warehouse .wf-toolbar h2{font-size:12px;letter-spacing:.06em;margin:0 12px 0 0;color:var(--wf-muted)}.warehouse .wf-toolbar button,.warehouse .wf-inline button{text-transform:uppercase;border-radius:2px;border-color:var(--wf-border);font-size:12px}.warehouse button.primary{background:var(--wf-blue);border-color:var(--wf-blue-deep);color:white}.warehouse .wf-inline{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.warehouse .wf-inline label{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:700;color:var(--wf-muted)}.warehouse .wf-inline input,.warehouse .wf-search{width:220px;min-height:34px;border-radius:2px;border-color:var(--wf-border)}
.warehouse .wf-grid-wrap{overflow:visible;background:white;border:1px solid var(--wf-line)}.warehouse table.wf-grid{border-collapse:collapse;width:100%;font-size:12px}.warehouse .wf-grid th{height:40px;background:var(--wf-head);color:var(--wf-ink);font-weight:700;border:1px solid var(--wf-line);padding:0 8px;text-align:left;white-space:nowrap;position:sticky;top:0;z-index:1}.warehouse .wf-grid td{border:1px solid var(--wf-line);padding:4px 8px;height:32px;max-width:none;vertical-align:middle}.warehouse .wf-grid tbody tr:nth-child(even){background:var(--wf-alt)}.warehouse .wf-grid tbody tr:hover{background:var(--wf-active)}.warehouse .wf-grid td.num{text-align:right;font-variant-numeric:tabular-nums}.warehouse .wf-grid td.wf-check{width:34px;text-align:center}.warehouse .wf-grid td small{display:block;color:var(--wf-muted)}.warehouse .wf-grid tr.low td{color:#6d4d0a}
.warehouse .wf-cell{width:96px;min-height:28px;padding:3px 6px;border:1px solid transparent;border-radius:0;text-align:right;background:transparent;font-variant-numeric:tabular-nums}.warehouse .wf-cell:hover{border-color:var(--wf-border);background:white}.warehouse .wf-cell:focus{outline:none;border-color:var(--wf-blue);box-shadow:inset 0 0 0 1px var(--wf-blue);background:white}.warehouse .wf-empty{padding:18px;background:white;border:1px solid var(--wf-line);margin:0}
.wf-badge{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 9px 0 7px;border-radius:11px;background:white;border:1px solid var(--c35,#5c6c7959);font-size:11px;font-weight:700;text-transform:uppercase;color:#192a37;white-space:nowrap}.wf-badge::before{content:'';width:7px;height:7px;border-radius:50%;background:var(--c,#5c6c79)}
.wf-badge.available,.wf-badge.ready,.wf-badge.received{--c:#007846;--c35:#00784659}.wf-badge.reserved,.wf-badge.sent,.wf-badge.acknowledged{--c:#0078d4;--c35:#0078d459}.wf-badge.low,.wf-badge.reorder,.wf-badge.backordered,.wf-badge.waiting{--c:#be9628;--c35:#be962859}.wf-badge.quarantined{--c:#b91e1e;--c35:#b91e1e59}.wf-badge.ordered{--c:#7a4fbf;--c35:#7a4fbf59;border-style:dashed}
@media(max-width:720px){.warehouse .wf-tabs button{padding:0 12px;font-size:11px}.warehouse .wf-grid td{height:44px}.warehouse .wf-inline input,.warehouse .wf-search{width:100%}}
.viewer-bulk{display:flex;align-items:center;flex-wrap:wrap;gap:6px;background:white;border-top:1px solid var(--line);padding:8px 10px}.viewer-bulk[hidden]{display:none}.viewer-bulk button{min-height:0;padding:6px 10px}.viewer-bulk .muted{font-size:11px}
.pins .pin.dragging{transform:translate(-50%,-50%) scale(calc(var(--inv,1)*1.3));z-index:12;box-shadow:0 10px 22px #0006;cursor:grabbing}
/* PROOFFIX-FIELD F11 and F3: a pin a finger holds lifts, and waits at its new spot for Move it here; on a touch screen the whole-sheet dots are a little bigger and take a 44 px touch without covering more of the plan */
.pins .pin.lifted{transform:translate(-50%,-50%) scale(calc(var(--inv,1)*1.45));z-index:12;box-shadow:0 0 0 4px #ffc93399,0 10px 22px #0006}.viewer-ask{position:absolute;bottom:18px;left:50%;transform:translateX(-50%);display:flex;gap:8px;align-items:center;background:white;padding:8px 12px;border-radius:12px;box-shadow:0 4px 20px #1d293940;max-width:calc(100vw - 24px);flex-wrap:wrap;justify-content:center;z-index:5}.viewer-ask[hidden]{display:none}
@media(pointer:coarse){.viewer.compact .pins .pin{width:20px;height:20px}.pins .pin::after{inset:-12px}}
button.link{width:auto!important;margin:0!important;padding:0;border:0;background:none;color:var(--accent);font-weight:600;min-height:0;cursor:pointer}
.login-help{font-size:12px;color:var(--muted);line-height:1.5;margin:12px 0 0}.login-alt{font-size:13px;margin:16px 0 0}.login .note{margin:12px 0}
.login .field small,.panel .field small{display:inline;color:var(--muted);font-weight:400;margin-left:4px}
.account-button{display:flex;align-items:center;gap:8px;text-align:left;padding:2px 6px;min-height:0}.account-button .who{line-height:1.25;white-space:nowrap}
.panel h3{margin:20px 0 6px}.panel form+form,.inline-form{margin-top:14px}
@media(max-width:720px){.account-button .who{display:none}}
.chart-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;margin:16px 0}.chart-grid .panel{margin:0}
.chart{margin:0}.chart svg{width:100%;height:auto;display:block}.chart-empty{padding:24px;text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:8px}
.donut{display:grid;grid-template-columns:minmax(120px,170px) 1fr;gap:16px;align-items:center}.donut>svg{max-width:170px}
.donut figcaption{display:grid;gap:6px;font-size:12px}.donut .key{display:grid;grid-template-columns:10px 1fr auto 34px;gap:6px;align-items:center}.donut .key svg{width:10px;height:10px}.donut .key small{color:var(--muted);text-align:right}
.donut-total{font-size:24px;font-weight:700;fill:var(--ink)}.donut-label{font-size:11px;fill:var(--muted)}
.bar-label,.bar-value,.heat-name,.heat-day{font-size:11px;fill:var(--ink)}.bar-value,.heat-day{fill:var(--muted)}.bar-row,.heat-row{cursor:pointer}.bar-row:hover rect{opacity:.8}.heat-row:hover .heat-name{fill:var(--accent)}
.heat{overflow-x:auto}.chart.heat>svg{width:auto;max-width:none}.chart .heat-key svg{display:inline-block}.heat-key{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--muted);margin-top:6px}.heat-key svg{width:10px;height:10px}
.heat-0{fill:#edf1f5}.heat-1{fill:#cfe8d9}.heat-2{fill:#9fd2b3}.heat-3{fill:#6cbb8c}.heat-4{fill:#3c9a67}.heat-5{fill:#236b44}
.two-col>*{min-width:0}.who-cell{min-width:150px}.spark{width:60px;height:16px;vertical-align:middle;margin-left:6px}.people-controls{margin:12px 0}.people-controls .field{margin:0}.section-title{margin:24px 0 8px;font-size:16px}.late{color:#b54708}
.method summary{cursor:pointer;color:var(--accent);font-weight:600;margin:12px 0}.method ul{margin:0;padding-left:18px;color:#526174;font-size:12px;line-height:1.6}
.person-top{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin:12px 0}.person-top h2{margin:0}.month-nav{margin-left:auto}
.calendar{font-size:11px}.cal-head,.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}.cal-head span{color:var(--muted);font-weight:600;text-align:center;padding:4px 0}
.cal-day{min-height:80px;border:1px solid var(--line);border-radius:6px;padding:4px 6px;display:flex;flex-direction:column;gap:2px;background:#fff;overflow:hidden;line-height:1.3}.cal-day.blank{background:transparent;border-color:transparent}.cal-day.today{outline:2px solid var(--accent)}
.cal-num{font-weight:700;color:#526174}.cal-money{font-size:13px;color:#1f5f3c}.cal-green{color:#236b44;font-weight:600}.cal-due{color:#b54708}.cal-sched{color:var(--accent)}
.heat-bg-1{background:#f0f8f3}.heat-bg-2{background:#dcf0e3}.heat-bg-3{background:#c2e5cf}.heat-bg-4{background:#a3d8b8}.heat-bg-5{background:#84c9a0}
.meter{width:70px;height:8px;vertical-align:middle;margin-left:6px}.meter-back{fill:#edf1f5}.meter-fill{fill:#3c9a67}.plain-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}.plain-list li{line-height:1.4}
@media(max-width:720px){.donut{grid-template-columns:1fr}.donut>svg{max-width:160px;margin:0 auto}.cal-day{min-height:54px;padding:2px 3px}.cal-day span:not(.cal-num):not(.cal-green){display:none}.cal-money{font-size:10px}.month-nav{margin-left:0}}
.nowrap{white-space:nowrap}
.division{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}.division select{min-height:32px;padding:4px 8px;font-weight:600;color:var(--ink)}.division.fixed{font-weight:600;color:var(--ink);background:#edf1f5;border-radius:16px;padding:6px 10px}
.branch-table input:not([type=checkbox]),.branch-table select{width:100%;min-width:90px}.branch-table tr.unlisted{background:#fff8eb}.people-branch{margin:0 0 0 auto;align-self:flex-end}
/* Settings → Branches (branches.js): each row's name with what it holds, its buttons, a retired branch greyed; the counts in the side panel */
.branch-table td[data-col=name] strong{display:block;min-width:130px}.branch-table td[data-col=name] small{display:block;color:var(--muted);font-weight:400}.branch-table tr.retired td{background:#f1f3f6;color:var(--muted)}
.branch-acts{display:flex;flex-wrap:wrap;gap:2px;margin:4px 0 0 -8px;min-width:170px}.branch-acts button{padding:4px 8px;font-size:12px;white-space:nowrap;color:#167fa9}
.branch-table td[data-col=manager] select,.branch-table td[data-col=backup] select{min-width:170px}.branch-managers{display:flex;flex-wrap:wrap;gap:4px 18px;margin:0 0 12px;color:var(--muted)}.branch-managers strong{color:var(--ink)}.who-cell small.branch-role{color:#316d9b}
.branch-counts{width:100%;border-collapse:collapse;margin:6px 0 10px}.branch-counts td{padding:6px 8px;border-bottom:1px solid var(--line)}.branch-counts td.mono{text-align:right;white-space:nowrap}.branch-tally .note{margin:8px 0}
@media(max-width:720px){.division>span{display:none}.division select{max-width:130px}}
@media(max-width:420px){.division select{max-width:96px}}  /* a 390 px phone: the top bar fits without widening the page */
/* Live updates (live.js): the "Last loaded" time is the refresh button; the dot on its arrow is the connection (green
   live, amber connecting or checking every few seconds, grey offline); the pill holds new changes while someone types. */
.sync.live{display:inline-flex;align-items:center;justify-content:center;gap:4px;border:0;background:transparent;border-radius:8px;padding:4px 5px;font-size:11px;font-weight:500;color:var(--muted)}
.sync.live:hover{background:#eff5f8;color:var(--ink)}.sync.live.offline{color:#a55a14}
.live-icon{position:relative;display:inline-block;width:12px;font-size:13px;line-height:1;text-align:center}.live-turn{display:inline-block}
.live-dot{position:absolute;right:-4px;top:-3px;width:7px;height:7px;border-radius:50%;background:#9aa6b2;box-shadow:0 0 0 2px white}
.live-live .live-dot{background:#1baf7a}.live-wait .live-dot,.live-poll .live-dot{background:#eda100}
.sync.live.pulling .live-turn{animation:live-turn .8s linear infinite}@keyframes live-turn{to{transform:rotate(360deg)}}
/* The pill floats just under the top bar, which scrolls away, so it stays in sight of someone typing further down. */
.live-pill{position:fixed;top:74px;left:50%;transform:translateX(-50%);z-index:29;min-height:32px;border:0;border-radius:999px;background:var(--accent);color:white;padding:6px 14px;font-size:11px;font-weight:650;white-space:nowrap;box-shadow:0 4px 14px #2494c450}
.live-pill:hover{background:#1c83ae}.live-pill[hidden]{display:none}
/* On tablets the button is the arrow and its dot; the top bar keeps to one line, as on phones, and the crumb gives way. */
@media(max-width:1000px){.sync.live{min-width:32px}.sync.live .live-when{display:none}.topbar .actions{flex-wrap:nowrap;min-width:0}.topbar .top-actions{flex-wrap:nowrap;flex-shrink:0}.crumb{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}}
/* Phones: the Division picker and Sign out move into the ☰ menu, so the top bar keeps its menu button clear. On phones and
   tablets, buttons that still don't fit (someone on the clock with Ask, say) wrap under the bar instead of covering it. */
@media(max-width:1000px){.topbar{height:auto;min-height:65px;padding-block:10px}.topbar .actions{flex:1 1 0;min-width:0}.topbar .top-actions{flex:0 1 auto;min-width:0;flex-wrap:wrap;justify-content:flex-end}}
.side-phone{display:none}
@media(max-width:720px){.side-phone{display:block;padding:0 12px 12px}.side-phone .division{flex-direction:column;align-items:stretch;gap:4px}.side-phone .division>span{display:block}.side-phone .division select{max-width:none}.side-phone .division.fixed{align-self:flex-start}.side-signout{padding:12px 0 0}.side-signout button{width:100%;text-align:left;padding:11px 13px}
 .sidebar{overflow-y:auto;overscroll-behavior:contain}.topbar .division,.topbar [data-action="logout"]{display:none}.menu-button{width:44px;padding:0;flex-shrink:0}.topbar .actions{min-width:44px}}
@media(max-width:720px){.sync.live{min-width:40px}.live-pill{top:72px}}
@media(prefers-reduced-motion:reduce){.sync.live.pulling .live-turn{animation:none}}
/* UIFIX-01. Jordan, September 29, 2026: "minimal scrollers only when necessary"; "instead of creating a scroll wheel, manage your ui space
   better". The sidebar on a computer stays in place and fills the window's height, the build line at its foot, and never makes the page
   taller. Its items share what the brand block, the build line and any row between (the desktop program's) leave, 28 to 44 px each,
   so the whole menu fits a 1366 × 768 laptop (in a browser too, under its bars) and a 1920 × 1080 window; only a window too short even
   for 28 px items scrolls it, inside itself. --brand-h is the logo block's height, with the logo as LOGO-01 made it (18% larger). Phones
   keep their menu. */
@media(min-width:721px){.sidebar{--brand-h:112px;padding:10px 10px 6px;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
 .brand{height:var(--brand-h);flex-shrink:0;padding:0 12px 8px;margin-bottom:4px;display:flex;flex-direction:column;justify-content:center}
 .nav{flex:1 1 auto;display:flex;flex-direction:column}.nav button{flex:1 1 0;min-height:28px;max-height:44px;margin:0;padding:0 12px}.nav-symbol{font-size:17px;line-height:1}
 .sidebar-foot{padding:8px 12px 0;line-height:1.5}}
.layout{min-height:calc(100vh - var(--band,0px) - var(--ca-h,0px))}  /* the band and a site alert sit above it, so a short page is no taller than the window */
/* Tables grow with the page, and the page scrolls. A table wider than its box scrolls sideways in it, and only then (app.js fitTables
   marks the box .wide). The header row stays in view under the band as the page scrolls (sticky; a .wide box holds its own, so there
   the copy fitTables floats), and a grid's cells scroll into view below it. */
.table-wrap{max-height:none;overflow:visible}.table-wrap.wide,.warehouse .wf-grid-wrap.wide{overflow:auto hidden}.table-panel{overflow:clip}
.main th,.main .warehouse .wf-grid th{top:calc(var(--band,0px) + var(--ca-h,0px))}.main .wide th,.main .warehouse .wide .wf-grid th,.main .bud-full th{top:0}.main table.xl td{scroll-margin-top:calc(var(--band,0px) + var(--ca-h,0px) + var(--head-h,44px))}
.head-float{position:fixed;z-index:15;overflow:hidden;background:#f8fafb;box-shadow:0 3px 8px #1d29391f}.head-float table{margin:0}
body.viewer-open .head-float,body.fv-open .head-float,body.bud-fullscreen .head-float{display:none}@media print{.head-float{display:none}.table-wrap.wide,.warehouse .wf-grid-wrap.wide{overflow:visible}}
/* The column a table is sorted by (table(), o.sorted), and the People report's line saying which order it is in. */
th.sorted{color:#117da8}th.sorted::after{content:" ↓"}col.sorted{background:#f3f9fc}.people-sorted{margin:-4px 0 14px;font-size:12px}.people-sorted strong{color:var(--ink)}
/* Tabs wrap onto a second row on a computer rather than hide the last ones behind a sideways scroller (a phone swipes them). */
@media(min-width:721px){.tabs{flex-wrap:wrap;overflow:visible}}
/* No sideways scroller a few pixels wide: a table short of room wraps its headers before it scrolls, table cells keep 12 px at their sides
   as on a phone (tables with their own spacing keep it), and the week board's five days fit a laptop (a phone still swipes them). */
thead th{white-space:normal;vertical-align:bottom}
@media(min-width:721px){th,td{padding-left:12px;padding-right:12px}.board{grid-template-columns:repeat(5,minmax(176px,1fr))}}
/* A list's search box keeps its 300 px on a computer, so the search and its filters share one row: at 100% of a toolbar group that sizes
   itself to them, it pushed the filters onto a second row (48 px more above every list). */
@media(min-width:721px){.toolbar>.actions>input:is(#search,[type=search]){width:300px}}
/* Side menus that keep their place as the page scrolls (Settings', a customer's, Home's boards, Activity's people) sit under the band, and
   keep it only while they fit the window (app.js fitTables marks them .keep); a taller one scrolls with the page, not in a box of its own. */
.main .cust-menu,.main .dash-boards,.main .act-people{top:calc(var(--band,0px) + var(--ca-h,0px) + 14px)}
.main :is(.set-menu,.cust-menu,.dash-boards,.act-people):not(.keep){position:static}
.gantt-tools{margin:12px 0;gap:8px}.gantt-tools .tabs{margin:0;border:0}.gantt-range{font-weight:600;min-width:150px}.gantt-wrap{overflow-x:auto;background:#fff;border:1px solid var(--line);border-radius:8px}
.gantt-svg{display:block;font-size:12px;user-select:none;-webkit-user-select:none}.gantt-row{fill:#fff}.gantt-odd{fill:#fafbfc}.gantt-jobrow{fill:#f1f5f9}.gantt-weekend{fill:#eef1f5;opacity:.7}
.gantt-month{font-weight:700;fill:var(--ink)}.gantt-day{fill:var(--muted);font-size:11px}.gantt-day.is-today{fill:var(--accent);font-weight:700}.gantt-today{stroke:#d9534f;stroke-width:2}
.gantt-job{font-weight:700;fill:var(--ink)}.gantt-label{fill:var(--ink)}.gantt-crew,.muted-text{fill:var(--muted)}.gantt-add{fill:var(--accent);font-weight:700}.gantt-link{cursor:pointer}
.gantt-fill{fill:#2494c4}.s-confirmed .gantt-fill{fill:#172b42}.s-in-progress .gantt-fill{fill:#e0a030}.s-done .gantt-fill{fill:#3c9a67}.gantt-bar-text{fill:#fff;font-weight:600;pointer-events:none}
.gantt-bar.movable{cursor:grab}.gantt-bar.dragging{cursor:grabbing;opacity:.85}.gantt-handle{fill:transparent;cursor:ew-resize}.gantt-bar:focus,.gantt-task:focus{outline:none}.gantt-bar:focus .gantt-fill{stroke:#e0a030;stroke-width:3}
.gantt-task path{fill:#8a5cc2}.gantt-task.late path{fill:#d9534f}.gantt-task.done path{fill:#3c9a67}.gantt-task.movable{cursor:grab}.gantt-task:focus path{stroke:#172b42;stroke-width:2}
.gantt-help{margin:8px 0}.gantt-job .gantt-tools{margin:8px 0}
.gantt-tools{justify-content:flex-start!important;flex-wrap:wrap}.gantt-tools .remember{margin:0 0 0 auto}
.checklist-table input:not([type=checkbox]),.checklist-table select{width:100%;min-width:80px}.checklist-table td:first-child{min-width:280px}.checklist-table td:nth-child(3) input{max-width:90px}
a.button{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:8px 14px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);font-weight:600;text-decoration:none}a.button.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.checklist-panel h2 small{font-size:12px;color:var(--muted);font-weight:500;margin-left:6px}.check-item{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:4px 0;border-bottom:1px solid var(--line)}.check-item label{display:flex;gap:8px;align-items:center;flex:1 1 260px;font-weight:600}.check-item.done label span{text-decoration:line-through;color:var(--muted);font-weight:500}.check-item small{color:var(--muted)}
.paper-list{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:12px 0;display:grid;gap:4px}.paper-list legend{font-weight:600;padding:0 4px}.paper-files{margin:12px 0}
.home-sub{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:10px 0 4px}
.warehouse .wf-total td{background:#eef2f7;font-weight:700}.warehouse .wf-note{margin:8px 0}.warehouse td small{display:block;color:#647386}.big-code{font-size:20px;letter-spacing:.04em}

.order-table td,.order-table th{white-space:nowrap}tr.blocked td{color:var(--muted)}

.chart .grid{stroke:#e1e0d9;stroke-width:1}.chart .axis{stroke:#c3c2b7;stroke-width:1}.chart .tick{font-size:10px;fill:#898781}.chart-legend{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:11px;color:var(--muted);margin-top:8px}.chart-legend .key{display:inline-flex;align-items:center;gap:5px}.chart-legend svg{width:10px;height:10px}.chart.columns path:hover,.chart.lines circle:hover{opacity:.82}.meter{width:100%;height:8px;display:block;margin:8px 0 2px}
.rate-form{align-items:flex-end;max-width:520px}.rate-form .field{flex:1}.total-row td{border-top:2px solid var(--line)}td.cost{color:#52514e}.company-stats{grid-template-columns:repeat(4,minmax(0,1fr))}.chart-grid .panel.wide,.panel.wide{grid-column:1/-1}
.chart-grid.two{grid-template-columns:repeat(auto-fit,minmax(min(460px,100%),1fr))}.chart-narrow{max-width:560px}

/* Estimating: the estimate editor, budget and rate card (estimates.js) */
.est-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,340px) auto;gap:16px;align-items:end}.est-title h2{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:0 0 6px}.est-title small{display:block;line-height:1.6}.est-save.bad{color:#a6343a}
.est-stats{grid-template-columns:repeat(4,minmax(0,1fr))}.est-stats .stat small{display:block;line-height:1.5}
.est-block{padding:16px}.est-block>summary{cursor:pointer}.est-block-head{display:flex;align-items:baseline;gap:12px;margin-bottom:10px;flex-wrap:wrap}.est-block-head h3{margin:0;font-size:14px}.est-block-head .actions{margin-left:auto}
.est-row{display:grid;grid-template-columns:2fr 1.3fr 1fr 1.3fr auto;gap:12px;align-items:end}.est-spec{margin-top:12px}.est-spec summary{cursor:pointer;color:#526174}
.est-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:12px}
.est-table{max-height:none}.est-table td{padding:5px 6px;max-width:none}.est-table th{padding:8px 6px}.est-table input,.est-table select{min-height:32px;padding:5px 7px;border-radius:6px}.est-table select{width:auto;max-width:190px}
.est-table input.n{width:86px;text-align:right}.est-table input.b{width:96px}.est-table input.t{min-width:180px}.est-table input.set,.est-points input.set{background:#fff8e6;border-color:#e0b862;font-weight:600}.est-table td.c{text-align:center}.est-table td.r,.est-points td.r{text-align:right;white-space:nowrap}.est-table td strong{font-weight:600}
.est-out td{opacity:.55}.est-out td:nth-child(6){opacity:1}.est-need input[aria-label=Reason]{border-color:#bf8d3c;background:#fff8ec}.est-over td{color:#a6343a}.est-flag td:first-child{box-shadow:inset 3px 0 #bf8d3c}.est-idle td{color:var(--muted)}.est-sub td{background:#f8fafb}
.est-driver,.est-pair{display:flex;gap:6px;align-items:center;margin-top:4px}.est-driver select{max-width:200px}
.est-add{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:10px}.est-add select{width:auto;max-width:340px}.est-add small{flex-basis:100%}
.est-price-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px}.est-points{width:auto}.est-points td,.est-points th{padding:6px 10px}.est-points input{width:92px;min-height:32px;padding:5px 7px;text-align:right}
.est-sell input{font-size:18px;font-weight:600;min-height:46px}.est-pricing-wrap{overflow-x:auto;max-width:100%}.est-pricing-table{width:100%;border-collapse:collapse}.est-pricing-table th,.est-pricing-table td{padding:6px 8px;border-bottom:1px solid var(--line);text-align:right;vertical-align:middle}.est-pricing-table th:first-child,.est-pricing-table td:first-child{text-align:left}.est-pricing-table td small{display:block;color:var(--muted);font-size:11px}.est-pricing-table input{width:96px;min-height:34px;padding:5px 7px;text-align:right}.est-pricing-table input.set,.est-margin input.set{background:#fff8e6;border-color:#e0b862;font-weight:600}.est-pricing-table .est-total td{border-top:2px solid var(--line);border-bottom:0}.est-money{display:inline-flex;align-items:center;gap:4px;font-weight:600}.est-money input.est-price{width:132px;font-size:17px;font-weight:700}.est-margin{max-width:180px;margin-top:10px}.est-margin input{text-align:right}.est-facts{display:grid;grid-template-columns:1fr 1fr;gap:0 18px;margin:12px 0 0}.est-facts div{display:flex;justify-content:space-between;gap:12px;border-bottom:1px solid var(--line);padding:7px 0}.est-facts dt{color:var(--muted)}.est-facts dd{margin:0;font-weight:600;text-align:right}
.est-list{margin:6px 0 0;padding-left:18px}.est-tabs small{margin-left:6px;font-weight:500}
.est-scope{border:1px solid var(--line);border-radius:8px;padding:12px 14px;margin:16px 0}.est-scope legend{font-weight:600;padding:0 6px}.est-scope textarea{margin:6px 0 10px}
.est-award-lines{border:1px solid var(--line);border-radius:8px;margin:12px 0}.est-award-row{display:grid;grid-template-columns:22px minmax(0,1fr) auto 120px;gap:10px;align-items:center;padding:10px 12px;border-bottom:1px solid var(--line)}.est-award-row:last-child{border:0}.est-award-row.total{background:#f8fafb;font-weight:600}.est-award-row small{text-align:right}
@media(max-width:720px){.est-award-row{grid-template-columns:22px minmax(0,1fr) auto}.est-award-row>span:nth-child(2){overflow-wrap:anywhere}.est-award-row small{grid-column:2/-1}}  /* on a phone the cost goes under the line, so "Contract" keeps its room */
.est-budget{margin:0 0 12px}.budget-slot .table-wrap{margin-bottom:6px}
.rates-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.rates-input{display:flex;gap:6px;align-items:center}.rates-input input{text-align:right}
@media(max-width:1000px){.est-head{grid-template-columns:1fr}.est-row{grid-template-columns:1fr 1fr}.est-grid{grid-template-columns:1fr 1fr}.est-price-grid{grid-template-columns:1fr}.rates-grid{grid-template-columns:1fr 1fr}}
@media(max-width:720px){.est-pricing-table th,.est-pricing-table td{padding:5px 4px;font-size:13px}.est-pricing-table input{width:64px;min-height:34px;padding:4px 5px}.est-money input.est-price{width:92px;font-size:15px}.est-pricing-table td small{display:none}.est-stats{grid-template-columns:1fr 1fr}.est-row,.est-grid,.rates-grid{grid-template-columns:1fr}.est-facts{grid-template-columns:1fr}}
/* ESTREV-01: hidden markup, a price change's revision, the signed copy and the price history */
.est-made{color:#526174}.record-row.est-prop{flex-wrap:wrap}.est-room{margin-top:14px;padding-top:12px;border-top:1px dashed var(--line)}.est-room h4{margin:0;font-size:13px}.est-room-table{width:auto;border-collapse:collapse}.est-room-table th,.est-room-table td{padding:5px 6px;border-bottom:1px solid var(--line);text-align:left}.est-room-table input{min-height:32px;padding:5px 7px}.est-room-table input.n{width:96px;text-align:right}.est-room-table input:not(.n){min-width:240px}.est-room-table td.r{text-align:right;white-space:nowrap}
.est-room-sum{margin:8px 0 0;font-size:13px}.est-pricing-table .est-room-row td{color:#946422;border-bottom:1px dashed var(--line)}
.est-change-add{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:0}.est-change-add legend{font-size:12px;color:var(--muted);padding:0 4px}.est-change-preview{margin:12px 0 0}.est-award-rev{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;margin:0 0 10px}.est-award-rev small{flex-basis:100%;color:var(--muted)}
.est-seed{align-items:flex-start}.est-seed input{margin-top:2px}.est-seed-why{display:block;margin-top:3px;color:#946422}
/* PRICESHEET-01: the margin guide (the band's bar under the tile's margin, and each section's line under its margin box) */
.est-band{display:block;width:100%;height:10px;margin:2px 0 6px}.est-band-all{fill:#e1e6ed}.est-band-in{fill:#9fd3b4}.est-band-at{fill:var(--ink)}
.est-guide-under strong,.est-guide-under .est-band-at{color:#a6343a;fill:#a6343a}.est-guide-in strong{color:#2d7350}.est-guide-over strong{color:#316d9b}
.est-guide-line{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center;margin:8px 0 0}.est-guide-line p{margin:0;flex-basis:100%;font-size:12px}.est-guide-line button{padding:5px 9px;font-size:12px}
.est-guide-line.est-guide-under p{color:#a6343a}.est-under{color:#a6343a;font-weight:600}small.est-under{font-weight:500}
#est-floor-form .est-list{margin:0 0 12px}
@media(min-width:1001px){.est-head{grid-template-columns:minmax(220px,1fr) minmax(220px,340px) minmax(0,1.4fr)}.est-head>.actions{justify-content:flex-end}}  /* the head's buttons wrap; its title keeps its room */
/* PRICESHEET-01: each section's unit prices beside what recent won jobs ran */
.est-up{margin-top:14px;padding-top:12px;border-top:1px dashed var(--line)}.est-up h4{margin:0;font-size:13px}.est-up-wrap{overflow-x:auto;max-width:100%}
.est-up-table{width:100%;border-collapse:collapse}.est-up-table th,.est-up-table td{padding:6px 8px;border-bottom:1px solid var(--line);text-align:right;white-space:nowrap;position:static}.est-up-table th:first-child,.est-up-table td:first-child{text-align:left}
.est-up-table td small{display:block;color:var(--muted);font-size:11px}.est-up-off td{background:#fff8ec}.est-up-off td small{color:#946422}.est-up-jobs{margin-top:4px}.est-up-jobs summary{cursor:pointer;color:#526174}
@media(max-width:720px){.est-up-table .est-up-cost{display:none}.est-up-table th,.est-up-table td{padding:6px 4px;white-space:normal}}
/* PRICESHEET-01: the revision tabs over an estimate, and two revisions compared */
.est-revs{margin:0 0 12px}.est-revs button small{margin-left:6px;font-weight:500;color:var(--muted)}
.est-cmp-pick{margin-bottom:12px}.est-cmp-wrap{overflow-x:auto;max-width:100%;margin:8px 0 14px}.est-cmp-totals{width:100%;border-collapse:collapse}.est-cmp-totals th,.est-cmp-totals td{padding:6px 8px;border-bottom:1px solid var(--line);text-align:right;white-space:nowrap;position:static}.est-cmp-totals th:first-child,.est-cmp-totals td:first-child{text-align:left}
.est-cmp-sec{border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin:10px 0}.est-cmp-sec h4{margin:0 0 4px;font-size:13px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}.est-cmp-sec h5{margin:10px 0 2px;font-size:12px}.est-cmp-sec h5 small{font-weight:500;margin-left:6px}
.est-cmp-same{background:#f8fafb}.est-cmp-line{margin:2px 0;font-size:12px}.est-cmp-list{margin:2px 0 0;padding-left:18px;font-size:12px;line-height:1.5}.est-cmp-list li.est-cmp-added{color:#2d7350}.est-cmp-list li.est-cmp-removed{color:#a6343a}
/* PRICESHEET-01: the tools over the tabs (find in the sheet, undo, redo), the rows found, and the takeoff's totals */
.est-tools{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:4px 0 8px}.est-find{display:flex;align-items:center;gap:4px;flex:1 1 280px;max-width:480px}.est-find input{min-height:36px;padding:6px 10px}
.est-find small{white-space:nowrap;min-width:76px}.est-find button{padding:6px 10px}.est-tools>button small{margin-left:6px;font-weight:500;color:var(--muted)}
table.xl tr.est-hit>td{background:#fff8dc}table.xl tr.est-hit-on>td{background:#ffe69c}.est-foot td{background:#f1f5f9;border-top:2px solid #d5dde6;font-weight:600}.est-foot td small{display:block;font-weight:500}.est-tip{font-size:12px}
/* PRICESHEET-01: the crew time the labor takes (the tile's crew box, the line under the labor's head) */
.est-crew-size{display:inline-flex;align-items:center;gap:4px}.est-crew-size input{width:3.2em;min-height:28px;padding:2px 6px;text-align:right}
.est-crew{margin:0 0 10px;padding:8px 12px;border-radius:8px;background:#f4f7fa;font-size:13px}.est-crew p{margin:0 0 2px}.est-crew details{margin-top:4px}.est-crew summary{cursor:pointer;color:#526174;font-size:12px}.est-crew small{display:block;color:var(--muted);margin-top:4px}
.est-crew-short{background:#fff8ec}.est-short{color:#946422;font-weight:600}
/* PRICESHEET-01: the internal price sheet's two files */
.est-ps-files{list-style:none;margin:12px 0;padding:0}.est-ps-files li{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;justify-content:space-between;border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:6px 0}
.est-ps-files li>div{min-width:0;overflow-wrap:anywhere}.est-ps-files small{display:block;color:var(--muted)}
/* PRICESHEET-01: starting from another estimate, and unit packages */
.est-lib-find{margin:12px 0}.est-lib-item{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:8px 0}.est-lib-item summary{cursor:pointer;line-height:1.5}.est-lib-item summary small{display:block}
.est-lib-secs{list-style:none;margin:8px 0;padding:0}.est-lib-secs li{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:6px 0;border-top:1px solid var(--line)}.est-lib-secs li small{display:block}.est-lib-item .actions{justify-content:flex-end}
.est-origin{margin:10px 0 0;font-size:12px}.est-pkg-list{list-style:none;margin:8px 0 0;padding:0}.est-pkg-list li{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;padding:10px 0;border-top:1px solid var(--line)}.est-pkg-list small{display:block;line-height:1.5}
.est-pkg-lines input.n{width:74px}.est-pkg-lines select{max-width:200px}
.est-cmp-ph{display:none}@media(max-width:720px){.est-cmp-totals .est-cmp-chg{display:none}.est-cmp-ph{display:block;font-size:11px}.est-cmp-totals th,.est-cmp-totals td{padding:6px 4px}}
/* A phone reads the whole estimate: its tiles two to a row and its price block one column, none wider than the screen */
@media(max-width:1000px){.est-price-grid{grid-template-columns:minmax(0,1fr)}}
@media(max-width:720px){.est-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.est-stats .stat strong{font-size:18px;overflow-wrap:anywhere}.est-stats .stat{min-width:0}.est-points{width:100%}.est-points td,.est-points th{padding:6px 4px}.est-points input{width:64px}}
.ph-list{list-style:none;margin:8px 0 0;padding:0}.ph-row{display:grid;grid-template-columns:104px minmax(0,1fr) minmax(120px,auto);gap:4px 12px;align-items:start;padding:8px 0;border-bottom:1px solid var(--line)}.ph-row:last-child{border-bottom:0}
.ph-day{color:var(--muted);font-size:12px;padding-top:2px}.ph-what{min-width:0}.ph-what small{display:block;line-height:1.45;overflow-wrap:anywhere}.ph-money{text-align:right;white-space:nowrap}.ph-money small{display:block;font-size:11px}.ph-down,.ph-up{color:#11729b}.ph-room{color:#946422}.ph-award{background:#f1f9f4}.ph-signed{background:#f6fbfe}
@media(max-width:720px){.ph-row{grid-template-columns:minmax(0,1fr) auto}.ph-day{grid-column:1/-1;padding:0}.ph-money{white-space:normal}.est-room-table input.n{width:72px}.est-room-table input:not(.n){min-width:0;width:150px}}

/* The job's wall (wall.js) */
.wall-compose{border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:6px;background:#fbfcfd}.wall-compose textarea{border:0;background:transparent;min-height:52px;padding:6px 4px;resize:vertical}.wall-compose textarea:focus-visible{outline:0}
.wall-tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap;border-top:1px solid var(--line);padding-top:8px}.wall-tools .primary{margin-left:auto}
.wall-camera{position:relative;display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:18px;padding:6px 12px;font-weight:600;font-size:12px;color:#117da8;background:white;cursor:pointer}.wall-camera input{position:absolute;inset:0;opacity:0;cursor:pointer;min-height:0;width:100%}
.wall-chosen{font-size:12px;margin-top:4px}.wall-post{border-top:1px solid var(--line);padding:14px 0 10px}.wall-post:first-of-type{border-top:0}
.wall-post header,.wall-comment{display:flex;gap:10px;align-items:flex-start}.wall-post header div,.wall-comment>div{flex:1;min-width:0}.wall-post header small{display:block}.wall-post .avatar,.wall-comment .avatar{flex-shrink:0}
.wall-body{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--ink);margin:8px 0;line-height:1.55}.wall-photos .shot{width:84px;height:84px}.wall-docs{margin:6px 0}
.wall-post footer{display:flex;gap:2px;margin-top:4px}.wall-post footer button{padding:6px 10px;font-weight:600;color:#526174}.wall-post footer button.on{color:#117da8}.wall-del{margin-left:auto;padding:4px 8px;font-weight:500;color:var(--muted)}
.wall-replies{margin:6px 0 0 18px;border-left:2px solid var(--line);padding-left:12px;display:grid;gap:10px}.wall-comment .wall-body{margin:4px 0}.wall-comment .avatar{width:26px;height:26px;font-size:10px}
.wall-reply-form{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap;margin:10px 0 0 18px}.wall-reply-form textarea{flex:1;min-height:40px;min-width:180px}.wall-reply-form .preview,.wall-reply-form .error{flex-basis:100%}
.flow-steps .wall-chip{margin-left:auto}

/* The page editor and sheet manager (field/sheets.js) */
#drawer:has(#pages-form){width:min(900px,100vw)}.page-row{grid-template-columns:auto auto auto .9fr 2fr .6fr;content-visibility:auto;contain-intrinsic-size:auto 90px}.page-from{grid-column:4/-1;margin-top:-4px;font-size:12px}.page-row.dragging,.sheet-row.dragging{opacity:.45}.page-row[draggable=true],.sheet-row[draggable=true]{cursor:grab}.page-move{display:flex;flex-direction:column}.page-move button{padding:2px 8px;min-height:0;line-height:1.2}.page-had{grid-column:span 3}
.sheet-list{display:flex;flex-direction:column;margin:12px 0}.sheet-row{display:grid;grid-template-columns:auto auto .8fr 1.4fr .6fr auto;gap:8px;align-items:center;border-bottom:1px solid var(--line);padding:8px 0}.sheet-row canvas{border:1px solid var(--line);max-width:64px;height:auto;background:white}
@media(max-width:720px){.page-row{grid-template-columns:auto auto 1fr 1fr;contain-intrinsic-size:auto 230px}.page-row>.page-move{grid-column:1;grid-row:1}.page-row>canvas{grid-column:2;grid-row:1}.page-row>.chip{grid-column:3/-1;grid-row:1;justify-self:start}.page-row>[name^=sheet-]{grid-column:1/4;grid-row:2}.page-row>[name^=floor-]{grid-column:4;grid-row:2}.page-row>[name^=title-],.page-row>.page-had{grid-column:1/-1;grid-row:3}.page-row>.page-had{grid-row:2}.page-row>.page-from{grid-column:1/-1;grid-row:4}.sheet-row{grid-template-columns:auto auto 1fr}.sheet-row canvas{grid-row:span 2}}

/* Sales tax on the estimate (tax type, the ZIP code's rate, a typed rate) and Settings → Sales tax */
.est-taxbox{display:flex;flex-direction:column;gap:4px;min-width:0}.est-taxbox .est-tax{margin:0}.est-taxbox>small{line-height:1.5}
.est-rate{display:flex;flex-wrap:wrap;gap:2px 8px;align-items:baseline;font-size:12px}.est-rate small{color:var(--muted)}.est-rate button{padding:4px 8px}
.est-override{width:100%;flex-wrap:wrap}.est-override input{min-height:34px}.est-override input.n{width:90px}.est-override input:not(.n){flex:1;min-width:160px}
.est-cert{color:#946422;font-weight:600}
.tax-grid{grid-template-columns:repeat(4,minmax(0,1fr))}@media(max-width:720px){.tax-grid{grid-template-columns:1fr 1fr}.tax-grid .field.wide{grid-column:1/-1}}

/* Estimating: each bid's steps, bid list → active bid list → estimate → proposal → update bid list → award → construction → closeout */
.bid-flow{margin:-12px 0 16px;font-size:12px}
.bid-steps{list-style:none;margin:8px 0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.bid-steps li{display:flex;flex-direction:column;gap:2px;border:1px solid var(--line);border-radius:8px;padding:6px 10px;min-width:120px;background:#fff;font-size:12px;color:#526174}
.bid-steps li>span:first-child{font-weight:700}.bid-steps li small{font-size:11px;color:var(--muted);line-height:1.35}
.bid-steps li.done{border-color:#b7dcc6;background:#f1f9f4;color:#2d7350}.bid-steps li.now{border-color:var(--accent);background:#eaf5fb;color:#11729b}
.bid-steps li.lost{border-color:#e7c3c5;background:#fbf1f1;color:#a6343a}.bid-steps li.skip,.bid-steps li.todo{opacity:.75}
.bid-steps.compact{gap:3px;margin:0;flex-wrap:nowrap}.bid-steps.compact li{flex-direction:row;min-width:0;padding:2px 6px;gap:4px;border-radius:12px;font-size:11px}
.bid-steps.compact li:not(.now) .bid-step-name{display:none}
.bid-track .bid-steps li{min-width:110px}
@media(max-width:720px){.bid-steps li{min-width:0;flex:1 1 40%}.bid-steps.compact li:not(.now){display:none}.bid-steps.compact li.now{flex:0 1 auto;white-space:nowrap}}
/* the tracker's sheets (bidsheet.js): Upcoming Bids and Active Bids on the spreadsheet grid */
.bid-views{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;margin-left:auto}.bid-views button{border:0;border-radius:0;padding:8px 14px;font-weight:500;color:var(--muted)}.bid-views button.active{background:#e8f5fb;color:#117da8;font-weight:650}
.bs-hint{margin:0 0 8px;font-size:12px}.bs-bar{justify-content:space-between;margin:0 0 8px}.bs-made{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.bs-made p{margin:0;color:var(--ink)}
.bs-sheet{table-layout:fixed;width:100%}  /* the columns' own widths, as the workbook sets them; wider than the frame, the grid scrolls in it */
.bs-sheet th{padding:8px 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:108px}.bs-sheet th[data-col=sort]{width:52px}.bs-sheet th:is([data-col=due],[data-col=bidDate],[data-col=awardDate],[data-col=externalNumber]){width:88px}
.bs-sheet th[data-col=status]{width:92px}.bs-sheet th:is([data-col=customer],[data-col=scope]){width:180px}.bs-sheet th:is([data-col=name],[data-col=notes]){width:240px}.bs-sheet th:is([data-col=plansUrl],[data-col=architect],[data-col=taxClass]){width:136px}.bs-sheet th[data-col=bidAmount]{width:122px}
.bs-sheet td{padding:0;max-width:none;height:32px;border-top:1px solid #edf0f4;border-right:1px solid #f1f3f6;transition:background-color 1.2s}.bs-sheet .bs-t{display:block;padding:0 8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#35465a}
.bs-sheet input{border:0;border-radius:0;min-height:32px;height:32px;padding:4px 8px;background:transparent;width:100%;font-size:12px}.bs-sheet td[data-col=bidAmount] input{text-align:right}
.bs-linkbox{display:flex;align-items:center}.bs-linkbox input{flex:1;min-width:0}.bs-sheet .bs-open{padding:0 8px;text-decoration:none}
.bs-sheet tr.bs-flash td{background-color:#fff3bf}.bs-next{font-size:15px;color:var(--ink)}.bs-next strong{font-size:18px}
@media(max-width:720px){.bid-views{margin-left:0}}
/* Sheets (sheets.js, SHEETS-01): every list as a spreadsheet, and who is on it (grid.js). List | Sheet beside the people on
   the list; the sheet scrolls in its own box both ways (the page never sideways, on a phone too), its header and first column
   staying in view; dense rows, typed cells white, worked-out and read-only cells grey; each other person's selected cell
   outlined in their color with their initials (✎ while they type in it). */
.sheet-bar{display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px;margin:0 0 10px}
.sheet-views{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fff}.sheet-views button{border:0;border-radius:0;padding:6px 14px;min-height:32px;font-weight:500;color:var(--muted)}.sheet-views button.active{background:#e8f5fb;color:#117da8;font-weight:650}
.xl-here{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;margin:0;font-size:12.5px;color:var(--ink);line-height:1.4}.xl-here:empty{display:none}
.xl-faces{display:inline-flex;flex-wrap:wrap;gap:2px}.xl-face{display:inline-grid;place-items:center;min-width:24px;height:24px;padding:0 5px;border-radius:12px;background:var(--co,#5d6d7e);color:#fff;font-size:10.5px;font-weight:700;letter-spacing:.02em}.xl-face.xl-face-more{background:#5d6d7e}
.sheet-panel{margin-bottom:6px}.sheet-wrap{overflow:auto;max-height:calc(100vh - var(--band,0px) - var(--ca-h,0px) - 150px);min-height:96px;overscroll-behavior:contain}
table.sheet{table-layout:fixed;width:max-content;min-width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px}
table.sheet col.sw-xs{width:76px}table.sheet col.sw-s{width:108px}table.sheet col.sw-m{width:156px}table.sheet col.sw-l{width:216px}table.sheet col.sw-xl{width:300px}
.main .sheet-wrap table.sheet th,table.sheet th{position:sticky;top:0;z-index:3;padding:0;height:30px;background:#f3f6f9;border-bottom:1px solid #d5dde6;border-right:1px solid #e4e9ef;color:#4a5a6b}
table.sheet th .th-sort{display:block;width:100%;height:30px;min-height:30px;border:0;border-radius:0;background:none;padding:0 8px;text-align:left;font-size:12px;font-weight:650;color:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}table.sheet th .th-sort:hover{background:#e8eef4}table.sheet th.sorted-by{color:#117da8}
table.sheet td{height:27px;max-width:none;padding:0;border-top:0;border-bottom:1px solid #edf0f4;border-right:1px solid #f1f3f6;background:#fff;white-space:nowrap;overflow:hidden;vertical-align:middle}
table.sheet tbody tr:hover td{background-color:#f7fbfd}
table.sheet th:first-child,table.sheet td:first-child{position:sticky;left:0;z-index:2;box-shadow:inset -1px 0 0 #d5dde6}.main .sheet-wrap table.sheet th:first-child,table.sheet th:first-child{z-index:4}
table.sheet td.sh-ro{background:#f7f9fb;color:#4a5a6b}table.sheet td.sh-ro .sh-t{cursor:default}
table.sheet .sh-t{display:block;padding:0 8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
table.sheet .sh-box{display:flex;align-items:center;height:26px}
table.sheet input[data-sh]{flex:1;min-width:0;width:100%;height:26px;min-height:26px;border:0;border-radius:0;padding:0 8px;background:transparent;font:inherit;color:var(--ink)}
table.sheet td.r input[data-sh],table.sheet td.r .sh-t{text-align:right;font-variant-numeric:tabular-nums}
table.sheet .sh-go{flex:none;min-height:0;height:22px;margin-right:2px;padding:0 6px;border:0;border-radius:4px;background:none;color:var(--accent);font-size:12px;opacity:.55}table.sheet tr:hover .sh-go,table.sheet .sh-go:focus{opacity:1}
table.sheet .sh-open{display:block;width:100%;min-height:0;height:26px;padding:0 8px;text-align:left;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
table.sheet tr.sh-new td{background:#fbfdfe}table.sheet tr.sh-new input::placeholder{color:#8a9aab;font-weight:600}
table.sheet tr.sh-locked td{color:#6b7a8a}
.main table.sheet td{scroll-margin:32px 8px 4px 160px}
.sh-hint{margin:4px 2px 16px;font-size:11.5px}.sh-status{font-weight:600;color:#35465a}.table-panel>.sheet-zone>:is(.sheet-bar,.sh-hint){margin-left:16px;margin-right:16px}
table.sheet.sheet-ro td{padding:0 8px;height:27px;overflow:hidden;text-overflow:ellipsis}table.sheet.sheet-ro td :is(strong,small){display:inline;margin:0 6px 0 0}table.sheet.sheet-ro td .pill{padding:2px 7px}
table.sheet.sheet-ro td button.link{min-height:0;padding:0;font-weight:600}
table.xl td.xl-co{outline:2px solid var(--co);outline-offset:-2px}table.xl td.xl-co.xl-co-e{outline-style:dashed;background-image:linear-gradient(color-mix(in srgb,var(--co) 9%,transparent),color-mix(in srgb,var(--co) 9%,transparent))}
table.xl td.xl-co:not(.xl-fh)::after{content:attr(data-who);position:absolute;top:0;right:0;z-index:3;padding:2px 3px;border-radius:0 0 0 4px;background:var(--co);color:#fff;font-size:9px;font-weight:700;line-height:1;pointer-events:none;white-space:nowrap}
table.sheet td.xl-co:first-child{position:sticky}
@media(max-width:720px){.sheet-wrap{max-height:calc(100vh - var(--band,0px) - 190px)}table.sheet col.sw-l,table.sheet col.sw-xl{width:190px}.sheet-views button{min-height:36px}
 table.sheet th .th-sort{min-height:30px}table.sheet .sh-go,table.sheet .sh-open{min-height:0}.main table.sheet td{scroll-margin-left:110px}}
@media(pointer:coarse){table.sheet td{height:36px}table.sheet .sh-box{height:35px}table.sheet input[data-sh]{height:35px;min-height:35px;font-size:16px}}
@media print{.sheet-bar{display:none}.sheet-wrap{max-height:none;overflow:visible}}
.tax-who{border:0;padding:0;margin:0 0 12px;display:grid;gap:6px}.tax-who input[type=radio]{width:18px;min-height:18px;height:18px;flex:none;padding:0;margin:0;accent-color:var(--accent)}.tax-who legend{font-size:12px;color:#566679;margin-bottom:6px}.tax-who .chips{margin-left:26px}
.prop-item{border-top:1px solid var(--line);padding-top:10px}.prop-item-head{display:flex;align-items:flex-end;gap:12px}.prop-item-head .field{flex:1;margin:0}.prop-item-head strong{padding-bottom:12px;white-space:nowrap}.field[hidden],.remember[hidden],.prop-item[hidden]{display:none}
/* Spreadsheet grids (grid.js), as in Excel: a green box on the active cell, a light fill and a line around a range,
   the header and row of the active cell picked out, the formula bar above an editable grid and the status bar below. */
:root{--xl:#217346;--xl-fill:#21734621;--xl-row:#2173460b;--xl-bad:#b42318}
table.xl td{position:relative;scroll-margin:44px 12px 8px}table.xl th{z-index:3}
table.xl.xl-on td:focus,table.xl.xl-on td :focus,table.xl.xl-on td :focus-visible{outline:none}
table.xl td.xl-t{--xt:2px}table.xl td.xl-b{--xb:2px}table.xl td.xl-l{--xL:2px}table.xl td.xl-r{--xR:2px}table.xl.xl-many td.xl-a{--xa:1px}
table.xl.xl-on td.xl-s{box-shadow:inset 0 var(--xt,0px) 0 0 var(--xl),inset 0 calc(-1*var(--xb,0px)) 0 0 var(--xl),inset var(--xL,0px) 0 0 0 var(--xl),inset calc(-1*var(--xR,0px)) 0 0 0 var(--xl),inset 0 0 0 var(--xa,0px) var(--xl)}
table.xl.xl-on tr.xl-hr>td{background-image:linear-gradient(var(--xl-row),var(--xl-row))}
table.xl.xl-on.xl-many td.xl-s:not(.xl-a),table.xl.xl-on.xl-many td.xl-s:not(.xl-a) :is(input:not([type=checkbox]),select,textarea){background-image:linear-gradient(var(--xl-fill),var(--xl-fill))}
table.xl.xl-on th.xl-hc{background-image:linear-gradient(var(--xl-fill),var(--xl-fill));box-shadow:inset 0 -2px 0 var(--xl);color:#185c37}
table.xl.xl-on td.xl-a:not(.xl-ed) :is(input,textarea){caret-color:transparent}
.warehouse table.xl.xl-on td.xl-a:not(.xl-ed) .wf-cell:focus{border-color:transparent;box-shadow:none}
.branch-table.xl td,.checklist-table.xl td{padding:6px 8px}.branch-table td[data-col=name] input{min-width:150px}.branch-table td[data-col=state] input{min-width:52px}.branch-table td[data-col=code] input,.branch-table td[data-col=zip] input{min-width:72px}
table.xl td.xl-f:not([data-xl-err])::before{content:'';position:absolute;left:var(--xl-x,0);top:var(--xl-y,0);border-style:solid;border-width:6px 6px 0 0;border-color:var(--xl) transparent transparent;border-top-left-radius:3px;pointer-events:none}
table.xl td[data-xl-err] :is(input,select){color:transparent}
table.xl td[data-xl-err]::before{content:attr(data-xl-err);position:absolute;left:var(--xl-x,0);top:var(--xl-y,0);width:var(--xl-w,100%);height:var(--xl-h,100%);display:flex;align-items:center;justify-content:center;color:var(--xl-bad);font-weight:650;pointer-events:none}
table.xl.xl-on td.xl-fh::after{content:'';position:absolute;right:-4px;bottom:-4px;width:7px;height:7px;background:var(--xl);border:1px solid #fff;z-index:2;cursor:crosshair}
table.xl td.xl-fp{outline:1px dashed var(--xl);outline-offset:-3px}
table.xl td.xl-rf{outline:2px dashed var(--rf);outline-offset:-3px}.xl-rf0{--rf:#2f6fcf}.xl-rf1{--rf:#c0392b}.xl-rf2{--rf:#7b3fb3}.xl-rf3{--rf:#b7791f}
.xl-bar{display:flex;align-items:stretch;min-height:30px;border:1px solid var(--line);border-radius:8px 8px 0 0;background:#fbfcfd;font-size:12px}
.xl-bar .xl-name{flex:0 0 76px;display:flex;align-items:center;justify-content:center;border-right:1px solid var(--line);font-weight:600;color:#35465a;font-variant-numeric:tabular-nums}
.xl-bar .xl-fx{display:flex;align-items:center;padding:0 10px;border-right:1px solid var(--line);color:var(--muted);font:italic 13px Georgia,'Times New Roman',serif}
.xl-bar .xl-fbar{flex:1;min-width:0;min-height:28px;border:0;border-radius:0;padding:4px 10px;background:transparent}
.xl-bar .xl-fbar:focus{outline:none;background:#fff;box-shadow:inset 0 -2px 0 var(--xl)}.xl-bar .xl-fbar[readonly]{color:var(--muted)}
.xl-bar .xl-err{display:flex;align-items:center;padding:0 10px;color:var(--xl-bad);font-weight:650}.xl-bar .xl-err:empty{display:none}
.xl-status{display:flex;align-items:center;gap:14px;min-height:24px;padding:3px 12px;border-top:1px solid var(--line);background:#fbfcfd;font-size:11px;color:var(--muted)}
.xl-status[hidden]{display:none}.xl-status .xl-name{font-weight:600;color:#35465a;font-variant-numeric:tabular-nums}
.xl-status .xl-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xl-status .xl-agg{margin-left:auto;white-space:pre;font-variant-numeric:tabular-nums;color:#35465a}
.xl-status:not(.ro) .xl-name,.xl-status:not(.ro) .xl-text,.xl-status.ro .xl-mode{display:none}
@media(max-width:720px){.xl-bar .xl-name{flex-basis:54px}.xl-status .xl-agg{white-space:normal}}
@media print{.xl-bar,.xl-status{display:none!important}}
/* the grid's right-click menu (grid.js): a screen's own items for the rows under the pointer */
.xl-menu{position:fixed;z-index:55;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 14px 36px #1d293938;padding:6px;min-width:220px;max-width:calc(100vw - 16px);display:flex;flex-direction:column}
.xl-menu-head{margin:4px 10px 6px;font-size:11px;font-weight:650;color:#7a8b9e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:320px}
.xl-menu .xl-mi{border:0;background:none;text-align:left;border-radius:6px;padding:9px 12px;font-weight:500;min-height:38px}.xl-menu .xl-mi:hover,.xl-menu .xl-mi:focus-visible{background:#eaf4ee;outline:none}.xl-menu .xl-mi.danger{color:#a53032}
.xl-menu-sep{height:1px;background:var(--line);margin:4px 6px}
@media (hover:none){table.xl-menu-on td{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}}  /* a long press opens the menu, not the phone's text tools */
@media print{.xl-menu{display:none!important}}
/* the same menu on rows, cards, pins and the plan (ctxmenu.js): long ones scroll inside it; a long press opens it, not the phone's text tools */
.ctx-menu{max-height:calc(100vh - 16px);overflow-y:auto;overscroll-behavior:contain}
@media (hover:none){[data-menu]{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}}
/* Copy and paste, and the keys (clipboard.js): a menu item's key at its right, the rows and cards picked, the toast's Undo,
   the preview, and the windows for the keys and Go to */
.xl-menu .xl-mi[data-key]{display:flex;align-items:center;gap:18px}.xl-menu .xl-mi[data-key]::after{content:attr(data-key);margin-left:auto;font-size:11px;font-weight:600;color:#7a8b9e;white-space:nowrap}@media (hover:none){.xl-menu .xl-mi[data-key]::after{display:none}}  /* a phone or tablet without a mouse: the menu is the way */
.clip-on:not(tr),tr.clip-on>td{background:#eaf4ee!important}.clip-on:not(tr),tr.clip-on>td:first-child{box-shadow:inset 3px 0 0 #2f9e44}.sg-row.clip-on{outline:2px solid #2f9e44;outline-offset:-2px}
.clip-hold{position:fixed;left:-9999px;top:0;width:1px;height:1px;opacity:0}.sidebar-foot .keys-link{padding:0;font-size:inherit}@media (hover:none){.sidebar-foot .keys-link{display:none}}.clip-cols td:last-child{width:48%}.clip-cols select{width:100%;min-width:0}.clip-cols small{display:block;overflow-wrap:anywhere}
#toast .toast-undo{pointer-events:auto;margin-left:12px;background:transparent;color:#9ee6b0;border:1px solid #9ee6b0;border-radius:6px;padding:3px 12px;font-weight:650}#toast .toast-undo:hover{background:#ffffff1a}
.clip-ask{font-size:15px;margin:4px 0 14px}.clip-list{margin:8px 0 12px;padding-left:22px;max-height:40vh;overflow:auto}.clip-list li{margin:4px 0}.clip-notes{margin:4px 0;padding-left:18px}.clip-notes li{margin:2px 0}
.keys-overlay{position:fixed;inset:0;z-index:58;background:#0b182966;display:flex;align-items:flex-start;justify-content:center;padding:6vh 16px 16px;overflow:auto}
.keys-box{background:#fff;border-radius:12px;box-shadow:0 24px 60px #0b182955;width:min(760px,100%);padding:18px 22px;max-height:88vh;overflow:auto}.keys-jump .keys-box{width:min(560px,100%)}
.keys-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.keys-head h2{margin:0;font-size:18px}
.keys-body{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 24px}.keys-part h3{font-size:13px;margin:12px 0 6px;color:#46566a}.keys-part dl{margin:0}
.keys-part dl div{display:grid;grid-template-columns:minmax(110px,40%) 1fr;gap:10px;padding:5px 0;border-top:1px solid var(--line)}.keys-part dt{white-space:normal}.keys-part dd{margin:0;color:#46566a}
.keys-part kbd{display:inline-block;font:600 11px/1.3 Inter,Geist,system-ui,sans-serif;border:1px solid #c3ccd8;border-bottom-width:2px;border-radius:4px;padding:2px 6px;background:#fff;color:#33475b;white-space:nowrap;margin:1px 0}.keys-foot{margin:14px 0 0}
.keys-q{width:100%;font-size:16px;padding:10px 12px;border:1px solid #c3ccd8;border-radius:8px}.keys-hits{list-style:none;margin:10px 0 0;padding:0}
.keys-hits .keys-hit{display:flex;flex-direction:column;align-items:flex-start;width:100%;text-align:left;border:0;background:none;border-radius:8px;padding:8px 10px}.keys-hits .keys-hit small{color:#647386}
.keys-hits .keys-hit.on,.keys-hits .keys-hit:hover,.keys-hits .keys-hit:focus-visible{background:#eaf4ee;outline:none}.keys-hits li.muted{padding:8px 10px}
@media(max-width:720px){.keys-body{grid-template-columns:minmax(0,1fr)}.keys-overlay{padding:16px 8px}.keys-box{padding:14px}}
@media print{.keys-overlay{display:none!important}}
/* dropping pins (field/viewer.js): the cross while a run or a move waits for its spot, the grab hand only while the sheet is dragged, and
   on a mouse the ghost pin with the next tag under the pointer; a locked pin's mark on the plan and in its panel (field/pins.js) */
.viewer.dropping .viewer-stage,.viewer.dropping .pins .pin{cursor:crosshair}.viewer.panning .viewer-stage,.viewer.panning .pins .pin{cursor:grabbing}
/* The ghost while setting a pin is small (Jordan, October 1, 2026: "while setting a pin, make it smaller"): a dot on the
   exact spot and the tag as a small chip above and to the right of it, so neither covers what is being pinned. */
.ghost-pin{position:absolute;left:0;top:0;transform-origin:0 0;transform:scale(var(--inv,1)) translate(8px,calc(-100% - 8px));min-width:18px;height:18px;padding:0 5px;border-radius:9px;border:1.5px dashed white;background:var(--s-measure);color:white;font-size:10px;font-weight:700;line-height:15px;text-align:center;white-space:nowrap;opacity:.9;box-shadow:0 1px 6px #0005;pointer-events:none;z-index:11}
.ghost-pin::before{content:'';position:absolute;left:-15px;top:calc(100% + 1.5px);width:10px;height:10px;border-radius:50%;border:2px solid white;background:inherit;box-shadow:0 0 0 1px #0007}
.ghost-pin[hidden],.viewer.panning .ghost-pin{display:none}.ghost-pin.type-issue{background:#e07b24;border-radius:4px}.ghost-pin.type-punch{background:#9aa6b2;border-radius:2px}.ghost-pin.type-photo{background:#0e8c8c;border-radius:4px 15px 15px 4px}.ghost-pin.type-rfi{background:#172b42}.ghost-pin.moving{background:#ffc933;color:#172b42;border-color:#172b42}
.viewer.ghosting .crosshair{display:none}
.pins .pin .pin-lock,.lock-glyph{position:absolute;left:-7px;top:-7px;width:14px;height:14px;border-radius:50%;background:#172b42;box-shadow:0 0 0 1.5px white;pointer-events:none}
.pin-lock::before,.lock-glyph::before{content:'';position:absolute;left:3.5px;top:1.5px;width:4px;height:4px;border:1.5px solid white;border-bottom:0;border-radius:3px 3px 0 0}
.pin-lock::after,.lock-glyph::after{content:'';position:absolute;left:3.5px;top:6px;width:7px;height:5px;border-radius:1px;background:white}
.viewer.compact .pins .pin .pin-lock{left:-6px;top:-6px}.pins .pin.picked .pin-lock{box-shadow:0 0 0 1.5px var(--accent)}
.pin-locked{display:flex;align-items:center;gap:8px;margin:0 0 10px;font-size:12px;color:#3d4b5c}.pin-locked .lock-glyph{position:relative;left:0;top:0;flex:none}.pin-locked button{padding:2px 8px;min-height:0}
/* Suggested pins (PINSUGGEST-01, field/pins.js): a dashed ? that counts nowhere until the office confirms it; a declined
   one greyed, on the plan only when its key is shown. Its panel and the Plans tab's Suggestions read in one column on a phone. */
.pins .sugg{position:absolute;transform:translate(-50%,-50%) scale(var(--inv,1));width:30px;height:30px;min-height:0;padding:0;border-radius:50%;border:2.5px dashed #b54708;background:#fffaebe6;color:#b54708;font-size:16px;font-weight:800;line-height:24px;text-align:center;box-shadow:0 1px 5px #0004;z-index:2}
.pins .sugg::after{content:'';position:absolute;inset:-9px}.pins .sugg.off{display:none}.pins .sugg.flash{animation:pin-flash .5s ease-in-out 4}
.pins .sugg.declined{border-color:#8a97a6;color:#5d6b7c;background:#f2f4f7e6;opacity:.8}
.viewer.compact .pins .sugg{width:18px;height:18px;font-size:11px;line-height:13px;border-width:2px}
@media(pointer:coarse){.viewer.compact .pins .sugg{width:22px;height:22px;line-height:17px}.pins .sugg::after{inset:-12px}}
.ghost-pin.type-suggest{background:#fffaeb;color:#b54708;border-color:#b54708;border-radius:50%;min-width:18px;padding:0;font-size:12px}
.sw.type-suggested{background:#fffaeb;box-shadow:inset 0 0 0 2px #b54708}.sw.type-declined{background:#f2f4f7;box-shadow:inset 0 0 0 2px #8a97a6}
.pp-dot.sugg-dot{display:grid;place-items:center;background:#fffaeb;border:2.5px dashed #b54708;color:#b54708;font-size:13px;font-weight:800;box-shadow:none}.pp-dot.sugg-dot.declined{border-color:#8a97a6;color:#5d6b7c;background:#f2f4f7}
.sugg-mark{display:inline-grid;place-items:center;flex:none;width:22px;height:22px;border-radius:50%;border:2px dashed #b54708;background:#fffaeb;color:#b54708;font-size:12px;font-weight:800;line-height:1;vertical-align:middle}.sugg-mark.declined{border-color:#8a97a6;color:#5d6b7c;background:#f2f4f7}
.sugg-state{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;margin:0 0 10px}.sugg-state small{color:#3d4b5c;line-height:1.45;min-width:0;overflow-wrap:anywhere}
.sugg-sheet>p.muted{margin:0 0 14px}.sugg-sheet .sugg-facts{margin:0 0 8px}.sugg-links{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 8px}.sugg-actions{flex-wrap:wrap;gap:6px;margin:4px 0 10px}.sugg-actions .sugg-who{flex-basis:100%;margin:0}
.sugg-thread{display:grid;gap:0}.sugg-msg{display:flex;gap:8px;padding:8px 0;border-top:1px solid var(--line);min-width:0}.sugg-msg>div{min-width:0}.sugg-msg p{margin:2px 0 0;white-space:pre-wrap;overflow-wrap:anywhere}.sugg-msg.mine .avatar{background:#e8f5ee}.sugg-more{margin:6px 0}
.sugg-reply{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:6px;align-items:end;margin-top:8px}.sugg-reply textarea{min-height:44px;width:100%}.sugg-reply .preview,.sugg-reply .error{grid-column:1/-1}
.sugg-onpin{border:1px dashed #b54708;border-radius:8px;padding:8px 10px;margin-bottom:10px;background:#fffcf5}.sugg-onpin p{margin:0 0 6px}
.sugg-list .sugg-card{border:1px solid var(--line);border-radius:10px;padding:12px;margin:10px 0;background:white;min-width:0}.sugg-list .sugg-card.declined{background:#f8f9fb;color:#5d6b7c}
.sugg-card header{display:flex;gap:10px;align-items:flex-start;margin-bottom:8px}.sugg-card header>div{flex:1;min-width:0}.sugg-card header strong{overflow-wrap:anywhere}.sugg-card header small{display:block;color:var(--muted)}
.sugg-group{margin:18px 0 4px;font-size:14px}.sugg-group em,.pp-seg .pp-count{font-style:normal}.sugg-group em{color:var(--muted);margin-left:4px}
.pp-seg .pp-count{display:inline-block;min-width:18px;margin-left:5px;padding:0 5px;border-radius:9px;background:#b54708;color:white;font-size:11px;line-height:18px}
@media(max-width:720px){.pp-seg button{white-space:nowrap}.pp-seg button:has(.pp-count){flex:1.5 1 auto}}  /* the count stays beside Suggestions on a phone */
/* the pick list (grid.js): ▾ at the right edge of a cell with choices (the active one, or any under the mouse), and the choices under it */
table.xl td.xl-pk::before,table.xl td:has(input[data-list]:not([disabled]):not([readonly])):hover::before{content:'▾';position:absolute;right:4px;top:50%;margin-top:-9px;width:18px;height:18px;display:grid;place-items:center;border-radius:4px;background:#e9eef3;color:#35465a;font-size:11px;line-height:1;pointer-events:none;z-index:2}
table.xl td.xl-pk::before{background:var(--xl);color:#fff}table.xl td.xl-pk input[data-list],table.xl td:hover input[data-list]:not([disabled]):not([readonly]){padding-right:24px}
.xl-pick{position:fixed;z-index:56;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 12px 30px #1d293933;padding:4px;overflow-y:auto;overscroll-behavior:contain;max-height:300px;font-size:13px}
.xl-pick-opt{padding:6px 10px;border-radius:6px;cursor:pointer;line-height:1.3}.xl-pick-opt span{display:block;font-weight:550;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.xl-pick-opt small{display:block;margin:1px 0 0;color:var(--muted);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xl-pick-opt.on{background:#e3f0e8;box-shadow:inset 3px 0 0 var(--xl)}
.xl-pick-more,.xl-pick-none{margin:0;padding:8px 10px;font-size:12px;color:var(--muted)}
@media(hover:none){.xl-pick-opt{padding:9px 12px}}@media print{.xl-pick{display:none!important}}

/* The text editor (richtext.js) and rich text as saved */
.rich{display:flex;flex-direction:column;min-width:0}.rich-label{font-size:12px;color:#566679;margin-bottom:7px}.req{color:#a53032}
.rich-bar{display:flex;gap:2px;align-items:center;flex-wrap:wrap;border:1px solid #ced7e1;border-bottom:0;border-radius:8px 8px 0 0;padding:4px;background:#f7f9fb;position:sticky;top:-28px;z-index:3}
.rich-bar button,.rich-bar select{flex:none;width:auto;min-height:34px;padding:5px 8px;border:0;border-radius:6px;background:transparent;color:#3d4b5c;font-weight:600;white-space:nowrap}
.rich-bar select{padding:5px 2px;font-weight:500}.rich-bar button:hover{background:#e8f1f6}.rich-bar button[aria-pressed=true]{background:#d6eaf5;color:#0f6f96}.rich-bar button:disabled,.rich-bar select:disabled{opacity:.4}
.rich-link{display:flex;gap:6px;flex-wrap:wrap;align-items:center;border:1px solid #ced7e1;border-bottom:0;padding:6px;background:#f7f9fb}.rich-link[hidden]{display:none}.rich-link input{flex:1;min-width:160px;min-height:36px}.rich-link .error{flex-basis:100%}
.rich-area,.rich-preview{min-height:132px;border:1px solid #ced7e1;border-radius:0 0 8px 8px;padding:10px 12px;background:white;line-height:1.55;overflow-wrap:anywhere;position:relative}
.rich-area:focus{outline:0;border-color:var(--accent);box-shadow:0 0 0 3px #8bd2ef66}.rich-area.rich-empty::before{content:attr(data-placeholder);position:absolute;left:12px;top:10px;right:12px;color:#8a97a6;pointer-events:none}
.rich-preview{background:#fbfcfd;border-style:dashed}.rich-none{color:var(--muted)}
.rich-view,.rich-area{font-size:13px;color:var(--ink)}.rich-view p,.rich-area p,.rich-area div{margin:0 0 .55em;color:inherit;line-height:1.55}.rich-view h3,.rich-area h3{font-size:16px;margin:.8em 0 .35em}.rich-view h4,.rich-area h4{font-size:14px;margin:.7em 0 .3em}
.rich-view ul,.rich-view ol,.rich-area ul,.rich-area ol{margin:0 0 .55em;padding-left:22px}.rich-view li,.rich-area li{margin:.15em 0}.rich-view a,.rich-area a{color:#167fa9;text-decoration:underline;overflow-wrap:anywhere}
.rich-view>:first-child,.rich-area>:first-child{margin-top:0}.rich-view>:last-child,.rich-area>:last-child{margin-bottom:0}

/* Daily logs (dailylogs.js): the tab, the side panel and the form */
.dl-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:0 0 14px}.dl-bar input,.dl-bar select{width:auto;min-height:38px}.dl-bar #dl-search{flex:1 1 160px}.dl-bar .dl-new{margin-left:auto}
.dl-views{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:white}.dl-views button{border:0;border-radius:0;padding:8px 13px;font-weight:500;color:#526174}.dl-views button.active{background:#e8f5fb;color:#117da8;font-weight:650}
.dl-count{margin:0 0 10px;font-size:12px}.dl-day{margin-bottom:18px}.dl-day>h3{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 8px}
.dl-log{background:white;border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin-bottom:10px;cursor:pointer}.dl-log:hover{border-color:#b5dcec}
.dl-log header{display:flex;gap:10px;align-items:center}.dl-who{flex:1;min-width:0}.dl-who small{display:block}.dl-who button.link{padding:0;min-height:0;border:0;background:none;text-align:left}
.dl-jc{font-size:12px;color:#566679;white-space:nowrap;display:inline-flex;align-items:center;gap:5px}
.dl-mark{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;font-size:12px;font-weight:800;color:white;line-height:1}.dl-mark.yes{background:#2f9a62}.dl-mark.no{background:#c8454a}
.dl-log .dl-notes{margin:10px 0 4px;max-height:10.5em;overflow:hidden}
.dl-wx{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12px;color:#526174;margin:8px 0}
.dl-shots{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 2px}.dl-shots .shot{width:76px;height:76px}.dl-panel .dl-shots .shot{width:92px;height:92px}
.shot.dl-more{display:grid;place-items:center;font-size:12px;font-weight:700;background:#edf2f6;color:#3d4b5c;min-height:0}.dl-nophoto{display:grid;place-items:center;color:var(--muted)}
.dl-meta{font-size:12px;color:var(--muted);margin:8px 0 0}
.dl-cal-head{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:8px}.dl-cal-head strong{font-size:15px;min-width:150px;text-align:center;white-space:nowrap}.dl-cal-head .muted{margin-left:auto;font-size:12px}
.dl-cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border-top:1px solid var(--line);border-left:1px solid var(--line);background:white;border-radius:8px;overflow:hidden;margin-bottom:14px}
.dl-wd{padding:6px 4px;font-size:11px;color:var(--muted);text-align:center;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#f7f9fb}
.dl-cell{min-height:98px;min-width:0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:4px;display:flex;flex-direction:column;gap:3px}.dl-cell.out{background:#fafbfc}.dl-cell.out .dl-daynum{color:#a2adb9}
.dl-daynum{align-self:flex-start;display:flex;align-items:center;gap:4px;border:0;background:transparent;padding:2px 7px;min-height:0;border-radius:12px;font-weight:600;font-size:12px}.dl-cell.today .dl-daynum{background:var(--accent);color:white}.dl-cell.picked{box-shadow:inset 0 0 0 2px var(--accent)}
.dl-dot{display:none;min-width:16px;height:16px;border-radius:8px;background:#2494c4;color:white;font-size:10px;line-height:16px;text-align:center;padding:0 4px}
.dl-chip{display:block;width:100%;text-align:left;border:0;border-radius:4px;background:#e8f5fb;color:#0f6f96;font-size:11px;font-weight:500;padding:3px 5px;min-height:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dl-chip.more{background:transparent;color:var(--muted)}
.dl-panel .dl-author{display:flex;gap:10px;align-items:center}.dl-author small{display:block}.dl-crumb{font-size:12px;color:var(--muted);margin:0}.dl-crumb button.link{padding:0;min-height:0;border:0;background:none;font-size:12px}
.dl-date{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:16px 0 2px}.dl-date h3{margin:0;font-size:17px}.dl-date button{margin-left:auto}
.dl-panel .dl-notes{margin:10px 0}.dl-line{display:flex;gap:8px;align-items:center;padding:10px 0;border-top:1px solid var(--line);margin:12px 0 0}.dl-line>span:first-child{color:var(--muted)}
.dl-legacy{margin:8px 0 0}.dl-sec{border-top:1px solid var(--line);padding:14px 0;margin:0}.dl-sec h4{margin:0 0 8px;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.dl-sec h4 small{text-transform:none;letter-spacing:0}
.dl-sec-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.dl-sec-head h4{margin:0}.dl-internal .rich-view{background:#fffaf0;border:1px solid #f1e2bf;border-radius:8px;padding:10px 12px}
.dl-people{list-style:none;padding:0;margin:6px 0}.dl-people li{display:flex;gap:10px;align-items:center;padding:6px 0}.dl-people li>span:nth-child(2){flex:1}.dl-people small{display:block}.dl-x{padding:4px 8px;color:var(--muted)}
.dl-small{font-size:11px;margin:6px 0 0}.dl-share,.dl-files-form{display:grid;gap:8px;margin-top:8px}.dl-docs{margin:8px 0}
.dl-message{display:grid;gap:6px;margin-top:10px}.dl-to{font-size:12px;color:var(--muted)}.dl-panel .wall-comment{padding:6px 0}
.dl-activity{list-style:none;padding:0;margin:0}.dl-activity li{padding:7px 0;border-bottom:1px solid #eef2f5}.dl-activity li:last-child{border:0}.dl-activity small{display:block}
.dl-foot{border-top:1px solid var(--line);padding-top:14px}.dl-notice{border-left:3px solid var(--accent)}
.dl-form{display:flex;flex-direction:column;gap:16px}.dl-form fieldset{border:1px solid var(--line);border-radius:10px;padding:10px 12px 12px;margin:0;min-width:0}.dl-form legend{font-size:12px;color:#566679;padding:0 4px}
.dl-when{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}.dl-when .field{flex:0 1 190px}.dl-when .chips{padding-bottom:4px}
.dl-sky{margin-bottom:10px}.dl-sky .chip{padding:8px 12px;font-size:13px}.dl-wx-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}.dl-wx-grid .wide{grid-column:1/-1}.dl-weather>small{display:block;margin-top:8px;font-size:11px}
.dl-jc-pick{display:flex;gap:10px;flex-wrap:wrap}.dl-jc-pick legend{margin-bottom:2px}.dl-seg{flex:1 1 120px;display:flex;align-items:center;justify-content:center;gap:8px;border:1px solid #ced7e1;border-radius:10px;padding:12px;font-weight:650;font-size:14px;cursor:pointer;background:white}
.dl-seg input{width:18px;height:18px;min-height:18px;margin:0}.dl-seg.yes:has(input:checked){border-color:#2f9a62;background:#eaf7ef;color:#1f6d44}.dl-seg.no:has(input:checked){border-color:#c8454a;background:#fdeeee;color:#a53032}
.dl-add{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:8px 0 4px}.dl-add .camera{margin:0;padding:14px 8px;font-size:13px;text-align:center}.dl-chosen{font-size:12px;margin:4px 0 0}
.dl-keep{position:relative;display:inline-block;cursor:pointer}.dl-keep img,.dl-keep .dl-nophoto{width:76px;height:76px;object-fit:cover;border-radius:6px;display:block;border:1px solid var(--line)}.dl-keep input{position:absolute;top:4px;right:4px;margin:0;background:white}
.dl-keep:has(input:not(:checked)) img{opacity:.35}.dl-keep-docs{display:grid;gap:2px;margin:6px 0}.dl-pick-photos summary{margin:10px 0 4px}
.dl-pick{display:grid;gap:0;max-height:230px;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:2px 10px}.dl-pick small{margin-left:4px}.dl-switch{display:flex;align-items:center;gap:8px;font-weight:600;margin:10px 0 2px}.dl-share-pick>small{display:block;font-size:11px}
@media(max-width:720px){#drawer:has(.dl-form),#drawer:has(.dl-panel){padding:18px 16px}.rich-bar{top:-18px}.dl-bar .dl-new{order:-1;flex:1 1 100%;margin:0}.dl-bar #dl-search{flex:1 1 100%}.dl-bar select{flex:1 1 40%}
 .dl-wx-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.dl-log{padding:12px}.dl-shots .shot{width:64px;height:64px}.dl-cell{min-height:52px;padding:2px;align-items:center}.dl-chip{display:none}.dl-daynum{align-self:center;flex-direction:column;gap:2px;padding:4px 2px;width:100%;justify-content:center}.dl-dot{display:block}.dl-cal-head strong{min-width:0;flex:1}}
/* The mockup database (mockup.py): server.py puts this band first in the page on a mockup, so every screen, the sign-in too, says so. The
   side bar, drawer and plan viewer start below it. */
body.mockup-db{--band:28px}
.mockup-band{position:sticky;top:0;z-index:60;height:var(--band);line-height:var(--band);padding:0 12px;text-align:center;font-size:12px;font-weight:700;letter-spacing:.02em;color:#3d2c00;background:repeating-linear-gradient(135deg,#ffd24a 0 16px,#ffdd73 16px 32px);border-bottom:1px solid #d9a400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
body.mockup-db .sidebar{top:var(--band);height:calc(100vh - var(--band))}
body.mockup-db #drawer{top:var(--band);height:calc(100vh - var(--band))}
body.mockup-db .viewer{top:var(--band)}
@media(max-width:720px){body.mockup-db.viewer-open #drawer{top:auto;height:66vh}}
@media print{.mockup-band{position:static;background:none;border:1px solid #000}}
.est-award-choice{border:0;border-top:1px solid var(--line);margin:0;padding:0;min-width:0}.est-award-choice legend{font-size:12px;color:var(--muted);padding:8px 10px 2px}
/* Settings → Catalog (catalog.js): lists edited in place */
.cat-table td{padding:5px 6px;max-width:none;vertical-align:top}.cat-table th{padding:8px 6px}.cat-table input,.cat-table select{min-height:32px;padding:5px 7px;border-radius:6px}
.cat-table select{width:auto;max-width:230px}.cat-table input.n{width:92px;text-align:right}.cat-table input.c{width:92px}.cat-table td[data-col=name] input{min-width:230px}.cat-table td[data-col=description] input,.cat-table td[data-col=notes] input{min-width:190px}
.cat-table small.cat-warn{color:#946422}.cat-table small.cat-note{color:var(--muted)}.cat-table tr.cat-off td{opacity:.62}.cat-table tr.cat-new td{background:#f7fbfd}.cat-table td.cat-why{min-width:230px;max-width:340px}.cat-filters select{max-width:210px}
@media(max-width:720px){.cat-table td[data-col=name] input{min-width:170px}.cat-filters input{max-width:none}}

/* The job page in tabs and the Customers area (project.js, customers.js). Three columns on a wide screen, two on a
   laptop, one on a phone (the cover, stage and location first); the tab row scrolls sideways on a phone. */
.job-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin:0 0 14px}
.job-head-main{min-width:0}
.job-crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:4px;font-size:11px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
.job-crumbs .link{font-size:11px;letter-spacing:.07em;text-transform:uppercase;color:#117da8;font-weight:650;min-height:0}
.crumb-sep{color:#b3c0cc;margin:0 3px}
.job-title{margin:6px 0 6px;overflow-wrap:anywhere}
.job-sub{display:flex;flex-wrap:wrap;gap:8px;align-items:center;color:var(--ink)}
.job-where{margin:6px 0 0;color:var(--muted);overflow-wrap:anywhere}
.job-buttons{justify-content:flex-end;gap:6px;max-width:780px}
.job-buttons button{padding:7px 11px;font-size:12px}
.job-tabs{margin-bottom:16px;scrollbar-width:thin}.job-tabs .tab-gap{flex:none;width:1px;align-self:stretch;margin:8px 10px;background:var(--line)}
.job-tabs small{background:#edf2f6;border-radius:6px;padding:1px 6px;margin-left:4px;font-size:10px}
.tab-actions{justify-content:flex-end;margin:-6px 0 10px}
.jd{display:grid;grid-template-columns:minmax(250px,1fr) minmax(0,1.45fr) minmax(270px,1fr);gap:16px;align-items:start}
.jd>div{min-width:0}
.job-summary{background:var(--navy);color:#fff;border-radius:var(--radius);padding:10px 18px 12px;margin-bottom:16px}
.sum-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:9px 0;border-bottom:1px solid #ffffff1c}
.sum-row span{color:#dbe4ec;font-size:12px}
.sum-row small{display:block;color:#9fb1c3;font-size:10px;margin-top:2px;line-height:1.4}
.sum-row strong{font-size:14px;white-space:nowrap}
.job-summary .sum-hide{color:#b9c8d6;padding:8px 0 0;min-height:0}
.job-summary-off{margin-bottom:10px}
.job-card-head{display:flex;justify-content:space-between;gap:10px;align-items:baseline;margin-bottom:6px}
.job-card-head strong{font-size:15px}
.jf-text{display:block;width:100%;text-align:left;border:0;background:none;padding:4px 0;font-weight:400;color:var(--muted);line-height:1.5}
.job-fields{padding:4px 16px}
.jf-row{display:grid;grid-template-columns:118px minmax(0,1fr);gap:10px;width:100%;text-align:left;border:0;border-bottom:1px solid var(--line);border-radius:0;background:none;padding:10px 0;font-weight:400;align-items:start}
.jf-row:last-child{border-bottom:0}
button.jf-row:hover{background:#f7fafc}
.jf-label{color:var(--muted);font-size:12px}
.jf-value{white-space:pre-wrap;overflow-wrap:anywhere}
.jf-edit{display:grid;gap:8px}
.jf-edit .actions{gap:6px}
.jd-dates{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:8px}
.jd-dates small{display:block;color:var(--muted);font-size:11px}
.jp-meter{margin-top:10px}
.jp-meter-head{display:flex;justify-content:space-between;gap:8px;font-size:12px;margin-bottom:4px}
.jp-meter-bar{display:block;width:100%;height:8px}
.jp-meter-track{fill:#e7edf3}.jp-meter-fill{fill:var(--accent)}
.access-row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 8px;padding:8px 0;border-bottom:1px solid var(--line)}
.access-row>div:first-child{flex:1 1 160px;min-width:0}
.access-row:last-child{border-bottom:0}
.access-row small{display:block;font-size:11px;line-height:1.4}
.access-row .coming{color:#946422}
.access-row .actions{gap:4px}
.access-row a.button{min-height:32px;padding:6px 9px;font-size:12px;white-space:nowrap}
.job-access .section-label{margin:14px 0 4px}
/* Profiles (profiles.js): an LB person's name as a link to their profile, and the profile in the side panel, one column on a phone. */
button.link.person-link{font-weight:inherit;text-align:inherit;overflow-wrap:anywhere}button.link.person-link:hover{text-decoration:underline}
.dsp-who strong .person-link{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}
.prof-head{display:flex;gap:14px;align-items:center;margin:2px 0 16px}.prof-avatar{width:56px;height:56px;font-size:19px;background:#e3f1f8;color:#16597a;flex:none}
.prof-who{min-width:0}.prof-name{margin:0;font-size:20px;line-height:1.25;overflow-wrap:anywhere}.prof-role{margin:3px 0 0;color:var(--muted)}.prof-who p.muted{margin:3px 0 0}
.prof-reach{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0 0 16px}.prof-reach a.button{justify-content:center;min-height:42px}.prof-none{margin:0 0 16px}
.prof-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0 0 18px}
.prof-card{border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;min-width:0}.prof-card>button{margin-top:8px;padding:6px 0}
.prof-card h3,.prof-jobs h3{margin:0 0 10px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.prof-jobs h3{display:flex;align-items:center;gap:8px}
.prof-dl{margin:0;display:grid;gap:9px}.prof-dl dt{color:var(--muted);font-size:11px}.prof-dl dd{margin:1px 0 0;overflow-wrap:anywhere}
.prof-tiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0 0 6px}
button.prof-tile{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:9px 11px;text-align:left;min-width:0}.prof-tile strong{font-size:18px;line-height:1.1}.prof-tile small{color:var(--muted);font-weight:500;font-size:11px}
button.prof-tile.active{border-color:var(--accent);background:#e8f5fb}
.prof-job{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;padding:9px 0;border-bottom:1px solid var(--line)}.prof-job>div{min-width:0}.prof-job small{display:block;font-size:11px;line-height:1.45;color:var(--muted)}
.prof-job .prof-why{color:var(--ink)}.prof-job .pill{flex:none}.prof-foot{margin-top:14px}
.act-person-row{display:flex;align-items:center;gap:2px;border-radius:8px}.act-person-row button.act-person{flex:1 1 auto;min-width:0}
button.prof-go{flex:none;border:0;background:transparent;padding:5px 4px;min-height:0;font-size:13px;line-height:1;border-radius:8px;opacity:.75}button.prof-go:hover{opacity:1;background:#eff5f8}
@media(max-width:1000px){.act-person-row{flex:0 0 auto;border:1px solid var(--line);background:white;padding-right:3px}.act-person-row.active{order:-1;background:#e8f5fb}.act-people-list .act-person-row button.act-person{border:0;background:transparent}}
@media(max-width:720px){.prof-grid{grid-template-columns:minmax(0,1fr)}.prof-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}.prof-reach a.button{padding:8px 6px}}
.access-others summary{cursor:pointer;margin-top:12px;font-weight:600;font-size:12px}
.access-choice{border:0;padding:0;margin:0}
.access-choice legend{font-size:12px;color:#566679;margin-bottom:4px}
.job-progress .flow-steps{margin-bottom:6px;flex-wrap:wrap;overflow:visible}
.job-progress p{margin:6px 0}
.job-cover{position:relative;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:#fff;margin-bottom:12px}
.cover-img{display:block;width:100%;aspect-ratio:16/10;object-fit:cover}
.cover-empty{display:grid;place-items:center;align-content:center;gap:6px;aspect-ratio:16/10;background:linear-gradient(180deg,#eef4f8,#e2eaf1);color:var(--muted);font-size:12px;text-align:center;padding:12px}
.cover-art{width:62%;max-width:220px}
.ca-ground{fill:#d3dde6}.ca-building{fill:#c2d0dc}.ca-window{fill:#f4f8fb}.ca-door{fill:#9fb3c4}
.cover-tools{position:absolute;right:8px;bottom:8px;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.cover-upload{position:relative;display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:18px;padding:6px 12px;font-weight:600;font-size:12px;color:#117da8;background:#ffffffee;cursor:pointer}
.cover-upload input{position:absolute;inset:0;opacity:0;cursor:pointer;min-height:0;width:100%}
.cover-tools .cover-pick{background:#ffffffee;border:1px solid var(--line);border-radius:18px;padding:6px 12px;font-size:12px;min-height:0}
.cover-grid .shot{width:100%;height:auto;aspect-ratio:1}
.phase-banner{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;border-radius:8px;padding:10px 14px;margin-bottom:12px;background:#eaf3fb;color:#1f5f8f;font-size:12px}
.phase-banner strong{text-transform:uppercase;letter-spacing:.06em}
.phase-banner.phase-complete{background:#e8f5ee;color:#2d7350}.phase-banner.phase-cancelled{background:#f4eded;color:#8c3a3a}.phase-banner.phase-prospective,.phase-banner.phase-estimating{background:#fff3dc;color:#8a5d17}
.location-card address{font-style:normal;font-size:14px;line-height:1.5;margin:10px 0 8px;overflow-wrap:anywhere}
.loc-tax{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;padding:8px 10px;background:#f6f9fb;border-radius:8px;font-size:12px}
.loc-tax span{color:var(--muted)}
.loc-tax small{flex-basis:100%}
.map-link{display:block;margin:10px 0 0;border-radius:8px;overflow:hidden;border:1px solid var(--line)}
.map-art{display:block;width:100%;height:auto;max-height:150px}
.ma-land{fill:#e9f0e8}.ma-road{stroke:#fff;stroke-width:4;fill:none}.ma-pin{fill:#d9483b}.ma-dot{fill:#fff}
.loc-field{position:relative;border-top:1px solid var(--line);margin-top:12px}
.loc-field .section-label{margin:12px 0 4px}
.loc-field .loc-edit{position:absolute;right:0;top:4px;min-height:0;padding:6px 8px}
.pre{white-space:pre-wrap;overflow-wrap:anywhere}
.place-form{display:grid;gap:10px;margin-top:10px}
.place-form .form-grid{grid-template-columns:1.4fr .6fr .8fr;gap:8px}
.field-subs{margin-bottom:12px}
.kind-panel .panel-head h2 small.count{font-weight:500;margin-left:4px}
.kind-panel .table-wrap{margin:0 -20px -20px;border-top:1px solid var(--line)}
.jobs-tools{margin-top:-8px}
.group-row td{background:#f3f7fa;font-weight:600;padding:9px 16px}
.group-row small{display:inline;margin-left:8px;font-weight:500}
.th-sort{border:0;background:none;padding:0;font:inherit;font-weight:600;color:inherit;min-height:0;text-align:left;white-space:nowrap}
.th-sort:hover{background:none;color:#117da8}
th.r,td.r{text-align:right}
.loc-drawer address{font-style:normal;font-size:15px;margin-bottom:10px}
.job-at{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline;background:#f6f9fb;border-radius:8px;padding:10px 12px}
.job-at small{flex-basis:100%}
/* The Dashboard's top (Contractor Foreman's stage pipeline and headline figures), costs, action items, the customer
   card and recent photos; the Documents tab's contract documents and folders (jobdocs.js). */
.jd-top{margin:0 0 16px}
.stage-pipe{list-style:none;display:flex;gap:0;margin:0 0 12px;padding:12px 14px;background:white;border:1px solid var(--line);border-radius:var(--radius);overflow-x:auto;scrollbar-width:thin}
.stage-pipe li{flex:1 0 96px;display:flex;flex-direction:column;align-items:center;gap:5px;text-align:center;position:relative;color:var(--muted);font-size:11px}
.stage-pipe li:not(:first-child)::before{content:"";position:absolute;top:14px;right:calc(50% + 16px);left:calc(-50% + 16px);height:2px;background:#dfe6ed}
.stage-pipe li.done:not(:first-child)::before,.stage-pipe li.now:not(:first-child)::before{background:#8cc9e4}
.sp-dot{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;border:2px solid #cfd9e3;background:white;font-weight:700;font-size:11px}
.stage-pipe li.done .sp-dot{border-color:#2d7350;background:#e8f5ee;color:#2d7350}
.stage-pipe li.now{color:var(--ink);font-weight:650}.stage-pipe li.now .sp-dot{border-color:var(--accent);background:var(--accent);color:white}
.stage-pipe li.cancelled .sp-dot{border-color:#a53032;background:#a53032}.stage-pipe.off li:not(.cancelled){opacity:.55}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px}
.kpi{display:flex;gap:10px;align-items:flex-start;background:white;border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;min-width:0}
.kpi-icon{flex:none;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#eaf3fb;color:#316d9b;font-weight:700}
.kpi small{display:block;color:var(--muted);font-size:11px;line-height:1.4}.kpi strong{display:block;font-size:16px;margin:2px 0;overflow-wrap:anywhere}
.neg{color:#a53032}
.sum-total{border-top:1px solid #ffffff40}.sum-total strong{font-size:15px}
.sum-links{display:flex;justify-content:space-between;flex-wrap:wrap;gap:6px}
.jp-meter-fill.over{fill:#c0572b}
.jp-meter small{display:block;color:var(--muted);font-size:11px;margin-top:3px}
.wip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:14px 0 0;padding-top:12px;border-top:1px solid var(--line)}
.wip dt{color:var(--muted);font-size:11px}.wip dd{margin:2px 0 0;font-weight:650}
.job-actions td small{display:block;font-size:11px;color:var(--muted);white-space:normal}
.job-actions .late{color:#a53032;font-weight:700}
.job-actions .table-wrap{margin:0 -20px;border-top:1px solid var(--line)}
.job-actions .table-wrap:last-child{margin-bottom:-20px}
.cd-needs{margin:12px 0 0;font-size:12px;color:#8a2c2e;line-height:1.5}
.customer-card .cc-name{font-size:15px}
.cc-lines{display:flex;flex-direction:column;gap:2px;margin:6px 0}
.photo-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.photo-strip .shot{width:100%;height:auto;aspect-ratio:1}
.tab-note{margin:0 0 16px}
.contract-docs .panel-head .cd-need{color:#a53032}
.cd-row{display:grid;grid-template-columns:92px minmax(0,1fr) auto;gap:10px;align-items:start;padding:12px 0;border-top:1px solid var(--line)}
.cd-badge{justify-self:start;display:inline-block;text-align:center;border-radius:20px;padding:4px 8px;font-size:11px;font-weight:650;background:#edf1f5;color:#566679}
.cd-badge.warn{background:#fdecea;color:#a53032}.cd-badge.good{background:#e8f5ee;color:#2d7350}.cd-badge.quiet{background:#f2f4f7;color:#7a8797}
.cd-main>strong{display:block}.cd-main small{display:block;color:var(--muted);font-size:12px;margin-top:2px}
.cd-doc{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin-top:6px;padding:6px 8px;background:#f7f9fb;border-radius:6px}
.cd-doc small{display:inline;margin:0}.cd-files{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:12px}
.cd-skip{margin:6px 0 0;font-size:12px;color:#566679}.cd-skip small{display:inline}
.cd-acts{justify-content:flex-end;gap:6px}.cd-acts button{white-space:nowrap}
.folder-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-bottom:12px}
.folder-tile{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;padding:10px 12px;font-weight:500;min-height:0}
.folder-tile strong{font-size:12px;overflow-wrap:break-word;hyphens:auto}.folder-tile small{color:var(--muted);font-size:11px}
.folder-tile.active{border-color:var(--accent);background:#eaf5fb}.folder-tile.add{border-style:dashed;color:#117da8}
.ft-icon{font-size:16px;line-height:1;color:#7b93a9}
.jd-tools{margin:0 0 8px}.jd-tools input{max-width:320px}
.jd-name{display:inline-flex;align-items:center;gap:8px}
.jd-thumb{flex:none;width:34px;height:34px;border-radius:6px;object-fit:cover;border:1px solid var(--line);display:inline-grid;place-items:center;font-size:9px;font-weight:700;background:#f1f4f7;color:#566679}
.jd-thumb.ft-pdf{background:#fdecea;color:#a53032}.jd-thumb.ft-doc{background:#e8f0fb;color:#2b5797}.jd-thumb.ft-xls,.jd-thumb.ft-csv{background:#e8f5ee;color:#217346}
.job-folders select.jd-move{min-height:32px;padding:4px 8px;width:auto;max-width:180px}
@media(max-width:720px){.cd-row{grid-template-columns:minmax(0,1fr)}.cd-acts{justify-content:flex-start}.wip{grid-template-columns:1fr 1fr}.kpis{grid-template-columns:1fr 1fr}.stage-pipe li{flex-basis:84px}}
/* A customer's page with ServiceTitan's section menu on the left (customers.js); on a phone the menu is a row. */
.cust-layout{display:grid;grid-template-columns:200px minmax(0,1fr);gap:20px;align-items:start}
.cust-menu{position:sticky;top:12px;display:flex;flex-direction:column;gap:14px;background:white;border:1px solid var(--line);border-radius:var(--radius);padding:12px 8px}
.cm-group{display:flex;flex-direction:column;gap:2px}
.cm-head{font-size:10px;text-transform:uppercase;letter-spacing:.09em;color:var(--muted);padding:0 10px 4px}
.cust-menu button{border:0;background:none;text-align:left;font-weight:500;padding:8px 10px;border-radius:6px;display:flex;justify-content:space-between;gap:8px;min-height:0}
.cust-menu button small{color:var(--muted);font-size:11px}
.cust-menu button.active{background:#eaf5fb;color:#117da8;font-weight:650}
.cust-body{min-width:0}
.cust-tiles{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));margin-bottom:16px}
.cust-note{margin:-6px 0 16px}
.record-row>div small{display:block;color:var(--muted);font-size:11px}
.nowrap.late,.late{color:#a53032}
@media(max-width:900px){.cust-layout{grid-template-columns:minmax(0,1fr)}.cust-menu{position:static;flex-direction:row;overflow-x:auto;padding:6px;gap:10px}.cm-group{flex-direction:row;align-items:center;flex:none}.cm-head{padding:0 4px}.cust-menu button{white-space:nowrap}}
@media(max-width:1280px){.jd{grid-template-columns:minmax(0,1fr) minmax(280px,.85fr)}.jd-center{grid-column:1/-1}}
@media(max-width:900px){.job-head{flex-direction:column}.job-buttons{justify-content:flex-start;max-width:none}.jd{grid-template-columns:minmax(0,1fr);gap:0}
 /* one column on a phone, in the order people there need things: what is waiting, where the job is, the site, then the rest */
 .jd>div{display:contents}.jd>div>*{order:20;margin-bottom:12px}.jd .job-actions{order:1}.jd .job-progress{order:2}.jd .job-cover{order:3}.jd .phase-banner{order:4}.jd .location-card{order:5}.jd .customer-card{order:6}
 .jd .job-summary,.jd .job-summary-off{order:7}.jd .job-costs{order:8}.jd .job-card{order:9}.jd .job-fields{order:10}.jd .job-dates{order:11}.jd .job-access{order:12}.jd .recent-photos{order:13}.jd .wall{order:14}}
@media(max-width:720px){.job-buttons{flex-wrap:nowrap;overflow-x:auto;width:100%;padding-bottom:4px}.job-buttons button{flex:none;min-height:40px}.jf-row{grid-template-columns:104px minmax(0,1fr)}.place-form .form-grid{grid-template-columns:1fr 1fr}}
/* Operations AI (assistant.js), in JobTread AI's style: the top bar button, the panel over the page (bottom right on a PC, the whole
   screen on a phone) with its suggestion boxes, answers, Go to buttons, filled forms, memory and history, and Settings → Operations AI */
button.ask-button{display:inline-flex;align-items:center;gap:6px;border-color:#b5dcec;background:#f2f9fd;color:#11729b}button.ask-button.on{background:#11729b;border-color:#11729b;color:#fff}button.ask-button.on .ask-mark{color:#fff}.ask-mark{color:var(--accent)}.ask-short{display:none}
.job-top .ask-job{margin-left:auto;color:#11729b}
#assistant{position:fixed;right:24px;bottom:24px;width:min(440px,calc(100vw - 48px));height:min(700px,calc(100vh - 110px));background:#fff;z-index:29;border:1px solid var(--line);border-radius:16px;box-shadow:0 24px 64px #162b4238,0 2px 8px #162b4214;display:flex;flex-direction:column;overflow:hidden}
#assistant[hidden]{display:none}
@media(min-width:1180px){body:has(#drawer:not([hidden])) #assistant{right:calc(min(620px,100vw) + 20px)}}  /* beside a record's drawer, so a filled form and the answer show together */
.ask-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 10px 10px 16px;border-bottom:1px solid var(--line);background:linear-gradient(135deg,#eef7fc,#fff 70%)}.ask-head h2{margin:0;font-size:16px;white-space:nowrap}
.ask-tools{display:flex;align-items:center;gap:2px}.ask-tools button{padding:6px 8px;font-size:12px;font-weight:600;color:#526174;border-radius:7px;white-space:nowrap}.ask-tools button.on{background:#dcebf5;color:#11729b}.ask-tools .ask-x{font-size:15px}
.ask-log{flex:1;overflow:auto;padding:16px;display:flex;flex-direction:column;gap:12px;overscroll-behavior:contain}
.ask-hello{margin:2px 0 2px}.ask-hi{margin:0;font-size:15px;color:#526174}.ask-how{margin:2px 0 0;font-size:21px;font-weight:700;letter-spacing:-.01em}.ask-on{margin:6px 0 0;font-size:12px;color:#11729b;font-weight:600}
.ask-boxes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
button.ask-box{display:flex;flex-direction:column;align-items:flex-start;gap:8px;min-height:78px;padding:11px 12px;text-align:left;white-space:normal;font-weight:600;font-size:12.5px;line-height:1.35;border:1px solid var(--line);border-radius:12px;background:#fbfdfe;color:var(--ink)}
button.ask-box:hover{border-color:#9fd0e6;background:#f2f9fd}.ask-box-icon{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:8px;background:#e3f2fa;color:#11729b;font-size:13px}
.ask-tip{margin:2px 0 0;font-size:12px;color:var(--muted);line-height:1.5}.ask-helponly{margin:2px 0 0;font-size:12px}
.ask-chips{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:2px}.ask-chips small{width:100%;font-size:10.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}button.ask-chip{padding:5px 10px;font-size:12px;font-weight:500;border-radius:999px;border:1px solid var(--line);background:#fbfdfe;text-align:left;white-space:normal}button.ask-chip:hover{border-color:#9fd0e6;background:#f2f9fd}
.ask-msg{max-width:94%;border-radius:12px;padding:9px 12px;font-size:13px;line-height:1.5;overflow-wrap:anywhere}
.ask-msg.you{align-self:flex-end;background:#e6f1f9;border-bottom-right-radius:3px}.ask-msg.ai{align-self:flex-start;background:var(--canvas);border:1px solid var(--line);border-bottom-left-radius:3px}
.ask-who{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin-bottom:3px}
.ask-text p,.ask-text ul,.ask-text ol{margin:0 0 8px}.ask-text ul,.ask-text ol{padding-left:20px}.ask-text li{margin:2px 0}.ask-text h4{margin:10px 0 4px;font-size:13px}.ask-text>:first-child{margin-top:0}.ask-text>:last-child{margin-bottom:0}
.ask-go{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}button.ask-go-btn{padding:5px 10px;font-size:12px;border:1px solid #b5dcec;background:#fff;color:#11729b;border-radius:999px;min-height:0;text-align:left;white-space:normal}
.ask-formbox{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:8px;padding:9px 10px;border:1px dashed #9fd0e6;border-radius:10px;background:#fff}.ask-formbox p{margin:3px 0 2px;font-size:12px;color:#344457}.ask-formbox small{font-size:11px;color:var(--muted)}.ask-formbox button{flex:none;padding:7px 11px;font-size:12px}
.ask-offer{margin-top:8px;padding:9px 10px;border:1px solid #f1dca7;border-radius:10px;background:#fff8e6}.ask-offer p{margin:0 0 6px;font-size:12.5px}.ask-offer .actions{gap:6px}.ask-offer button{padding:6px 11px;font-size:12px}
.ask-kept{margin:8px 0 0;font-size:12px;color:#2d7350}.ask-kept button{font-size:12px}.ask-note{margin:8px 0 0;font-size:11.5px;color:var(--muted)}
.ask-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:6px}.ask-meta small{font-size:11px;flex:1;min-width:0}.ask-meta button{padding:4px 8px;font-size:12px;min-height:0;flex:none;white-space:nowrap}
.ask-msg.busy p{margin:0;color:var(--muted);animation:ask-pulse 1.4s ease-in-out infinite}@keyframes ask-pulse{50%{opacity:.45}}
.ask-error{margin:0}.ask-error .actions{margin-top:6px}
.ask-pane h3{margin:0 0 6px;font-size:15px}.ask-pane>p{margin:0 0 10px;font-size:12px}.ask-past{display:flex;align-items:center;justify-content:space-between;gap:8px;border-bottom:1px solid var(--line);padding:8px 0}.ask-past small{display:block}.ask-past .link{font-weight:600;text-align:left}
.ask-mem{list-style:none;margin:0 0 12px;padding:0}.ask-mem li{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 0;border-bottom:1px solid var(--line);font-size:13px}.ask-mem li form{width:100%}.ask-mem .actions{flex:none;gap:0}.ask-mem-add .actions{margin-top:6px}
.ask-form{border-top:1px solid var(--line);padding:10px 12px 10px;padding-bottom:max(10px,env(safe-area-inset-bottom));background:#fff}
.ask-row{display:flex;align-items:flex-end;gap:8px}.ask-row textarea{flex:1;min-height:44px;max-height:32vh;resize:vertical;border-radius:12px;padding:10px 12px}
button.ask-send-btn{flex:none;width:40px;height:40px;padding:0;border-radius:50%;font-size:18px;line-height:1}
.ask-foot{display:block;margin-top:6px;font-size:10.5px;color:var(--muted);line-height:1.4}
.ask-about{display:block;margin:0 2px 5px;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ask-q{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.ask-flash{outline:3px solid var(--accent)!important;outline-offset:3px;animation:ask-flash 0.9s ease-in-out 3}@keyframes ask-flash{50%{outline-color:transparent}}
@media(prefers-reduced-motion:reduce){.ask-msg.busy p,.ask-flash{animation:none}}
.ask-steps{margin:8px 0 0;padding-left:20px;line-height:1.8}.ask-steps li.done{color:#2d7350}
.ask-roles{border:0;padding:0;margin:16px 0}.ask-roles legend{font-weight:600;margin-bottom:6px;font-size:13px}.ask-roles p{margin:6px 0}
.ask-role-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:6px 16px}.ask-role{display:flex;align-items:center;gap:8px;font-size:12px}
.ask-settings .form-grid{margin:8px 0 12px}
@media(max-width:720px){.ask-long{display:none}.ask-short{display:inline}button.ask-button{padding:8px 10px}
 #assistant{top:var(--band,0px);right:0;bottom:0;left:0;width:auto;height:auto;border:0;border-radius:0;box-shadow:none;z-index:31}body.ask-open{overflow:hidden}
 .ask-head{padding:10px 6px 8px 12px}.ask-head h2{font-size:15px}.ask-msg{max-width:100%}.ask-tools{gap:0}.ask-tools button{padding:8px 5px;font-size:11.5px}.ask-log{padding:14px 12px}button.ask-box{min-height:70px}.job-top .ask-job{font-size:12px}}
@media print{#assistant{display:none!important}}
/* Daily log summaries (assistant.js): the Summary section of a log's side panel, its draft in the text editor, and the week's */
.dl-summary .sum-saved{background:#f2f9fd;border:1px solid #cfe6f2;border-radius:8px;padding:10px 12px}.dl-summary .actions,.sum-week .actions{margin-top:8px}
.sum-form{display:grid;gap:8px}.sum-form .rich{margin:0}.sum-note{margin:0;font-size:12px}.ask-wait{margin:0;animation:ask-pulse 1.4s ease-in-out infinite}
@media(prefers-reduced-motion:reduce){.ask-wait{animation:none}}
.dl-bar .dl-sum-week{color:#11729b;white-space:nowrap;margin-left:auto}.dl-bar .dl-sum-week+.dl-new{margin-left:0}
/* RFIs (rfis.js): the job's RFI panel with its counts, filters and table, and one RFI in the side panel */
.rfi-stats{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}.rfi-stat{display:flex;align-items:baseline;gap:6px;border:1px solid var(--line);border-radius:8px;padding:6px 10px;background:#fbfcfd}
.rfi-stat strong{font-size:16px;font-weight:600;font-variant-numeric:tabular-nums}.rfi-stat small{color:var(--muted);font-size:11px}
.rfi-stat.late{border-color:#f0c9cb;background:#fdf3f3}.rfi-stat.late strong{color:#a6343a}.rfi-stat.hot{border-color:#f3dcb2;background:#fffaf0}.rfi-stat.hot strong{color:#946422}
.rfi-bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 10px}.rfi-bar input[type=search]{flex:1 1 180px;max-width:280px;margin-left:auto}.rfi-bar .chip small{color:var(--muted)}
.rfi-panel .table-wrap{overflow-x:auto}.rfi-panel td{vertical-align:top}.rfi-panel td .link{text-align:left}.rfi-panel td small{display:block;margin-top:2px}.rfi-panel td.rfi-no{white-space:nowrap}.rfi-panel td.rfi-subject{min-width:170px}
.rfi-panel td .rfi-pri{margin-top:4px}.rfi-late,.rfi-panel td.rfi-late{color:#a6343a}
.rfi-pri{display:inline-block;border-radius:20px;padding:3px 8px;font-size:10px;font-weight:600;background:#edf1f5;color:#566679}.rfi-pri.high{background:#fdecec;color:#a6343a}.rfi-pri.medium{background:#fff3dc;color:#946422}
.rfi-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:6px}.rfi-head h3{margin:2px 0 0;text-wrap:balance}
.rfi-facts{margin:0 0 4px}.rfi-facts .detail-row{grid-template-columns:130px 1fr;padding:8px 0}
.rfi-inline{border:1px solid #cfe6f2;background:#f7fbfe;border-radius:10px;padding:12px 14px;margin:12px 0;display:grid;gap:10px}.rfi-inline h4{margin:0}
.rfi-two{display:grid;grid-template-columns:1fr 1fr;gap:12px}.rfi-form{display:grid;gap:14px}.rfi-issues{display:grid;gap:4px}
@media(max-width:560px){.rfi-two{grid-template-columns:1fr}.rfi-bar input[type=search]{max-width:none;margin-left:0}}
/* Shipping & receiving (shipping.js): the board, shipment cards, steps, receiving on the dock, the signature pad */
.ship-board{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start}.ship-lane .panel-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap}.ship-lane .panel-head h2{margin:0}.ship-lane .panel-head p{margin:0;font-size:12px}
.ship-group-head{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:18px 0 8px}.ship-group-head.g-late{color:#a6343a}.ship-group-head.g-dock{color:#117da8}.ship-group summary{cursor:pointer;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:18px 0 8px;min-height:32px}
.ship-card{border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:8px;background:white;padding:12px 14px;margin-bottom:10px}.ship-card.late{border-left-color:#c2383f;background:#fff8f8}.ship-card p{margin:3px 0;font-size:12px}.ship-card .ship-card-what{color:var(--ink);font-weight:600;font-size:13px}.ship-card .actions{margin-top:8px}
.ship-card-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ship-card-top .link strong{font-size:14px}.ship-kind{font-size:11px;color:#6b4bb0;font-weight:600}
.ship-late,.ship-late-count{color:#a6343a;font-weight:650}.ship-card p.ship-late{font-size:12px}.ship-hint{display:inline;color:var(--muted)}
.ship-pill{display:inline-block;white-space:nowrap;border-radius:20px;padding:4px 9px;font-size:10px;font-weight:650;background:#eaf3fb;color:#316d9b}.ship-pill.s-expected,.ship-pill.s-planned{background:#edf1f5;color:#566679}.ship-pill.s-arrived,.ship-pill.s-picked,.ship-pill.s-loaded{background:#fff3dc;color:#946422}.ship-pill.s-received,.ship-pill.s-delivered,.ship-pill.s-closed{background:#e8f5ee;color:#2d7350}.ship-pill.s-cancelled{background:#f3e8e8;color:#8a3a3a}
.ship-tabs{margin-top:-4px}.ship-sub{margin:20px 0 4px}
.ship-steps{display:flex;list-style:none;padding:0;margin:0 0 14px;gap:4px;counter-reset:step}.ship-steps li{flex:1;text-align:center;font-size:11px;padding:7px 4px;border-radius:6px;background:#edf1f5;color:#6b7a8c}.ship-steps li.done{background:#e8f5ee;color:#2d7350}.ship-steps li.now{background:var(--accent);color:white;font-weight:650}.ship-steps.cancelled li{opacity:.55}
.ship-drawer-actions{margin:4px 0 12px}.ship-items td small{display:block}.ship-items td:nth-child(5){white-space:nowrap}.ship-good{color:#2d7350;font-weight:600}.ship-bad{color:#a6343a;font-weight:600}
.ship-shots{display:inline-flex;gap:6px;flex-wrap:wrap;vertical-align:middle}.ship-shots img,.ship-shot img{width:56px;height:56px;object-fit:cover;border-radius:6px;border:1px solid var(--line);display:block}.ship-signature{max-width:320px;width:100%;border:1px solid var(--line);border-radius:6px;background:white;margin-top:8px}
.ship-docs{display:flex;flex-wrap:wrap;gap:6px 18px}.ship-docs span{display:inline-flex;align-items:center;gap:4px}.ship-history{padding-left:18px;margin:0}.ship-history li{margin:0 0 10px}.ship-history small{display:block}
.ship-checks{display:grid;gap:6px;margin-bottom:8px}.ship-checks .check{display:flex;align-items:center;gap:8px;min-height:36px}.ship-po{display:grid!important;grid-template-columns:auto 1fr 96px;gap:8px}.ship-po input[type=number]{min-height:34px}
.ship-typed{display:grid;gap:6px}.ship-typed-row{display:grid;grid-template-columns:2fr 1fr 90px auto;gap:6px;align-items:center}.ship-kinds{margin-bottom:14px}.ship-kinds .chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:20px;padding:6px 12px;cursor:pointer}.ship-kinds .chip.active{border-color:var(--accent);background:#e8f5fb}
#drawer:has(.ship-receive),#drawer:has(.ship-form),#drawer:has(.ship-pick){width:min(1080px,100vw)}.ship-receive table td,.ship-picks td{vertical-align:middle}.ship-rx input,.ship-rx select{min-width:84px}.ship-rx td:first-child{min-width:230px}.ship-rx td[data-col=note] input{min-width:150px}.ship-rx tr.ship-hit{background:#eef9f2}
.ship-cam{display:inline-flex;align-items:center;gap:6px;min-height:40px;min-width:44px;justify-content:center;border:1px solid var(--line);border-radius:8px;padding:4px 8px;cursor:pointer;background:white;font-size:18px}
.ship-tick input[type=checkbox]{width:24px;height:24px}.sig-pad{display:block;width:100%;max-width:640px;height:auto;aspect-ratio:64/22;border:1px dashed #9fb0c2;border-radius:8px;background:white;touch-action:none;cursor:crosshair}
.warehouse .wf-num,.warehouse .wf-text{min-height:30px;padding:3px 6px;border-radius:2px;border-color:var(--wf-border)}.warehouse .wf-num{width:96px;text-align:right}.warehouse .wf-text{min-width:140px}
@media(max-width:1000px){.ship-board{grid-template-columns:1fr}}
@media(max-width:720px){.ship-card .actions button,.ship-drawer-actions button,.ship-big{min-height:48px;font-size:15px;flex:1 1 auto}.ship-steps li{font-size:10px;padding:6px 2px}
 .ship-rx thead,.ship-picks thead{display:none}.ship-rx tr,.ship-picks tr{display:grid;grid-template-columns:1fr 1fr;gap:6px 10px;padding:12px 4px;border-bottom:1px solid var(--line)}.ship-rx td,.ship-picks td{border:0;padding:0;max-width:none}.ship-rx td:first-child{grid-column:1/-1}
 .ship-rx td[data-label]::before{content:attr(data-label);display:block;font-size:11px;color:var(--muted);margin-bottom:3px}.ship-rx td:first-child::before{display:none}.ship-rx td:empty{display:none}.ship-rx select,.ship-rx input,.ship-receive input,.ship-form input,.ship-form select{min-height:48px;font-size:16px}
 .ship-picks tr{grid-template-columns:48px 1fr auto}.ship-picks td:nth-child(3){grid-column:2/-1}.ship-tick input[type=checkbox]{width:32px;height:32px}.ship-cam{min-height:48px;min-width:56px}
 .ship-typed-row{grid-template-columns:1fr 80px}.ship-typed-row input:first-child{grid-column:1/-1}.ship-po{grid-template-columns:auto 1fr}.ship-po input[type=number]{grid-column:1/-1}.ship-docs span{flex:1 1 100%}}
/* Dashboards (HOME-02, dashboards.js): a side list of dashboards beside the cards; each card has its tools, filters and
   a table view. Status tiles are tinted with their status color and keep their text in ink; on a phone tiles go two
   across and cards stack. */
.dash-page{display:grid;grid-template-columns:190px minmax(0,1fr);gap:20px;align-items:start}.dash-main{min-width:0}
.dash-boards{position:sticky;top:16px;display:flex;flex-direction:column;gap:2px;background:white;border:1px solid var(--line);border-radius:var(--radius);padding:12px 8px}
.dash-boards h2{font-size:10px;text-transform:uppercase;letter-spacing:.09em;color:var(--muted);margin:2px 8px 8px}
.dash-boards button{display:flex;align-items:center;gap:10px;width:100%;border:0;border-radius:8px;text-align:left;padding:9px 10px;font-weight:500;color:#526174;min-height:0;background:transparent}
.dash-boards button.active{color:#117da8;background:#e8f5fb;font-weight:650}.dash-boards .nav-symbol{font-size:15px;width:18px}
.dash-boards .dash-new{margin-top:8px;border-top:1px solid var(--line);border-radius:0;padding-top:12px;color:#117da8;font-weight:600}
.dash-grid{grid-template-columns:repeat(auto-fill,minmax(min(380px,100%),1fr));grid-auto-flow:row dense}.dash-card{min-width:0;container-type:inline-size}.dash-card.wide{grid-column:1/-1}
.dash-card.stale>:not(.panel-head){opacity:.55;transition:opacity .2s}
.dash-card .panel-head{align-items:flex-start;flex-wrap:nowrap;margin-bottom:10px}.dash-title{min-width:0}.dash-title h2{margin:0}
.dash-applied{margin:3px 0 0;font-size:11px;line-height:1.4;color:var(--muted)}
.dash-tools{display:flex;gap:2px;flex-shrink:0}.dash-tools button.icon{width:30px;height:30px;min-height:0;padding:0;display:grid;place-items:center;border-radius:6px;color:#687889}
.dash-tools button.icon svg{width:16px;height:16px}.dash-tools button.icon:hover{background:#eff5f8;color:var(--ink)}.dash-tools button.icon[aria-pressed=true]{background:#e8f5fb;color:#117da8}
.dash-foot{display:flex;justify-content:flex-end;margin-top:12px}.dash-note{font-size:11px;margin:10px 0 0;line-height:1.5}.dash-loading{margin:8px 0}
.dash-filters{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end;background:#f7f9fb;border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin:0 0 12px}
.dash-filters .field{font-size:11px;gap:4px;min-width:0}.dash-filters select,.dash-filters input{min-height:32px;padding:5px 8px;width:auto;max-width:100%}
.dash-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:14px}.kind-tiles .dash-tiles{margin-bottom:0}
.dash-tile{position:relative;border:1px solid var(--line);border-radius:10px;padding:14px 16px;background:white;display:flex;flex-direction:column;gap:3px;min-width:0}
.dash-tile strong{font-size:26px;font-weight:650;letter-spacing:-.5px;line-height:1.2;color:var(--ink);overflow-wrap:anywhere}
.dash-tile-label{font-size:12px;color:#526174;font-weight:600;padding-right:26px}.dash-tile small{font-size:11px;color:var(--muted);line-height:1.4}
.dash-tiles.status .dash-tile{border-left-width:4px}.dash-tile.tone-plain{border-left-color:#c3cbd4}
.dash-tile.tone-blue{background:#f1f6fd;border-color:#d6e5f7;border-left-color:#2a78d6}.dash-tile.tone-green{background:#f0f9f0;border-color:#d2ecd4;border-left-color:#0ca30c}
.dash-tile.tone-amber{background:#fff8e9;border-color:#f5e3b8;border-left-color:#fab219}.dash-tile.tone-red{background:#fdf2f2;border-color:#f3d2d2;border-left-color:#d03b3b}
.dash-tile-icon{position:absolute;top:12px;right:12px;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:700;color:white}
.tone-blue .dash-tile-icon{background:#2a78d6}.tone-green .dash-tile-icon{background:#0a860a}.tone-amber .dash-tile-icon{background:#a06c00}.tone-red .dash-tile-icon{background:#d03b3b}
.dash-tiles.plain .dash-tile{border-left-width:1px;background:white;padding:16px 18px}.dash-tiles.plain .dash-tile strong{font-size:30px}.dash-tiles.plain .dash-tile-label{padding:0;text-transform:uppercase;font-size:10px;letter-spacing:.07em;color:var(--muted)}
.dash-pie{display:grid;grid-template-columns:minmax(120px,170px) minmax(0,1fr);gap:18px;align-items:center}.dash-pie>svg{width:100%;max-width:170px;height:auto;display:block}
.dash-legend{font-size:12px}.dash-legend th,.dash-legend td{padding:6px 8px;position:static;max-width:none}.dash-legend th:not(:first-child),.dash-legend td:not(:first-child){text-align:right}
.dash-legend .key{display:inline-flex;align-items:center;gap:7px}.dash-legend svg{width:10px;height:10px;flex:none}.dash-legend tfoot td{font-weight:650;border-top:1px solid var(--line)}
.dash-progress{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(240px,100%),1fr));gap:16px 22px}
.dash-prog-head{display:flex;justify-content:space-between;gap:8px;align-items:baseline}.dash-prog-head .link{font-weight:600;overflow-wrap:anywhere}
.dash-bar{display:block;width:100%;height:6px;margin:7px 0 5px}.dash-track{fill:#e6ebf0}.dash-prog small{display:block;font-size:11px;line-height:1.45}
.dash-stages{margin-top:8px}.dash-stages button{font-size:11px;padding:5px 10px;min-height:0}
.dash-rings{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(165px,100%),1fr));gap:12px}
.dash-col{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fbfcfd;padding:0 14px 14px;min-width:0}
.dash-col-band{display:block;width:calc(100% + 28px);height:4px;margin:0 -14px 10px}.dash-col header .link{font-weight:650;overflow-wrap:anywhere}.dash-col header small{display:block;margin-top:2px}
.dash-col-dates{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin:10px 0 0;font-size:11px}.dash-col-dates dt{color:var(--muted)}.dash-col-dates dd{margin:0;font-weight:600}
.dash-ring{width:96px;height:96px;display:block;margin:8px auto 0}.dash-ring-track{fill:none;stroke:#e6ebf0;stroke-width:8}.dash-ring-pct{font-size:17px;font-weight:700;fill:var(--ink)}
.dash-col-caption{text-align:center;font-size:12px;margin:2px 0 6px;color:#526174;font-weight:600}.dash-col h4{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:12px 0 4px}
.dash-mini-row{display:grid;grid-template-columns:52px minmax(0,1fr) auto;gap:6px;align-items:center;font-size:11px;margin:3px 0}.dash-mini-row svg{width:100%;height:8px;display:block}
.dash-col-next,.dash-col-hold{font-size:12px;margin:10px 0 0;color:var(--ink)}.dash-col .eyebrow{display:block;margin:0 0 2px}
.dash-work .chart-legend{margin:0 0 8px}.dash-work-row{display:grid;grid-template-columns:minmax(80px,150px) minmax(0,1fr) auto;gap:10px;align-items:center;padding:6px 0;border-bottom:1px solid #f0f2f5}
.dash-work-row svg{width:100%;height:14px;display:block;overflow:visible}.dash-work-name{font-size:12px;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dash-work-row small{font-size:11px}
.late{color:#a6343a}
.dash-dates-wrap{max-height:none;border:1px solid var(--line);border-radius:8px}.dash-dates td{padding:8px 10px;white-space:nowrap}.dash-dates th{padding:10px}
.dash-dates td.dash-dates-name{white-space:normal;min-width:170px;max-width:280px}.dash-dates-name small{font-size:11px}
.dash-group th{background:#f3f6f9;padding:0;position:static}.dash-group button{width:100%;text-align:left;border:0;border-radius:0;padding:8px 10px;font-weight:650;color:var(--ink);min-height:0;background:transparent}
.dm{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--ink)}.dm small{color:var(--muted);font-size:10px}
.dm-g{display:inline-grid;place-items:center;min-width:18px;height:18px;border-radius:9px;font-size:11px;font-weight:700;padding:0 3px}
.dm.done .dm-g{background:#e2f3e2;color:#086b08}.dm.late .dm-g{background:#d03b3b;color:white}.dm.pending .dm-g{color:#7b8896;letter-spacing:-1px}.dm.none .dm-g,.dm.skip .dm-g{color:#a3adb8}
.dash-key{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:11px;color:var(--muted);margin:10px 0 0}.dash-key .dm{font-size:11px;color:var(--muted)}.dash-more td,.dash-more{color:var(--muted);font-size:11px}
.sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.dm,.dash-date,.dash-card .table-wrap,.dash-expanded .table-wrap{position:relative}
.dash-group-block+.dash-group-block{margin-top:6px}.dash-group-head{display:flex;align-items:center;gap:6px;width:100%;text-align:left;border:0;padding:6px 2px;font-weight:650;min-height:0;background:transparent}
.dash-group-head.tone-red .count{background:#fbe9e9;color:#9b2c2c}.dash-group-head.tone-amber .count{background:#fff3dc;color:#8a5a12}.dash-group-head.tone-green .count{background:#e8f5ee;color:#2d7350}
.dash-item{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:8px 2px 8px 20px;border-bottom:1px solid #f0f2f5}.dash-item:last-child{border-bottom:0}
.dash-item-main{min-width:0}.dash-item-main .link{overflow-wrap:anywhere}.dash-item-main small{display:block;font-size:11px;margin-top:2px;overflow-wrap:anywhere}
.dash-item-side{display:flex;gap:8px;align-items:center;flex-shrink:0;font-size:12px}.dash-date.late span[aria-hidden]{color:#d03b3b;font-weight:800}
.dash-today-lead{font-size:14px;color:var(--ink);font-weight:600;margin:0 0 10px}.dash-today-empty p{margin:4px 0;color:var(--ink)}
.dash-visit{display:grid;grid-template-columns:120px minmax(0,1fr) auto;gap:14px;border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:10px;padding:14px 16px;margin-bottom:10px;background:white}
.dash-visit-when{font-weight:700;color:var(--ink)}.dash-visit-when small{display:block;font-weight:500;margin-top:2px}.dash-visit .eyebrow{margin:6px 0 1px}.dash-visit .eyebrow:first-child{margin-top:0}
.dash-visit h3{margin:0;font-size:16px}.dash-visit h3 .link{font-size:16px;overflow-wrap:anywhere}.dash-address{display:block;font-size:12px;color:#526174;font-weight:400;margin-top:2px;overflow-wrap:anywhere}
.dash-visit-do{font-size:14px;color:var(--ink);margin:2px 0;font-weight:600}
.dash-tip{position:fixed;z-index:60;pointer-events:none;background:#172b42;color:white;border-radius:6px;padding:6px 9px;font-size:12px;line-height:1.35;box-shadow:0 4px 14px #0003;max-width:260px}.dash-tip[hidden]{display:none}
.dash-tip strong{display:block;font-size:13px}.dash-tip span{color:#c9d4df}
.dash-expanded .chart svg{max-height:440px}
.home-add-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(240px,100%),1fr));gap:10px 16px;margin:4px 0 12px}.home-add-item{display:flex;flex-direction:column;align-items:flex-start;gap:4px}.home-add-item small{font-size:11px;line-height:1.45}.home-add-item .chip{text-align:left}
.dash-card:not(.kind-tiles) .dash-tiles{grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px}.dash-card:not(.kind-tiles) .dash-tile{padding:10px 12px}.dash-card:not(.kind-tiles) .dash-tile strong{font-size:21px}
@container (max-width:560px){.dash-pie{grid-template-columns:minmax(0,1fr);justify-items:center}.dash-pie>svg{max-width:160px}.dash-pie .dash-legend{width:100%}}.dash-start{border:1px solid var(--line);border-radius:8px;padding:10px 14px;margin:14px 0;display:grid;gap:8px}.dash-start legend{font-weight:600;padding:0 4px}
@media(max-width:1000px){.dash-page{grid-template-columns:minmax(0,1fr);gap:14px}.dash-boards{position:static;flex-direction:row;flex-wrap:wrap;padding:6px}.dash-boards h2{display:none}.dash-boards button{width:auto;padding:8px 10px}.dash-boards .dash-new{margin:0;border:0;padding:8px 10px}}
@media(max-width:720px){.dash-tiles{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.dash-tile{padding:12px}.dash-tiles.plain .dash-tile{padding:12px}.dash-tile strong,.dash-tiles.plain .dash-tile strong{font-size:21px}
 .dash-pie{grid-template-columns:minmax(0,1fr)}.dash-pie>svg{max-width:150px;margin:0 auto}.dash-visit{grid-template-columns:minmax(0,1fr);gap:6px}.dash-visit-side{justify-self:start}
 .dash-rings{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.dash-col{padding:0 10px 10px}.dash-col-band{width:calc(100% + 20px);margin:0 -10px 8px}.dash-ring{width:78px;height:78px}.dash-mini-row{grid-template-columns:42px minmax(0,1fr) auto;gap:4px}
 .dash-work-row{grid-template-columns:minmax(0,90px) minmax(0,1fr) auto}.dash-item{flex-wrap:wrap;padding-left:8px}.dash-item-side{flex-wrap:wrap}.dash-card .panel-head{gap:8px}.dash-filters .field{flex:1 1 40%}.dash-filters select,.dash-filters input{width:100%}}
/* The Branch Manager's board (branches.js, branchboard.py): the branch with its manager and backup, and the week's crew grid */
.bb-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:8px 16px;margin:0 0 12px}.bb-head h3{margin:0;font-size:18px}.bb-head p{margin:3px 0 0;color:var(--muted)}.bb-head p strong{color:var(--ink)}.bb-head button.link{padding:0}.bb-pick{max-width:240px;margin:0}
.bb-wrap{margin:4px 0 12px}.bb-week{width:100%;min-width:300px;border-collapse:collapse;table-layout:fixed;font-size:12px}.bb-week th,.bb-week td{padding:5px 1px;border-bottom:1px solid var(--line);text-align:center}.bb-week thead th{font-weight:600;color:var(--muted)}.bb-week thead th small{display:block;font-weight:400}
.bb-week thead th:first-child,.bb-week tbody th{text-align:left;width:36%;padding-left:4px}.bb-week tbody th{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bb-week tbody th small{display:block;color:var(--muted);font-weight:400;overflow:hidden;text-overflow:ellipsis}
.bb-week td.booked{background:#eaf3fb;color:#316d9b}.bb-week td.double{background:#fdecec;color:#a53032;font-weight:700}.bb-week td.free{color:#b6c0cc}.bb-week thead th.today{color:var(--ink);background:#fff8eb}
/* My team on the Branch board (dashboards.js DASH_KINDS.team, branchboard.py): the period chips, then each group's tiles, one column on a phone */
.team-when{margin:6px 0 0;font-size:12px}.team-group{margin-top:14px}.team-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(300px,100%),1fr));gap:10px}
.team-tile{display:flex;flex-direction:column;gap:10px;width:100%;min-width:0;text-align:left;font-weight:400;padding:12px 14px;border:1px solid var(--line);border-left:4px solid #c3cbd4;border-radius:10px;background:white;color:var(--ink)}
.team-tile:hover{background:#f7fbfd;border-color:#b5dcec}.team-tile.tone-red{border-left-color:#d03b3b}.team-tile.tone-amber{border-left-color:#fab219}
.team-who{display:flex;flex-direction:column;gap:1px;min-width:0}.team-who strong{font-size:14px;font-weight:650;overflow-wrap:anywhere}.team-who small{font-size:11px;overflow-wrap:anywhere}
.team-nums{display:grid;grid-template-columns:repeat(auto-fit,minmax(70px,1fr));gap:8px 10px}.team-num{display:flex;flex-direction:column;gap:1px;min-width:0}
.team-label{display:flex;align-items:flex-end;min-height:2.6em;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:600;line-height:1.3}.team-num b{font-size:17px;font-weight:650;line-height:1.25;overflow-wrap:anywhere}
.team-num small{font-size:10px;line-height:1.35}.team-num .team-delta{color:#526174;font-variant-numeric:tabular-nums}.team-num.tone-red b{color:#a6343a}.team-num.tone-amber b{color:#8a5a12}
.team-needs{margin-top:auto;font-size:12px;line-height:1.45;color:var(--muted);border-top:1px solid #f0f2f5;padding-top:8px}.team-need.tone-red{color:#a6343a;font-weight:600}.team-need.tone-amber{color:#8a5a12;font-weight:600}
/* Job schedules (schedule.js; the chart is gantt.js schedGanttSvg): the task grid beside its chart with the same row
   heights (48px header, 36px rows), the task panel, availability and the shared calendar. Bars are placed on their
   calendar grid by schedule.js after each render (data-gc, data-gr), since the page allows no inline styles. */
.sched{padding:14px}.sg-tools{display:flex;flex-wrap:wrap;gap:4px;align-items:center;margin-bottom:12px}.sg-tools .tabs{margin:0 4px 0 0;border:0}.sg-tools button{padding:6px 8px;font-size:12px}.sg-tools .sg-icon-btn{font-size:15px;padding:4px 7px}.sg-tools button.active{background:#e8f5fb;color:#117da8;border-color:#b5dcec}
.sg-search{max-width:190px;min-height:34px;padding:6px 10px}.sg-status{margin-left:auto;font-size:11px;white-space:nowrap}
.sg-split{display:flex;align-items:flex-start;border:1px solid var(--line);border-radius:8px;background:#fff}.sg-left{border-radius:8px 0 0 8px}.sg-chart{border-radius:0 8px 8px 0}.sg-left{flex:0 0 660px;max-width:60%;border-right:1px solid var(--line);min-width:0}
.sg-chart{flex:1 1 auto;min-width:0;overflow-x:auto;overscroll-behavior-x:contain}
.sg-month-now{position:sticky;left:0;height:0;z-index:2}.sg-month-now span{position:absolute;left:0;top:0;height:20px;line-height:20px;padding:0 8px 0 5px;background:#fff;font-weight:700;font-size:12px;color:var(--ink)}.sg-month-now span:empty{display:none}
.sg-row{display:grid;grid-template-columns:22px minmax(150px,1fr) 52px 30px 134px 58px 100px;align-items:center;height:36px;border-bottom:1px solid #edf0f4;font-size:12px;padding-right:6px;background:#fff}
.sg-head{height:48px;background:#f8fafb;font-weight:600;color:#677588;font-size:10px;text-transform:uppercase;letter-spacing:.05em;align-items:end;padding-bottom:7px}
.sg-row input{min-height:0;height:28px;padding:3px 6px;border-color:transparent;background:transparent;border-radius:5px}.sg-row input:hover{border-color:#dbe3ea}.sg-row input:focus{border-color:var(--accent);background:#fff}
.sg-row input[type=checkbox]{height:18px;width:18px}.sg-row input[type=number]{padding-right:0}.sg-row input[type=date]{padding-right:2px}
.sg-name{display:flex;align-items:center;gap:4px;min-width:0}.sg-name input{flex:1;min-width:0;font-weight:500}.sg-ro{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sg-task.in-group .sg-name,.sg-draft.in-group .sg-name{padding-left:20px}.sg-group,.sg-group input{background:#f5f8fa}.sg-group .sg-name input{font-weight:650}.sg-overall{background:#eef3f7}
.sg-draft input::placeholder{color:#94a2b1}.sg-draft .sg-name input{font-style:italic}.sg-drag{cursor:grab;color:#aab5c1;text-align:center;user-select:none;-webkit-user-select:none;font-size:11px;letter-spacing:-2px}
.sg-caret{border:0;background:none;padding:0 2px;min-height:0;width:18px;color:var(--muted)}.sg-mini{padding:0 5px!important;min-height:0!important;font-size:12px;color:var(--muted);font-weight:500}
.sg-count{font-size:10px;background:#e3e9ef;border-radius:8px;padding:1px 6px;color:#566679}.sg-num{font-variant-numeric:tabular-nums}.sg-icon{font-size:10px;color:var(--muted);white-space:nowrap}
.sg-task.is-done .sg-name input,.sg-task.is-done .sg-ro{text-decoration:line-through;color:var(--muted)}
.sg-who{position:relative;display:flex;align-items:center;gap:2px}.sg-pick{border:0;background:none;padding:2px;min-height:0;display:flex;gap:2px;align-items:center;font-weight:500}.sg-pick:hover{background:#eef4f8}
.avatar.sm{width:22px;height:22px;font-size:9px;display:inline-grid;flex:none}.sg-needs{border:1px dashed #b7c3cf;border-radius:10px;padding:1px 6px;font-size:10px;color:var(--muted);white-space:nowrap;max-width:94px;overflow:hidden;text-overflow:ellipsis}
.sg-pop{position:absolute;right:0;top:32px;z-index:12;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 30px #162b4226;padding:8px;width:290px;max-height:340px;overflow:auto}.sg-pop .check{font-size:12px;padding:4px 0}.sg-pop .check.off{opacity:.55}
.sg-add{display:flex;gap:6px;padding:6px}.sg-hint{font-size:10px}.sg-help{font-size:11px;margin:8px 2px 0}
.sg-row.drop-before{box-shadow:inset 0 2px 0 var(--accent)}.sg-row.drop-after{box-shadow:inset 0 -2px 0 var(--accent)}
.sg-svg .gantt-fill{opacity:.45}.sg-svg .sg-progress{fill:#2494c4}.sg-svg .s-confirmed .sg-progress{fill:#172b42}.sg-svg .s-in-progress .sg-progress{fill:#e0a030}.sg-svg .s-done .sg-progress{fill:#3c9a67}
.sg-label{fill:var(--ink);font-size:11px;pointer-events:none}.sg-pct{fill:var(--muted)}.sg-sumbar{fill:#3a4c60}.sg-overall .sg-sumbar{fill:#172b42}
.sg-link{fill:none;stroke:#8a97a6;stroke-width:1.2}.sg-arrowhead{fill:#8a97a6}.sg-dow{fill:var(--muted);font-size:9px}.sg-dow.is-today{fill:var(--accent);font-weight:700}.sg-month-line{stroke:#d5dde5}.sg-head-line{stroke:#dfe5eb}
body.sched-full .sidebar,body.sched-full .topbar,body.sched-full .bottom-note,body.sched-full .main>.heading,body.sched-full .main>.tabs,body.sched-full .job-context{display:none}body.sched-full .layout{grid-template-columns:1fr}body.sched-full .main{max-width:none;padding:12px}
.sched-panel .drawer-head h2{text-transform:uppercase;letter-spacing:.06em;font-size:16px}.sched-panel .field{margin-bottom:10px}.sched-panel .section-label{margin:18px 0 8px}.sched-panel>form>select{margin-top:6px}
.sg-dep,.sg-check{display:flex;align-items:center;gap:8px;padding:4px 0;border-bottom:1px solid #f0f3f6}.sg-dep>span{flex:1}.sg-lag{width:66px;min-height:32px;padding:4px 6px}.sg-lagl{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);white-space:nowrap}
.sg-check input:not([type=checkbox]){flex:1;min-height:34px;padding:6px 8px}.sg-progress-row{display:flex;align-items:center;gap:12px}.sg-progress-row input[type=range]{flex:1;min-height:0;padding:0}.sg-progress-row output{min-width:84px;font-weight:600}
.sg-person{display:inline-flex;align-items:center;gap:6px;background:#f1f5f8;border-radius:16px;padding:2px 4px 2px 2px;font-size:12px}.sg-assign{margin:8px 0}.sg-assign select{width:auto;max-width:260px}
.sg-file{position:relative;display:inline-block}.sg-file .sg-mini{position:absolute;top:-8px;right:-8px;background:#fff;border-radius:50%}.sg-more{margin-top:16px}.sg-more summary{cursor:pointer;color:var(--muted);font-size:12px}.sg-note{font-size:11px;margin:0 0 8px}.sg-dates{display:grid;grid-template-columns:1fr 110px 1fr;gap:12px;margin-top:8px}
.sg-tpl-table{min-width:1460px}.sg-tpl-table input,.sg-tpl-table select{min-height:32px;padding:4px 6px}.sg-tpl-table td{padding:6px;max-width:none}.sg-tpl-table input[type=number],.sg-tpl-table input.n{width:64px;text-align:right}.sg-tpl-table input[name^=key-]{width:70px}
.sg-tpl-table input[name^=name-]{min-width:230px}.sg-tpl-table input[name^=group-]{min-width:130px}.sg-tpl-table input[name^=type-]{min-width:120px}.sg-tpl-table input[name^=deps-]{min-width:120px}.sg-tpl-table select{min-width:170px}.sg-tpl-table input[name^=checks-]{min-width:220px}
.sg-avail{margin-top:16px;border-top:1px solid var(--line);padding-top:12px}.sg-avail-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}.sg-avail-head h3{text-transform:uppercase;letter-spacing:.08em;font-size:12px;margin:0}
.sg-cal-tools .tabs{margin:0;border:0}.sg-cal-tools .tabs button{padding:8px 12px}.sg-cal-tools strong{margin-left:4px}
.av-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:8px;background:#fff;margin:10px 0}.av{min-width:900px}.av.month{min-width:1180px}
.av-row{display:grid;grid-auto-rows:minmax(42px,auto);border-bottom:1px solid #edf0f4}.av-row:last-child{border-bottom:0}
.av.c7 .av-row{grid-template-columns:220px repeat(7,minmax(96px,1fr))}.av.c28 .av-row{grid-template-columns:200px repeat(28,minmax(32px,1fr))}.av.c29 .av-row{grid-template-columns:200px repeat(29,minmax(32px,1fr))}.av.c30 .av-row{grid-template-columns:200px repeat(30,minmax(32px,1fr))}.av.c31 .av-row{grid-template-columns:200px repeat(31,minmax(32px,1fr))}
.av-head{background:#f8fafb;grid-auto-rows:auto;position:sticky;top:0;z-index:3}.av-day{padding:6px 2px;text-align:center;font-size:10px;color:var(--muted);border-left:1px solid #edf0f4;letter-spacing:.04em}.av-day b{display:block;font-size:14px;color:var(--ink);letter-spacing:0}
.av-day.weekend{background:#f1f4f7}.av-day.today b{color:var(--accent)}.av-head .av-who{text-transform:uppercase;font-size:10px;letter-spacing:.08em;color:var(--muted);align-items:end;background:#f8fafb}
.av-who{grid-column:1;display:flex;gap:8px;align-items:flex-start;padding:8px 10px;border-right:1px solid #edf0f4;background:#fff;position:sticky;left:0;z-index:2;min-width:0}.av-who>span:last-child{min-width:0}.av-who strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-who small{display:block;font-size:10px;line-height:1.35}.av-who .av-dbl{color:#b3261e;font-weight:600}
.av-cell{border-left:1px solid #edf0f4}.av-cell.weekend{background:#f6f8fa}.av-cell.today{background:#eef7fc}.av-cell.double{background:#fde4e2;box-shadow:inset 0 3px 0 #d9534f}.av-who .link{white-space:normal;text-align:left}.av-who .link strong{white-space:normal}
.av-bar{z-index:1;margin:3px 2px;border:0;border-left:3px solid var(--c,#2494c4);border-radius:5px;background:var(--b,#e3f1f9);padding:3px 6px;text-align:left;min-height:0;font-weight:500;font-size:11px;overflow:hidden;white-space:nowrap;line-height:1.3;color:var(--ink);min-width:0}
.av-bar b{display:block;overflow:hidden;text-overflow:ellipsis;font-weight:600}.av-bar small{display:block;overflow:hidden;text-overflow:ellipsis;color:#526174;font-size:10px}.av.month .av-bar{padding:2px 4px}.av.month .av-bar small{display:none}
.av-bar.this-job{box-shadow:inset 0 0 0 1.5px var(--c)}.av-bar.cut-start{border-left-style:dashed}.av-bar.done{opacity:.55}.av-bar.todo{--c:#8a5cc2;--b:#f1eafa}
.av-bar.busy{--c:#8a97a6;--b:repeating-linear-gradient(45deg,#eef1f4,#eef1f4 6px,#e4e9ee 6px,#e4e9ee 12px);color:var(--muted)}.av-empty{padding:16px;margin:0}
.jc0{--c:#2494c4;--b:#e3f1f9}.jc1{--c:#3c9a67;--b:#e4f3ea}.jc2{--c:#c2760d;--b:#fcf0dc}.jc3{--c:#7a4fbf;--b:#efe8fa}.jc4{--c:#b33a80;--b:#f8e4f0}.jc5{--c:#0e8c8c;--b:#dff3f3}.jc6{--c:#5d6d7e;--b:#eaeef2}.jc7{--c:#a0522d;--b:#f6e9e2}
.bs-planned{--c:#2494c4;--b:#e3f1f9}.bs-confirmed{--c:#172b42;--b:#e6eaf0}.bs-in-progress{--c:#e0a030;--b:#fcf1dc}.bs-done{--c:#3c9a67;--b:#e4f3ea}
@media(max-width:720px){.sched{padding:10px}.sg-split{display:block}.sg-left{max-width:none;border-right:0;border-bottom:1px solid var(--line)}.sg-head{display:none}.sg-search{max-width:none;flex:1 1 100%}
 .sg-row{grid-template-columns:30px minmax(0,1fr) 64px 76px;grid-template-areas:"done name name who" "drag start days pct";height:auto;min-height:46px;padding:6px 6px 6px 0;row-gap:2px}
 .sg-row>:nth-child(1){grid-area:drag}.sg-row>:nth-child(2){grid-area:name}.sg-row>:nth-child(3){grid-area:pct}.sg-row>:nth-child(4){grid-area:done;justify-self:center}.sg-row>:nth-child(5){grid-area:start}.sg-row>:nth-child(6){grid-area:days}.sg-row>:nth-child(7){grid-area:who;justify-self:end}
 .sg-row input{height:34px}.sg-task>:nth-child(3)::after{content:'%';color:var(--muted);margin-left:2px}.sg-task>:nth-child(6)::after,.sg-draft>:nth-child(6)::after{content:'d';color:var(--muted);margin-left:2px}.sg-task>:nth-child(3),.sg-task>:nth-child(6),.sg-draft>:nth-child(6){display:flex;align-items:center}.sg-task.in-group .sg-name,.sg-draft.in-group .sg-name{padding-left:10px}.sg-pop{width:min(290px,86vw)}.av.c7 .av-row{grid-template-columns:128px repeat(7,minmax(86px,1fr))}.av-who{padding:6px}.av-who .avatar{display:none}}
/* Dispatch (schedule.js): the board of crews and people by day, its blocks coloured by task type, the side panel, bulk
   edit, My week and the list of hours. Blocks and cells are placed on the board's grid after each render (data-gc,
   data-gr), as the availability rows are. */
.ty0{--c:#2494c4;--b:#e3f1f9}.ty1{--c:#0e8c8c;--b:#dff3f3}.ty2{--c:#c2760d;--b:#fcf0dc}.ty3{--c:#b33a80;--b:#f8e4f0}.ty4{--c:#7a4fbf;--b:#efe8fa}.ty5{--c:#3c9a67;--b:#e4f3ea}.ty6{--c:#3f51b5;--b:#e8eaf8}.ty7{--c:#5d6d7e;--b:#eaeef2}.ty8{--c:#8a97a6;--b:#f1f4f7}
.dsp-tools{justify-content:space-between;margin-top:-4px}.dsp-tools .sg-icon-btn{font-size:15px;padding:4px 8px}.dsp-tools button.active{background:#fff3dc;color:#946422;border-color:#f0d9a6}
.dsp{min-width:1000px}.dsp.month{min-width:1260px}.dsp-row{display:grid;grid-auto-rows:minmax(30px,auto);border-bottom:1px solid #edf0f4}.dsp-row:last-child{border-bottom:0}
.dsp.c7 .dsp-row{grid-template-columns:220px repeat(7,minmax(110px,1fr))}.dsp.c28 .dsp-row{grid-template-columns:190px repeat(28,minmax(34px,1fr))}.dsp.c29 .dsp-row{grid-template-columns:190px repeat(29,minmax(34px,1fr))}.dsp.c30 .dsp-row{grid-template-columns:190px repeat(30,minmax(34px,1fr))}.dsp.c31 .dsp-row{grid-template-columns:190px repeat(31,minmax(34px,1fr))}
.dsp-head{background:#f8fafb;position:sticky;top:0;z-index:4}.dsp-day{padding:6px 2px;text-align:center;font-size:10px;color:var(--muted);border-left:1px solid #edf0f4;letter-spacing:.04em}.dsp-day b{display:block;font-size:14px;color:var(--ink);letter-spacing:0}.dsp-day.weekend{background:#f1f4f7}.dsp-day.today b{color:var(--accent)}
.dsp-who{grid-column:1;display:flex;gap:8px;align-items:flex-start;padding:7px 10px;border-right:1px solid #edf0f4;background:#fff;position:sticky;left:0;z-index:3;min-width:0}.dsp-who>span{min-width:0}.dsp-who strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dsp-who small{display:block;font-size:10px;line-height:1.35}.dsp-who .av-dbl{color:#b3261e;font-weight:600}.dsp-head .dsp-who{background:#f8fafb;text-transform:uppercase;font-size:10px;letter-spacing:.08em;color:var(--muted);align-items:end}
.dsp-group{background:#f3f6f9}.dsp-group .dsp-who{background:#f3f6f9;align-items:center}.dsp-group .dsp-who strong{white-space:normal}.dsp-group.is-crew,.dsp-group.is-crew .dsp-who{background:#eaf3f9}.dsp-group .sg-mini{margin-left:auto}
.dsp-sum{padding:4px 6px;font-size:11px;border-left:1px solid #e4e9ee;overflow:hidden;min-width:0;line-height:1.25}.dsp-sum b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}.dsp-sum small{display:block;color:var(--muted);font-size:10px;white-space:nowrap}.dsp-sum.weekend{background:#edf1f5}
.dsp-cell{border-left:1px solid #edf0f4;min-height:34px}.dsp-cell.weekend{background:#f6f8fa}.dsp-cell.today{background:#eef7fc}.dsp-cell.double{background:#fde4e2;box-shadow:inset 0 3px 0 #d9534f}.dsp-cell.drop{background:#dff1e6;box-shadow:inset 0 0 0 2px #3c9a67}
.dsp-person.needs .dsp-who{background:#fffaf0}.avatar.needs{background:#fde4e2;color:#b3261e}
.dsp-block{z-index:1;position:relative;margin:3px 2px;border:0;border-left:4px solid var(--c,#8a97a6);border-radius:5px;background:var(--b,#f1f4f7);padding:3px 16px 3px 6px;text-align:left;min-height:0;font-size:11px;font-weight:500;overflow:hidden;white-space:nowrap;line-height:1.3;color:var(--ink);min-width:0;cursor:grab;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:manipulation}
.dsp-block b{display:block;overflow:hidden;text-overflow:ellipsis;font-weight:600}.dsp-block small{display:block;overflow:hidden;text-overflow:ellipsis;color:#526174;font-size:10px}.dsp-block:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.dsp-block.done{opacity:.55}.dsp-block.cut-start{border-left-style:dashed}.dsp-block.saving{opacity:.75;outline:2px dashed var(--c)}.dsp-block.dsp-dragging{opacity:.35}.dsp-block.todo{--c:#8a5cc2;--b:#f1eafa;cursor:pointer}
.dsp-block.busy{--c:#8a97a6;background:repeating-linear-gradient(45deg,#eef1f4,#eef1f4 6px,#e4e9ee 6px,#e4e9ee 12px);color:var(--muted);cursor:default}
.dsp.picking .dsp-block{cursor:pointer}.dsp-block.picked{box-shadow:inset 0 0 0 2px #172b42;background:#fff;padding-left:22px}.dsp-block.picked::before{content:'✔';position:absolute;left:5px;top:50%;transform:translateY(-50%);width:13px;height:13px;border-radius:3px;background:#172b42;color:#fff;font-size:9px;line-height:13px;text-align:center}
.dsp-hot,.dsp-sent{position:absolute;right:4px;font-style:normal;font-weight:800;font-size:11px}.dsp-hot{top:2px;color:#b3261e}.dsp-sent{bottom:2px;color:#3c9a67}
.dsp-ghost{position:fixed;left:0;top:0;z-index:60;pointer-events:none;opacity:.92;margin:0;box-shadow:0 8px 20px #162b4240}
.dsp-free{align-self:center;margin:2px 4px;font-size:10px;color:#3c7a57;text-align:center;border:1px dashed #b9dcc6;border-radius:5px;padding:2px 4px;background:#f4fbf6;line-height:1.2;pointer-events:none;white-space:nowrap;overflow:hidden}.dsp-free small{display:block;font-weight:700}
.dsp.month .dsp-free{font-size:0;padding:1px}.dsp.month .dsp-free small{font-size:9px}.dsp.month .dsp-block{padding:2px 4px;font-size:10px}.dsp.month .dsp-hot,.dsp.month .dsp-sent{display:none}
.dsp-legend{display:flex;flex-wrap:wrap;gap:4px;margin:0 0 8px;align-items:center}.dsp-key{display:inline-flex;align-items:center;gap:5px;font-size:11px;padding:1px 8px;border-radius:9px;background:var(--b,#f1f4f7);white-space:nowrap}.dsp-key::before{content:'';width:8px;height:8px;border-radius:2px;background:var(--c,#8a97a6)}
.dsp-key.sent,.dsp-key.hot{background:#fff;border:1px solid var(--line)}.dsp-key.sent{color:#2d7a50}.dsp-key.hot{color:#b3261e}.dsp-key.sent::before,.dsp-key.hot::before{display:none}.pill.hot{background:#fde4e2;color:#b3261e}
.dsp-bulk{position:sticky;top:0;z-index:6;display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;background:#fff8e6;border:1px solid #f0d9a6;border-radius:8px;padding:8px 10px;margin:8px 0}.dsp-bulk-g{display:inline-flex;gap:4px;align-items:center;flex-wrap:wrap}
.dsp-bulk button{padding:6px 9px;font-size:12px}.dsp-bulk select,.dsp-bulk input{min-height:32px;padding:4px 6px;width:auto;max-width:200px}
.dsp-panel .dsp-p-job{margin:6px 0 2px;font-size:15px}.dsp-panel .dsp-p-job small{color:var(--muted);font-size:12px}.dsp-p-line{margin:5px 0}.sg-map{text-decoration:none}.sg-map:hover{text-decoration:underline}
.dsp-people .check{display:flex;gap:6px;align-items:center;padding:4px 0;font-size:13px}.dsp-people small{color:var(--muted)}.dsp-moveto{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end}.dsp-moveto .field{margin:0}
.sg-time{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}.sg-check .grow{flex:1;min-width:0}
.mw{display:grid;gap:4px}.mw-day h3{font-size:14px;margin:12px 0 6px}.mw-day h3 small{color:var(--accent);font-weight:700;margin-left:4px}.mw-day.today h3{color:var(--accent)}.mw-day.past{opacity:.72}.mw-none{margin:0 0 6px}
.mw-item{display:grid;grid-template-columns:86px minmax(0,1fr) auto;gap:10px;align-items:start;border:1px solid var(--line);border-left:4px solid var(--c,#8a97a6);border-radius:8px;padding:10px 12px;background:#fff;margin-bottom:8px}
.mw-item.todo{--c:#8a5cc2}.mw-item.done{opacity:.6}.mw-time{font-weight:700;font-size:13px;line-height:1.3}.mw-time small{display:block;font-weight:500;color:var(--muted);font-size:11px}.mw-what p{margin:3px 0}.mw-what .link{padding:0;min-height:0}
.mw-note{background:#fff8e6;border-radius:6px;padding:4px 8px;font-size:13px}.mw-item.mini{padding:6px 12px;align-items:center}.mw-item.mini .mw-what .muted{font-size:12px}.mw.compact .mw-item{padding:8px 10px;grid-template-columns:70px minmax(0,1fr)}.mw.compact .mw-item>.actions{grid-column:2}.mw.compact .mw-day h3{margin-top:6px}
.sg-listwrap .table-wrap{margin:0}.sg-list td,.sg-list th{white-space:nowrap;padding:6px 8px}.sg-list input{min-height:30px;padding:3px 6px}.sg-list input.n{width:58px;text-align:right}.sg-list input[type=date]{width:128px}.sg-list td[data-col=name]{min-width:230px}.sg-list td[data-col=name] input{width:calc(100% - 34px)}
.sg-list tr.in-group td[data-col=name]{padding-left:22px}.sg-list tr.is-done td[data-col=name] input{text-decoration:line-through;color:var(--muted)}.sg-lgroup td{background:#f5f8fa;font-weight:600}.sg-list tfoot td{font-weight:700;background:#eef3f7}.sg-list td[data-col=budget],.sg-list td[data-col=actual],.sg-list td[data-col=forecast]{text-align:right}
@media(max-width:720px){.dsp.c7 .dsp-row{grid-template-columns:118px repeat(7,minmax(92px,1fr))}.dsp-who{padding:6px}.dsp-who .avatar{display:none}.dsp{min-width:780px}
 .dsp-group .dsp-who strong{font-size:12px;overflow:visible}.dsp-group .dsp-who small,.dsp-group .dsp-who .sg-mini{display:none}.dsp-group .sg-caret{width:14px}
 .mw-item{grid-template-columns:1fr}.mw-item>.actions{justify-content:flex-start}.mw.compact .mw-item{grid-template-columns:1fr}.mw.compact .mw-item>.actions{grid-column:1}.dsp-bulk{position:static}}
/* Time (time.js): the clock in the top bar, on Home and on jobs, the Time page, the timesheet and the time reports */
.clock-pill{display:inline-flex;align-items:center;gap:6px;border:1px solid #bfe3cf;background:#effaf3;color:#1f6b44;border-radius:999px;padding:6px 12px;font-size:12px;white-space:nowrap}
.clock-pill b{font-variant-numeric:tabular-nums}.clock-pill.on-break{border-color:#f1d7a8;background:#fff7e8;color:#8a5a12}
.clock-dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#2f9e62;box-shadow:0 0 0 3px #2f9e6226;flex-shrink:0}.on-break .clock-dot{background:#d99a2b;box-shadow:0 0 0 3px #d99a2b26}
@media(prefers-reduced-motion:no-preference){.clock-dot{animation:clock-pulse 2s ease-in-out infinite}}@keyframes clock-pulse{50%{box-shadow:0 0 0 6px #2f9e6210}}
.clock-panel{border-left:4px solid var(--line)}.clock-panel.on{border-left-color:#2f9e62}.clock-panel.on-break{border-left-color:#d99a2b}.clock-panel.off{border-left-color:var(--accent)}
.clock-head{display:flex;align-items:center;gap:14px}.clock-head small{display:block;font-size:12px}.clock-big{display:block;font-size:40px;font-weight:650;letter-spacing:-1px;line-height:1.1;color:var(--ink)}
.clock-job{font-size:15px;color:var(--ink);margin:12px 0 2px}.clock-job button.link{font-size:15px}.clock-actions{margin-top:14px}.clock-week{margin-top:12px}
button.big{min-height:52px;padding:12px 20px;font-size:15px}
.clock-form{display:grid;gap:12px;margin-top:4px}.clock-form .field{margin:0}.clock-in{min-height:52px;font-size:16px;padding:12px 28px;justify-self:start}
.clock-fields{display:grid;grid-template-columns:2fr 1.4fr 1.4fr;gap:12px;align-items:end}.clock-fields.mode-shop{grid-template-columns:1fr 1.4fr 2fr}#drawer .clock-fields{grid-template-columns:1fr}
.clock-modes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.clock-mode{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;text-align:left;min-height:56px;padding:9px 14px;border:1px solid #ced7e1;border-radius:var(--radius);background:#fff;color:var(--ink)}
.clock-mode strong{font-size:14px}.clock-mode small{color:var(--muted);font-size:11px;font-weight:400}.clock-mode.on{border-color:var(--accent);background:#eef7fb;box-shadow:inset 0 0 0 1px var(--accent)}
.clock-suggest{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin:10px 0 12px}.clock-suggest span{flex:1 1 220px}
.clock-quick{margin-top:14px}.clock-quick>p{margin:0 0 6px;font-size:12px}.quick-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.quick-grid button{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;min-height:52px;padding:8px 12px;min-width:0}.quick-grid small{color:var(--muted);font-size:11px;font-weight:400;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.time-split{display:flex;flex-wrap:wrap;gap:2px 14px;font-size:12px;color:var(--muted)}.time-split b{color:var(--ink);font-weight:650}.sheet-day .time-split{margin:0 0 4px}.time-split-line{display:grid;gap:4px;margin:12px 0 4px}
.split-shop b,.split-shopJob b{color:#5b3fa6}.shop-mark{display:inline-block;border-radius:5px;background:#f0ebfa;color:#5b3fa6;font-size:10px;font-weight:700;padding:0 4px}.crew-row.in-shop strong:first-child{color:#5b3fa6}
.sheet-type{display:none}#time-switch-form .clock-fields{margin-top:12px}.time-shop{padding-bottom:14px}.time-shop .panel-head{padding:14px 16px 0;margin:0}.stats.compact.time-shop-stats{padding:12px 16px 4px;grid-template-columns:repeat(3,minmax(0,1fr))}.time-shop .time-shop-h{font-size:13px;margin:14px 16px 6px}.time-week td[data-col=shop] small{display:block;font-size:10px;color:var(--muted);white-space:nowrap}
.time-shop-pair{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}.time-shop-days{margin:10px 16px 0}.time-shop-days summary{cursor:pointer;font-weight:650}
#time-entry-form:not(.is-shop) .shop-only,#time-entry-form.is-shop .job-only,#time-entry-form:not(.is-work) .work-only{display:none}#time-shop-form>.wide{grid-column:1/-1}.shop-codes{border:1px solid var(--line);border-radius:var(--radius);padding:10px 14px}.shop-codes legend{font-size:12px;color:#566679;padding:0 4px}
.sign-notice{margin:12px 0 0}.sign-notice button.link{font-weight:650}
.time-job-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:-4px 0 16px;padding:10px 14px;background:white;border:1px solid var(--line);border-radius:var(--radius)}.time-job-bar.on{border-color:#bfe3cf;background:#f4fbf7}.time-job-bar.on-break{border-color:#f1d7a8;background:#fffaf0}
.crew-row.on-break strong{color:#8a5a12}
.time-filters{justify-content:flex-start;align-items:flex-end;gap:10px}.time-filters .field{margin:0;min-width:130px;flex:0 1 auto}.time-filters .field>span{font-size:11px}.time-filters .field.on select{border-color:var(--accent);background:#f2f9fc}.time-filters .field.grow{flex:1 1 180px}
.time-filters select,.time-filters input{min-height:36px;padding:7px 10px}
.time-stats{grid-template-columns:repeat(4,minmax(0,1fr))}
.time-table tr.running td{background:#f4fbf7}.ot{display:inline-block;border-radius:6px;background:#fff1e0;color:#9a4d00;font-size:10px;font-weight:700;padding:1px 5px}.ok{color:#2d7350;font-weight:700}
.flag{display:inline-block;border-radius:6px;background:#fff3dc;color:#8a5a12;font-size:10px;font-weight:650;padding:1px 6px;margin-left:4px;white-space:nowrap}.flag-noRate,.flag-forgot{background:#fde8e8;color:#a6343a}.flag-fixed{background:#eaf3fb;color:#316d9b}
.table-foot{margin:0;padding:10px 16px;border-top:1px solid var(--line);font-size:12px}
.bulk-bar{position:sticky;top:0;z-index:5;background:var(--canvas);padding:8px 0;margin:8px 0}
.week-nav{justify-content:space-between}.time-week td{text-align:right}.time-week td[data-col=person]{text-align:left}.time-week th,.time-week td{padding-left:10px;padding-right:10px}  /* a week and its shop hours fit at 1440 */
.timesheet .period-nav strong{min-width:150px;text-align:center}.sheet-days{display:grid;gap:0;margin:12px 0}.sheet-day{padding:10px 0;border-bottom:1px solid var(--line)}.sheet-day.empty{opacity:.7}
.sheet-date{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:4px}.sheet-entry{display:grid;grid-template-columns:130px 90px 90px minmax(0,1fr) auto;gap:10px;align-items:center;padding:4px 0;font-size:12px}
.sign-box{border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;margin-top:12px;display:grid;gap:8px;justify-items:start}.sign-box .check{font-weight:650;font-size:14px;display:flex;gap:8px;align-items:center}.sign-ok{border-left-color:#2f9e62}
.who-chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:999px;padding:2px 10px 2px 2px;margin:2px 4px 2px 0;font-size:12px;white-space:nowrap}
.time-items td[data-col=people]{white-space:normal}.time-group .panel-head{padding:14px 16px 0;margin:0}
.time-now{display:flex;gap:6px;align-items:center}.time-now input{flex:1}
@media(max-width:1000px){.clock-fields,.clock-fields.mode-shop{grid-template-columns:1fr 1fr}.time-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.quick-grid{grid-template-columns:1fr 1fr}.time-shop-pair{grid-template-columns:1fr}}
@media(max-width:720px){.clock-pill .clock-words{display:none}.clock-pill{padding:6px 9px}.clock-fields,.clock-fields.mode-shop{grid-template-columns:1fr}.clock-in{justify-self:stretch}.clock-modes{grid-template-columns:1fr;gap:6px}.clock-mode{min-height:48px;padding:7px 12px}.stats.compact.time-shop-stats{grid-template-columns:1fr}.clock-actions{display:grid;grid-template-columns:1fr 1fr}.clock-actions button{width:100%}.clock-actions button.quiet{grid-column:auto}
 .clock-big{font-size:34px}.time-job-bar button{flex:1 1 auto}.time-filters .field{flex:1 1 45%;min-width:0}.sheet-entry{grid-template-columns:1fr auto;row-gap:2px}.sheet-entry>span:nth-child(3){display:none}.sheet-type{display:block;color:var(--muted);font-size:11px}.week-nav{flex-direction:column;align-items:flex-start}}
/* Settings → Cost charts (costcharts.js): a chart's grid, Try a size and the import preview */
.cc-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}.cc-head h2{margin:6px 0 4px}.cc-title{min-width:0;flex:1 1 380px}.cc-title>button{padding-left:0}.cc-dirty{color:#946422;font-weight:600}
.cc-try{display:grid;grid-template-columns:repeat(3,minmax(0,1fr)) auto;gap:12px;align-items:end}.cc-try .cc-flags{grid-column:1/-1}.cc-result{margin-top:12px}.cc-result strong{font-size:22px}.cc-result small{display:block;margin-top:4px}
.cc-wrap{position:relative;z-index:0}table.cc-grid{width:auto}table.cc-grid th{padding:8px 6px;text-align:center}table.cc-grid th:first-child{left:0;z-index:4}table.cc-grid td{padding:4px 6px;text-align:right;white-space:nowrap}table.cc-grid input{width:76px;min-height:30px;padding:4px 6px;text-align:right;border-radius:6px}
table.cc-grid td[data-col=h],table.cc-grid tr.cc-wrow td{background:#f8fafb}table.cc-grid td:first-child{position:sticky;left:0;z-index:1;text-align:left}.cc-corner{color:var(--muted);font-size:11px}.cc-none{color:#b0b8c2}
table.cc-grid td.cc-hit{background:#e8f5fb;box-shadow:inset 0 0 0 2px var(--accent);font-weight:700}table.cc-grid td.cc-bad{background:#fdecec;color:#a53032;font-weight:600}
.cc-adders td{padding:5px 6px}.cc-adders input,.cc-adders select{min-height:32px;padding:5px 7px;border-radius:6px}.cc-adders input.n{width:90px;text-align:right}.cc-adders td[data-col=label] input{min-width:170px}.cc-adders td[data-col=appliesTo] input{min-width:190px}
.cc-save{margin:0 0 16px}.cc-how{margin:4px 0 12px}.cc-how input{width:auto;min-height:0}.cc-preview{margin:12px 0}
td.cc-note{min-width:220px}
@media(max-width:720px){.cc-try{grid-template-columns:1fr 1fr}.cc-try>button,.cc-try>label:nth-child(3){grid-column:1/-1}table.cc-grid input{width:64px}}
/* The bid form (bids.js): parts in boxes, quick due dates, dollar amounts */
.bid-form{display:flex;flex-direction:column;gap:14px}.bid-form fieldset{border:1px solid var(--line);border-radius:10px;padding:10px 12px 12px;margin:0;min-width:0}.bid-form legend{font-size:12px;color:#566679;padding:0 4px}.bid-form .quick-dates{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}.bid-form .quick-dates button{min-height:0;padding:3px 9px;font-size:12px}.money-in{position:relative;display:block}.money-in::before{content:'$';position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--muted);pointer-events:none}.money-in input{padding-left:22px;width:100%}input.bad{border-color:#c8454a;background:#fff5f5}.money-hint{color:#b3261e}.bid-after{border:1px solid var(--line);border-radius:10px;padding:8px 12px}.bid-after summary{cursor:pointer;font-size:13px;font-weight:600}.bid-after[open] summary{margin-bottom:8px}.bid-form>.field{margin:0}
.bid-form .quick-dates button{border:1px solid var(--line);border-radius:14px}.bid-form .form-actions{flex-wrap:wrap}

/* The job's budget (budget.js): JobTread's Budget tab. A toolbar, then the budget as a spreadsheet in bands whose
   groups open and close, the name column held at the left and the totals at the bottom while it scrolls. */
.bud-bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:10px}.bud-pick{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}
.bud-pick select{width:auto;min-height:34px;padding:5px 8px;font-weight:600;color:var(--ink)}.bud-only{font-size:13px;margin-right:4px}.bud-search{width:220px;min-height:34px;padding:6px 10px}
.bud-tools{display:flex;flex-wrap:wrap;gap:2px}.bud-tools button,.bud-gear{padding:6px 9px;font-weight:500;font-size:12px;min-height:0}.bud-gear.on{background:#e8f5fb}.bud-status{margin-left:auto;font-size:11px;color:var(--muted)}
.bud-settings{display:flex;flex-wrap:wrap;gap:4px 18px;padding:6px 12px;border:1px dashed var(--line);border-radius:8px;margin-bottom:10px}.bud-notes{font-size:11px;margin:0 0 10px;line-height:1.5}
.bud-wrap{border:1px solid var(--line);border-radius:8px}.bud-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
table.bud-grid th{padding:8px 8px;font-size:11px}table.bud-grid td{padding:3px 6px;white-space:nowrap;max-width:none;border-top:1px solid #eef1f4}.bud-grid .r{text-align:right;font-variant-numeric:tabular-nums}.bud-grid .bud-mid{text-align:center}
.bud-grid .bud-bands th{position:static;font-size:10px;letter-spacing:.08em;text-align:center;padding:5px 8px;color:#4a5668;border-bottom:1px solid var(--line)}
.bud-grid .band-details{background:#f3f5f8}.bud-grid .band-estimating{background:#edf5fb}.bud-grid .band-costing{background:#fdf5e7}.bud-grid .band-profit{background:#edf7f0}.bud-grid .band-invoicing{background:#f3effa}
.bud-grid td.bud-name{position:sticky;left:0;z-index:1;background:white}.bud-grid th.bud-name{left:0;z-index:3}.bud-namebox{display:flex;align-items:center;gap:4px;min-width:230px}
.bud-d1{padding-left:16px}.bud-d2{padding-left:32px}.bud-d3{padding-left:48px}.bud-d4{padding-left:64px}.bud-d5{padding-left:80px}.bud-d6{padding-left:96px}.bud-d7{padding-left:112px}.bud-d8{padding-left:128px}
.bud-tog{display:inline-grid;place-items:center;width:22px;min-width:22px;height:22px;min-height:0;padding:0;border:0;background:none;color:var(--muted);font-size:12px}
.bud-grid input:not([type=checkbox]){min-height:28px;padding:3px 6px;border:1px solid transparent;border-radius:4px;background:transparent;min-width:70px}.bud-grid input:not([type=checkbox]):hover{border-color:#d5dde6}
.bud-grid input:not([type=checkbox]):focus{border-color:var(--accent);background:white}.bud-grid input.n{text-align:right;width:108px}.bud-grid td[data-col=description] input{min-width:170px}.bud-namebox input{min-width:180px}
.bud-grid tr.bud-group td{background:#f6f8fa;font-weight:600;border-top:1px solid #e1e6ed}.bud-group input{font-weight:600}.bud-count{display:inline;font-weight:400;margin:0 0 0 6px;white-space:nowrap}
.bud-grid tr.bud-archived td{opacity:.55}.bud-grid tr.bud-other td{background:#fffaf0}.bud-other em{font-style:normal;font-weight:600}
.bud-grid tr.bud-line td{background:#fbfcfd;font-size:11px;border-top:1px dashed #edf0f3;color:#526174}.bud-lineinfo small{display:inline;margin:0 0 0 4px}.bud-grid tr.bud-uncounted td{color:var(--muted)}
.bud-who{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:#e8eef5;font-size:9px;font-weight:700;color:#334155}.bud-ok{color:#2d7350;font-weight:700}.bud-doc{font-size:12px}
button.bud-dig{color:inherit;font-weight:500;text-decoration:underline dotted #9aa6b5;text-underline-offset:3px}.bud-i{color:#9aa6b5;font-size:10px;font-weight:400}
.bud-grid tfoot td{position:sticky;bottom:0;z-index:1;background:#f1f5f9;font-weight:700;border-top:2px solid #d5dde6}.bud-grid tfoot td.bud-name{z-index:2;background:#f1f5f9}.bud-grid tfoot small{display:inline;font-weight:500}.bud-tax{display:block!important;font-size:10px}.bud-grid tfoot input.bud-tot{font-weight:700}.bud-grid tr.bud-group input.n,.bud-grid tfoot input.bud-tot{width:100%;min-width:0;padding-left:2px;padding-right:4px}.bud-grid tfoot label.bud-tax{display:block!important;text-align:right;font-weight:500}.bud-grid tfoot label.bud-tax input.bud-tot{display:block;width:100%;min-width:0;font-size:12px;min-height:22px;padding:1px 6px;font-weight:600}
.bud-num{color:#98a2b3;width:32px;text-align:right;font-size:11px}.bud-grid .bud-hand{width:18px;padding:0}.bud-drag{cursor:grab;color:#aab4c1;user-select:none;padding:4px 3px;letter-spacing:-2px}
.bud-act{white-space:nowrap;text-align:right;width:1%}.bud-more,.bud-plus{padding:2px 8px;min-height:0}.bud-grid tr.bud-drop-before td{box-shadow:inset 0 2px 0 var(--accent)}.bud-grid tr.bud-drop-into td{background:#e3f2fa}
.bud-addbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px}.bud-addbar button{font-weight:600}.bud-cat{max-height:45vh;overflow:auto;display:grid;gap:0;border:1px solid var(--line);border-radius:8px;padding:4px 10px}
.bud-cat small{display:block}.bud-row-actions{margin-top:16px}.bud-history .queue-row p{margin:2px 0;font-size:12px;color:var(--ink)}
.budget.bud-full{position:fixed;inset:0;z-index:25;margin:0;border-radius:0;overflow:auto}.bud-full .bud-wrap{max-height:calc(100vh - 150px);overflow:auto}body.bud-fullscreen{overflow:hidden}
@media(max-width:720px){.bud-grid .bud-c,.bud-grid .bud-bands{display:none}.bud-grid td.bud-name{position:static}.bud-namebox{min-width:0}.bud-namebox input{min-width:0;width:100%}.bud-grid td{white-space:normal}
 .bud-grid input:not([type=checkbox]){min-width:0}.bud-grid input.n{width:88px}.bud-search{width:100%}.bud-pick select{max-width:150px}.bud-status{margin-left:0}.bud-count{display:none}
 .bud-d1{padding-left:10px}.bud-d2{padding-left:20px}.bud-d3{padding-left:30px}.bud-d4,.bud-d5,.bud-d6,.bud-d7,.bud-d8{padding-left:40px}.budget{padding:12px}}
/* Budget alerts, the Overview's project financials and Reports → Work in progress (budget.js). Off-track rows use the
   warning status color with a ⚠ and its words; the charts use the charts' blue and a lighter step of it for budgets. */
.bud-alerts{margin:0 0 10px}.bud-alerts ul{margin:4px 0;padding-left:18px}.bud-alerts li{margin:2px 0;color:var(--ink)}.bud-flag{color:#b54708;font-weight:700;cursor:help;margin-left:4px}
.bud-grid tr.bud-warn td,.bud-grid tr.bud-warn td.bud-name{background:#fff8eb}.bud-grid tr.bud-warn td.bud-name{box-shadow:inset 3px 0 0 #dc8a1e}.bud-grid tfoot tr.bud-warn td,.bud-grid tfoot tr.bud-warn td.bud-name{background:#fdf1dc}
.bud-grid input.pct{text-align:right;width:90px}.bud-grid td[data-col=costCode] input{min-width:200px}.bud-grid td[data-col=costType] input{min-width:130px}.bud-busy{opacity:.6;transition:opacity .2s}
.bud-fin{margin:0 0 12px}.bud-fin-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:2px 0 8px}.bud-fin-head h3{margin:0;font-size:14px}.bud-fin.closed{margin-bottom:6px}
.stats.bud-tiles{grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:0 0 12px}.bud-tile.stat{padding:12px 14px}.bud-tile strong{font-size:20px;margin:6px 0 4px}.bud-tile small{display:block;line-height:1.4}
.bud-fin-grid{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:12px;margin-bottom:12px}.bud-fin-panel{border:1px solid var(--line);border-radius:8px;padding:12px 14px;min-width:0;background:white}
.bud-fin-panel h4{margin:0 0 8px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.bud-bars>svg{width:100%;height:auto;display:block;max-width:480px}.bud-bars .chart-legend{margin:0 0 6px}.bud-bars .chart-legend svg{width:10px;height:10px;flex:none}.bud-bars .bud-none{fill:var(--muted)}
.bud-rings{display:grid;grid-template-columns:1fr 1fr;gap:10px}.bud-ring{margin:0;display:flex;align-items:center;gap:10px;min-width:0}.bud-ring svg{width:84px;height:84px;flex:none}.bud-ring-pct{font-size:15px;font-weight:650;fill:var(--ink)}
.bud-ring figcaption{display:grid;gap:2px;font-size:12px;min-width:0}.bud-ring figcaption span{font-weight:600;font-size:14px}.bud-ring figcaption small{color:var(--muted);font-size:11px;line-height:1.35}
.bud-todate{width:100%;margin:12px 0 0;border-collapse:collapse;font-size:12px}.bud-todate caption{text-align:left;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;padding-bottom:4px}
.bud-todate th{text-align:left;font-weight:500;padding:4px 0;border-top:1px solid #eef1f4;position:static;background:none;color:var(--ink);white-space:normal}.bud-todate td{padding:4px 0;border-top:1px solid #eef1f4;font-variant-numeric:tabular-nums}.bud-todate small{color:var(--muted)}
.wip-bar{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end;margin:0 0 10px}.wip-bar .field{margin:0}.wip-bar input,.wip-bar select{width:auto;min-height:36px}.wip-bar .actions{margin:0}
.wip-grid td,.wip-grid th{white-space:nowrap;padding:10px 8px}.wip-grid th{white-space:normal;vertical-align:bottom;min-width:80px}.wip-grid td[data-col=name]{white-space:normal;min-width:200px}.wip-grid td[data-col=name] small{display:block;font-size:11px}.wip-grid .r{text-align:right;font-variant-numeric:tabular-nums}.wip-grid tfoot td{font-weight:700;background:#f1f5f9;border-top:2px solid #d5dde6;position:sticky;bottom:0;z-index:1}
.wip-grid tr.bud-warn td{background:#fff8eb}.wip-grid tr.bud-warn td:first-child{box-shadow:inset 3px 0 0 #dc8a1e}.wip-notes{margin:10px 0 0;padding-left:18px}.wip-notes li{margin:2px 0}
@media(max-width:720px){.bud-grid td[data-col=costCode] input,.bud-grid td[data-col=costType] input{min-width:0}.bud-grid td[data-col=costCode] input{width:58px;padding:3px 2px}table.bud-grid td,table.bud-grid th{padding:4px;white-space:normal}.bud-grid span.bud-tog{display:none}
 .bud-wrap,.wip-wrap{max-height:none}.bud-d1{padding-left:6px}.bud-d2{padding-left:12px}.bud-d3,.bud-d4,.bud-d5,.bud-d6,.bud-d7,.bud-d8{padding-left:16px}
 .bud-grid td.r{font-size:12px}.bud-grid .bud-more{padding:2px 5px}.bud-grid .bud-plus{display:none}.bud-namebox input{width:0;flex:1 1 auto}.bud-bars>svg{max-width:none}.wip-grid td[data-col=name],.wip-grid th{min-width:0}.stats.bud-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}.bud-fin-grid,.bud-rings{grid-template-columns:1fr}.wip-grid .wip-c{display:none}.wip-grid td,.wip-grid th{white-space:normal}.wip-bar .field{flex:1 1 40%}.wip-bar input,.wip-bar select{width:100%}}
/* The approved budget (budget.js, BUDGETLIVE-01): the version and what waits above the grid, a waiting row marked, the
   approved amounts as computed formula cells (grid.js data-xl-calc), the review, the versions and Make the budget. */
.bud-approval{display:flex;align-items:center;justify-content:space-between;gap:8px 16px;flex-wrap:wrap;border:1px solid var(--line);border-left:3px solid #2d7350;border-radius:8px;padding:8px 12px;margin:0 0 10px;background:white}
.bud-approval.waiting{border-left-color:var(--accent);background:#f3f9fd}.bud-approval strong{display:block;font-size:12px}.bud-approval small{display:block;font-size:11px;margin-top:2px;line-height:1.45}
.bud-approval .actions button{min-height:0;padding:6px 10px;font-size:12px}
.bud-wait{display:inline-block;margin-left:4px;padding:1px 6px;border-radius:10px;background:#e3f2fa;color:#1c6e93;font-size:10px;font-weight:600;cursor:help;white-space:nowrap}
.bud-grid tr.bud-pend td.bud-name{box-shadow:inset 3px 0 0 var(--accent)}
.bud-grid input.bud-calc,.bud-grid input.bud-calc:hover,.bud-grid input.bud-calc:focus{border-color:transparent;background:transparent;color:inherit;cursor:cell;width:100%;min-width:0;padding:3px 0;text-align:right;font-variant-numeric:tabular-nums}
.bud-changes td{white-space:nowrap}.bud-changes td small{display:block}
.bud-version{border-bottom:1px solid var(--line);padding:10px 0}.bud-version-head{display:flex;flex-wrap:wrap;gap:6px;align-items:baseline}.bud-version-head small{display:inline}.bud-version details{margin-top:4px}
.bud-make-from{margin:8px 0}.bud-make-lines td small{display:block}.bud-make-lines small.bud-make-sub{display:none}.bud-make-total{margin:10px 0;color:var(--ink)}
/* The money summary's lines (project.js summaryInner): each a button that opens its formula (budget.js budFormulaDrawer). */
.job-summary button.sum-row{width:100%;background:none;border:0;border-bottom:1px solid #ffffff1c;border-radius:0;color:inherit;text-align:left;padding:9px 0;font-weight:inherit;min-height:0}
.job-summary button.sum-row:hover{background:none}.job-summary button.sum-row:hover strong,.job-summary button.sum-row:focus-visible strong{text-decoration:underline dotted #9fb1c3;text-underline-offset:3px}
.job-summary button.sum-total{border-top:1px solid #ffffff40}.job-summary .sum-act{color:#fff;font-weight:650}
.sum-formula .sum-big{font-size:28px;font-weight:650;color:var(--ink);margin:0 0 8px}
.sum-fx{display:flex;gap:8px;align-items:flex-start;color:var(--ink);line-height:1.5;background:#f6f8fa;border:1px solid var(--line);border-radius:6px;padding:8px 10px}.sum-fx-tag{font-style:italic;font-weight:700;color:var(--xl);flex:none}
.sum-parts{border:1px solid var(--line);border-radius:8px;margin:12px 0;overflow:hidden}
.sum-part{display:grid;grid-template-columns:18px minmax(0,1fr) auto auto;gap:8px;align-items:center;padding:8px 10px;border-top:1px solid #eef1f4}.sum-part:first-child{border-top:0}
.sum-part.sum-d1{padding-left:28px;background:#fbfcfd}.sum-part.sum-d2,.sum-part.sum-d3{padding-left:46px;background:#f8fafb}.sum-part.aside{color:var(--muted)}
.sum-sign{font-weight:700;color:var(--muted);text-align:center}.sum-what strong{font-weight:600;color:var(--ink)}.sum-what small{display:block;font-size:11px;line-height:1.4}.sum-amt{font-weight:600;white-space:nowrap;color:var(--ink)}
.sum-part .actions{flex-wrap:nowrap}.sum-part .actions button{min-height:0;padding:4px 8px;font-size:12px}
@media(max-width:720px){.sum-part{grid-template-columns:14px minmax(0,1fr) auto}.sum-part .actions{grid-column:2/-1}.bud-approval .actions{width:100%}.bud-changes td{white-space:normal}
 /* Make the budget on a phone: the code and quantity under the line's name */
 .bud-make-lines .bud-make-wide,.bud-make-lines td[data-col=code],.bud-make-lines td[data-col=qty]{display:none}.bud-make-lines small.bud-make-sub{display:block}}
/* The budget across the page (Jordan, September 29, 2026: "THIS entire sheet should be visible without scrolling"): fixed
   columns from budget.js budColW, numbers a set width and the text columns sharing what is left. Below a view's least
   width the sheet scrolls sideways again rather than squeezing its text away. Phones keep their own layout above. */
@media(min-width:721px){table.bud-grid{table-layout:fixed;width:100%}
 table.bud-grid.bud-v-overview{min-width:1260px}table.bud-grid.bud-v-overview.bud-mk{min-width:1334px}table.bud-grid.bud-v-costing{min-width:1584px}table.bud-grid.bud-v-profit{min-width:1108px}table.bud-grid.bud-v-invoicing{min-width:880px}table.bud-grid.bud-v-time{min-width:800px}table.bud-grid.bud-v-scope{min-width:620px}
 .bud-grid col.bud-w-num{width:32px}.bud-grid col.bud-w-hand{width:18px}.bud-grid col.bud-w-act{width:56px}.bud-grid col.bud-w-act.ro{width:38px}.bud-grid col.bud-w-name{width:18%}
 .bud-grid col.bud-w-qty{width:68px}.bud-grid col.bud-w-unit{width:62px}.bud-grid col.bud-w-money{width:100px}.bud-grid col.bud-w-pct{width:74px}.bud-grid col.bud-w-check{width:64px}.bud-grid col.bud-w-hours{width:62px}
 /* Job Costing and Profit carry the approved amounts and the costs their formulas read: narrower numbers leave the names room */
 .bud-v-costing col.bud-w-money,.bud-v-profit col.bud-w-money{width:94px}.bud-v-profit col.bud-w-pct{width:68px}table.bud-grid.bud-v-costing:has(td[data-col=expenses]){min-width:1678px}
 table.bud-grid th{white-space:normal;line-height:1.25;vertical-align:bottom;padding:8px 6px}table.bud-grid .bud-bands th{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
 table.bud-grid td:not(.xl-fh){overflow:hidden;text-overflow:ellipsis}.bud-grid input:not([type=checkbox]),.bud-grid input.n,.bud-grid input.pct{min-width:0;width:100%}
 .bud-grid td[data-col=description] input,.bud-grid td[data-col=costCode] input,.bud-grid td[data-col=costType] input{min-width:0}.bud-namebox{min-width:0}.bud-namebox input{min-width:0;width:0;flex:1 1 auto}
 .bud-grid .bud-more,.bud-grid .bud-plus{padding:2px 6px}}
/* Submittal packages (submittals.js): the job's packages, one package, its editor, the review of a reviewed PDF, the package PDF's parts, and the product data library */
.sub-panel{margin:4px 0 12px}.sub-panel h3{margin:0;font-size:14px}.sub-panel td{vertical-align:top}.sub-panel td small{display:block;margin-top:2px}.sub-panel td .link{text-align:left}.sub-panel td.n{text-align:right}
#drawer:has(.sub-wide){width:min(1080px,100vw)}
.sub-grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.sub-form{display:grid;gap:14px}.sub-form fieldset{border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin:0;min-width:0}
.sub-form legend{font-weight:600;font-size:12px;padding:0 4px}.sub-to .field{margin:0}
.sub-items input,.sub-items select{min-width:92px;width:100%}.sub-items td[data-col=rooms] input{min-width:160px}.sub-items td[data-col=fabric] input{min-width:140px}.sub-items td[data-col=date] input{min-width:132px}
.sub-shop-list{display:grid;gap:6px}.sub-shop-row{display:grid;grid-template-columns:minmax(0,1fr) 170px 150px;gap:8px;align-items:center}.sub-shop-row .check{display:flex;align-items:center;gap:8px}
.sub-shop{margin:0;padding-left:18px}.sub-shop li{margin:2px 0}
.sub-comments td{vertical-align:top}.sub-comments td.n{text-align:right;white-space:nowrap}.sub-comments td small{display:block;margin-top:3px}.sub-text{min-width:180px;max-width:360px;white-space:pre-wrap}
.sub-crop-cell{width:1%}.sub-crop{display:block;padding:0;border:1px solid var(--line);border-radius:6px;background:white;cursor:zoom-in;min-height:0;line-height:0}.sub-crop canvas{display:block;max-width:220px;height:auto;min-width:60px;min-height:30px;background:#f4f6f8}
.sub-acts{white-space:nowrap}.sub-acts button{display:block;margin:0 0 4px}
.sub-page{display:block;max-width:100%;height:auto;margin-top:10px;border:1px solid var(--line)}
.sub-authors{display:grid;gap:6px;border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin:10px 0}.sub-authors legend{font-weight:600;padding:0 4px}.sub-author{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px}
.sub-review details summary{cursor:pointer;font-weight:600;padding:6px 0}
.sub-parts{display:grid;gap:8px;margin:10px 0}.sub-part{display:grid;grid-template-columns:auto 22px minmax(0,1fr) auto;gap:10px;align-items:start;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fbfcfd}
.sub-part-n{font-weight:600;color:var(--muted);padding-top:8px;text-align:right}.sub-part-main{display:grid;gap:4px;min-width:0}.sub-part-top{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.sub-part-top input{flex:1 1 220px;min-width:0}
.sub-part-opts{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.sub-part-opts select{flex:1 1 220px;width:auto;min-width:0;max-width:100%}.sub-part-opts input[name=pages]{flex:0 1 190px;width:auto;min-width:0}.sub-part-top input,.sub-part-opts select,.sub-part-opts input[name=pages]{min-height:34px;padding:6px 10px}.sub-panel td:first-child .link{white-space:nowrap}
.sub-add{border:1px dashed #b9c6d4;border-radius:8px;padding:10px 12px;display:grid;gap:8px;min-width:0}.sub-add legend{font-weight:600;padding:0 4px}.sub-add-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.sub-add-row select{flex:1 1 240px;min-width:0;max-width:100%}
.sub-sheet-picks{display:flex;flex-wrap:wrap;gap:4px 14px;margin:6px 0}.sub-lib-add{border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin:10px 0 14px}
@media(max-width:760px){.sub-grid3{grid-template-columns:1fr}.sub-shop-row{grid-template-columns:1fr 1fr}.sub-shop-row .check{grid-column:1/-1}.sub-part{grid-template-columns:auto minmax(0,1fr) auto}.sub-part-n{display:none}.sub-crop canvas{max-width:130px}.sub-text{min-width:150px;max-width:220px}}

/* Change orders (changeorders.js): the job's change orders by status with their list, and a change order's page: its
   lines as a grid, its totals and the contract so far, its document and history. */
.co-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0 0 10px}.co-tile{border:1px solid var(--line);border-radius:8px;padding:10px 12px;background:white;display:grid;gap:2px}
.co-tile span{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.co-tile strong{font-size:20px}.co-tile small{color:var(--muted);font-size:11px;line-height:1.4}
.co-tile.co-pending{box-shadow:inset 3px 0 0 #dc8a1e}.co-tile.co-approved{box-shadow:inset 3px 0 0 #2d7350}.co-tile.co-rejected{box-shadow:inset 3px 0 0 #a53032}
.co-contract{margin:0 0 10px;font-size:12px}.co-list td[data-col=name] small{display:block;color:var(--muted);font-size:11px;white-space:normal}.co-list td,.co-list th{white-space:nowrap}.co-list td[data-col=name]{white-space:normal;min-width:220px}
.co-top{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}.co-status{font-size:11px;color:var(--muted)}.co-head h2{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.co-fields{margin:4px 0 8px}.co-read{margin:0 0 8px}.co-read p{margin:2px 0;white-space:pre-wrap}.co-links{margin:0 0 10px;font-size:12px}
.co-note{margin:0 0 12px;padding:9px 12px;border-radius:8px;background:#f3f5f8;font-size:12px}.co-note.good{background:#edf7f0}.co-note.warn{background:#fff8eb}
.co-lines-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin:10px 0 6px}.co-lines-head h3{margin:0;font-size:14px}
.co-wrap{border:1px solid var(--line);border-radius:8px}table.co-grid th{font-size:11px;padding:8px 4px}table.co-grid td{padding:3px 4px;border-top:1px solid #eef1f4;white-space:nowrap}
.co-grid .r{text-align:right;font-variant-numeric:tabular-nums}.co-grid .co-mid{text-align:center}.co-grid .co-n{color:#98a2b3;width:28px;text-align:right;font-size:11px}.co-grid .co-act{width:1%;text-align:right}
.co-grid input:not([type=checkbox]){min-height:28px;padding:3px 6px;border:1px solid transparent;border-radius:4px;background:transparent;min-width:70px}.co-grid input:not([type=checkbox]):hover{border-color:#d5dde6}
.co-grid input:not([type=checkbox]):focus{border-color:var(--accent);background:white}.co-grid input.n{text-align:right;width:72px;min-width:0}.co-grid td[data-col=qty] input.n{width:52px}
.co-grid td[data-col=name] input{min-width:0;width:150px}.co-grid td[data-col=description] input{min-width:0;width:100px}.co-grid td[data-col=costCode] input{min-width:0;width:110px}.co-grid td[data-col=costType] input{min-width:0;width:90px}
.co-grid td[data-col=unit] input{min-width:0;width:50px}
.co-grid tfoot td{background:#f1f5f9;border-top:2px solid #d5dde6;padding:7px 6px}.co-grid tfoot small{display:inline;font-weight:400;color:var(--muted)}.co-x{padding:2px 8px;min-height:0}
.co-sums{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:14px 0}.co-box{border:1px solid var(--line);border-radius:8px;padding:12px 14px;background:white}
.co-box h4{margin:0 0 6px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.co-row{display:flex;justify-content:space-between;gap:12px;padding:6px 0;border-bottom:1px solid #eef1f4;font-size:13px}
.co-row.co-total{border-bottom:0;border-top:2px solid #d5dde6}.co-row.co-total strong{font-size:15px}.co-box p{margin:8px 0 0;font-size:11px}
.co-aside{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px}.co-aside h3{margin:6px 0;font-size:14px}.co-files,.co-history{list-style:none;margin:0;padding:0}
.co-files li,.co-history li{display:flex;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid #eef1f4;font-size:12px}.co-history small,.co-files small{color:var(--muted);white-space:nowrap}
.co-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
@media(max-width:720px){.co-tiles{grid-template-columns:1fr}.co-sums,.co-aside{grid-template-columns:1fr}.co-grid .co-c,.co-list .co-c,.co-grid .co-n{display:none}table.co-grid td,table.co-grid th{white-space:normal;padding:4px 3px}
 .co-grid td[data-col=name]{min-width:100px}.co-grid td[data-col=name] input{min-width:0;width:100%}.co-grid input.n{width:60px}.co-grid td[data-col=qty] input.n{width:40px}.co-grid .co-x{padding:2px 4px}
 .co-list td[data-col=name]{min-width:0}.co-head .actions{width:100%}.co-head .actions button{flex:1 1 auto}}

/* Progress billing (billing.js): the job's Billing panel, its schedule of values and an application's continuation sheet */
.bill-sub{font-size:12px;font-weight:400}.bill-start{border:1px dashed var(--line);border-radius:8px;padding:12px 14px;background:#fbfcfd}.bill-start p{margin:0 0 8px}
.bill-tiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0 0 12px}.bill-tile{border:1px solid var(--line);border-radius:8px;padding:10px 12px;background:white;display:grid;gap:2px}
.bill-tile span{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.bill-tile strong{font-size:18px}.bill-tile small{color:var(--muted);font-size:11px;line-height:1.4}
.bill-h{margin:14px 0 6px;font-size:14px}.bill-h small{font-weight:400}.bill-list td,.bill-list th{white-space:nowrap}.bill-list .r{text-align:right;font-variant-numeric:tabular-nums}
.bill-sov-head,.bill-sheet-head{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}.bill-sheet-head{margin:12px 0 6px}.bill-sheet-head h3{margin:0}.bill-sheet-head small{font-size:12px}
.bill-note{margin:0 0 10px;padding:9px 12px;border-radius:8px;background:#f3f5f8;font-size:12px}.bill-note.good{background:#edf7f0}.bill-note.warn{background:#fff8eb}.bill-note ul{margin:4px 0 0;padding-left:18px}
.bill-wrap{border:1px solid var(--line);border-radius:8px}table.bill-grid th{font-size:11px;padding:8px 4px;vertical-align:bottom}table.bill-grid td{padding:3px 4px;border-top:1px solid #eef1f4;white-space:nowrap}
.bill-grid .r{text-align:right;font-variant-numeric:tabular-nums}.bill-grid .bill-n{color:#98a2b3;width:28px;text-align:right;font-size:11px}.bill-grid .bill-mid{text-align:center;width:1%}.bill-grid .bill-act{width:1%;text-align:right;white-space:nowrap}
.bill-grid input:not([type=checkbox]){min-height:28px;padding:3px 6px;border:1px solid transparent;border-radius:4px;background:transparent}.bill-grid input:not([type=checkbox]):hover{border-color:#d5dde6}
.bill-grid input:not([type=checkbox]):focus{border-color:var(--accent);background:white}.bill-grid input.n{text-align:right;width:96px;min-width:0}.bill-sov td[data-col=name] input{width:100%;min-width:180px}
.bill-sov td[data-col=name]{width:40%}.bill-refs{white-space:normal!important;font-size:11px;color:var(--muted)}.bill-ref{display:inline-block;margin:1px 4px 1px 0;padding:1px 6px;border-radius:10px;background:#eef3f8;color:#344054}
.bill-ref.gone{text-decoration:line-through;color:#98a2b3}.bill-x{padding:2px 8px;min-height:0;font-size:12px}.bill-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.bill-grid tr.bill-co td{background:#fbfcfd}.bill-grid tr.bill-divide td{background:#f1f5f9;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:5px 6px}
.bill-grid tfoot td{background:#f1f5f9;border-top:2px solid #d5dde6;padding:7px 6px}.bill-grid tfoot small{display:inline;font-weight:400;color:var(--muted)}.bill-grid tfoot tr.bill-sum td{border-top:1px solid #d5dde6}
.bill-bad{color:#a53032;font-weight:600}.bill-terms,.bill-rates{margin:8px 0 0;font-size:12px}.bill-top{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}.bill-status{font-size:11px;color:var(--muted)}
.bill-head h2{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.bill-head h2 small{font-size:12px;font-weight:400}.bill-fields{margin:4px 0 8px}
.bill-sheet th .bill-letter{display:block;font-size:12px;color:var(--ink)}.bill-sheet th{white-space:normal;min-width:64px;font-weight:600}.bill-sheet td[data-col=name]{white-space:normal;min-width:160px}
.bill-sheet td[data-col=no]{color:#667085;font-size:12px}.bill-sums .bill-in span{padding-left:18px;color:var(--muted)}.bill-sums .bill-strong{font-weight:600}.bill-sums .co-row b{display:inline-block;width:20px;color:var(--muted);font-weight:500}
.bill-cos{width:100%;border-collapse:collapse;font-size:13px;margin-bottom:6px}.bill-cos td,.bill-cos th{padding:6px 0;border-bottom:1px solid #eef1f4}.bill-cos th{font-size:11px;color:var(--muted);font-weight:500}.bill-cos .r{text-align:right}
.bill-cos tr.bill-strong td{font-weight:600}.bill-levels{border:0;padding:0;margin:0 0 10px;display:grid;gap:8px}.bill-levels legend{font-weight:600;margin-bottom:4px}.bill-levels small{display:block;color:var(--muted)}
@media(max-width:720px){.bill-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}.bill-tile strong{font-size:15px}.bill-grid .bill-c,.bill-list .bill-c,.bill-grid .bill-n{display:none}table.bill-grid td,table.bill-grid th{padding:4px 3px}
 .bill-grid input.n{width:78px}.bill-sov td[data-col=name]{white-space:normal;width:auto}.bill-sov td[data-col=name] input{min-width:0;width:100%}.bill-sheet td[data-col=name]{min-width:96px;white-space:normal}.bill-sheet th{min-width:0}
 .bill-head .actions{width:100%}.bill-head .actions button{flex:1 1 auto}.bill-list td,.bill-list th{white-space:normal}
 .bill-sov-head .actions{width:100%}.bill-sov-head .actions button{flex:1 1 auto}.bill-sub{display:block}}
.bill-fields .field:not(.wide){max-width:260px}
/* Business development (bizdev.js): the section chips, grouped follow-ups, the forecast's pick lists and results */
.bd-bar{margin:0 0 16px}.bd-bar .chips{flex:1 1 auto}.bd-note{margin-top:16px}
.bd-head{padding:16px 20px 0;margin:0}.bd-head h2{margin:0 0 12px}.bd-group-head{padding:16px 20px 0;margin:0 0 12px;font-size:15px}.bd-group-head .count{margin-left:6px}
.bd-notes ul{margin:0;padding-left:18px}.bd-notes li{margin:4px 0;color:var(--muted);line-height:1.5}
.bd-pick{display:flex;flex-direction:column;gap:2px;max-height:210px;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:6px 10px;min-width:0}.bd-pick .check{padding:3px 0;font-size:13px;min-height:0;flex:none}.bd-pick .check small{display:inline;margin-left:4px}
.bd-pick-set{border:0;padding:0;margin:0;min-width:0}.bd-pick-set legend{font-size:12px;color:#566679;padding:0;margin-bottom:6px}.bd-pick-set .chip{cursor:pointer}
.bd-says{font-size:14px;margin:4px 0 8px}.bd-total td{background:#f8fafb}td small.bd-worked{color:#2d7350}
.bd-full .table-wrap{max-height:none}.bizdev td[data-col=todo]{min-width:300px}.bizdev td[data-col=customer]{min-width:150px}.bd-do{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.field .money-hint[hidden]{display:none}  /* inside a panel too, where .panel .field small is shown */
/* Work orders (workorders.js): the crew's view on a phone, its pick list in plain words, the warehouse's pick lists by
   bin, and the task's work order in the schedule's panels. */
.wo .drawer-head h2{font-size:18px}.wo-pills{margin:-4px 0 10px;display:flex;gap:6px;flex-wrap:wrap}.wo-state{margin:0 0 12px;padding:8px 10px;border-radius:8px;background:#f1f4f7;font-size:13px}.wo-state.good{background:#e8f6ee;color:#1f6b44}.wo-state.warn{background:#fff7e8;color:#8a5a12}
.wo-sec{border-top:1px solid var(--line);padding:12px 0 6px}.wo-sec>h4{margin:0 0 8px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.wo-sec .rich-view h4{margin:10px 0 4px;font-size:15px}.wo-sec p{margin:4px 0}
.wo-contact{padding:6px 0;border-bottom:1px solid #f0f2f5}.wo-contact:last-child{border-bottom:0}.wo-reach{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:4px}.wo-reach a{font-weight:600;text-decoration:none;color:var(--accent)}
.wo-call{display:inline-flex;align-items:center;min-height:36px;padding:4px 12px;border:1px solid #bfe0ef;border-radius:999px;background:#eef7fc}
.wo-line{display:flex;gap:10px;align-items:flex-start;padding:8px 0;border-bottom:1px solid #f0f2f5}.wo-line:last-of-type{border-bottom:0}.wo-line.done{opacity:.7}.wo-line input[type=checkbox]{width:22px;height:22px;flex:none;margin-top:2px}
.wo-what{flex:1;min-width:0}label.wo-line{cursor:pointer;font-weight:inherit}.wo-what small{display:block;color:var(--muted);margin-top:2px;overflow-wrap:anywhere}.wo-what small strong{color:var(--ink)}.wo-tick{flex:none;width:22px;text-align:center;font-weight:800;color:#2d7a50}.wo-tick.todo{color:#aab5c1;font-weight:400}
.wo-short{color:#b3261e;font-weight:700}.wo-small{font-size:12px}.wo-links{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.wo-unlinked{margin:0 0 8px;padding-left:18px}.wo-unlinked li{margin:2px 0}.wo-link{display:inline-flex;align-items:center;min-height:36px;padding:4px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;text-decoration:none;color:var(--ink);font-size:13px}
.wo-measure summary{cursor:pointer;font-weight:600;padding:6px 0}.wo-measure td,.wo-measure th{font-size:12px}.wo-note{padding:6px 0;border-bottom:1px solid #f0f2f5}.wo-note p{margin:2px 0}.wo-shots{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}.wo-shots .shot img{width:72px;height:72px;object-fit:cover;border-radius:6px}
.wo-note-form{margin-top:10px}.wo-buttons{display:flex;flex-wrap:wrap;gap:8px;border-top:1px solid var(--line);padding-top:12px;margin-top:8px}.wo-buttons button{min-height:44px}
.wo-done{margin:0 0 12px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fbfcfd}.wo-done.good{background:#e8f6ee;border-color:#bfe3cf}
.wo-task{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0;padding:8px 10px;border:1px dashed #b7c3cf;border-radius:8px;background:#fbfcfd}.wo-task small{flex-basis:100%}.wo-num{font-weight:700;font-variant-numeric:tabular-nums}
.wo-fs{border:1px solid var(--line);border-radius:8px;padding:6px 10px 8px;margin:10px 0}.wo-fs legend{font-size:12px;font-weight:600;padding:0 4px}.wo-units{max-height:240px;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:4px 10px;margin-bottom:10px}
.wo-picks .wo-bin{border-top:1px solid var(--line);padding:10px 0 4px}.wo-picks .wo-bin h3{margin:0 0 4px;font-size:14px}.wo-picks .wo-bin h3 small{color:var(--muted);font-weight:500;margin-left:6px}
@media(max-width:720px){.wo-buttons button{flex:1 1 40%}.wo-links .wo-link{flex:1 1 100%}.wo-line input[type=checkbox]{width:26px;height:26px}}
/* Reports → QuickBooks (quickbooks.js): files for QuickBooks Desktop, and payments and bills read back */
.qb-page h2 small{font-weight:500;margin-left:6px}.qb-note{margin:0 0 12px;padding:10px 12px;border-radius:8px;background:#eef6fb;border-left:3px solid var(--accent);font-size:12px;color:#40516a}.qb-note.warn{background:#fff8eb;border-left-color:#bf8d3c}.qb-note ul{margin:4px 0 0;padding-left:18px}.qb-note small{display:block;margin-top:4px}
.qb-chips{margin:0 0 14px}.qb-box{border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin:0 0 14px;background:#fff}.qb-box h3{font-size:14px;margin:0 0 6px}.qb-box h4{margin:14px 0 6px;font-size:13px}.qb-box .form-actions{position:static;padding:8px 0 0;margin-top:8px;flex-wrap:wrap}
.qb-what{border:0;padding:0;margin:0 0 10px;display:flex;flex-wrap:wrap;gap:0 18px}.qb-what legend{font-size:12px;color:#566679;margin-bottom:2px;padding:0}.qb-what input[type=radio]{width:18px;min-height:18px;height:18px;margin:0;accent-color:var(--accent)}
.qb-joblist{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(280px,100%),1fr));gap:0 16px;max-height:260px;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:4px 10px}.qb-joblist .check small{display:block;font-size:11px}
.qb-names td{vertical-align:top}.qb-names td small{display:block}.qb-names input{min-height:34px;padding:6px 8px}
.qb-lines{list-style:none;margin:0;padding:0;min-width:240px}.qb-lines li{display:flex;justify-content:space-between;gap:12px;font-size:11px;line-height:1.5}.qb-lines li span:first-child{overflow-wrap:anywhere}
.qb-grid td{vertical-align:top}.qb-grid td small{display:block}.qb-rows select{min-height:34px;padding:4px 6px;font-size:12px;max-width:320px}.qb-mid{text-align:center}.qb-problem{display:block;color:#946422;margin-top:3px}
.qb-review-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap}.qb-list{margin:0;padding-left:18px}.qb-list li{margin:4px 0}.qb-versions{font-size:11px}
.bill-qb .bill-pays{margin:6px 0 0;padding-left:18px}.bill-qb .bill-pays li small{margin-left:6px}
.qb-date,.qb-grid td[data-col=number],.qb-grid td[data-col=date]{white-space:nowrap}.qb-rows select{min-width:250px}
@media(max-width:720px){.qb-box{padding:12px}.qb-lines{min-width:180px}.qb-what{flex-direction:column}
 .qb-names thead,.qb-rows thead{display:none}.qb-names,.qb-names tbody,.qb-rows,.qb-rows tbody{display:block;width:100%}
 .qb-names tr,.qb-rows tr{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-auto-flow:row dense;gap:4px 12px;padding:10px 0;border-top:1px solid var(--line)}
 .qb-names td,.qb-rows td{display:block;border:0;padding:2px 0;max-width:none;text-align:left}.qb-names .qb-wide,.qb-rows .qb-wide{grid-column:1/-1}
 .qb-names td[data-label]::before,.qb-rows td[data-label]::before{content:attr(data-label);display:block;font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-bottom:2px}
 .qb-rows select{min-width:0;max-width:none;width:100%}.qb-rows .qb-mid input{width:26px;height:26px}.qb-rows td:empty{display:none}.table-wrap:has(.qb-rows),.table-wrap:has(.qb-names){max-height:none}}
/* The document editor (docedit.js): the page as the customer will see it, each block's tools, the side panel; and
   Settings → Document templates. Sizes follow the PDF: 1pt is 1.33px on the 816px page. */
#drawer:has(.docv){width:min(1240px,100vw);padding:0;background:#eef1f4}
.dv-bar{position:sticky;top:0;z-index:3;display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;background:white;border-bottom:1px solid var(--line);padding:14px 20px}
.dv-bar h2{margin:2px 0 0;font-size:18px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.dv-bar-title{min-width:0}.dv-bar-title small{font-size:11px}
.dv-template{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}.dv-template select{width:auto;min-height:36px;padding:6px 10px}
.dv-body{display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:20px;padding:20px;align-items:start}.dv-paper{min-width:0}
.dv-sheet{--doc-accent:#349bd5;width:816px;max-width:100%;margin:0 auto;background:white;box-shadow:0 2px 16px #16294220;border-radius:2px;padding:48px 64px 28px;color:#111;font-family:Helvetica,Arial,sans-serif;font-size:13.3px;line-height:1.35;overflow-wrap:anywhere}
.dv-accent-349BD5{--doc-accent:#349bd5}.dv-accent-000000{--doc-accent:#000}
.dv-sheet p{color:#111;margin:0 0 8px;line-height:1.35}
.dv-block{position:relative;border:1px dashed transparent;border-radius:6px;margin:0 -8px 6px;padding:6px 8px}
.dv-block:hover,.dv-block:focus-within{border-color:#b9d9ea;background:#fbfdfe}
.dv-tools{position:absolute;right:6px;top:-16px;z-index:2;display:none;gap:2px;flex-wrap:wrap;background:white;border:1px solid var(--line);border-radius:8px;box-shadow:0 2px 8px #16294218;padding:2px}
.dv-tools button{padding:4px 8px;min-height:0;font-size:11px}
.dv-block:hover>.dv-tools,.dv-block:focus-within>.dv-tools{display:flex}
@media(hover:none){.dv-tools{display:flex;position:static;box-shadow:none;margin:0 0 6px;border-style:dashed}}
.dv-hidden{background:#f4f6f8;border-color:#d9dee5}.dv-sheet .dv-hidden-note{color:var(--muted);font-size:12px;margin:0}
.dv-editing{border-color:#8bd2ef;background:white}
.dv-label{display:block;font-size:10.6px;font-weight:700;color:var(--doc-accent);letter-spacing:.02em;margin:4px 0;text-transform:uppercase}
.dv-lh{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.dv-logo{width:182px;height:auto}.dv-lh-right{display:flex;flex-direction:column;align-items:flex-end;text-align:right}
.dv-title{font-size:20px;color:#111}.dv-lh-right small{font-size:10.6px;color:#737373;margin-top:2px}
.dv-sheet .dv-date{text-align:right;margin-top:12px}.dv-sheet .dv-big{text-align:center;font-weight:700;font-size:21px}
.dv-parties{display:grid;grid-template-columns:1fr 1fr;gap:24px}.dv-sheet .dv-parties p{font-size:12px}
.dv-rule{border:0;border-top:1px solid #333;margin:6px 0 0}
.dv-sheet .dv-strong{font-weight:700}.dv-sheet .dv-accept{font-size:12px;margin-top:10px}
.dv-fields{display:grid;gap:4px 24px;margin:0 0 6px}.dv-cols-2{grid-template-columns:1fr 1fr}.dv-fields div{display:flex;gap:10px;min-width:0}.dv-fields dt{font-weight:700;white-space:nowrap}.dv-fields dd{margin:0;white-space:pre-line;min-width:0}.dv-small{font-size:11.3px}
.dv-items{margin:4px 0 8px}.dv-items-head{display:flex;justify-content:space-between;font-size:10.6px;font-weight:700;color:var(--doc-accent);border-bottom:1px solid #333;padding:2px 0 4px}
.dv-group-row{display:flex;justify-content:space-between;gap:12px;background:#f1f3f6;padding:6px 8px;margin-top:6px}
.dv-item{display:flex;justify-content:space-between;gap:16px;border-bottom:1px solid #d1d5db;padding:5px 8px 5px 18px;font-size:12.6px}.dv-item small{display:block;font-size:10px;color:#737373;white-space:pre-line;margin-top:2px}
.dv-sheet .dv-note{font-size:10px;color:#737373;font-style:italic;padding:4px 18px}
.dv-totals{display:flex;flex-direction:column;align-items:flex-end;gap:4px;margin:6px 0}.dv-totals div{display:grid;grid-template-columns:200px 120px;text-align:right;gap:8px}.dv-totals span{font-size:11.3px;font-weight:700;color:var(--doc-accent)}.dv-total{border-top:1px solid #333;padding-top:4px;font-size:14px}
.dv-priced{display:flex;align-items:baseline;gap:6px;font-size:14.6px;margin:8px 0 6px}.dv-leader{flex:1;border-bottom:1px dotted #777;transform:translateY(-3px)}
.dv-table-wrap{max-height:none}.dv-table{font-size:12px}.dv-table th{position:static;background:#d9e2ec;color:#111;padding:6px 8px}.dv-table td{border:1px solid #333;vertical-align:top;padding:6px 8px}.dv-table small{display:block;white-space:pre-line}.dv-table .r{text-align:right}
.dv-rich{font-size:12.6px}.dv-t-terms .dv-rich{font-size:10.6px;text-align:justify}.dv-rich p{margin:0 0 6px}.dv-rich ul,.dv-rich ol{margin:0 0 6px;padding-left:22px}
.dv-sign{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 36px;margin-top:36px}.dv-sign span{display:block;border-top:1px solid #111}.dv-sign small{font-size:12px;color:#111}
.dv-sheet .dv-empty{color:var(--muted);font-style:italic}
.dv-lock{white-space:nowrap;border-bottom:1px dotted #9aa7b5;cursor:help}
.dv-foot{display:flex;justify-content:space-between;gap:12px;font-size:10.6px;color:#737373;border-top:1px dashed #e1e6ed;margin-top:24px;padding-top:8px}
.dv-form h4{margin:0 0 4px}.dv-form .field{margin:8px 0}.dv-form-actions{justify-content:flex-end;margin-top:8px}.dv-edit-group{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:8px 0;min-width:0}
.dv-edit-group legend{font-weight:600;font-size:12px;padding:0 4px}.dv-edit-item{border-top:1px dashed var(--line);padding-top:6px}.dv-edit-item-head{display:flex;gap:12px;align-items:flex-end}.dv-edit-item-head .field{flex:1;min-width:0}.dv-sheet .dv-fixed{margin:0;color:#526174;white-space:pre-line}
.dv-side{position:sticky;top:78px;display:flex;flex-direction:column;gap:12px;min-width:0}.dv-side section{background:white;border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px}.dv-side h3{margin:0 0 8px}.dv-side .note{margin:0}
.dv-outline{margin:0;padding:0;list-style:none}.dv-outline li{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:4px 0;border-bottom:1px solid #f0f2f5;font-size:12px}.dv-outline li button{padding:2px 8px;min-height:0;font-size:11px}.dv-outline .dv-off span{color:var(--muted);text-decoration:line-through}
.dv-files{margin:0;padding:0;list-style:none}.dv-files li{padding:4px 0;font-size:12px;overflow-wrap:anywhere}.dv-files small{display:block}.dv-wait{padding:28px}
@media(max-width:1000px){.dv-body{grid-template-columns:minmax(0,1fr)}.dv-side{position:static}}
@media(max-width:720px){.dv-body{padding:10px;gap:12px}.dv-sheet{padding:18px 14px;font-size:13px}.dv-parties,.dv-cols-2{grid-template-columns:1fr}.dv-logo{width:120px}.dv-lh{flex-direction:column}.dv-lh-right{align-items:flex-start;text-align:left}
 .dv-totals div{grid-template-columns:auto auto}.dv-sign{grid-template-columns:1fr}.dv-bar{padding:10px 12px}.dv-item{padding-left:8px}.dv-fields div{flex-wrap:wrap}.dv-edit-item-head{flex-direction:column;align-items:stretch}}
.doct-tabs{margin-top:8px}.doct-blocks{margin:0;padding-left:20px}.doct-blocks li{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:4px 0;border-bottom:1px solid #f0f2f5}.doct-blocks .check{flex:1;min-width:0;flex-wrap:wrap}.doct-blocks small{flex-basis:100%;margin-left:26px}
.doct-colors{margin-top:12px}.doct-swatch{display:inline-flex;align-items:center;gap:6px;margin-right:16px}.doct-chip{display:inline-block;width:16px;height:16px;border-radius:4px;background:var(--doc-accent)}
/* Progress by floor and room (siteprogress.js): each room a tile with its counts, a bar and its word; the report to the GC. */
.sp-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;margin:4px 0 6px}.sp-head p{margin:0}
.sp-legend{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0 0 12px;font-size:12px}.sp-legend small{flex-basis:100%;color:var(--muted)}
.sp-key{padding:2px 8px;border-radius:999px;border:1px solid var(--line);font-weight:600}
.sp-floor{margin:0 0 14px}.sp-floor h3{font-size:15px;margin:0 0 8px}.sp-floor h3 small{font-weight:500;color:var(--muted);margin-left:6px}
.sp-rooms{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
.sp-room{display:flex;flex-direction:column;align-items:flex-start;gap:3px;text-align:left;padding:8px 10px;border:1px solid var(--line);border-left-width:5px;border-radius:8px;background:#fff;min-height:44px;font-weight:500}
.sp-room strong{font-size:14px}.sp-room small{color:var(--muted);font-size:11px}.sp-num{font-variant-numeric:tabular-nums;font-size:13px}.sp-word{font-size:12px;font-weight:700}
.sp-bar{display:block;width:100%;height:6px}.sp-bar-bg{fill:#e8edf2}.sp-bar-fill{fill:#2f7fb8}.sp-verified .sp-bar-fill,.sp-installed .sp-bar-fill{fill:#2d8a57}
.sp-none{border-left-color:#aab5c1}.sp-delivered{border-left-color:#c79a2e}.sp-progress{border-left-color:#2f7fb8}.sp-installed{border-left-color:#3a9c6a}.sp-verified{border-left-color:#1f6b44;background:#f1f9f4}
.sp-key.sp-none{border-color:#aab5c1}.sp-key.sp-delivered{border-color:#c79a2e;background:#fdf6e6}.sp-key.sp-progress{border-color:#2f7fb8;background:#edf5fb}.sp-key.sp-installed{border-color:#3a9c6a;background:#eef8f2}.sp-key.sp-verified{border-color:#1f6b44;background:#e2f3e9}
.sp-says{margin:0 0 8px;padding-left:18px}.sp-says li{margin:2px 0}.sp-made{padding:8px 10px;border-radius:8px;background:#e8f6ee}
.sp-shots{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px;margin-bottom:8px}.sp-shot{display:flex;flex-direction:column;gap:2px;font-weight:500;cursor:pointer}
.sp-shot img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:6px;border:2px solid transparent}.sp-shot input{align-self:flex-start;width:20px;height:20px}.sp-shot input:checked~img{border-color:var(--accent)}.sp-shot small{font-size:11px;color:var(--muted)}
/* Mentions (mentions.js): the people offered after @, the bell at the top and its list. */
.mention-pop{position:fixed;z-index:60;width:272px;max-height:260px;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 24px rgba(20,40,60,.18);padding:4px}
.mention-opt{display:flex;flex-direction:column;padding:8px 10px;border-radius:6px;cursor:pointer;min-height:40px}.mention-opt small{color:var(--muted)}.mention-opt.on,.mention-opt:hover{background:#edf5fb}
.mention-bell{position:relative;font-weight:800;font-size:18px;min-width:40px}.mention-bell .mention-count{position:absolute;top:2px;right:0;min-width:18px;padding:0 4px;border-radius:999px;background:#c0392b;color:#fff;font-size:11px;line-height:18px}
.popin{position:fixed;z-index:40;max-height:min(70vh,520px);overflow:auto;background:white;border:1px solid var(--line);border-radius:10px;box-shadow:0 14px 40px #162b4229;padding:10px 14px 12px}.popin-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-bottom:4px;border-bottom:1px solid var(--line)}.popin-head strong{font-size:15px}.popin #mention-list>p.muted{margin:8px 0 4px;font-size:12px}.popin .mention-item{padding:8px 0}.popin .actions{margin-top:8px}
.mention-item{display:flex;gap:10px;align-items:flex-start;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line)}.mention-item p{margin:4px 0;overflow-wrap:anywhere}.mention-item.new{background:#fbfdff}
@media(max-width:720px){.sp-rooms{grid-template-columns:repeat(2,minmax(0,1fr))}.mention-pop{left:8px!important;right:8px;width:auto}}
/* Settings (SETTINGS-02): the grouped side menu beside the chosen panel; on a phone the menu as a list, then the panel with a way back */
.set-layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:20px;align-items:start}
/* The menu of 35 panels keeps its place beside a long panel while it fits the window; taller, it scrolls with the page (UIFIX-01). */
.set-menu{position:sticky;top:calc(var(--band,0px) + var(--ca-h,0px) + 12px);display:flex;flex-direction:column;gap:10px;background:white;border:1px solid var(--line);border-radius:var(--radius);padding:10px 8px}
.set-group{display:flex;flex-direction:column;gap:2px}.set-group h3{font-size:10px;text-transform:uppercase;letter-spacing:.09em;color:var(--muted);padding:0 10px 4px;margin:0}
.set-menu button{border:0;background:none;text-align:left;font-weight:500;padding:6px 10px;border-radius:6px;min-height:0;color:#3a4a5c}.set-menu button:hover{background:#f1f6f9}.set-menu button.active{background:#eaf5fb;color:#117da8;font-weight:650}
.set-panel{min-width:0}.set-back{display:none}.set-crumb{font-size:10px;letter-spacing:.09em;text-transform:uppercase;margin:0 0 12px}
.set-letterhead{display:flex;gap:18px;align-items:center;border:1px solid var(--line);border-radius:8px;padding:16px;margin:12px 0;background:#fff}.set-letterhead img{width:120px;height:auto;flex:none}.set-letterhead strong{display:block;font-size:15px}.set-letterhead small{display:block;margin-top:3px}
@media(max-width:1000px){.set-layout{grid-template-columns:180px minmax(0,1fr);gap:14px}}
@media(max-width:720px){.set-layout{grid-template-columns:minmax(0,1fr);gap:0}.set-menu{position:static;max-height:none;padding:4px 0;gap:0}.set-group{padding:8px 0;border-top:1px solid var(--line)}.set-group:first-child{border-top:0}.set-group h3{padding:4px 16px 6px}.set-menu button{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;min-height:44px;border-radius:0}.set-menu button::after{content:'\203A';color:var(--muted);font-size:18px;line-height:1}.set-menu button.active{background:none;color:inherit;font-weight:500}.set-layout:not(.picked) .set-panel,.set-layout.picked .set-menu{display:none}.set-back{display:block;margin:0 0 4px}.set-back button{padding:8px 0}.set-letterhead{flex-direction:column;align-items:flex-start}}
/* Custom fields (customfields.js): their box on a form, their panel on a page, and the Settings list */
.cf-set{border:1px solid var(--line);border-radius:10px;padding:10px 12px 14px;margin:16px 0 0;min-width:0}.cf-set legend{font-size:12px;color:#566679;padding:0 4px}
.cf-head{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:14px 0 8px}.cf-set .cf-head:first-of-type,.cf-panel .cf-head:first-of-type{margin-top:4px}
.cf-req{font-size:10px;font-weight:600;color:#946422;background:#fff3dc;border-radius:10px;padding:1px 6px;margin-left:4px}
.cf-panel dl{margin:0}.cf-panel .detail-row{grid-template-columns:minmax(110px,40%) minmax(0,1fr);padding:9px 0}
.cf-retired .cf-main strong{color:var(--muted);font-weight:500}
#cf-def-form .remember{grid-column:1/-1}.cf-kind .panel-head{margin-bottom:6px}.cf-none{margin:0}.cf-list{list-style:none;margin:0;padding:0}.cf-item{display:grid;grid-template-columns:minmax(0,1fr) 190px auto;gap:6px 16px;align-items:center;padding:12px 0;border-top:1px solid var(--line)}.cf-main small,.cf-meta small{display:block;margin-top:3px}.cf-acts{flex-wrap:nowrap;gap:2px;justify-content:flex-end}.cf-acts button{padding:6px 9px;white-space:nowrap}@media(max-width:720px){.cf-item{grid-template-columns:minmax(0,1fr)}.cf-meta small{display:inline;margin-right:10px}.cf-acts{justify-content:flex-start;flex-wrap:wrap}}#cf-filter{width:auto;max-width:260px}
@media(max-width:900px){.jd .cf-panel{order:10}}
@media(max-width:720px){#cf-filter{max-width:100%}}
/* Notices (notices.js): the Home panel, See all, and Settings → Notifications */
.nt-panel{border-left:3px solid var(--accent)}.nt-panel .plain-list,.nt-all{list-style:none;margin:0;padding:0}
.nt-row{display:grid;grid-template-columns:110px minmax(0,1fr) auto;gap:10px;align-items:start;padding:9px 0;border-bottom:1px solid var(--line)}.nt-row:last-child{border-bottom:0}
.nt-row small{display:block;color:var(--muted);margin-top:2px}.nt-row .link{text-align:left;font-weight:600}.nt-kind{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);padding-top:3px}
.nt-table td small{display:block;margin-top:3px}.nt-table .nt-source{color:#8090a0}.nt-check{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;font-size:12px}
/* Notifications by email (notices.js, NOTIFY-01): each person's choices (My account), each role's grid, the summary's time and the email log (Settings) */
.nt-when{border:0;padding:0;margin:0 0 14px;display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px}.nt-when legend{font-weight:600;color:var(--ink);margin-bottom:6px;padding:0}
.nt-choice{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:8px;padding:10px 12px;cursor:pointer}.nt-choice input{width:18px;min-height:18px;margin-top:2px;accent-color:var(--accent)}.nt-choice small{display:block;margin-top:2px}
.nt-choice:has(input:checked){border-color:#9fcbe0;background:#f3fafd}
.nt-mine th:not(:first-child),.nt-mine td:not(:first-child){text-align:center;width:88px;white-space:normal}.nt-mine input[type=radio]{width:20px;min-height:20px;accent-color:var(--accent);margin:0}.nt-role{color:#8090a0}
.nt-grid-wrap{max-height:none}.nt-grid th,.nt-grid td{padding:8px 10px}.nt-grid thead th{white-space:normal;min-width:92px;vertical-align:bottom;line-height:1.3}.nt-grid tbody th{position:sticky;left:0;z-index:1;background:#f8fafb;white-space:normal;min-width:170px;max-width:220px}.nt-grid tbody th small{display:block;font-weight:400;margin-top:2px}
.nt-grid select{min-height:34px;padding:5px 6px;font-size:12px;width:auto;min-width:84px}.nt-grid select.email{border-color:#9fcbe0;background:#f3fafd}.nt-grid select.off{color:var(--muted);background:#f6f7f9}
.nt-log-tools{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap;margin-bottom:10px}.nt-log-tools .field{min-width:200px;flex:1}.nt-log td small{display:block;margin-top:3px}.nt-log .pill{margin-bottom:2px}
@media(max-width:720px){.nt-mine th:not(:first-child),.nt-mine td:not(:first-child){width:54px;padding:10px 4px}.nt-grid tbody th{min-width:130px}.nt-log-tools .field{min-width:100%}}
/* People pickers (staffpick.js): the feature's own control stays in its form out of sight; its button, the chips and the list of LB's staff by role */
select.pk-on{position:absolute;width:1px!important;height:1px;min-height:0;padding:0;border:0;opacity:0;pointer-events:none}.pk-on:not(select){display:none}
.pk{display:flex;flex-wrap:wrap;align-items:center;gap:6px;max-width:100%}.pk-chips{display:flex;flex-wrap:wrap;gap:6px}.pk-chip{padding:3px 4px 3px 10px;cursor:default}.pk-chip .pk-x{padding:2px 7px;min-height:0;font-size:11px;line-height:1.2}
.pk-open.pk-field{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:40px;padding:8px 12px;border:1px solid #ced7e1;border-radius:8px;background:white;font-weight:500;text-align:left;color:var(--ink)}.pk-open.pk-field:not(.chosen){color:var(--muted)}.pk-caret{font-size:11px;color:var(--muted)}
.pk-pop{position:fixed;z-index:70;width:340px;max-height:min(440px,calc(100vh - 24px));display:flex;flex-direction:column;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 40px #16294233;padding:10px}.pk-pop[hidden]{display:none}
.pk-pop.sheet{left:8px!important;right:8px;bottom:8px;top:auto!important;width:auto;max-height:75vh}.pk-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}.pk-q{margin-bottom:6px}.pk-list{overflow:auto;flex:1;min-height:60px}
.pk-group{display:flex;justify-content:space-between;align-items:baseline;padding:10px 8px 4px;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:650;position:sticky;top:0;background:#fff;z-index:1}
.pk-opt{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px;border-radius:6px;cursor:pointer}.pk-opt:hover,.pk-opt.at{background:#eff6fa}.pk-opt.on{background:#e8f5fb}.pk-opt.off{opacity:.5;cursor:not-allowed}.pk-opt small{display:block;font-size:11px;color:var(--muted)}
.pk-notify{border:0;padding:0;margin:16px 0 0}.pk-notify legend{font-size:12px;color:#566679;padding:0;margin-bottom:6px}.pk-notify>small{display:block;margin-top:6px}
.pk-all strong{color:#117da8}.pk-tick{color:#117da8;font-weight:700}.pk-hint{margin:6px 0 0;font-size:11px}.pk-empty{padding:12px 8px;margin:0}
/* Site alerts (crewalerts.js): the banner at the top of every page until Got it (red when urgent), the same alerts on
   Today's work and Start job, the job's list, the send form with each person by name, and the sender's view. */
.ca-banner{position:sticky;top:var(--band,0px);z-index:55;display:flex;flex-direction:column;gap:6px;padding:8px 12px;background:#0f1a28d9}.ca-banner[hidden],.ca-here:empty{display:none}
html body.ca-on:not(.viewer-open) #drawer:not(:has(.pin-sheet)),html body.ca-on .sidebar{top:calc(var(--band,0px) + var(--ca-h,0px));height:calc(100vh - var(--band,0px) - var(--ca-h,0px))}
.ca-alert{background:var(--navy);color:#fff;border-radius:12px;padding:12px 16px;box-shadow:0 8px 28px #0b182840;width:100%;max-width:980px;margin:0 auto}.ca-alert p{color:inherit}.ca-alert.urgent{background:#b42318}.ca-alert.remind{background:#8a4b08}
.ca-top{display:flex;flex-wrap:wrap;gap:2px 12px;align-items:baseline;font-size:12px;margin:0 0 4px}.ca-tag{font-weight:800;text-transform:uppercase;letter-spacing:.06em}.ca-jobname{font-weight:600}.ca-at{margin-left:auto;opacity:.85}
.ca-msg{font-size:18px;font-weight:700;line-height:1.3;margin:2px 0 4px;white-space:pre-wrap;overflow-wrap:anywhere}.ca-from{font-size:12px;opacity:.9;margin:0 0 8px}
.ca-buttons{display:flex;flex-wrap:wrap;gap:8px}.ca-alert .ca-go{background:#fff;color:#101b29;border:1px solid #fff;min-height:44px;padding:10px 28px;font-size:15px;font-weight:800}.ca-alert .ca-soft{background:transparent;color:#fff;border:1px solid #ffffff8c;min-height:44px}
.ca-more{text-align:center}.ca-link{background:none;border:0;color:inherit;text-decoration:underline;font-weight:600;padding:6px 8px;min-height:0}
.ca-here .ca-alert{box-shadow:none;margin:0 0 12px;max-width:none}.sj .ca-here{margin:0 0 10px}
.ca-list{list-style:none;margin:0;padding:0}.ca-line{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 12px;padding:9px 0;border-bottom:1px solid var(--line)}.ca-line:last-child{border-bottom:0}
.ca-line .link{text-align:left;padding:0;min-height:0;white-space:normal}.ca-line small{grid-column:1;color:var(--muted)}.ca-line.urgent{border-left:3px solid #b42318;padding-left:10px}.ca-line.late .ca-count{color:#a53032}
.ca-count{grid-column:2;grid-row:1/span 2;align-self:center;font-size:12px;font-weight:700;color:#946422;white-space:nowrap}.ca-count.done{color:#2d7350}.ca-foot{margin:8px 0 0}
.ca-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:0 0 12px}.ca-day{font-size:13px;margin:16px 0 4px}
.ca-dl{border:1px solid #f0d9b5;background:#fffaf2;border-radius:10px;padding:10px 12px;margin:0 0 10px}.ca-dl h4{margin:0 0 2px;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:#8a4b08}
.ca-card-top{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center}.ca-card-top p{margin:0}.ca-sub{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:14px 0 2px}
.ca-pick{list-style:none;padding:0;margin:10px 0}.ca-pick .ca-pick-row{display:block;width:100%;text-align:left;border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:0 0 6px;white-space:normal}.ca-pick-row small{display:block;color:var(--muted);font-weight:500;margin-top:2px}
#ca-pick-q{width:100%}.ca-form-job{margin:-6px 0 8px}.ca-form-job small{display:block;color:var(--muted)}
.ca-set{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:12px 0;min-width:0}.ca-set legend{font-weight:700;padding:0 4px}.ca-set legend small{font-weight:500;color:var(--muted)}
.ca-choice input[type=radio],.ca-pill input[type=radio]{width:18px;min-height:18px;height:18px;flex:none;padding:0;margin:1px 0 0;accent-color:var(--accent)}.ca-pill input[type=radio]{margin:0}.ca-choice{display:flex;gap:10px;align-items:flex-start;padding:8px;border-radius:8px}.ca-choice small{display:block;color:var(--muted)}.ca-choice.urgent strong{color:#b42318}.ca-choice:has(input:checked){background:#eef6fb}
.ca-who{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 8px}.ca-pill{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:20px;padding:7px 12px;font-weight:600}.ca-pill:has(input:checked){border-color:var(--accent);background:#e8f4fa}
.ca-tick{display:flex;gap:4px;justify-content:flex-end}.ca-people{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:6px;max-height:340px;overflow:auto;margin-top:4px}
.ca-person{display:flex;gap:8px;align-items:flex-start;padding:8px;border:1px solid var(--line);border-radius:8px}.ca-person small{display:block;color:var(--muted)}.ca-person[hidden],.ca-other[hidden]{display:none}.ca-person:has(input:checked){border-color:#9cc9df;background:#f3f9fc}
.ca-other{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}#ca-send-form select{max-width:100%}
.ca-tagline{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0}.ca-tagline .link{padding:0;min-height:0}.pill.ca-urgent{background:#fde8e6;color:#b42318}.ca-big-msg{font-size:20px;color:var(--ink);margin:8px 0}
.ca-mine{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}.ca-counts{margin:12px 0 6px}.ca-table td small{display:block;color:var(--muted);margin-top:2px}.ca-table td:nth-child(n+3){white-space:nowrap}.ca-ok{color:#2d7350;font-weight:700}
.ca-remind{border:1px solid #f2c9a0;background:#fff6ec;border-radius:10px;padding:12px;margin:14px 0}.ca-remind p{margin:0 0 8px}.ca-texted ul{padding-left:18px}.ca-texted li.ok{color:#2d7350}.ca-texted li.no{color:#a53032}
.ca-check{display:flex;gap:10px;align-items:flex-start;margin:6px 0 12px}.ca-check small{display:block;color:var(--muted)}
@media(max-width:720px){.ca-banner{padding:6px 8px}.ca-alert{padding:10px 12px}.ca-msg{font-size:17px}.ca-alert .ca-go{flex:1 0 auto}.ca-line{grid-template-columns:minmax(0,1fr)}.ca-count{grid-column:1;grid-row:auto}.ca-other{grid-template-columns:1fr}.ca-people{grid-template-columns:1fr}}
@media print{.ca-banner{display:none}}
@media(max-width:720px){.nt-row{grid-template-columns:minmax(0,1fr) auto}.nt-kind{grid-column:1/-1;padding:0}.nt-table th,.nt-table td{padding:10px 8px}.nt-check{white-space:normal;align-items:flex-start}}
/* T&M tickets and forms (tmtickets.js, forms.js): the ticket, the box to sign in (touch-action none: a finger draws, the page does not scroll), the form's items */
.tm-state,.fm-state{margin:0 0 12px;padding:8px 10px;border-radius:8px;background:#f1f4f7;font-size:13px}.tm-state.good,.fm-state.good{background:#e8f6ee;color:#1f6b44}.tm-state.warn,.fm-state.warn{background:#fff7e8;color:#8a5a12}
.tm-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 16px;margin:0 0 12px}.tm-facts div{min-width:0}.tm-facts dt{font-size:11px;color:var(--muted)}.tm-facts dd{margin:2px 0 0;font-weight:600;overflow-wrap:anywhere}
.tm-desc,.tm-notes{white-space:pre-wrap;color:var(--ink);overflow-wrap:anywhere}.tm-sum{font-size:12px}.tm-total td{font-weight:600}
.tm-buttons{display:flex;flex-wrap:wrap;gap:8px;border-top:1px solid var(--line);padding-top:12px;margin-top:12px}.tm-buttons button{min-height:44px;flex:1 1 40%}
.tm-box{border:1px solid var(--line);border-radius:8px;padding:12px;margin:0 0 12px}
.tm-sig{margin:8px 0;max-width:360px}.tm-sig img{display:block;width:100%;height:auto;border:1px solid var(--line);border-radius:6px;background:#fff}.tm-sig figcaption{font-size:11px;color:var(--muted);margin-top:4px}
.tm-voided{margin:12px 0;font-size:12px}.tm-voided summary{cursor:pointer;color:var(--muted)}.tm-voided ul{margin:6px 0;padding-left:18px}
.tm-shot{position:relative;display:inline-flex}.tm-shot>button.sg-mini{position:absolute;top:-6px;right:-6px;background:#fff;border:1px solid var(--line);border-radius:50%;padding:0 7px;min-height:0;line-height:1.6}
.tm-grid td{vertical-align:top;padding:8px 10px}.tm-grid td[data-col=who],.tm-grid td[data-col=item]{min-width:170px}.tm-grid td[data-col=hours],.tm-grid td[data-col=qty],.tm-grid td[data-col=rate],.tm-grid td[data-col=price]{width:96px;min-width:80px}.tm-grid td>input+input,.tm-grid td>select+input,.tm-grid td>input+select,.tm-grid td>select+select{margin-top:6px}
.tm-sign-lead{font-size:15px;color:var(--ink);font-weight:600}.tm-sign-what{font-size:16px;margin:12px 0 4px}
.sig-wrap{position:relative;border:2px dashed #b8c4d1;border-radius:10px;background:#fff}.sig-pad{display:block;width:100%;height:auto;aspect-ratio:3/1;touch-action:none;cursor:crosshair;border-radius:8px;background:#fff;user-select:none;-webkit-user-select:none}
.sig-wrap::after{content:'';position:absolute;left:40px;right:16px;bottom:22%;border-bottom:1px solid #c9d3de;pointer-events:none}.sig-x{position:absolute;left:14px;bottom:calc(22% - 4px);color:#9aa8b8;font-size:18px;pointer-events:none}.sig-tools{justify-content:flex-end;margin-top:4px}
.fm-sec{margin:18px 0 8px;padding-top:12px;border-top:1px solid var(--line);font-size:14px}.fm-item{margin:10px 0}.fm-q{display:block;font-size:12px;color:#566679;margin-bottom:6px}
.fm-yn{border:0;padding:0;min-width:0}.fm-yn legend{font-size:12px;color:#566679;margin-bottom:6px;padding:0}.fm-yn .chips{margin-bottom:4px}.fm-yn .chip{min-height:40px;padding:8px 18px;font-size:13px}
.fm-yn .chip:has(input:checked){background:#e8f5fb;border-color:#b5dcec;color:#117da8}.fm-yn .chip-no:has(input:checked){background:#fdecec;border-color:#efb7b7;color:#a53032}
.fm-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;align-items:start;padding:8px 0;border-bottom:1px solid var(--line);margin:0}.fm-row .fm-q{margin:0;color:var(--ink)}.fm-row .fm-follow{grid-column:1/-1}.fm-a{overflow-wrap:anywhere;white-space:pre-wrap}.fm-no strong{color:#a53032}
.fm-follow{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;font-size:12px}.fm-yn:not(:has(input[value="No"]:checked)) .fm-follow{display:none}.fm-follow-btn{padding:6px 12px;min-height:36px;font-size:12px;border-color:#efb7b7;color:#a53032}.fm-signing{border:1px solid var(--line);border-radius:8px;padding:10px}
.fm-picks{display:grid;gap:8px}.fm-pick{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:8px;padding:10px}.fm-pick small{display:block}.fm-pick input{margin-top:3px}.fm-sec-row td{background:#f8fafb}.paper-links{margin-top:8px}
@media(max-width:720px){.tm-facts{grid-template-columns:1fr}.fm-row{grid-template-columns:1fr}.tm-buttons button{flex:1 1 100%}.tm-grid td{padding:6px}.tm-grid td[data-col=who],.tm-grid td[data-col=item]{min-width:150px}}
/* Plan tools (plantools.js): the measuring bar and layer on a sheet, the groups, and the compare view. The layer is SVG in
   page units inside the zoomed page; dots, handles and labels keep their size on screen by scaling with --inv. */
.tk-btns{display:flex;gap:4px;margin-right:4px}.tk-btns button.active{background:#e8f5fb;color:#117da8}.tk-alert::after{content:'';display:inline-block;width:7px;height:7px;border-radius:50%;background:#e8590c;margin-left:6px;vertical-align:1px}
.tk-bar{background:#fbfcfd;border-bottom:1px solid var(--line);padding:6px 10px 5px}.tk-bar[hidden],.tk-banner[hidden],.tk-drop[hidden]{display:none}
.tk-row{display:flex;align-items:center;gap:6px;overflow-x:auto;white-space:nowrap;scrollbar-width:thin}.tk-row button{min-height:0;padding:6px 10px;flex:none}.tk-right{margin-left:auto;display:flex;gap:2px;flex:none}
.tk-pick{display:flex;align-items:center;gap:6px;margin:0 2px;flex:none}.tk-pick select{min-height:0;padding:5px 8px;width:auto;max-width:230px}
.tk-readout{display:block;font-size:12px;color:#3d4b5c;margin-top:4px;min-height:16px;line-height:1.35}.tk-warn{color:#a15c07}
svg.tk-sw{width:14px;height:14px;flex:none;vertical-align:-2px}
.tk-banner{display:flex;align-items:center;gap:8px;flex-wrap:wrap;background:#fff6e8;border-bottom:1px solid #f1d6a6;padding:6px 10px;font-size:12px;color:#6b4a12}.tk-banner button{min-height:0;padding:4px 10px}
.tk-drop{position:absolute;bottom:18px;left:50%;transform:translateX(-50%);display:flex;gap:8px;align-items:center;background:white;padding:8px 12px;border-radius:12px;box-shadow:0 4px 20px #1d293940;max-width:calc(100% - 24px);flex-wrap:wrap;justify-content:center;z-index:6}.tk-drop button{min-height:0;padding:7px 12px}.tk-sel{display:flex;align-items:center;gap:6px;font-size:12px}
.tk-layer{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
.tk-layer .tk-line{fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.tk-layer .tk-line.sel{stroke-width:5}.tk-layer .tk-hit{fill:none;stroke:transparent;stroke-width:18}
.tk-layer .tk-shape{fill-opacity:.16;stroke-width:2.5}.tk-layer .tk-shape.sel{fill-opacity:.3;stroke-width:4}.tk-layer .tk-draft{stroke-dasharray:8 5}.tk-layer .tk-shape.tk-draft{fill-opacity:.12}
.tk-layer .tk-dot,.tk-layer .tk-handle,.tk-layer .tk-label{transform-box:fill-box;transform-origin:center;transform:scale(var(--inv,1))}
.tk-layer .tk-dot{stroke:#fff;stroke-width:2.5}.tk-layer .tk-dot.sel{stroke:#172b42}.tk-layer .tk-handle{fill:#fff;stroke:#172b42;stroke-width:2}.tk-layer .tk-handle.on{fill:#ffc933}
.tk-layer .tk-label{font:700 13px Inter,system-ui,sans-serif;paint-order:stroke;stroke:#fff;stroke-width:4px;stroke-linejoin:round}
.viewer.tk-on .pins{pointer-events:none}.viewer.tk-tool .pins{opacity:.45}.viewer.tk-tool .viewer-stage{cursor:crosshair}
.viewer.tk-on .tk-hit{pointer-events:stroke}.viewer.tk-on .tk-shape{pointer-events:visiblePainted}.viewer.tk-on .tk-dot{pointer-events:visiblePainted}.viewer.tk-on .tk-handle{pointer-events:all;cursor:grab}.viewer.tk-tool .tk-shape,.viewer.tk-tool .tk-hit,.viewer.tk-tool .tk-dot{pointer-events:none}
.tk-grow{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}.tk-grow small{display:block;color:var(--muted);margin-top:2px}.tk-grow .actions{flex-wrap:nowrap;gap:2px}.tk-grow button{padding:6px 9px;min-height:0}
#drawer .tk-h{margin:22px 0 6px}.tk-est-lines td small{display:block;color:var(--muted);margin-top:2px}.tk-est-lines td small.error{color:#a53032}
.tk-colors{display:flex;flex-wrap:wrap;gap:8px;border:0;padding:0;margin:8px 0}.tk-colors legend{font-size:12px;color:var(--muted);margin-bottom:6px}.tk-color{display:flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:12px}.tk-color input{width:auto;min-height:0;margin:0}
.cmp .cmp-key{background:white;border-bottom:1px solid var(--line);padding:5px 10px;font-size:12px;display:flex;gap:14px;flex-wrap:wrap}.cmp-key .k-old{color:#c8303a}.cmp-key .k-new{color:#1f5fd6}.cmp-key .k-same{color:#5b6573}
.cmp-stage{position:relative;flex:1;display:flex;min-height:0;overflow:hidden;touch-action:none;cursor:grab;user-select:none;-webkit-user-select:none;outline:none}
.cmp-pane{position:relative;flex:1 1 0;overflow:hidden;min-width:0;min-height:0}.cmp-pane[hidden]{display:none}.cmp.side .cmp-pane.a{border-right:2px solid #c9d6e2}
.cmp-page{position:absolute;left:0;top:0;transform-origin:0 0;background:white;box-shadow:0 2px 14px #1d293933}.cmp-page canvas{display:block}.cmp-marks{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
.cmp-pin circle{fill:#fff;stroke-width:3}.cmp-pin text{font:700 12px Inter,system-ui,sans-serif;paint-order:stroke;stroke:#fff;stroke-width:4px;stroke-linejoin:round}.cmp-pin-in{transform:scale(var(--inv,1))}
.cmp-pin.left circle{stroke:#c8303a}.cmp-pin.left text{fill:#c8303a}.cmp-pin.check circle{stroke:#1f5fd6}.cmp-pin.check text{fill:#1f5fd6}.cmp-pin.cur circle{stroke:#5b6573}.cmp-pin.cur text{fill:#5b6573}.cmp-pin.flash circle{fill:#ffc933}
.cmp-slide{background:white;border-top:1px solid var(--line);padding:8px 12px;display:flex;align-items:center;gap:10px;font-size:12px}.cmp-slide[hidden]{display:none}.cmp-slide input{flex:1;min-height:0;padding:0}
@media(max-width:720px){.tk-bar{padding:5px 6px}.tk-pick select{max-width:150px}.tk-grow{grid-template-columns:auto minmax(0,1fr)}.tk-grow .actions{grid-column:1/-1;flex-wrap:wrap}.cmp.side .cmp-stage{flex-direction:column}.cmp.side .cmp-pane.a{border-right:0;border-bottom:2px solid #c9d6e2}.tk-drop{bottom:10px;padding:6px 8px;gap:6px}}
/* Field work without signal (offline.js): the count in the top bar, the bars over the page and the outbox */
.ob-slot:empty{display:none}.ob-badge{display:inline-flex;align-items:center;gap:6px;border:1px solid #f0c36d;background:#fff7e8;color:#8a5a12;border-radius:18px;padding:4px 10px 4px 5px;font-size:12px;font-weight:600;min-height:34px;white-space:nowrap}
.ob-badge .ob-n{display:inline-grid;place-items:center;min-width:22px;height:22px;border-radius:11px;background:#d38b1d;color:#fff;font-size:11px;padding:0 5px}.ob-badge.ob-needs{border-color:#efb7b7;background:#fdecec;color:#a53032}.ob-badge.ob-needs .ob-n{background:#c23b3f}
.ob-bars:empty{display:none}.offline-bar,.update-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;border-radius:10px;padding:10px 14px;margin:0 0 14px;font-size:13px;line-height:1.5}
.offline-bar{background:#2c3a4a;color:#f1f4f8}.offline-bar strong{color:#fff}.update-bar{background:#e8f5fb;border:1px solid #b5dcec;color:#17506b}.update-bar button{min-height:36px}
.ob-item{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}.ob-item:last-child{border-bottom:0}.ob-what{min-width:0}.ob-what strong{display:block;overflow-wrap:anywhere}.ob-what small{display:block;margin-top:3px;overflow-wrap:anywhere}
.ob-item .actions{flex-shrink:0;justify-content:flex-end}.ob-conflict .ob-state,.ob-refused .ob-state{color:#a53032}.ob-sending .ob-state{color:#17506b}.ob-values{margin:6px 0 0;padding-left:18px;font-size:12px;color:var(--muted)}.ob-values li{overflow-wrap:anywhere}
#ob-conflict table{width:100%;table-layout:fixed}#ob-conflict th,#ob-conflict td{white-space:normal;overflow-wrap:anywhere;vertical-align:top}#ob-conflict th:first-child,#ob-conflict td:first-child{width:28%}
.ob-dropped{margin-top:16px}.ob-dropped summary{cursor:pointer;color:var(--muted)}.ob-choices{margin:12px 0 4px}.ob-choices button{min-height:44px}
.ob-strip{display:none}
@media(max-width:1200px){.topbar .ob-slot{display:none}.ob-strip{display:block;margin:0 0 14px}.ob-strip .ob-badge{min-height:44px;padding:6px 14px 6px 8px;font-size:14px}.ob-strip .ob-badge::after{content:'›';margin-left:10px;font-size:20px;line-height:1}}
@media(max-width:720px){.ob-strip .ob-badge{display:flex;width:100%}.ob-strip .ob-badge::after{margin-left:auto}.ob-item{flex-direction:column}.ob-item .actions{justify-content:flex-start}}
/* Plans and field reports on paper (planprint.js): the print form, the punch and problems lists' filters, and the photo
   calendar, a month of day buttons each with its first photo and count. */
.pp-set{border:0;padding:0;margin:0 0 12px;min-width:0}.pp-set legend{font-size:12px;color:var(--muted);margin-bottom:6px;padding:0;font-weight:600}.pp-opt{display:flex;align-items:flex-start;gap:8px;margin:6px 0;font-size:14px;line-height:1.35}.pp-opt input{width:18px;min-height:18px;height:18px;flex:none;padding:0;margin:1px 0 0;accent-color:var(--accent)}
.pp-filters{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;justify-content:space-between;margin:2px 0 12px}.pp-filters .chips{margin:0}.pp-selects{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 10px}.pp-filters .pp-selects{margin:0}.pp-selects select{width:auto;max-width:100%;min-height:0;padding:5px 8px}
.pp-due{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);white-space:nowrap}.pp-due input{width:auto;min-height:0;padding:4px 6px}.pp-list .late{color:#a53032;font-weight:700}.pp-list td small .link{font-size:11px}
.pp-photo-tabs{margin:0 0 12px}.pp-month{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 10px}.pp-month strong{font-size:15px}.pp-month .muted{margin-right:auto}
.pp-cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;max-width:900px}.pp-wd{font-size:11px;color:var(--muted);text-align:center;font-weight:600;padding:2px 0}
.pp-day{position:relative;display:block;aspect-ratio:4/3;min-width:0;min-height:0;padding:0;border:1px solid var(--line);border-radius:6px;background:white;overflow:hidden;cursor:pointer}.pp-day.pp-blank{border:0;background:none;cursor:default}
.pp-day img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}.pp-day .pp-d{position:absolute;top:3px;left:5px;z-index:1;font-size:11px;font-weight:650;color:var(--ink)}.pp-day.has .pp-d{color:#fff;text-shadow:0 1px 3px #000c}
.pp-day .pp-n{position:absolute;right:3px;bottom:3px;z-index:1;min-width:18px;padding:1px 6px;border-radius:9px;background:#172b42;color:#fff;font-size:11px;font-weight:700;line-height:16px;text-align:center}.pp-day.today{border:2px solid #117da8}.pp-day.active{outline:3px solid #117da8;outline-offset:1px}.pp-day:hover{filter:brightness(1.06)}
.pp-tz{margin:8px 0 0;font-size:11px}
@media(max-width:720px){.pp-cal{gap:2px}.pp-day{border-radius:4px;aspect-ratio:1}.pp-day .pp-d{top:2px;left:3px;font-size:10px}.pp-day .pp-n{right:2px;bottom:2px;min-width:0;padding:0 4px;font-size:10px;line-height:14px}.pp-filters{gap:8px}.pp-selects select{max-width:46vw}}
/* Microsoft 365 and OneDrive (onedrive.js) */
.od-status{margin:12px 0;font-size:13px}.od-status.on{color:#2d7350}
.od-code{border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:6px;padding:12px 16px;margin:12px 0;background:var(--surface)}.od-code p{margin:4px 0}
.od-user-code{display:inline-block;font-size:28px;letter-spacing:.12em;padding:6px 0;user-select:all;-webkit-user-select:all;overflow-wrap:anywhere}
.od-steps{margin:8px 0 0;padding-left:20px;line-height:1.6}.od-steps li{margin:4px 0}
.od-crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;margin:12px 0 8px;font-size:12px;overflow-wrap:anywhere}.od-crumbs>.quiet{margin-left:auto}
.od-job td[data-col="name"],.od-job td[data-col="doc"],.od-job td[data-col="state"]{overflow-wrap:break-word}
.od-job td small,.od-ver small{display:block;color:var(--muted);font-size:11px}
.od-bad{color:#a53032}.od-ok{color:#2d7350;font-weight:600}.od-sub{margin:18px 0 8px;font-size:14px}
#drawer .actions:has(.od-doc){flex-wrap:wrap}.actions>.od-doc{flex:1 0 100%;min-width:0}
.od-ver{padding:8px 0;border-bottom:1px solid var(--line);font-size:12px;overflow-wrap:anywhere}.od-ver .od-name{display:block;color:var(--muted)}
.od-browse li{display:flex;justify-content:space-between;align-items:center;gap:8px;overflow-wrap:anywhere}#od-browse-q{width:100%;margin:8px 0}
.od-where{margin:4px 0 8px;overflow-wrap:anywhere}
.od-tasks{margin:6px 0 12px}.od-tasks li{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;padding:6px 0;border-bottom:1px solid var(--line);font-size:13px}.od-tasks li:last-child{border-bottom:0}
.od-tasks li>span{flex:1 1 240px;min-width:0;overflow-wrap:anywhere}.od-tasks li small{color:var(--muted);font-size:11px}.od-tasks li>span small{display:block}.od-tasks li.od-bad>span{color:#a53032}
.od-search{margin-top:8px}.od-search-form{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 8px}.od-search-form input{flex:1 1 220px;min-width:0}.od-search-form select{flex:0 1 auto;width:auto;max-width:100%}
.od-job [data-grid="od-search"] td small{display:block;color:var(--muted);font-size:11px;overflow-wrap:anywhere}.od-job td[data-col="name"] small{overflow-wrap:anywhere}
.jf-list{margin:8px 0;padding-left:22px}.jf-list li{padding:3px 0}.jf-item{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.jf-item input{flex:1 1 200px;min-width:0}.jf-item small{flex:1 0 100%;color:var(--muted);font-size:11px}.jf-item .actions{gap:4px}.table-wrap.jf-filing{max-height:none}.jf-filing select{min-width:170px}
#m365-app-form>.wide,#od-settings-form>.wide,#od-place-form>.wide,#od-stages-form>.wide{grid-column:1/-1}#m365-app-form .form-actions,#od-settings-form .form-actions,#od-place-form .form-actions,#od-stages-form .form-actions{position:static;margin-top:0;padding:0}#od-settings-form>.check,#od-place-form>.check{padding:0}
@media(max-width:720px){.od-job [data-grid="od-copies"] thead,.od-job [data-grid="od-folder"] th:nth-child(3),.od-job [data-grid="od-folder"] td[data-col="by"]{display:none}
 .od-job [data-grid="od-copies"],.od-job [data-grid="od-copies"] tbody,.od-job [data-grid="od-copies"] tr,.od-job [data-grid="od-copies"] td{display:block;width:auto}.od-job [data-grid="od-copies"] tr{padding:6px 0;border-bottom:1px solid var(--line)}.od-job [data-grid="od-copies"] td{border:0;padding:2px 8px}.od-job [data-grid="od-folder"] td.nowrap{white-space:normal}}
/* The 2026 Projects Tracker read by the app (trackersync.js): its Settings panel, Estimating → Tracker, the sheets' line */
.ts-line{font-size:12px;color:var(--muted);overflow-wrap:anywhere;margin-right:auto}.ts-line.warn{color:#a53032}.ts-line button.link{font-size:12px}
.ts-path{overflow-wrap:anywhere}.ts-acts{margin:8px 0}.ts-top{margin:0 0 12px}.ts-import{margin:0 0 12px}
.ts-reads li{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px;padding:6px 0;border-bottom:1px solid var(--line);font-size:13px}.ts-reads li:last-child{border-bottom:0}.ts-reads li>span{flex:1 1 260px;min-width:0;overflow-wrap:anywhere}.ts-reads small{color:var(--muted)}
#ts-file-form>.wide,#ts-read-form>.wide,#ts-folder-form>.wide{grid-column:1/-1}#ts-file-form .form-actions,#ts-read-form .form-actions,#ts-folder-form .form-actions{position:static;margin-top:0;padding:0}#ts-read-form>.check{padding:0}
.ts-sec td{vertical-align:top;overflow-wrap:anywhere}.ts-sec td small{display:block;color:var(--muted);font-size:11px}.ts-sec td[data-col=act]{white-space:nowrap}.ts-sec td[data-col=act] button{margin:0 6px 4px 0}.ts-none{margin:4px 0 16px}
.ts-folders{gap:6px}.ts-folders li{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:4px 8px}.ts-folders li>span{min-width:0;overflow-wrap:anywhere}
.ts-writes li>div{min-width:0;overflow-wrap:anywhere}.ts-writes small{display:block;color:var(--muted);font-size:12px}.ts-bid-folder{margin:8px 0;overflow-wrap:anywhere}
.bs-sheet .bs-folder{display:inline-flex;align-items:center;flex:none;padding:0 6px 0 0;color:var(--accent)}.bs-sheet .bs-linkbox .bs-t{flex:1 1 auto;min-width:0;padding-right:4px}.bs-sheet:has(.bs-folder) th[data-col=externalNumber]{width:108px}
@media(max-width:720px){.ts-sec thead{display:none}.ts-sec table,.ts-sec tbody,.ts-sec tr,.ts-sec td{display:block;width:auto;max-width:none}.ts-sec tr{padding:8px 0;border-bottom:1px solid var(--line)}.ts-sec td{border:0;padding:2px 8px;height:auto}.ts-sec td.nowrap{white-space:normal}
 .ts-sec td[data-col=tracker]::before{content:'On the tracker: ';color:var(--muted)}.ts-sec td[data-col=app]::before{content:'In the app: ';color:var(--muted)}.ts-sec td[data-col=stage]::before{content:'Stage folder: ';color:var(--muted)}}
#load-bar{position:sticky;top:0;z-index:60;display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:center;background:#fff3dc;color:#6b4a12;border-bottom:1px solid #eed9ae;padding:10px 16px;font-size:12px}#load-bar button{min-height:32px;padding:6px 14px}
/* PLANPIN-NEEDS: About this app, Where you're signed in (account.js) */
.about-list{display:grid;grid-template-columns:140px minmax(0,1fr);gap:8px 16px;margin:0 0 12px}.about-list dt{color:var(--muted)}.about-list dd{margin:0;font-weight:600;overflow-wrap:anywhere}.about-line{margin:4px 0 16px}
.jf-hits{margin:12px 0}.jf-hit{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--line)}.jf-hit:last-child{border-bottom:0}.jf-hit>div{min-width:0;flex:1}
.jf-hit strong,.jf-hit small{display:block;overflow-wrap:anywhere}.jf-hit small{margin:3px 0 4px}.jf-hit>button,.jf-hit>.pill{flex:none}@media(max-width:720px){.jf-hit{flex-wrap:wrap}}
#my-sessions td small,#drawer [data-grid="sessions"] td small{overflow-wrap:anywhere}
@media(max-width:720px){[data-grid="sessions"] thead{display:none}[data-grid="sessions"],[data-grid="sessions"] tbody,[data-grid="sessions"] tr,[data-grid="sessions"] td{display:block;width:auto;max-width:none}
 [data-grid="sessions"] tr{padding:8px 0;border-bottom:1px solid var(--line)}[data-grid="sessions"] td{border:0;padding:2px 8px}[data-grid="sessions"] td[data-col="started"]::before{content:'Signed in '}[data-grid="sessions"] td[data-col="seen"]::before{content:'Last seen '}}
/* PLANPIN-NEEDS: packing lists and installation instructions for the crew (crewkit.js) */
.kit-list{border:1px solid var(--line);border-radius:8px;padding:12px 14px;margin:0 0 12px;background:#fff}.kit-list .panel-head{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}.kit-list h3{margin:0;overflow-wrap:anywhere}.kit-list .table-wrap{max-height:none}
.kit-small{font-size:12px}.kit-docs{list-style:none;margin:0;padding:0}.kit-doc{display:flex;gap:12px;align-items:flex-start;padding:10px 0;border-bottom:1px solid var(--line)}.kit-doc:last-child{border-bottom:0}
.kit-doc>div{min-width:0;flex:1}.kit-doc small{display:block;color:var(--muted);font-size:11px;margin-top:3px;overflow-wrap:anywhere}.kit-doc .actions{margin-top:6px}
.kit-shot{flex:0 0 auto}.kit-shot img{display:block;width:96px;height:72px;object-fit:cover;border-radius:6px;border:1px solid var(--line)}
@media(max-width:720px){[data-grid="kit-packing"] thead{display:none}[data-grid="kit-packing"],[data-grid="kit-packing"] tbody,[data-grid="kit-packing"] tr,[data-grid="kit-packing"] td{display:block;width:auto;max-width:none}
 [data-grid="kit-packing"] tr{padding:6px 0;border-bottom:1px solid var(--line)}[data-grid="kit-packing"] td{border:0;padding:2px 8px}[data-grid="kit-packing"] td[data-col="qty"]::before{content:'Qty '}[data-grid="kit-packing"] td[data-col="bin"]::before{content:'From bin '}
 .kit-shot img{width:72px;height:56px}}
/* PLANPIN-NEEDS: Reports → Field status (statusreport.js) */
.str-tools .actions{align-items:flex-end}.str-tools select{max-width:260px}.str-pins{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:2px}
@media(max-width:720px){.str-tools select{max-width:100%}.str-tools .field.inline{flex-wrap:wrap}
 [data-grid="status-report"] thead{display:none}[data-grid="status-report"],[data-grid="status-report"] tbody,[data-grid="status-report"] tr,[data-grid="status-report"] td{display:block;width:auto;max-width:none}
 [data-grid="status-report"] tr{padding:8px 0;border-bottom:1px solid var(--line)}[data-grid="status-report"] td{border:0;padding:3px 12px}
 [data-grid="status-report"] td[data-col="problems"]::before{content:'Problems: '}[data-grid="status-report"] td[data-col="punch"]::before{content:'Punch: '}[data-grid="status-report"] td[data-col="customer"]::before{content:'Customer: '}}
/* PLANPIN-NEEDS: the calendar's filters (schedule.js) */
.sg-cal-tools .field.inline select{max-width:220px}
@media(max-width:720px){.sg-cal-tools .field.inline select{max-width:150px}}
/* The Plans tab the PlanPin way (planpin.js): PlanPin's rail (Sheets, Pin status, Filter, Reports, Data) beside the stage
   (Plan | Photos | Reports), the toolbar in PlanPin's order, the bulk bar under the status band, the sheets' menu, the
   pin's sheet beside the plan (a bottom sheet on a phone) and the Photos and Reports views. Status colors are the ones above. */
.pp-shell{display:grid;grid-template-columns:264px minmax(0,1fr);background:white;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;margin-bottom:16px}
.pp-rail{border-right:1px solid var(--line);background:white;overflow-y:auto;max-height:calc(100vh - 120px);position:sticky;top:0;min-width:0}
.pp-sect{padding:14px 16px;border-bottom:1px solid var(--line)}.pp-sect:last-child{border-bottom:0}
.pp-sect h3{display:flex;justify-content:space-between;align-items:center;gap:8px;margin:0 0 10px;font-size:10.5px;font-weight:650;letter-spacing:.12em;text-transform:uppercase;color:#7a8b9e}.pp-sect h3 em{font-style:normal;letter-spacing:0;font-variant-numeric:tabular-nums;color:#4a5a6c}
.pp-sect .field{margin-bottom:10px;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:#7a8b9e;font-weight:650}.pp-sect .field select,.pp-sect .field input{text-transform:none;letter-spacing:0;font-weight:500;font-size:13px;color:var(--ink)}
.pp-sheets{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}
.pp-sheet{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:7px;background:#f6f8fa;touch-action:pan-y;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.pp-sheet:hover{border-color:#c3ccd8}.pp-sheet.on{background:#e8f5fb;border-color:var(--accent);box-shadow:inset 3px 0 0 var(--accent)}
.pp-sheet.dragging{background:white;box-shadow:0 10px 24px #1d293933;position:relative;z-index:3;cursor:grabbing}
.pp-grip{display:grid;place-items:center;width:20px;flex:none;color:#9aa6b2;cursor:grab;font-size:12px;touch-action:none}
.pp-sheet button.pp-sheet-open{flex:1;min-width:0;display:flex;align-items:center;gap:8px;border:0;background:none;padding:9px 4px 9px 2px;text-align:left;min-height:42px;border-radius:0}
.pp-sheet-open .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600}
.pp-sheet-open .ct{flex:none;font-size:11px;font-weight:600;color:#4a5a6c;background:white;border-radius:999px;padding:2px 8px;font-variant-numeric:tabular-nums}
.pp-sheet button.pp-more{flex:none;padding:0 10px;min-height:0;color:#7a8b9e;font-weight:700;border-radius:0 6px 6px 0}
.pp-btns{display:flex;flex-wrap:wrap;gap:6px}.pp-btns button{padding:7px 11px;min-height:0;font-size:12.5px;border:1px solid #c3ccd8;background:#f6f8fa}.pp-btns button.danger{color:#a53032}
.pp-hint{font-size:12px;margin:10px 0 0}
.pp-legend{display:flex;flex-direction:column}
.pp-legend button{display:flex;align-items:center;gap:10px;width:100%;border:0;background:none;border-radius:7px;padding:7px 8px;min-height:36px;font-weight:600;font-size:12.5px;text-align:left}
.pp-legend button:hover{background:#f6f8fa}.pp-legend button.off{opacity:.34}.pp-legend button.zero b{color:#9aa6b2}.pp-legend b{margin-left:auto;font-weight:500;color:#4a5a6c;font-variant-numeric:tabular-nums}
.pp-shell>.plans-panel{min-width:0;padding:0;margin:0;border:0;border-radius:0;display:flex;flex-direction:column;background:#eef1f5}
.pp-stagehead{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;padding:10px 12px;border-bottom:1px solid var(--line);background:white}
.pp-stagehead .actions button{padding:7px 11px;min-height:0}
.pp-seg{display:inline-flex;background:#f6f8fa;border:1px solid var(--line);border-radius:999px;padding:3px;gap:2px}
.pp-seg button{border:0;background:transparent;border-radius:999px;padding:6px 16px;min-height:0;font-weight:700;color:#4a5a6c}.pp-seg button.on{background:white;color:var(--ink);box-shadow:0 1px 2px #11192412,0 1px 1px #1119240a}
.pp-shell .plan-slot{flex:1}.pp-shell .viewer.inline{border:0;border-radius:0;height:calc(100vh - 190px);min-height:480px}
.pp-shell>.plans-panel>.panel,.pp-shell>.plans-panel>.empty{margin:16px;border-radius:var(--radius)}.pp-shell>.plans-panel>.empty{background:white;border:1px solid var(--line)}
/* The viewer's toolbar in PlanPin's order: the sheet and ‹ 1 / 3 ›, the pins to drop, the zoom and Undo, the tools. */
.viewer-bar .vb-title{display:flex;align-items:center;gap:6px;min-width:0;padding:6px 8px}.viewer-bar .vb-title .viewer-title{max-width:34vw}.viewer.inline .vb-title .viewer-title{max-width:220px}.vb-caret{color:#7a8b9e;font-size:11px}
body.mockup-db .viewer.inline{top:auto}  /* the band moves the full-screen viewer down, not the one in the page */
.arm-group .chip{white-space:nowrap}
.vb-nav{display:inline-flex;align-items:center;gap:2px}.vb-count,.vb-zoom{font-size:11.5px;color:#7a8b9e;font-variant-numeric:tabular-nums;white-space:nowrap}.vb-zoom{min-width:42px;text-align:center}
.viewer-bar .arm-group{margin-left:0}.arm-group .chip{font-weight:700}.arm-group .chip.vb-drop{background:#1d2939;color:white;border-color:#1d2939}
.arm-group .chip.active{background:var(--s-measure);color:white;border-color:var(--s-measure)}
.pp-undo.off{opacity:.45}.viewer-bulk .pp-undo{display:none}
.viewer-bulk{background:#e8f5fb;border-top:0;border-bottom:1px solid var(--accent);padding:8px 12px}.viewer-bulk select{width:auto;min-height:0;padding:6px 10px;font-weight:600;max-width:180px}.viewer-bulk button.danger{color:#a53032}
/* The sheets' menu (right-click, a long press, or ⋯) */
/* The pin's sheet beside the plan, PlanPin's width, with its colored dot; the plan moves clear of it (ppnReveal). */
#drawer:has(.pin-sheet){width:min(440px,100vw);padding:22px 20px}
.pp-dhead{justify-content:flex-start;gap:10px}.pp-dhead h2{flex:1;min-width:0;font-size:19px}.pp-dhead .quiet{margin-left:auto}
.pp-dot{width:22px;height:22px;border-radius:50%;flex:none;border:2.5px solid white;box-shadow:0 1px 4px #0005;background:#7b8a9a}
.pp-dot.state-measure{background:var(--s-measure)}.pp-dot.state-measured{background:var(--s-measured)}.pp-dot.state-ordered{background:var(--s-ordered)}.pp-dot.state-delivered{background:var(--s-delivered)}.pp-dot.state-installed{background:white;border-color:var(--s-installed)}.pp-dot.state-verified{background:var(--s-verified)}.pp-dot.state-rework{background:var(--s-rework)}.pp-dot.state-blocked{background:var(--s-blocked)}
.pp-dot.type-issue{background:#e07b24;border-radius:4px}.pp-dot.type-issue.state-resolved{background:#9aa6b2}.pp-dot.type-punch{background:var(--s-rework);border-radius:3px}.pp-dot.type-photo{background:#0e8c8c;border-radius:4px}.pp-dot.type-rfi{background:#172b42}
/* The pin sheet's foot, PlanPin's way: Save pin wide and first, Delete beside it, then Move pin and Report a problem. */
.pin-sheet #pin-form .form-actions{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 8px;border-top:1px solid var(--line);margin-top:16px;padding:12px 0}
.pin-sheet #pin-form .form-actions button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pin-sheet #pin-form .form-actions .primary{order:-2}.pin-sheet #pin-form .form-actions .danger{order:-1}
.pp-warn{margin:0 0 12px;padding-left:18px;line-height:1.6}.pp-warn li{margin:4px 0}
.pp-mass{display:grid;grid-template-columns:minmax(130px,auto) 1fr;gap:8px 12px;align-items:center;margin:12px 0}.pp-mass textarea{min-height:60px}
.photo-more{margin:10px 0}.photo-more summary{cursor:pointer;font-weight:600;padding:6px 0}
/* The Photos view: the filters and the thumbnails with their captions */
.pp-pfilters{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-bottom:14px;align-items:end}.pp-pfilters input[type=search]{grid-column:span 2}
.pp-date{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--muted)}.pp-pfilters button{align-self:center}
.pp-grid figcaption strong{display:block;color:var(--ink);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pp-tags{display:flex;flex-wrap:wrap;gap:3px;margin-top:3px}.pp-tags span{background:#eef1f5;border-radius:999px;padding:1px 7px;font-size:10px;color:#4a5a6c}
/* The Reports view */
.pp-figs{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:16px}.pp-figs div{flex:1 1 130px;border:1px solid var(--line);border-radius:10px;padding:12px 14px;background:white}
.pp-figs span{display:block;font-size:10px;font-weight:650;letter-spacing:.11em;text-transform:uppercase;color:#7a8b9e}.pp-figs strong{display:block;font-size:26px;font-weight:700;margin-top:6px;font-variant-numeric:tabular-nums}
.pp-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}.pp-card{border:1px solid var(--line);border-radius:10px;padding:14px 16px;background:white;display:flex;flex-direction:column}
.pp-card h3{font-size:13.5px;margin:0 0 4px}.pp-card p{font-size:12px;flex:1}.pp-card .actions{margin-top:8px}
@media(max-width:1180px){.pp-shell{display:flex;flex-direction:column}.pp-shell>.plans-panel{order:1}.pp-rail{order:2;max-height:none;position:static;border-right:0;border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
 .pp-rail .pp-sect:first-child{grid-column:1/-1}.pp-rail .pp-sect{border-right:1px solid var(--line)}.pp-shell .viewer.inline{height:72vh;min-height:420px}}
@media(max-width:720px){.pp-shell{margin:0 -16px 16px;border-radius:0;border-left:0;border-right:0}.pp-rail{grid-template-columns:minmax(0,1fr)}.pp-rail .pp-sect{border-right:0}
 .pp-stagehead{padding:8px}.pp-stagehead .pp-seg{flex:1 1 100%}.pp-seg button{flex:1;padding:8px 6px}.pp-stagehead>.actions{width:100%;justify-content:space-between}
 .pp-shell .viewer.inline{height:78vh;min-height:440px}
 .viewer-bar{display:grid;grid-template-columns:minmax(0,1fr);gap:4px}.viewer-bar>.actions{min-width:0;width:auto}.viewer-bar .vb-sheet{flex-wrap:nowrap}.viewer-bar .vb-title{flex:1}.viewer-bar .vb-title .viewer-title{max-width:none;min-width:0;overflow:hidden;text-overflow:ellipsis}
 .viewer-bar .arm-group,.viewer-bar .vb-tools{flex-wrap:wrap;gap:4px}.viewer-bar .vb-view,.viewer-bar .vb-tools{display:inline-flex}.viewer-bar>.vb-view{flex-wrap:nowrap}
 .viewer .vb-view .pp-undo{position:absolute;left:10px;bottom:14px;z-index:6;background:white;border:1px solid var(--line);border-radius:999px;box-shadow:0 4px 14px #1d293940;padding:10px 16px;min-height:44px;font-weight:700}.viewer .vb-view .pp-undo.off,.viewer:has(.viewer-bulk:not([hidden])) .vb-view .pp-undo{display:none}
 .viewer-bulk{position:fixed;left:0;right:0;bottom:0;z-index:25;max-height:50vh;overflow-y:auto;border-top:1px solid var(--accent);border-bottom:0;box-shadow:0 -10px 30px #1d293930;padding:10px 12px calc(10px + env(safe-area-inset-bottom))}.viewer-bulk .pp-undo{display:inline-block}  /* a phone's bulk bar stays at the foot of the screen */
 #drawer:has(.pin-sheet){top:auto;bottom:0;height:62vh;width:100vw;border-left:0;border-top:1px solid var(--line);border-radius:14px 14px 0 0;padding:18px 16px;box-shadow:0 -10px 40px #162b4230}
 body.mockup-db #drawer:has(.pin-sheet){top:auto;height:62vh}.arm-group .chip{padding:6px 8px;font-size:12px}
 .pp-pfilters{grid-template-columns:repeat(2,minmax(0,1fr))}.pp-mass{grid-template-columns:minmax(0,1fr)}}

/* The operating model (OPS-CORE): a work order's next event (opswork.js), the job's Mobilizations tab (mobilizations.js),
   the Operations page (operations.js) and the job's Scorecard (scorecard.js). */
.ops-facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px 16px;margin:0 0 10px}.ops-facts div{min-width:0}.ops-facts dt{font-size:11px;color:var(--muted)}.ops-facts dd{margin:2px 0 0;overflow-wrap:anywhere}
.ops-readiness{display:flex;flex-wrap:wrap;gap:4px}.pill.ops-ready{font-size:10px}.pill.bad{background:#fdecec;color:#a53032}
.ops-cons{margin-top:6px}.ops-con{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}.ops-con>div{min-width:0}.ops-con strong{margin-right:6px}.ops-con small{display:block;margin-top:2px}.ops-con.late strong{color:#a53032}
.ops-add summary{color:#167fa9;font-weight:600}.ops-life{margin-top:12px}.ops-wo h4{margin-bottom:8px}
.ops-filters{justify-content:flex-start;gap:12px;margin:0 0 12px}.ops-filters .field.inline select{min-width:150px}.ops-queues{margin-bottom:12px}.ops-queues .chip small{color:var(--muted)}.ops-queues .chip.ops-empty{opacity:.6}
.ops-queues .count{padding:1px 6px;margin-left:2px}.ops-page td[data-col=do]{min-width:120px}.ops-page td[data-col=next]{min-width:180px}.ops-quick{display:flex;flex-wrap:wrap;gap:6px;align-items:flex-end;margin-top:6px}.ops-quick .field{gap:3px}.ops-quick input,.ops-quick select{min-height:34px;padding:6px 8px}
.mob-form{background:#f8fafb}.mob-order button{padding:2px 8px;min-height:0}.mob-tab td[data-col=work]{min-width:200px}.mob-tab td[data-col=pins]{min-width:180px}
.mob-bar{position:relative;height:8px;border-radius:4px;background:#edf1f5;margin:8px 0 4px;overflow:hidden}.mob-bar span{position:absolute;left:0;top:0;bottom:0;border-radius:4px}.mob-bar .mob-inst{background:#9fd3b6}.mob-bar .mob-ver{background:#2f8a5b}.mob-bar .mob-w0{width:0%}.mob-bar .mob-w5{width:5%}.mob-bar .mob-w10{width:10%}.mob-bar .mob-w15{width:15%}.mob-bar .mob-w20{width:20%}.mob-bar .mob-w25{width:25%}.mob-bar .mob-w30{width:30%}.mob-bar .mob-w35{width:35%}.mob-bar .mob-w40{width:40%}.mob-bar .mob-w45{width:45%}.mob-bar .mob-w50{width:50%}.mob-bar .mob-w55{width:55%}.mob-bar .mob-w60{width:60%}.mob-bar .mob-w65{width:65%}.mob-bar .mob-w70{width:70%}.mob-bar .mob-w75{width:75%}.mob-bar .mob-w80{width:80%}.mob-bar .mob-w85{width:85%}.mob-bar .mob-w90{width:90%}.mob-bar .mob-w95{width:95%}.mob-bar .mob-w100{width:100%}
.scorecard{border-left:4px solid #b9c3cf}.scorecard.green{border-left-color:#2f8a5b}.scorecard.amber{border-left-color:#c58a1d}.scorecard.red{border-left-color:#b33a3a}.scorecard h2{display:flex;align-items:center;gap:8px}
.card-dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:#b9c3cf;flex:none}.card-dot.green{background:#2f8a5b}.card-dot.amber{background:#d69a26}.card-dot.red{background:#c23b3b}
.card-why{margin-top:0}.card-qs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:12px 0}.card-q{background:#f8fafb;border:1px solid var(--line);border-radius:8px;padding:10px 12px;min-width:0}.card-q h3{font-size:12px;margin:0 0 4px}.card-q p{margin:0;color:var(--ink);font-size:12px;overflow-wrap:anywhere}
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:8px}.card-tile{border:1px solid var(--line);border-radius:8px;padding:10px 12px;min-width:0}.card-tile.red{background:#fdf3f3;border-color:#efcaca}.card-tile.amber{background:#fdf8ec;border-color:#f0dfb5}.card-tile.green{background:#f3faf6;border-color:#cde8d8}
.card-tile-head{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted)}.card-tile strong{display:block;margin:4px 0 2px;overflow-wrap:anywhere}.card-tile small{display:block;line-height:1.4;overflow-wrap:anywhere}.card-fin{margin-top:12px}
/* Each tile, question and At risk row opens where it is fixed (scorecard.js): a double-click, Enter or Space, or its link. */
.card-fix{touch-action:manipulation}.card-fix:hover{border-color:#8fc3db;box-shadow:0 1px 6px #1d29391c}.card-fix:focus-visible{outline:3px solid #8bd2ef;outline-offset:2px}  /* a double tap is a double-click here, not a zoom */
button.card-fix-link{display:block;margin-top:6px;padding:0;border:0;background:none;text-align:left;font-size:12px;font-weight:600;color:#117da8;min-height:0;overflow-wrap:anywhere}button.card-fix-link:hover{background:none;text-decoration:underline}.card-who{display:block;margin-top:6px;color:var(--muted);font-size:11px;line-height:1.4}
.card-fin button.card-fix-link,.card-fin .card-who{display:inline;margin:0 0 0 8px}.card-fin.card-fix{border-radius:8px;padding:2px 4px;margin-left:-4px}
.card-risks{display:grid;gap:8px;margin:12px 0}.card-risk{border:1px solid #efcaca;background:#fdf3f3;border-radius:8px;padding:10px 12px}.card-risk strong{display:block;overflow-wrap:anywhere}.card-risk small{display:block;margin-top:2px;color:var(--muted)}
.card-checks{list-style:none;margin:12px 0;padding:0;display:grid;gap:8px}.card-checks li{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--line);border-radius:8px}.card-checks li>span{font-weight:700;width:18px}.card-checks li.ok>span{color:#2f8a5b}.card-checks li.no>span{color:#b33a3a}.card-checks small{display:block;margin-top:2px}
.ops-award{border-top:1px solid var(--line);margin-top:16px;padding-top:4px}
/* The proof of concept's office findings: the shared Schedule form (its people, the team note, the double-booking warning;
   on the queue a row of its own that stays in view while the table scrolls sideways on a phone), what the app offers
   (Complete a mobilization, move the job to Installation), a constraint's owner and date, the job's Work orders tab, and
   a person's assigned jobs in Settings → People and access. */
.ops-sched-row>td{max-width:none;background:#f8fafb}.ops-scheduling>td{background:#f3f9fc}.ops-sf-wrap{position:sticky;left:0;width:min(640px,calc(100vw - 60px))}
.ops-quick.ops-sf{display:block;margin:0}.ops-sf .form-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px}.ops-sf-head{margin:0 0 2px;color:var(--ink)}.ops-sf-head small{display:inline;margin-left:6px}
.ops-sf-people>div:not(.pk-on){display:flex;flex-wrap:wrap;gap:0 18px}.ops-sf-off small{color:#946422}.ops-sf-team,.ops-sf-clash{margin:8px 0}.ops-quick.ops-sf .form-actions{position:static;padding:8px 0 0;margin-top:4px;background:none}
.ops-offer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;border:1px solid #b5dcec;background:#f2f9fc;border-radius:8px;padding:8px 12px;margin:0 0 10px;font-size:12px;color:var(--ink)}.card-offers{margin:8px 0 4px}
.ops-con>.actions{flex:none;flex-wrap:nowrap;gap:2px}.ops-con-edit{background:#f8fafb;border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin:6px 0 10px}.ops-con-edit .actions{justify-content:flex-end;margin-top:8px}
.mob-offer{color:#2d7350}.ops-wos td[data-col=next]{min-width:200px}.ops-wos td[data-col=wo]{min-width:150px}.ops-wos .chips{margin-bottom:8px}
.pj{gap:8px}.pj-list{max-height:220px;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:2px 10px}.pj-list .check small{margin-left:auto;text-align:right}.pj .actions{justify-content:flex-end}
@media(max-width:1000px){.card-qs{grid-template-columns:1fr 1fr}}
@media(max-width:720px){.card-qs{grid-template-columns:1fr}.card-grid{grid-template-columns:1fr 1fr}button.card-fix-link{min-height:40px;text-align:left}.ops-filters .field.inline{flex:1 1 100%}.ops-filters .field.inline select{min-width:0;flex:1}.ops-facts{grid-template-columns:1fr 1fr}}

/* The job's Communications tab (comms.js) and Settings → Integrations (integrations.js) */
.comms-kinds{margin:12px 0}.comms-kinds small{color:var(--muted);font-weight:600}
.comms-list{list-style:none;margin:0;padding:0}.comms-item{padding:12px 0;border-bottom:1px solid var(--line);overflow-wrap:anywhere}.comms-item:last-child{border-bottom:0}
.comms-meta{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;font-size:11px;color:var(--muted)}
.comms-kind{display:inline-block;padding:1px 8px;border-radius:999px;background:#eef2f6;color:#3b4a5c;font-size:11px;font-weight:600}
.comms-text .comms-kind,.comms-carla .comms-kind{background:#e8f5fb;color:#11607f}.comms-call .comms-kind{background:#edf7f0;color:#2d6b47}.comms-notice .comms-kind{background:#fdf4e3;color:#7a5413}
.comms-way{font-weight:600}.comms-way.in{color:#11607f}.comms-way.out{color:#2d6b47}
.comms-title{margin-top:4px}.comms-title .link{padding:0 4px}.comms-who,.comms-extra{font-size:12px;color:var(--muted);margin-top:2px}
.comms-text{white-space:pre-wrap;margin:6px 0 0;line-height:1.45}
.comms-suggest ul{margin-top:8px}.comms-suggest li{padding:8px 0;border-top:1px solid var(--line);overflow-wrap:anywhere}.comms-suggest .actions{margin-top:6px}
.ing-address{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:8px 0}.ing-address code{overflow-wrap:anywhere;background:var(--canvas);border:1px solid var(--line);padding:6px 8px;border-radius:6px;font-size:12px;min-width:0}
.ing-json{background:var(--canvas);border:1px solid var(--line);border-radius:6px;padding:10px;overflow:auto;max-height:340px;font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere;margin:6px 0}
.ing-secret{font-size:15px;letter-spacing:0;word-break:break-all}.ing-key .actions{margin-top:8px}
.ing-sees h3,.ing-event h3{margin:10px 0 4px;font-size:13px}.ing-event{border-top:1px solid var(--line);padding-top:10px;margin-top:14px}
.ing-waiting li{padding:10px 0;border-top:1px solid var(--line);overflow-wrap:anywhere}.ing-waiting select{max-width:320px}.ing-waiting .actions{margin-top:6px;flex-wrap:wrap}
@media(max-width:720px){[data-grid="ing-fields"] th:nth-child(2),[data-grid="ing-fields"] td[data-col="need"],[data-grid="ing-requests"] th:nth-child(2),[data-grid="ing-requests"] td[data-col="what"]{display:none}}
.ing-signing{display:grid;gap:8px;margin-top:10px;max-width:640px}.ing-signing label{display:grid;gap:4px;font-size:13px}.ing-signing textarea,.ing-signing input{width:100%;box-sizing:border-box;font-size:12px}
.ies-about{display:block;color:var(--muted);font-size:12px;margin-top:2px;line-height:1.35}
/* Today's work and Start job (startjob.js): big targets for one hand, dark text on white for bright sun */
.tw-day{margin:0 0 6px}.tw-when{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:10px 0 8px}.tw-card{border:1px solid #cfd8e2;border-left:5px solid var(--accent);border-radius:10px;padding:14px 16px;margin:0 0 12px;background:#fff}.tw-card.late{border-left-color:#c8454a}.tw-card.photos{border-left-color:#e2a13b}
.tw-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px}.tw-no{font-weight:700;color:#117da8;font-size:15px}.tw-job{font-size:17px;color:var(--ink)}.tw-what{margin:4px 0;color:var(--ink);font-weight:600;font-size:14px}.tw-where,.tw-time{margin:4px 0;color:#3d4b5c;font-size:14px}.tw-late{color:#a53032}.tw-stage{margin:6px 0 0;color:#2d7350;font-weight:600}.tw-stage.warn{color:#946422}
button.tw-go{display:block;width:100%;min-height:56px;margin:12px 0 4px;font-size:18px;border-radius:10px}.tw-foot{margin:4px 0 0;font-size:12px}.tw-foot .link{font-size:12px;color:var(--muted)}.tw-done p{margin:4px 0;color:#2d7350}.tw-empty{padding:18px 4px}
.sj .sj-top{border-bottom:1px solid var(--line);padding-bottom:10px;margin:-8px 0 10px}.sj-wo{margin:0;color:var(--ink);font-size:14px}.sj-job{margin:2px 0;color:var(--ink);font-size:17px;font-weight:650}.sj-addr{margin:2px 0;font-size:13px}
.sj-steps{display:flex;flex-wrap:wrap;gap:4px;list-style:none;padding:0;margin:0 0 14px}.sj-steps li{font-size:12px;border:1px solid var(--line);border-radius:14px;padding:4px 9px;color:var(--muted)}.sj-steps li.done{background:#e8f5ee;border-color:#cbe8d6;color:#2d7350}.sj-steps li.now{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:650}
.sj-said{margin:0 0 10px;padding:9px 12px;border-radius:8px;background:#e8f5ee;color:#1f5c3d;font-weight:600;font-size:14px;line-height:1.45}.sj-said.wait{background:#fff3dc;color:#6b4a12}.sj-q{padding:4px 0 8px}.sj-count{margin:0;font-size:12px;text-transform:uppercase;letter-spacing:.06em}.sj-question{font-size:24px;line-height:1.25;margin:6px 0 14px;color:var(--ink)}.sj-end .sj-question{color:#2d7350}
.sj-answers{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:14px 0 6px}button.sj-big{min-height:64px;font-size:20px;border-radius:12px;border-width:2px}button.sj-warn{border-color:#d9942f;color:#7a4f0e;background:#fff8ea}button.sj-wide{grid-column:1/-1;min-height:48px;font-size:15px;text-decoration:underline}.sj-answers>button.sj-big:only-child,.sj-end button.sj-big{grid-column:1/-1;width:100%}
.sj-cam{display:grid;grid-template-columns:1fr 1fr;gap:8px}.sj-cam .camera{margin:6px 0;min-height:56px;font-size:16px}.sj-gallery{position:relative;display:block;text-align:center;border:1px solid var(--line);border-radius:8px;padding:10px;font-weight:600;color:#117da8;margin:4px 0}.sj-gallery input{position:absolute;inset:0;opacity:0;min-height:0;cursor:pointer}.sj-chosen{font-size:12px;margin:4px 0}.sj-need{margin:4px 0;color:#946422;font-weight:600}
.sj-note textarea{min-height:64px;font-size:15px}.sj-list{display:flex;flex-direction:column;gap:6px;margin:6px 0 12px}.sj-opt{display:flex;align-items:center;gap:10px;border:1px solid #cfd8e2;border-radius:10px;padding:12px 14px;font-size:15px;color:var(--ink);cursor:pointer;min-height:48px;background:#fff}.sj-opt input{width:22px;height:22px;min-height:0;margin:0;flex-shrink:0;accent-color:var(--accent)}.sj-opt:has(input:checked){border-color:var(--accent);background:#eaf5fb}.sj-opt.big{font-size:18px;font-weight:650;justify-content:center;min-height:60px}
.sj-two{display:grid;grid-template-columns:1fr 1fr;gap:8px}.sj-ask{border:0;padding:0;margin:8px 0}.sj-ask legend{font-weight:650;color:var(--ink);margin-bottom:6px;font-size:15px}.sj-open-list{border:1px solid #eed9ae;background:#fff8ea;border-radius:8px;padding:8px 12px;margin:8px 0}.sj-open-list p,.sj-open-list ul{margin:2px 0;color:#6b4a12}
.sj-left button{margin-top:6px}.sj-links{display:grid;grid-template-columns:1fr;gap:8px;margin:6px 0 10px}button.sj-link{min-height:52px;font-size:16px;text-align:left}.sj-mid{margin:6px 0}
.sj-rem .sj-mat,.sj-rem .sj-if-material{display:none}.sj-rem:has(input[name=why][value^="Material"]:checked) .sj-mat,.sj-rem:has(input[name=materialNeeded][value=Yes]:checked) .sj-mat,.sj-rem:has(input[name=why][value^="Material"]:checked) .sj-if-material{display:block}.sj-rem:has(input[name=why][value^="Material"]:checked) .sj-if-other{display:none}
.sj-made{border:1px solid #cbe8d6;background:#f3faf6;border-radius:8px;padding:10px 14px;margin:12px 0}.sj-made h4{margin:0 0 6px}.sj-made ul{margin:0;padding-left:18px}.sj-made li{margin:4px 0}.sj-made small{display:block;color:var(--muted)}
.sj-log{margin:10px 0}.sj-log ul{margin:6px 0;padding-left:18px}.sj-log li{margin:4px 0}.sj-log small{display:block}.sj-where-ask{border:1px solid #9fcbe0;background:#f3fafd;border-radius:8px;padding:10px 12px;margin:0 0 12px}.sj-where-ask p{margin:0 0 8px;color:var(--ink)}.sj-where-line{font-size:12px;margin:10px 0 0}
.sj-kid{margin:8px 0}.sj-kid small{display:block}.sj-cta{margin:12px 0}.sj-cta button.sj-big{width:100%}.sj-cta small{display:block;margin-top:4px}.sj-steplog{margin:0;padding-left:18px}.sj-steplog li{margin:6px 0}.sj-steplog small{display:block}.sj-asks{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;border-top:1px solid var(--line);padding-top:10px;margin:10px 0;font-size:12px}.shot.sj-video{display:inline-grid;place-items:center;font-size:22px;text-decoration:none}
/* Field tips (crewtips.js): the Tips row under a work order's button, folded until opened; its reminders, and the strip of
   photos of similar work, which scrolls sideways inside itself only when the photos do not fit (contain keeps its width
   from ever widening the page on a phone); the office's list on Operations → Field tips. */
.ct-row{margin:8px 0 2px;border:1px solid #d9e6ef;border-radius:10px;background:#f7fbfd;max-width:100%;min-width:0;contain:inline-size}.sj .ct-row{margin:0 0 12px}
.ct-row>summary{display:flex;align-items:center;gap:6px;padding:10px 12px;min-height:44px;cursor:pointer;list-style:none;font-size:14px;color:var(--ink)}.ct-row>summary::-webkit-details-marker{display:none}
.ct-row>summary::after{content:'▾';margin-left:auto;color:var(--muted)}.ct-row[open]>summary::after{content:'▴'}.ct-count{color:var(--muted);font-weight:500}.ct-body{padding:0 12px 12px;min-width:0}
.ct-rems{list-style:none;margin:0;padding:0}.ct-rem{padding:8px 0;border-top:1px solid #e3edf3}.ct-rem:first-child{border-top:0}.ct-do{display:block;font-size:15px;line-height:1.35;color:var(--ink)}
.ct-basis,.ct-firm{display:block;margin-top:3px;font-size:12px;color:#3d4b5c;line-height:1.4}.ct-firm{color:var(--muted)}.ct-own .ct-do::before{content:'★ ';color:#b07a0c}
.ct-pill{display:inline-block;border-radius:10px;padding:1px 8px;font-size:11px;font-weight:700;background:#e3f3e9;color:#23633f;white-space:nowrap}.ct-pill.likely{background:#e6f2f9;color:#0f5a80}.ct-pill.early-sign{background:#fff1d6;color:#6b4a12}
.ct-acts{display:flex;flex-wrap:wrap;gap:4px 14px;margin-top:4px;align-items:center}.ct-acts .link{padding:4px 0;min-height:32px;font-size:13px}.ct-foot{margin:8px 0 0;display:flex;gap:16px;flex-wrap:wrap}
.ct-sub{margin:10px 0 6px;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.ct-strip{display:flex;flex-wrap:nowrap;gap:10px;overflow-x:auto;overscroll-behavior-x:contain;padding:2px 2px 6px;scroll-snap-type:x proximity;max-width:100%}.ct-strip.ct-wrap{flex-wrap:wrap;overflow:visible}
.ct-shot{flex:0 0 132px;width:132px;margin:0;scroll-snap-align:start}.ct-shot button.ct-pic{display:block;padding:0;border:1px solid var(--line);border-radius:8px;overflow:hidden;width:132px;height:99px;min-height:0;background:#eef1f4}
.ct-shot img{display:block;width:100%;height:100%;object-fit:cover}.ct-shot figcaption{font-size:11px;line-height:1.35;margin-top:4px;color:var(--ink);overflow-wrap:anywhere}.ct-shot figcaption small{display:block;color:var(--muted)}.ct-shot small.ct-why{color:#0f5a80}
.ct-hide{margin:8px 0;padding:10px;border:1px solid #eed9ae;background:#fff8ea;border-radius:8px}.ct-hide .form-actions{position:static;background:none;padding:6px 0 0;margin-top:4px}.ct-ev{margin:8px 0 2px;padding:8px 10px;border-left:3px solid #9fcbe0;background:#fff}
.ct-recs{list-style:none;margin:0;padding:0}.ct-recs li{padding:5px 0}.ct-recs small{display:block;color:var(--muted)}.ct-recs q{display:block;font-size:12px;color:#3d4b5c;margin-top:2px}.ct-recs .link{text-align:left;white-space:normal;padding:0;min-height:0}
.ct-trips summary{cursor:pointer;font-size:12px;color:#117da8;margin-top:6px}.ct-trips ul{list-style:none;padding:0;margin:4px 0}.ct-trips li{font-size:12px;color:var(--muted)}.ct-trips li.had{color:var(--ink)}
.ct-list .ct-top{display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px;align-items:center;margin:0 0 10px}.ct-list .ct-top p{margin:0;max-width:760px}
.ct-filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 12px}.ct-filters input{max-width:280px}.ct-sec{margin:0 0 18px}.ct-sec h3 small,.ct-sec h4 small{color:var(--muted);font-weight:500}
.ct-card{border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:10px;background:#fff;padding:12px 14px;margin:0 0 10px}.ct-card p{margin:4px 0}.ct-small{font-size:12px}
.ct-card.is-hidden{border-left-color:#98a2ad;background:#f7f8fa}.ct-card.is-hidden .ct-do{color:var(--muted);text-decoration:line-through}.ct-card-top{display:flex;gap:10px;align-items:flex-start;justify-content:space-between}
.ct-tags{display:flex;gap:6px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.ct-scope{display:inline-block;border-radius:10px;padding:1px 8px;font-size:11px;font-weight:600;background:#edf1f5;color:#3d4b5c;white-space:nowrap}
.ct-shows{font-size:13px}.ct-shows .link{padding:0;min-height:0}.ct-hidden-by{color:#6b4a12;font-size:13px}
.ct-own-list{list-style:none;padding:0;margin:0}.ct-own-list li{padding:8px 0;border-bottom:1px solid var(--line)}.ct-own-list small{display:block;color:var(--muted)}
.ct-settings .ct-claude{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:10px 0}.ct-history summary{cursor:pointer;font-weight:600}.ct-history ul{padding-left:18px}.ct-history small{display:block;color:var(--muted)}
.ct-pmark{align-items:center;flex-wrap:wrap}.ct-pmark small{font-size:12px}#drawer:has(#ct-list-drawer){width:min(900px,100vw)}
@media(max-width:720px){.ct-shot{flex-basis:112px;width:112px}.ct-shot button.ct-pic{width:112px;height:84px}.ct-card-top{flex-direction:column}.ct-tags{justify-content:flex-start}.ct-filters input{max-width:none;flex:1 1 100%}}
/* Start job's list of the work order's shades, by unit and pin tag (PROOFFIX-FIELD F3): a whole unit ticks in one tap; the serial is small print */
.sj-shades{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:10px 0 12px;background:#fbfcfd}.sj-shades-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap}.sj-shades-head h4{margin:0;font-size:16px}.sj-how{margin:4px 0 8px;font-size:13px}.sj-unit{margin:8px 0}.sj-unit-name{margin:10px 0 4px;font-weight:650;font-size:15px;color:var(--ink)}.sj-unit-all{font-size:16px;background:#f3f7fa}.sj-unit-all small{margin-left:auto;color:var(--muted)}.sj-opt.sj-shade{margin:5px 0 5px 18px;padding:10px 12px;flex-wrap:wrap;row-gap:2px}.sj-tag{font-weight:650;font-size:16px}.sj-serial{margin-left:auto;color:var(--muted);font-size:11px}.sj-shade.done{background:#f3faf6;border-color:#cbe8d6;cursor:default}.sj-shade.later{background:#fff8ea;border-color:#eed9ae;cursor:default}.sj-shade.later .sj-ok,.sj-shade.later .sj-by{color:#7a4f0e}.sj-ok{color:#2d7350;font-weight:700}.sj-by{flex-basis:100%;font-size:12px;color:#2d7350;padding-left:24px}.sj-back{flex-basis:100%;color:#b33a80;font-size:12px;padding-left:32px}button.sj-mark{width:100%;margin-top:8px}.sj-shades .sj-cam .sj-gallery{display:flex;align-items:center;justify-content:center;margin:6px 0;min-height:56px;font-size:15px}.sj-shades details summary{cursor:pointer;margin:8px 0 2px;color:#2d7350;font-weight:600}
/* The verify form's part (PROOFFIX-FIELD F7): on site or from photos, and the shades verified with the work order */
.sj-vhow,.sj-vset{border:1px solid var(--line);border-radius:8px;padding:6px 10px 8px;margin:8px 0}.sj-vhow legend,.sj-vset legend{font-weight:650;font-size:12px;padding:0 4px}.sj-vhow .check{display:inline-flex;align-items:center;gap:6px;margin-right:18px;white-space:nowrap}.sj-vunit{margin:6px 0}.sj-vunit>strong{display:block;font-size:12px;margin-bottom:2px}.sj-vunit .check{display:flex;gap:6px;align-items:center;margin:3px 0}.sj-vunit small{color:var(--muted)}.sj-vleft{color:#7a4f0e;margin:6px 0 0}
@media(max-width:720px){#drawer:has(.sj){padding:16px}.sj-question{font-size:22px}}
/* Start new bid (startbid.js): the form's parts in the price sheet's order, the result panel's steps, Look inside, and Settings → Price sheet template */
.sb-intro{margin:0;font-size:12px}.sb-set .sb-place{grid-column:1/-1;display:grid;grid-template-columns:2fr 1fr 1fr;gap:16px}.sb-pair{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.sb-result .sb-sum{margin:0 0 6px;color:var(--ink)}.sb-counts{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px}.sb-steps{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.sb-step{display:grid;grid-template-columns:28px minmax(0,1fr);gap:10px;padding:12px 0;border-bottom:1px solid var(--line)}.sb-mark{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:#edf1f5;color:#566679;font-weight:700;font-size:12px}
.sb-step.done .sb-mark{background:#e8f5ee;color:#2d7350}.sb-step.waiting .sb-mark{background:#fff3dc;color:#946422}.sb-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.sb-step p{margin:4px 0 0;overflow-wrap:anywhere}
.sb-step .actions{margin-top:6px}.sb-step .actions button{min-height:0;padding:5px 10px}.sb-step .actions a{font-size:12px}.sb-look{margin-top:16px;border:1px solid var(--line);border-radius:10px;padding:12px}.sb-look h3{margin:0 0 4px}
.sb-circles{margin:8px 0 0;display:flex;align-items:center;gap:6px;flex-wrap:wrap;color:var(--ink)}.sb-word{border:1px solid var(--line);border-radius:14px;padding:2px 9px;font-size:11px}.sb-word.on{background:#ffff99;border-color:#d9c200;font-weight:700;color:#5c4d00}
.sb-open{margin-top:8px}.sb-check{display:flex;align-items:center;gap:8px;font-size:13px}.sb-check input{width:18px;flex:none}.ps-upload{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:12px 0}.ps-upload .form-actions,.ps-upload .error{grid-column:1/-1}
#ps-settings .form-actions{z-index:4}  /* the stuck Save bar stays above the grids' sticky headers (table.xl th is 3) */
.sb-look td{overflow-wrap:anywhere}
@media(max-width:720px){#bid-form[data-start="1"] .form-actions{position:static}  /* five buttons wrap to three rows: stuck to the bottom they would hide a third of a phone while the long form is filled in */
 .sb-set .sb-place{grid-template-columns:minmax(0,1fr) 64px 92px;gap:8px}.sb-pair{grid-template-columns:1fr}.ps-upload{grid-template-columns:1fr}.sb-look th,.sb-look td{padding:8px}.sb-look td:first-child{overflow-wrap:normal}}
/* The Activity feed (activity.js): its page, the people list, the filters and the Home card */
.act-page{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:20px;align-items:start}.act-main{min-width:0}
.act-day{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:18px 0 8px}.act-main>.act-day:first-child{margin-top:0}
.act-list{background:white;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.act-item{display:grid;grid-template-columns:34px minmax(0,1fr);gap:12px;padding:14px 16px;border-top:1px solid var(--line)}.act-list .act-item:first-child{border-top:0}
.act-icon{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:#eaf3fb;color:#316d9b}.act-icon svg{width:17px;height:17px}
.act-icon.g-bids{background:#f1edfb;color:#6546a8}.act-icon.g-proposals{background:#e8f5ee;color:#2d7350}.act-icon.g-jobs{background:#eaf3fb;color:#316d9b}.act-icon.g-documents{background:#fff3dc;color:#8a5a12}
.act-icon.g-posts{background:#e8f5fb;color:#117da8}.act-icon.g-schedule{background:#eef1fb;color:#3d55a3}.act-icon.g-field{background:#fdecec;color:#a53032}.act-icon.g-shipping{background:#edf2f6;color:#3d4b5c}
.act-icon.g-dailylogs{background:#f3f7e8;color:#56701d}.act-icon.g-money{background:#e7f6f2;color:#1f6d5b}.act-icon.g-settings{background:#f1f2f4;color:#566679}
.act-body{min-width:0}.act-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.act-title{font-weight:650;font-size:13px;color:var(--ink);min-width:0;overflow-wrap:anywhere}button.act-title{color:var(--ink);text-align:left}button.act-title:hover{color:#117da8}
.act-side{display:flex;align-items:baseline;gap:10px;flex-shrink:0;white-space:nowrap;font-size:12px;color:var(--muted)}.act-amount{color:var(--ink);font-weight:650}
.act-line{margin:3px 0 0;font-size:12px;line-height:1.5;overflow-wrap:anywhere}.act-item.gone .act-title{color:var(--muted)}
.act-media{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;align-items:center}.act-media .shot{width:64px;height:64px}.act-more-media{font-size:12px;font-weight:650;color:#3d4b5c;background:#edf2f6;border-radius:6px;padding:6px 8px}
button.act-doc{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;width:92px;height:64px;padding:4px;border-radius:6px;background:#f7f9fb;font-weight:500;min-height:0;overflow:hidden}
.act-doc img{width:100%;height:38px;object-fit:cover;border-radius:4px}.act-ext{font-size:10px;font-weight:700;letter-spacing:.05em;color:#8a5a12;background:#fff3dc;border-radius:4px;padding:3px 6px}
.act-doc-name{font-size:10px;color:var(--muted);max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.act-post{margin-top:6px}.act-post .wall-body{margin:6px 0}.act-shared{font-size:11px;margin:4px 0 0}.act-parent{border-left:2px solid var(--line);padding:2px 0 2px 10px;margin:6px 0}.act-parent p{margin:2px 0;font-size:12px}
.act-thread{margin:8px 0 0 4px}.act-thread>small{display:block}.wall-comment.act-this{background:#f3fafd;border-radius:8px;padding:4px 6px}.act-post-tools{display:flex;gap:4px;margin-top:4px}.act-post-tools button{padding:6px 10px;color:#526174}
.act-post .wall-reply-form{margin-left:0}
.act-more{display:flex;justify-content:center;margin:14px 0}.act-empty{background:white;border:1px solid var(--line);border-radius:var(--radius);padding:32px 20px;text-align:center}
.act-applied{margin:-8px 0 14px}.act-applied .chip.muted{cursor:default}button.act-filter-btn{display:inline-flex;align-items:center;gap:6px}.act-filter-btn svg{width:15px;height:15px}.act-filter-btn .count{margin-left:2px}.act-filter-btn.on{background:#e8f5fb;color:#117da8;border-color:#b5dcec}
.act-filter-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:20px}.act-filter-rest{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;align-content:start}
.act-filter-rest>div{grid-column:1/-1}.act-filter-rest .field{margin:0}.act-checks{max-height:260px;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:4px 10px}.act-check small{margin-left:auto;padding-left:8px;text-align:right}
.act-kinds .chip{cursor:pointer}
.act-people{position:sticky;top:16px;padding:16px}.act-people h2{margin:0 0 2px}.act-people-note{margin:0 0 10px}.act-people-list{display:flex;flex-direction:column;gap:2px}
button.act-person{display:grid;grid-template-columns:32px minmax(0,1fr) auto;gap:10px;align-items:center;width:100%;border:0;border-radius:8px;padding:8px;text-align:left;font-weight:500;background:transparent;min-height:0}
button.act-person.active{background:#e8f5fb}.act-who{min-width:0}.act-who strong,.act-who small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.act-who strong{font-weight:600}
.act-stat{text-align:right;font-size:11px;color:var(--muted);white-space:nowrap}.act-stat b{font-size:14px;color:var(--ink)}.act-stat small{display:block}
.act-card .act-day{margin:10px 0 4px}.act-card .act-day:first-child{margin-top:0}.act-card .act-list{border:0;border-radius:0}.act-item.compact{padding:9px 0;grid-template-columns:28px minmax(0,1fr);gap:10px}
.act-item.compact .act-name{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.act-item.compact .act-icon{width:28px;height:28px}.act-item.compact .act-icon svg{width:14px;height:14px}.act-item.compact .act-line{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.act-item.compact .act-media .shot{width:44px;height:44px}.act-item.compact button.act-doc{width:72px;height:44px}.act-item.compact .act-doc img{height:22px}
@media(max-width:1000px){.act-page{grid-template-columns:minmax(0,1fr)}.act-people{position:static;order:-1}.act-people-list{flex-direction:row;overflow-x:auto;gap:6px;padding-bottom:4px}
 button.act-person{width:auto;flex:0 0 auto;grid-template-columns:28px auto;border:1px solid var(--line);background:white;padding:6px 10px}button.act-person .act-stat{grid-column:2;text-align:left}button.act-person .avatar{width:28px;height:28px;grid-row:span 2}.act-people-note{display:none}
 button.act-person.active{order:-1}}
@media(max-width:720px){.act-item{padding:12px;gap:10px;grid-template-columns:30px minmax(0,1fr)}.act-icon{width:30px;height:30px}.act-head{flex-wrap:wrap;gap:2px 10px}.act-side{order:2}.act-title{flex-basis:100%}
 .act-filter-grid{grid-template-columns:minmax(0,1fr)}.act-media .shot{width:56px;height:56px}.act-people{padding:12px}.act-people-list button.act-person{min-height:0}}
/* The file viewer (docviewer.js, docpdf.js, docsheet.js): full screen on a dark background, the file's panel beside it (a bottom sheet on a phone) */
body.fv-open{overflow:hidden}body.fv-open #toast{pointer-events:none}.fv{position:fixed;inset:0;z-index:35;display:flex;flex-direction:column;background:#1b212b;color:#e8edf3}body.mockup-db .fv{top:var(--band)}body.fv-open #drawer:not(.fv-under){z-index:40}
.fv button.quiet{color:#e8edf3;border:0;background:transparent;min-height:36px;padding:6px 9px;border-radius:7px;white-space:nowrap}.fv button.quiet:hover{background:#263041}.fv button.quiet.on{background:#2f3d52;box-shadow:inset 0 0 0 1px #4fb3e8}.fv button.quiet.danger{color:#ff9b91}
.fv-bar{display:flex;align-items:center;gap:8px;padding:5px 10px;background:#11161e;border-bottom:1px solid #2c3542;min-height:52px}.fv-head{display:flex;align-items:center;gap:6px;min-width:0;flex:1 1 auto}
.fv-name{min-width:0;display:flex;flex-direction:column;line-height:1.25}.fv-name strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px}.fv-name small{color:#9aa7b8;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fv button.fv-x{font-size:18px;min-width:40px;min-height:40px}.fv-nav{display:flex;align-items:center;gap:0;flex-shrink:0}.fv-count{font-size:12px;color:#9aa7b8;white-space:nowrap;padding:0 2px}
.fv-tools{display:flex;align-items:center;gap:2px;flex-wrap:nowrap;flex-shrink:0}.fv-zoom{min-width:44px;text-align:center;font-size:12px;color:#c9d3df;font-variant-numeric:tabular-nums}
.fv-acts{display:flex;align-items:center;gap:2px;flex-shrink:0}.fv-extra{display:flex;align-items:center;gap:2px}.fv button.fv-more-btn{display:none;font-size:18px}
.fv-find{display:flex;align-items:center;gap:6px;padding:6px 10px;background:#11161e;border-bottom:1px solid #2c3542}.fv-find[hidden]{display:none}.fv-find-form{display:flex;gap:6px;flex:1;max-width:520px}.fv-find-form input{min-height:34px;padding:6px 10px;background:#222a36;color:white;border-color:#3a4658}.fv-find-form button{min-height:34px;padding:6px 12px}.fv-find-n{font-size:12px;color:#c9d3df;white-space:nowrap}
.fv-body{position:relative;flex:1;display:flex;min-height:0}.fv-stage{position:relative;flex:1;min-width:0;overflow:auto;outline:none;background:#2a313c;overscroll-behavior:contain}
.fv-panel{display:none;width:360px;flex-shrink:0;background:white;color:var(--ink);overflow:auto;padding:14px 16px;border-left:1px solid #2c3542}.fv.panel-on .fv-panel{display:block}
.fv-panel .fv-ph{display:flex;justify-content:space-between;align-items:center;position:sticky;top:-14px;background:white;margin:-14px -16px 10px;padding:10px 16px;border-bottom:1px solid var(--line);z-index:1}.fv-panel .fv-ph h2{margin:0}.fv-panel button.fv-ph-x{display:none;color:var(--ink)}
.fv-panel .field{margin-bottom:8px}.fv-panel .form-actions{position:static;margin-top:8px;padding:0 0 4px;background:none}.fv-panel button.quiet{color:var(--ink)}.fv-panel button.quiet:hover{background:#eff5f8}.fv-panel .fv-form small.muted{display:block;margin:-4px 0 8px;font-size:11px}.fv-facts{margin:10px 0}.fv-facts .detail-row{padding:5px 0}.fv-pacts{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}.fv-panel .fv-pacts button{min-height:36px;padding:7px 11px;color:var(--ink);background:white;border:1px solid var(--line)}.fv-panel .fv-pacts button.danger{color:#a53032}
.fv-sec{border-top:1px solid var(--line);margin-top:14px;padding-top:10px}.fv-sec h4{margin:0 0 8px;font-size:13px}.fv-sec h4 small{font-weight:500;color:var(--muted)}.fv-ver{display:flex;flex-direction:column;padding:4px 0}.fv-ver.on .link{font-weight:700;color:#117da8}.fv-ver small{font-size:11px}
.fv-up{display:block;margin:12px 0 4px;font-weight:600;color:#117da8;cursor:pointer}.fv-up input{display:block;margin-top:6px;font-weight:400}.fv-reply{margin-left:26px}.fv-msgs .wall-comment{margin:6px 0}.fv-msgs form{margin-top:8px}.fv-act li{margin:6px 0}.fv-act small{display:block}
.fv-wait{color:#9aa7b8;padding:32px;text-align:center}.fv-other{max-width:520px;margin:12vh auto;text-align:center;padding:24px}.fv-other p{color:#c9d3df}.fv-other-icon{font-size:48px;margin:0;opacity:.7}.fv-other .note{color:#526174}
/* pictures and video */
.fv-img{position:absolute;inset:0;overflow:hidden;touch-action:none;cursor:grab;user-select:none;-webkit-user-select:none}.fv-img img{position:absolute;left:0;top:0;transform-origin:0 0;max-width:none;user-select:none;-webkit-user-drag:none;box-shadow:0 2px 20px #0008}
.fv-vid{position:absolute;inset:0;display:grid;place-items:center;padding:12px}.fv-vid video{max-width:100%;max-height:100%;background:#000;border-radius:6px}
/* Word files and text */
.fv-docs{padding:24px 12px 40px}.fv-doc{--fvz:1;background:white;color:#1d2939;max-width:calc(816px * var(--fvz));margin:0 auto;padding:calc(44px * var(--fvz)) calc(56px * var(--fvz));font-size:calc(14px * var(--fvz));line-height:1.5;box-shadow:0 2px 16px #0006;border-radius:2px;overflow-wrap:anywhere}
.fv-doc p{color:#1d2939;margin:.45em 0;line-height:1.5}.fv-doc h2{font-size:1.6em;margin:.8em 0 .4em}.fv-doc h3{font-size:1.3em;margin:.8em 0 .35em}.fv-doc h4{font-size:1.12em;margin:.7em 0 .3em}.fv-doc h5,.fv-doc h6{font-size:1em;margin:.6em 0 .3em}
.fv-tw{overflow-x:auto;margin:.6em 0}.fv-wt{border-collapse:collapse;width:100%;font-size:1em}.fv-wt td{border:1px solid #c5ced8;padding:.3em .5em;vertical-align:top;max-width:none}.fv-li{margin:.15em 0;padding-left:1.4em;text-indent:-1.1em}.fv-mark{display:inline-block;min-width:1.1em;color:#475467}
.fv-lv1{margin-left:1.4em}.fv-lv2{margin-left:2.8em}.fv-lv3{margin-left:4.2em}.fv-lv4,.fv-lv5,.fv-lv6,.fv-lv7,.fv-lv8{margin-left:5.6em}.fv-break{border:0;border-top:1px dashed #c5ced8;margin:1.5em 0}.fv-empty-line{margin:0}.fv-pic-note{color:#8a97a6}
.fv-textfile{white-space:pre-wrap;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:calc(13px * var(--fvz));line-height:1.45}
/* PDFs: the pages placed by the code, drawn as they come near the screen; the marks as a layer over them */
.fp-pages{position:relative;transform-origin:0 0}.fp-page{position:absolute;background:white;box-shadow:0 2px 12px #0006;overflow:hidden}.fp-page canvas.fp-c{position:absolute;inset:0;width:100%;height:100%;display:block}.fp-page canvas.fp-d{position:absolute}.fp-page canvas[hidden]{display:none}
.fp-num{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#c3cad4;font-size:28px;font-weight:700}.fp-page.drawn .fp-num{display:none}
.fp-ink{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}.fp-ink .fp-hl{mix-blend-mode:multiply}.fp-mk.pending{opacity:.7}.fp-mk.erasing{opacity:.2}.fp-drawing .fp-page{touch-action:none;cursor:crosshair}.fp-drawing{user-select:none;-webkit-user-select:none}
.fp-hits{position:absolute;inset:0;pointer-events:none}.fp-hits i{position:absolute;background:#ffd60a5c;outline:1px solid #d9a400;border-radius:2px}.fp-hits i.now{background:#ff8a0080;outline:2px solid #d45500}
.fp-pageno{display:flex;align-items:center;gap:4px;font-size:12px;color:#c9d3df;margin-right:4px;white-space:nowrap;flex-shrink:0}.fv-sm{display:none}.fp-pageno input{width:52px;min-height:32px;padding:4px 6px;text-align:center;background:#222a36;color:white;border-color:#3a4658}
.fp-grid{position:absolute;inset:0;z-index:3;background:#1b212b;overflow:auto;padding:12px 14px}.fp-grid[hidden]{display:none}.fp-grid-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.fp-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.fp-tile{display:flex;flex-direction:column;align-items:center;gap:6px;background:#2a313c;border:2px solid transparent;color:#e8edf3;padding:8px;border-radius:8px}.fp-tile:hover{background:#334052}.fp-tile.on{border-color:#4fb3e8}.fp-tile canvas{max-width:100%;background:white;box-shadow:0 1px 6px #0006;min-height:90px}
/* the markup bar */
.fv-markbar{display:flex;flex-direction:column;align-items:stretch;gap:4px;padding:6px 10px;background:#11161e;border-top:1px solid #2c3542;position:relative}.fv-markbar[hidden]{display:none}.fp-tools,.fp-swatches,.fp-widths,.fp-do{display:flex;align-items:center;gap:2px;flex-wrap:wrap}
.fp-row{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px}.fp-row>.fp-tools{flex:1 1 auto}.fp-gtabs{display:flex;gap:4px;margin:0 6px;padding:0 6px;border-left:1px solid #2c3542;border-right:1px solid #2c3542}.fv .fp-gtabs button.chip{min-height:34px;padding:4px 10px;font-size:12px;background:#222a36;color:#c9d3df;border-color:#3a4658}.fv .fp-gtabs button.chip.active{background:#2f3d52;color:white;border-color:#4fb3e8}
.fp-g{display:none;align-items:center;gap:2px}.fp-g.on{display:flex}
.fp-acts{background:#1d2633;border-radius:8px;padding:4px 8px}.fp-acts strong{color:#e8edf3;font-size:12px;margin-right:4px}.fp-hint{color:#c9d3df;font-size:12px}.fv button.fp-stylebtn{display:none}.fv button.fp-warn{color:#fdb022;box-shadow:inset 0 0 0 1px #fdb02280}
.fp-opts{display:flex;align-items:center;gap:4px 12px;flex-wrap:wrap}.fp-pick{display:flex;align-items:center;gap:4px;font-size:11px;color:#9aa7b8;white-space:nowrap}.fp-pick select{width:auto;min-height:32px;padding:2px 6px;background:#222a36;color:white;border-color:#3a4658;font-size:12px}.fp-mq{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.fp-mq .tk-sw{width:12px;height:12px}
.fp-plabel{color:#9aa7b8;font-size:11px;margin-left:2px;white-space:nowrap}.fp-plabel:empty{display:none}.fv button.fp-backbtn{color:#7cc4f0}
.fv.marking .fp-stage:not(.fp-drawing) .fp-page{cursor:grab}.fp-drawing.fp-picking .fp-page{cursor:default}.fp-tko{pointer-events:none}
/* the PDF's own links, its bookmarks and pages, the markups list, a note's thread, a signature, the stamps in Settings */
.fp-links{position:absolute;inset:0;pointer-events:none}.fv button.fp-link,.fp-link{position:absolute;display:block;pointer-events:auto;background:transparent;border:0;padding:0;min-height:0;min-width:0;border-radius:2px;cursor:pointer}.fv button.fp-link:hover,.fp-link:hover{background:#4fb3e833;outline:1px solid #4fb3e8}.fp-drawing .fp-links{display:none}
.fp-side{width:270px;flex-shrink:0;background:#11161e;border-right:1px solid #2c3542;overflow:auto;display:flex;flex-direction:column}.fp-side[hidden]{display:none}.fp-side-head{display:flex;justify-content:space-between;align-items:center;gap:6px;padding:6px 8px;position:sticky;top:0;background:#11161e;z-index:1}
.fp-side-body{padding:2px 6px 24px}.fp-ol{display:flex;align-items:flex-start}.fp-ol[data-depth="1"]{padding-left:14px}.fp-ol[data-depth="2"]{padding-left:28px}.fp-ol[data-depth="3"]{padding-left:42px}.fp-ol[data-depth="4"],.fp-ol[data-depth="5"],.fp-ol[data-depth="6"]{padding-left:56px}
.fv button.fp-ol-t{flex:1;text-align:left;white-space:normal;line-height:1.3;font-size:13px}.fv button.fp-fold,.fp-fold{width:26px;min-width:26px;flex:none;padding:6px 0;display:inline-block}.fv button.fp-pl{display:flex;justify-content:space-between;width:100%;font-size:13px}.fv button.fp-pl small{color:#9aa7b8}.fv button.fp-pl.on{background:#2f3d52}.fp-side-note{padding:8px 12px;font-size:12px}
.fp-chips{display:inline-flex;gap:4px}.fv .fp-chips button.chip{min-height:30px;padding:4px 10px;font-size:12px}
.fp-list{position:absolute;left:0;right:0;bottom:0;height:42%;z-index:2;background:white;color:var(--ink);display:flex;flex-direction:column;border-top:2px solid #2c3542;box-shadow:0 -8px 24px #0006}.fv.panel-on .fp-list{right:360px}.fp-list[hidden]{display:none}
.fp-list-bar{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:6px 10px;border-bottom:1px solid var(--line)}.fp-list-bar select,.fp-list-bar input{width:auto;min-height:32px;padding:4px 8px;font-size:12px}.fp-list-bar input[type=search]{min-width:150px}.fv .fp-list button.quiet{color:var(--ink)}
.fp-list-body{flex:1;overflow:auto;padding:0 10px 10px}.fp-lt,.fp-totals{width:100%;font-size:12px}.fp-lt th button.link{font-weight:700;white-space:nowrap}.fp-lt tr.on td{background:#eaf4ff}.fp-lt td{white-space:nowrap}.fp-lt td.fp-lw{min-width:160px;max-width:360px;white-space:normal;overflow-wrap:anywhere}.fp-list-pages{display:flex;align-items:center;gap:8px;margin-top:6px}.fp-none{padding:16px 0}
.fv-panel .fp-note{margin:0 0 12px;padding:10px 12px;background:#fffbe6;border:1px solid #f4d06f;border-radius:10px}.fp-note-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.fp-note-head h4{margin:0}.fp-note .fv-form{margin-top:8px}
.fp-sig-pad{display:block;width:100%;height:auto;aspect-ratio:16/5;background:#fff;border:1px dashed #98a2b3;border-radius:8px;touch-action:none;margin:6px 0;cursor:crosshair}
.fp-files{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}.fp-file{position:relative;display:inline-flex;align-items:center;gap:6px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;cursor:pointer;font-weight:600;color:var(--ink);background:#f6f8fa}.fp-file input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;min-height:0}
.fm-stamps{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 12px}.fm-stamp svg{display:block;width:160px;height:40px}
.fv button.fp-t{display:flex;flex-direction:column;align-items:center;gap:0;padding:3px 6px;min-width:54px}.fp-t span{font-size:17px;line-height:1.15}.fp-t small,.fp-widths small{font-size:10px;color:#9aa7b8}.fv button.fp-t.on{background:#2f3d52;box-shadow:inset 0 0 0 2px #4fb3e8}
.fp-sw{width:32px;height:32px;min-height:0;padding:3px;border-radius:50%;background:transparent;border:2px solid transparent}.fp-sw:hover{background:#263041}.fp-sw.on{border-color:white}.fp-sw i{display:block;width:100%;height:100%;border-radius:50%}
.sw-red{background:#d92d20}.sw-orange{background:#f79009}.sw-yellow{background:#fac515}.sw-green{background:#079455}.sw-blue{background:#1570ef}.sw-black{background:#101828;box-shadow:inset 0 0 0 1px #667}
.fp-widths button{display:flex;flex-direction:column;align-items:center;gap:3px}.fp-w{display:block;width:26px;background:#e8edf3;border-radius:2px}.fp-w-s{height:2px}.fp-w-m{height:4px}.fp-w-l{height:8px}
.fp-pop{position:absolute;bottom:100%;right:10px;margin-bottom:8px;background:white;color:var(--ink);border-radius:10px;box-shadow:0 10px 40px #0008;padding:12px 14px;width:min(380px,calc(100vw - 20px));z-index:5}.fp-pop[hidden]{display:none}.fp-pop p{color:var(--ink)}.fp-pop .check{display:flex;gap:8px;align-items:center;margin:6px 0}.fp-pop input[type=radio]{width:18px;height:18px;min-height:0;flex:none;accent-color:var(--accent)}.fp-pop .form-actions{position:static;margin-top:10px;padding:0;background:none}.fp-pop button.quiet{color:var(--ink)}
/* spreadsheets: the sheet as it looks, its top rows kept in place, only the rows near the screen drawn */
.fs{position:absolute;inset:0;display:flex;flex-direction:column;background:#e9edf1}.fs-scroll{flex:1;overflow:auto;background:white;outline:none;position:relative;overscroll-behavior:contain}
.fs-t{border-collapse:separate;border-spacing:0;table-layout:fixed;width:max-content;font-family:Calibri,Carlito,'Segoe UI',Arial,sans-serif;font-size:calc(var(--fsb,11pt) * var(--fsz,1));color:#000;background:white}
.fs-t td{position:relative;padding:0 3px;white-space:nowrap;overflow:hidden;border-top:1px solid transparent;border-left:1px solid transparent;border-right:1px solid #e1e5e9;border-bottom:1px solid #e1e5e9;vertical-align:bottom;line-height:1.15;max-width:none}.fs-t.nogrid td{border-right-color:transparent;border-bottom-color:transparent}
.fs-t thead{position:sticky;top:0;z-index:3}.fs-t thead td:not([bgcolor]){background:white}.fs-t thead tr:last-child td{box-shadow:inset 0 -2px 0 #9bb7c9}
.fs-t th{background:#f1f3f5;color:#4a5563;font:600 11px/1 system-ui,sans-serif;border-right:1px solid #d3d9df;border-bottom:1px solid #d3d9df;text-align:center;padding:0 2px;white-space:nowrap;overflow:hidden}.fs-t th.fs-rn{position:sticky;left:0;z-index:2}.fs-t thead th.fs-corner{position:sticky;left:0;z-index:4}
.fs-t .fs-hid,.fs-t td.fs-hc{background-image:repeating-linear-gradient(45deg,#0000 0 6px,#f59e0b26 6px 12px)}.fs-t th.fs-hid{color:#b45309}.fs-t .fs-w{white-space:normal;overflow-wrap:anywhere}.fs-t tr.fs-sp td{border:0;padding:0}.fs-none{padding:24px!important;text-align:center;color:#667;white-space:normal!important}
.fs-t td.fs-hit{background-color:#fff1a8!important}.fs-t td.fs-now{background-color:#ffc53d!important;box-shadow:inset 0 0 0 2px #d48806}
.fs-fb{position:absolute;right:1px;bottom:1px;min-height:0;padding:0 4px;font:600 10px/15px system-ui,sans-serif;border-radius:3px;background:#ffffffd9;border:1px solid #b9c2cc;color:#334}.fs-fb.on{background:#2494c4;border-color:#2494c4;color:white}
.fs-tabs{display:flex;gap:2px;overflow-x:auto;background:#e9edf1;border-top:1px solid #cfd6de;padding:0 6px;flex-shrink:0}.fs-tabs button.fs-tab{border:0;border-radius:0 0 6px 6px;background:transparent;color:#334;font-weight:500;padding:7px 12px;white-space:nowrap;min-height:34px}.fs-tabs button.fs-tab.on{background:white;color:#146c38;font-weight:700;box-shadow:inset 0 2px 0 #217346}.fs-tab small{color:#8a5a00;font-weight:500}.fs-hidtab{font-style:italic}
.fs-note{margin:0;padding:3px 10px;font-size:11px;color:#475467;background:#e9edf1;flex-shrink:0}.fs-note:empty{display:none}.fs-empty{padding:40px;text-align:center;color:#667}
.fs-menu-box{position:absolute;inset:0;pointer-events:none;z-index:6}.fs-menu{pointer-events:auto;position:absolute;right:12px;top:40px;width:290px;max-height:75%;overflow:auto;background:white;color:var(--ink);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px #0004;padding:12px}
.fs-menu strong{display:block}.fs-sorts{display:flex;gap:4px;margin:8px 0}.fs-menu button.quiet{color:var(--ink);border:1px solid var(--line);background:white}.fs-menu button.quiet.on{background:#e8f5fb;border-color:#2494c4}.fs-pick{display:flex;gap:12px;margin:4px 0}
.fs-vals{max-height:220px;overflow:auto;border:1px solid var(--line);border-radius:6px;padding:4px 8px;margin:6px 0}.fs-vals label{display:flex;gap:6px;align-items:center;padding:2px 0;font-size:12px}.fs-vals small{margin-left:auto}
.fs-opt{display:flex;align-items:center;gap:6px;font-size:12px;color:#c9d3df;white-space:nowrap;margin:0 4px}.fs-opt input[type=number]{width:54px;min-height:30px;padding:2px 6px;background:#222a36;color:white;border-color:#3a4658}.fs-opt input[type=checkbox]{width:16px;height:16px;min-height:0}.fs-opt small{color:#9aa7b8}
/* the wall: a file's folder, a message about a file, the folder of each file chosen for a post */
.wall-about{margin:2px 0 6px;font-size:12px}.wall-docs button.chip small{color:var(--muted);margin-left:4px;font-weight:500}.wall-file{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:4px 0;color:var(--ink)}.wall-file span{color:var(--muted)}.wall-file select{width:auto;min-height:32px;padding:4px 8px}
@media(max-width:720px){.fv-bar{padding:4px 6px;gap:2px;min-height:48px}.fv-name small{display:none}.fv button.fv-more-btn{display:inline-block}.fv-count{font-size:11px}
 .fv-tools{position:fixed;left:0;right:0;bottom:0;z-index:4;background:#11161e;border-top:1px solid #2c3542;padding:5px 4px calc(5px + env(safe-area-inset-bottom));justify-content:space-between;overflow-x:auto;gap:0}.fv .fv-tools button.quiet{padding:6px 5px;font-size:13px}.fv-tools .fv-zoom{min-width:36px}.fv-tools .fv-lg{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.fv-tools .fv-sm{display:inline}.fp-pageno{gap:2px;margin-right:0}.fv-tools:empty{display:none}.fv.kind-pdf .fv-body,.fv.kind-sheet .fv-body,.fv.kind-image .fv-body,.fv.kind-word .fv-body,.fv.kind-text .fv-body{padding-bottom:56px}
 .fv-extra{display:none;position:fixed;right:8px;top:50px;flex-direction:column;align-items:stretch;background:#11161e;border:1px solid #2c3542;border-radius:10px;padding:6px;z-index:7;box-shadow:0 10px 30px #0008}.fv.more .fv-extra{display:flex}body.mockup-db .fv-extra{top:calc(50px + var(--band))}.fv-extra button{text-align:left}
 .fv-panel{position:fixed;left:0;right:0;bottom:0;height:74vh;width:auto;z-index:8;border-left:0;border-radius:14px 14px 0 0;box-shadow:0 -10px 40px #0009}.fv-panel button.fv-ph-x{display:inline-block}.fv-panel .fv-ph{border-radius:14px 14px 0 0}
 .fv.marking .fv-tools{display:none}.fv-markbar{position:fixed;left:0;right:0;bottom:0;z-index:5;max-height:52vh;overflow-y:auto;gap:6px;border-radius:14px 14px 0 0;box-shadow:0 -8px 30px #0008;padding:8px 8px calc(8px + env(safe-area-inset-bottom))}.fp-tools,.fp-swatches,.fp-widths,.fp-do{flex-wrap:nowrap}.fv button.fp-t{min-width:48px}
 .fp-row{flex-wrap:nowrap;overflow-x:auto;gap:8px}.fp-row:first-child{flex-wrap:wrap}.fp-row>.fp-tools{flex:1 1 100%;flex-wrap:wrap;row-gap:4px}.fp-row>.fp-do{flex:1 1 100%;overflow-x:auto}.fp-gtabs{flex:1 1 0;min-width:0;overflow-x:auto;margin:0 2px;padding:0 4px;border-right:0}.fp-g.on{flex:1 1 100%;overflow-x:auto;padding-top:2px;border-top:1px solid #2c3542}
 .fp-look:not(.open):not(.has-opts){display:none}.fp-look:not(.open)>:not(.fp-opts){display:none}.fv button.fp-stylebtn{display:inline-block}.fv .fp-do .fv-lg{display:none}.fv .fp-do .fv-sm{display:inline}.fv.marking .fv-body{padding-bottom:170px}
 .fp-side{position:fixed;left:0;top:48px;bottom:56px;width:min(320px,86vw);z-index:9;box-shadow:10px 0 30px #0008}body.mockup-db .fp-side{top:calc(48px + var(--band))}
 .fp-list{position:fixed;top:48px;bottom:0;height:auto;right:0;z-index:9;border-top:0}.fv.panel-on .fp-list{right:0}body.mockup-db .fp-list{top:calc(48px + var(--band))}.fp-list-bar input[type=search]{min-width:0;flex:1}
 .fp-pop{position:fixed;left:10px;right:10px;bottom:76px;width:auto}.fs-opt{font-size:11px}.fs-top{display:none}.fp-pageno input{width:44px}.fv-find-form{max-width:none}}
@media print{body.fv-open #app,body.fv-open #drawer,body.fv-open #toast,body.fv-open #assistant,body.fv-open .mockup-band{display:none!important}body.fv-open .fv{position:static;background:white;color:#000}
 body.fv-open .fv-bar,body.fv-open .fv-find,body.fv-open .fv-panel,body.fv-open .fv-markbar,body.fv-open .fs-tabs,body.fv-open .fs-note,body.fv-open .fs-fb,body.fv-open .fs-menu-box{display:none!important}
 body.fv-open .fv-body,body.fv-open .fv-stage,body.fv-open .fs,body.fv-open .fs-scroll,body.fv-open .fv-docs{position:static;overflow:visible;height:auto;display:block;background:white;padding:0}
 body.fv-open .fv-img{position:static}body.fv-open .fv-img img{position:static;transform:none!important;max-width:100%;height:auto!important;width:auto!important;box-shadow:none}body.fv-open .fv-doc{box-shadow:none;max-width:none;padding:0}body.fv-open .fs-t thead,body.fv-open .fs-t th.fs-rn{position:static}}
.fs-t .fz6{font-size:calc(6pt * var(--fsz,1))}.fs-t .fz7{font-size:calc(7pt * var(--fsz,1))}.fs-t .fz8{font-size:calc(8pt * var(--fsz,1))}.fs-t .fz9{font-size:calc(9pt * var(--fsz,1))}.fs-t .fz10{font-size:calc(10pt * var(--fsz,1))}.fs-t .fz11{font-size:calc(11pt * var(--fsz,1))}.fs-t .fz12{font-size:calc(12pt * var(--fsz,1))}.fs-t .fz13{font-size:calc(13pt * var(--fsz,1))}.fs-t .fz14{font-size:calc(14pt * var(--fsz,1))}.fs-t .fz15{font-size:calc(15pt * var(--fsz,1))}.fs-t .fz16{font-size:calc(16pt * var(--fsz,1))}.fs-t .fz17{font-size:calc(17pt * var(--fsz,1))}.fs-t .fz18{font-size:calc(18pt * var(--fsz,1))}.fs-t .fz19{font-size:calc(19pt * var(--fsz,1))}.fs-t .fz20{font-size:calc(20pt * var(--fsz,1))}.fs-t .fz21{font-size:calc(21pt * var(--fsz,1))}.fs-t .fz22{font-size:calc(22pt * var(--fsz,1))}.fs-t .fz23{font-size:calc(23pt * var(--fsz,1))}.fs-t .fz24{font-size:calc(24pt * var(--fsz,1))}.fs-t .fz25{font-size:calc(25pt * var(--fsz,1))}.fs-t .fz26{font-size:calc(26pt * var(--fsz,1))}.fs-t .fz27{font-size:calc(27pt * var(--fsz,1))}.fs-t .fz28{font-size:calc(28pt * var(--fsz,1))}.fs-t .fz29{font-size:calc(29pt * var(--fsz,1))}.fs-t .fz30{font-size:calc(30pt * var(--fsz,1))}.fs-t .fz31{font-size:calc(31pt * var(--fsz,1))}.fs-t .fz32{font-size:calc(32pt * var(--fsz,1))}.fs-t .fz33{font-size:calc(33pt * var(--fsz,1))}.fs-t .fz34{font-size:calc(34pt * var(--fsz,1))}.fs-t .fz35{font-size:calc(35pt * var(--fsz,1))}.fs-t .fz36{font-size:calc(36pt * var(--fsz,1))}
.fs-t td.fs-bt1{border-top:1px solid #000}.fs-t td.fs-bt1g{border-top:1px solid #8f98a3}.fs-t td.fs-bt1l{border-top:1px solid #cfd5dc}.fs-t td.fs-bt2{border-top:2px solid #000}.fs-t td.fs-bt2g{border-top:2px solid #8f98a3}.fs-t td.fs-bt2l{border-top:2px solid #cfd5dc}.fs-t td.fs-bt3{border-top:3px solid #000}.fs-t td.fs-bt3g{border-top:3px solid #8f98a3}.fs-t td.fs-bt3l{border-top:3px solid #cfd5dc}.fs-t td.fs-btd{border-top:1px dashed #000}.fs-t td.fs-btdg{border-top:1px dashed #8f98a3}.fs-t td.fs-btdl{border-top:1px dashed #cfd5dc}.fs-t td.fs-bto{border-top:1px dotted #000}.fs-t td.fs-btog{border-top:1px dotted #8f98a3}.fs-t td.fs-btol{border-top:1px dotted #cfd5dc}.fs-t td.fs-btw{border-top:3px double #000}.fs-t td.fs-btwg{border-top:3px double #8f98a3}.fs-t td.fs-btwl{border-top:3px double #cfd5dc}.fs-t td.fs-br1{border-right:1px solid #000}.fs-t td.fs-br1g{border-right:1px solid #8f98a3}.fs-t td.fs-br1l{border-right:1px solid #cfd5dc}.fs-t td.fs-br2{border-right:2px solid #000}.fs-t td.fs-br2g{border-right:2px solid #8f98a3}.fs-t td.fs-br2l{border-right:2px solid #cfd5dc}.fs-t td.fs-br3{border-right:3px solid #000}.fs-t td.fs-br3g{border-right:3px solid #8f98a3}.fs-t td.fs-br3l{border-right:3px solid #cfd5dc}.fs-t td.fs-brd{border-right:1px dashed #000}.fs-t td.fs-brdg{border-right:1px dashed #8f98a3}.fs-t td.fs-brdl{border-right:1px dashed #cfd5dc}.fs-t td.fs-bro{border-right:1px dotted #000}.fs-t td.fs-brog{border-right:1px dotted #8f98a3}.fs-t td.fs-brol{border-right:1px dotted #cfd5dc}.fs-t td.fs-brw{border-right:3px double #000}.fs-t td.fs-brwg{border-right:3px double #8f98a3}.fs-t td.fs-brwl{border-right:3px double #cfd5dc}.fs-t td.fs-bb1{border-bottom:1px solid #000}.fs-t td.fs-bb1g{border-bottom:1px solid #8f98a3}.fs-t td.fs-bb1l{border-bottom:1px solid #cfd5dc}.fs-t td.fs-bb2{border-bottom:2px solid #000}.fs-t td.fs-bb2g{border-bottom:2px solid #8f98a3}.fs-t td.fs-bb2l{border-bottom:2px solid #cfd5dc}.fs-t td.fs-bb3{border-bottom:3px solid #000}.fs-t td.fs-bb3g{border-bottom:3px solid #8f98a3}.fs-t td.fs-bb3l{border-bottom:3px solid #cfd5dc}.fs-t td.fs-bbd{border-bottom:1px dashed #000}.fs-t td.fs-bbdg{border-bottom:1px dashed #8f98a3}.fs-t td.fs-bbdl{border-bottom:1px dashed #cfd5dc}.fs-t td.fs-bbo{border-bottom:1px dotted #000}.fs-t td.fs-bbog{border-bottom:1px dotted #8f98a3}.fs-t td.fs-bbol{border-bottom:1px dotted #cfd5dc}.fs-t td.fs-bbw{border-bottom:3px double #000}.fs-t td.fs-bbwg{border-bottom:3px double #8f98a3}.fs-t td.fs-bbwl{border-bottom:3px double #cfd5dc}.fs-t td.fs-bl1{border-left:1px solid #000}.fs-t td.fs-bl1g{border-left:1px solid #8f98a3}.fs-t td.fs-bl1l{border-left:1px solid #cfd5dc}.fs-t td.fs-bl2{border-left:2px solid #000}.fs-t td.fs-bl2g{border-left:2px solid #8f98a3}.fs-t td.fs-bl2l{border-left:2px solid #cfd5dc}.fs-t td.fs-bl3{border-left:3px solid #000}.fs-t td.fs-bl3g{border-left:3px solid #8f98a3}.fs-t td.fs-bl3l{border-left:3px solid #cfd5dc}.fs-t td.fs-bld{border-left:1px dashed #000}.fs-t td.fs-bldg{border-left:1px dashed #8f98a3}.fs-t td.fs-bldl{border-left:1px dashed #cfd5dc}.fs-t td.fs-blo{border-left:1px dotted #000}.fs-t td.fs-blog{border-left:1px dotted #8f98a3}.fs-t td.fs-blol{border-left:1px dotted #cfd5dc}.fs-t td.fs-blw{border-left:3px double #000}.fs-t td.fs-blwg{border-left:3px double #8f98a3}.fs-t td.fs-blwl{border-left:3px double #cfd5dc}
/* The closeout stage (closeout.js): the job's Closeout tab, its items, the survey on the customer's page, the report */
.co-facts{display:flex;flex-wrap:wrap;gap:6px 18px;font-size:12px;color:var(--muted);margin:8px 0 4px}.co-facts strong{color:var(--ink)}.co-facts small{display:inline}
.co-group .panel-head small.count{font-weight:500;margin-left:4px}.co-final{font-size:11px;color:#946422}.co-final.ok{color:#2d7350}
.co-items{display:grid;gap:8px}.co-item{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;border:1px solid var(--line);border-radius:8px;padding:10px 12px}.co-item.co-done{background:#f7fbf9;border-color:#d5eadf}.co-item.co-notneeded{background:#f8f9fb}
.co-main{min-width:0;flex:1}.co-main>strong{display:block}.co-main>small{display:block;margin-top:2px;line-height:1.4}.co-side{display:flex;flex-direction:column;align-items:flex-end;gap:6px;flex-shrink:0}.co-side .actions{justify-content:flex-end}
.co-ev{display:grid;gap:3px;margin-top:6px;font-size:12px}.co-ev span{overflow-wrap:anywhere}.co-check{display:flex;gap:6px;align-items:flex-start}.co-check>span{font-weight:700;width:14px;flex-shrink:0}.co-check.ok>span{color:#2f8a5b}.co-check.no>span{color:#b33a3a}
.co-lessons{list-style:none;margin:4px 0 0;padding:0;display:grid;gap:6px}.co-lessons li{line-height:1.5}.co-lessons li small{display:block}.co-lessons-report li{padding:8px 0;border-bottom:1px solid var(--line)}
.co-q{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:8px 0}.co-q legend{font-size:12px;font-weight:600;padding:0 4px}.co-scale{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.co-scale label{display:flex;align-items:center;gap:4px;font-size:13px}.co-scale input{width:18px;min-height:18px;height:18px;accent-color:var(--accent)}.co-scale small{width:100%}
.co-survey p{color:var(--ink)}.co-products .co-product{border-top:1px solid var(--line);padding:8px 0}.co-products .co-product strong{display:block}.co-products .co-product small{display:block;margin-bottom:4px}.co-products textarea{min-height:52px}
.co-filters{justify-content:flex-start;margin:12px 0}.co-stats{grid-template-columns:repeat(4,minmax(0,1fr))}.card-warranty{font-size:12px;margin:4px 0 8px}.co-sb-lessons{margin:8px 0}
@media(max-width:720px){.co-item{flex-direction:column}.co-side{flex-direction:row;align-items:center;justify-content:space-between;width:100%}.co-side .actions{justify-content:flex-start}.co-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* CLOSEOUTPKG-01: LB's Vendors folder read into the library (vendordocs.js) and the closeout package's review (closeout.js) */
.vd-reads{list-style:none;margin:8px 0 12px;padding:0;display:grid;gap:4px;font-size:12px}.vd-reads details{display:inline-block;margin:0 0 0 8px}.vd-reads details summary{display:inline;margin:0}.vd-reads details ul{margin:4px 0 0 16px;padding:0;font-size:11px;color:var(--muted)}
.vd-filters,.vd-tools{margin:8px 0}.vd-tools input[type=search]{max-width:320px}.vd-bulk{justify-content:flex-end}.vd-note{font-size:11px}
.vd-wrap td{max-width:none;padding:8px 10px;vertical-align:top}.vd-wrap td[data-col=file]{min-width:220px;max-width:320px;overflow-wrap:anywhere}.vd-wrap td input:not([type=checkbox]),.vd-wrap td select{min-height:34px;padding:6px 8px;min-width:120px}.vd-wrap td[data-col=kind] select{min-width:200px}.vd-wrap td[data-col=vendor] input{min-width:170px}.vd-wrap td[data-col=product] input,.vd-wrap td[data-col=name] input{min-width:190px}
.vd-why{font-style:italic}.vd-fixed{border-color:#e0b34a!important;background:#fffaf0!important}.vd-skipped td{background:#fafbfc}.vd-skipped td input:not([type=checkbox]),.vd-skipped td select{opacity:.7}
.pd-add{margin:8px 0 12px}.pd-add summary{font-weight:600;color:var(--ink)}.pd-filter{justify-content:flex-start;gap:12px}
.pk-parts{list-style:none;margin:8px 0 12px;padding:0;display:grid;grid-template-columns:minmax(0,1fr);gap:6px}.pk-part{display:grid;grid-template-columns:24px minmax(0,1fr) auto;gap:10px;align-items:start;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fbfcfd}.pk-part.pk-beside{border-style:dashed}
.pk-n{font-weight:600;color:var(--muted);text-align:right;padding-top:2px}.pk-main{min-width:0}.pk-main>strong{display:block;overflow-wrap:anywhere}.pk-main small{display:block;margin-top:2px;overflow-wrap:anywhere}.pk-main .chips{margin-top:4px}.pk-move{flex-wrap:nowrap}
.pk-missing{border:1px solid #efd9a8;background:#fffbf2;border-radius:8px;padding:10px 12px;margin:12px 0}.pk-missing ul{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:minmax(0,1fr);gap:10px}.pk-missing li{min-width:0}.pk-missing li>strong,.pk-missing li>small{display:block}.pk-link{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:6px}.pk-link select{flex:1 1 240px;width:100%;min-width:0;max-width:100%;min-height:34px;padding:6px 8px}
.pk-off ul{list-style:none;margin:0 0 12px;padding:0;display:grid;gap:4px}.pk-off li{display:flex;justify-content:space-between;gap:8px;align-items:center;font-size:12px;color:var(--muted)}
.pk-sections{list-style:none;margin:8px 0 12px;padding:0;display:grid;gap:4px}.pk-sections li{display:flex;justify-content:space-between;align-items:center;gap:8px;border-bottom:1px solid #f0f2f5;padding:4px 0}.co-ptable{align-self:end}.co-ptable small{display:block}
@media(max-width:720px){.pk-part{grid-template-columns:minmax(0,1fr)}.pk-n{display:none}.pk-move{justify-content:flex-start}.vd-tools input[type=search]{max-width:100%}}
/* A report or file is made (filedone.js): the dialog with Download, Open and Email…, over the page and any drawer, under the file viewer */
.fd{position:fixed;inset:0;z-index:33;background:#16293f59;display:flex;align-items:center;justify-content:center;padding:16px}.fd[hidden]{display:none}
.fd-box{background:white;border-radius:12px;box-shadow:0 20px 60px #0b1b2d40;width:min(580px,100%);max-height:calc(100vh - 32px);overflow:auto;padding:18px 20px}
.fd-head{display:flex;justify-content:space-between;align-items:center;gap:12px}.fd-head h2{margin:0;font-size:17px;overflow-wrap:anywhere}.fd-x{flex:0 0 auto}
.fd-files{list-style:none;margin:12px 0;padding:0;display:grid;gap:8px}.fd-file{display:flex;align-items:center;gap:12px;border:1px solid var(--line);border-radius:8px;padding:10px 12px;flex-wrap:wrap}
.fd-icon{flex:0 0 auto;width:42px;height:50px;border-radius:6px;background:#eaf3fb;color:#316d9b;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center}
.fd-what{min-width:0;flex:1 1 180px}.fd-what strong{display:block;overflow-wrap:anywhere}.fd-what small{color:var(--muted)}.fd-row-acts{display:flex;gap:6px;flex-wrap:wrap}.fd-row-acts button{min-height:0;padding:6px 10px}
.fd-acts{display:flex;gap:8px;flex-wrap:wrap;margin:4px 0 8px}.fd-acts button.on{background:#eaf3fb;border-color:#b7d5ea}
.fd-keys{font-size:11px;margin:10px 0 0}.fd-warn{margin:10px 0}.fd-warn p{margin:0 0 8px}.fd-small{font-size:11px;line-height:1.5}
.fd-email{border-top:1px solid var(--line);margin-top:12px;padding-top:4px}.fd-email .field{margin:10px 0}.fd-email .form-actions{position:static;margin-top:8px;padding:8px 0;flex-wrap:wrap;justify-content:flex-start}
.fd-set{border:0;margin:10px 0 0;padding:0;min-width:0}.fd-set legend{font-weight:600;margin-bottom:4px;font-size:12px;color:#566679}
.fd-person{display:flex;align-items:flex-start;gap:9px;padding:5px 0;margin:0}.fd-person input{width:18px;height:18px;min-height:18px;margin:2px 0 0;flex:0 0 auto;accent-color:var(--accent)}
.fd-person span{min-width:0}.fd-person strong{display:block;font-weight:600}.fd-person small{color:var(--muted);overflow-wrap:anywhere}.fd-person.off{opacity:.6}.fd-others input{max-width:none}
.fd-how{font-size:12px;line-height:1.5}.fd-done p{margin:0 0 6px}.fd-sent{list-style:none;margin:6px 0 8px;padding:0;display:grid;gap:6px}.fd-sent li{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center}
.fd-to{overflow-wrap:anywhere}.fd-why,.fd-link{flex-basis:100%;color:var(--muted)}.fd-link button.link{font-size:12px}
.comms-sent .fd-sent{margin:6px 0 0}.mail-files{display:block;color:var(--muted)}
@media(max-width:720px){.fd{align-items:flex-end;padding:0}.fd-box{width:100%;border-radius:14px 14px 0 0;max-height:92vh;padding:16px}.fd-acts button{flex:1 1 auto}.fd-keys{display:none}}
/* A link to a file someone emailed (filedone.py): its page, before anyone signs in */
.share-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:16px}.share-card{background:white;border:1px solid var(--line);border-radius:12px;padding:24px;width:min(460px,100%)}
.share-logo{height:46px;width:auto;display:block;margin:0 0 14px}.share-card h1{font-size:20px;margin:0 0 10px}.share-card p{line-height:1.55;color:#3d4b5c}.share-card form{margin:14px 0}
.share-pick{display:flex;align-items:center;gap:8px;margin:6px 0;font-weight:600}.share-pick input{width:18px;height:18px;min-height:18px;margin:0;accent-color:var(--accent)}
.share-field{display:flex;flex-direction:column;gap:6px;font-size:12px;color:#566679;margin:0 0 10px}.share-field input{max-width:180px;font-size:20px;letter-spacing:4px}
.share-card button{width:auto;margin-top:6px}.share-card button.link{margin-top:0}.share-file{border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin:10px 0}.share-file strong{display:block;overflow-wrap:anywhere}.share-file small{color:var(--muted)}
.share-note{font-size:12px;color:var(--muted)}.share-foot{font-size:11px;color:var(--muted);border-top:1px solid var(--line);padding-top:10px;margin:18px 0 0}
/* The takeoff workspace (takeoff.js): PlanPin's rail with the tool chest, the plan viewer held in the middle, the
   properties on the right and the markups list under the plan; a full window over the app, as the full-screen viewer is. */
.tko{position:fixed;inset:0;z-index:20;background:#eef1f5;display:flex;flex-direction:column}
body.mockup-db .tko{top:var(--band)}
.tko-top{display:flex;align-items:center;gap:6px 10px;flex-wrap:wrap;background:white;border-bottom:1px solid var(--line);padding:6px 10px}
.tko-top .actions{flex-wrap:nowrap;gap:4px;align-items:center;min-width:0}.tko-top button{min-height:0;padding:6px 10px}.tko-top .tko-r{margin-left:auto}.tko-top .off{opacity:.45}
.tko-job{white-space:nowrap;max-width:26vw;overflow:hidden;text-overflow:ellipsis;margin:0 4px}.tko-nav{display:inline-flex;align-items:center;gap:4px;min-width:0}
.tko-sheetname{font-weight:600;max-width:24vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tko-zoom{min-width:46px;text-align:center;font-variant-numeric:tabular-nums;color:var(--muted)}
.tko-top button.tko-linked{background:#e8f5ee;color:#2d7350;border-color:#cbe8d6;max-width:30vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tko-row2{flex-basis:100%;display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;min-width:0}.tko-row2 button{min-height:0;padding:2px 10px;font-size:12px}
.tko-readout{flex:1 1 260px;min-width:0;margin:0;font-size:12px;color:#3d4b5c;min-height:16px;line-height:1.35}
.tko-body{flex:1;display:grid;grid-template-columns:264px minmax(0,1fr) 296px;min-height:0}
.tko-rail{background:white;border-right:1px solid var(--line);overflow-y:auto;min-height:0;min-width:0}.tko-rail .pp-sect{padding:12px 14px}
.tko-props{background:white;border-left:1px solid var(--line);overflow-y:auto;padding:12px 14px;min-height:0;min-width:0}
.tko-main{display:grid;grid-template-rows:minmax(0,1fr) minmax(160px,34vh);min-width:0;min-height:0}.tko.tko-nolist .tko-main{grid-template-rows:minmax(0,1fr)}
.tko-view{position:relative;min-height:0;overflow:hidden}.tko-view>.viewer{position:absolute;inset:0;top:0;z-index:auto}
.tko-view .viewer-bar,.tko-view .spine,.tko-view .viewer-bulk,.tko-view .viewer-drop,.tko-view .viewer-ask,.tko-view .tk-bar,.tko-view .tk-banner,.tko-view .tk-drop,.tko-view .tk-layer,.tko-view .pins,.tko-view .crosshair{display:none!important}
.tko-view .viewer-status{position:absolute;left:12px;bottom:6px;margin:0;pointer-events:none}.tko-view .viewer-stage{cursor:default}.tko-view .viewer.tko-tool .viewer-stage{cursor:crosshair}.tko.tko-pan .viewer-stage{cursor:grab}
.tko-empty{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:24px;text-align:center;color:var(--muted)}.tko-empty[hidden]{display:none}
.tko-list{background:white;border-top:1px solid var(--line);display:flex;flex-direction:column;min-height:0;overflow:hidden}.tko.tko-nolist .tko-list{display:none}
.tko-lbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px 10px;border-bottom:1px solid var(--line)}.tko-lbar select{width:auto;min-height:0;padding:4px 8px;max-width:200px}
.tko-pages{display:inline-flex;align-items:center;gap:4px;margin-left:auto}.tko-pages button{min-height:0;padding:3px 9px}
.tko-lwrap{flex:1;display:flex;min-height:0}.tko-lwrap>*{flex:1}.tko-lbar .tko-chips{margin:0}
.tko-grid{overflow:auto;min-height:0;margin:0}.tko-grid table,.tko-totals table{font-size:12px}.tko-grid td input{min-width:58px;min-height:0;padding:3px 6px}
.tko-grid td[data-col=note] input,.tko-grid td[data-col=room] input,.tko-grid td[data-col=unitType] input{min-width:110px}.tko-grid td[data-col=show] button{min-height:0;padding:0;white-space:nowrap}
.tko-grid tr.tko-on td{background:#fff6d6}.tko-totals{overflow:auto;padding:8px 10px;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:flex-start;gap:12px 28px;min-width:0}.tko-tot{min-width:0;max-width:100%;overflow-x:auto}.tko-totals small{color:var(--muted)}
.tko-sheets{display:flex;flex-direction:column;gap:5px;margin-bottom:10px}
.tko-sheet-btn{width:100%;display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:1px 8px;text-align:left;min-height:0;padding:7px 9px;border:1px solid var(--line);border-radius:7px;background:#f6f8fa}
.tko-sheet-btn .nm{grid-column:2;align-self:end;font-size:12.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tko-sheet-btn small{grid-column:2;align-self:start;color:var(--muted);font-size:11px}
.tko-thumb{grid-row:1/span 2;grid-column:1;width:54px;height:36px;object-fit:contain;background:#fff;border:1px solid var(--line);border-radius:4px}
.tko-sheet-btn .ct{grid-row:1/span 2;grid-column:3;align-self:center;font-size:11px;font-weight:600;color:#4a5a6c;background:white;border-radius:999px;padding:2px 8px}
.tko-srow.on .tko-sheet-btn{background:#e8f5fb;border-color:var(--accent);box-shadow:inset 3px 0 0 var(--accent)}.tko-warn{color:#a15c07!important}
.tko-sub{margin:10px 0 5px;font-size:10.5px;font-weight:650;letter-spacing:.08em;text-transform:uppercase;color:#7a8b9e}
.tko-tool{display:flex;align-items:stretch;gap:2px;margin:3px 0}.tko-tool-btn{flex:1;min-width:0;display:flex;align-items:center;gap:8px;text-align:left;min-height:0;padding:6px 8px;border:1px solid var(--line);border-radius:7px;background:#f6f8fa}
.tko-tool.on .tko-tool-btn{background:#1d2939;color:white;border-color:#1d2939}.tko-tool.last .tko-tool-btn{border-color:var(--accent)}.tko-tool .tko-more{min-height:0;padding:0 8px}
.tko-tool kbd{font:600 10px/1 Inter,system-ui,sans-serif;border:1px solid #c3ccd8;border-bottom-width:2px;border-radius:4px;padding:2px 4px;color:#4a5a6c;background:white;min-width:16px;text-align:center}
.tko-tn{display:flex;flex-direction:column;min-width:0}.tko-tn small{color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:11px}.tko-tool.on .tko-tn small{color:#c9d3de}
.tko-chips{display:flex;flex-wrap:wrap;gap:4px;margin:6px 0}.tko-chips button{min-height:0;padding:5px 9px}
.tko-ph{display:flex;align-items:center;gap:8px;margin-bottom:8px}.tko-ph small{display:block;color:var(--muted)}
.tko-form{display:grid;grid-template-columns:1fr 1fr;gap:6px 8px}.tko-form .field{margin:0;font-size:11.5px}.tko-form input,.tko-form select{min-height:0;padding:5px 8px}
.tko-props .pp-btns{margin-top:10px}.tko-areas{margin:4px 0 8px;padding-left:18px}.tko-areas button{min-height:0;padding:2px 7px}
.tko-note .actions{margin-top:8px}.tko-offer{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:10px 0}
.tko-opts{display:flex;flex-wrap:wrap;gap:6px 14px;border:0;padding:0;margin:8px 0}.tko-opts legend{font-size:12px;color:var(--muted);margin-bottom:6px}
svg.tko-sw{flex:none}
.tko-layer{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
.tko-layer .tko-line{fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.tko-layer .tko-line.wide{stroke-width:4.5}.tko-layer .tko-line.sel{stroke-width:7;stroke-opacity:.85}.tko-layer .tko-hit{fill:none;stroke:transparent;stroke-width:16}
.tko-layer .tko-shape{fill-opacity:.16;stroke-width:2.5}.tko-layer .tko-shape.sel{fill-opacity:.32;stroke-width:4}.tko-layer .tko-draft{stroke-dasharray:8 5}.tko-layer .tko-shape.tko-draft{fill-opacity:.12;stroke:none}
.tko-layer .tko-sym,.tko-layer .tko-handle,.tko-layer .tko-label,.tko-layer .tko-snap{transform-box:fill-box;transform-origin:center;transform:scale(var(--inv,1))}
.tko-layer .tko-sym{stroke:#fff;stroke-width:2}.tko-layer .tko-mark.sel .tko-sym{stroke:#172b42;stroke-width:3}.tko-layer .tko-ghost{opacity:.55}
.tko-layer .tko-handle{fill:#fff;stroke:#172b42;stroke-width:2}.tko-layer .tko-handle.on{fill:#ffc933}.tko-layer .tko-snap{fill:none;stroke:#e8590c;stroke-width:2.5}
.tko-layer .tko-label{font:700 13px Inter,system-ui,sans-serif;paint-order:stroke;stroke:#fff;stroke-width:4px;stroke-linejoin:round}
.tko-view .viewer:not(.tko-tool) .tko-layer [data-tko]{pointer-events:visiblePainted;cursor:pointer}.tko-view .viewer:not(.tko-tool) .tko-layer .tko-hit{pointer-events:stroke}
.tko-layer [data-tko-h]{pointer-events:all;cursor:grab}.tko-view .viewer:not(.tko-tool) .tko-legend{pointer-events:all;cursor:move}
.tko-legend .tko-lg-box{fill:#fff;stroke:#1d2939}.tko-legend text{font-family:Helvetica,Arial,sans-serif;fill:#1d2939}.tko-legend .tko-lg-head,.tko-legend .tko-lg-name{font-weight:700}.tko-legend.moving{opacity:.8}
.tko-area rect{fill:#1c7ed6;fill-opacity:.04;stroke:#1c7ed6;stroke-dasharray:10 6;stroke-width:2}.tko-area .tko-label{fill:#1c7ed6;transform-origin:0 0;transform-box:view-box}
.tko-mag{position:absolute;width:176px;height:176px;border-radius:50%;border:2px solid #1d2939;box-shadow:0 6px 20px #1d293955;pointer-events:none;z-index:5;background:#fff}.tko-mag[hidden]{display:none}
@media(max-width:1180px){.tko-body{grid-template-columns:224px minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto}.tko-props{grid-column:1/-1;border-left:0;border-top:1px solid var(--line);max-height:28vh}}
@media(max-width:720px){.tko{overflow-y:auto}.tko-body{display:flex;flex-direction:column;flex:none}.tko-main{order:1;display:flex;flex-direction:column}.tko-view{height:62vh;flex:none}.tko-list{overflow:visible}.tko-props{order:2;max-height:none}
 .tko-rail{order:3;border-right:0;border-top:1px solid var(--line)}.tko-top{padding:4px 6px}.tko-top .actions{flex-wrap:wrap}.tko-top .tko-r{margin-left:0}.tko-job{max-width:58vw}.tko-sheetname{max-width:40vw}.tko-top button.tko-linked{max-width:80vw}
 .tko-form{grid-template-columns:1fr}.tko-lwrap{display:block}.tko-grid{max-height:55vh}.tko-totals{max-height:none}.tko-lbar select{max-width:44vw}}
.tko .pp-btns button.primary{background:var(--accent);color:white;border-color:var(--accent)}.tko-none{margin:12px}
.tko-gridbox{display:flex;flex-direction:column;min-height:0;min-width:0}.tko-gridbox>.table-wrap{flex:1}.tko-words{display:block;color:var(--muted);max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tko-note+.est-block input:disabled,.tko-note+.est-block select:disabled{background:#f3f6f9;color:#1d2939;border-color:transparent;opacity:1}.tko-whence{margin-top:6px}.tko-whence summary{cursor:pointer;font-weight:600}
.job-folder{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline;margin:0}.job-folder>span{font-size:12px;color:#566679}.job-folder small{flex-basis:100%}
/* The Windows program (desktop.js): Open on this PC and Show in folder, Settings → This PC and Desktop app, the menu */
.desk-here{display:inline-flex;flex-wrap:wrap;gap:2px 4px;margin-left:6px;vertical-align:middle}.desk-here button{padding:3px 8px;font-size:11px;font-weight:600;color:#117da8}
.desk-address{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}.desk-address code{background:#f4f6f8;border:1px solid var(--line);border-radius:6px;padding:6px 10px;font-size:14px;overflow-wrap:anywhere}
.desk-code-line{color:var(--ink);font-size:14px;margin:12px 0 4px}.desk-code{display:inline-block;font-size:26px;letter-spacing:.14em;margin-left:10px;user-select:all;-webkit-user-select:all;vertical-align:middle}
.desk-auto{margin-top:12px;border-top:1px solid var(--line);padding-top:8px}.desk-auto .form-actions,#desk-backup-form .form-actions{position:static;margin-top:8px;padding:0;background:none}.desk-path{overflow-wrap:anywhere}.desk-app small{display:block;margin-top:4px}.desk-sha{overflow-wrap:anywhere;font-size:11px}
.desk-menu{padding:8px 0 0}.desk-menu button{width:100%;text-align:left;color:#117da8}.desk-steps{padding-left:20px;line-height:1.7}.desk-steps li{margin:8px 0}.desk-download{font-weight:600}
.fv-extra .desk-here{margin-left:0}.fv-local{color:#2d7350}
/* A measure before contract (prospect.js): its marking, the form's people, the job's panel and the customer's line */
.pill.pr-mark{background:#e3f3f1;color:#17655e}.job-sub .pill.pr-mark,.job-sub .pill.bad{margin-left:6px}
.pr-intro{margin:0 0 10px;font-size:12px}.pr-form fieldset{min-width:0}.pr-people .check small{margin-left:6px;color:var(--muted);font-size:11px}.pr-clash{margin:0}
.pr-job dl{margin:8px 0}.pr-job .note{margin:8px 0}.pr-job .actions{margin-top:8px;flex-wrap:wrap}.pr-moves{margin:8px 0;font-size:12px}.pr-moves summary{cursor:pointer;font-weight:600}.pr-moves small{display:block;color:var(--muted)}
.pr-line{margin:0 0 16px}.pr-line button{margin-left:4px}
/* QUICKCAM-01: the quick camera (quickcam.js). A computer has its button in the top bar; a phone or tablet the round one at
   the bottom corner, lifted over the bars at the foot of the screen (--qc-lift) and above the drawer, the plan and the file
   viewer, under the menus and tooltips; its toast sits over it, and its panel is a bottom sheet there. */
.qc-file{position:fixed;left:0;top:0;width:1px;height:1px;opacity:0;pointer-events:none;overflow:hidden}
.qc-top{display:inline-flex;align-items:center;gap:6px;max-width:190px;min-height:34px;padding:5px 12px 5px 9px;border:1px solid #9fcbe0;border-radius:999px;background:#f3fafd;color:#117da8;font-weight:650;white-space:nowrap}
.qc-top:hover{background:#e6f4fb}.qc-top-ico{font-size:16px;line-height:1}.qc-top-words{overflow:hidden;text-overflow:ellipsis;min-width:0}
@media(max-width:1280px){.qc-top{max-width:150px}}  /* the top bar keeps one line: the button's tip says the whole name */
.qc-fab{display:none}
.qc-toast{position:fixed;z-index:46;top:74px;right:var(--qc-right,24px);width:min(420px,calc(100vw - var(--qc-right,24px) - 24px));display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 44px 10px 12px;border-radius:12px;background:var(--navy);color:#fff;box-shadow:0 10px 34px #0b182950}
.qc-shots{display:flex;gap:4px;flex-shrink:0}.qc-shots img{width:52px;height:52px;object-fit:cover;border-radius:8px;border:2px solid #ffffff30;display:block}.qc-shots .qc-ico{font-size:26px}
.qc-say{flex:1 1 160px;min-width:0}button.qc-say{text-align:left;background:none;border:0;color:inherit;font:inherit;padding:0;cursor:pointer;border-radius:6px}button.qc-say:hover strong,button.qc-say:focus-visible strong{text-decoration:underline}.qc-say strong{display:block;font-size:13px;line-height:1.35;overflow-wrap:anywhere}.qc-say small{display:block;color:#c9d6e3;font-size:12px;line-height:1.4;margin-top:2px;overflow-wrap:anywhere}
.qc-acts{display:flex;flex-wrap:wrap;gap:6px;flex:1 1 100%;justify-content:flex-end}.qc-acts button{min-height:36px;border-radius:999px;padding:6px 12px;font-weight:650}
.qc-acts button.quiet{background:#ffffff1a;color:#fff;border:1px solid #ffffff38}.qc-acts button.quiet:hover{background:#ffffff2e}.qc-acts button.qc-x{position:absolute;top:6px;right:6px;min-height:32px;padding:4px 10px;border:0;background:transparent}
.qc-toast[data-state="failed"]{background:#7d2426}.qc-toast[data-state="saving"] .qc-acts{display:none}.qc-toast[data-state="saving"]{opacity:.96}
.qc-sheet{position:fixed;z-index:48;top:74px;right:var(--qc-right,24px);width:min(440px,calc(100vw - var(--qc-right,24px) - 24px));max-height:calc(100vh - 96px);overflow:auto;overscroll-behavior:contain;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 50px #16294238;padding:14px 16px}
.qc-sheet-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.qc-sheet-head h2{margin:0;font-size:16px}
.qc-on-job{margin:4px 0 8px}.qc-find{width:100%;margin:6px 0 10px}.qc-opts{display:flex;flex-direction:column;gap:6px}
.qc-opt{display:flex;flex-direction:column;align-items:flex-start;gap:1px;width:100%;min-height:44px;padding:8px 12px;border:1px solid var(--line);border-radius:8px;background:#fff;text-align:left;cursor:pointer;color:var(--ink)}
.qc-opt:hover,.qc-opt:focus-visible{border-color:var(--accent);background:#f3fafd}.qc-opt.on{border-color:var(--accent);box-shadow:inset 3px 0 0 var(--accent)}.qc-opt strong{font-size:13px;overflow-wrap:anywhere}.qc-opt small{color:var(--muted);font-size:12px}
.qc-note .field{display:flex;flex-direction:column;gap:4px;margin:8px 0}.qc-more{margin:4px 2px}
@media(pointer:coarse),(max-width:720px){
 .qc-top{display:none}
 .qc-fab{position:fixed;z-index:45;right:max(14px,env(safe-area-inset-right));bottom:calc(16px + env(safe-area-inset-bottom) + var(--qc-lift,0px));display:flex;align-items:center;gap:8px;max-width:calc(100vw - 28px);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}
 .qc-fab .qc-ico{display:grid;place-items:center;flex:0 0 58px;width:58px;height:58px;border-radius:50%;background:var(--accent);color:#fff;font-size:26px;box-shadow:0 8px 22px #0b182955,0 1px 3px #0b182940;border:3px solid #fff}
 .qc-cap{min-width:0;max-width:min(230px,calc(100vw - 104px));padding:7px 12px;border-radius:999px;background:#fff;color:var(--ink);font-size:13px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:0 4px 16px #0b182933;border:1px solid var(--line)}
 .qc-fab.qc-none .qc-cap{color:var(--muted)}.qc-fab:active .qc-ico{transform:scale(.94)}.qc-fab:focus-visible .qc-ico{outline:3px solid #f7b500;outline-offset:2px}
 .qc.qc-away .qc-fab{display:none}
 .qc-toast{top:auto;right:12px;left:12px;width:auto;bottom:calc(86px + env(safe-area-inset-bottom) + var(--qc-lift,0px))}.qc-acts{justify-content:flex-start}
 .qc-sheet{top:auto;left:0;right:0;bottom:0;width:auto;max-height:80vh;border-radius:16px 16px 0 0;padding:14px 16px calc(16px + env(safe-area-inset-bottom));box-shadow:0 -14px 44px #16294240}
 body.qc-on .main{padding-bottom:96px}body.qc-on #drawer{padding-bottom:calc(96px + env(safe-area-inset-bottom))}  /* what is under the corner scrolls clear of the button */
}
@media print{.qc{display:none!important}}
/* REPORTS-03: charts that come alive (charts.js), the records behind a number (drill.js) and the chart of accounts as a statement (company.js) */
figure.chart [data-cp],figure.chart .key{transition:opacity .12s ease,transform .12s ease}
figure.chart.hl [data-cp]:not(.on),figure.chart.hl [data-cg]:not(.on),figure.chart.hl .key:not(.on){opacity:.3}
figure.chart [data-action="drill-open"],.drill-tile{cursor:pointer}
.donut path.on,.donut circle.on{transform:scale(1.045);transform-box:view-box;transform-origin:50% 50%}
.chart-grid>.panel{container-type:inline-size}  /* three charts to a row: a donut too narrow for its legend beside it puts the legend under it */
@container (max-width:460px){figure.chart.donut{grid-template-columns:1fr;justify-items:center;gap:10px}figure.chart.donut>svg{max-width:140px}figure.chart.donut figcaption{width:100%}}
figure.chart [role="button"]:focus{outline:none}figure.chart [role="button"]:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.donut button.key{width:100%;margin:0;padding:3px 4px;border:0;border-radius:6px;background:none;font:inherit;font-weight:400;color:inherit;text-align:left;min-height:0}
.donut button.key:hover,.donut button.key.on,.chart-legend button.key:hover,.chart-legend button.key.on{background:#eef4fa}
.chart-legend button.key{display:inline-flex;align-items:center;gap:6px;width:auto;margin:0;padding:2px 5px;border:0;border-radius:5px;background:none;font:inherit;font-weight:400;color:inherit;min-height:0}
.chart-legend button.key svg{width:10px;height:10px}
button.stat.drill-tile{display:block;width:100%;margin:0;text-align:left;font:inherit;font-weight:400;color:inherit}
button.stat.drill-tile:hover,button.stat.drill-tile:focus-visible{border-color:var(--accent);box-shadow:0 0 0 3px #2494c41f}
button.link.drill-num{color:inherit;font-weight:inherit;text-decoration:underline dotted #9aa6b2;text-underline-offset:3px}
button.link.drill-num:hover{color:var(--accent);text-decoration-color:var(--accent)}
#drawer:has(.drill-panel){width:min(1120px,100vw)}
.drill-context{margin:-6px 0 6px}.drill-sum{margin:0 0 8px}.drill-person{margin:0 0 10px}.drill-person small{display:block;color:var(--muted)}
.drill-group{margin:16px 0 0}.drill-ghead{display:flex;justify-content:space-between;align-items:baseline;gap:8px 12px;flex-wrap:wrap;padding-bottom:4px;border-bottom:1px solid var(--line)}
.drill-ghead h3{margin:0;font-size:14px}.drill-ghead h3 small{margin-left:6px;color:var(--muted);font-weight:500}.drill-ghead button{width:auto;margin:0;padding:4px 8px}
.drill-aside .drill-ghead h3{color:var(--muted)}.drill-note{margin:6px 0 0;font-size:12px}
.drill-table{font-size:12px}.drill-table th{position:static;padding:7px 8px}.drill-table td{padding:6px 8px;max-width:none;overflow-wrap:break-word}
.drill-table .n{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.drill-table tfoot td{font-weight:650;border-top:2px solid var(--line)}
.drill-tools{margin-top:14px;justify-content:flex-start;flex-wrap:wrap}.drill-tools button{width:auto}
.drill-chip{display:flex;justify-content:space-between;align-items:center;gap:8px 12px;flex-wrap:wrap;margin:0 0 12px;padding:10px 12px;border:1px solid #b9dcef;border-radius:10px;background:#f0f8fd}
.drill-why{display:grid;gap:2px;min-width:0}.drill-why span{font-size:12px;color:#355068}.drill-why small{color:var(--muted);font-size:11px}.drill-chip .actions{flex-wrap:wrap}.drill-chip button{width:auto;margin:0}
.drill-x{font-size:18px;line-height:1;padding:4px 10px}
@media(max-width:720px){.drill-chip{position:relative;padding-right:44px;gap:4px}.drill-chip .drill-x{position:absolute;top:6px;right:6px}.drill-chip .actions{gap:2px 4px}.drill-chip .actions button:not(.drill-x){padding:6px 8px;font-size:13px}}
.st-panel .panel-head{align-items:flex-start}.st-panel .panel-head p{margin:4px 0 0}.st-period{min-width:170px}
.st{width:100%;border-collapse:collapse;font-size:12.5px;margin-top:4px}
.st th,.st td{padding:4px 8px;border-top:1px solid #eef1f5;max-width:none;vertical-align:top;background:none;position:static;white-space:normal}
.st thead th{font-size:11px;color:var(--muted);font-weight:600;border-top:0;border-bottom:1px solid var(--line)}
.st .st-n{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.st .st-acct{width:52px;color:var(--muted);font-variant-numeric:tabular-nums}
.st .st-name small{display:block;color:var(--muted);font-size:11px;font-weight:400}.st-acctin{display:none}
.st-section th{padding-top:12px;text-align:left}.st-bucket th{text-align:left}
.st-fold{width:auto;min-height:0;margin:0;padding:2px 0;border:0;background:none;font:inherit;font-weight:700;color:var(--ink);text-align:left;cursor:pointer}
.st-bucket .st-fold{font-weight:600;padding-left:10px}.st-in .st-name{padding-left:24px}
.st-sub td{font-weight:600}.st-total td{font-weight:700;border-top:1px solid #cfd6de}
.st-grand td{font-weight:700;font-size:13.5px;border-top:2px solid var(--ink);border-bottom:2px solid var(--ink)}
.st-memo td,.st-est td{color:#6b7684;font-style:italic;background:#f7f8fa}
button.link.st-amt{color:inherit;font-weight:inherit;font-variant-numeric:tabular-nums}button.link.st-amt:hover{color:var(--accent);text-decoration:underline}
.st-neg{color:#9b2c2c}.st-qb .st-fold{font-weight:600}.st-none th{font-weight:400}.st-none .st-nothing{margin-left:22px;font-weight:600}.st-section.st-none .st-nothing{margin-left:12px;font-weight:700}.st-none small{color:var(--muted);font-size:11px}.st-qblist{columns:3 200px;margin:6px 0;padding-left:18px;font-size:12px}
.st-notes{margin:10px 0 0;padding-left:18px;font-size:12px;color:#526174;line-height:1.6}
@media(max-width:720px){
 /* a record is its first cell and its amount on one line, and the rest flowing under them, each with its label */
 .drill-table thead{display:none}.drill-table tr{display:flex;flex-wrap:wrap;align-items:baseline;gap:1px 12px;padding:6px 0;border-top:1px solid #edf0f4}
 .drill-table td{border:0;padding:0}.drill-table td:first-child{flex:1 1 calc(100% - 132px);min-width:0}.drill-table td.main{order:1;flex:0 0 auto;margin-left:auto}
 .drill-table td:not(:first-child):not(.main){order:2;flex:0 1 auto;font-size:11px;color:var(--muted);text-align:left}
 .drill-table td[data-label]:not(:first-child):not(.main)::before{content:attr(data-label) ': '}.drill-table td:empty{display:none}
 .drill-table tfoot td.n:not(:first-child){order:1;margin-left:auto;text-align:right;font-size:12px;color:var(--ink)}.drill-table tfoot tr{border-top:2px solid var(--line)}.drill-table tfoot td{border-top:0}
 .st-memo td,.st-est td{background:none}.st .st-memo,.st .st-est{background:#f7f8fa}
 .st thead{display:none}.st .st-acct{display:none}.st-acctin{display:inline;color:var(--muted)}
 .st tr{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:10px;border-top:1px solid #eef1f5;padding:5px 0}.st td,.st th{border:0;padding:0}
 .st .c-actual{grid-column:2;grid-row:1}.st .c-committed,.st .c-budget,.st .c-variance{grid-column:1/-1;text-align:left;font-size:11px;color:var(--muted);font-weight:400}
 .st .c-committed:empty,.st .c-budget:empty,.st .c-variance:empty,.st td[colspan="4"]{display:none}
 .st .c-committed::before,.st .c-budget::before,.st .c-variance::before{content:attr(data-label) ' '}
 .st-section th,.st-bucket th{grid-column:1}.st-in .st-name{padding-left:10px}.st-grand td{border:0}.st-grand{border-top:2px solid var(--ink)!important}
}
/* REPORTS-03: Home's tiles open where their figure is happening (dashboards.js); a crew on site right now is the one live tile */
button.dash-tile{width:100%;margin:0;min-height:0;text-align:left;font:inherit;font-weight:400;color:inherit;cursor:pointer;align-items:stretch;transition:border-color .12s ease,box-shadow .12s ease}
button.dash-tile:hover,button.dash-tile:focus-visible{border-color:var(--accent);box-shadow:0 0 0 3px #2494c41f}button.dash-tile:focus{outline:none}button.dash-tile:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.dash-tile.live{background:#f0f9f0;border-color:#b7e2bb;border-left-color:#0a860a}.kind-tiles .dash-tiles:has(.live){padding-top:4px}
@media(min-width:721px){.kind-tiles .dash-tiles{grid-template-columns:repeat(auto-fit,minmax(132px,1fr))}}
.dash-live{position:absolute;top:-9px;right:10px;display:inline-flex;align-items:center;gap:5px;padding:2px 7px 2px 6px;border-radius:999px;background:#0a860a;color:white;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}
.dash-live i{width:7px;height:7px;border-radius:50%;background:white}
@media(prefers-reduced-motion:no-preference){.dash-live i{animation:dash-live 1.6s ease-out infinite}}@keyframes dash-live{0%{box-shadow:0 0 0 0 #ffffffb3}70%{box-shadow:0 0 0 6px #ffffff00}100%{box-shadow:0 0 0 0 #ffffff00}}
/* Bring in LB's history (history.js): its lists and tables, stacked with their labels on a phone */
.hi-table td small,.hi-folders .ts-reads small{display:block;color:var(--muted);font-size:12px}.hi-table td.num{text-align:right}.hi-jobs{gap:4px;margin:6px 0}.hi-up{margin:10px 0 14px;padding-top:8px;border-top:1px solid var(--line)}
.hi-tab{border:1px solid var(--line);border-radius:10px;padding:6px 12px 10px;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px 12px;grid-column:1/-1;min-width:0}.hi-tab legend{font-weight:700;padding:0 4px}.hi-tab .wide{grid-column:1/-1}
#hi-map-form>.wide,#hi-upload-form>.wide{grid-column:1/-1}#hi-map-form .form-actions,#hi-upload-form .form-actions,#hi-check-form .form-actions{position:static;margin-top:0;padding:0}
@media(max-width:720px){.hi-table thead{display:none}.hi-table,.hi-table tbody,.hi-table tr,.hi-table td{display:block;width:auto;max-width:none}.hi-table tr{padding:8px 0;border-bottom:1px solid var(--line)}
 .hi-table td{border:0;padding:2px 8px;height:auto;text-align:left}.hi-table td.num{text-align:left}.hi-table td.nowrap{white-space:normal}.hi-table td[data-label]::before{content:attr(data-label) ': ';color:var(--muted)}.hi-table td[data-col=tab],.hi-table td[data-col=file],.hi-table td[data-col=name],.hi-table td[data-col=word]{font-weight:600}}
.give-sign-ins{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px}
/* The day's agenda beside a form that books a visit (agenda.js): the people picked, free or booked; the all-day work; the hours with each
   piece of work as a block, placed on rows of 15 minutes by agendaPlace; the visit being booked dashed; overlaps in red. */
.agenda{border:1px solid var(--line);border-radius:10px;background:#fbfcfd;padding:10px 12px;min-width:0;display:flex;flex-direction:column;gap:8px}
.ag-top{display:flex;flex-direction:column;gap:8px}.ag-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.ag-when{display:flex;flex-direction:column;align-items:center;text-align:center}
.ag-when strong{font-size:14px}.ag-when small{color:var(--muted);font-size:11px}.ag-step{min-height:0;padding:3px 10px;border:1px solid var(--line);border-radius:14px}
.ag-who{display:flex;align-items:center;gap:8px;font-size:12px;color:#566679}.ag-who select{flex:1;min-width:0}.ag-wait,.ag-none{margin:4px 0}
.ag-free,.ag-allday{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px}
.ag-free li{display:flex;justify-content:space-between;align-items:baseline;gap:8px;padding:4px 8px;border-radius:6px;background:#eaf6ef}.ag-free li.booked{background:#eef2f6}.ag-free li.clash{background:#fcebea}
.ag-free small{color:var(--muted);text-align:right}.ag-free li.free small{color:#2d7350;font-weight:600}.ag-free li.clash small{color:#a53032}
.agenda .type-measure{--type:#1f6fb2}.agenda .type-install{--type:#1e8a55}.agenda .type-service{--type:#c2760d}.agenda .type-warranty{--type:#7a4fbf}.agenda .type-punch{--type:#b33a80}
.agenda .type-delivery{--type:#8a5a2b}.agenda .type-meeting{--type:#4f6d8a}.agenda .type-other{--type:#8a97a6}
.ag-item{border-left:4px solid var(--type,#8a97a6);background:white;border-radius:6px;padding:5px 8px;box-shadow:0 0 0 1px var(--line)}.ag-item small{display:block;color:var(--muted)}
.ag-grid{display:grid;grid-template-columns:3.4em minmax(0,1fr);grid-auto-rows:10px}
.ag-hour{border-top:1px solid var(--line);font-size:10px;color:var(--muted);line-height:1;padding-top:1px}
.ag-block{z-index:1;margin:1px 2px;min-width:0;border-radius:6px;background:white;border:1px solid var(--line);border-left:4px solid var(--type,#8a97a6);padding:2px 6px;overflow:hidden;font-size:11px;line-height:1.3}
.ag-block strong,.ag-block span,.ag-block small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ag-block small{color:var(--muted)}
.agenda button.ag-open{display:block;width:100%!important;color:inherit;font-weight:inherit;text-align:left}.ag-open strong{font-weight:650}.ag-mark{color:#8a5a2b}
.ag-block.clash,.ag-item.clash{border-color:#e3a6a6;border-left-color:#d93a3a;background:#fdf3f3}.ag-block.done{opacity:.55}
.ag-block.busy{background:repeating-linear-gradient(135deg,#f3f5f8 0 6px,#e9edf2 6px 12px)}.ag-visit{z-index:2;border:2px dashed var(--accent);background:#eaf6fc;color:#12506e}
/* Expenses (expenses.js): the rows by status, the phone form with its receipt pages, one expense with where it waits, the Home
   cards, Add a receipt on Today's work, To pay back and Settings → Expenses. */
.exp-wrap{max-width:980px}.exp-views{margin:0 0 14px}.exp-add{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 10px}button.exp-big{min-height:48px;padding:12px 18px;font-size:15px}
.exp-counts{margin:4px 0 12px;color:var(--ink);font-weight:600}.exp-limits{margin:-6px 0 12px;font-size:12px}
.exp-group{margin:14px 0}.exp-group h3{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 8px}
.exp-row{background:#fff;border:1px solid var(--line);border-left:4px solid #c7d2dd;border-radius:10px;padding:10px 12px;margin:0 0 8px;min-width:0}
.exp-row.st-submitted{border-left-color:var(--accent)}.exp-row.st-sent-back{border-left-color:#c8454a}.exp-row.st-draft{border-left-color:#e2a13b}.exp-row.st-approved,.exp-row.st-paid-back{border-left-color:#2d7350}.exp-row.st-refused{border-left-color:#8a97a6}
button.exp-main{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;width:100%;border:0;background:none;padding:0;text-align:left;min-height:0;font-weight:500}button.exp-main:hover{background:none}
.exp-what{min-width:0}.exp-what strong{display:block;font-size:14px;overflow-wrap:anywhere}.exp-what small{display:block;margin-top:2px;overflow-wrap:anywhere}
.exp-amt{font-size:15px;font-weight:700;white-space:nowrap;color:var(--ink)}.exp-amt.big{font-size:30px;letter-spacing:-.5px}
.exp-state{margin:6px 0 0;font-size:12px;color:#3d4b5c;overflow-wrap:anywhere}.exp-kept{color:#8a4b08}.exp-pages-n{color:var(--muted);white-space:nowrap}
.exp-dup{margin:6px 0 0;font-size:12px;color:#946422;font-weight:600}.exp-row-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.exp-person{background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px;margin:0 0 12px}.exp-person header{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:0 0 8px}
.exp-person header>div{flex:1 1 160px}.exp-person header small{display:block}
.exp-filters{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end;margin:0 0 12px}.exp-filters .field{flex:0 1 160px}.exp-filters .field.grow{flex:1 1 220px}
.exp-check{display:flex;gap:8px;align-items:center;font-size:12px;color:#3d4b5c;margin:4px 0}.exp-check input{flex:none}.exp-table td{max-width:none}.exp-table .r{text-align:right}
.exp-form [hidden],.exp-one [hidden]{display:none!important}
.exp-shots{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:0 0 10px}
.exp-shot{position:relative;display:flex;align-items:center;justify-content:center;min-height:52px;border:1px solid var(--line);border-radius:10px;font-weight:700;font-size:14px;cursor:pointer;background:#fff;text-align:center;padding:8px;color:var(--ink)}
.exp-shot.primary{background:var(--accent);border-color:var(--accent);color:#fff}.exp-shot input{position:absolute;inset:0;width:100%;height:100%;min-height:0;opacity:0;cursor:pointer}
.exp-pages{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 8px}
.exp-page{position:relative;display:inline-flex;align-items:center;justify-content:center;width:76px;height:96px;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#f4f7fa;padding:0;min-height:0}
.exp-page img{width:100%;height:100%;object-fit:cover}.exp-page.new{border-color:#9cc9df}.exp-pdf{font-size:11px;padding:4px;text-align:center;overflow-wrap:anywhere;color:#3d4b5c}
.exp-page .exp-x{position:absolute;top:2px;right:2px;min-height:0;padding:2px 7px;background:#ffffffdd;border-radius:12px;font-size:12px}
.exp-need{font-size:12px;margin:0 0 10px}.exp-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.exp-wide{grid-column:1/-1}
.exp-amount input{font-size:22px;font-weight:700;min-height:52px}.exp-form>.field{margin:12px 0}
.exp-paid{border:1px solid var(--line);border-radius:10px;padding:6px 12px;margin:12px 0;min-width:0}.exp-paid legend{font-weight:700;font-size:12px;padding:0 4px;color:#566679}
.exp-opt{display:flex;gap:10px;align-items:center;padding:8px 4px;font-size:14px;color:var(--ink)}.exp-opt input{width:20px;min-height:20px;height:20px;flex:none;accent-color:var(--accent)}
.exp-actions>*{flex:1}.exp-top{display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin:0 0 8px}
.exp-where{border:1px solid #cfe3ef;background:#f3f9fc;border-radius:10px;padding:10px 12px;margin:10px 0}.exp-where small{display:block;margin-top:4px}
.exp-acts{margin:12px 0}.exp-decide{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:10px 0}.exp-dl{margin:12px 0}
.exp-steps{padding-left:20px}.exp-steps li{margin:0 0 8px}.exp-steps p{margin:2px 0;overflow-wrap:anywhere}.exp-pay-list{margin:8px 0 12px}
.exp-tw{display:flex;flex-wrap:wrap;gap:8px;align-items:center;border-top:1px solid var(--line);padding-top:10px;margin-top:4px}table.bud-grid.bud-v-costing:has([data-col="expenses"]){min-width:1678px}.exp-card .exp-add{margin-bottom:6px}
.exp-settings .exp-grid{grid-template-columns:repeat(3,minmax(0,1fr));align-items:end}.exp-cats select{min-width:170px}.exp-cats input[name$=".name"]{min-width:170px}.exp-cats td small{display:block;margin-top:4px;max-width:260px}
@media(max-width:720px){#drawer:has(.exp-form),#drawer:has(.exp-one){padding:18px 16px}
 /* The form's Send bar stays stuck to the drawer's very bottom (no gap under it for fields to show through), one row high, and a
    field taking focus scrolls clear above it (scroll-padding; expenses.js expClearBar where a browser ignores that). */
 #drawer:has(.exp-form){padding-bottom:0;scroll-padding-bottom:96px}.exp-form .exp-actions{margin-top:16px;padding:10px 0 calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--line);z-index:2}
 .exp-stack thead{display:none}.exp-stack,.exp-stack tbody,.exp-stack tr,.exp-stack td{display:block;width:auto;max-width:none}.exp-stack tr{padding:8px 0;border-bottom:1px solid var(--line)}
 .exp-stack td{border:0;padding:3px 0}.exp-stack td[data-label]::before{content:attr(data-label);display:block;font-size:11px;color:var(--muted);margin-bottom:2px}.exp-stack select,.exp-stack input:not([type=checkbox]){width:100%;min-width:0}
 .exp-stack td[data-label="In use"]::before{display:none}.exp-grid,.exp-settings .exp-grid{grid-template-columns:1fr}.exp-wide{grid-column:auto}
 .exp-filters .field,.exp-filters .field.grow{flex:1 1 140px}.exp-amt.big{font-size:26px}.exp-actions{flex-direction:row-reverse}.exp-person header>button{width:100%}}
/* Equipment (equipment.js, EQUIP-01): the list and its filters, Due and Rentals cards, Mileage, an item's drawer and its forms,
   and the vehicle on Today's work, the schedule and the Day planner. The hidden attribute always hides in them. */
.eq-wrap [hidden],.eq-one [hidden],.eq-form [hidden],.eq-sf [hidden],[data-eq-warn][hidden],.eq-tw [hidden]{display:none!important}
.eq-views{margin:0 0 12px}.eq-filters{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end;margin:0 0 10px}.eq-filters .field{margin:0;min-width:150px}.eq-filters .field.grow{flex:1 1 260px}.eq-filter-acts{display:flex;gap:8px}
.eq-count{margin:4px 0 10px}.eq-table td{vertical-align:top}.eq-table td small{display:block;color:var(--muted);margin-top:2px;white-space:normal}.eq-table td.mono{text-align:left}.eq-table td.r{text-align:right}
.eq-due{display:block;font-size:12.5px;margin:0 0 3px;overflow-wrap:anywhere}.eq-due.st-overdue{color:#a53032;font-weight:600}.eq-due.st-soon{color:#8a5a00}
.eq-h{margin:16px 0 8px;font-size:15px}.eq-h small{font-weight:400;color:var(--muted)}.eq-empty{padding:14px 16px}
.eq-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;margin:0 0 14px}
.eq-card{border:1px solid var(--line);border-left-width:4px;border-radius:var(--radius);padding:10px 12px;background:#fff;min-width:0}.eq-card.st-overdue{border-left-color:#d9534f}.eq-card.st-soon{border-left-color:#e0a43a}.eq-card.st-ok{border-left-color:#6fbf8e}
.eq-card-head{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}.eq-card p{margin:6px 0;overflow-wrap:anywhere}.eq-card-what{font-weight:600}.eq-card .actions{flex-wrap:wrap;gap:8px}
#drawer:has(.eq-one){width:min(720px,100vw)}
.eq-top{display:flex;gap:12px;align-items:center;margin:0 0 8px}.eq-top p{margin:2px 0}.eq-sub{color:var(--muted)}.eq-why{color:#a53032}
button.eq-photo{padding:0;border:0;background:none;min-height:0;flex:0 0 auto}.eq-photo img{width:84px;height:64px;object-fit:cover;border-radius:8px;display:block}
.eq-acts{flex-wrap:wrap;gap:8px;margin:6px 0 12px}button.eq-big{min-height:46px;font-size:15px;padding:10px 18px}
.eq-sec{border-top:1px solid var(--line);padding:12px 0 6px;margin:4px 0}.eq-sec h3{font-size:14px;margin:0 0 8px}.eq-sec h3 small,.eq-sec h4 small{font-weight:400;color:var(--muted)}.eq-sec h4{font-size:12.5px;margin:0 0 4px}
.eq-dues,.eq-reads,.eq-work,.eq-plan,.eq-booked{list-style:none;margin:0 0 8px;padding:0;display:grid;gap:6px}
.eq-dues small,.eq-reads small,.eq-work small,.eq-plan small,.eq-booked small{display:block;color:var(--muted);overflow-wrap:anywhere}
.eq-dues li{display:grid;grid-template-columns:86px minmax(0,1fr) auto;gap:4px 10px;align-items:start;padding:7px 9px;border-radius:8px;background:#f8fafc}
.eq-dues li.st-overdue{background:#fdf3f3}.eq-dues li.st-soon{background:#fdf8ec}.eq-due-word{font-weight:650;font-size:12px}.st-overdue .eq-due-word{color:#a53032}.st-soon .eq-due-word{color:#8a5a00}.st-ok .eq-due-word{color:#2d7350}.st-unset .eq-due-word{color:var(--muted)}
.eq-dues small.eq-safety,.eq-plan small.eq-safety{display:inline;color:#a53032;font-weight:650}.eq-reads small.eq-check{color:#8a5a00}
.eq-reads li,.eq-work li,.eq-booked li{display:grid;grid-template-columns:110px minmax(0,1fr) auto;gap:4px 10px;align-items:start;padding:5px 0;border-bottom:1px solid #eef1f4}.eq-reads li{grid-template-columns:110px minmax(0,1fr) auto auto}.eq-booked li.today{font-weight:600}
.eq-big-n{font-size:20px;margin:0 0 8px}.eq-big-n small{font-size:12px;color:var(--muted)}
.eq-miles{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:0 0 10px}.eq-bars{width:100%;height:56px;display:block;background:#f8fafc;border-radius:6px}.eq-bars rect{fill:var(--accent)}
button.eq-dash,button.eq-paper-mini{padding:0;border:0;background:none;min-height:0;margin:3px 6px 0 0}.eq-dash img,.eq-paper-mini img{width:44px;height:34px;object-fit:cover;border-radius:4px;display:block}
.eq-papers{display:flex;flex-wrap:wrap;gap:12px;margin:0 0 10px}.eq-paper{display:flex;flex-direction:column;align-items:center;gap:3px;position:relative;width:96px}.eq-paper small{font-size:11px;color:var(--muted);text-align:center}
button.eq-tile{padding:0;border:1px solid var(--line);background:#fff;border-radius:8px;min-height:0;width:96px;height:76px;overflow:hidden}.eq-tile img{width:100%;height:100%;object-fit:cover;display:block}.eq-tile .exp-pdf{font-size:11px;padding:4px;overflow-wrap:anywhere}
button.eq-x{position:absolute;top:-8px;right:-8px;min-height:0;padding:1px 6px;border-radius:50%;background:#fff}
.eq-paper-add{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr);gap:8px;align-items:end}.eq-paper-add .field{margin:0}.eq-paper-add #eq-paper-note{grid-column:1/-1}
.eq-po{flex-wrap:wrap;gap:8px}.eq-po select{max-width:100%}
.eq-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 14px}.eq-wide{grid-column:1/-1}.eq-rent{border:1px solid var(--line);border-radius:10px;padding:8px 12px;margin:10px 0}.eq-rent legend{font-weight:650;padding:0 4px}
.eq-miles-in input{font-size:24px;letter-spacing:.04em;font-variant-numeric:tabular-nums}.eq-read .exp-shots{grid-template-columns:1fr}.eq-steps{margin:0 0 10px}
.eq-plan-edit input:not([type=checkbox]),.eq-plan-edit select{width:100%;min-width:0}.eq-plan-edit td{vertical-align:middle}
.eq-takes .chips{margin:4px 0 6px}.eq-takes select{width:100%;max-width:100%}.eq-task{margin:4px 0 6px}.eq-sf{margin:6px 0 0}
.tw-vehicle,.eq-task-line{margin:4px 0;font-size:13px}.eq-veh{white-space:nowrap}
.eq-tw{border:1px solid var(--line);border-radius:var(--radius);padding:8px 12px;margin:0 0 12px;background:#f8fafc}.eq-tw .tw-when{margin:2px 0 4px}
.eq-tw-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:6px 0}.eq-tw-row+.eq-tw-row{border-top:1px solid var(--line)}.eq-tw-row>span{min-width:0}.eq-tw-row small{display:block;color:var(--muted)}.eq-tw-row.held strong{color:#a53032}
.eq-rep-head{display:flex;justify-content:space-between;flex-wrap:wrap;gap:6px;align-items:baseline}.eq-rep-head p{margin:0}.eq-total td{border-top:2px solid var(--line)}.eq-year{margin:0 0 10px}
.eq-settings h3{font-size:13px;margin:14px 0 6px}
@media(max-width:720px){.eq-filters .field,.eq-filters .field.grow{flex:1 1 140px;min-width:0}.eq-filters select,.eq-filters input{width:100%;min-width:0}.eq-filter-acts{flex:1 1 100%}.eq-filter-acts>*{flex:1}
 /* a row becomes a card: its first cell (the name) and what is due across, the rest two by two under their headings */
 .eq-stack thead{display:none}.eq-stack,.eq-stack tbody{display:block;width:auto;max-width:none;min-width:0}.eq-stack tr{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:2px 12px;padding:10px 12px;border-bottom:1px solid var(--line)}
 .eq-stack td{display:block;width:auto;min-width:0;border:0;padding:3px 0;text-align:left;height:auto}.eq-stack td.r{text-align:left}.eq-stack td:first-child,.eq-stack td[data-col=due]{grid-column:1/-1}.eq-stack td:empty{display:none}
 .eq-stack td[data-label]:not([data-label=""]):not(:first-child)::before{content:attr(data-label);display:block;font-size:11px;color:var(--muted);margin-bottom:2px}
 .eq-grid{grid-template-columns:1fr}.eq-wide{grid-column:auto}.eq-miles{grid-template-columns:1fr}.eq-cards{grid-template-columns:minmax(0,1fr)}
 .eq-dues li{grid-template-columns:minmax(0,1fr) auto}.eq-due-word{grid-column:1/-1}
 .eq-reads li,.eq-work li,.eq-booked li{grid-template-columns:minmax(0,1fr) auto}.eq-reads li{grid-template-columns:minmax(0,1fr) auto auto}.eq-reads li>span:first-child,.eq-work li>span:first-child,.eq-booked li>span:first-child{grid-column:1/-1}
 .eq-acts>*{flex:1 1 140px}.eq-tw-row{flex-wrap:wrap}.eq-tw-row button.eq-big{width:100%}.eq-paper-add{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.eq-paper-add .field{grid-column:1/-1}
 #drawer:has(.eq-one),#drawer:has(.eq-form){padding:18px 16px}}
/* Before a crew travels (readiness.js): the Mobilizations tab's trips, storage and dates asked, its readiness column, the turnover areas, and a mobilization's Readiness drawer */
.rd-panels{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;margin:4px 0 14px}.rd-card{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:8px;padding:10px 12px;min-width:0;background:#fff}.rd-card.red{background:#fdf3f3;border-color:#efcaca}.rd-card.amber{background:#fdf8ec;border-color:#f0dfb5}.rd-card.green{background:#f3faf6;border-color:#cde8d8}
.rd-card .section-label{margin:0 0 6px}.rd-card strong{display:block;overflow-wrap:anywhere}.rd-card small{display:block;line-height:1.45;margin-top:3px;overflow-wrap:anywhere}.rd-card .actions{margin-top:auto;padding-top:8px}
.rd-asks{list-style:none;margin:6px 0 0;padding:0}.rd-asks li{padding:5px 0;border-top:1px solid var(--line)}.rd-asks li:first-child{border-top:0}.rd-asks li strong{font-size:12px}.rd-state{margin-right:4px}.rd-trip{display:block;margin-top:3px}
.mob-tab td[data-col=ready]{min-width:200px}.mob-tab td[data-col=ready] small{display:block}.mob-tab td[data-col=units]{min-width:180px}
.rd-list{list-style:none;margin:0;padding:0}.rd-list>li{padding:8px 0;border-top:1px solid var(--line)}.rd-list>li:first-child{border-top:0}.rd-list small{display:block;margin-top:3px;line-height:1.45;overflow-wrap:anywhere}.rd-list .wo-link{margin:4px 4px 0 0;min-height:30px}.rd-gone{opacity:.65}.rd-warn p{margin:4px 0;color:var(--ink)}
.rd-units{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:12px 0;min-width:0}.rd-units legend{font-size:12px;color:var(--muted)}.rd-floor{display:flex;flex-wrap:wrap;gap:0 14px;align-items:center;padding:4px 0;border-top:1px solid var(--line)}.rd-floor strong{flex:0 0 100%;font-size:11px;color:var(--muted);margin-top:4px}.rd-floor .rd-floor-all{flex:0 0 100%;font-weight:600}.rd-floor .check{padding:4px 0}
.rd-ask{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;align-items:center;margin:6px 0}.rd-dates{margin-top:8px}
@media(max-width:720px){.rd-panels{grid-template-columns:1fr}
 .rd-stack thead{display:none}.rd-stack,.rd-stack tbody,.rd-stack tr,.rd-stack td{display:block;width:auto;max-width:none}.rd-stack tr{padding:10px 0;border-top:1px solid var(--line)}.rd-stack tr:first-child{border-top:0}
 .mob-tab .rd-stack td{border:0;padding:3px 4px;min-width:0}.rd-stack td[data-label]::before{content:attr(data-label);display:block;font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:4px 0 2px}.rd-stack td.actions{display:flex}}
.mob-tab td.nowrap,#drawer td.nowrap{white-space:nowrap}
/* Messages (chat.js): the conversations beside the open one; on a phone the list, then the conversation. The page scrolls, not a box
   in it: the conversation grows with the page, its newest message at the foot, and the writing box stays at the foot of the window. */
.nav-count{margin-left:auto;min-width:20px;padding:0 6px;border-radius:999px;background:#c0392b;color:#fff;font-size:11px;font-weight:700;line-height:18px;text-align:center}.nav-count[hidden],.menu-dot[hidden]{display:none}
.menu-button{position:relative}.menu-dot{position:absolute;top:6px;right:6px;width:9px;height:9px;border-radius:50%;background:#c0392b;box-shadow:0 0 0 2px #fff}
.chat-cols{display:grid;grid-template-columns:320px minmax(0,1fr);gap:16px;align-items:start}.chat-main{min-width:0}
.chat-side{padding:8px;top:calc(var(--band,0px) + var(--ca-h,0px) + 14px)}.main .chat-side.keep{position:sticky}
.chat-rows{display:flex;flex-direction:column;gap:2px}.chat-sub{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:12px 8px 4px}
.chat-row{display:flex;align-items:center;gap:10px;width:100%;border:0;border-radius:8px;background:transparent;text-align:left;padding:9px 10px;font-weight:500;min-height:54px}
.chat-row:hover{background:#f1f6f9}.chat-row.active{background:#e8f5fb}.chat-row.unread strong{font-weight:750}.chat-row .avatar,.chat-row .chat-ico{flex:none;width:32px;height:32px}
.chat-ico{display:inline-grid;place-items:center;border-radius:8px;background:#edf1f5;color:#3d4b5c;font-weight:750;font-size:14px}.chat-head h2 .chat-ico{width:24px;height:24px;margin-right:6px;font-size:13px;vertical-align:1px}
.chat-row-main{display:flex;flex-direction:column;min-width:0;flex:1}.chat-row-top{display:flex;justify-content:space-between;gap:8px;align-items:baseline}.chat-row-top strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat-row-top time{flex:none;font-size:11px;color:var(--muted);font-weight:500}.chat-row-line{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px}
.chat-count{flex:none;min-width:22px;padding:0 6px;border-radius:999px;background:var(--accent);color:#fff;font-size:11px;font-weight:700;line-height:20px;text-align:center}
.chat-none{padding:28px}.chat-none h2{margin:0 0 6px}.chat-conv{padding:0}
.chat-head{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--line)}.chat-head-main{flex:1;min-width:0}.chat-head h2{margin:0;font-size:17px;overflow-wrap:anywhere}.chat-head small{color:var(--muted)}
.chat-back{display:none}
.chat-msgs{padding:8px 16px 4px;display:flex;flex-direction:column}.chat-older{text-align:center;margin:6px 0}.chat-empty{margin:24px 0;text-align:center}
.chat-day{display:flex;align-items:center;gap:10px;margin:14px 0 6px;font-size:11px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.chat-day::before,.chat-day::after{content:'';flex:1;border-top:1px solid var(--line)}
.chat-msg{display:flex;flex-direction:column;align-items:flex-start;max-width:min(78%,640px);margin-top:10px}.chat-msg.same{margin-top:3px}.chat-msg.mine{align-self:flex-end;align-items:flex-end}
.chat-by{display:flex;align-items:center;gap:6px;font-size:12px;margin-bottom:3px}.chat-by time{color:var(--muted);font-size:11px}.chat-by .avatar{width:22px;height:22px;font-size:9px}
.chat-bubble{background:#eef2f5;border-radius:14px;padding:8px 12px;max-width:100%;overflow-wrap:anywhere}.chat-msg.mine .chat-bubble{background:#dcf0f9}.chat-msg.pending .chat-bubble{opacity:.75;border:1px dashed #9cc8dc}
.chat-msg.jumped .chat-bubble{box-shadow:0 0 0 3px #f5c451}.chat-body p:last-child{margin-bottom:0}.chat-body ul:last-child,.chat-body ol:last-child{margin-bottom:0}
.chat-job{font-weight:650;padding:0;min-height:0;border:0;background:none;color:#117da8;text-decoration:underline}
.chat-photos{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 2px}.chat-shot{padding:0;border:0;border-radius:10px;overflow:hidden;background:#dde4ea;line-height:0}.chat-shot img{display:block;max-width:220px;max-height:220px;width:auto;height:auto;object-fit:cover}
.chat-docs{display:flex;flex-direction:column;gap:4px;margin:6px 0 2px}.chat-doc{display:flex;align-items:center;gap:8px;text-align:left;background:#fff;border:1px solid var(--line);border-radius:8px;padding:6px 10px;min-height:40px;font-weight:550}
.chat-doc small{color:var(--muted);font-weight:500;margin-left:auto}.chat-doc .act-ext,.chat-doc small{flex:none;white-space:nowrap}.chat-doc-name{min-width:0;overflow-wrap:anywhere}
.chat-del{min-height:0;padding:2px 6px;font-size:11px;margin-top:2px;color:var(--muted)}.chat-wait{font-size:11px;color:#8f560a;margin-top:2px}.chat-gone{margin:0;font-size:12px;font-style:italic;color:var(--muted)}
.chat-compose{position:sticky;bottom:0;z-index:4;background:#fff;border-top:1px solid var(--line);border-radius:0 0 var(--radius) var(--radius);padding:10px 16px 12px}
.chat-compose .rich-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.chat-compose .rich-bar{position:static}.chat-compose .rich-area,.chat-compose .rich-preview{min-height:64px}
.chat-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}.chat-tools .primary{margin-left:auto}.chat-note{font-size:12px}
.chat-chosen{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.chat-chosen:empty{display:none}.chat-pick{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--line);border-radius:14px;padding:2px 4px 2px 10px;font-size:12px;background:#f7f9fb}.chat-pick button{min-height:0;padding:2px 6px;border:0}
.chat-find{width:100%;margin:4px 0 8px}.chat-checks{display:flex;flex-direction:column;gap:2px}.chat-check{padding:6px 4px;border-radius:6px}.chat-check[hidden]{display:none}.chat-check small{color:var(--muted)}
.chat-open-set{border:0;padding:0;margin:4px 0 10px}.chat-open-set legend{font-size:12px;color:#566679;padding:0;margin-bottom:4px}.chat-open-set input[type=radio]{width:18px;min-height:18px;height:18px;flex:none;padding:0;margin:0;accent-color:var(--accent)}.chat-members-pick{margin-top:6px}
#chat-channel-form:has([name=open][value=yes]:checked) .chat-members-pick{display:none}
.chat-member-list li{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--line)}#chat-members-form h3{margin:18px 0 6px}.chat-danger{margin-top:18px}
@media(max-width:900px){.chat-cols{grid-template-columns:260px minmax(0,1fr)}}
@media(max-width:720px){.chat-cols{grid-template-columns:minmax(0,1fr)}.chat-page.chat-on .chat-side,.chat-page.chat-on>.heading,.chat-page:not(.chat-on) .chat-main{display:none}
 .chat-back{display:inline-flex;flex:0 0 100%;justify-content:flex-start;padding:4px 2px;min-height:32px}.chat-head{padding:6px 12px 10px;flex-wrap:wrap;row-gap:2px}.chat-head .actions{margin-left:auto}.chat-msgs{padding:6px 10px 4px}.chat-msg{max-width:88%}
 .chat-shot img{max-width:180px;max-height:180px}.chat-compose{padding:8px 10px 10px}.chat-compose .rich-bar :is([data-rich-cmd=strikeThrough],[data-rich-block],[data-rich-cmd=clear],[data-rich-cmd=preview]){display:none}.chat-side{padding:4px}.chat-page>.heading .actions{width:100%}.chat-page>.heading .actions button{flex:1}}
/* The job's History tab (jobhistory.js): the Activity feed's items for this job, with its filters above them. */
.jh .panel-head p{margin:4px 0 0}.jh-filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px 14px;margin:0 0 12px}.jh-person{min-width:200px;margin:0}.jh-kinds{flex:1;margin:0}.jh-kinds .chip{cursor:pointer}.jh-kinds .chip input{margin:0 4px 0 0}
@media(max-width:720px){.jh-person{flex:1 1 100%}}
/* Who else is looking at the job (jobhistory.js, presence.py): a line under its name while someone else at LB has it open. */
.presence-line{display:flex;align-items:center;gap:8px;margin:-4px 0 12px;font-size:12px;font-weight:600;color:#1e6f4c}.presence-line[hidden]{display:none}
.pr-dot{width:9px;height:9px;border-radius:50%;background:#1baf7a;box-shadow:0 0 0 3px #1baf7a33;flex:none}
/* Customer asks (asks.js): the job's Asks tab, an ask's panel, Operations → Waiting on us */
.cq-tab .panel-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.cq-tab h3{margin-top:18px}.cq-tab h3 .count{margin-left:4px}.count.late{background:#fbe9e9;color:#9b2c2c}
.cq-waiting{margin:0 0 6px;font-size:12px}.cq-wait{color:#a6343a}.cq-wait-ok{color:#2d7350}.cq-number{font-size:12px}.cq-number small{display:block}
.cq-kind{display:inline-block;white-space:nowrap;border-radius:6px;background:#edf1f5;color:#3d4d61;padding:3px 7px;font-size:10px;font-weight:600;letter-spacing:.02em}
.cq-k-contract{background:#fbe9e9;color:#8f2d2d}.cq-k-submittals{background:#efe8fa;color:#5b3d91}.cq-k-leadtime,.cq-k-measure{background:#eaf3fb;color:#265f8c}.cq-k-schedule{background:#e8f5ee;color:#2d6b47}
.cq-k-status{background:#fff3dc;color:#8a5a12}.cq-k-paperwork{background:#f3efe6;color:#6b5528}.cq-k-punch{background:#fdeee4;color:#8f4b1c}.cq-k-scope{background:#f1f1f1;color:#4a4a4a}
.cq-props{border:1px solid #f0d9a8;background:#fffaf0;border-radius:8px;padding:12px 14px;margin:12px 0}.cq-props h3{margin-top:0}
.cq-prop{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;border-top:1px solid #f0e2c4;padding:10px 0}.cq-prop:first-of-type{border-top:0}.cq-prop-main{flex:1 1 360px;min-width:0}.cq-prop small{display:block}
.cq-quote{margin:6px 0;padding:6px 10px;border-left:3px solid #c9d6e2;background:#f8fafb;color:#3d4d61;font-size:12px;line-height:1.5;overflow-wrap:anywhere;white-space:pre-wrap}
.cq-edit{flex:1 1 100%;border:1px solid var(--line);border-radius:8px;padding:12px;margin-top:10px;background:white}.cq-edit .form-actions{position:static;padding:8px 0 0;margin-top:8px}
.cq-closed,.cq-msgs,.cq-src,.cq-hist{margin-top:14px}.cq-closed summary,.cq-msgs summary,.cq-src summary,.cq-hist summary{cursor:pointer;font-weight:600}
.cq-msg-list{list-style:none;padding:0;margin:8px 0}.cq-msg{border-top:1px solid var(--line);padding:10px 0}.cq-msg-head{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}.cq-msg-head time{color:var(--muted);font-size:11px}
.cq-msg-subject{font-weight:600;margin:4px 0}.cq-msg summary{cursor:pointer;color:#526174;overflow-wrap:anywhere}.cq-body{white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.55 Inter,system-ui,sans-serif;background:#f8fafb;border:1px solid var(--line);border-radius:6px;padding:10px}
.cq-ready{margin:8px 0}.cq-head h3{font-size:16px;margin:10px 0 4px}.cq-facts{display:grid;grid-template-columns:110px 1fr;gap:6px 12px;margin:10px 0}.cq-facts dt{color:var(--muted)}.cq-facts dd{margin:0;overflow-wrap:anywhere}
.cq-answer,.cq-tools{border-top:1px solid var(--line);padding-top:12px;margin-top:14px}.cq-answer textarea{font:12px/1.6 Inter,system-ui,sans-serif;min-height:180px}.cq-from{font-size:11px}
a.cq-mailto{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:8px;padding:9px 13px;font-weight:600;text-decoration:none;color:var(--ink);background:white}a.cq-mailto{border-color:transparent}a.cq-mailto:hover{background:#eff5f8}
.cq-days{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0}.cq-day{border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:12px}.cq-day.open{border-color:#b9e0c9;background:#f3faf6}.cq-day small{display:block}
.cq-lands{align-self:end;margin:0 0 10px}.cq-steps{margin-top:14px;border-top:1px solid var(--line);padding-top:12px}.cq-owners{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;margin:0 0 10px}
.cq-steps-list{padding-left:20px;line-height:1.7;color:#3d4d61}.cq-steps-list code{background:#f1f4f7;padding:1px 5px;border-radius:4px}
.cq-k-warranty{background:#e6f2f1;color:#1d5c58}.cq-wline{margin:4px 0;font-size:12px}.cq-cov{font-size:12px;margin:4px 0}.cq-cov-within{color:#2d7350}.cq-cov-past{color:#a6343a}.cq-cov-unknown{color:var(--muted)}
.cq-tools h4{margin:14px 0 4px;font-size:13px}.cq-makers,.cq-chain{margin:6px 0}.cq-makers li,.cq-chain li{padding:3px 0;overflow-wrap:anywhere}
.cq-access-notes{white-space:pre-wrap;overflow-wrap:anywhere;background:#fff8e6;border:1px solid #f0d9a8;border-radius:6px;padding:8px 10px;margin:6px 0;font-size:12px}
@media(max-width:720px){.cq-facts{grid-template-columns:1fr}.cq-facts dt{margin-top:6px}.cq-prop .actions{width:100%}.cq-tab td[data-col=asked],.cq-tab th:nth-child(3){display:none}}
/* The job form, wide on a computer (project.js, INTAKE-01): Customer and site, The work, People, Money and Dates, two columns of groups; the
   customer's card, the site's facts, the bid's line; one column below 960 px. */
#drawer:has(.jb-wide){width:min(1100px,100vw)}
.jb-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-areas:"site work" "people work" "dates work" "money work";gap:14px 18px;align-items:start}
.jb-site{grid-area:site}.jb-work{grid-area:work}.jb-people{grid-area:people}.jb-money{grid-area:money}.jb-dates{grid-area:dates}
.jb-sec{border:1px solid var(--line);border-radius:10px;padding:8px 14px 14px;margin:0;min-width:0}.jb-sec legend{font-weight:650;font-size:13px;color:var(--ink);padding:0 6px}.jb-sec .form-grid{gap:12px 14px}
.jb-card{background:#f6f9fb;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:12px;color:var(--ink);line-height:1.45}.jb-card p{margin:1px 0}.jb-card-head strong{font-size:13px}.jb-card small{color:var(--muted)}
.jb-jobs summary{cursor:pointer;color:#2d5f86;font-weight:600;margin-top:3px}.jb-jobs ul{margin:4px 0;padding-left:18px}.jb-jobs li small{color:var(--muted)}.jb-new{margin:0;font-size:12px;color:#2d5f86}
.jb-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 14px;margin:0;font-size:12px}.jb-facts div{min-width:0}.jb-facts dt{color:#566679;font-size:11px}.jb-facts dd{margin:0;color:var(--ink)}.jb-facts small{color:var(--muted)}
.jb-number strong{font-size:16px;font-family:ui-monospace,Menlo,Consolas,monospace;color:var(--ink)}.jb-bid:empty,.jb-cust:empty{display:none}.jb-bid-line{margin:0;padding:6px 10px;border-radius:8px;background:#eef6fb;color:#12506e;font-size:12px}
.job-folder [data-jb-stage]{color:var(--ink);font-size:12px}.jb-site-wait{margin:0;font-size:12px}.jb-wide .job-at{flex-direction:row}
@media(max-width:960px){.jb-cols{grid-template-columns:minmax(0,1fr);grid-template-areas:"site" "work" "people" "money" "dates"}}
@media(max-width:720px){.jb-sec{padding:6px 10px 12px}.jb-facts{grid-template-columns:minmax(0,1fr)}}
/* Customer first (customers.js, INTAKE-01): the search box and its results, Linked with Unlink, the near name offered, more contact people. */
.cust-pick{position:relative;display:flex;flex-direction:column;gap:6px;min-width:0}.cust-pick input{width:100%}
.cust-hits{position:absolute;left:0;right:0;top:calc(100% - 2px);z-index:5;background:white;border:1px solid var(--line);border-radius:8px;box-shadow:0 10px 30px #162b4226;padding:4px}
.cust-pick:has(.cust-state:not(:empty)) .cust-hits{top:44px}
.cust-hit{display:block;width:100%;text-align:left;border:0;border-radius:6px;background:none;padding:6px 8px;min-height:0}.cust-hit strong{display:block;color:var(--ink)}.cust-hit small{display:block;color:var(--muted);font-size:11px}
.cust-hit:hover,.cust-hit.on{background:#eaf6fc}
.cust-linked{margin:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 6px;font-size:12px;color:#1e6b44;background:#eaf6ef;border:1px solid #cbe8d6;border-radius:8px;padding:5px 9px}.cust-linked span{color:#2d7350}
.cust-linked button.link{margin-left:auto!important;font-size:12px}.cust-near{margin:0;font-size:12px}.cust-near p{margin:0 0 6px}.cust-near .actions{flex-wrap:wrap;gap:6px}.cust-near button{min-height:0;padding:4px 10px;font-size:12px}
.cust-new-name{margin:0;font-size:12px;color:#2d5f86}
.cust-more{display:flex;flex-direction:column;gap:6px}.cust-more-rows{display:flex;flex-direction:column;gap:6px}.cust-more-rows:empty{display:none}
.cust-more-row{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr) auto;gap:6px;align-items:center;padding:6px;border:1px solid var(--line);border-radius:8px}.cust-more-row input,.cust-more-row select{min-width:0}
.cust-more-row [name=moreName]{grid-area:1/1}.cust-more-row [name=moreRole]{grid-area:1/2}.cust-more-row button{grid-area:1/3}.cust-more-row [name=morePhone]{grid-area:2/1}.cust-more-row [name=moreEmail]{grid-area:2/2/3/4}.cust-more>button{align-self:flex-start;min-height:0;padding:5px 10px;border:1px solid var(--line);border-radius:14px;font-size:12px}

/* New prospective measure booked with the day beside it (prospect.js, INTAKE-01): the form's parts on the left, the day's agenda on the
   right and in view while the form scrolls; at phone width the day comes right after who measures and when. */
#drawer:has(.pr-book){width:min(1100px,100vw)}
.pr-book{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,400px);grid-template-areas:"a day" "when day" "b day";gap:14px 18px;align-items:start}
.pr-a{grid-area:a;display:flex;flex-direction:column;gap:14px;min-width:0}.pr-when{grid-area:when}.pr-b{grid-area:b}.pr-day{grid-area:day;position:sticky;top:0;min-width:0}
@media(max-width:960px){.pr-book{grid-template-columns:minmax(0,1fr);grid-template-areas:"a" "when" "day" "b"}.pr-day{position:static}}
/* A work order's Schedule with the day beside it (opswork.js, INTAKE-01), and the customer's confirmation with what happened to each send. */
#drawer:has(.ops-sf-book){width:min(1100px,100vw)}
.ops-sf-book{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,380px);gap:14px 18px;align-items:start}.ops-sf-main{min-width:0}.ops-sf-day{min-width:0;position:sticky;top:0}
@media(max-width:960px){.ops-sf-book{grid-template-columns:minmax(0,1fr)}.ops-sf-day{position:static}}
.woc textarea{font-family:inherit;line-height:1.45}.woc-sends h3{margin:6px 0 4px;font-size:13px}.woc-sends li{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;padding:4px 0}.woc-sends small{color:var(--muted)}
/* How they found us and What they're after (customers.js, INTAKE-01) */
.intake-after{border:0;padding:0;margin:0}.intake-after legend{padding:0;margin-bottom:4px}.intake-ticks{display:flex;flex-wrap:wrap;gap:4px 16px}.intake-ticks .check{font-weight:400;min-width:0}
/* The pipeline board (pipeline.js, INTAKE-01): five columns side by side on a computer, wrapped on a tablet, stacked on a phone */
.pipeline{min-width:0}.pipe-bar{align-items:center;gap:10px;flex-wrap:wrap}.toolbar.pipe-bar input[type=search]{flex:0 1 460px;max-width:100%;min-width:0}.pipe-note-line{margin:0 0 10px}
.pipe-board{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;align-items:start}.pipe-list{display:grid;gap:12px}
.pipe-col,.pipe-group{min-width:0;background:#f5f7fa;border:1px solid var(--line);border-radius:10px;padding:8px}
.pipe-col h3,.pipe-group h3{display:flex;align-items:center;justify-content:space-between;gap:6px;margin:2px 2px 8px;font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.pipe-cards,.pipe-rows{display:grid;gap:8px}.pipe-list .pipe-rows{grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr))}
.pipe-card{display:flex;flex-direction:column;align-items:stretch;gap:1px;width:100%;min-width:0;text-align:left;background:white;border:1px solid var(--line);border-left:4px solid var(--pipe,#8a97a6);border-radius:8px;padding:8px 10px;font-weight:400;color:var(--ink)}
.pipe-card>*{display:block;min-width:0;overflow-wrap:anywhere}.pipe-card small{color:var(--muted);font-size:12px}.pipe-card .pipe-cust{font-size:13px}.pipe-card .pipe-when{color:var(--ink);font-weight:600}.pipe-card .pipe-note{color:#8a5a00}
.pipeline [data-col=new]{--pipe:#8a97a6}.pipeline [data-col=booked]{--pipe:#2f7fd1}.pipeline [data-col=measured]{--pipe:#7a5cc7}.pipeline [data-col=sent]{--pipe:#d18a1f}.pipeline [data-col=won]{--pipe:#2e9e5b}
@media(max-width:1180px){.pipe-board{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:720px){.pipe-board{grid-template-columns:minmax(0,1fr)}.pipe-views{margin-left:0}}
/* What's new (whatsnew.js, INTAKE-01): the newest note once, at the top of the page */
.wn-note{display:flex;gap:12px;align-items:flex-start;justify-content:space-between;background:#eef6fb;border:1px solid #bfe0f0;border-left:4px solid var(--accent);border-radius:10px;padding:10px 14px;margin:0 0 14px}
.wn-note .wn-text{min-width:0}.wn-note ul,.wn-all ul{margin:6px 0 0;padding-left:18px}.wn-note li,.wn-all li{margin:2px 0}.wn-acts{display:flex;gap:6px;flex:none}.wn-all article{margin:0 0 16px}.wn-all h3 small{color:var(--muted);font-weight:400}
@media(max-width:720px){.wn-note{flex-direction:column}.wn-acts{align-self:flex-end}}
/* Time off (timeoff.js, TIMEOFF-01): the page's views, who is off as a month (a list of the days with someone off on a phone), a request's
   clash check, Off beside a name in the people pickers and forms, and Off in the day agenda's panel. */
.to-tools{margin-top:0}.to-tools .chips{gap:6px}.to-status{margin:0 0 12px}.to-month{margin:0 0 12px}.to-month strong{min-width:9em;text-align:center}
.to-cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;margin-bottom:12px}.to-dow{font-size:11px;color:var(--muted);text-align:center;padding:2px 0}
.to-day{min-height:92px;min-width:0;border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:4px 5px;display:flex;flex-direction:column;gap:3px}
.to-day.weekend{background:#f8fafb}.to-day.today{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.to-day.blank{border:0;background:none}
.to-day b{font-size:12px}.to-dow-day{display:none}
.to-chip{display:block;width:100%;min-height:0;margin:0;padding:2px 5px;border:0;border-radius:5px;background:#e8f1fa;color:var(--ink);font-size:11px;font-weight:600;line-height:1.35;text-align:left;overflow-wrap:anywhere}
.to-chip small{font-weight:400}.to-chip.waiting{background:white;box-shadow:inset 0 0 0 1px #98a2ad;border:1px dashed #98a2ad}
.to-clashes{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;gap:4px}.to-clashes li{border-left:4px solid #d93a3a;background:#fdf3f3;border-radius:6px;padding:6px 10px}
.to-clashes li.gone{border-left-color:#1e8a55;background:#eef8f2}.to-clashes small{display:block;color:var(--muted)}
.to-said{display:block}.to-ok{color:#2d7350;font-weight:600}.to-warn{color:#a53032;font-weight:600}.to-off-tag{display:block;color:#a55a14;font-weight:600}.sg-pop .check:has(>.to-off-tag){flex-wrap:wrap;row-gap:0}.sg-pop .to-off-tag{flex-basis:100%;padding-left:60px}.to-decline{margin-top:10px}.to-acts{margin-top:12px}
.to-length{border:0;padding:0;margin:4px 0 12px;display:flex;gap:16px;flex-wrap:wrap}.to-length input[type=radio]{width:18px;height:18px;min-height:18px;margin:0;padding:0;accent-color:var(--accent)}.to-length legend{font-size:12px;color:#566679;padding:0;margin-bottom:4px}
.to-form>.field,.to-form>.form-grid{margin-bottom:12px}.to-mine small{display:block}.to-year td.mono{white-space:nowrap}
.ag-free li.off{background:#fff3dc}.ag-free li.off small{color:#946422;font-weight:600}.ag-off{margin:0;padding:4px 8px;border-radius:6px;background:#fff3dc;font-size:12px}
@media(max-width:720px){.to-cal{grid-template-columns:1fr}.to-dow,.to-day.blank,.to-day.empty{display:none}.to-day{min-height:0;flex-direction:row;flex-wrap:wrap;align-items:center}
 .to-day>b{display:none}.to-dow-day{display:block;width:100%;font-weight:600;color:var(--ink)}.to-chip{width:auto}
 .to-list thead{display:none}.to-list,.to-list tbody,.to-list tr,.to-list td{display:block;width:auto;max-width:none}.to-list tr{padding:10px 12px;border-bottom:1px solid var(--line)}.to-list td{border:0;padding:2px 0}.to-list td[data-col=do]{padding-top:6px}}
/* The Day planner (dayplan.js): the day's stops beside the routes and the map's place, the week's grid (a list of days on a phone),
   Start route to Google Maps, Today's work's own route and My account's calendar link. Types are coloured as the agenda's and always
   named in words, so no colour stands alone; the week's blocks, hours and columns are placed by dpPlace. */
.dp{min-width:0}.dp .type-measure{--type:#1f6fb2}.dp .type-install{--type:#1e8a55}.dp .type-service{--type:#c2760d}.dp .type-warranty{--type:#7a4fbf}.dp .type-punch{--type:#b33a80}
.dp .type-delivery{--type:#8a5a2b}.dp .type-meeting{--type:#4f6d8a}.dp .type-other{--type:#8a97a6}
.dp-tools{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;margin:0 0 14px}.dp-tools .actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-left:0}
.dp-tools .field.inline{margin:0;flex-direction:row;align-items:center;gap:8px}.dp-tools .field.inline>span{white-space:nowrap}.dp-step{min-height:0;padding:7px 12px}
.dp-mode.tabs{border:1px solid var(--line);border-radius:8px;margin:0;overflow:hidden;flex-wrap:nowrap}.dp-mode.tabs button{padding:7px 14px;border-bottom:0}.dp-mode.tabs button.active{background:#eaf5fb;color:#11729b}
.dp-show select{max-width:280px}.dp-at{font-size:12px;white-space:nowrap}
.dp-kept{border:1px solid #e8c77a;background:#fff8e6;border-radius:8px;padding:9px 12px;margin:0 0 12px;font-size:12.5px;line-height:1.5;color:#6b4d0f}
.dp-daywrap{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(250px,1fr);gap:16px;align-items:start}.dp-list{display:flex;flex-direction:column;gap:10px;min-width:0}
.dp-date-words{font-size:16px;margin:0}.dp-date-words small{font-size:11px;font-weight:650;color:#11729b;background:#e3f2f9;border-radius:10px;padding:2px 8px;margin-left:6px;vertical-align:middle}
.dp-none{margin:4px 0}.dp-off{margin:0;padding:6px 10px;border-radius:6px;background:#f1f3f6;font-size:12.5px}
.dp-stop{display:grid;grid-template-columns:118px minmax(0,1fr);gap:12px;background:white;border:1px solid var(--line);border-left:4px solid var(--type,#8a97a6);border-radius:10px;padding:12px 14px}
.dp-stop.clash{border-color:#e3a6a6;border-left-color:#d93a3a;background:#fffafa}.dp-stop.done{opacity:.72}.dp-stop.busy{background:repeating-linear-gradient(135deg,#f6f8fa 0 6px,#eef1f5 6px 12px)}
.dp-when{display:flex;flex-direction:column;align-items:flex-start;gap:2px}.dp-when strong{font-size:14px;font-weight:650;line-height:1.25}.dp-when small{color:var(--muted);font-size:11.5px}
.dp-n{display:inline-grid;place-items:center;flex:none;width:24px;height:24px;border-radius:50%;background:#1e5b3a;color:white;font-weight:700;font-size:12px;margin-bottom:3px}
.dp-main{min-width:0;display:flex;flex-direction:column;gap:4px}.dp-main p{margin:0;font-size:12.5px;line-height:1.45;overflow-wrap:anywhere}
.dp-title{display:flex;flex-wrap:wrap;align-items:center;gap:5px 7px}.dp .ag-open{color:var(--ink);text-align:left}.dp-stop button.ag-open strong{font-size:14px;font-weight:650}.dp-stop button.ag-open:hover strong{color:#117da8;text-decoration:underline}
.dp-chip{display:inline-flex;align-items:center;gap:4px;border-radius:5px;padding:2px 7px;font-size:11px;font-weight:650;line-height:1.4;white-space:nowrap}.dp-chip small{font-weight:500;opacity:.85}
.dp-type{background:var(--type,#8a97a6);color:white}.dp-state{background:#eef2f6;color:#3d4b5c;border:1px solid #d5dde6}.dp-state.tone-ready{background:#e8f5ee;color:#1f6b43;border-color:#b9dfc9}
.dp-state.tone-done{background:#f1f3f6;color:#4b5a6b}.dp-state.tone-progress{background:#e3f0fb;color:#1f5f99;border-color:#bcd7ef}.dp-state.tone-warn{background:#fff4e0;color:#8f560a;border-color:#f0d29c}
.dp-state.tone-bad{background:#fcebea;color:#a53032;border-color:#f0c2c2}.dp-state.tone-muted{background:#f1f3f6;color:#647386}.dp-mark{background:#fcf0dc;color:#8a5a2b}
.dp-cust{color:#3d4b5c}.dp-where{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px;color:#526174}.dp-nav{font-weight:650;white-space:nowrap}.dp-who>span{color:var(--muted)}
.dp-tags{display:flex;flex-wrap:wrap;gap:4px}.dp-tag{background:#eaf6ef;color:#2d6a48;border-radius:4px;padding:1px 7px;font-size:11px}
.dp-clash{margin:2px 0 0;padding:6px 10px 6px 24px;border-radius:6px;background:#fcebea;color:#8f2a2c;font-size:12px;line-height:1.45}
.dp-side{display:flex;flex-direction:column;gap:12px;min-width:0}
.dp-map{border:1px dashed #b9c6d4;border-radius:10px;background:#f8fafc;padding:16px 18px;min-height:220px;display:flex;flex-direction:column;gap:6px;color:#526174;font-size:12.5px;line-height:1.5}.dp-map p{margin:0}
.dp-routes,.dp-route{background:white;border:1px solid var(--line);border-radius:10px;padding:12px 14px}.dp-routes h3{margin:0 0 8px;font-size:14px}
.dp-routes ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.dp-routes li{display:flex;justify-content:space-between;align-items:center;gap:10px}
.dp-routes li>span{display:flex;flex-direction:column;min-width:0}.dp-routes small{color:var(--muted)}a.dp-go-mini,button.dp-go-mini{min-height:30px;padding:5px 10px;font-size:12px;white-space:nowrap}
.dp-route{display:flex;flex-direction:column;gap:8px}.dp-route-head{display:flex;flex-direction:column;gap:1px}.dp-route-head strong{font-size:14px}.dp-route-head small{color:var(--muted)}
a.dp-go{justify-content:center;min-height:44px;font-size:14px}.dp-legs{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.dp-legs a{width:100%}
.dp-route-stops{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}.dp-route-stops li{display:flex;gap:8px;align-items:flex-start}
.dp-route-stops li>span:last-child{display:flex;flex-direction:column;font-size:12px;min-width:0;overflow-wrap:anywhere}.dp-route-stops small{color:var(--muted)}
.dp-left{border-top:1px solid var(--line);padding-top:8px;font-size:12px}.dp-left ul{margin:4px 0 0;padding-left:18px;color:#8f2a2c;line-height:1.5}.dp-left small{color:#8f2a2c}
.dp-note{font-size:12px;color:#526174;margin:0;line-height:1.5}.dp-from{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:12px;color:#566679}.dp-from select{width:auto;flex:0 1 auto;min-width:0;max-width:100%}
.dp-week-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin-bottom:10px}
.dp-legend{list-style:none;display:flex;flex-wrap:wrap;gap:6px 14px;margin:0;padding:0;font-size:12px}.dp-legend li{display:flex;align-items:center;gap:5px}
.dp-swatch{width:12px;height:12px;border-radius:3px;background:var(--type,#8a97a6)}
.dp-wgrid-wrap{overflow:hidden;border:1px solid var(--line);border-radius:10px;background:white}.dp-wgrid{display:grid;min-width:100%}
.dp-wcorner{border-bottom:1px solid var(--line);background:#fbfcfd}
.dp-whead{display:flex;justify-content:space-between;align-items:center;gap:6px;padding:8px;border-left:1px solid var(--line);border-bottom:1px solid var(--line);background:#fbfcfd;font-size:12.5px;min-width:0}
.dp-whead.today{background:#1e5b3a}.dp-whead.today button.link{color:white}.dp-whead.today .dp-mini{background:white;color:#1e5b3a;border-color:white}.dp-whead.picked{box-shadow:inset 0 -3px 0 var(--accent)}.dp-mini{min-height:0;padding:3px 8px;font-size:11px}
.dp-wallday{display:flex;flex-direction:column;gap:3px;padding:4px;min-height:28px;border-left:1px solid var(--line);border-bottom:1px solid var(--line);min-width:0}
.dp-wchip{border-left:3px solid var(--type,#8a97a6);background:#f3f6f9;background:color-mix(in srgb,var(--type,#8a97a6) 13%,white);border-radius:4px;padding:2px 6px;font-size:11px;line-height:1.35;overflow:hidden}
.dp-wchip strong{font-weight:650}.dp-wchip.clash{box-shadow:inset 0 0 0 1px #d93a3a}.dp-wchip.off{--type:#647386}.dp-wchip button.ag-open{font-size:11px;font-weight:500}
.dp-whour{border-top:1px solid var(--line);font-size:10.5px;color:var(--muted);padding:2px 4px 0;white-space:nowrap}.dp-wline{border-top:1px solid #edf0f4;border-left:1px solid var(--line)}
.dp-block{z-index:1;margin:1px 2px;min-width:0;border-radius:6px;border:1px solid #d9e1ea;border-left:4px solid var(--type,#8a97a6);background:#f3f6f9;background:color-mix(in srgb,var(--type,#8a97a6) 14%,white);padding:3px 6px;overflow:hidden;font-size:11px;line-height:1.3}
.dp-block strong,.dp-block span,.dp-block small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dp-block strong{font-size:11.5px;font-weight:650}.dp-block small{font-size:10.5px}.dp-block small{color:#526174}.dp-block button.ag-open{font-size:11px;font-weight:500;width:100%}
.dp-block.clash{border-color:#e3a6a6;box-shadow:inset 0 0 0 1px #d93a3a}.dp-block.done{opacity:.6}.dp-block.busy{background:repeating-linear-gradient(135deg,#f3f5f8 0 6px,#e9edf2 6px 12px)}
.dp-block.dp-more{--type:#647386;background:#f1f3f6;border-style:dashed}
.dp-wlist{display:none}.dp-wday{display:flex;flex-direction:column;gap:8px}.dp-wday h3{margin:0;font-size:14px}.dp-wday h3 small{font-size:11px;color:#11729b}
.dp-today .dp-route{margin-bottom:12px;border-left:4px solid #1e5b3a}
@media(max-width:1100px){.dp-daywrap{grid-template-columns:minmax(0,1fr)}.dp-map{min-height:0}}
@media(max-width:720px){.dp-tools{align-items:stretch}.dp-tools .actions{width:100%}.dp-date{flex:1}.dp-date input{flex:1;min-width:0}.dp-show{flex:1;min-width:0}.dp-show select{flex:1;min-width:0;max-width:none}
 .dp-wgrid-wrap{display:none}.dp-wlist{display:flex;flex-direction:column;gap:16px}.dp-stop{grid-template-columns:minmax(0,1fr);gap:6px;padding:11px 12px}
 .dp-when{flex-direction:row;flex-wrap:wrap;align-items:center;gap:4px 8px}.dp-n{margin:0}.dp-routes li{flex-wrap:wrap}}
/* My account → Put my schedule on my phone's calendar (dayplan.js calFeedPanel): the link once, how to add it, and when it was read. */
.cal-feed p{line-height:1.55}.cal-link{display:flex;flex-direction:column;gap:8px}.cal-link input{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.cal-link .actions{flex-wrap:wrap;gap:8px}
.cal-once{border-left:3px solid #e0a43a;background:#fff8e6;padding:8px 12px;border-radius:6px;font-size:12.5px;margin:0}
.cal-steps summary{cursor:pointer;color:var(--accent);font-weight:600;margin:12px 0 4px}.cal-steps h3{font-size:13px;margin:12px 0 4px}.cal-steps ol{margin:0;padding-left:20px;line-height:1.6;font-size:12.5px}
/* STEPS-01: each stage on the stage bar opens its steps, What's left sits beside the bar, and the steps' list in the drawer (steps.js) */
.jd-stages{display:flex;gap:10px;align-items:stretch;margin:0 0 12px}.jd-stages .stage-pipe{flex:1;min-width:0;margin:0}
.whats-left{display:flex}.whats-left-btn{display:inline-flex;align-items:center;gap:8px;white-space:nowrap;border-radius:var(--radius);font-weight:600;padding:8px 14px}
.whats-left-n{display:inline-block;min-width:22px;padding:2px 7px;border-radius:12px;background:#fdecec;color:#a53032;font-size:12px;text-align:center}.whats-left-n.none{background:#e8f5ee;color:#2d7350}
.sp-btn{display:flex;flex-direction:column;align-items:center;gap:5px;width:100%;padding:0;border:0;background:none;color:inherit;font:inherit;cursor:pointer;min-height:0;border-radius:8px;position:relative}
.sp-btn:hover .sp-name,.sp-btn:focus-visible .sp-name{text-decoration:underline}.sp-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
@media(max-width:720px){.jd-stages{flex-direction:column;gap:8px}.whats-left-btn{width:100%;justify-content:center}}
#drawer:has(.steps-panel){width:min(760px,100vw)}
.steps-stages{display:flex;flex-wrap:wrap;gap:6px;padding:2px 0 8px;margin:0 0 4px}.steps-stage{flex:0 0 auto}
.steps-stage .ss-n{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;border-radius:50%;border:1px solid #c9d2dc;font-size:10px}
.steps-stage.past .ss-n{border-color:#2d7350;color:#2d7350;background:#e8f5ee}.steps-stage.now .ss-n{border-color:var(--accent);background:var(--accent);color:white}
.steps-stage .ss-miss{background:#fdecec;color:#a53032;border-radius:10px;padding:0 6px;font-size:10px;font-weight:650}
.steps-heading{margin:10px 0 2px;font-size:18px}.steps-counts{margin:0 0 2px}.steps-lead{margin:0 0 10px}
.steps-next,.steps-todos{display:flex;gap:6px 12px;align-items:center;flex-wrap:wrap;margin:8px 0 10px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);background:#f8fafc}
.steps-next small{color:var(--muted)}.steps-todos span{flex:1 1 220px}
.steps-filters{margin:10px 0 2px}.steps-group{margin:16px 0 8px}
.steps-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.stp{display:grid;grid-template-columns:104px minmax(0,1fr);gap:4px 12px;padding:10px 12px;border:1px solid var(--line);border-left-width:4px;border-radius:var(--radius);background:white}
.stp.done{border-left-color:#6fbf8e}.stp.missing{border-left-color:#d9534f}.stp.notneeded{border-left-color:#c9d2dc}
.stp-state{font-weight:650;font-size:12px;white-space:nowrap}.stp.done .stp-state{color:#2d7350}.stp.missing .stp-state{color:#a53032}.stp.notneeded .stp-state{color:var(--muted)}
.stp-body{min-width:0}.stp-body p{margin:3px 0 4px;overflow-wrap:anywhere}.stp-meta,.stp-who{display:block;color:var(--muted);overflow-wrap:anywhere}.stp-link{margin-top:6px;padding-left:0;text-align:left}
@media(max-width:520px){.stp{grid-template-columns:minmax(0,1fr)}}
[hidden]{display:none!important}  /* what is hidden stays hidden even where its class sets a display (.form-grid's grid): Ask for time off's From and To showed on whole days */
@media(max-width:420px){.topbar .crumb{display:none}}  /* on a phone the page's own title says where you are; beside the running clock the crumb was down to "W" */
/* STAGES-02: an earlier stage some of the job's areas are still in is partly done (◐ with its count, steps.js stepsBar);
   the areas at the head of a stage's list; each area's own small stage bar on the Mobilizations tab (mobilizations.js) */
.stage-pipe li.part{color:#946422;font-weight:600}.stage-pipe li.part .sp-dot{border-color:#d29b3d;background:#fff3dc;color:#946422}.stage-pipe li.part:not(:first-child)::before{background:#8cc9e4}
.sp-count{display:block;font-size:10px;line-height:1.3;font-weight:600;color:inherit;max-width:100%;overflow-wrap:anywhere}.stage-pipe li.now .sp-count{color:var(--muted);font-weight:500}.stage-pipe li.short{color:#9a3412;font-weight:600}.stage-pipe li.short .sp-dot{border-color:#ea8a2e;background:#fff1e3;color:#b4520f;font-weight:800}.stage-pipe li.short:not(:first-child)::before{background:#8cc9e4}.stage-pipe li.done.now .sp-dot{border-color:#2d7350;background:#2d7350;color:white}
.steps-stage.part .ss-n{border-color:#d29b3d;background:#fff3dc;color:#946422}
.steps-areas{margin:6px 0 10px}.steps-areas .steps-group{margin-top:6px}.stp.area{border-left-color:#d29b3d}.stp.area.before{border-left-color:#c9d2dc}.stp.area .stp-state{color:#946422;white-space:normal}.stp.area.before .stp-state{color:var(--muted)}
.area-pipe{list-style:none;display:flex;flex-wrap:wrap;gap:4px;margin:0 0 4px;padding:0}
.ap-chip{display:inline-flex;align-items:center;gap:4px;min-height:0;padding:3px 8px;border-radius:12px;font-size:11px;font-weight:600;border:1px solid var(--line);background:#f8fafb;color:var(--muted);white-space:nowrap}.ap-chip small{font-size:10px;color:inherit}
.ap-chip.done{background:#e8f5ee;color:#2d7350;border-color:#cde8d8}.ap-chip.now{background:#eaf3fb;color:#316d9b;border-color:#bcd9ee}.ap-chip.part{background:#fff3dc;color:#946422;border-color:#f0d9a8}
.area-pipe.compact{gap:3px;margin:6px 0 0}.area-pipe.compact .ap-chip{padding:2px 7px}
.mob-waits{display:block;margin:2px 0;line-height:1.4;overflow-wrap:anywhere}.mob-go{font-size:12px}
/* The measure sheet (measuresheet.js, FIELDMEASURE-01): floor by floor, as Jordan runs down his workbook */
.co-0{--co:#2f6fcf}.co-1{--co:#c0392b}.co-2{--co:#1e8a55}.co-3{--co:#b7791f}.co-4{--co:#7b3fb3}.co-5{--co:#0e8c8c}.co-6{--co:#b33a80}.co-7{--co:#5d6d7e}
.ms-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}.ms-head h2{margin:0;margin-right:auto}
.ms-views{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.ms-views button{border:0;border-radius:0;padding:7px 12px}.ms-views button.active{background:#e8f5fb;color:#117da8}
.ms-tools{gap:4px}.ms-tools button{padding:7px 10px}
.ms-floors{display:flex;flex-wrap:wrap;gap:8px;padding:2px 2px 10px}
.ms-fchip{display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:130px;max-width:220px;text-align:left;padding:8px 12px;flex:0 0 auto;font-weight:500;position:relative}
.ms-fchip strong{font-size:13px}.ms-fchip small{font-size:11px;line-height:1.35}.ms-fchip.active{border-color:var(--accent);background:#eef8fc;box-shadow:inset 0 -3px 0 var(--accent)}.ms-fchip.ms-has-check strong::after{content:' •';color:#c2760d}
.ms-faces{display:inline-flex;gap:2px;vertical-align:middle}.ms-face{display:inline-grid;place-items:center;min-width:22px;height:22px;padding:0 4px;border-radius:11px;background:var(--co);color:white;font-size:10px;font-weight:700}
.ms-fchip .ms-faces{position:absolute;top:6px;right:6px}
.ms-pick{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--muted);margin-bottom:10px}
.ms-sum{color:var(--ink);font-weight:550;margin:2px 0 6px}.ms-here{display:flex;align-items:center;gap:6px;margin:0 0 6px;font-size:12px}
.ms-bar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin:0 0 10px;font-size:12px}.ms-cmp{display:flex;align-items:center;gap:8px;color:var(--muted)}.ms-cmp select{width:auto;min-height:32px;padding:4px 8px}
.ms-typ-line{color:var(--muted)}.ms-typ-line .link{color:#167fa9;min-height:0}
.ms-wrap{border:1px solid var(--line);border-radius:8px}  /* a .table-wrap: the page scrolls; a floor wider than its box scrolls sideways in it (fitTables), Unit and Line held in view */
table.ms-grid{table-layout:fixed;width:max-content;min-width:100%;font-size:13px}
table.ms-grid th{padding:7px 6px;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:90px}
table.ms-grid td{padding:0;max-width:none;height:34px;border-top:1px solid #edf0f4;border-right:1px solid #f1f3f6}
table.ms-grid input:not([type=checkbox]){border:0;border-radius:0;min-height:33px;height:33px;padding:4px 7px;background:transparent;width:100%;font-size:13px;font-variant-numeric:tabular-nums}
table.ms-grid :is(th,td)[data-col=st]{width:30px;text-align:center}table.ms-grid th[data-col=unit]{width:64px}table.ms-grid th[data-col=line]{width:54px}
table.ms-grid th:is([data-col=width],[data-col=height]){width:78px}table.ms-grid th[data-col=room]{width:70px}table.ms-grid th[data-col=notes]{width:170px}table.ms-grid th[data-col=qty]{width:46px}
table.ms-grid th[data-col=hold]{width:64px}table.ms-grid th:is([data-col=cmp],[data-col=plan]){width:104px}table.ms-grid th[data-col=pin]{width:66px}table.ms-grid th[data-col=pht]{width:96px}table.ms-grid th[data-col=chk]{width:260px}
table.ms-grid td:is([data-col=width],[data-col=height]) input{text-align:right}table.ms-grid td[data-col=hold]{text-align:center}
table.ms-grid :is(th,td).ms-sticky{position:sticky;background:white;z-index:2}table.ms-grid th.ms-sticky{z-index:4;background:#f8fafb}
table.ms-grid .ms-c-st{left:0}table.ms-grid .ms-c-unit{left:30px}table.ms-grid .ms-c-line{left:94px;box-shadow:inset -1px 0 0 #d8e0e7}
table.ms-grid tr.ms-unit-top td{border-top:2px solid #cfd8e3}
table.ms-grid .ms-carry::placeholder{color:#a9b4c1}table.ms-grid .ms-typ::placeholder{color:#8a97a6;font-style:italic}
.ms-st{font-size:12px;font-weight:700;color:var(--muted)}.ms-st.ms-saving{color:#2f6fcf}.ms-st.ms-waiting{color:#b7791f}.ms-st.ms-refused{color:#b42318;background:#fdecea}
.ms-st.ms-approved,.ms-st.ms-released{color:#1e8a55}.ms-st.ms-changed{color:#7b3fb3}.ms-st.ms-heldmark{color:#7a4fbf;font-size:10px}
table.ms-grid td.ms-grey{color:#6b7a8d;background:#fafbfc;font-size:12px;padding:0 7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}table.ms-grid td.ms-grey .link{min-height:0;font-size:12px;color:#167fa9}
table.ms-grid td.ms-bad{background:#fff4e2}table.ms-grid td.ms-bad input{color:#9a4b00;font-weight:650}table.ms-grid td.ms-refused-cell{background:#fdecea}table.ms-grid td.ms-refused-cell input{color:#b42318}
table.ms-grid td[data-col=chk]{padding:2px 7px;line-height:1.3}.ms-chk{display:block;font-size:11px;color:#9a5b13}.ms-chk.ms-one{color:#6b7a8d}.ms-chk.ms-size{color:#b42318}.ms-from{display:block;font-size:11px;color:#1e8a55}
table.ms-grid tr.ms-held td:not(.ms-sticky):not([data-col=chk]){background:#f6f1fc}.ms-hold-word{font-size:11px;font-weight:650;color:#6a3fb0}
table.ms-grid tr.ms-held td:is([data-col=width],[data-col=height]) input{color:#8a7aa6;font-style:italic}
table.ms-grid tr.ms-new td{background:#fbfcfd}table.ms-grid tr.ms-new td[data-col=line] input{color:#8a97a6}table.ms-grid tr.ms-cancelled td{opacity:.55;text-decoration:line-through}
table.ms-grid td.ms-co{box-shadow:inset 0 0 0 2px var(--co)}table.ms-grid td.ms-co:not(.ms-sticky){position:relative}table.ms-grid td.ms-co::after{content:attr(data-who);position:absolute;top:-1px;right:-1px;background:var(--co);color:white;font-size:9px;font-weight:700;line-height:1;padding:2px 3px;border-radius:0 0 0 4px;pointer-events:none;z-index:3}
table.ms-book th.ms-bk-floor{text-align:center;color:var(--ink);font-size:12px;background:#eef3f8}table.ms-book th.ms-bk-floor .ms-faces{margin-left:6px}
table.ms-book :is(th,td).ms-gap{width:12px;min-width:12px;background:#e9edf2;padding:0}table.ms-book td[data-col$=":line"]{text-align:right}.ms-bk-line{font-variant-numeric:tabular-nums}
table.ms-book th[data-col$=":unit"]{width:62px}table.ms-book th[data-col$=":line"]{width:46px}table.ms-book th:is([data-col$=":width"],[data-col$=":height"]){width:72px}table.ms-book th[data-col$=":room"]{width:60px}table.ms-book th[data-col$=":notes"]{width:110px}
table.ms-book td.ms-held input{color:#8a7aa6;font-style:italic}
.ms-hint{font-size:11px;margin-top:8px}.ms-nominal{margin-top:12px;padding:10px 12px;border:1px dashed #cdd8e1;border-radius:8px;font-size:12px}.ms-nominal .link{color:#167fa9;min-height:0}
.ms-units,.ms-cols{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;margin:8px 0}.ms-blk{border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin:12px 0}.ms-blk legend{font-weight:650;padding:0 6px}
.ms-why{margin:6px 0;padding-left:18px;font-size:12px;color:var(--muted)}.ms-ap-row{display:flex;gap:8px;align-items:baseline;padding:4px 0;font-size:12px}.ms-ap-row .ms-chk{display:inline}
/* The fraction keys (sizes.js): over a phone's keyboard, at the foot of a computer's window, while a size input has the focus */
.size-keys{position:fixed;left:0;right:0;top:0;display:flex;flex-wrap:wrap;gap:4px;padding:6px 8px calc(6px + env(safe-area-inset-bottom));background:#1d2939;z-index:60}.size-keys[hidden]{display:none}
.size-keys .size-key{flex:1 1 0;min-width:32px;min-height:46px;padding:0;font-size:18px;background:#2f4157;color:white;border-color:#3d526b}.size-keys .size-key-alt{font-size:13px;background:#3d526b}.size-keys .size-key-go{font-size:14px;background:var(--accent);border-color:var(--accent)}
@media(pointer:fine){.size-keys{left:auto;right:16px;width:min(560px,calc(100vw - 32px));border-radius:10px 10px 0 0}.size-keys .size-key{min-height:36px;font-size:15px}}
.sizes-panel .actions{margin-top:8px}body:has(.size-keys:not([hidden])) #toast{bottom:84px}  /* a toast shows above the fraction keys */
.ms-pinbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 12px;background:#fff8e1;border-bottom:1px solid #f0dfa6;font-size:12px}.ms-pinbar span{margin-right:auto}.ms-pinbar .hidden{display:none}
.ms-planhere{display:flex;align-items:center;gap:6px;margin:0;padding:6px 12px;font-size:12px;background:#f4f8fb;border-bottom:1px solid var(--line)}
.viewer .pin.ms-co{box-shadow:0 0 0 3px var(--co)}.viewer .pin.ms-co::before{content:attr(data-who);position:absolute;inset:auto;left:calc(100% + 2px);top:-10px;background:var(--co);color:white;font-size:9px;line-height:1;font-weight:700;padding:2px 3px;border-radius:4px;white-space:nowrap;pointer-events:none}  /* ::after is the pin's wider touch area */
.ms-pinrows{margin-top:8px}.tw-sheet{margin-top:6px}
table.ms-grid td.ms-c-pht{display:table-cell;white-space:nowrap}.ms-c-pht .shot.ms-thumb{width:26px;height:26px;padding:0;border-radius:4px;overflow:hidden;vertical-align:middle;margin-right:2px;min-height:0}.ms-c-pht .shot.ms-thumb img{width:100%;height:100%;object-fit:cover}
.ms-pcount{display:inline-block;min-width:18px;padding:1px 5px;border-radius:9px;background:#e8eef4;color:#3d526b;font-size:11px;font-weight:700;text-align:center;vertical-align:middle}
.ms-cam{display:none;align-items:center;justify-content:center;width:30px;height:28px;margin-left:4px;border:1px solid var(--line);border-radius:6px;background:white;cursor:pointer;vertical-align:middle;font-size:15px}.ms-cam input{position:absolute;width:1px;height:1px;opacity:0}
table.ms-grid tr.ms-active .ms-cam{display:inline-flex}.ms-chk .ms-fix{min-height:0;font-size:11px;font-weight:700;color:#167fa9;padding:0 2px}.ms-chk.ms-typo{color:#9a5b13}
@media(pointer:coarse){table.ms-grid td{height:42px}table.ms-grid input:not([type=checkbox]){min-height:41px;height:41px;font-size:16px}}
@media(max-width:720px){.ms-head h2{width:100%}.ms-tools{width:100%}.ms-tools button{min-height:40px;font-size:12px}.ms-bar{gap:8px}.ms-cmp{width:100%}.ms-cmp select{flex:1}
 table.ms-grid th[data-col=chk]{width:200px}table.ms-grid th[data-col=notes]{width:130px}}
/* + New job's kinds, and the rows added at the foot of the bid sheets (NEWJOB-01) */
.nj-choice{display:flex;flex-direction:column;gap:10px}.nj-where{margin:0 0 2px;color:var(--ink)}.nj-where small{display:block}
.nj-kind{display:flex;flex-direction:column;align-items:flex-start;gap:4px;width:100%;text-align:left;padding:14px 16px;border:1px solid var(--line);border-radius:10px;background:white;min-height:64px}
.nj-kind strong{font-size:15px;color:var(--ink)}.nj-kind>span{font-weight:400;color:var(--muted);line-height:1.5}.nj-kind:hover{background:#f4f9fc;border-color:#b5dcec}
.nj-kind.last{border-color:var(--accent);box-shadow:inset 3px 0 0 var(--accent)}.nj-kind .nj-last{font-size:11px;font-weight:600;color:#117da8}
.bs-sheet tr.bs-new td{background-color:#fbfdfe}.bs-sheet tr.bs-blank td{background-color:#f6f9fb}.bs-sheet tr.bs-blank input::placeholder{color:#7d93a8}
.bs-sheet tr.bs-bad td{background-color:#fff4f2}.bs-sheet tr.bs-added td{background-color:#f4faf6}
.bs-sheet .bs-why{display:inline-grid;place-items:center;flex:none;width:18px;height:18px;margin:0 6px;border-radius:50%;background:#b42318;color:white;font-size:11px;font-weight:700;cursor:help}
.bs-sheet .bs-go{min-height:0;padding:3px 8px;font-size:12px;color:#117da8}
.bs-foot:empty{display:none}.bs-notes{list-style:none;margin:0;padding:8px 12px;border-top:1px solid var(--line);display:grid;gap:6px;font-size:12px}
.bs-notes li{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 12px;color:#526174}.bs-notes li.bad{color:#8a2c22}.bs-notes .actions{gap:4px}.bs-notes button{padding:6px 10px}
@media(max-width:720px){.nj-kind{min-height:72px}.bs-notes button{min-height:40px}}
/* Start new bid, asking little (NEWJOB-01): To start it beside what LB filled in, the rest under More details; two columns on a computer, one on a phone */
#drawer:has(.sbk-form){width:min(1100px,100vw)}
.sbk-top{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:14px 18px;align-items:start}
.sbk-known{border:1px solid var(--line);border-radius:10px;padding:10px 12px 12px;background:#fafcfd}.sbk-known h3{margin:0 0 6px;font-size:12px;font-weight:600;color:#566679}
.sbk-need .sbk-line{display:none;margin:0;color:var(--ink);line-height:1.5}.sbk-need.sbk-filled .sbk-ctl,.sbk-need.sbk-wait .sbk-ctl{display:none}.sbk-need.sbk-filled .sbk-line,.sbk-need.sbk-wait .sbk-line{display:block}
.sbk-need .sbk-line span{font-weight:600}.sbk-need .sbk-line small{margin:0 4px}.sbk-need.sbk-wait .sbk-line span{font-weight:400;color:var(--muted)}
.sbk-need.sbk-filled::before,.sbk-need.sbk-wait::before{content:attr(data-sbk-label);display:block;font-size:12px;color:#566679}
.sbk-facts{list-style:none;margin:0;padding:0}.sbk-facts li{display:grid;grid-template-columns:132px minmax(0,1fr) auto;gap:0 10px;align-items:baseline;padding:6px 0;border-bottom:1px solid var(--line)}.sbk-facts li:last-child{border-bottom:0}
.sbk-facts li>span{color:var(--muted);font-size:12px}.sbk-facts li strong{font-weight:600;overflow-wrap:anywhere}.sbk-facts li small{grid-column:2;margin:0}.sbk-facts li button{grid-row:1;grid-column:3}.sbk-facts li.muted{display:block}
.sbk-needs{font-size:12px;margin:10px 0 0}.sbk-form .link{min-height:0;padding:0 2px;color:#167fa9;font-weight:600}
.sbk-more>summary{cursor:pointer;font-weight:650;color:var(--ink);padding:6px 0}.sbk-more>summary small{font-weight:400;margin-left:6px}
.sbk-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 18px;align-items:start;margin-top:8px}.sbk-cols>.bid-after,.sbk-cols>.field,.sbk-cols>.cf-fields{grid-column:1/-1}
@media(max-width:960px){.sbk-top,.sbk-cols{grid-template-columns:minmax(0,1fr)}}
@media(max-width:720px){.sbk-facts li{grid-template-columns:minmax(0,1fr) auto}.sbk-facts li>span{grid-column:1/-1}.sbk-facts li small{grid-column:1}.sbk-facts li button{grid-row:2;grid-column:2}}
/* What the price sheet still lacks: on the start's panel, the job's Dashboard and the bid's panel (NEWJOB-01) */
.sb-still p{margin:0 0 6px;color:#526174}.sb-still .actions,.sb-still-job .actions{margin-top:8px}.sb-still-job strong{color:var(--ink)}.sb-still-bid{margin:10px 0 0}
/* Leave it finished (finish.js): Before you leave on Start job, the punch items a trip closes, verify from the rooms, a customer's report */
.fin{border:2px solid #9fcbe0;border-radius:12px;padding:12px;margin:0 0 14px;background:#f8fcfe}
.fin-all{border-color:#cbe8d6;background:#f3faf6}
.fin-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap}
.fin-head h4{margin:0;font-size:17px;color:var(--ink)}
.fin-count{font-size:13px;color:var(--muted);font-weight:600}
.fin-said{margin:8px 0;padding:8px 10px;border-radius:8px;background:#e8f5ee;color:#1f5c3d;font-weight:600;font-size:14px;line-height:1.4}
.fin-said.wait{background:#fff3dc;color:#6b4a12}
.fin-chips{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.fin-chips .chip{min-height:36px;font-size:14px;padding:6px 12px}
.fin-chips .chip.done{background:#f3faf6;border-color:#cbe8d6;color:#2d7350}
.fin-chips .chip.active{border-color:var(--accent);background:#e8f5fb;color:#0e6d93;font-weight:700}
.fin-where{display:flex;justify-content:space-between;align-items:center;gap:8px;margin:8px 0 4px}
.fin-name{margin:0;font-size:24px;line-height:1.2;color:var(--ink)}
.fin-nav{display:flex;gap:6px}.fin-nav button{min-width:48px;min-height:44px;font-size:20px;padding:0 10px}
.fin-remind{list-style:none;margin:6px 0 8px;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:4px 10px}
.fin-remind li{font-size:14px;color:#3d4b5c;line-height:1.35;padding-left:18px;position:relative}
.fin-remind li::before{content:'•';position:absolute;left:4px;color:var(--accent);font-weight:700}
.fin-shades{margin:2px 0 8px;font-size:12px}
.fin-rooms{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin:6px 0 10px}
.fin-room{border:1px solid var(--line);border-radius:10px;padding:8px;background:#fff;display:flex;flex-direction:column;gap:6px}
.fin-room.done{border-color:#cbe8d6;background:#f3faf6}
.fin-room-head strong{font-size:16px}.fin-room-head small{display:block}
.fin-cam{min-height:76px;margin:0;font-size:17px}
.fin-again{position:relative;display:block;text-align:center;border:1px solid var(--line);border-radius:8px;padding:10px;font-weight:600;color:#117da8;font-size:14px;background:#fff}
.fin-again input{position:absolute;inset:0;opacity:0;min-height:0;cursor:pointer}
.fin-thumbs{display:flex;flex-wrap:wrap;gap:6px}
.fin-shot{width:72px;height:72px}.fin-shot img{width:100%;height:100%;object-fit:cover;border-radius:6px}
.fin-punch{color:#7a4f0e;font-weight:600}
.fin-answers{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:8px 0 4px}
.fin-answers .sj-big{font-size:19px}
.fin-left{border-top:1px solid var(--line);padding-top:8px;margin-top:6px}
.fin-q{font-size:20px;font-weight:650;margin:2px 0 8px;color:var(--ink)}
.fin-pick{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:0 0 8px}
.fin-whats{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:8px 0}
.fin-what{min-height:60px;font-size:17px}
.fin-ok{margin:8px 0;color:#2d7350;font-weight:600;font-size:15px}
.fin-error{margin:4px 0 0}
.fin-items .fin-item{border-top:1px solid var(--line);padding:10px 0;display:flex;flex-direction:column;gap:6px}
.fin-items .fin-item:first-of-type{border-top:0}
.fin-item-name{margin:0;font-size:16px}.fin-item-where,.fin-item-was{margin:0;font-size:13px}.fin-item-was{color:#7a4f0e}
.fin-item.done{opacity:.95}
.fin-verify{border:1px solid var(--line);border-radius:8px;padding:8px 10px;margin:8px 0}
.fin-vplace{margin:6px 0 10px}.fin-vname{margin:0 0 4px}
.fin-vrooms{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin:4px 0 8px}
.fin-vroom{margin:0;border:1px solid var(--line);border-radius:8px;padding:6px;background:#fff}
.fin-vroom .fin-thumbs{margin-bottom:4px}.fin-vroom .fin-shot{width:100%;height:110px}
.fin-vroom.none{border:2px dashed #d97a2b;background:#fff8ea}
.fin-none{display:grid;place-items:center;height:110px;color:#9a3d0a;font-weight:700}
.fin-vroom figcaption{font-size:13px;display:flex;flex-direction:column;gap:2px}.fin-vroom figcaption small{color:var(--muted)}.fin-vroom figcaption small.fin-punch{color:#7a4f0e}
.fin-pickback{font-weight:400;font-size:12px}
.fin-vitem{margin:6px 0}.fin-vitem p{margin:0 0 4px}
.fin-backbar{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;align-items:end;border-top:1px solid var(--line);padding-top:8px;margin-top:4px}
.fin-wo{margin:6px 0}
.fin-tip{border:1px solid #9fcbe0;background:#f3fafd;border-radius:8px;padding:10px 12px;margin:10px 0}.fin-tip p{margin:0 0 6px}
.fin-drop{border:2px dashed #9fcbe0;border-radius:10px;padding:18px;text-align:center;color:#3d4b5c;background:#f8fcfe;margin:8px 0;display:flex;gap:6px;justify-content:center;align-items:center;flex-wrap:wrap}
.fin-drop.over{background:#e8f5fb;border-color:var(--accent)}
.fin-pickfiles{position:relative;color:#117da8;font-weight:650;cursor:pointer;text-decoration:underline}
.fin-pickfiles input{position:absolute;inset:0;opacity:0;min-height:0;cursor:pointer}
.fin-new{display:grid;grid-template-columns:96px minmax(0,1fr);gap:10px;align-items:start;border-top:1px solid var(--line);padding:10px 0}
.fin-new:not(:has(.fin-newshot)){grid-template-columns:minmax(0,1fr)}
.fin-newshot{width:96px;height:96px;object-fit:cover;border-radius:8px}
.fin-made{border:1px solid #cbe8d6;background:#f3faf6;border-radius:8px;padding:10px 12px;margin:8px 0}
.fin-due{max-width:220px}
@media(max-width:720px){.fin-remind{grid-template-columns:1fr}.fin-backbar{grid-template-columns:1fr}.fin-new{grid-template-columns:72px minmax(0,1fr)}.fin-newshot{width:72px;height:72px}.fin-rooms{grid-template-columns:1fr}}
/* REPORTS-02 */
/* Reports: one workspace (reportsws.js): the list of reports on the left with each person's saved views under them, the report on the right with its scope bar, tiles, List | Sheet | Chart, group rows and totals */
.rw{display:grid;grid-template-columns:212px minmax(0,1fr);gap:20px;align-items:start}
.rw-list{position:sticky;top:12px;display:flex;flex-direction:column;gap:14px}.rw-group .section-label{margin:0 0 4px}
.rw-item{display:block;width:100%;text-align:left;padding:6px 10px;border-radius:8px;font:inherit;background:none;border:0;color:var(--ink);cursor:pointer}.rw-item:hover{background:#eef3f8}.rw-item.active{background:var(--navy);color:white;font-weight:600}
.rw-saved{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:0 2px;margin:0 0 6px 12px;padding-left:8px;border-left:2px solid var(--line)}
.rw-saved .rw-view{display:flex;flex-direction:column;align-items:flex-start;text-align:left;font:inherit;font-size:12px;line-height:1.3;padding:3px 6px;border:0;background:none;border-radius:6px;color:#2a4a6b;cursor:pointer;min-height:0}.rw-saved .rw-view small{color:var(--muted);font-size:11px}.rw-saved .rw-view.active{background:#e6f1fa;font-weight:600}
.rw-saved .rw-x{min-height:0;padding:0 6px;font-size:14px;line-height:1.4;color:var(--muted)}.rw-saved .rw-x:hover{color:#b42318}
.rw-scope{align-items:flex-start;gap:10px}.rw-scope .actions{flex-wrap:wrap;align-items:flex-end}.rw-branch{display:flex;flex-direction:column;font-weight:600;padding:4px 0}.rw-branch small{font-weight:400;color:var(--muted)}
.rw-modes{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.rw-modes button{border:0;border-radius:0;background:white;padding:6px 12px;margin:0}.rw-modes button.active{background:var(--navy);color:white}
.rw-figs{grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px;margin-bottom:14px}.rw-figs .stat strong{font-size:24px}
.rw-about{margin:0 0 12px}.rw-about strong{color:var(--ink);font-weight:600}
.rw-empty{padding:28px 20px;text-align:center}.rw-empty p{max-width:600px;margin:0 auto 12px}.rw-empty .actions{justify-content:center}
.rw-grouprow td{background:#f4f7fa;border-top:2px solid var(--line)}.rw-grouprow .rw-glink{padding:0;min-height:0;font:inherit;color:var(--ink)}.rw-grouprow .count{margin-left:6px}
.rw-total td{font-weight:600;border-top:2px solid var(--ink);background:#fbfcfd}.rw-total small{font-weight:400;color:var(--muted);margin-left:6px}
.rw-chart figure{margin:0}.rw-chart .chart.bars svg{width:100%;max-width:760px;height:auto}
.rw-extra .panel-head{align-items:baseline}.rw-extra .panel-head small{flex:1 1 320px}
.rw-notes{margin:12px 0 0}.rw-notes p{margin:0 0 6px;font-size:12px}.rw-integration{display:inline-block;margin-bottom:8px}.rw-updated{font-variant-numeric:tabular-nums}
@media(max-width:960px){.rw{display:block}.rw-list{position:static;flex-direction:row;flex-wrap:wrap;gap:8px 14px;padding-bottom:8px;margin-bottom:12px}.rw-group{flex:1 1 100%;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:4px}.rw-group .section-label{margin:0 4px 0 0}.rw-item{width:auto;white-space:nowrap}
 .rw-saved{display:flex;margin:0;padding:0;border:0}.rw-saved .rw-view{white-space:nowrap}.rw-scope{flex-direction:column}.rw-scope .actions{width:100%}.rw-figs{grid-template-columns:repeat(2,minmax(0,1fr))}}
.rw-tile{text-align:left;font:inherit}.rw-tile.active{outline:2px solid var(--navy);outline-offset:-2px}
.rw-scope-line{margin:8px 0 12px}.rw-stale{font-style:italic}.rw-busy{opacity:.55;pointer-events:none}
.rw-scope-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:6px 18px;margin:8px 0 12px}.rw-scope-list div{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}.rw-scope-list dt{color:var(--muted);font-size:12px;flex:none}.rw-scope-list dd{margin:0;font-weight:600}
.rw-cols summary{cursor:pointer;color:#2a4a6b;white-space:nowrap}.rw-cols small{display:block;max-width:520px;color:var(--muted);line-height:1.4;margin-top:4px}
.rw-rlink{padding:0;min-height:0;font:inherit;text-decoration:underline dotted;text-underline-offset:3px}
/* UI-SYSTEM-01: one workplace. The sidebar's eight items and More, the hubs' strips, the compact page header, the one list
   bar, the job's compact header with its menus (+ Add, More, the clock) and Next step, the density of tables (rows of 32 px on
   a computer, 40 px on a touch screen), the lit row after a save. The colors are the app's own (above); nothing here recolors. */
.heading{margin-bottom:14px;align-items:center}.heading h1{font-size:22px;letter-spacing:-.4px;margin:0 0 2px}.heading p{margin:0;color:var(--muted);font-size:12px}.heading .actions{flex-wrap:wrap;justify-content:flex-end}
.main{padding:20px 24px}
.nav-more{margin-top:2px}.nav-more-btn{display:flex;align-items:center;gap:12px;width:100%;border:0;border-radius:8px;text-align:left;margin:3px 0;padding:11px 13px;font-weight:500;color:#526174;background:transparent}
.nav-more-btn:hover,.nav button:hover{background:#f1f5f9}.nav-more-btn.active{color:#117da8;background:#e8f5fb;font-weight:650}.nav-more-btn .nav-caret{margin-left:auto;font-size:11px;color:var(--muted)}.nav-more-btn .nav-count{margin-left:0}
.nav-more-list{border-left:2px solid var(--line);margin:2px 0 4px 20px;padding-left:4px}.nav-more-list button{padding-block:8px;font-size:12.5px}
@media(min-width:721px){.nav-more-btn{flex:1 1 0;min-height:28px;max-height:44px;margin:0;padding:0 12px}.nav-more-list{display:flex;flex-direction:column}.nav-more-list button{flex:1 1 0;min-height:24px;max-height:36px;padding-block:0}}
.hub{display:flex;gap:4px;flex-wrap:wrap;align-items:center;margin:-4px 0 14px;padding:4px;border:1px solid var(--line);border-radius:10px;background:#f8fafb;width:fit-content;max-width:100%}
.hub button{border:0;background:transparent;border-radius:7px;padding:7px 14px;min-height:34px;font-weight:500;color:#526174;white-space:nowrap}.hub button:hover{background:#eef3f7}.hub button.active{background:white;color:#117da8;font-weight:650;box-shadow:0 1px 2px #182b4230}
@media(max-width:720px){.hub{flex-wrap:nowrap;overflow-x:auto;width:auto;scrollbar-width:none}.hub button{min-height:40px}}
.tabs button{padding:9px 14px}
.list-bar{display:flex;align-items:center;justify-content:space-between;gap:8px 14px;flex-wrap:wrap;margin:0 0 12px}.lb-left,.lb-right{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}.lb-left{flex:1 1 auto}.lb-right{flex:0 1 auto;max-width:100%;margin-left:auto}
.lb-search{position:relative;display:flex;align-items:center;min-width:0}.lb-search input{width:240px;max-width:100%;min-height:36px;padding:7px 56px 7px 12px;border-radius:8px}.lb-search input::-webkit-search-cancel-button{display:none}
.lb-key{position:absolute;right:10px;top:50%;transform:translateY(-50%);font:600 10px/1 Inter,system-ui,sans-serif;color:var(--muted);border:1px solid var(--line);border-radius:4px;padding:3px 5px;background:#f8fafb;pointer-events:none}.lb-search:focus-within .lb-key,.lb-search:has(input:not(:placeholder-shown)) .lb-key{display:none}
.lb-search .lb-clear{position:absolute;right:4px;top:50%;transform:translateY(-50%);min-height:0;padding:4px 8px;font-size:12px;color:var(--muted)}
.list-bar select{min-height:36px;padding:6px 10px;max-width:180px}.list-bar .remember{display:inline-flex;align-items:center;gap:6px;font-size:12px;white-space:nowrap}.list-bar .remember input{width:auto;min-height:0;margin:0}
.list-bar .sheet-views button,.list-bar button.quiet,.list-bar button.lb-add{min-height:36px}.list-bar button.quiet{border:1px solid var(--line)}.list-bar .lb-count{font-size:12px;color:var(--muted);white-space:nowrap}.list-bar .xl-here:empty{display:none}.list-bar .xl-here{font-size:12px}
.lb-note{margin:-6px 0 12px;font-size:12px}
@media(max-width:720px){.list-bar{gap:8px}.lb-left{width:100%}.lb-search{flex:1 1 100%}.lb-search input{width:100%}.lb-right{width:100%;margin-left:0;justify-content:space-between}.list-bar select{max-width:100%;flex:1 1 40%}.list-bar button{min-height:40px}}
.empty .link{display:inline;margin-left:4px;color:var(--accent);font-weight:600;text-align:center}
th{padding:8px 12px}td{padding:7px 12px}td small{line-height:1.3}.panel{padding:16px}
@media(pointer:coarse){th{padding:10px 12px}td{padding:11px 12px}}
.job-head.compact{display:flex;align-items:flex-start;justify-content:space-between;gap:10px 16px;padding:10px 14px;margin-bottom:12px}.job-head.compact .job-head-main{min-width:0;flex:1 1 auto}
.job-line{display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;min-height:36px}.job-line .job-title{font-size:19px;margin:0;line-height:1.2}.job-line .job-no{font-size:12px;color:var(--muted)}.job-line .job-sub{display:inline-flex;align-items:center;gap:6px;margin:0}.job-line .job-crumbs{margin:0;font-size:12px}.job-line .job-crumbs::before{content:'·';color:#b3c0cc;margin-right:8px}
.job-line .job-next{font-size:12px;flex-basis:100%;min-width:0}.job-line .job-next strong{font-weight:600}
.job-head.compact .onedrive{margin:2px 0 0;font-size:12px}
.job-head.compact .job-buttons{flex:0 0 auto;max-width:none;justify-content:flex-end;align-items:center;gap:6px}.job-head.compact .job-buttons button{min-height:36px;padding:7px 12px;white-space:nowrap}
@media(max-width:900px){.job-head.compact{flex-direction:column}.job-head.compact .job-buttons{justify-content:flex-start;width:100%}}
@media(max-width:720px){.job-head.compact .job-buttons{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px}.job-head.compact .job-buttons button{min-height:40px}.job-line .job-title{font-size:17px}.job-line .job-crumbs::before{display:none}}
.menu-wrap{position:relative;display:inline-block}.menu-btn .caret{font-size:10px;margin-left:5px;opacity:.75}
.menu{position:absolute;top:calc(100% + 4px);right:0;z-index:28;min-width:200px;max-height:min(70vh,520px);overflow:auto;background:white;border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px #162b4226;padding:6px;display:flex;flex-direction:column}
.menu[hidden]{display:none}.menu .menu-item{width:100%;text-align:left;border:0;border-radius:6px;background:transparent;padding:9px 12px;min-height:36px;font-weight:500;color:var(--ink);white-space:nowrap}.menu .menu-item:hover,.menu .menu-item:focus-visible{background:#e8f5fb;color:#117da8;outline:none}.menu .menu-item.active{color:#117da8;font-weight:650}
.job-tabs .menu-wrap{align-self:center}.job-tabs .job-more-btn{border:0;background:transparent;border-radius:0;white-space:nowrap;font-weight:500;padding:9px 14px;color:var(--muted);border-bottom:2px solid transparent}.job-tabs .job-more-btn.active,.job-tabs .job-more-btn[aria-expanded=true]{color:#117da8}.job-tabs .menu{right:auto;left:0}
.clock-btn{border:1px solid var(--line);font-weight:500}.clock-btn.on{border-color:#2f9e62;color:#1e7a4b}.clock-btn.on .clock-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#2f9e62;margin-right:6px;vertical-align:middle}.clock-btn.on-break{border-color:#b7791f;color:#6d4d0a}.clock-btn.on-break .clock-dot{background:#b7791f}
@media(max-width:720px){.clock-btn .clock-words{display:none}.menu{position:fixed;left:8px;right:8px;top:auto;bottom:8px;max-height:60vh;padding:10px}.menu .menu-item{min-height:44px;font-size:15px}.job-tabs .menu{left:8px}}
.job-progress .ns-step{margin:0 0 4px;font-size:14px}.job-progress .ns-meta{margin:4px 0 8px}.job-progress .steps-next{margin-top:8px}
.spec-parts{margin-bottom:12px}
tr.lit>td{background:#fff6d6;transition:background 1.2s}tr.lit:focus{outline:2px solid var(--accent);outline-offset:-2px}
.job-top{margin:-4px 0 8px}
.msg-button{position:relative;padding:6px 10px}.msg-button .nav-count{margin-left:5px}.msg-button.active{border-color:#117da8;color:#117da8}

/* The folded Scorecard on the Dashboard: what needs attention in one line */
.scorecard.folded .card-sum{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;margin:6px 0 0;font-size:13px}.card-sum-item{display:inline-flex;align-items:center;gap:6px}.card-sum-item.red{color:#8f2d2d}.card-sum-item.amber{color:#8a5a12}
/* JT-01 */ /* JobTread's daily logs and the job numbers checked (jobtread.js); a former person's name as words on a daily log (dailylogs.js) */
.jt-stats{margin:10px 0 14px}
.jt-progress{border:1px solid var(--line);border-radius:10px;padding:10px 14px;margin:12px 0}.jt-progress.running{border-color:#9fcbe0;background:#f8fcfe}.jt-progress p{margin:0 0 8px}.jt-current{font-size:13px}
.jt-bar{height:8px;border-radius:4px;background:#e1e6ed;overflow:hidden;margin:6px 0 10px}.jt-bar span{display:block;height:100%;background:var(--accent)}
.jt-words-done{margin:8px 0 0;font-weight:600}
.jt-words,.dl-words{color:var(--muted);font-weight:600}.dl-who .dl-words{display:inline-block;padding:0}
tr.jt-waiting td,tr.jt-placeholder td{color:var(--muted)}tr.jt-placeholder td{font-style:italic}
.jt-counts{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}.jt-count{border:1px solid var(--line);border-radius:999px;padding:6px 12px;background:#fff;font-size:13px}.jt-count strong{font-size:15px;margin-right:4px}.jt-count.active{outline:2px solid var(--accent);outline-offset:1px}
.jt-pill-agree{background:#e3f3f1;color:#17655e}.jt-pill-two{background:#e3eef8;color:#1f5f99}.jt-pill-one{background:#f1f3f5;color:#3d4b5c}.jt-pill-differs{background:#fdf8ec;color:#8a5a12}.jt-pill-repeated{background:#fde8e8;color:#a52a2a}.jt-pill-placeholder{background:#f1f3f5;color:#647386}
.jt-tools{display:flex;gap:8px;align-items:center;margin:8px 0}.jt-tools input{flex:1;min-width:160px}
.jt-sources li span{display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center}
.jt-shown{margin:6px 0}
@media(max-width:720px){.jt-tools{flex-wrap:wrap}.jt-counts .jt-count{padding:5px 10px}}
/* BID-JOB-01 */
.bid-facts .jb-facts{margin:0 0 10px}.bid-facts .jb-facts dd small{display:block;color:var(--muted)}.bid-facts .section-label{margin-top:4px}
.bid-amount{font:inherit}
.bid-todos{list-style:none;margin:0 0 6px;padding:0}.bid-todos li{padding:3px 0}.bid-todos small{display:block;color:var(--muted)}
/* PROJECTS-01: Projects, its big tabs (Bidding · Active · Closed) with their counts, the chips, the short stage pipe and Bidding's tools */
.pj-tabs{display:flex;gap:6px;margin:0 0 14px;border-bottom:1px solid var(--line)}
.pj-tabs .pj-tab{display:inline-flex;align-items:center;gap:10px;border:0;border-bottom:3px solid transparent;border-radius:0;background:transparent;padding:10px 18px 9px;min-height:48px;margin-bottom:-1px;font-size:16px;font-weight:600;color:var(--muted)}
.pj-tabs .pj-tab:hover{color:var(--ink);background:#f8fafb}.pj-tabs .pj-tab.active{color:#117da8;border-bottom-color:var(--accent)}
.pj-tab-n{min-width:26px;padding:2px 8px;border-radius:999px;background:#eef3f7;color:#526174;font-size:13px;font-weight:650;text-align:center}.pj-tab.active .pj-tab-n{background:#e8f5fb;color:#117da8}
.pj-chips{margin:-4px 0 12px}.pj-chips .chip .count{color:var(--muted);font-weight:600}
.pj-pipe{display:inline-flex;align-items:center;gap:8px;white-space:nowrap}.pj-dots{display:inline-flex;gap:3px}.pj-dots i{display:block;width:8px;height:8px;border-radius:50%;background:#dfe6ed}
.pj-dots i.past{background:#8cc9e4}.pj-dots i.done{background:#2d7350}.pj-dots i.short{background:#ea8a2e}.pj-dots i.part{background:#d29b3d}.pj-dots i.here{background:var(--accent);box-shadow:0 0 0 2px #e8f5fb}.pj-dots i.here.done{background:#2d7350}
.pj-pipe.off .pj-dots i{opacity:.5}.pj-stage{font-size:12px;font-weight:600;color:var(--ink)}
.pj-tool{display:flex;align-items:center;gap:12px;margin:0 0 12px}.pj-tool h2{margin:0;font-size:16px}
.pj-why{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:3px}.pj-why small{display:inline;color:var(--muted)}
.pj-group .pj-fold{min-height:0;padding:0 6px;margin-right:6px;border:0;background:transparent}.lb-note .pj-waiting{font-weight:600}
.rw-board{padding:12px}.pj-proj{min-width:220px}.list-bar select#pj-person{max-width:230px}
.pj-grouphead{display:inline-flex;align-items:center;gap:8px}.pj-grouphead .count{min-width:22px;padding:1px 7px;border-radius:999px;background:#dfe6ed;color:#526174;font-size:12px;font-weight:650;text-align:center}
@media(max-width:720px){.pj-proj{min-width:170px}.pj-chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}.pj-chips .chip{flex:0 0 auto}.pj-tabs{gap:0}.pj-tabs .pj-tab{flex:1 1 0;justify-content:center;gap:6px;padding:8px 6px;font-size:15px}.pj-tab-n{min-width:22px;padding:1px 6px}}
/* People and access: each person's picture, green while they have the app open; its tip says when they were last active
   and last signed in (account.js peopleFace). */
.ppl-who{display:flex;gap:10px;align-items:center}.ppl-who>div{min-width:0}
.ppl-face{position:relative;cursor:default;flex:none}.ppl-face::before{content:attr(data-initials)}
.ppl-face::after{content:'';position:absolute;right:-1px;bottom:-1px;width:9px;height:9px;border-radius:50%;background:#b7c3cf;box-shadow:0 0 0 2px var(--surface)}
.ppl-face.on::after{background:#1e8a55}.ppl-face.never::after{display:none}.ppl-face:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* FLOW-FIX-01 */
.cd-batch-row{display:flex;gap:8px;align-items:center;margin:4px 0;flex-wrap:wrap}.cd-batch-row strong{flex:1 1 180px;word-break:break-all}.cd-batch-row select{flex:1 1 220px}
.wo-unit-picks{margin:0 0 6px;gap:4px 12px}
.co-lien-row{display:flex;gap:4px 14px;align-items:center;flex-wrap:wrap;margin:6px 0;padding:6px 0;border-top:1px solid var(--line)}.co-lien-row .check{flex:1 1 240px;margin:0}.co-lien-row .field{flex:1 1 220px;margin:0}.co-lien-row small{flex:1 1 160px}
.rd-warn .rd-fix-words{margin:8px 0 4px}.rd-warn .rd-fix{gap:6px;flex-wrap:wrap}
table.ms-grid td[data-col=wfh] input{text-align:right}table.ms-grid td[data-col=fabric] input{min-width:150px}table.ms-grid tr.ms-need td{background:#fff8e6}.ms-chk.ms-need{color:#9a4b00;font-weight:600}.ms-need-words{margin:0 0 8px}
.ms-ap-order{margin:10px 0;padding:8px 12px;border:1px solid var(--line);border-radius:8px}.ms-ap-order legend{font-weight:600;padding:0 4px}.ms-ap-order .field{margin:4px 0 8px}
.rel-not-ready ul{margin:6px 0 0 18px;padding:0}.rel-not-ready li{margin:2px 0}.rel-not-ready .actions{margin-top:8px}
table.ms-grid input.ms-plan-size{color:#6b7a8d;font-style:italic}table.ms-grid td.ms-st.ms-plan{color:#6b7a8d}.ms-chk.ms-plan{color:#6b7a8d}
/* Email signatures (signature.js): the ticks in one wrapping row, the looks as cards, each on white paper as a mail program
   shows it; .sig-hold is the box a copy selects, off the screen. */
.sig-ticks{display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center;margin:8px 0 12px}.sig-ticks .check{margin:0}.sig-ticks label.sig-signoff{display:flex;flex-direction:row;align-items:center;gap:6px;margin:0}.sig-signoff input{width:160px}
.sig-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:12px}
.sig-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);display:flex;flex-direction:column;min-width:0}
.sig-card header{padding:10px 12px 0;display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline}.sig-card header small{flex-basis:100%;color:var(--muted)}
.sig-paper{margin:10px 12px;padding:14px;background:#fff;border:1px solid var(--line);border-radius:6px;overflow-x:auto;flex:1}
.sig-card .actions{padding:0 12px 12px;display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center}
.sig-hold{position:fixed;left:-10000px;top:0;background:#fff}
.sig-paper table,.sig-hold table{width:auto;margin:0;border:0}.sig-paper td,.sig-hold td{padding:0;border:0;max-width:none;background:none}.sig-paper tbody tr:hover,.sig-hold tbody tr:hover{background:none}.sig-paper a,.sig-hold a{text-decoration:none}
@media(max-width:720px){.sig-grid{grid-template-columns:1fr}.sig-paper{padding:10px}}
/* Quick sign-in (account.js): the people this device knows as tiles, then a PIN pad. */
.qs-people{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:18px 0 6px}.qs-person{position:relative}
.login .qs-tile{width:100%;margin:0;display:grid;justify-items:center;gap:4px;padding:14px 8px 10px;background:var(--surface);border:1px solid var(--line);border-radius:10px;font-weight:400;color:var(--ink)}
.login .qs-tile:hover,.login .qs-tile:focus-visible{border-color:var(--accent)}.qs-tile .avatar,.qs-who .avatar{width:44px;height:44px;font-size:15px}.qs-tile strong{font-size:14px;line-height:1.25;text-align:center}.qs-tile small{color:var(--muted);font-size:11px}
.login .qs-forget{position:absolute;top:4px;right:4px;width:26px;height:26px;min-height:0;margin:0;padding:0;border:0;background:none;color:var(--muted);font-size:16px;line-height:1;border-radius:50%}.login .qs-forget:hover{background:var(--canvas);color:var(--ink)}
.qs-who{display:flex;align-items:center;gap:12px;margin:16px 0 4px}.qs-who strong{font-size:16px}
.qs-pad{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:8px 0 4px}.login .qs-pad button{margin:0;height:52px;font-size:20px;font-weight:600;border-radius:10px}
#qs-secret{font-size:22px;letter-spacing:6px;text-align:center}.qs-links{display:flex;flex-wrap:wrap;gap:8px 20px}
/* Schedule → Calendar, the month: each day's number opens its week (schedule.js sDayWeek). */
.sg-daylink{width:auto;min-height:0;margin:0;padding:0 4px;border:0;background:none;color:inherit;border-radius:6px;cursor:pointer}.sg-daylink:hover,.sg-daylink:focus-visible{background:var(--canvas);color:var(--accent)}
/* A column's name and its menu (sheets.js colHead, colMenuOpen): the name (a double tap sorts) with an arrow that keeps its
   room, its ▾, and the menu under it. The Projects lists and the sheets use them. */
.col-th{display:inline-flex;align-items:center;gap:2px;white-space:nowrap}
th .col-sort{width:auto;min-height:0;margin:0;padding:2px 4px;border:0;background:none;font:inherit;color:inherit;border-radius:6px;cursor:pointer;user-select:none;-webkit-user-select:none;touch-action:manipulation;text-align:left}
th .col-sort.on{color:var(--accent)}.col-arrow{font-size:10px;margin-left:4px}.col-arrow.off{visibility:hidden}
th .col-fbtn{width:22px;height:22px;min-height:0;margin:0;padding:0;border:1px solid transparent;background:none;color:var(--muted);border-radius:6px;font-size:12px;line-height:1;cursor:pointer;flex:none}
th .col-fbtn:hover,th .col-fbtn:focus-visible,th .col-sort:hover{background:var(--canvas)}th .col-fbtn.on{color:var(--accent);border-color:var(--accent);background:#e8f5fb}
.col-pop{position:fixed;z-index:60;max-height:min(70vh,480px);overflow:auto;background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px #162b4226;padding:8px;display:flex;flex-direction:column;gap:6px}
.col-pop-head{padding:2px 6px;color:var(--muted);font-size:12px}.col-pop-sort{display:flex;flex-direction:column;border-bottom:1px solid var(--line);padding-bottom:6px}
.col-pop .col-pop-item{width:100%;margin:0;text-align:left;border:0;border-radius:6px;background:transparent;padding:8px 10px;min-height:34px;font-weight:500;color:var(--ink)}
.col-pop .col-pop-item:hover,.col-pop .col-pop-item:focus-visible{background:#e8f5fb;color:#117da8}.col-pop .col-pop-item.active{color:#117da8;font-weight:650}
.col-pop-q{width:100%}.col-pop-list{display:flex;flex-direction:column;gap:2px;max-height:240px;overflow:auto;padding:2px}
.col-pop .check{display:flex;align-items:center;gap:6px;margin:0;padding:3px 6px;border-radius:6px}.col-pop .check:hover{background:var(--canvas)}.col-pop .check small{margin-left:auto;color:var(--muted)}
.col-pop .actions{display:flex;justify-content:flex-end;gap:6px;border-top:1px solid var(--line);padding-top:8px}.col-pop .actions button{width:auto;margin:0}
.pj-colnote{margin:6px 0 10px;color:var(--muted);font-size:13px}
table.sheet th .col-th{display:flex;width:100%;padding-right:4px}table.sheet th .col-sort{flex:1;height:30px;min-height:30px;padding:0 4px 0 8px;border-radius:0;font-size:12px;font-weight:650;overflow:hidden;text-overflow:ellipsis}
/* A bar of Jobs by stage opened (dashboards.js dashStagePop): its jobs in a list by the bar, sliding in; the bar stays marked. */
.stage-pop{position:fixed;z-index:60;max-height:min(70vh,460px);display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:0 10px 30px #162b4226;overflow:hidden;animation:stage-pop-in .18s ease-out}
@keyframes stage-pop-in{from{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.stage-pop{animation:none}}
.stage-pop header{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line)}.stage-pop header small{color:var(--muted)}.stage-pop .stage-pop-x{margin-left:auto;width:auto;min-height:0;padding:2px 8px}
.stage-pop-q{margin:8px 12px 0;width:calc(100% - 24px)}.stage-pop-list{overflow:auto;padding:6px;display:flex;flex-direction:column;gap:2px;overscroll-behavior:contain}
.stage-pop-row{display:grid;grid-template-columns:auto minmax(0,1fr);gap:0 10px;width:100%;text-align:left;border:0;background:none;padding:8px 10px;border-radius:8px;color:var(--ink);cursor:pointer}
.stage-pop-row:hover,.stage-pop-row:focus-visible{background:#e8f5fb}.stage-pop-row .mono{grid-row:span 2;color:var(--accent);font-weight:600;padding-top:1px}.stage-pop-row strong,.stage-pop-row small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stage-pop-row strong{font-weight:600}.stage-pop-row small{color:var(--muted)}
.stage-pop footer{display:flex;justify-content:flex-end;padding:8px 12px;border-top:1px solid var(--line)}.chart [data-cp].cp-picked{filter:brightness(.86)}
/* ORGCHART-01: Settings → Members → Org chart (orgchart.js). On a computer the people who have people of their own sit side by
   side under their manager while the chart fits its width, joined by lines, and the ones without hang in one list; past that
   width, and on a phone, people hang in indented lists under their manager, read top to bottom. A dashed line or card is the
   chart's suggestion. The lines are borders; the colors are the app's own. */
.oc-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px 16px;flex-wrap:wrap}.oc-head h2{margin-bottom:4px}.oc-head p{margin:0}.oc-branches{margin:0}
.oc-note{display:flex;align-items:center;justify-content:space-between;gap:8px 16px;flex-wrap:wrap}.oc-note button{width:auto}
.oc-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:16px 20px;align-items:start;margin-top:14px}
.oc-key{border:1px solid var(--line);border-radius:var(--radius);background:#f8fafb;padding:10px 12px;min-width:0}.oc-key summary{cursor:pointer;font-weight:650;color:var(--ink);padding:2px 0}.oc-hint{margin:4px 0 0;font-size:11.5px;line-height:1.45}
.oc-roles{list-style:none;margin:8px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:2px 12px}.oc-role{border-radius:8px;padding:6px 8px}.oc-role.on{background:#e8f5fb}.oc-role p{margin:2px 0 0;font-size:11.5px;line-height:1.45}
button.oc-role-pick{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;border:0;background:none;padding:0;min-height:0;text-align:left;font-weight:400;color:var(--ink)}
button.oc-role-pick:hover{background:none}.oc-role.on .oc-role-pick{color:#117da8}.oc-role-pick .count{white-space:nowrap;flex:none}button.oc-role-edit{font-size:11px;color:#167fa9;margin-top:2px;min-height:0}
.oc-chart{overflow:auto;padding:2px 2px 12px;min-width:0}.oc-chart ul{list-style:none;margin:0;padding:0;position:relative}.oc-chart li{position:relative}
.oc-card{display:flex;align-items:flex-start;gap:2px;width:212px;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:8px}
button.oc-who{display:flex;align-items:flex-start;gap:8px;flex:1;min-width:0;border:0;background:none;padding:0;min-height:0;text-align:left;font-weight:400;color:var(--ink)}
button.oc-who:hover{background:none}@media(hover:hover){button.oc-who:hover strong,button.oc-role-pick:hover{color:#117da8}}.oc-face{flex:none}.oc-face::before{content:attr(data-initials)}  /* a mouse's hover only: a tap leaves no colour behind */
.oc-words{display:flex;flex-direction:column;min-width:0;padding-top:1px}.oc-words strong,.oc-words small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.oc-words strong{font-weight:650}.oc-words small{font-size:11px;line-height:1.35;margin:0}
.oc-tools{display:flex;flex-direction:column;flex:none}button.oc-tool{padding:0 5px;min-height:22px;font-size:13px;line-height:1;color:var(--muted)}
.oc-guess{border-style:dashed;border-color:#b7c3cf}.oc-lit{border-color:var(--accent);background:#e8f5fb}.oc-dim{opacity:.45}.oc-focus{box-shadow:0 0 0 3px #8bd2ef}
/* A list (the default): a line down the left from the manager, and a tick to each person */
.oc-chart ul ul{padding-left:22px}.oc-chart ul ul>li{padding-top:8px}
.oc-chart ul ul>li::before{content:'';position:absolute;left:-12px;top:0;bottom:0;border-left:1px solid #b7c3cf}.oc-chart ul ul>li:last-child::before{bottom:auto;height:33px}
.oc-chart ul ul>li::after{content:'';position:absolute;left:-12px;top:33px;width:11px;border-top:1px solid #b7c3cf}.oc-chart ul ul>li.oc-sugg::after{border-top-style:dashed}
/* A computer: a row, the people side by side under their manager, joined by lines from the left of each card, so a wide
   list under one of them never pulls the cards off their lines; the people without people of their own in one list, first
   in the row (oc-pack), its line down from the row's bar. A card is 212 px, its line at 114 px in its column of 228. */
@media(min-width:721px){
 .oc-chart .oc-row{display:flex;align-items:flex-start;padding:0}.oc-chart .oc-tops{width:max-content;gap:0 12px}
 .oc-chart li>.oc-row{margin-left:-8px;padding-top:20px}.oc-chart li>.oc-row::before{content:'';position:absolute;top:0;left:114px;height:20px;border-left:1px solid #b7c3cf}
 .oc-chart .oc-row>li{display:flex;flex-direction:column;align-items:flex-start;padding:20px 8px 0}
 .oc-chart .oc-row>li::before,.oc-chart .oc-row>li::after{content:'';position:absolute;top:0;bottom:auto;left:0;right:auto;width:114px;height:20px;border:0;border-top:1px solid #b7c3cf;border-radius:0}
 .oc-chart .oc-row>li::after{left:114px;right:0;width:auto;border-left:1px solid #b7c3cf}
 .oc-chart .oc-row>li:first-child::before,.oc-chart .oc-row>li:last-child::after,.oc-chart .oc-tops>li::before,.oc-chart .oc-tops>li::after{display:none}
 .oc-chart .oc-row>li:last-child::before{height:20px;bottom:auto;border-right:1px solid #b7c3cf;border-radius:0 8px 0 0}
 .oc-chart .oc-row>li:only-child,.oc-chart .oc-tops>li{padding-top:0}.oc-chart .oc-row>li:only-child::before{display:none}
 .oc-chart .oc-row>li.oc-sugg::after{border-top-style:solid;border-left-style:dashed}.oc-chart .oc-row>li.oc-sugg:last-child::before{border-right-style:dashed}.oc-chart li>.oc-row.oc-sugg-one::before{border-left-style:dashed}
 .oc-chart .oc-row>li.oc-pack::after{left:18px}.oc-chart .oc-pack>.oc-stack>li:first-child{padding-top:0}.oc-chart .oc-pack>.oc-stack>li:first-child::after{top:25px}
 .oc-chart .oc-stack>li>.oc-card{width:190px}
}
@media(min-width:1280px){.oc-layout{grid-template-columns:minmax(220px,270px) minmax(0,1fr)}.oc-roles{grid-template-columns:minmax(0,1fr)}}
@media(max-width:720px){.oc-card{width:auto}.oc-tools{flex-direction:row}button.oc-tool{min-height:40px;padding:0 10px}
 .oc-chart .oc-pack{padding-top:0}.oc-chart .oc-pack::before,.oc-chart .oc-pack::after{display:none}.oc-chart .oc-pack>.oc-stack{padding-left:0}.oc-chart .oc-pack>.oc-stack>li:last-child::before{bottom:0;height:auto}}
.oc-worked{background:#f8fafb;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:12px}
.oc-legend{display:flex;align-items:center;flex-wrap:wrap;gap:4px 16px;font-size:11.5px;margin-top:10px}.oc-line{display:inline-block;width:24px;border-top:1px solid #b7c3cf;vertical-align:middle;margin-right:4px}.oc-line.oc-dashed{border-top-style:dashed}
.prof-boss{margin:3px 0 0;font-size:12px;color:var(--muted)}  /* a profile: whom they report to, and On the org chart → (profiles.js, ORGCHART-01) */
/* SCHED-DAY-01: the day, hour by hour (dayflow.js). The dispatch board's Day: each person a row, the hours across, each
   event a block placed by its start and its time (dfPlace sets left and width), the travel before it, lunch and the hours
   outside the work day shaded, now in red; a phone gets the same day as a list. Today's work's day with Done here and
   Running late; My week's drive between sites; the customers' messages in Communications. */
.df{min-width:0}.df-say{margin:4px 0 8px;font-size:12px}.df-scroll{margin-bottom:8px}.df-board{min-width:900px}
.df-row{display:grid;grid-template-columns:210px minmax(0,1fr);border-bottom:1px solid #edf0f4;min-height:46px}
.df-who{display:flex;gap:8px;align-items:flex-start;padding:6px 10px;border-right:1px solid #edf0f4;background:#fff;position:sticky;left:0;z-index:3;min-width:0}.df-who>span{min-width:0}
.df-who strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.df-who small{display:block;font-size:10px;line-height:1.35}.df-who .av-dbl{color:#b3261e;font-weight:600}
.df-track{position:relative;min-height:46px;overflow:hidden}.df-track.lanes2{min-height:80px}.df-track.lanes3{min-height:114px}
.df-axis{position:sticky;top:0;z-index:4;background:#f8fafb;min-height:24px}.df-axis .df-who{background:#f8fafb}.df-axis .df-track{min-height:24px}
.df-tick{position:absolute;top:4px;height:16px;font-size:10px;color:var(--muted);padding-left:3px;border-left:1px solid #e1e6ed;white-space:nowrap}
.df-group{background:#f3f6f9;min-height:0}.df-group .df-who{background:#f3f6f9;padding:5px 10px}.df-group .df-track{min-height:0}
.df-line{position:absolute;top:0;bottom:0;border-left:1px solid #edf0f4}.df-off{position:absolute;top:0;bottom:0;background:#f6f8fa}
.df-lunch{position:absolute;top:0;bottom:0;background:repeating-linear-gradient(45deg,#f1f4f7,#f1f4f7 4px,#fff 4px,#fff 8px)}
.df-now{position:absolute;top:0;bottom:0;border-left:2px solid #d9534f;z-index:2}
.df-travel{position:absolute;top:16px;height:14px;border-radius:3px;background:repeating-linear-gradient(90deg,#8a97a6,#8a97a6 3px,transparent 3px,transparent 6px);opacity:.55}
.df-travel.short{background:repeating-linear-gradient(90deg,#d9534f,#d9534f 3px,transparent 3px,transparent 6px);opacity:.9}
.df-block{position:absolute;top:4px;bottom:4px;z-index:1;margin:0;border:0;border-left:4px solid var(--c,#8a97a6);border-radius:5px;background:var(--b,#f1f4f7);padding:2px 6px;text-align:left;min-height:0;font-size:11px;font-weight:500;overflow:hidden;white-space:nowrap;line-height:1.3;color:var(--ink);cursor:pointer}
.df-block b{display:block;overflow:hidden;text-overflow:ellipsis;font-weight:600}.df-block small{display:block;overflow:hidden;text-overflow:ellipsis;color:#526174;font-size:10px}.df-block:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.df-block.running{box-shadow:inset 0 0 0 2px #2494c4}.df-block.late{box-shadow:inset 0 0 0 2px #e0a030;background:#fff3dc}.df-block.done{opacity:.55}
.df-block.moved{outline:2px dashed var(--c,#8a97a6);outline-offset:-3px}.df-block.clash{box-shadow:inset 0 0 0 2px #d9534f;background:#fde4e2}
.df-block.busy{--c:#8a97a6;background:repeating-linear-gradient(45deg,#eef1f4,#eef1f4 6px,#e4e9ee 6px,#e4e9ee 12px);color:var(--muted);cursor:default;padding-top:12px}
.df-row.double .df-who{box-shadow:inset 3px 0 0 #d9534f}.df-untimed{color:#526174}.df-none{padding:16px}
.df-list{display:none;list-style:none;margin:0;padding:0 10px 8px}.df-li{display:grid;grid-template-columns:110px minmax(0,1fr);gap:2px 8px;padding:6px 0;border-top:1px solid #edf0f4;font-size:12px}.df-li.clash{background:#fde4e2}
.df-k-run{--c:#2494c4}.df-k-late{--c:#e0a030;--b:#fff3dc}.df-k-moved{--c:#8a97a6}.df-k-travel{--c:#8a97a6}.df-k-clash{--c:#d9534f;--b:#fde4e2}
.df-changes{border:1px solid #f0d9a6;background:#fff8e6;border-radius:8px;padding:8px 12px;margin:0 0 10px}.df-changes summary{cursor:pointer}
.df-change{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;padding:6px 0;border-top:1px solid #f0d9a6}.df-change.done{opacity:.6}.df-change ul{margin:4px 0 0;padding-left:18px;font-size:12px}
.df-panel p{margin:4px 0}.df-panel .df-t{display:inline;margin-right:6px}
.df-today{border:1px solid var(--line);border-radius:10px;padding:8px 14px;margin:0 0 12px;background:#fff}
.df-changed{border-left:4px solid #e0a030;background:#fff3dc;border-radius:6px;padding:8px 12px;margin:6px 0 10px}.df-changed p{margin:4px 0;color:var(--ink)}.df-changed ul{margin:4px 0 6px;padding-left:18px}
.df-steps{list-style:none;margin:0;padding:0}.df-step{display:grid;grid-template-columns:120px minmax(0,1fr);gap:4px 10px;padding:8px 0;border-top:1px solid #edf0f4}
.df-step.now{background:#eef7fc;border-radius:8px;padding:8px;border-top-color:transparent}.df-step.done{opacity:.6}.df-step.late,.df-li.late{color:var(--ink)}.df-step.late .df-t,.df-li.late .df-t{color:#a53032}
.df-t{font-weight:700;font-size:13px}.df-w small{display:block;color:var(--muted)}.df-w .pill{margin-left:4px}
.df-act{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:4px}.df-act button.primary{min-height:48px;font-size:16px;padding:10px 18px}
.df-late{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;align-items:center;width:100%;max-width:480px}.df-late>span{grid-column:1/-1;color:var(--muted);font-size:12px}.df-late button{padding:8px 6px;min-height:44px;border:1px solid var(--line);border-radius:8px;background:#fff}
.df-drive{color:var(--muted);font-size:12px;padding:2px 0 2px 130px}.df-w .df-moved,.df-moved{color:#946422;font-size:12px}.df-said{color:var(--muted);font-size:12px}
.mw-travel{margin:-2px 0 8px 96px;font-size:12px;color:var(--muted)}.mw-travel.short{color:#b3261e}
.df-msgs .note{margin:8px 0}.df-msg{border-top:1px solid #f0d9a6;padding:8px 0}.df-msg small{display:block;color:var(--muted)}
.df-body{white-space:pre-wrap;font:inherit;font-size:12px;background:#fff;border:1px solid var(--line);border-radius:6px;padding:8px 10px;margin:6px 0;color:var(--ink);max-height:220px;overflow:auto}
.df-outbox{font-size:12px;margin:4px 0}.df-outbox.good{color:#2d7350}.df-outbox.bad{color:#b3261e}.df-sent summary{cursor:pointer;color:var(--muted);font-size:12px}
.df-auto{display:flex;gap:8px;align-items:flex-start;margin:12px 0}.df-auto small{display:block;color:var(--muted)}.df-auto input{margin-top:3px}
@media(max-width:720px){.df-board{min-width:0}.df-row{grid-template-columns:1fr}.df-axis,.df-track{display:none}.df-who{position:static;border-right:0}.df-list{display:block}
 .df-step,.df-li{grid-template-columns:1fr}.df-drive{padding-left:0}.mw-travel{margin-left:0}.df-change{flex-direction:column}}
.stage-pop header{cursor:move;user-select:none;-webkit-user-select:none;touch-action:none}.stage-pop header button{cursor:pointer}
.stage-pop.stage-pop-moving{box-shadow:0 16px 40px #162b4240;opacity:.97}
/* READY-02: Ready to mobilize? (readiness.js) and crew qualifications (quals.js). Each state has its word and an icon, never colour alone. */
.rd-reqs{list-style:none;margin:6px 0;padding:0}.rd-req{display:flex;gap:10px;align-items:flex-start;padding:8px 0;border-top:1px solid var(--line)}.rd-req:first-child{border-top:0}
.rd-ico{flex:0 0 24px;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font-size:13px;font-weight:700;background:#edf1f5;color:#566679;margin-top:1px}
.rd-req.rd-confirmed .rd-ico{background:#e8f5ee;color:#2d7350}.rd-req.rd-missing .rd-ico,.rd-req.rd-outdated .rd-ico{background:#fdecec;color:#a53032}.rd-req.rd-unknown .rd-ico,.rd-req.rd-excepted .rd-ico{background:#fff3dc;color:#946422}
.rd-req-body{min-width:0;flex:1}.rd-req-body p{margin:0;color:var(--ink);display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px}.rd-req-body small{display:block;margin-top:3px;line-height:1.45;overflow-wrap:anywhere}.rd-req-body .rd-next{color:#526174}.rd-req-body .rd-go-link{margin-top:4px;min-height:0;font-size:12px;color:#167fa9}
.rd-holds{display:inline-block!important;margin:0!important;font-size:10px;font-weight:600;color:#a53032;border:1px solid #efcaca;border-radius:20px;padding:1px 7px;white-space:nowrap}
.rd-summary{display:flex;flex-wrap:wrap;align-items:center;gap:6px;color:var(--ink)}.rd-summary .rd-words{flex-basis:100%}.pill.rd-sum{font-size:11px}
.rd-exc{border-left:3px solid #bf8d3c;background:#fdf8ec;padding:8px 10px;border-radius:6px;color:var(--ink);margin:8px 0}.rd-exc small{display:block;margin-top:2px}
.rd-marks .section-label{margin:12px 0 6px}.rd-held{margin:10px 0}.rd-held>p{color:var(--ink);margin:0 0 4px}
.rd-board{border-top:1px solid var(--line);margin-top:10px;padding-top:8px}.rd-board-head{color:var(--ink)}.rd-board .rd-reqs{max-height:260px;overflow:auto}
.rd-sf{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:12px 0 0;background:#fbfcfd}.rd-sf .rd-reqs{margin:4px 0}
.rd-job-ready{border:1px solid var(--line);border-radius:8px;padding:10px 14px;margin:4px 0 14px;background:#fff}.rd-job-ready .section-label{margin:0 0 6px}.rd-job-ready .actions{margin-top:6px}
.rd-mob-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px}.rd-mob-line .link{font-size:12px;color:#167fa9;min-height:0}
.rd-hold{border:1px solid var(--line);border-radius:8px;padding:10px 14px;margin:16px 0 0}.rd-hold legend{font-weight:600;padding:0 4px}.rd-hold-ticks{display:flex;flex-wrap:wrap;gap:6px 18px}
.ops-mark-why[hidden]{display:none}.ops-mark-why .form-grid{margin:0}.ops-site-line{margin:0}
.ql-need{padding:8px 0;border-top:1px solid var(--line)}.ql-need p{margin:0 0 4px;color:var(--ink)}.ql-ticks{display:flex;flex-wrap:wrap;gap:4px 16px}
.ql-form{margin-top:12px}.ql-rows{list-style:none;margin:0;padding:0}.ql-row{padding:8px 0;border-top:1px solid var(--line)}.ql-row:first-child{border-top:0}.ql-row p{margin:0;color:var(--ink)}.ql-row small{display:block;margin-top:3px;line-height:1.45}
.ql-row .wo-link{display:inline-block;margin-top:4px}.ql-hist summary{cursor:pointer;font-size:12px;color:var(--muted);margin-top:4px}.ql-hist li{padding:4px 0}.ql-st{margin-left:4px}.ql-prof form{margin-top:8px}
@media(max-width:720px){.rd-req{gap:8px}.rd-ico{flex-basis:22px;width:22px;height:22px}.rd-hold-ticks{flex-direction:column}.ql-ticks{flex-direction:column}
 .ql-list .rd-stack td,.ql-people .rd-stack td{border:0;padding:2px 0}.ql-people .rd-stack tr{display:flex;flex-wrap:wrap;gap:4px 14px}.ql-people .rd-stack td[data-col=person]{flex-basis:100%}}
/* LABOR-01: the Budget tab's Labor view (labor.js), its Dashboard tile, clocking in on a work order */
.lab{margin-top:4px}.stats.compact.lab-tiles{grid-template-columns:repeat(5,minmax(0,1fr));margin:0 0 12px}.lab-tiles .stat{min-width:0}.lab-tiles .stat strong{font-size:20px;overflow-wrap:anywhere}
.lab-warn ul{margin:4px 0;padding-left:18px}.lab-warn li{margin:3px 0;color:var(--ink)}.lab-warn li .link{margin-left:6px;color:#167fa9;font-weight:600}.lab-missing{margin:0 0 12px}
.lab-grid th.r,.lab-grid td.r{text-align:right}.lab-grid td{vertical-align:top;padding:10px 8px}.lab-grid th{padding:10px 8px}.lab-grid td strong.lab-none-word{white-space:normal;display:inline-block;max-width:96px}.lab-grid td small{white-space:normal}.lab-grid td strong{white-space:nowrap}.lab-grid td[data-col=name]{min-width:150px;max-width:230px}.lab-grid td[data-col=name] strong{white-space:normal}
.lab-grid tr.lab-flag td{background:#fffaeb}.lab-grid tr.lab-flag td[data-col=name]{box-shadow:inset 3px 0 0 #b54708}.lab-grid tr.lab-none td{color:var(--muted)}.lab-grid .link{font-size:11px;color:#167fa9;font-weight:600}
.lab-over{color:#a53032}.lab-under{color:#2d7350}.lab-none-word{color:#946422;font-weight:600}.lab-actions{margin:10px 0}.lab-notes{padding-left:18px}.lab-notes li{margin:2px 0}
.lab-cards{display:none}.lab-card{background:white;border:1px solid var(--line);border-radius:var(--radius);padding:14px;margin-bottom:10px}.lab-card h3{margin:0;font-size:15px}.lab-card>p{margin:2px 0 8px;font-size:12px}
.lab-card.lab-flag{border-left:3px solid #b54708}.lab-flag-words{color:#946422;font-size:12px;margin:0 0 8px}.lab-card dl{margin:0}.lab-line{display:flex;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px solid var(--line)}.lab-line:last-child{border-bottom:0}
.lab-line dt{color:var(--muted);font-size:12px}.lab-line dd{margin:0;text-align:right}.lab-line dd small{display:block;font-size:11px}.lab-card .actions{margin-top:10px}.lab-card .actions button{flex:1 1 auto}
.lab-four{margin:0 0 10px}.lab-revs{margin:6px 0 0;padding-left:20px}.lab-revs li{margin:0 0 8px;line-height:1.5}.lab-revs li span{color:var(--ink)}.lab-revs li small{display:block}
.kpi.lab-kpi.warn{border-color:#e0b862;background:#fffaeb}.kpi.lab-kpi.warn .kpi-icon{background:#fff3dc;color:#946422}.lab-kpi .link{font-size:16px;font-weight:700}.lab-warn-word{color:#946422;font-weight:600}
.lab-clock{display:flex;flex-direction:column;gap:6px;margin:0 0 12px}.lab-clock button{width:100%}.lab-clock.on{flex-direction:row;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;background:#e8f6ee;color:#1f6b44;font-size:13px}
@media(max-width:1000px){.stats.compact.lab-tiles{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:720px){.lab-wide{display:none}.lab-cards{display:block}.stats.compact.lab-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}.lab-tiles .stat:last-child{grid-column:1/-1}.lab-tiles .stat strong{font-size:18px}.lab-card .actions button{min-height:48px}
 .lab-warn li .link{display:block;min-height:40px;margin:0;padding:0}}
/* SEARCH-01: the search box (search.js): the 🔍 in the top bar (the word and its key on a computer, the magnifier alone at
   44 px on a phone or tablet); the box, full screen on phones and tablets, its scope and kind chips, its groups (Go to,
   Actions that change records, the results, Ask), a result's source, place and the words found marked; an answer's
   cited sources (assistant.js). */
button.cmd-button{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:6px 10px;color:var(--muted);font-weight:500;border:1px solid var(--line);background:white}
button.cmd-button:hover{color:var(--ink);border-color:#c3ccd8}
.cmd-button .cmd-ico{font-size:14px;line-height:1}
.cmd-kbd{font:600 10px/1.3 Inter,Geist,system-ui,sans-serif;border:1px solid #c3ccd8;border-bottom-width:2px;border-radius:4px;padding:1px 5px;background:#fff;color:#33475b;white-space:nowrap}
@media(max-width:1000px){button.cmd-button{min-width:44px;min-height:44px;justify-content:center;padding:0 10px}.cmd-button .cmd-words,.cmd-button .cmd-kbd{display:none}.cmd-button .cmd-ico{font-size:19px}}
.keys-overlay.cmd{align-items:flex-start}
.cmd .keys-box{width:min(680px,100%);max-height:84vh;padding:0;display:flex;flex-direction:column;overflow:hidden}
.cmd-top{display:flex;align-items:center;gap:8px;padding:12px 12px 8px 16px}
.cmd-top .cmd-ico{font-size:17px;line-height:1;color:var(--muted)}
.cmd-top .cmd-q{flex:1;min-width:0;font-size:16px;padding:10px 12px;border:1px solid #c3ccd8;border-radius:8px}
.cmd-top .cmd-x{flex:none;min-width:40px;min-height:40px;justify-content:center;font-size:16px;color:var(--muted)}
.cmd-chips{display:flex;flex-wrap:wrap;gap:6px;padding:0 16px 8px}.cmd-chips:empty{display:none}
.cmd-list{overflow:auto;padding:0 8px 10px;flex:1;min-height:0;overscroll-behavior:contain}
.cmd-group h3{font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:#46566a;margin:12px 10px 4px}
.cmd-group h3 small{text-transform:none;letter-spacing:0;font-weight:500;color:var(--muted);margin-left:4px}
.cmd .keys-hits{margin:0}
.cmd .keys-hits .keys-hit{gap:2px;padding:9px 10px}
@media(hover:none){.cmd .keys-hits .keys-hit:hover:not(.on){background:none}}  /* a touch leaves no second row lit */
.cmd-hit .cmd-t{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;min-width:0;overflow-wrap:anywhere}
.cmd-hit small{display:block;font-weight:400;overflow-wrap:anywhere}
.cmd-hit .cmd-src{color:var(--muted)}
.cmd-hit .cmd-snip{color:var(--ink);font-size:12px;line-height:1.45;margin-top:1px}
.cmd-hit .cmd-why{color:#946422;font-size:12px}
.cmd-hit .cmd-state{font-size:11px;font-weight:500;color:var(--muted)}
.cmd mark{background:#fff3dc;color:inherit;border-radius:2px;padding:0 1px}
.cmd-act .cmd-pen{color:#b54708}
.cmd-act .cmd-tag{font-size:10px;font-weight:600;letter-spacing:.02em;color:#b54708;background:#fffaeb;border:1px solid #f0d9a6;border-radius:10px;padding:1px 7px}
.cmd-ask .ask-mark{color:var(--accent)}
.cmd-none{margin:4px 10px 6px;font-size:12px}
.cmd-more{padding:4px 10px}
.cmd-foot{margin:0;padding:8px 16px;border-top:1px solid var(--line);font-size:12px}
@media(max-width:1000px){.keys-overlay.cmd{padding:var(--band,0px) 0 0;background:#fff}.cmd .keys-box{width:100%;height:100%;max-height:none;border-radius:0;box-shadow:none}
 .cmd-top{padding:10px 8px 8px 14px}.cmd-top .cmd-x{min-width:44px;min-height:44px}.cmd .keys-hits .keys-hit{min-height:48px;padding:10px}.cmd-chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.cmd-chips .chip{flex:none;min-height:36px}.cmd-foot{display:none}}
.cmd-sources{margin:6px 0 2px;padding-top:6px;border-top:1px solid var(--line)}.cmd-sources>small{color:var(--muted);font-weight:600}
.cmd-sources ol{margin:4px 0 0;padding-left:0;list-style:none}.cmd-sources li{margin:3px 0}.cmd-sources li small{display:block;color:var(--muted)}
.cmd-sources button.link,.ask-text button.cmd-cite{display:inline;padding:0;border:0;background:none;color:#117da8;font-weight:600;cursor:pointer;width:auto;text-align:left}
.ask-text button.cmd-cite{font-size:11px;vertical-align:baseline}
@media print{.cmd-button{display:none!important}}
/* MOTION-01: messages, busy buttons, loading, schedule moves and reduced motion (app.js toast, busyOn, loadingMark,
   glideNext). Motion is transform and opacity only, about a fifth of a second, and none of it for reduced motion: new
   motion is written inside prefers-reduced-motion:no-preference, and what moved before is stilled below
   (tests/test_motion.cjs reads this file). The logo's shooting star (top of this file) is left exactly as it was. */
#toast{display:flex;align-items:center;gap:10px;width:max-content;max-width:min(600px,calc(100vw - 32px));line-height:1.4;pointer-events:none;visibility:hidden;opacity:0;transform:translate(-50%,8px)}
#toast.show{display:flex;visibility:visible;opacity:1;transform:translate(-50%,0)}
#toast button{pointer-events:auto}
#toast::before{flex:none}
#toast[data-kind="success"]::before{content:'✓';display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:#9ee6b0;color:var(--navy);font-size:12px;font-weight:800}
#toast[data-kind="pending"]::before{content:'';width:14px;height:14px;border-radius:50%;border:2px solid #ffffff40;border-top-color:#ffd88a}
#toast[data-kind="error"]{background:#7d2426;padding-right:10px}
#toast[data-kind="error"]::before{content:'!';display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:#fff;color:#7d2426;font-size:13px;font-weight:800}
#toast .toast-x{flex:none;width:40px;height:40px;min-height:0;margin:-11px -4px -11px 2px;padding:0;border:0;border-radius:8px;background:transparent;color:#fff}
#toast .toast-x::before{content:'✕';font-size:15px}#toast .toast-x:hover{background:#ffffff1a}
@media(pointer:coarse),(max-width:720px){body.qc-on:not(:has(#drawer:not([hidden]))) #toast{bottom:calc(86px + env(safe-area-inset-bottom))}}  /* above the camera button in the corner, where its own message sits; with a panel open, in its empty foot below its Save bar */
@media(prefers-reduced-motion:no-preference){
 #toast{transition:opacity .18s ease,transform .18s ease,visibility 0s linear .18s}
 #toast.show{transition:opacity .18s ease,transform .18s ease,visibility 0s}
 #toast[data-kind="pending"]::before{animation:live-turn .9s linear infinite}}
/* The quick camera's own message (quickcam.js) in the same kinds: pending and held in a form are amber, filed is green. */
.qc-toast[hidden]{display:none}
.qc-toast[data-kind="pending"]{box-shadow:inset 4px 0 0 #ffd88a,0 10px 34px #0b182950}.qc-toast[data-kind="success"]{box-shadow:inset 4px 0 0 #9ee6b0,0 10px 34px #0b182950}
@media(prefers-reduced-motion:no-preference){.qc-toast:not([hidden]){animation:lb-rise .18s ease-out}}
@keyframes lb-rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
/* A button whose press is under way: dimmed as it always was, and after a moment it breathes until the answer comes. */
button[aria-busy="true"]{cursor:progress}
@media(prefers-reduced-motion:no-preference){button[aria-busy="true"]{animation:lb-busy .9s ease-in-out .3s infinite alternate both}}
@keyframes lb-busy{from{opacity:.6}to{opacity:.35}}
/* Still loading: the words with a small turning ring, in one place for every screen and card. */
.loading{display:flex;align-items:center;gap:8px;min-height:24px;color:var(--muted)}
.loading::before{content:'';flex:none;width:12px;height:12px;border-radius:50%;border:2px solid var(--line);border-top-color:var(--accent)}
@media(prefers-reduced-motion:no-preference){.loading::before{animation:live-turn .9s linear infinite}}
.dash-card .dash-loading.loading{min-height:140px;align-items:flex-start}  /* a card keeps about its size while its figures come */
/* A schedule item on its way to the server: outlined until it answers (the dispatch board's .dsp-block.saving above). */
.schedule-card.saving{outline:2px dashed var(--accent);outline-offset:2px;opacity:.85}
.gantt-bar.saving{opacity:.8}.gantt-bar.saving .gantt-fill{stroke:var(--navy);stroke-width:1.5;stroke-dasharray:4 3}
/* What moved before, stilled for reduced motion: a pin found on the plan is ringed instead of flashing. */
@media(prefers-reduced-motion:reduce){
 .pins .pin.flash,.pins .sugg.flash{animation:none;outline:3px solid #ffc933;outline-offset:2px}
 .bs-sheet td,.dash-card.stale>:not(.panel-head),.bud-busy,figure.chart [data-cp],figure.chart .key,button.dash-tile,tr.lit>td{transition:none}}
/* FIELDCO-01: field changes (fieldchanges.js): the capture on a phone, the stage pills and their chain, the list and the review */
.fc-stage{display:inline-flex;align-items:center;gap:4px}.fc-stage .fc-ico{font-size:11px;line-height:1}
.fc-sub{margin:-14px 0 6px;font-size:12px}
.fc-photos .camera{margin:6px 0;min-height:64px;font-size:16px}
.fc-kept-row{gap:10px}.fc-kept{position:relative;display:inline-flex}.fc-kept>button.fc-x{position:absolute;top:-8px;right:-8px;background:#fff;border:1px solid var(--line);border-radius:50%;padding:0;min-width:28px;min-height:28px;line-height:1}
.fc-shot-wait{display:grid;place-items:center;font-size:22px;width:76px;height:76px}
.fc-why{margin:0 0 14px}.fc-why .chip{min-height:44px;padding:10px 14px;font-size:14px}.fc-why .chip:has(input:checked){background:#e8f5fb;border-color:#b5dcec;color:#117da8;font-weight:650}
.fc .field textarea{min-height:64px;font-size:15px}
.fc-where{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.fc-labor,.fc-sched{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px 14px}
.fc-q{display:flex;flex-direction:column;gap:6px;font-size:12px;color:#566679}
.fc-step{display:inline-flex;align-items:center;gap:6px}
.fc-step button{min-width:48px;min-height:48px;padding:0;font-size:22px;line-height:1;border-radius:10px}
.fc-step input{width:72px;min-height:48px;text-align:center;font-size:18px;font-variant-numeric:tabular-nums;padding:6px}
.fc-times{font-size:18px;color:var(--muted);padding-bottom:12px}
.fc-total{flex-basis:100%;font-weight:650;color:var(--ink)}
.fc-lines{display:grid;gap:8px}
.fc-line{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:8px;align-items:center;border:1px solid var(--line);border-radius:10px;padding:8px}
.fc-line-what{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;min-width:0}.fc-line-what>select:first-child:not(:only-child){grid-column:1/-1}.fc-line-what>select[name$=unit-0],.fc-line-what select[aria-label=Unit]{width:auto;min-width:76px}
button.fc-x{min-width:40px;min-height:40px;padding:0}
button.fc-add{margin:8px 0 0;border:1px dashed #9fcbe0;color:#117da8;min-height:44px}
.fc-sched .field{flex:1 1 220px}
.fc-fine{margin-top:16px}
.fc-switch{margin:10px 0 0}.fc-first{margin:0 0 14px}.fc-first p{margin:0}
.fc-panel-wrap{margin-bottom:16px}.fc-panel.fc-head{margin-bottom:8px}.fc-panel .panel-head h2{margin-bottom:8px}.fc-note{margin:0;font-size:12px}
.fc-waiting td{background:#fffaf0}
.fc-chain{display:flex;flex-wrap:wrap;gap:4px;list-style:none;padding:0;margin:8px 0 14px}
.fc-chain li{font-size:11px;padding:6px 9px;border-radius:6px;background:#edf1f5;color:#6b7a8c}
.fc-chain li.done{background:#e8f5ee;color:#2d7350}.fc-chain li.now{background:#e8f5fb;color:#117da8;font-weight:700;box-shadow:inset 0 0 0 1px #b5dcec}.fc-chain li.side{background:#f1f4f7;color:var(--ink)}
.fc-stage-line{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:-14px 0 4px}.fc-stage-line .muted{font-size:12px}
.fc-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 16px;margin:12px 0}.fc-facts div{min-width:0}.fc-facts dt{font-size:11px;color:var(--muted)}.fc-facts dd{margin:2px 0 0;font-weight:600;overflow-wrap:anywhere}
.fc-evidence{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px}
.fc-ev{margin:0;min-width:0}.fc-ev .shot{width:100%;height:auto;aspect-ratio:1}.fc-ev img{width:100%;height:100%;object-fit:cover;display:block}.fc-ev figcaption{font-size:11px;color:var(--muted);margin-top:4px;line-height:1.4;overflow-wrap:anywhere}
.fc-files{margin:10px 0;padding-left:18px}.fc-files li{margin:4px 0}
.fc-file-add{position:relative;display:flex;align-items:center;justify-content:center;border:1px dashed #9fcbe0;border-radius:8px;padding:10px;min-height:44px;font-weight:600;color:#117da8;margin:10px 0 0;cursor:pointer}.fc-file-add input{position:absolute;inset:0;opacity:0;min-height:0;cursor:pointer}.fc-file-note{font-size:11px}
.fc-text{white-space:pre-wrap;color:var(--ink);overflow-wrap:anywhere}
.fc-items{width:100%;font-size:13px}.fc-items td{padding:8px 10px;max-width:none}.fc-items td.n{text-align:right;white-space:nowrap}
.fc-decide{border:1px solid #b5dcec;background:#f3fafd;border-radius:10px;padding:12px;margin:0 0 12px}.fc-decide .actions button{min-height:44px}.fc-decide p{font-size:12px;margin:8px 0 0}
.fc-box{border:1px solid var(--line);border-radius:8px;padding:12px;margin:0 0 12px}.fc-box .form-actions{position:static;padding:8px 0 0;margin-top:8px}
.fc-co{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:8px;padding:10px 12px;margin:0 0 12px}
.fc-closed{background:#f1f4f7;border-radius:8px;padding:8px 10px;color:var(--ink)}
.fc-history{margin:14px 0 0;font-size:12px}.fc-history summary{cursor:pointer;color:var(--muted)}.fc-history ul{list-style:none;padding:0;margin:6px 0}.fc-history li{display:flex;justify-content:space-between;gap:8px;padding:6px 0;border-top:1px solid #edf0f4}
.fc-buttons{display:flex;flex-wrap:wrap;gap:8px;border-top:1px solid var(--line);padding-top:12px;margin-top:12px}.fc-buttons button{min-height:44px}
.fc-wo .queue-row,.fc-pin,.fc-issue{margin-top:8px}
@media(max-width:720px){.fc-where{grid-template-columns:1fr 1fr}.fc-facts{grid-template-columns:minmax(0,1fr)}.fc-line{grid-template-columns:minmax(0,1fr) auto}.fc-line .fc-step{grid-column:1;grid-row:2}.fc-line>button.fc-x{grid-column:2;grid-row:1/3}
 .fc-labor{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px}.fc-times{display:none}.fc-step{gap:4px}.fc-step input{width:56px}.fc-step button{min-width:48px;min-height:52px}
 .fc-decide .actions{display:grid;grid-template-columns:1fr}.fc-stage-line{margin-top:-14px}
 /* the capture's Send bar stays stuck to the drawer's very bottom (no gap under it for fields to show through), a field taking
    focus scrolls clear above it, and the quick camera's corner button steps aside while the capture is open (it has its own camera) */
 #drawer:has(#fc-form){padding-bottom:0;scroll-padding-bottom:96px}#fc-form .form-actions{margin-top:16px;padding:10px 0 calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--line);z-index:2}
 body:has(#drawer:not([hidden]) #fc-form) .qc-fab{display:none}
 /* a field change's row becomes a card: its number and stage across the top, what changed under them, when and its change order two by two */
 .fc-stack thead{display:none}.fc-stack,.fc-stack tbody{display:block;width:auto;max-width:none;min-width:0}.fc-stack tr{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 12px;padding:12px 14px;border-bottom:1px solid var(--line)}
 .fc-stack td{display:block;width:auto;min-width:0;max-width:none;border:0;padding:2px 0;height:auto}.fc-stack td[data-col=what]{grid-column:1/-1}.fc-stack td[data-col=stage]{grid-column:2;grid-row:1;justify-self:end}
 .fc-stack td[data-label]:not([data-label=""])::before{content:attr(data-label);display:block;font-size:11px;color:var(--muted);margin-bottom:2px}}
/* CLOSEOUT-02: the closeout package's checklist (each item's state in words with an icon), its approvals and steps, and the completion photos to pick */
.pk.cpk{display:block}  /* the drawer reads top to bottom: .pk (the chips picker) is a wrapping row */
.cpk-status{display:grid;gap:4px;margin:10px 0;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:#fbfcfd;font-size:12px}
.cpk-status>span{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.cpk-ok{color:#2d7350}
.cpk-list h3{margin:14px 0 6px}
.cpk-counts{display:flex;flex-wrap:wrap;gap:6px 12px;font-size:12px;margin:0 0 8px}
.cpk-count{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.cpk-sec h4{margin:12px 0 4px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.cpk-sec ul{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:minmax(0,1fr);gap:6px}
.cpk-row{display:grid;grid-template-columns:24px minmax(0,1fr);gap:4px 10px;align-items:start;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff}
.cpk-row.cpk-st-missing{border-color:#efd9a8;background:#fffbf2}
.cpk-row.cpk-st-notneeded{background:#f6f8fa}
.cpk-main{min-width:0}
.cpk-main>strong{display:block;overflow-wrap:anywhere}
.cpk-main small{display:block;margin-top:2px;color:var(--muted);overflow-wrap:anywhere}
.cpk-acts{grid-column:2;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.cpk-acts:empty{display:none}
.cpk-ico{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;font-size:12px;font-weight:700;line-height:1;flex:none}
.cpk-ico.cpk-required{background:#fff;color:#946422;box-shadow:inset 0 0 0 1.5px #946422}
.cpk-ico.cpk-missing{background:#fdecec;color:#a53032}
.cpk-ico.cpk-available{background:#eaf3fb;color:#316d9b}
.cpk-ico.cpk-approved{background:#e8f5ee;color:#2d7350}
.cpk-ico.cpk-notneeded{background:#edf1f5;color:#566679}
.cpk-word{font-weight:650}
.cpk-word.cpk-required{color:#946422}.cpk-word.cpk-missing{color:#a53032}.cpk-word.cpk-available{color:#316d9b}.cpk-word.cpk-approved{color:#2d7350}.cpk-word.cpk-notneeded{color:#566679}
.cpk-order{margin:12px 0}
.cpk-order summary{cursor:pointer;font-weight:600;padding:6px 0}
.cpk-blocked{margin:8px 0 0}
.cpk-steps{flex-wrap:wrap;position:sticky;bottom:0;background:#fff;padding:10px 0;border-top:1px solid var(--line);z-index:1}
.co-ev .cpk-counts{margin:0}
.cpk-photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;margin:10px 0}
.cpk-photo{display:grid;gap:4px;border:1px solid var(--line);border-radius:8px;padding:6px;cursor:pointer;background:#fff;position:relative}
.cpk-photo input{position:absolute;top:12px;left:12px;width:22px;height:22px;min-height:22px}
.cpk-photo img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:6px;background:#edf1f5}
.cpk-photo small{font-size:11px;color:var(--muted);overflow-wrap:anywhere}
.cpk-photo.cpk-unverified{border-style:dashed}
.cpk-photo:has(input:checked){border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
@media(max-width:720px){.cpk-acts button,.cpk-acts .button{min-height:40px}.cpk-steps{padding:8px 0}.cpk-steps button{flex:1 1 40%;min-height:44px;padding:8px 10px}
 #cpk-signoff-form .form-actions{position:static}}  /* on a phone the buttons follow the signature pad: stuck over it, a stroke could press one */
/* MYDAY-01: My Day (myday.js), the first block of an installer's and a foreman's Home. Big targets for one hand, dark text on
   white for bright sun, and every mark said in words (New, Changed, Taken off, Moved), the coloured edge only beside them. */
.md{padding:16px 18px}.md-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap;margin-bottom:4px}.md-head h2{margin:0;font-size:22px}
.md-date{margin:2px 0 0;color:var(--muted);font-size:14px}button.md-all{min-height:44px;font-size:15px;display:inline-flex;align-items:center;gap:8px}button.md-all .count{background:#fff;color:#117da8}
.md-marks{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 10px}.md-loading{padding:12px 0}
.md-list{list-style:none;margin:0;padding:0}.md-stops{margin-top:10px}
.md-stop{position:relative;border:1px solid #cfd8e2;border-left:5px solid var(--accent);border-radius:10px;padding:12px 14px;margin:0 0 12px;background:#fff}
.md-stop.mark-changed,.md-stop.state-photos{border-left-color:#e2a13b}.md-stop.state-late,.md-stop.mark-removed{border-left-color:#c8454a}.md-stop.now{background:#eef7fc}
.md-top{display:flex;align-items:flex-start;gap:10px}.md-n{flex:none;width:30px;height:30px;border-radius:50%;background:#172b42;color:#fff;display:grid;place-items:center;font-weight:700;font-size:14px}
.md-time strong{display:block;font-size:18px;line-height:1.2;white-space:nowrap}.md-time small{display:block;color:var(--muted);font-size:13px;margin-top:1px}
.md-flags{margin-left:auto;display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap}button.md-got{min-height:40px;padding:6px 12px;border-color:#cfd8e2}
.md-job{margin:8px 0 2px;font-size:17px;line-height:1.3;font-weight:650}.md-no{font-weight:700;color:#117da8;margin-right:2px}.md-job button.link{font-size:17px;font-weight:650;color:var(--ink);min-height:0}
.md-what{margin:0 0 6px;color:#3d4b5c;font-weight:600;font-size:14px}
.md-changes{margin:6px 0 8px;padding:8px 12px 8px 28px;border-radius:8px;background:#fff3dc;color:#6b4a12;font-weight:600;font-size:14px}.md-changes li{margin:2px 0}
.md-facts{display:grid;gap:6px;margin:8px 0}.md-f{display:grid;grid-template-columns:92px minmax(0,1fr);gap:8px;align-items:start}
.md-f dt{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.05em;font-weight:600;padding-top:3px}.md-f dd{margin:0;font-size:14px;color:var(--ink);line-height:1.45;overflow-wrap:anywhere}
.md-f dd small{display:block;color:var(--muted);font-size:13px}.md-f dd small.md-more{color:var(--ink)}
a.md-nav,a.md-call{display:inline-flex;align-items:center;min-height:36px;padding:4px 12px;margin:2px 4px 2px 0;border:1px solid #cfd8e2;border-radius:8px;font-weight:600;text-decoration:none;color:#117da8;background:#fff}
a.md-nav{background:#117da8;border-color:#117da8;color:#fff}
.md-scope,.md-pick,.md-instr{display:block}.md-scope{color:#3d4b5c}.md-instr strong{font-weight:700}.md-tasks{margin:0;padding:0;list-style:none}.md-tasks li{margin:0 0 6px}.md-tasks button.link{display:inline;padding:0;text-align:left;font-weight:600;min-height:0}
.md-ready{margin:6px 0;padding:7px 10px;border-radius:8px;font-size:13px}.md-ready.bad{background:#fdecec;color:#a53032}.md-ready.warn{background:#fff3dc;color:#946422}
.md-prog{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin:6px 0;font-size:14px;color:#3d4b5c}.md-now{margin-top:8px}
.md-acts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr)) minmax(0,1.45fr) repeat(2,minmax(0,1fr));gap:6px;margin-top:10px}  /* Start job or Continue, the third, the widest */
.md-act{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:58px;padding:6px 2px;border:1px solid #cfd8e2;border-radius:10px;background:#fff;color:var(--ink);font-weight:600;font-size:12px;line-height:1.15;text-align:center;cursor:pointer}
.md-act>span{font-size:19px;line-height:1}button.md-act:hover,label.md-act:hover{background:#eef7fc}.md-act.primary,button.md-act.primary:hover{background:var(--accent);border-color:var(--accent);color:#fff}
.md-act.off{color:var(--muted);background:#f4f6f8;cursor:default;border-style:dashed}.md-photo input{position:absolute;inset:0;width:100%;height:100%;min-height:0;opacity:0;cursor:pointer}
.md-off{background:#fafbfc}.md-off s{color:var(--muted)}.md-off .md-job{font-size:15px}.md-why{margin:4px 0 0;color:#a53032;font-size:14px}.md-off.mark-moved{border-left-color:#e2a13b}.md-off.mark-moved .md-why{color:#946422}
.md-drive{margin:0 0 6px;color:var(--muted);font-size:12px}
.md-sec{margin-top:14px}.md-h{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 8px;display:flex;align-items:center;gap:8px}
.md-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 0;border-top:1px solid #edf0f4}.md-row>div:first-child{min-width:0}.md-row small{display:block;color:var(--muted)}
.md-row small.md-changed{color:#946422;font-weight:600}.md-row>div:last-child{flex:none;display:flex;align-items:center;gap:6px}
.md-done li{margin:4px 0;color:#2d7350}.md-done small{color:var(--muted)}.md-crewless .muted{margin:-4px 0 4px}
.md-later summary{cursor:pointer;min-height:44px;display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;font-size:15px;padding:6px 0;border-top:1px solid #edf0f4}.md-later summary small{color:var(--muted)}
.md-empty{padding:12px 2px 4px;font-size:15px}.md-empty p{margin:6px 0}
@media(max-width:720px){.md{padding:14px 12px}.md-stop{padding:12px 10px}.md-f{grid-template-columns:78px minmax(0,1fr)}.md-acts{gap:5px}.md-act{font-size:11.5px}}
@media(max-width:560px){.md-f{grid-template-columns:minmax(0,1fr);gap:1px}.md-f dt{padding-top:0}.md-facts{gap:8px}.md-addr{display:block;margin-bottom:2px}}  /* a phone: each label over its words, the words the stop's whole width */
/* OFFLINE-02: offline field mode. The five states of a change (offline.js), each an icon and its words beside a coloured
   chip, never the colour alone: Saved on this device, Waiting to sync, Synced, Failed, Conflict; on a record where it shows
   (.ob-mark), in the outbox and its legend, and the top bar's ✓ Synced. Get ready to go offline and Saved for offline
   (offlineready.js): the strip under My Day's title, the job header's button, and the two panels, big targets for one hand. */
.ofs{display:inline-flex;align-items:center;gap:4px;border-radius:12px;padding:2px 8px;font-size:11px;font-weight:600;line-height:1.5;white-space:nowrap;vertical-align:middle}
.ofs-i{font-size:12px;line-height:1}.ofs-device{background:#eaf3fb;color:#316d9b}.ofs-waiting{background:#fff3dc;color:#946422}.ofs-synced{background:#e8f5ee;color:#2d7350}
.ofs-failed{background:#fdecec;color:#a53032}.ofs-conflict{background:#fff7e8;color:#8a5a12;box-shadow:inset 0 0 0 1px #f0c36d}
.ob-mark{margin:0 0 0 6px}td>.ob-mark{display:inline-flex;margin:4px 0 0}.md-flags>.ob-mark{margin:0}.drawer-head+.ob-mark{margin:-14px 0 12px}
.ob-legend{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 10px}.ob-state .ofs{margin-right:4px}.ob-next{color:var(--muted)}
.ob-badge.ob-synced{border-color:#cbe8d6;background:#e8f5ee;color:#2d7350}.ob-badge.ob-synced .ob-n{background:#2d7350}
.ob-synced-list{margin-top:14px}.ob-synced-list summary{cursor:pointer;color:var(--muted);min-height:36px;display:flex;align-items:center}.ofl-line{margin-top:14px}
.ofl-strip{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin:8px 0 4px;padding:10px 12px;border:1px solid #cfd8e2;border-radius:10px;background:#f8fafb}
button.ofl-go{display:inline-flex;align-items:center;gap:8px;min-height:48px;font-size:15px;color:#117da8;border-color:#b5dcec;background:#fff}.ofl-hint{font-size:12px;color:var(--muted);flex:1 1 220px}
.ofl-ok,.ofl-done,.ofl-sum{margin:0;font-weight:600;color:#2d7350;font-size:14px;line-height:1.45}.ofl-ok.old,.ofl-sum.old{color:#946422}.ofl-acts{display:flex;flex-wrap:wrap;gap:6px}.ofl-acts button{min-height:44px}
.ofl-note{margin:0;color:#3d4b5c}.ofl .ofl-note{margin:8px 0}.ofl-for{color:#3d4b5c}
.ofl-job{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:10px 0}.ofl-job-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.ofl-job-head>div{min-width:0}.ofl-job-head>button{flex:none}.ofl-job-head small{display:block;margin-top:2px}
.ofl-items{list-style:none;margin:6px 0 0;padding:0}.ofl-row{display:grid;grid-template-columns:24px minmax(0,1fr) auto auto;gap:4px 8px;align-items:start;padding:8px 0;border-top:1px solid #edf0f4}
.ofl-i{font-size:16px;line-height:1.3}.ofl-what{overflow-wrap:anywhere}.ofl-what small{display:block;color:var(--muted);font-size:12px}.ofl-size{font-variant-numeric:tabular-nums;color:#3d4b5c;white-space:nowrap}
.ofl-st{font-size:12px;font-weight:600;white-space:nowrap}.ofl-st.ok{color:#2d7350}.ofl-st.no{color:#a53032}button.ofl-rm{padding:4px 12px;min-height:44px}
.ofl-total{margin:12px 0}.ofl-skip{background:#fdecec;color:#a53032;border-radius:8px;padding:8px 12px;margin:8px 0}.ofl-skip ul{margin:4px 0 0;padding-left:18px}.ofl-missed{font-size:12px;color:#a53032;margin:6px 0 0}
.ofl-now{font-weight:600;color:var(--ink)}progress.ofl-bar{display:block;width:100%;height:14px;margin:8px 0;accent-color:var(--accent)}
.offline-bar button.ofl-bar-btn{color:#fff;border:1px solid #ffffff66;min-height:36px;padding:4px 12px}button.ofl-saved{color:#2d7350}.ofl-narrow{display:none}.ofl-jobbtn{display:contents}
@media(max-width:720px){.ofl-wide{display:none}.ofl-narrow{display:inline}.job-buttons .ofl-jobbtn>button{order:9}}  /* a phone: after Next step in the header's row, which stays in view */
@media(max-width:560px){.ofl-row{grid-template-columns:24px minmax(0,1fr) auto}.ofl-row>.ofl-st,.ofl-row>button{grid-column:2/-1;justify-self:start}}
/* QUICKADD-01: the quick button (quickadd.js). On a phone or tablet a round ＋ just above the quick camera's 📷, lifted with
   it over the bars at the foot of the screen (--qc-lift) and stepping aside with it while typing or drawing; set aside too
   while a form with its own Save bar is open in the panel. On a computer ⚡ Quick add in the job header; ＋ Add on My Day's
   stops. Its sheet sits where the camera's panel does (under the top bar on a computer, a bottom sheet on a phone), and
   every form it opens carries the place as a line of chips at its top. */
.qa-fab{display:none}
.qa-head{white-space:nowrap}
.qa-sheet{position:fixed;z-index:48;top:var(--qa-top,74px);right:var(--qa-right,24px);width:min(440px,calc(100vw - 48px));max-height:calc(100vh - var(--qa-top,74px) - 16px);overflow:auto;overscroll-behavior:contain;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 50px #16294238;padding:14px 16px}
.qa-sheet[hidden]{display:none}
.qa-sheet-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.qa-sheet-head h2{margin:0;font-size:16px}
.qa-ctx{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 12px;padding:8px 10px;border:1px solid #b5dcec;border-radius:10px;background:#f3fafd}
.qa-ctx-label{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600}
.qa-chips{display:contents}  /* the chips flow on the line with the label and Change */
.qa-chip{display:inline-flex;align-items:center;padding:3px 9px;border-radius:999px;background:#fff;border:1px solid #b5dcec;color:#117da8;font-size:12px;font-weight:650;max-width:100%;overflow-wrap:anywhere}
.qa-chip-job{color:var(--ink)}
.qa-ctx .qa-change{margin-left:auto;font-weight:650;color:#117da8;min-height:32px;padding:4px 6px}
.qa-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.qa-tile{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;min-height:84px;padding:10px 6px;border:1px solid #cfd8e2;border-radius:12px;background:#fff;color:var(--ink);font-weight:650;font-size:13px;text-align:center;cursor:pointer;line-height:1.2}
.qa-tile:hover,.qa-tile:focus-visible{background:#eef7fc;border-color:#9fcbe0}
.qa-tile .qa-ico{font-size:24px;line-height:1}
.qa-tile small{font-size:11px;font-weight:500;color:var(--muted)}.qa-tile small.qa-kept{color:#946422;font-weight:650}
.qa-photo input{position:absolute;inset:0;width:100%;height:100%;min-height:0;opacity:0;cursor:pointer}
.qa-time-said{margin:4px 0 10px;color:var(--ink);font-weight:600}
.qa-time-acts{display:grid;gap:8px}.qa-time-acts .qa-big{min-height:52px;font-size:15px}
.qa-sheet-foot{margin-top:12px}
.qa-find{width:100%;margin:6px 0 10px}.qa-opts{display:flex;flex-direction:column;gap:6px}
.qa-opt{display:flex;flex-direction:column;align-items:flex-start;gap:1px;width:100%;min-height:44px;padding:8px 12px;border:1px solid var(--line);border-radius:8px;background:#fff;text-align:left;color:var(--ink)}
.qa-opt:hover,.qa-opt:focus-visible{border-color:var(--accent);background:#f3fafd}.qa-opt strong{font-size:13px;overflow-wrap:anywhere}.qa-opt small{color:var(--muted);font-size:12px}
.qa-on-job{margin:4px 0 8px}
.qa-drafts{margin-top:14px}.qa-drafts .section-label{margin:8px 0}
.qa-draft-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 0;border-top:1px solid #edf0f4}.qa-draft-row>div:first-child{min-width:0}.qa-draft-row small{display:block;color:var(--muted);overflow-wrap:anywhere}.qa-draft-row .actions{flex:none;flex-wrap:nowrap}
.qa-form .field{margin:0 0 12px}
.qa-form textarea{min-height:96px;font-size:15px}
.qa-ways,.qa-pri,.qa-jc{border:0;padding:0;margin:0 0 12px;min-width:0}.qa-ways legend,.qa-pri legend,.qa-jc legend{font-size:12px;color:#566679;padding:0;margin-bottom:6px}
.qa-ways .chip,.qa-pri .chip,.qa-jc .chip{min-height:44px;padding:10px 14px;font-size:14px}
.qa-ways .chip:has(input:checked),.qa-pri .chip:has(input:checked),.qa-jc .chip:has(input:checked){background:#e8f5fb;border-color:#b5dcec;color:#117da8;font-weight:650}
.qa-jc small{display:block;margin-top:6px}
.qa-draft{margin:0 0 12px}
.qa-trouble{margin:6px 0 0;padding:10px 12px;border-radius:8px;background:#fff3dc;color:#6b4a12;font-size:13px}.qa-trouble p{margin:0 0 6px;color:inherit}.qa-trouble .actions{margin-top:6px}.qa-trouble[hidden]{display:none}
.qa-newer{font-style:italic}
#fc-form[data-qa-key] .fc-sub{display:none}  /* the chips say it */
.md-acts:has(.qa-stop){grid-template-columns:repeat(2,minmax(0,1fr)) minmax(0,1.45fr) repeat(3,minmax(0,1fr))}  /* My Day's stop: ＋ Add after Problem */
@media(pointer:coarse),(max-width:720px){
 .qa-head{display:none}  /* the round ＋ instead */
 .qa-fab{position:fixed;z-index:45;right:calc(max(14px,env(safe-area-inset-right)) + 5px);bottom:calc(86px + env(safe-area-inset-bottom) + var(--qc-lift,0px));display:grid;place-items:center;width:48px;height:48px;min-height:0;padding:0;border-radius:50%;background:var(--navy);color:#fff;border:3px solid #fff;font-size:24px;font-weight:700;line-height:1;box-shadow:0 8px 22px #0b182955,0 1px 3px #0b182940}
 .qa.qa-solo .qa-fab{bottom:calc(16px + env(safe-area-inset-bottom) + var(--qc-lift,0px));right:max(14px,env(safe-area-inset-right));width:58px;height:58px;font-size:28px}
 .qa-fab[hidden],.qa.qa-away .qa-fab,.qa.qa-over-form .qa-fab{display:none}
 .qa-fab:active{transform:scale(.94)}.qa-fab:focus-visible{outline:3px solid #f7b500;outline-offset:2px}
 .qa-n{position:absolute;top:-6px;right:-6px;min-width:20px;height:20px;padding:0 5px;border-radius:999px;background:#f7b500;color:var(--navy);font-size:11px;font-weight:800;display:grid;place-items:center;border:2px solid #fff}.qa-n[hidden]{display:none}
 .qa-sheet{top:auto;left:0;right:0;bottom:0;width:auto;max-height:85vh;border-radius:16px 16px 0 0;padding:14px 16px calc(16px + env(safe-area-inset-bottom));box-shadow:0 -14px 44px #16294240}
 body.qa-sheet-open .qc-fab,body:has(#drawer:not([hidden]) form[data-qa-key]) .qc-fab{display:none}  /* a quick form has its own 📷 */
 body.qa-on .qc-toast{bottom:calc(146px + env(safe-area-inset-bottom) + var(--qc-lift,0px))}  /* messages above both buttons */
 body.qa-on:not(:has(#drawer:not([hidden]))) #toast{bottom:calc(146px + env(safe-area-inset-bottom))}
 body.qa-on .main{padding-bottom:156px}body.qa-on:not(:has(#drawer:not([hidden]) .form-actions)):not(.viewer-open) #drawer{padding-bottom:calc(156px + env(safe-area-inset-bottom))}
 .md-acts:has(.qa-stop){grid-template-columns:repeat(3,minmax(0,1fr))}}  /* My Day's six in two rows of three */
@media(prefers-reduced-motion:no-preference){.qa-sheet:not([hidden]){animation:lb-rise .18s ease-out}}
@media print{.qa{display:none!important}}
/* COLW: a sheet's column widths, dragged at the right edge of a column's name or fitted to its words (sheets.js) */
table.sheet th .col-th{padding-right:10px}
table.sheet th .colw-grip{position:absolute;top:0;right:0;width:7px;height:100%;cursor:col-resize;touch-action:none;z-index:1}
table.sheet th .colw-grip::after{content:'';position:absolute;top:7px;bottom:7px;right:2px;width:2px;border-radius:1px;background:transparent}
table.sheet th:hover .colw-grip::after{background:#d5dde6}
table.sheet th .colw-grip:hover::after,table.sheet th.colw-on .colw-grip::after{background:var(--accent)}
body.colw-dragging,body.colw-dragging *{cursor:col-resize!important;user-select:none;-webkit-user-select:none}
@media (pointer:coarse){table.sheet th .colw-grip{width:16px}table.sheet th .col-th{padding-right:18px}}
/* INTRO-01: the galaxy intro (the robot's symbols in index.html, intro.js). The galaxy's own
   colours, for these two screens only, are the --gx- properties here; LB's logo is drawn as everywhere (logo()), on its own
   white. Every animation and transition is written for no-preference: with reduced motion the stars stay still, nothing
   zooms, and the intro is one still frame. Transforms and opacity only. */
:root{--gx-space:#050917;--gx-deep:#0a1230;--gx-navy:#111d4a;--gx-violet:#2b145c;--gx-nebula:#7c4dff3d;--gx-nebula-2:#2494c438;--gx-core:#5fe3ff1c;
 --gx-cyan:#5fe3ff;--gx-cyan-soft:#b4f3ff;--gx-cyan-glow:#5fe3ff59;--gx-violet-glow:#7c4dff47;--gx-ink:#eef3ff;--gx-muted:#a7b4d6;--gx-edge:#ffffff40;--gx-glass:#ffffff12;--gx-glass-hi:#ffffff26;
 --gx-shell:#fff;--gx-shell-mid:#eef3f9;--gx-shell-low:#cfdae8;--gx-trim:#b8c6d8;--gx-visor:#0f1a34;--gx-visor-hi:#1d2f5c;
 --gx-holo:#5fe3ff12;--gx-holo-line:#5fe3ff8c;--gx-holo-dim:#5fe3ff33;--gx-amber:#ffc857;--gx-amber-ink:#5a3b00;--gx-paper:#f4f8ff;--gx-paper-line:#9fb3cf;
 --gx-box:#c9a36b;--gx-box-tape:#a07a45;--gx-blueprint:#1f4f8f;--gx-pink:#ff6b8b;--gx-lilac:#b49cff;--gx-star:#ffffff;--gx-star-2:#cfe2ff;--ib-away:cubic-bezier(.55,0,.2,1);--ib-come:cubic-bezier(.2,.75,.25,1);--gx-scrim:#050917c7;--gx-scrim-deep:#050917eb;--gx-button:#0b1433d9}
.ib-sprite{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none}
/* The robot: white shell, dark visor, cyan eyes, the headset in LB's blue, hands that float at its sides */
.ib-s1{stop-color:var(--gx-shell)}.ib-s2{stop-color:var(--gx-shell-mid)}.ib-s3{stop-color:var(--gx-shell-low)}.ib-v1{stop-color:var(--gx-visor-hi)}.ib-v2{stop-color:var(--gx-visor)}
.ib-gl1{stop-color:var(--gx-cyan);stop-opacity:.55}.ib-gl2{stop-color:var(--gx-cyan);stop-opacity:0}.ib-c1{stop-color:var(--gx-cyan);stop-opacity:.24}.ib-c2{stop-color:var(--gx-lilac);stop-opacity:.1}.ib-c3{stop-color:var(--gx-lilac);stop-opacity:0}
.ib-glow,.ib-eyeglow{fill:url(#ib-g-glow)}.ib-eyeglow{opacity:.5}.ib-stem{stroke:var(--gx-trim);stroke-width:3.5;stroke-linecap:round}.ib-tip,.ib-eye,.ib-led{fill:var(--gx-cyan)}.ib-led2{fill:var(--gx-cyan-soft);opacity:.7}
.ib-band,.ib-mic{fill:none;stroke:var(--accent);stroke-linecap:round}.ib-band{stroke-width:5}.ib-mic{stroke-width:3}.ib-ear{fill:var(--accent)}.ib-mictip,.ib-chest{fill:var(--gx-visor)}
.ib-shell,.ib-hand{fill:url(#ib-g-shell)}.ib-hand{stroke:var(--gx-trim);stroke-width:1.2}.ib-handhi{fill:var(--gx-shell);opacity:.9}.ib-neck{fill:var(--gx-trim)}.ib-visor{fill:url(#ib-g-visor)}
.ib-gloss{fill:none;stroke:var(--gx-shell);stroke-opacity:.35;stroke-width:3;stroke-linecap:round}.ib-smile{fill:none;stroke:var(--gx-cyan);stroke-width:2.6;stroke-linecap:round}
.ib-ping{fill:none;stroke:var(--gx-cyan);stroke-width:2;opacity:0}.ib-desk{fill:var(--gx-holo);stroke:var(--gx-holo-line);stroke-width:1.6;stroke-linejoin:round}.ib-keys{fill:none;stroke:var(--gx-cyan);stroke-width:3;stroke-dasharray:7 4;opacity:.55}
/* Its holographic panels: a job's numbers, the installed ring, a shade in its window, the week */
.ib-pane{fill:var(--gx-holo);stroke:var(--gx-holo-line);stroke-width:1.6}.ib-pane-hi{stroke:var(--gx-cyan);stroke-width:3;stroke-linecap:round;opacity:.8}
.ib-ptitle{font-size:15px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;fill:var(--gx-cyan-soft)}.ib-big{font-size:42px;font-weight:750;fill:var(--gx-ink)}.ib-small{font-size:15px;fill:var(--gx-muted)}
.ib-mid{font-weight:750;fill:var(--gx-ink)}.ib-day{font-size:13px;font-weight:700;fill:var(--gx-muted)}.ib-tag{font-size:21px;font-weight:650;fill:var(--gx-ink)}
.ib-bar{fill:var(--gx-cyan);opacity:.85}.ib-bar.ib-d3,.ib-bar.ib-d5{fill:var(--gx-lilac)}.ib-axis{stroke:var(--gx-holo-line);stroke-width:1.5}
.ib-track{fill:none;stroke:var(--gx-holo-dim);stroke-width:12}.ib-arc{fill:none;stroke:var(--gx-cyan);stroke-width:12;stroke-linecap:round}.ib-none{fill:none}.ib-spark{fill:var(--gx-shell)}
.ib-frame{fill:none;stroke:var(--gx-trim);stroke-width:4}.ib-glass{fill:var(--gx-holo)}.ib-tube{fill:var(--gx-shell-mid)}.ib-fabric{fill:var(--gx-lilac);opacity:.75}.ib-hem{fill:var(--gx-shell-low)}
.ib-cord{stroke:var(--gx-trim);stroke-width:2}.ib-bead{fill:var(--gx-trim)}.ib-cell{fill:var(--gx-holo);stroke:var(--gx-holo-dim);stroke-width:1}.ib-book{opacity:.9}.ib-b1{fill:var(--gx-cyan)}.ib-b2{fill:var(--gx-amber)}.ib-b3{fill:var(--gx-lilac)}
.ib-now{stroke:var(--gx-shell);stroke-width:2.5;stroke-dasharray:5 4}
/* What the ten work at */
.ib-paper{fill:var(--gx-paper)}.ib-lines,.ib-calgrid{fill:none;stroke:var(--gx-paper-line);stroke-width:4;stroke-linecap:round}.ib-calgrid{stroke-width:1.5}.ib-coin,.ib-tapecase{fill:var(--gx-amber)}
.ib-coin-t{font-size:22px;font-weight:800;fill:var(--gx-amber-ink)}.ib-cash{font-size:40px;font-weight:800;fill:var(--gx-blueprint)}.ib-tape{stroke:var(--gx-amber);stroke-width:7}.ib-ticks{stroke:var(--gx-amber-ink);stroke-width:2}
.ib-blue{fill:var(--gx-blueprint)}.ib-bgrid{fill:none;stroke:var(--gx-cyan);stroke-width:1;opacity:.35}.ib-walls{fill:none;stroke:var(--gx-cyan-soft);stroke-width:3}.ib-pin1{fill:var(--gx-pink)}.ib-pin2{fill:var(--gx-amber)}.ib-pin3{fill:var(--gx-cyan)}
.ib-box{fill:var(--gx-box);stroke:var(--gx-box-tape);stroke-width:2}.ib-boxtape{stroke:var(--gx-box-tape);stroke-width:5}.ib-po{fill:var(--gx-holo);stroke:var(--gx-cyan);stroke-width:2}.ib-po-t{font-size:14px;font-weight:800;fill:var(--gx-cyan-soft)}
.ib-cargo{fill:var(--gx-shell)}.ib-stripe{stroke:var(--accent);stroke-width:7}.ib-cab{fill:var(--accent)}.ib-cabwin{fill:var(--gx-cyan-soft)}.ib-wheel{fill:var(--gx-visor);stroke:var(--gx-trim);stroke-width:3}
.ib-calhead{fill:var(--accent)}.ib-callit{fill:var(--gx-cyan)}.ib-check{fill:none;stroke:var(--gx-visor);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.ib-paid{fill:var(--gx-cyan)}
.ib-cam{fill:var(--gx-visor-hi);stroke:var(--gx-trim);stroke-width:2}.ib-lens{fill:var(--gx-visor);stroke:var(--gx-cyan);stroke-width:4}.ib-lens2{fill:var(--gx-cyan);opacity:.5}.ib-flash{stroke:var(--gx-amber);stroke-width:4;stroke-linecap:round}
/* The galaxy: its glowing core, three arms of dust and the ring around the logo */
.ib-core{fill:url(#ib-g-core)}.ib-arm{fill:none;stroke:var(--gx-lilac);stroke-linecap:round;stroke-linejoin:round;opacity:.035}.ib-arm2,.ib-arm3,.ib-arm4{stroke:var(--gx-cyan)}.ib-arm4{stroke:var(--gx-cyan-soft);opacity:.06}
.ib-dust0{fill:var(--gx-star);opacity:.8}.ib-dust1{fill:var(--gx-cyan-soft);opacity:.6}.ib-dust2{fill:var(--gx-lilac);opacity:.6}.ib-orbitline{fill:none;stroke:var(--gx-holo-line);stroke-width:1.5;stroke-dasharray:3 9}
/* Deep space, both screens: navy to violet, two nebulae, and two layers of small stars, the brighter one twinkling where motion is welcome */
.intro{background:radial-gradient(ellipse 60% 48% at 80% 16%,var(--gx-nebula),transparent 70%),radial-gradient(ellipse 55% 45% at 14% 84%,var(--gx-nebula-2),transparent 70%),radial-gradient(circle at 50% 44%,var(--gx-core),transparent 46%),linear-gradient(165deg,var(--gx-space) 0%,var(--gx-deep) 36%,var(--gx-navy) 66%,var(--gx-violet) 100%);color:var(--gx-ink);isolation:isolate;overflow:hidden}
.intro::before,.intro::after{content:'';position:absolute;inset:0;z-index:-1;pointer-events:none}
.intro::before{background:radial-gradient(1.4px 1.4px at 22px 34px,var(--gx-star),transparent),radial-gradient(1px 1px at 128px 86px,var(--gx-star-2),transparent),radial-gradient(1.6px 1.6px at 196px 18px,var(--gx-star),transparent),radial-gradient(1px 1px at 64px 168px,var(--gx-star),transparent),radial-gradient(1.2px 1.2px at 170px 204px,var(--gx-star-2),transparent),radial-gradient(1px 1px at 230px 126px,var(--gx-star),transparent);background-size:250px 250px}
.intro::after{background:radial-gradient(1.8px 1.8px at 60px 70px,var(--gx-cyan-soft),transparent),radial-gradient(1.2px 1.2px at 300px 40px,var(--gx-star),transparent),radial-gradient(1px 1px at 210px 290px,var(--gx-star-2),transparent),radial-gradient(1.5px 1.5px at 330px 220px,var(--gx-star),transparent),radial-gradient(1px 1px at 110px 330px,var(--gx-star),transparent);background-size:380px 380px;opacity:.75}
/* The loading screen: what shows before the app's first drawing, which replaces it */
/* The intro: a layer over everything, Skip at the top, the stage, the words, Let's go */
body.intro-open{overflow:hidden}
.intro{position:fixed;inset:0;z-index:80;display:flex;flex-direction:column}
.intro-top{position:relative;z-index:2;display:flex;justify-content:flex-end;padding:max(12px,env(safe-area-inset-top)) 16px 0}
.intro-stage{position:relative;flex:1 1 auto;min-height:0;container-type:size}
@media(prefers-reduced-motion:no-preference){.intro-stage{transition:opacity .4s ease}}
/* round and round until Enter (INTRO-02): the stage dims at the end of each round, the one robot is put back while it is
   dark (snap: no zoom back through the hundred and the ten), and it lights again */
.intro[data-fade] .intro-stage{opacity:0}
.intro[data-snap] .intro-stage *{transition-duration:0s!important;transition-delay:0s!important}
.intro-layer,.intro-galaxy{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.intro-plate{--pw:min(20vw,30vh);position:absolute;left:50%;top:50%;width:var(--pw);padding:calc(var(--pw)*.045) calc(var(--pw)*.06);border-radius:18px;background:var(--gx-shell);box-shadow:0 0 0 2px var(--gx-cyan-glow),0 0 34px 6px var(--gx-cyan-glow),0 0 110px 30px var(--gx-violet-glow)}
.intro[data-shape="tall"] .intro-plate{--pw:min(34vw,24vh)}
@supports (width:1cqw){.intro-plate{--pw:min(21.67cqw,38.24cqh)}.intro[data-shape="tall"] .intro-plate{--pw:min(36.11cqw,28.26cqh)}}  /* 260 of the drawing's units, so it fits inside the ring of ten */
.intro-plate .logo-window{width:100%}
.intro-ring{--rw:min(50vw,88vh);inset:auto;left:50%;top:50%;width:var(--rw);height:var(--rw);margin:calc(var(--rw)/-2) 0 0 calc(var(--rw)/-2)}
.intro[data-shape="tall"] .intro-ring{--rw:min(80vw,62vh)}
@supports (width:1cqw){.intro-ring{--rw:min(50cqw,88.24cqh)}.intro[data-shape="tall"] .intro-ring{--rw:min(83.33cqw,65.22cqh)}}  /* 600 of the drawing's units each way, centred */
.intro-bottom{position:relative;z-index:1;isolation:isolate}
.intro-bottom::before,.intro-bottom::after{content:'';position:absolute;inset:0;z-index:-1;pointer-events:none}
.intro-bottom::before{background:radial-gradient(ellipse 46% 62% at 50% 46%,var(--gx-scrim-deep) 35%,transparent 80%),linear-gradient(to bottom,transparent,var(--gx-scrim) 40px)}
.intro-bottom::after{top:auto;bottom:100%;height:72px;background:linear-gradient(to bottom,transparent,var(--gx-scrim));opacity:0}  /* the shade reaches up into the stage only once the galaxy spills down behind the words */
.intro[data-scene="3"] .intro-bottom::after,.intro[data-scene="still"] .intro-bottom::after{opacity:1}
.intro[data-scene="3"] .intro-bottom::before,.intro[data-scene="still"] .intro-bottom::before{background:radial-gradient(ellipse 46% 62% at 50% 46%,var(--gx-scrim-deep) 35%,transparent 80%),linear-gradient(var(--gx-scrim),var(--gx-scrim))}  /* one shade, no seam where the two meet */
.intro-words{display:grid;place-items:center;padding:4px 20px 0;text-align:center}
.intro-line{grid-area:1/1;margin:0;max-width:28ch;font-size:clamp(22px,1.3vw + 15px,38px);line-height:1.22;font-weight:650;letter-spacing:-.01em;color:var(--gx-ink);text-wrap:balance;text-shadow:0 1px 14px var(--gx-space);opacity:0}
.intro[data-scene="1"] .intro-line[data-n="1"],.intro[data-scene="2"] .intro-line[data-n="2"],.intro[data-scene="3"] .intro-line[data-n="3"]{opacity:1}
.intro[data-scene="still"] .intro-words{display:block}
.intro[data-scene="still"] .intro-line{opacity:1;max-width:30ch;margin:0 auto .35em;font-size:clamp(18px,.9vw + 14px,28px)}
.intro-count{display:flex;justify-content:center;gap:8px;margin:12px 0 0;padding:0;list-style:none}
.intro-count li{min-width:44px;padding:3px 10px;border-radius:999px;border:1px solid var(--gx-edge);color:var(--gx-muted);font-size:12px;font-weight:750;text-align:center;font-variant-numeric:tabular-nums}
.intro[data-scene="1"] .intro-count [data-n="1"],.intro[data-scene="2"] .intro-count [data-n="2"],.intro[data-scene="3"] .intro-count [data-n="3"]{color:var(--gx-space);background:var(--gx-cyan);border-color:var(--gx-cyan)}
.intro[data-scene="still"] .intro-count{display:none}
.intro-say{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.intro-foot{display:flex;justify-content:center;align-items:center;min-height:88px;padding:12px 16px max(18px,env(safe-area-inset-bottom))}
.intro-go{min-height:48px;min-width:168px;padding:0 30px;border-radius:999px;font-size:16px;box-shadow:0 0 0 1px var(--gx-cyan-glow),0 8px 30px var(--gx-cyan-glow)}
.intro:not([data-done]) .intro-go{visibility:hidden;opacity:0}
.intro[data-closing]{opacity:0;pointer-events:none}
.intro[data-closing] *{animation-play-state:paused}
.intro-again-line{margin:0 0 12px}
/* Zooming out: the one, then the ten around it, then the hundred around the logo (each a whole layer that scales and fades) */
.intro-crew,.intro-galaxy,.intro-plate{opacity:0;visibility:hidden}
.intro-crew{transform:scale(1.55)}.intro-galaxy{transform:scale(1.45)}.intro-plate{transform:translate(-50%,-50%) scale(1.2)}
.intro[data-scene="2"] .intro-hero{transform:scale(.38)}.intro[data-scene="2"] .ib-panels{opacity:0}
.intro[data-scene="2"] .intro-crew{opacity:1;visibility:visible;transform:none}
.intro[data-scene="3"] .intro-hero,.intro[data-scene="still"] .intro-hero{opacity:0;visibility:hidden;transform:scale(.12)}
.intro[data-scene="3"] .intro-crew{transform:scale(.3)}
.intro[data-scene="3"] .intro-galaxy,.intro[data-scene="still"] .intro-galaxy{opacity:1;visibility:visible;transform:none}
.intro[data-scene="3"] .intro-plate,.intro[data-scene="still"] .intro-plate{opacity:1;visibility:visible;transform:translate(-50%,-50%)}
@media (max-width:640px){.ib-tag{display:none}}
.intro[data-shape="tall"] .ib-ptitle{font-size:19px}.intro[data-shape="tall"] .ib-big{font-size:50px}.intro[data-shape="tall"] .ib-small{font-size:17px}
/* Where the parts turn and grow from */
.ib-blink,.ib-ping,.ib-orbit{transform-box:fill-box;transform-origin:50% 50%}.ib-bar,.ib-pop{transform-box:fill-box;transform-origin:50% 100%}.ib-roll{transform-box:fill-box;transform-origin:50% 0}
.ib-d0{--i:0}.ib-d1{--i:1}.ib-d2{--i:2}.ib-d3{--i:3}.ib-d4{--i:4}.ib-d5{--i:5}.ib-d6{--i:6}.ib-d7{--i:7}.ib-d8{--i:8}
@media (prefers-reduced-motion:no-preference){
 .intro::after{animation:ib-twinkle 5.6s steps(14) infinite alternate}  /* a slow twinkle in small steps: the screen is drawn again a few times a second, not at every frame */
 .intro{animation:ib-in .45s ease-out;transition:opacity .2s ease}
 .intro-hero,.intro-crew,.intro-galaxy,.intro-plate,.ib-panels{transition:transform 1.6s var(--ib-away),opacity .9s ease,visibility 0s linear 1.6s}
 .intro[data-scene="2"] .intro-crew,.intro[data-scene="3"] .intro-galaxy,.intro[data-scene="3"] .intro-plate{transition:transform 1.8s var(--ib-come),opacity 1.1s ease .15s,visibility 0s}
 .intro-line,.intro-bottom::after{transition:opacity .5s ease}
 .intro-go{transition:opacity .45s ease,visibility 0s}
 .intro[data-scene="3"] .intro-ring{animation:ib-spin 60s linear infinite reverse}
 .intro .intro-hero .ib-blink{animation:ib-blink 5.2s ease-in-out -1.5s infinite}
 .intro .intro-hero .ib-tap{animation:ib-tap .44s ease-in-out calc(var(--i,0)*-.1s) infinite alternate}
 .intro .intro-hero .ib-ping{animation:ib-ping 2.6s ease-out infinite}
 .intro .intro-hero .ib-pop{animation:ib-pop .7s var(--ib-come) calc(.25s + var(--i,0)*.14s) both}
 .intro .intro-hero .ib-bar{animation:ib-grow 2.6s ease-in-out calc(var(--i,0)*-.43s) infinite alternate}
 .intro .intro-hero .ib-orbit{animation:ib-spin 4s linear infinite}
 .intro .intro-hero .ib-roll{animation:ib-roll 4.4s ease-in-out infinite alternate}
 .intro .intro-hero .ib-scan{animation:ib-scan 6s linear infinite}
 .intro[data-scene="3"] .intro-hero *,.intro[data-scene="still"] .intro-hero *{animation-play-state:paused}}
@keyframes ib-in{from{opacity:0}to{opacity:1}}
@keyframes ib-twinkle{from{opacity:.3}to{opacity:1}}
@keyframes ib-spin{to{transform:rotate(360deg)}}
@keyframes ib-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
@keyframes ib-blink{0%,96%,100%{transform:scaleY(1)}98%{transform:scaleY(.1)}}
@keyframes ib-tap{from{transform:translateY(0)}to{transform:translateY(-5px)}}
@keyframes ib-ping{from{transform:scale(.6);opacity:.8}to{transform:scale(2.6);opacity:0}}
@keyframes ib-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
@keyframes ib-pop{from{opacity:0;transform:translateY(16px) scale(.94)}to{opacity:1;transform:none}}
@keyframes ib-grow{from{transform:scaleY(.45)}to{transform:scaleY(1)}}
@keyframes ib-roll{from{transform:scaleY(1)}to{transform:scaleY(.32)}}
@keyframes ib-scan{from{transform:translateX(0)}to{transform:translateX(150px)}}
.intro-note{margin-right:auto;align-self:center;font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--gx-muted)}  /* the corner's Illustration: nothing in the intro is real work */
/* INTRO-01 end */
/* The loading screen (Jordan, October 9, 2026: "keep it simple with the loading screen (if any) we really shouldnt have
   loading screens"; LB is construction management): LB's logo and the words on the page's own ground, shown only once a
   load has taken more than half a second, so a quick one shows nothing at all. Nothing moves but the small turning ring
   the other loading words have. */
.boot{position:fixed;inset:0;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:16px;background:var(--surface);animation:boot-show 0s .5s both}
body.mockup-db .boot{top:var(--band)}
.boot-logo{width:min(60vw,240px);height:auto}
.boot .loading{justify-content:center;margin:0;font-size:14px}
@keyframes boot-show{from{visibility:hidden}to{visibility:visible}}
/* CREW-01: who fits a piece of work (crew.js), in the work order's Schedule form, the task's panel and the dispatch board's
   side panel, and the question when a save goes over a conflict. Each reason has its icon and words, never colour alone. */
.crew-box{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:12px 0 0;background:#fbfcfd}
.crew-inner.loading{opacity:.6}.crew-wait{margin:4px 0}
.crew-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px;color:var(--ink)}.crew-head small{color:var(--muted)}
.crew-why,.crew-list,.crew-plain,.crew-notes{list-style:none;margin:4px 0;padding:0}
.crew-r{display:flex;gap:6px;align-items:flex-start;padding:2px 0;line-height:1.4;color:var(--ink);overflow-wrap:anywhere}
.crew-ico{flex:0 0 18px;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font-size:11px;font-weight:700;background:#edf1f5;color:#566679;margin-top:1px}
.crew-r.good .crew-ico{background:#e8f5ee;color:#2d7350}.crew-r.bad .crew-ico{background:#fdecec;color:#a53032}.crew-r.unknown .crew-ico{background:#fff3dc;color:#946422}
.crew-r-pts{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.crew-p{border-top:1px solid var(--line);padding:8px 0}.crew-list .crew-p:first-child,.crew-plain .crew-p:first-child{border-top:0}
.crew-p-head{display:flex;align-items:center;gap:6px 8px;flex-wrap:wrap}.crew-name{flex:1 1 160px;min-width:0;color:var(--ink)}.crew-name small{display:block;color:var(--muted);margin-top:1px}
.crew-pts{font-size:11px;font-weight:600;color:#2d7350;border:1px solid #cbe8d6;border-radius:20px;padding:1px 8px;white-space:nowrap;font-variant-numeric:tabular-nums}
.crew-add{min-height:36px;padding:4px 12px;white-space:nowrap}.crew-more{margin:2px 0 4px}
.crew-need{border-left:3px solid #a53032;background:#fff;border-radius:6px;padding:8px 10px;margin:8px 0}.crew-need p{margin:0;color:var(--ink)}.crew-need .field{margin:8px 0 4px}.crew-need>small{display:block}
.crew-apart,.crew-before{margin:6px 0 0}.crew-apart summary,.crew-before summary{cursor:pointer;padding:6px 0;font-weight:600;color:var(--ink)}
.crew-plain li{padding:4px 0}.crew-plain li>small{display:block;color:var(--muted);line-height:1.4}
.crew-notes{margin-top:6px}.crew-foot{margin:6px 0 0;font-size:11px}
.crew-ask>p{color:var(--ink)}.crew-ask .crew-why{margin:8px 0 12px}
.crew-rule{align-items:flex-start}.crew-rule input{flex:none;margin-top:3px}.crew-rule small{display:block;color:var(--muted);margin-top:2px}.crew-mph input{max-width:120px}
#crew-settings td small{display:block;color:var(--muted)}#crew-settings td input{max-width:150px}
@media(max-width:720px){.crew-box{padding:8px 10px}.crew-add{min-height:44px;padding:8px 14px}.crew-p-head{align-items:flex-start}.crew-pts{order:3}}
/* BRIEF-01: the daily briefing (briefing.js): Operations → Briefing and the Home card. Each severity has its word and an
   icon (Act now, Soon, Not known), the coloured edge only beside them; every link a big target on a phone. */
.brf-bar{margin:0 0 8px}.brf-bar .chips button,.brf-bar>button{min-height:40px}.brf-branch select{min-width:180px}.brf-scope{font-size:12px;align-self:center}
.brf-built{margin:0 0 4px;color:#3d4b5c}.brf-sources{list-style:none;margin:0 0 8px;padding:0;display:flex;flex-wrap:wrap;gap:4px 16px;font-size:12px;color:var(--muted)}.brf-sources .stale{color:#946422;font-weight:600}
.brf-counts{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 12px}.brf-counts .pill{font-size:11px}
.brf-sec{padding:14px 16px}.brf-sec-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px 16px;flex-wrap:wrap;margin-bottom:10px}.brf-sec-head h2{margin:0}
.brf-fresh{font-size:11px}.brf-fresh.stale{color:#946422;font-weight:600}.brf-empty{margin:0;color:#3d4b5c}.brf-empty span{color:#1e8a55;font-weight:700}
.brf-list{list-style:none;margin:0;padding:0}
.brf-item{border:1px solid #cfd8e2;border-left:4px solid #8a97a6;border-radius:8px;padding:10px 12px;margin:0 0 10px;background:#fff;min-width:0;overflow-wrap:anywhere}
.brf-item.sev-high{border-left-color:#c8454a}.brf-item.sev-medium{border-left-color:#e2a13b}
.brf-top{display:flex;align-items:baseline;gap:6px 8px;flex-wrap:wrap}.brf-what{font-size:14px;line-height:1.35}.brf-job{font-size:12px}.brf-sev{flex:none}
.brf-why{margin:4px 0;color:#3d4b5c;line-height:1.5}.brf-who{margin:4px 0;font-size:12px;color:#3d4b5c;line-height:1.5}.brf-meta{margin:2px 0;font-size:12px;line-height:1.4}.brf-meta small{font-size:11px}
.brf-parts{margin:4px 0 6px;padding-left:18px;font-size:12px;color:#3d4b5c}.brf-parts li{margin:3px 0}.brf-parts small{display:block;line-height:1.45}.brf-state{color:#946422;font-weight:600}
.brf-money{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;margin:4px 0;font-size:12px}.brf-money .brf-from{flex-basis:100%}.brf-money.stale .brf-from{color:#946422;font-weight:600}
.brf-acts{margin-top:6px}button.brf-link{border:1px solid #cfd8e2;background:#fff;color:#117da8;min-height:40px;padding:6px 12px;font-weight:600}
.brf-clean{border-left:4px solid #1e8a55}.brf-clean strong span,.brf-clean-line span{color:#1e8a55}.brf-risk{margin:4px 0 16px;color:#3d4b5c}.brf-risk button{min-height:40px}
.brf-card-head{margin:0 0 6px;font-size:12px}.brf-compact .brf-item{padding:8px 10px;margin-bottom:8px}.brf-compact .brf-why{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.brf-card-foot{display:flex;justify-content:flex-end;margin-top:4px}button.brf-more{color:#117da8;font-weight:600;min-height:40px}.brf-clean-line{color:#3d4b5c}
@media(max-width:720px){.brf-bar{align-items:stretch}.brf-bar .chips{width:100%}.brf-bar .chips button{flex:1}.brf-branch,.brf-branch select{width:100%;min-width:0}
 .brf-sec{padding:12px}button.brf-link,button.brf-more{width:100%;min-height:44px}.brf-what{font-size:15px}}
/* SCANRECV-01: the Scan screen (scan.js), its cards, label buttons, equipment checkout and delivery reconciliation */
button.scan-top{display:inline-flex;align-items:center;gap:6px;padding:8px 10px;border-color:#b5dcec;background:#f2f9fd;color:#11729b;white-space:nowrap}
button.scan-top:hover{background:#e8f5fb}.scan-mark,.scan-btn span[aria-hidden]{font-weight:700}
@media(max-width:720px){button.scan-top{min-width:44px;min-height:44px;justify-content:center;padding:8px 12px;font-size:16px;margin-right:4px}button.scan-top .scan-top-words{display:none}}
.scan-cam{position:relative;width:100%;aspect-ratio:4/3;max-height:52vh;background:#172b42;border-radius:var(--radius);overflow:hidden;margin:0 0 10px}
.scan-cam[hidden]{display:none}.scan-cam video{width:100%;height:100%;object-fit:cover;display:block}
.scan-aim{position:absolute;left:50%;top:50%;width:min(62%,260px);aspect-ratio:1;transform:translate(-50%,-50%);border:3px solid #ffffff;border-radius:14px;box-shadow:0 0 0 999px #0b182966}
.scan-say{margin:0 0 10px;padding:10px 12px;border-radius:8px;background:#f3fafd;color:#11729b;font-size:13px;line-height:1.5}
.scan-say.warn{background:#fff8e6;color:#8a5a12}.scan-say.bad{background:#fdecec;color:#a6343a}.scan-say.good{background:#e8f5ee;color:#2d7350}
.scan-acts{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}.scan-acts>*{flex:1 1 150px;min-height:48px;font-size:14px}
.scan-photo-btn{display:flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--line);border-radius:8px;background:white;color:var(--ink);font-weight:600;cursor:pointer;padding:9px 13px}
.scan-photo-btn:hover{background:#eff5f8}
.scan-type{display:flex;gap:8px;align-items:flex-end}.scan-type .field{flex:1;min-width:0}.scan-type input{font-size:16px;letter-spacing:.02em}.scan-type button{min-height:44px}
.scan-answer:empty{display:none}.scan-answer{margin:12px 0}.scan-q{font-size:16px}.scan-results{margin-top:8px}
.scan-row{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:10px;row-gap:2px;width:100%;text-align:left;min-height:52px;margin:0 0 6px;padding:9px 12px;font-weight:500}
.scan-row strong{overflow-wrap:anywhere}.scan-row small{grid-column:2;color:var(--muted);overflow-wrap:anywhere}
.scan-kind{grid-row:span 2;align-self:center;font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:#117da8;background:#e8f5fb;border-radius:20px;padding:3px 8px;white-space:nowrap}
.scan-card dl{margin:8px 0 12px}.scan-state{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 6px}.scan-state small{color:var(--muted)}
.scan-history{list-style:none;margin:0;padding:0}.scan-history li{padding:8px 0;border-bottom:1px solid var(--line)}.scan-history li:last-child{border:0}
.scan-history small{display:block;color:var(--muted)}.scan-history .scan-when{font-size:11px;margin-bottom:2px}
.eq-out{border:1px solid #9fcbe0;border-left:3px solid #117da8;border-radius:8px;background:#f3fafd;padding:10px 12px;margin:10px 0}.eq-out.late{border-color:#d9534f;border-left-color:#a6343a;background:#fdecec}
.eq-out p{margin:0 0 4px}.eq-out-list{list-style:none;margin:0;padding:0}.eq-out-list li{padding:7px 0;border-bottom:1px solid var(--line);font-size:12px}.eq-out-list li:last-child{border:0}.eq-out-list small{display:block;color:var(--muted)}
.floor-labels{margin-left:8px;padding:2px 8px;min-height:0;font-size:11px;font-weight:600;text-transform:none;letter-spacing:0}
.warehouse .wf-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.warehouse .wf-head-words{min-width:0;flex:1 1 320px}.warehouse .wf-scan{margin:4px 0 12px}
.ship-checks .ship-pack{display:flex;align-items:flex-start;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}.ship-checks .ship-pack input{width:22px;height:22px;min-height:0;flex:none;margin-top:1px}
.ship-pack span{min-width:0}.ship-pack strong{display:block}.ship-pack small{display:block;color:var(--muted);margin-top:2px}.ship-carton-q{margin:8px 0}
.scan-panel{margin:0 0 10px}.scan-panel .scan-acts>*{flex:1 1 140px}.rx-via{color:#2d7350!important}.rx-via:empty{display:none}
.rx-choices:empty{display:none}.rx-choices .actions button small{display:block;color:var(--muted);font-weight:400}
.rx-more{display:flex;align-items:flex-start;gap:8px;margin:14px 0 6px;line-height:1.4}.rx-more input{width:22px;height:22px;min-height:0;flex:none}
#drawer:has(.rx-table){width:min(1080px,100vw)}.rx-table td.num,.rx-table th.num{text-align:right;white-space:nowrap}.rx-table tfoot td{border-top:2px solid var(--line)}
.rx-table td:first-child{min-width:150px}.rx-table td:nth-child(2){min-width:150px}.rx-table td:last-child{min-width:200px}
.rx-table th:first-child,.rx-table td:first-child{position:sticky;left:0;z-index:1;background:white;box-shadow:1px 0 0 var(--line)}
@media(max-width:720px){.rx-table td:first-child{min-width:112px;max-width:150px}.rx-table td:nth-child(2){min-width:120px}.rx-table td:last-child{min-width:170px}}
.rx-drops{padding-left:18px;margin:8px 0 12px}.rx-drops li{margin:0 0 6px}.rx-drops small{color:var(--muted)}
.rx-problem p,.rx-wrong p,.rx-unknown p{margin:2px 0 0}.rx-resolved summary,.rx-labels summary{cursor:pointer;margin:6px 0;color:var(--muted)}.rx-resolved p{margin:4px 0;font-size:13px}.rx-chips{margin:0 0 10px}
@media(max-width:720px){.rx-problem,.rx-wrong,.rx-unknown{flex-wrap:wrap}.rx-problem .actions,.rx-wrong .actions,.rx-unknown .actions{width:100%}.rx-problem .actions button,.rx-wrong .actions button,.rx-unknown .actions button{flex:1 1 auto;min-height:44px}}
/* PDFTOOLS-02: takeoff the way LB does it in Bluebeam (docmeasure.js, docmarks.js, docpdf.js): the Takeoff group's types, the
   type form, Settings → Takeoff types */
.fp-g[data-g="takeoff"]{gap:6px;flex-wrap:wrap}.fv button.fp-ty{display:flex;align-items:center;gap:6px;min-height:40px;padding:4px 10px;border:1px solid #3a4658;background:#222a36}.fv button.fp-ty.on{background:#2f3d52;box-shadow:inset 0 0 0 2px #4fb3e8}
.fp-ty span{font-size:13px;font-weight:600}.fp-ty small{color:#9aa7b8;font-size:12px}.fp-ty svg.tk-sw{width:16px;height:16px}.fv button.fp-ty-new{border-style:dashed}.fp-tyname{color:#e8edf3;font-size:13px}
.fp-pop{max-height:calc(100vh - 150px);overflow-y:auto}
.fp-tcolors,.fp-tshapes{display:flex;flex-wrap:wrap;gap:6px;border:0;padding:0;margin:8px 0}.fp-tcolors legend,.fp-tshapes legend{font-size:12px;color:var(--muted);margin-bottom:4px}
.fp-tcolor,.fp-tshape{display:flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:8px;padding:6px 9px;font-size:12px;min-height:40px;cursor:pointer}.fp-tcolor input,.fp-tshape input{width:auto;min-height:0;margin:0}
.fp-tcolor:has(input:checked),.fp-tshape:has(input:checked){border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.fp-presets{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:6px 0 4px}
.fm-ttype-form{max-width:560px;margin-top:12px;border-top:1px solid var(--line);padding-top:8px}
.fv-panel .fq-card{margin:0 0 12px;padding:10px 12px;background:#eaf4ff;border:1px solid #b5dcec;border-radius:10px}.fq-card-head{display:flex;align-items:center;gap:8px}.fq-card-head h4{flex:1;margin:0;font-size:14px}.fq-card-head svg.tk-sw{width:16px;height:16px}
.fq-card .fv-facts{margin:6px 0}.fq-near{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:-2px 0 8px}.fv-panel .fq-near button.chip{min-height:36px}.fq-notes{margin-top:8px}.fq-notes h4{margin:6px 0 4px;font-size:12px}.fq-card .fv-pacts{margin-top:8px}
.fv-panel .fq-near button{border:1px solid #b5dcec;border-radius:16px;background:white;padding:4px 12px;min-height:36px}.fv-panel .fq-near button.on{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
.fv-find{flex-wrap:wrap}.fv-find-mark{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.fv-find-mark:empty{display:none}.fv-find-mark select{width:auto;min-height:34px;padding:4px 8px;background:#222a36;color:white;border-color:#3a4658;font-size:12px}.fv-find-mark button{min-height:34px;padding:6px 12px}.fv-find-hint{color:#9aa7b8;font-size:12px}
.fv button.fp-scalechip{font-size:12px;border:1px solid #3a4658;min-height:32px;padding:4px 9px}.fp-tscale{display:block;font-size:11px;color:#9aa7b8}.fp-tscale.fp-warn{color:#fdb022}.fp-pagepick{max-height:38vh;overflow-y:auto;border:1px solid var(--line);border-radius:8px;padding:2px 8px;margin:6px 0}.fp-pagepick .check small{margin-left:4px}
.fp-loupe{position:fixed;width:120px;height:120px;border-radius:50%;border:3px solid white;box-shadow:0 6px 20px #0008;z-index:20;pointer-events:none;background:white}.fp-loupe[hidden]{display:none}
.fp-bm{padding-bottom:6px;margin-bottom:6px;border-bottom:1px solid #2c3542}.fp-bm-head{display:flex;justify-content:space-between;align-items:center;gap:6px;margin:8px 6px 4px;font-size:12px;color:#9aa7b8}.fp-bm-head strong{font-weight:700}
.fp-bm-row .fp-ol-t span{display:block}.fp-bm-row .fp-ol-t small{display:block;color:#9aa7b8;font-size:11px}.fv button.fp-bm-tool{min-width:34px;padding:6px 4px;flex:none}.fp-bm-form{padding:4px 6px 8px}.fp-bm-form .form-actions{margin-top:6px}.fp-bm-none{padding:2px 6px;font-size:12px}
.fq-bytype-bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:6px 0}.fv .fp-list .fq-bytype-bar button.on{background:#e8f5fb;color:var(--ink);border:1px solid var(--accent)}.fq-bytype .fq-tick{width:34px;text-align:center}.fq-bytype .fq-tick input{width:20px;height:20px}.fq-bytype tfoot td{border-top:2px solid var(--line)}
.fq-send-type{border-top:1px solid var(--line);padding-top:6px;margin-top:6px}.fq-send-type p{margin:0 0 4px}.fq-send-types{margin:6px 0 8px}
@media(min-width:721px){.fv-bar .fv-head{min-width:44px;flex-shrink:1000}.fv-bar .fv-tools{flex-shrink:1;min-width:0;overflow-x:auto;scrollbar-width:none}}
@media(min-width:721px) and (max-width:1439px){.fv-bar .fv-lg{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.fv-bar .fv-sm{display:inline}}
.fv .fq-near button.chip.on{background:var(--accent);color:white;border-color:var(--accent)}
@media(min-width:721px) and (max-width:1199px){.fv-acts .fv-word{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}}
/* CHANGED-01: What changed since your last visit (whatchanged.js), at the top of the job page under its name: groups of
   lines, each the record, what changed, before → after, who and when; a line that needs the person's Got it says so in
   words, with an amber edge beside it. Big targets for a thumb on a phone; nothing moves, so nothing to still. */
.wc{padding:14px 16px;margin:0 0 12px;border-left:4px solid var(--accent)}.wc.folded{padding:8px 12px 8px 16px}
.wc-head{display:flex;justify-content:space-between;align-items:center;gap:8px 12px;flex-wrap:wrap}.wc-titles{min-width:0;flex:1 1 220px}
.wc-head h2{margin:0;font-size:16px;line-height:1.3}.wc-sub{margin:2px 0 0;color:var(--muted);font-size:13px}
.wc-acts{display:flex;align-items:center;gap:6px;flex-wrap:wrap}button.wc-got{min-height:44px;display:inline-flex;align-items:center;gap:8px;font-size:14px}button.wc-got .count{background:#fff;color:#117da8;margin-left:0}
button.wc-fold{min-height:44px;color:#117da8}
.wc-note{margin:10px 0 2px;padding:8px 12px;border-radius:8px;background:#fff3dc;color:#6b4a12;font-weight:600;line-height:1.45}.wc-note.done{background:#eef7fc;color:#117da8;font-weight:500}
.wc-note.viewing{background:#f4f6f8;color:var(--muted);font-weight:500}
.wc-group{margin-top:12px}.wc-h{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 2px;display:flex;align-items:center;gap:6px}
.wc-lines{list-style:none;margin:0;padding:0}.wc-line{padding:8px 4px 8px 10px;border-top:1px solid #edf0f4;border-left:3px solid transparent}
.wc-line.mine{border-left-color:#e2a13b;background:#fffaf0}.wc-l1{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px}
button.link.wc-rec,strong.wc-rec{font-weight:650;text-align:left;font-size:14px;line-height:1.35;overflow-wrap:anywhere}.wc-line.gone .wc-rec{color:var(--muted)}
.wc-what{color:#3d4b5c;font-weight:600}.wc-need,.wc-asks{font-size:11px}
.wc-said{margin:3px 0 0;color:var(--ink);line-height:1.45;overflow-wrap:anywhere}.wc-by{margin:2px 0 0;color:var(--muted);font-size:12px}
button.wc-show{min-height:40px;color:#117da8}.wc-still{margin:8px 0 0;display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline;color:#3d4b5c}.wc-still>span{font-weight:600}
.wc-people{list-style:none;margin:0;padding:0}.wc-people li{display:flex;justify-content:space-between;align-items:center;gap:6px 10px;flex-wrap:wrap;padding:8px 0;border-top:1px solid #edf0f4}
.wc-person{min-width:0}.wc-person small{color:var(--muted);margin-left:4px}.wc-crew-why{margin:0 0 4px;font-size:12px}.wc-more{margin:10px 0 0}
.wc-foot{margin-top:10px;padding-top:8px;border-top:1px solid #edf0f4}.wc-foot button.link{min-height:40px}
@media(max-width:720px){.wc{padding:12px}.wc-head h2{font-size:15px}.wc-acts.with-got{width:100%}button.wc-got{flex:1;justify-content:center}
 .wc-line{padding:8px 2px 10px 8px}button.link.wc-rec{display:inline-flex;align-items:center;min-height:40px;padding:2px 0}.wc-still button.link{min-height:40px}}

/* NUMBERS-02: a job's six money numbers (money.js) as tiles on the Budget tab: an amount, or a dash with the words for
   what is missing; an amount that leaves something out says so under it. Not approved in an item's Approved Budget
   cell, and the words under a job's column on Home. Nothing is shown as $0.00 when it is not known. */
.money-six{margin:0 0 12px}.stats.money-tiles{grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin:0}
.money-num.stat{padding:12px 14px;min-width:0}.money-num strong{font-size:20px;margin:6px 0 4px;overflow-wrap:anywhere}.money-num small{display:block;line-height:1.4;overflow-wrap:anywhere}
.money-num.short small{color:#8a5a00}.money-num.none strong{color:var(--muted)}
.money-margin{display:flex;flex-wrap:wrap;gap:4px 12px;align-items:baseline;margin:8px 2px 0;font-size:14px}.money-margin small{color:var(--muted);line-height:1.4}
.bud-na{color:var(--muted);white-space:nowrap}.dash-col-why{display:block;margin:4px 0 0;color:var(--muted);font-size:12px;line-height:1.35}
@media(max-width:1100px){.stats.money-tiles{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:720px){.stats.money-tiles{grid-template-columns:1fr;gap:6px}  /* a phone: a row each, the name and the amount on one line, the words under them */
 .money-num.stat{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:2px 10px;padding:10px 12px}
 .money-num strong{font-size:17px;margin:0;white-space:nowrap;overflow-wrap:normal}.money-num small{grid-column:1/-1}}
/* Counted once: lines the contract no longer holds (an alternate not taken), and a change order's estimate sections. */
.bud-out{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:10px;background:#fff3dc;color:#8a5a00;font-size:11px;font-weight:600;white-space:nowrap}
.money-out{margin:6px 2px 0;font-size:13px;color:#8a5a00;line-height:1.45}.money-out small{color:var(--muted)}
.co-sections{border:1px solid var(--line);border-radius:8px;padding:10px 14px 4px;margin:12px 0}.co-sections legend{padding:0 6px;font-weight:600;color:#566679;font-size:12px}
.co-sec{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;padding:6px 0;border-top:1px solid #edf0f4;min-height:40px}.co-sec:first-of-type{border-top:0}.co-sec input{flex:none}.co-sec span{flex:1 1 0;min-width:0}.co-sec small{flex-basis:100%;margin-left:26px}
.co-sec-off span{color:var(--muted)}.co-row.co-nocost strong{color:#8a5a00;font-weight:600}
.wip .wip-why{grid-column:1/-1}.wip .wip-why dd small{font-weight:400;color:var(--muted);font-size:12px;line-height:1.4}  /* billing against a cost that leaves something out: not known, said across the card */
/* CALLBACK-01: callbacks (callbacks.js): a return visit's part of its work order's page and its own drawer (coverage and
   billing in words, the classification with where each part came from, the cost, the evidence), the classify form's big
   coverage choices, the history, Link costs, the crew's Driving there, and Settings → Jobs → Callbacks */
.cb-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:2px 0 6px}
.pill.cb-war{background:#eaf3fb;color:#316d9b}.pill.cb-bil{background:#efe8fa;color:#7a4fbf}
.cb-billed{font-size:12px;font-weight:600;color:var(--muted)}.cb-billed.good{color:#2d7350}.cb-billed.warn{color:#946422}
.cb-small{font-size:12px;margin:2px 0 8px}
.cb-class,.cb-cost{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 14px;margin:6px 0 8px}
.cb-class dt,.cb-cost dt{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.cb-class dd,.cb-cost dd{margin:2px 0 0;min-width:0;overflow-wrap:anywhere}.cb-class dd strong{font-weight:650;color:var(--ink)}
.cb-src{display:block;font-size:11px;line-height:1.4;margin-top:2px}.cb-src.cb-sug{font-style:italic}
.cb-cost{grid-template-columns:repeat(4,minmax(0,1fr));background:#f8fafb;border:1px solid var(--line);border-radius:8px;padding:10px 12px}
.cb-c dd strong{display:block;font-size:14px;font-weight:650;color:var(--ink)}.cb-c dd span{display:block;font-size:12px;color:var(--muted)}
.cb-c.cb-total dd strong{font-size:16px;color:#117da8}
.cb-actions{margin:8px 0 4px}
.cb-shots{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}.cb-shots .shot{width:64px;height:64px}
.cb-list{margin:6px 0;padding-left:18px}.cb-list li{margin:3px 0}.cb-list small{display:block}
.cb-view>p small,.cb-view p small{display:block}
.cb-cover,.cb-products{border:1px solid var(--line);border-radius:10px;padding:10px 12px 12px;margin:14px 0 0}
.cb-cover legend,.cb-products legend{font-size:12px;color:#566679;padding:0 4px}
.cb-choice{display:flex;align-items:flex-start;gap:10px;min-height:52px;padding:10px 12px;margin-top:8px;border:1px solid var(--line);border-radius:8px;cursor:pointer;background:white}
.cb-choice:has(input:checked){border-color:#b5dcec;background:#e8f5fb}
.cb-choice input{width:20px;min-height:20px;height:20px;margin-top:1px;flex:none;accent-color:var(--accent)}
.cb-choice span{display:flex;flex-direction:column;gap:2px}.cb-choice small{font-size:12px}
.cb-bill{margin-top:12px}.cb-bill[hidden]{display:none}
.cb-products .check{display:flex;align-items:center;gap:8px;min-height:40px}.cb-products .field{margin-top:8px}
.cb-hist{margin:0;padding-left:20px}.cb-hist>li{margin:0 0 14px;line-height:1.5}.cb-hist ul{margin:4px 0;padding-left:18px}.cb-hist small{color:var(--muted)}
.cb-why{margin:4px 0 0;padding:6px 10px;border-left:3px solid #b5dcec;background:#f8fafb;color:var(--ink)}
.cb-link-row{display:flex;align-items:flex-start;gap:10px;min-height:48px;padding:8px 0;border-bottom:1px solid #edf0f4}
.cb-link-row input{flex:none;margin-top:3px}.cb-link-row>span{display:flex;flex-direction:column;gap:2px;min-width:0}.cb-link-row.off{opacity:.6}
.cb-causes{margin:6px 0 12px;padding-left:20px}.cb-causes li{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid #edf0f4}
.cb-causes li>span{display:flex;flex-direction:column;gap:2px;min-width:0}.cb-causes li.off strong{color:var(--muted);text-decoration:line-through}
.cb-add input{flex:1}
.cb-drive{display:flex;flex-direction:column;gap:6px;margin:0 0 12px}.cb-drive button{width:100%}
.cb-unsaved{align-self:center;font-size:12px;font-weight:600;color:#946422}
/* Reports → Callbacks: its long cells stay readable; the table scrolls sideways in its card rather than squeezing them */
.rw-page[data-report="callbacks"] td[data-col="callback"]{min-width:230px}.rw-page[data-report="callbacks"] td[data-col="job"]{min-width:170px}
.rw-page[data-report="callbacks"] td:is([data-col="cause"],[data-col="responsibility"],[data-col="coverage"],[data-col="billed"],[data-col="products"],[data-col="type"]){min-width:120px}
.rw-page[data-report="callbacks"] td:is([data-col="date"],[data-col="branch"],[data-col="status"]){white-space:nowrap}
@media(max-width:720px){.cb-class{grid-template-columns:minmax(0,1fr)}.cb-cost{grid-template-columns:repeat(2,minmax(0,1fr))}.cb-causes li{flex-wrap:wrap}
 .rw-page[data-report="callbacks"] td[data-col="callback"]{min-width:180px}.rw-page[data-report="callbacks"] td[data-col="job"]{min-width:140px}}
/* PLANCOLOR-01: colour-coded floor plans. A glyph and a word beside every colour (field/pins.js PIN_GLYPHS): on each marker,
   in the key, the band and the pin's panel; At LB and On punch join the states; the word under each pin when zoomed in. */
:root{--s-atlb:#946422;--s-punch:#b33a80}
svg.pg{fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;flex:none;overflow:visible}
.pins .pin.state-atlb{background:var(--s-atlb)}.pins .pin.state-punch{background:white;color:var(--s-punch);border-color:var(--s-punch)}
.pins .pin.type-shade.state-verified::before{content:none}
.pins .pin .pg{width:12px;height:12px;margin:0 3px 0 -1px;vertical-align:-2px}
.viewer.compact .pins .pin .pg{position:absolute;left:50%;top:50%;width:10px;height:10px;margin:-5px 0 0 -5px}
.viewer.compact .pins .pin:hover .pg,.viewer.compact .pins .pin:focus-visible .pg,.viewer.compact .pins .pin.flash .pg,.viewer.compact .pins .pin.moving .pg{position:static;width:12px;height:12px;margin:0 3px 0 -1px}
.pins .pin .pin-word{display:none;position:absolute;left:50%;top:calc(100% + 4px);transform:translateX(-50%);background:white;color:var(--ink);border:1px solid var(--line);border-radius:6px;padding:0 6px;font-size:10.5px;font-weight:650;line-height:17px;white-space:nowrap;pointer-events:none;box-shadow:0 1px 3px #0003}
.viewer.near .pins .pin .pin-word,.pins .pin:focus-visible .pin-word,.pins .pin.picked .pin-word{display:block}
.viewer.compact .pins .pin:focus-visible .pin-word{display:block}
@media(pointer:coarse){.viewer.compact .pins .pin .pg{width:12px;height:12px;margin:-6px 0 0 -6px}}
.sw{display:inline-grid;place-items:center;color:white}.sw .pg{width:9px;height:9px;stroke-width:2.6}
.legend .sw,.pp-legend .sw{width:18px;height:18px}.legend .sw .pg,.pp-legend .sw .pg{width:12px;height:12px;stroke-width:2.2}
.sw.state-atlb{background:var(--s-atlb)}.sw.state-punch{background:white;box-shadow:inset 0 0 0 2px var(--s-punch);color:var(--s-punch)}.sw.state-installed{color:var(--s-installed)}.sw.state-waiting{background:var(--s-waiting)}
.spine .seg{display:inline-flex;align-items:center;gap:2px}.spine .seg .pg{width:12px;height:12px}
.spine .seg.state-atlb{background:var(--s-atlb)}.spine .seg.state-punch{background:white;color:var(--s-punch);box-shadow:inset 0 0 0 2px var(--s-punch)}.spine .seg.state-waiting{background:var(--s-waiting)}
.pill .pg{width:12px;height:12px;margin:0 4px 0 -1px;vertical-align:-2.5px}
.pill.state-atlb{background:#fff3dc;color:#946422}.pill.state-punch{background:white;color:#8f2d67;box-shadow:inset 0 0 0 1.5px #b33a80}.pill.state-waiting,.pill.state-resolved,.pill.state-plain{background:#f2f4f7;color:#46525f}
.pill.state-open{background:#f8e4f0;color:#8f2d67}.pill.state-problem{background:#fdecec;color:#a53032}.pill.state-done{background:#e3f4ea;color:#1e7a4b}
.pp-dot{display:inline-grid;place-items:center;color:white}.pp-dot .pg{width:13px;height:13px}
.pp-dot.state-atlb{background:var(--s-atlb)}.pp-dot.state-punch{background:white;border-color:var(--s-punch);color:var(--s-punch)}.pp-dot.state-installed{color:var(--s-installed)}.pp-dot.state-waiting{background:var(--s-waiting)}
.pin-status{flex-wrap:wrap}.pin-status small{display:inline-flex;align-items:center;gap:4px}.pin-status small .pg{width:12px;height:12px;color:#8f2d67}
.pg-inline{width:12px;height:12px;vertical-align:-2px;margin-right:5px}
.pc-wo p{margin:3px 0 2px}.pc-wo small{color:var(--muted)}.queue-row.muted{opacity:.7}
.pc-item{border-bottom:1px solid var(--line);padding-bottom:6px}.pc-item .queue-row{border-bottom:0;padding-bottom:4px}.pc-about{margin:0}.pc-about select{margin-top:4px}
.pc-log.pc-shot{justify-content:flex-start;gap:12px}.pc-log .shot{width:56px;height:56px;flex:none}
@media(pointer:coarse){.legend button,.pp-legend button{min-height:44px}.spine .seg{height:28px}}
.sp-atlb{border-left-color:#946422}.sp-key.sp-atlb{border-color:#946422;background:#fff3dc}
.pc-log .pc-detail{margin:2px 0;color:var(--ink);font-size:12px;line-height:1.45}
/* HISTORY-01 (roadmap feature 17, undo and version history): the History drawer's versions, a line's orders and the Undo (versions.js) */
.vh-intro{margin:0 0 14px}
.vh-list{list-style:none;margin:0 0 10px;padding:0}
.vh-item{border:1px solid var(--line);border-radius:8px;padding:12px 14px;margin:0 0 10px;background:var(--surface)}
.vh-item.vh-current{border-left:3px solid var(--accent)}
.vh-item.vh-step{background:#f8fafb}
.vh-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px}
.vh-meta{color:var(--muted);font-size:12px;margin-left:auto}
.vh-what{margin:4px 0 6px;color:var(--ink);overflow-wrap:anywhere}
.vh-changes{margin:6px 0 0;display:grid;gap:4px}
.vh-ch{display:grid;grid-template-columns:minmax(90px,150px) minmax(0,1fr);gap:8px;font-size:12px;line-height:1.5}
.vh-ch dt{color:var(--muted)}
.vh-ch dd{margin:0;overflow-wrap:anywhere;white-space:pre-wrap}
.vh-was,.vh-arrow{color:var(--muted)}
.vh-now{color:var(--ink);font-weight:600}
.vh-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.vh-small{font-size:12px;margin:4px 0}
.vh-acts{margin-top:8px}
.vh-orders ul{margin:0 0 12px;padding-left:18px;line-height:1.7}
.vh-pending .vh-changes{margin-top:8px}
.vh-notes{white-space:pre-wrap;color:var(--ink);margin:4px 0}
.vh-entry{margin:10px 0 0}
.vh-foot{margin-top:16px}
.job-card-head .vh-btn,.location-card .panel-head .vh-btn{padding:4px 8px;font-weight:600}
.job-card-head .vh-btn{margin-left:auto}
.job-card-head{flex-wrap:wrap}.job-card-head .mono{white-space:nowrap}  /* History goes under a long name rather than breaking the job number */
@media(max-width:720px){.vh-ch{grid-template-columns:1fr;gap:0}.vh-meta{margin-left:0;width:100%}.vh-item{padding:12px}}
/* SCHEDHIST-01: LB's old schedule sheets as history: the Calendar's historical blocks, the job's History (folded under its
   schedule) and the Schedules preview on Bring in LB's history */
.dsp-block.hist,.av-bar.hist{--c:#8a97a6;--b:#f1f4f7;border-left-style:dotted;cursor:pointer;color:#526174}.dsp-block.hist:hover,.av-bar.hist:hover{background:#edf1f5}
.sh-past{padding:0}.sh-past>summary{cursor:pointer;padding:12px 20px;display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center;list-style:none;min-height:48px}.sh-past>summary::-webkit-details-marker{display:none}
.sh-past>summary::before{content:'▸';color:var(--muted);width:12px}.sh-past[open]>summary::before{content:'▾'}.sh-past>summary .muted{font-size:12px}
.sh-past .table-wrap,.sh-past>p{margin:0 20px 12px}.sh-table td small{display:block;color:var(--muted);font-size:11px}
.hs-names select{min-width:230px}.hs-ask td[data-col=name]{font-weight:600}.hs-people{gap:4px}.hs-people .chips{gap:2px 16px}.hs-people .check{padding:2px 0}
.hs-vehicles li{display:flex;justify-content:space-between;gap:12px;border-bottom:1px solid var(--line);padding-bottom:6px}.hs-vehicles li:last-child{border:0}
.hs-bring{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;margin:10px 0 14px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:#f8fafb}
.hs-bring .check{align-items:flex-start;flex:1 1 300px;font-size:12px}.hs-bring .check input{margin-top:1px;flex:none}
.hs-unmatched>.form-grid{grid-template-columns:repeat(auto-fill,minmax(min(260px,100%),1fr));gap:12px}
.hi-preview>.panel-head h2{min-width:0;overflow-wrap:anywhere}
@media(max-width:720px){.hs-names select{min-width:0}.hs-bring .actions,.hs-bring .actions button{width:100%}.sh-past>summary{padding:12px 14px}.sh-past .table-wrap,.sh-past>p{margin:0 14px 12px}}
/* PREVIEW-01: a preview copy of LB's data (preview.py) shows its band where the mockup shows its own (mockup-db leaves the
   room on every screen), in the app's blues so it is never taken for the mockup; on a phone its words wrap to two lines. */
.preview-band{color:var(--navy);background:repeating-linear-gradient(135deg,#b5dcec 0 16px,#e8f5fb 16px 32px);border-bottom:1px solid #9fcbe0}
@media(max-width:600px){body.preview-db{--band:40px}.preview-band{display:flex;align-items:center;justify-content:center;line-height:15px;padding:2px 12px;white-space:normal}}
/* TOPBAR-FIT: on a computer the top bar keeps to one row at any Windows display scaling (125 % and 150 % make a 1920 px
   screen 1536 and 1280 px wide): words give way to their icons, least needed first, instead of the bar wrapping (Sign out
   under it, its first row cut off under the preview band). Each word stays its button's name for a screen reader. Measured
   on a President's bar: everything needs 1,650 px of window, without the name and Last loaded 1,450, icons only 1,020. */
@media(min-width:1001px){.topbar .actions{flex:1 1 0}.topbar .top-actions{flex-wrap:nowrap}.topbar .crumb{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}}  /* the left side takes what is left over; the buttons on the right keep their size */
@media(min-width:1001px) and (max-width:1680px){.sync.live .live-when{display:none}.sync.live{min-width:32px}
 .account-button .who{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}}
@media(min-width:1001px) and (max-width:1480px){.qc-top-words,.scan-top-words,.va-words,.cmd-button .cmd-words,.topbar .division>span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
 .ask-long{display:none}.ask-short{display:inline}}
@media(min-width:1001px) and (max-width:1100px){.cmd-button .cmd-kbd{display:none}}
/* TOPBAR-FIT end */
/* OPSWORLD-01: the Operations matrix (each cell in words with its owner and age under it, a stage's counts in its heading,
   the quick filters, one job at a time on a phone), the step holding a stage in the steps panel, and Needs me on Home. */
.rw-asof{margin:-4px 0 12px;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.rw-quick{flex-basis:100%;gap:6px}.rw-quick .count{margin-left:2px}
.rw-page[data-report="ops"] th{white-space:normal;vertical-align:bottom;min-width:104px;padding:10px}.rw-page[data-report="ops"] td{vertical-align:top;min-width:104px;max-width:210px;white-space:normal;padding:10px;font-size:12px}
.rw-page[data-report="ops"] td[data-col="job"]{min-width:140px;position:sticky;left:0;z-index:1;background:white;box-shadow:inset -1px 0 0 #edf0f4}.rw-page[data-report="ops"] thead th:first-child{left:0;z-index:4}  /* the job stays in view while a narrower screen scrolls the stages sideways */.rw-page[data-report="ops"] .link{font-weight:600;line-height:1.3;overflow-wrap:anywhere}
td .rw-sub{display:block;margin-top:3px;font-size:11px;line-height:1.35;color:var(--muted);font-weight:400}
.link.rw-tone-blocked{color:#a53032}.link.rw-tone-missing{color:#8a5a12}.link.rw-tone-underway{color:#316d9b}.link.rw-tone-done{color:#2d7350}.link.rw-tone-later,.link.rw-tone-notneeded{color:var(--muted);font-weight:500}
.rw-page[data-report="ops"] td:has(>.rw-tone-blocked){background:#fdf2f2;box-shadow:inset 3px 0 0 #d03b3b}.rw-page[data-report="ops"] td:has(>.rw-tone-missing){background:#fff8e9;box-shadow:inset 3px 0 0 #fab219}
.rw-page[data-report="ops"] td:has(>.rw-tone-underway){box-shadow:inset 3px 0 0 #2a78d6}
.rw-headn{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.rw-hn{font-size:11px;font-weight:600;padding:2px 7px;border-radius:10px;background:#edf1f5;min-height:0;white-space:nowrap}
.rw-hn.rw-tone-blocked{background:#fbe9e9;color:#9b2c2c}.rw-hn.rw-tone-missing{background:#fff3dc;color:#8a5a12}.rw-hn.rw-tone-underway{background:#eaf3fb;color:#316d9b}
.ops-phone{display:none}
.ops-phone-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 8px}.ops-count{font-size:12px;color:var(--muted);text-align:center}
.ops-cards{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;padding-bottom:6px}
.ops-card{flex:0 0 calc(100% - 28px);scroll-snap-align:start;scroll-snap-stop:always;background:white;border:1px solid var(--line);border-radius:var(--radius);padding:14px 14px 4px}
.ops-card-head{margin-bottom:6px}.ops-card-head .link{font-weight:650;font-size:14px}.ops-card-head small{display:block;margin-top:2px}
.ops-lanes{list-style:none;margin:0;padding:0}.ops-lane{display:grid;gap:2px;padding:9px 0 9px 10px;border-top:1px solid #edf0f4;border-left:3px solid #c9d2dc}
.ops-lane.rw-tone-blocked{border-left-color:#d03b3b}.ops-lane.rw-tone-missing{border-left-color:#fab219}.ops-lane.rw-tone-underway{border-left-color:#2a78d6}.ops-lane.rw-tone-done{border-left-color:#6fbf8e}
.ops-lane-name{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.ops-lane-go{text-align:left;font-weight:600;line-height:1.35;overflow-wrap:anywhere}.ops-lane small{font-size:11px}
.ops-lane.rw-tone-blocked .ops-lane-go{color:#a53032}.ops-lane.rw-tone-missing .ops-lane-go{color:#8a5a12}.ops-lane.rw-tone-underway .ops-lane-go{color:#316d9b}.ops-lane.rw-tone-done .ops-lane-go{color:#2d7350}
@media(max-width:720px){.rw-page[data-report="ops"] .table-panel,.rw-page[data-report="ops"] .sh-hint{display:none}.ops-phone{display:block}.ops-lane-go{min-height:44px}.ops-phone-bar button{min-width:44px}}
.stp.stuck{box-shadow:0 0 0 2px #8bd2ef;background:#f7fbfd}.stp-holds{display:block;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#117da8;margin-bottom:2px}
.nm-asof{margin:0 0 8px;font-size:11px}.nm-list{list-style:none;margin:0;padding:0}
.nm-item{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:9px 0 9px 10px;border-bottom:1px solid #f0f2f5;border-left:3px solid #c9d2dc}.nm-item:last-child{border-bottom:0}
.nm-item.tone-blocked{border-left-color:#d03b3b}.nm-item.tone-approval,.nm-item.tone-exception{border-left-color:#fab219}.nm-item.tone-missing{border-left-color:#d29b3d}
.nm-main{min-width:0}.nm-main strong{display:block;line-height:1.35}.nm-main p{margin:2px 0;font-size:12px;line-height:1.45;overflow-wrap:anywhere}.nm-main small{display:block;font-size:11px}.nm-next span{font-weight:600;color:var(--ink)}
.nm-badge{display:block;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:1px}.nm-item.tone-blocked .nm-badge{color:#a53032}.nm-item.tone-approval .nm-badge,.nm-item.tone-exception .nm-badge{color:#8a5a12}
.nm-go{flex:none;white-space:nowrap;padding:6px 8px;color:#117da8}.nm-more{margin-top:6px;color:#117da8}.nm-panel .nm-item{padding-right:4px}
@media(max-width:720px){.nm-item{flex-wrap:wrap}.nm-go{min-height:44px;padding-left:0}}
/* LAYOUT-01: each role's sidebar and its pins, and the lists' saved views (layout.js; app.js sideNav and listBar). The pins
   sit on top of the sidebar over a hairline, sized like every other item; Pin pages is a small item at the foot of the list.
   Save view is the first control on the right of every list bar; the saved views are chips in one row under it, one tap
   each, scrolling sideways on a phone as Projects' quick filters do. Only the palette already here. */
.nav-pins{display:flex;flex-direction:column;border-bottom:1px solid var(--line);padding-bottom:4px;margin-bottom:4px}
.nav .nav-pin-btn{color:var(--muted);font-size:12px;font-weight:500}.nav .nav-pin-btn .nav-symbol{font-size:14px}
@media(min-width:721px){.nav-pins.n1{flex:1 1 0;min-height:33px;max-height:52px}.nav-pins.n2{flex:2 1 0;min-height:61px;max-height:96px}.nav-pins.n3{flex:3 1 0;min-height:89px;max-height:140px}.nav-pins.n4{flex:4 1 0;min-height:117px;max-height:184px}
 .nav .nav-pin-btn{flex:0 0 auto;min-height:28px;max-height:32px}}
.lv-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:-4px 0 12px}.lv-label{font-size:11px;font-weight:650;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-right:2px}
.lv-row .chip small{color:var(--muted);font-weight:500}.lv-row .chip.active small{color:#117da8}.lv-row .lv-manage{padding:6px 8px;font-size:12px}
.list-bar .lv-save{white-space:nowrap}
.lay-words{margin-top:0}.lay-sub{font-size:11px;font-weight:650;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:16px 0 6px}.lay-sub .count{margin-left:6px}
.lay-list{list-style:none;margin:0 0 8px;padding:0}.lay-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid var(--line)}.lay-row:last-child{border-bottom:0}
.lay-name{display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;min-width:0}.lay-name small{flex-basis:100%;color:var(--muted);font-size:11px}.lay-name .nav-symbol{color:#526174}
.lay-acts{display:flex;align-items:center;gap:6px;flex-shrink:0}.lay-acts button{min-height:36px}.lay-mini{min-width:36px;padding:6px 8px}.lay-none,.lay-full{margin:4px 0 8px}
.lay-role .toolbar{margin-bottom:8px}.lay-role .pill{margin-left:4px}.lay-add{margin:4px 0 12px}.lay-more-words{margin:8px 0 0}
@media(pointer:coarse){.lay-acts button,.lv-row .chip{min-height:44px}.lv-row .chip{padding:8px 14px}}
@media(max-width:720px){.lv-row{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}.lv-row .chip,.lv-row .lv-manage{flex:0 0 auto}}
body:has(#drawer:not([hidden]) .lay-words) :is(.qc-fab,.qa-fab){display:none}  /* Your sidebar has nothing to photograph or add: its rows stay clear of the corner buttons */
/* LAYOUT-01 end */
/* HOME-02: Home, role by role (home.js homePage and homePack, dashboards.js dashNoneCard; home.py BANDS). Three bands, each
   under a light heading: For you, Your team, Reports. The dashboards a person can open are a row above them (the side list
   left a column of blank space beside the cards); in each band the cards are packed in columns of at least 340 px (a card
   spans as many 4 px rows as it is tall, the grid filled densely), so a short card sits under a short one instead of beside
   a tall one; a card with nothing to show is one line, its title and its words. The key numbers in For you are compact
   tiles, and its lists and Your team's rows are compact: what, who, when and a link. Only the palette already here. */
.dash-page{display:block}.dash-main{min-width:0}
.dash-boards{position:static;flex-direction:row;flex-wrap:wrap;align-items:center;gap:2px 4px;padding:5px 6px;margin:0 0 16px}
.dash-boards h2{display:none}.dash-boards button{width:auto;padding:7px 10px}.dash-boards .dash-new{margin:0 0 0 auto;border-top:0;border-radius:8px;padding:7px 10px}
.home-band-head{display:flex;align-items:center;gap:10px;font-size:11px;font-weight:650;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin:0 0 10px}
.home-band-head::after{content:'';flex:1;height:1px;background:var(--line)}
.home-band+.home-band{margin-top:20px}.home-band-none{margin:0 0 4px}
.home-band .dash-grid{grid-template-columns:repeat(auto-fill,minmax(min(340px,100%),1fr))}
.home-band .dash-grid.packed{grid-auto-rows:4px;row-gap:0}.home-band .dash-grid>*{align-self:start}
.home-band .dash-card,.home-band .home-card{padding:16px}.home-band .dash-card .panel-head{margin-bottom:8px}.home-band .home-card>.panel-head h2{margin:0}
.home-band .dash-foot{margin-top:8px}
.dash-none.dash-card,.dash-none.home-card{padding:10px 16px}
.dash-none-row{display:flex;align-items:center;gap:4px 12px;min-width:0;min-height:26px}
.dash-none-row h2{margin:0;font-size:14px;flex:0 1 auto;min-width:0;max-width:62%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dash-none-words{margin:0;font-size:12px;line-height:1.4;flex:1 1 0;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-none-row .dash-tools,.dash-none-row>.actions{flex:none;margin-left:auto}.dash-none-row .dash-tools:empty{display:none}
.dash-none-row .dash-tools button.icon{width:26px;height:26px}.dash-none .dash-filters{margin:10px 0 0}
/* The role's key numbers: compact tiles */
.band-you .kind-tiles .dash-tiles{grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:8px}
.band-you .kind-tiles .dash-tile,.band-you .kind-tiles .dash-tiles.plain .dash-tile{padding:8px 12px;gap:1px}
.band-you .kind-tiles .dash-tile strong,.band-you .kind-tiles .dash-tiles.plain .dash-tile strong{font-size:21px;line-height:1.15}
.band-you .kind-tiles .dash-tile-icon{top:8px;right:8px;width:18px;height:18px;font-size:10px}
.band-you .kind-tiles .dash-tile small{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}  /* one long note does not make the whole row tall */
/* For you's lists: the briefing's items and Needs me's in fewer lines, their link beside them */
.band-you .brf-counts{margin:2px 0 8px}.band-you .brf-compact .brf-item{padding:7px 10px;margin-bottom:6px}.band-you .brf-compact .brf-why{-webkit-line-clamp:1;margin:2px 0}
.band-you .brf-compact .brf-who{margin:2px 0;font-size:11px}.band-you .brf-compact .brf-acts{margin-top:2px}.band-you .brf-card-foot{margin-top:0}
.band-you .nm-item{padding:7px 0 7px 10px;gap:2px 8px;flex-wrap:wrap}.band-you .nm-main{flex:1 1 100%}.band-you .nm-main p{margin:1px 0;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.band-you .nm-badge{display:inline;margin-right:6px}.band-you .nm-main strong{display:inline}.band-you .nm-main small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.band-you .nm-go{padding:2px 0}
@media(min-width:721px) and (pointer:fine){.band-you .brf-compact button.brf-link{min-height:0;padding:3px 8px;font-size:12px}.band-you button.brf-more{min-height:0;padding:4px 6px}.band-you .nm-go{min-height:0}}  /* with a mouse; a finger keeps big targets */
/* The two long lists, the briefing and the activity, take two columns on a wide screen with their items in two columns, so
   one tall list does not leave the columns beside it empty */
@media(min-width:1100px){.home-band .dash-grid>.kind-briefing:not(.dash-none),.home-band .dash-grid>.kind-activity:not(.dash-none),.home-band .dash-grid>:is(.nt-panel,.clock-panel,.dl-notice),.home-band .dash-grid>.kind-rings.wide{grid-column:span 2}
 .home-band .kind-briefing .brf-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 10px}.home-band .kind-briefing .brf-list>.brf-item{margin:0}
 .home-band .kind-activity .act-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:18px}.home-band .kind-activity .act-list>.act-item{border-top:1px solid var(--line)}
 .home-band .kind-activity .act-list>.act-item:nth-child(-n+2){border-top:0}}
.dash-head-side{display:flex;align-items:center;gap:6px;flex-shrink:0}.dash-head-side .dash-foot{margin:0}
@media(min-width:721px){.home-band .dash-rings{grid-template-columns:repeat(auto-fit,minmax(min(165px,100%),1fr))}}  /* the job columns share the card's width, none left empty (a phone keeps two across) */
/* One or two projects (a customer's, or a project manager with few jobs): each ring beside its words, not above them in a tall,
   mostly empty column; on a phone one under the other, the screen's width each */
.home-band .dash-rings:is(:has(>.dash-col:only-child),:has(>.dash-col:nth-child(2):last-child))>.dash-col{display:grid;grid-template-columns:92px minmax(0,1fr);column-gap:16px;align-content:start}
.home-band .dash-rings:is(:has(>.dash-col:only-child),:has(>.dash-col:nth-child(2):last-child))>.dash-col>*{grid-column:2}
.home-band .dash-rings:is(:has(>.dash-col:only-child),:has(>.dash-col:nth-child(2):last-child))>.dash-col>.dash-col-band{grid-column:1/-1}
.home-band .dash-rings:is(:has(>.dash-col:only-child),:has(>.dash-col:nth-child(2):last-child))>.dash-col>.dash-ring{grid-column:1;grid-row:2/span 9;width:88px;height:88px;margin:4px 0 0}
.home-band .dash-rings:is(:has(>.dash-col:only-child),:has(>.dash-col:nth-child(2):last-child)) .dash-col-caption{text-align:left;margin:6px 0 4px}
@media(max-width:720px){.home-band .dash-rings:is(:has(>.dash-col:only-child),:has(>.dash-col:nth-child(2):last-child)){grid-template-columns:minmax(0,1fr)}}
/* Your team: compact rows of who, what, when and a link */
.band-team .act-card .act-media{display:none}.band-team .act-item.compact{padding:6px 0}.band-team .act-item.compact .act-name,.band-team .act-item.compact .act-line{-webkit-line-clamp:1}
.band-team .act-card .act-day{margin:6px 0 2px}
@media(max-width:720px){.home-heading{gap:4px;margin-bottom:10px;align-items:stretch}.home-heading>div:first-child>p{display:none}  /* a phone: the title and one row of its buttons, scrolling sideways */
 .home-heading>.actions{width:100%;flex-wrap:nowrap;justify-content:flex-start;overflow-x:auto;scrollbar-width:none;gap:4px}.home-heading>.actions>button{flex:0 0 auto;padding:8px 10px}.home-heading>.actions>button.primary{order:-1}  /* + New job (or Done) first, always in view */
 .dash-boards{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-bottom:12px}.dash-boards button,.dash-boards .dash-new{flex:0 0 auto;margin:0}
 .home-band+.home-band{margin-top:16px}.home-band .dash-card,.home-band .home-card{padding:14px 12px}.dash-none.dash-card,.dash-none.home-card{padding:8px 12px}}
@media(pointer:coarse){.dash-none-row .dash-tools button.icon{width:40px;height:40px}.dash-boards button,.dash-boards .dash-new{min-height:44px}}  /* a finger's size, as LAYOUT-01's rows */
/* HOME-02 end */
/* USAGE-01: how LB uses the app. Your name at the top opens a menu (My account, Feedback) at the same size, so the top bar
   keeps to one row (TOPBAR-FIT); Feedback in the phone's ☰ menu, above Sign out, and in the foot of every page; the
   feedback form with its picture and what goes with it; Settings → Feedback's list with each one's status; My account's
   own counts; Reports → How LB uses the app (its tables are the workspace's, rw-extra). Only the palette already here. */
.acct-menu .menu{min-width:190px}
.side-signout .fb-side{margin-bottom:8px}
.bottom-note .fb-note{font-size:inherit;color:#117da8;padding:0;min-height:0;border:0;background:transparent;font-weight:500;vertical-align:baseline}
.fb-form .fb-shot{margin:-4px 0 12px}.fb-form .fb-shot img{display:block;max-width:100%;max-height:220px;border:1px solid var(--line);border-radius:8px}
.fb-with{margin:4px 0 12px}.fb-with .section-label{margin:8px 0 4px}.fb-with .detail-row{grid-template-columns:130px 1fr;padding:6px 0;gap:8px;line-height:1.45}.fb-with dd{margin:0;overflow-wrap:anywhere}
.fb-chips{margin:0 0 12px}
.fb-item{border-top:1px solid var(--line);padding:12px 0}.fb-item:last-child{padding-bottom:0}
.fb-top{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;font-size:12px;color:var(--muted)}.fb-top strong{color:var(--ink)}
.fb-text{margin:6px 0 8px;font-size:14px;line-height:1.5;color:var(--ink);overflow-wrap:anywhere}
.fb-pic{display:inline-block}.fb-pic img{display:block;max-width:160px;max-height:120px;border:1px solid var(--line);border-radius:6px;margin-bottom:8px}
.fb-meta{display:flex;flex-wrap:wrap;gap:4px 18px;margin:0 0 8px;font-size:12px}.fb-meta div{display:flex;gap:6px;min-width:0}.fb-meta dt{color:var(--muted)}.fb-meta dd{margin:0;overflow-wrap:anywhere}
.fb-status{display:flex;flex-wrap:wrap;gap:6px}
.ua-told{margin:0 0 10px;line-height:1.5}.ua-counts{margin:0 0 6px;line-height:1.5}.ua-mine h3{margin:14px 0 8px;font-size:13px}
.fb-mine li{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;overflow-wrap:anywhere}.fb-mine li small{flex-basis:100%;color:var(--muted);font-size:11px}
.ur-bar{justify-content:space-between}.ur-title{margin:0 8px 0 0;font-size:16px;align-self:center}.ur-intro{margin:-4px 0 12px}.ur-empty{margin:0}
@media(pointer:coarse){.fb-status .chip,.fb-chips .chip{min-height:44px;padding:8px 14px}}
@media(max-width:720px){.fb-with .detail-row{grid-template-columns:1fr;gap:2px}.fb-top{font-size:11px}}
body:has(#menu-acct:not([hidden])) :is(.qc-fab,.qa-fab),body:has(#drawer:not([hidden]) #fb-form) :is(.qc-fab,.qa-fab),body:has(.sidebar.open) :is(.qc-fab,.qa-fab){display:none}  /* the corner buttons step aside for the account menu's sheet, the ☰ menu (Feedback, Sign out) and the feedback form on a phone */
/* USAGE-01 end */
/* PDFTOOLS-03: takeoff groups by size and product, motor systems, pocket and controls (docmeasure.js): By size's lines under a
   group, its motors, the chips on the bands */
.fq-bytype tr.fq-sub td{border-top:0;padding-top:0;font-size:12px;color:var(--muted)}.fq-bytype tr.fq-sub td .fq-warn,.fq-motors .fq-warn{color:#946422;font-weight:600}
.fq-motors{margin:8px 0 4px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#f8fafb}.fq-motors p{margin:0 0 4px}
.fq-motor-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0;border-top:1px solid var(--line)}.fq-motor-row>span{flex:1 1 220px}.fq-motor-row button{min-height:36px}
.fq-pocket{margin:6px 0;font-size:13px}.fq-motor-row .check{margin:0;min-height:36px}
/* PRICESHEET-02: the price sheet's other tabs in the estimate: a material worked out from the takeoff's lines (how it was
   worked out, its unit, the vendor and quote number, a cost the quote must give), and Import takeoff…'s one type for every
   row of a size list that names none */
.est-tk td[data-col=item] small{display:block;color:var(--muted);font-size:12px;font-weight:400}
.est-tk .est-pair input.t{min-width:0;width:150px}
.est-tk td[data-col=qty]{white-space:nowrap}.est-unit{margin-left:6px;color:var(--muted);font-size:12px}
.est-tk.est-need td[data-col=cost] input:placeholder-shown,.est-tk.est-need td[data-col=item] input[placeholder^=Why]{border-color:#bf8d3c;background:#fff8ec}
.est-import-every{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:12px 0}.est-import-every select{width:auto;max-width:100%}
@media(max-width:720px){.est-tk .est-pair{flex-wrap:wrap}.est-tk .est-pair input.t{width:100%}}
/* LINECOST-01: material cost typed line by line from the manufacturer's quote: the section's rule in words over its
   materials (amber when a line or the vendor quote needs a choice), and the Line costs row with its vendor and quote # */
.est-rule{margin:0 0 10px;font-size:12px;line-height:1.5}.est-rule strong{color:var(--ink);font-weight:600;margin-right:4px}
.est-rule-need{border-left:3px solid #bf8d3c;background:#fff8ec;padding:6px 10px;border-radius:6px}.est-rule-need strong{color:#946422}
.est-lc td[data-col=item] small{display:block;color:var(--muted);font-size:12px;font-weight:400}.est-lc .est-pair input.t{min-width:0;width:150px}
@media(max-width:720px){.est-lc .est-pair{flex-wrap:wrap}.est-lc .est-pair input.t{width:100%}}
/* MYDAY-DESK-01: My Day on a computer, tight (myday.js; home.js homePage and homePack). Jordan, October 4, 2026: "keep On site now for
   installers, and a follow-up to tighten My Day on a computer for installers and foremen". From 1001 px wide My Day has no box of its
   own: its bar, each stop and each block after them (the day's route, the vehicles, Still to finish, Done today, Needs a crew, Tomorrow)
   are cards of For you's grid, packed by their height like every other card, so a short one has the next card under it and the crew's
   notices, time clock and week fill in beside and between them. Each stop is laid out by its own width (a container query). The page
   keeps to 10 px between cards and 12 px inside them (md-desk), the title and its note on one line. A phone and a tablet (to 1000 px)
   are as they were: one column, the same order. */
@media(min-width:1001px){
 /* the page: the title and its note on one line, a little less between the parts, the page's own margin narrower (as a phone's) */
 .home-heading.md-desk{margin-bottom:6px}.home-heading.md-desk>div:first-child{display:flex;align-items:baseline;flex-wrap:wrap;gap:0 14px}
 .main:has(.dash-page.md-desk){padding:14px 16px}
 .md-desk .home-band-head{margin-bottom:6px}.md-desk .home-band+.home-band{margin-top:14px}
 /* every band: 10 px between the cards, 12 inside them (homePack reads the gap from the grid) */
 .md-desk .home-band .dash-grid{column-gap:10px}.md-desk .home-band .dash-grid:has(>.md){grid-template-columns:repeat(auto-fill,minmax(min(300px,100%),1fr))}  /* 300 px a column: three across at 1440 px, four from 1536 */
 .md-desk .home-band .dash-grid>:is(.panel,.dash-card,.home-card){padding:12px}.md-desk .home-band .dash-grid>.dash-none{padding:8px 12px}
 .md-desk .home-band .dash-card .panel-head{margin-bottom:6px}
 /* My Day itself, its flow and its lists of stops are not boxes: what they hold is placed in the grid */
 .md-desk .dash-grid>.md,.md-desk .md-flow,.md-desk .md-flow>.md-stops,.md-desk .md-gone{display:contents}
 /* the bar, the whole row: the title with what is new under it, Get ready to go offline (its words under it) and Got it, all; from 1280 px what is new beside the title and the words beside the button */
 .md-desk .md-bar{grid-column:1/-1;display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"title strip btn" "marks strip btn";column-gap:12px;row-gap:2px;align-items:center;padding:8px 12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius)}
 .md-desk .md-head{display:contents}.md-desk .md-head>div:first-child{grid-area:title;min-width:0}.md-desk .md-head>.md-all{grid-area:btn}
 .md-desk .md-bar>.ofl-strip{grid-area:strip;margin:0;padding:6px 10px;flex-direction:column;align-items:flex-start;gap:2px}.md-desk .md-bar .ofl-hint{flex:none}.md-desk .md-bar>.md-marks{grid-area:marks;margin:2px 0 0}
 .md-desk .ca-here{grid-column:1/-1}.md-desk .ca-here:empty{display:none}
 /* the blocks after the stops: cards (Still to finish is its stops, one column each, under its label) */
 .md-desk .md-flow>:empty{display:none}.md-desk .md-flow>*{margin:0;min-width:0}
 .md-desk .md-flow>.md-fw2{grid-column:span 2}.md-desk .md-flow>.md-fw3{grid-column:1/-1}
 .md-desk .md-flow>:is(.md-empty,.md-done,.md-crewless,.md-later),.md-desk .md-loading{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin:0}
 .md-desk .md-empty p:first-child{margin-top:0}.md-desk .md-empty p:last-child{margin-bottom:0}.md-desk .md-flow>.md-later summary{border-top:0;padding:0}
 .md-desk .md-sec .md-stops{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:10px;align-items:start}
 .md-desk .md-stops>.md-stop,.md-desk .md-gone>.md-stop{margin:0;container-type:inline-size}.md-desk .md-stop{padding:8px 10px}
 .md-desk .md-job{margin:6px 0 2px}.md-desk .md-what{margin:0 0 4px}.md-desk .md-facts{margin:6px 0}.md-desk .md-stop>.md-acts{margin-top:8px}  /* a stop a little closer set */
 .md-desk .md-stop>.md-acts{grid-template-columns:repeat(3,minmax(0,1fr))}  /* six buttons in two rows of three */
 @container (max-width:459px){.md-desk .md-f{display:block}.md-desk .md-f dt,.md-desk .md-f dd{display:inline}.md-desk .md-f dt{margin-right:6px;padding:0}.md-desk .md-facts{gap:6px}}  /* a narrow card: each label run in with its words */
}
@media(min-width:1280px){.md-desk .md-bar{grid-template-columns:auto auto minmax(0,1fr) auto;grid-template-areas:"title marks strip btn";column-gap:14px}.md-desk .md-bar>.md-marks{margin:0}
 .md-desk .md-bar>.ofl-strip{flex-direction:row;align-items:center;gap:6px 12px}.md-desk .md-bar .ofl-hint{flex:1 1 220px}}
@media(min-width:1001px) and (pointer:fine){.md-desk .md-bar button.ofl-go{min-height:36px;font-size:14px}}
/* The crew's other cards beside it: the notices, the time clock and the daily log notice, one column wide (not two) so more cards share
   the first screen, each laid out by its own width as a phone lays them */
@media(min-width:1100px){.home-band .dash-grid:has(>.md)>:is(.nt-panel,.clock-panel,.dl-notice){grid-column:auto}}
@media(min-width:1001px){.dash-grid:has(>.md)>:is(.clock-panel,.nt-panel){container-type:inline-size}
 @container (max-width:520px){.clock-modes{grid-template-columns:1fr;gap:6px}.clock-mode{min-height:48px;padding:7px 12px}.clock-fields,.clock-fields.mode-shop{grid-template-columns:1fr}.clock-in{justify-self:stretch}
  .nt-row{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"main pill" "main kind";row-gap:2px}.nt-row>div{grid-area:main}.nt-row>.pill{grid-area:pill}
  .nt-kind{grid-area:kind;align-self:end;justify-self:end;padding:0;text-align:right}}}  /* the kind of notice (Dispatch, Equipment) at the foot of the right side, not a line of its own */
/* MYDAY-DESK-01 end */
/* PINDRAG-01: your own sidebar by drag and drop (layout.js). Each row of Your sidebar and of Settings → Sidebar by role has
   a grip ⋮⋮ at its start, a finger's size on a touch screen: pressed and moved, with a mouse or a finger alike, a copy of
   the row follows the pointer, the row stays faded in its place, a line shows where it lands and the list it lands in
   lights up (red when it is full). The grip takes the finger, so nothing under it scrolls, and nothing on the page is
   selected while dragging. Only the palette already here. */
.lay-row{position:relative}.lay-row>.lay-name{flex:1 1 auto}.lay-row[data-lay-key]>.lay-name{flex-wrap:nowrap;min-width:0}.lay-row[data-lay-key]>.lay-name small{flex-basis:auto}
.lay-grip{flex:none;display:inline-flex;align-items:center;justify-content:center;width:26px;min-height:32px;margin:-4px -4px -4px -6px;border-radius:6px;color:#8a97a6;font-size:15px;line-height:1;letter-spacing:-3px;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.lay-grip:hover{color:#117da8;background:#e8f5fb}.lay-grip.off{visibility:hidden;cursor:default}
.lay-zone{margin:0 -8px;padding:0 8px 2px;border-radius:8px}.lay-zone .lay-sub{padding-top:2px}
.lay-zone.lay-lit,.lay-role-list.lay-lit{background:#f3fafd;box-shadow:0 0 0 2px #b5dcec}
.lay-zone.lay-no{background:#fdecec;box-shadow:0 0 0 2px #c8454a}
/* the line where it lands: across the row's edge and a little past both its sides, a dot at each end, so it shows either side of the row being dragged over it */
.lay-row.lay-before::before,.lay-row.lay-after::after{content:'';position:absolute;left:-14px;right:-14px;height:9px;pointer-events:none;z-index:1;
 background:radial-gradient(circle at 4.5px 50%,var(--accent) 4px,transparent 4.5px),radial-gradient(circle at calc(100% - 4.5px) 50%,var(--accent) 4px,transparent 4.5px),linear-gradient(var(--accent),var(--accent)) center/calc(100% - 8px) 3px no-repeat}
.lay-row.lay-before::before{top:-5px}.lay-row.lay-after::after{bottom:-5px}
.lay-row.lay-dragging{opacity:.35}.lay-row.lay-saving{opacity:.6}
.lay-ghost{position:fixed;left:0;top:0;z-index:60;pointer-events:none;margin:0;padding:6px 10px 6px 8px;background:var(--surface);border:1px solid #b5dcec;border-radius:8px;box-shadow:0 8px 20px #162b4240;opacity:.96}
.lay-ghost .lay-grip{color:#117da8}
body.lay-drag-on,body.lay-drag-on *{cursor:grabbing!important;user-select:none!important;-webkit-user-select:none!important}
.lay-whose{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 12px;margin:14px 0 0;padding-top:12px;border-top:1px solid var(--line)}.lay-whose p{margin:0;flex:1 1 260px}.lay-own{margin:-4px 0 8px}
@media(pointer:coarse){.lay-grip{width:44px;min-height:44px;margin:-6px -2px -6px -10px;font-size:18px}}
@media(max-width:720px){#drawer:has(.lay-words){padding:18px 16px}.lay-row[data-lay-key] .lay-acts{gap:2px}}  /* a phone: the panel's gutter as other panels have it, so each page's name stays on one line beside its grip and buttons */
/* PINDRAG-01 end */
/* TRAVEL-01 */
/* The Budget tab's Travel card (travel.js): the allowance against what was spent, red when over; and Settings → Catalog's
   Travel on a job, in accounting, its two choices side by side (one above the other on a phone) */
.trv{border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:var(--radius);background:white;padding:14px 16px;margin:0 0 12px;scroll-margin-top:72px}.trv[hidden]{display:none}.trv.over{border-left-color:#a53032}
.trv-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}.trv-head h3{margin:0;font-size:14px}.trv-head small{font-size:12px}
.stats.compact.trv-tiles{grid-template-columns:repeat(3,minmax(0,1fr));margin:0 0 10px}.trv-tiles .stat{min-width:0}.stats.compact.trv-tiles .stat strong{font-size:20px;white-space:nowrap}
.trv-tiles .trv-over{border-color:#efcaca;background:#fdf3f3}.trv-tiles .trv-over strong{color:#a53032}.trv-tiles .trv-left strong{color:#2d7350}
.trv-wait{font-size:12px;color:#946422;margin:0 0 8px}
.trv-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.trv-col{min-width:0}.trv-col h4{margin:0 0 6px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.trv-table th,.trv-table td{position:static;background:none;padding:6px 8px;border-top:1px solid #edf0f4;white-space:normal;color:var(--ink);font-weight:500;max-width:none}.trv-table th{font-weight:600}
.trv-table td:last-child{text-align:right;white-space:nowrap}.trv-table tfoot th,.trv-table tfoot td{font-weight:700;border-top:1px solid var(--line)}.trv-table th small{display:inline;font-weight:500;color:#946422}
.trv-acct{margin:10px 0 2px;font-size:12px}.trv-acct strong{font-weight:600;color:var(--ink)}.trv-note{margin:0;font-size:11px}
.trv-setting .trv-modes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:10px 0}
.trv-mode{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:8px;padding:12px 14px;cursor:pointer;background:white}.trv-mode.on{border-color:var(--accent);background:#eaf3fb}
.trv-mode input[type=radio]{width:18px;min-height:18px;height:18px;flex:none;padding:0;margin:1px 0 0;accent-color:var(--accent)}.trv-mode>span{min-width:0}.trv-mode strong{display:block;font-size:13px}.trv-mode small{display:block;margin-top:4px;line-height:1.5}
.trv-quote{margin:12px 0 0;padding:10px 14px;border-left:3px solid var(--line);color:#526174;font-style:italic;line-height:1.6}.trv-quote small{display:block;font-style:normal;margin-top:4px}
.trv-changes{margin:10px 0 0;padding-left:18px;font-size:12px;color:var(--muted)}
@media(max-width:720px){.trv{padding:12px}.stats.compact.trv-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}.trv-tiles .stat:last-child:nth-child(odd){grid-column:1/-1}.stats.compact.trv-tiles .stat{padding:12px}.stats.compact.trv-tiles .stat strong{font-size:17px}
 .trv-cols{grid-template-columns:1fr}.trv-setting .trv-modes{grid-template-columns:1fr}.trv-mode{min-height:48px}}
/* TRAVEL-01 end */
/* JOBFLOW-01 B */
.jf-asks{border-left:3px solid var(--accent)}.jf-asks .panel-head{margin-bottom:4px}.jf-asks .panel-head small.muted{font-size:11px}
.jf-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px 16px;align-items:start;padding:12px 0;border-bottom:1px solid var(--line)}.jf-row:last-child{border-bottom:0}
.jf-row.urgent .jf-title strong{color:#a53032}.jf-main{min-width:0}.jf-main>div{margin:0 0 2px}.jf-main small{display:block;line-height:1.5}.jf-title .link{font-size:13px}
.jf-note{margin:4px 0 0;padding:6px 10px;border-left:3px solid var(--line);font-size:12px;color:#526174;line-height:1.5}
.jf-acts{justify-content:flex-end;flex-wrap:wrap}.jf-acts button{min-height:0;padding:6px 10px}
.jf-form{grid-column:1/-1;background:var(--canvas);border:1px solid var(--line);border-radius:8px;padding:12px 14px}.jf-form .form-actions{background:transparent;margin-top:8px;padding:8px 0 0;position:static}
.jf-wo .jf-acts{justify-content:flex-start;margin-top:8px}.jf-wo .jf-form{margin-top:8px}
.jf-ask-line{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin:8px 0 12px}.jf-ask-line button{min-height:0;padding:6px 10px}
.jf-form .form-grid,.jf-ask .form-grid{align-items:end}.jf-own{margin:0;text-align:right}.jf-wo .jf-own{text-align:left;margin-top:8px}
.jf-ask .jf-urgent{display:flex;align-items:center;gap:8px;align-self:end;font-size:12px;color:#566679;min-height:40px}
@media(max-width:720px){.jf-row{grid-template-columns:1fr}.jf-own{text-align:left}.jf-acts{justify-content:flex-start}.jf-acts button{min-height:44px}}
/* JOBFLOW-01 J */
/* The job page leads with one line per stage that is open or next (steps.js stageLines), above the job's tabs: the stage,
   its count, the step holding it with its owner, and Blocked / Late as pills; one line each on a phone, the words cut
   short and only the first pill (the list and the tip say both). */
.stage-lines{display:flex;flex-direction:column;margin:0 0 12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.stage-lines:empty{display:none}.sl-wait{margin:0;padding:9px 14px;font-size:12px}
.stage-lines .sl-line{display:flex;align-items:center;gap:12px;width:100%;min-height:40px;margin:0;padding:8px 14px;border:0;border-radius:0;background:transparent;text-align:left;font-weight:500;color:var(--ink);white-space:nowrap}
.stage-lines .sl-line+.sl-line{border-top:1px solid var(--line)}.stage-lines .sl-line:hover{background:var(--canvas)}
.sl-mark{flex:none;width:12px;text-align:center;color:var(--muted)}.sl-line.now .sl-mark{color:var(--accent)}
.sl-stage{flex:none;width:140px;font-weight:650;overflow:hidden;text-overflow:ellipsis}.sl-line.later .sl-stage{color:var(--muted);font-weight:600}
.sl-count{flex:none;min-width:96px;color:var(--muted);font-variant-numeric:tabular-nums}
.sl-next{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}.sl-who{color:var(--muted)}.sl-flag{flex:none}
@media(max-width:720px){.stage-lines .sl-line{gap:7px;padding:8px 10px;min-height:44px;font-size:12px}.sl-mark{width:10px}.sl-stage{flex:0 1 auto;width:auto;min-width:104px}.sl-count{min-width:0}.sl-next{min-width:64px}.sl-lead,.sl-done,.sl-areas,.sl-who,.sl-flag+.sl-flag{display:none}}
/* JOBFLOW-01 J end */
/* JOBFLOW-01 F: the installer's day card. The stop's clock (Clock in, Switch here, Clock out on the work order), the crew with who
   is in, in words (never colour alone), and the GC super's number to tap. */
.md-clock{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:8px 0 6px}.md-clock button{min-height:48px;padding:10px 22px;font-size:15px}
.md-clock>small{color:var(--muted);font-size:13px}.md-clock p{margin:0;color:#1f6b44;font-size:14px;line-height:1.4;flex:1 1 180px}.md-clock p .clock-dot{margin-right:6px;vertical-align:1px}
.md-clock.on{padding:8px 10px;border-radius:8px;background:#e8f6ee}.md-clock.on button{background:#fff;border-color:#2f9e62;color:#1f6b44}
.md-clock.brk{background:#fff3dc}.md-clock.brk p{color:#946422}.md-clock.brk .clock-dot{background:#d99a2b;box-shadow:0 0 0 3px #d99a2b26}
.md-clock .md-clock-off{flex-basis:100%;color:#a55a14;font-size:13px}
.md-crew{list-style:none;margin:0;padding:0;display:grid;gap:1px}.md-crew li{line-height:1.45}a.md-call{gap:5px}
.md-f dd .md-in{display:inline;font-size:12.5px;white-space:nowrap}.md-f dd .md-in.in{color:#1f6b44;font-weight:600}.md-f dd .md-in.away{color:#946422}
.md-f dd .md-in.in::before{content:'● ';font-size:9px;vertical-align:1px}.md-f dd small.md-crewname{display:block}
@media(max-width:560px){.md-clock>button{flex:1 1 100%}.md-clock.on>button{flex:0 0 auto}}
/* JOBFLOW-01 F end */
/* JOBFLOW-01 D */
/* The GC's paperwork (gcpaper.py): the customer's Billing and paperwork card, the job's panel under the contract documents
   (its rows are the contract documents' rows, jobdocs.js) and the Billing panel's one line for a job billed through a portal */
.gc-cust dl{margin:0 0 8px}
.gc-paper .gcp-set{margin:0 0 10px;font-size:13px;overflow-wrap:anywhere}.gc-paper .gcp-set small{display:block;margin-top:2px;font-size:12px}
.gc-paper .bill-portal{margin:0 0 6px}.bill-panel>.bill-portal{margin-bottom:14px}.bill-portal strong{font-weight:700}
.gcp-h{margin:14px 0 2px;font-size:11px;font-weight:650;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.gcp-row .cd-main>strong{display:inline}.gcp-monthly{margin-left:6px;font-size:10px;vertical-align:1px}
/* JOBFLOW-01 D end */
/* JOBFLOW-01 H: Needs you first on an office role's Home, the other cards folded under it (home.js nyLead) */
.ny-lead{margin:0 0 18px}
.ny-lead>.dash-card{margin:0}
.ny-tier{display:flex;align-items:baseline;gap:6px;margin:12px 0 2px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.ny-tier:first-child{margin-top:2px}
.ny-tier span{font-weight:600;letter-spacing:0}
.ny-tier.ny-late{color:#a53032}.ny-tier.ny-soon{color:#8a5a12}
.ny-list{list-style:none;margin:0;padding:0}
.ny-row{display:grid;grid-template-columns:128px minmax(0,1fr) auto;align-items:center;gap:2px 14px;padding:8px 0 8px 10px;border-bottom:1px solid #f0f2f5;border-left:3px solid #c9d2dc}
.ny-row:last-child{border-bottom:0}
.ny-row.ny-late{border-left-color:#d03b3b}.ny-row.ny-soon{border-left-color:#fab219}
.ny-when{font-size:12px;font-weight:650;color:var(--muted)}
.ny-late .ny-when{color:#a53032}.ny-soon .ny-when{color:#8a5a12}
.ny-what{min-width:0}
.ny-what strong{display:block;line-height:1.35;overflow-wrap:anywhere}
.ny-what small{display:block;margin-top:1px;font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
button.ny-go{border:1px solid var(--line);background:var(--surface);color:#117da8;padding:6px 14px;white-space:nowrap}
.ny-foot{margin-top:6px}
button.ny-more{color:#117da8;padding:6px 0}
.ny-panel .ny-row{grid-template-columns:110px minmax(0,1fr) auto}
.ny-asof{margin:10px 0 0;font-size:11px}
.ny-fold{display:flex;align-items:center;flex-wrap:wrap;gap:4px 12px;margin:10px 0 0;padding:4px 14px;border:1px dashed #ced7e1;border-radius:var(--radius);background:var(--surface)}
.ny-fold.open{border-style:solid;border-color:var(--line)}
button.ny-fold-btn{color:#117da8;padding:8px 0;min-height:40px}
.ny-fold-btn::after{content:' ▾'}.ny-fold.open .ny-fold-btn::after{content:' ▴'}
.ny-fold small{color:var(--muted);font-size:12px}
@media(max-width:720px){.ny-row,.ny-panel .ny-row{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"when go" "what go";padding:8px 0 8px 9px;gap:1px 10px}
 .ny-when{grid-area:when;font-size:11.5px}.ny-what{grid-area:what}button.ny-go{grid-area:go;min-height:44px;padding:6px 12px}
 .ny-what small{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
 button.ny-fold-btn{min-height:44px}}
/* JOBFLOW-01 H end */
