/* 3.332 Delays (#470), Pre-mortem (#471), Roofs that come back (#472) — public/jobplus-ui.js. Uses the app's theme tokens (styles.css),
   so dark and light both follow the app. */
.jp-ov{position:fixed;inset:0;z-index:900;background:var(--scrim);display:flex;align-items:flex-start;justify-content:center;overflow:auto;padding:24px 12px}
.jp-box{background:var(--bg-2);color:var(--ink);border:1px solid var(--line-2);border-radius:12px;width:min(1100px,100%);box-shadow:var(--shadow);font-family:var(--f-ui)}
.jp-top{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--bg-2);border-radius:12px 12px 0 0}
.jp-top b{font-family:var(--f-disp);font-size:22px;letter-spacing:.02em}
.jp-x{background:none;border:0;color:var(--ink-2);font-size:20px;min-width:44px;min-height:44px;cursor:pointer}
.jp-body{padding:12px 16px 20px}
.jp-body h3{margin:18px 0 8px;font-size:15px;color:var(--ink-2)}
.jp-sub{color:var(--ink-2);margin-bottom:10px}
.jp-note{color:var(--ink-3);font-size:13px;margin:8px 0;line-height:1.45}
.jp-load,.jp-empty{color:var(--ink-2);padding:18px 0}
.jp-err{color:var(--crit);background:var(--crit-a);padding:10px 12px;border-radius:8px;margin:8px 0}
.jp-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin:6px 0}
.jp-kpis>div{background:var(--bg-inset);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.jp-kpis b{display:block;font-family:var(--f-num);font-size:24px}
.jp-kpis span{color:var(--ink-3);font-size:12px}
.jp-kpis .warn b{color:var(--warn)}
.jp-tbl{width:100%;margin:6px 0}
.jp-tbl td small,.jp-seen small{display:block;color:var(--ink-3);font-size:12px}
.jp-tbl tr.void td{opacity:.5;text-decoration:line-through}
.jp-tbl tr.thin td{color:var(--ink-3)}
.jp-chip{display:inline-block;padding:2px 8px;border-radius:999px;font-size:12px;background:var(--accent-a);color:var(--ink)}
.jp-chip.late{background:var(--crit-a);color:var(--crit)}
.jp-chip.due{background:var(--warn-a);color:var(--warn)}
.jp-chip.sent{background:var(--good-a);color:var(--good)}
.jp-chip.none,.jp-chip.void{background:var(--track);color:var(--ink-3)}
.jp-chip.unknown{background:var(--warn-a);color:var(--warn)}
.jp-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:10px 0}
.jp-bar span{color:var(--ink-3);font-size:13px}
.jp-form{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end;background:var(--bg-inset);border:1px solid var(--line-2);border-radius:10px;padding:12px;margin:8px 0}
.jp-form>b{flex-basis:100%}
.jp-form label{display:flex;flex-direction:column;font-size:12px;color:var(--ink-3);gap:4px}
.jp-form label.wide{flex:1 1 320px}
.jp-form input,.jp-form select,.jp-form textarea,.jp-ans textarea,.jp-draft textarea,.jp-set input{background:var(--bg);color:var(--ink);border:1px solid var(--line-2);border-radius:6px;padding:8px;font:inherit;min-height:40px}
.jp-msg{font-size:13px;margin-left:6px}
.jp-msg.bad{color:var(--crit)}
.jp-msg.ok{color:var(--good)}
.jp-seen{list-style:none;padding:0;margin:0}
.jp-seen li{display:flex;gap:8px;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);padding:8px 0;flex-wrap:wrap}
.jp-draft textarea{width:100%;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13px;margin:6px 0}
.jp-set{margin-top:16px;color:var(--ink-3)}
.jp-set label{margin-right:8px}
.jp-risk{border:1px solid var(--line-2);border-radius:10px;padding:12px 14px;margin:10px 0;background:var(--bg-inset)}
.jp-rk{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}
.jp-n{font-family:var(--f-num);font-size:18px;color:var(--accent)}
.jp-kind{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);border:1px solid var(--line-2);border-radius:4px;padding:1px 6px}
.jp-risk ul{margin:8px 0 6px 18px;padding:0;color:var(--ink-2)}
.jp-do{color:var(--ink)}
.jp-plan{margin-top:8px;color:var(--good)}
.jp-ans{display:flex;gap:8px;align-items:flex-end;margin-top:8px;flex-wrap:wrap}
.jp-ans textarea{flex:1 1 320px}
.jp-vs{position:relative;height:8px;background:var(--track);border-radius:4px;margin:8px 0;max-width:420px}
.jp-vs i{position:absolute;left:0;top:0;bottom:0;background:var(--warn);border-radius:4px}
.jp-vs em{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--ink)}
.jp-tbl .jp-vs{width:120px;display:inline-block;vertical-align:middle;margin:0 8px 0 0}
.jp-grade li.hit{color:var(--warn)}
.jp-grade li.miss{color:var(--good)}
.jp-foot{margin-top:16px;color:var(--ink-3);font-size:13px}
.jp-tabs{display:flex;gap:4px;flex-wrap:wrap;margin:12px 0 4px}
.jp-tabs button{background:var(--bg-inset);color:var(--ink-2);border:1px solid var(--line-2);border-radius:999px;padding:6px 12px;min-height:36px;cursor:pointer}
.jp-tabs button[aria-selected="true"]{background:var(--accent-a);color:var(--ink);border-color:var(--accent)}
.jp-src{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:8px}
.jp-src>div{background:var(--bg-inset);border:1px solid var(--line);border-radius:10px;padding:10px}
.jp-src ul{margin:6px 0 0 16px;padding:0;color:var(--ink-2)}
@media (max-width:640px){.jp-ov{padding:0}.jp-box{border-radius:0;min-height:100%}.jp-tbl{display:block;overflow-x:auto}}
/* #474 labor pipeline board (public/laborpipe-ui.js) */
.lp-grid{display:flex;flex-direction:column;gap:2px;margin-top:8px;overflow-x:auto}
.lp-row{display:grid;grid-template-columns:minmax(150px,1.3fr) minmax(150px,1.3fr) auto minmax(120px,1fr) 80px;gap:10px;align-items:center;padding:8px 6px;border-bottom:1px solid var(--line)}
.lp-row small{display:block;color:var(--ink-3);font-size:12px}
.lp-head{color:var(--ink-3);font-size:12px;border-bottom:1px solid var(--line-2)}
.lp-days{display:flex;gap:3px}
.lp-head .lp-days span{width:22px;text-align:center;font-size:10px}
.lp-c{display:inline-block;width:22px;height:22px;border-radius:4px;background:var(--track);vertical-align:middle}
.lp-c.full{background:var(--good-a);box-shadow:inset 0 0 0 1px var(--good)}
.lp-c.part{background:var(--warn-a);box-shadow:inset 0 0 0 1px var(--warn)}
.lp-c.idle{background:var(--crit-a);box-shadow:inset 0 0 0 1px var(--crit)}
.lp-c.rain{background:repeating-linear-gradient(45deg,var(--metal-a) 0 4px,transparent 4px 8px);box-shadow:inset 0 0 0 1px var(--metal)}
.lp-c.off{background:var(--hatch)}
.lp-c.unk,.lp-weeks i.unk{background:repeating-linear-gradient(-45deg,var(--track) 0 3px,transparent 3px 6px);box-shadow:inset 0 0 0 1px var(--line-2);opacity:1}
.lp-c.sch{outline:2px solid var(--accent);outline-offset:-2px}
.lp-weeks{display:flex;align-items:flex-end;gap:2px;height:28px}
.lp-weeks i{flex:1;background:var(--accent);opacity:.7;border-radius:2px 2px 0 0;min-height:1px}
.lp-legend{display:flex;gap:6px;align-items:center;flex-wrap:wrap;font-size:12px;color:var(--ink-3);margin:6px 0}
.lp-legend .lp-c{width:14px;height:14px}
@media (max-width:640px){.lp-row{grid-template-columns:1fr 1fr;}.lp-days,.lp-weeks{grid-column:1/-1}}
