/* Job Forecast v2 — Production pages (Jobs pipeline · Work orders · Jobs list · Change orders). Tokens come from jf.css. */
/* ── pipeline board + job side panel ── */
.pp-wrap{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;align-items:start}
.pp-wrap.has-side{grid-template-columns:minmax(0,1fr) 340px}
.pp-wrap .board{min-width:0}
.pp-wrap.has-side .board{grid-auto-columns:minmax(200px,1fr)}
.pp-side{display:flex;flex-direction:column;gap:12px;padding:14px;background:var(--surface,var(--bg-0));border:1px solid var(--border,var(--line));border-radius:var(--r-card,12px);box-shadow:var(--shadow,none);position:sticky;top:12px;max-height:calc(100vh - 90px);overflow:auto}
.pp-side>*{flex:0 0 auto}
.fhead .ph-actions{flex-wrap:nowrap}
.pp-side-h{display:flex;align-items:flex-start;gap:10px}.pp-side-h>div{flex:1;min-width:0}.pp-side-h b{font-size:14px;cursor:pointer;border-bottom:1px dotted var(--text-faint)}
.pp-side .sec-h{padding-bottom:4px}.pp-side .rows{border:0;box-shadow:none;background:transparent;border-radius:0}.pp-side .row{padding:5px 0;font-size:12px}
.pp-side .form-grid label{font-size:11px}
.pp-stages{display:flex}.pp-stages button{flex:1;padding:0 6px;height:30px;font-size:12px}
.pp-addr{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:170px}
.pp-rcpt{margin-top:2px}.rcpt.warn{color:var(--warn)}
.board .card.on{border-color:var(--brand,var(--accent));box-shadow:0 0 0 1px var(--brand,var(--accent)) inset}
.pp-more{padding:6px 0}
.pp-ph{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.pp-ph img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px;cursor:pointer;display:block;background:var(--bg-sunken,var(--bg-2))}
.pp-wx{display:flex;align-items:center;gap:10px;font-size:12px;flex-wrap:wrap}
.pp-side .pp-doc{grid-template-columns:auto minmax(0,1fr) auto!important;gap:8px}
.pp-side .pill{align-self:center}
.pp-hint{font-size:11px;color:var(--text-faint);line-height:1.45}
/* ── list pages (jobs list, change orders): filters, document rows, pager ── */
.pp-filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.pp-filters select.fld,.pp-filters input.fld{height:32px;font-size:12px;width:auto;max-width:220px;flex:0 1 auto}
.pp-pager{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--text-dim);flex-wrap:wrap}.pp-pager .sp{flex:1}
.pp-rows .row{grid-template-columns:110px minmax(0,1fr) auto auto auto}
.pp-rows.co .row{grid-template-columns:96px minmax(0,1fr) auto auto auto}
.pp-rows .row.head span.sortable{cursor:pointer}.pp-rows .row.head span.sortable.on{color:var(--text)}
.pp-rows .row-n .mk-muted{font-weight:400}
.pp-rows .row-v.neg{color:var(--bad)}
.pp-co-actions{display:flex;gap:6px;justify-content:flex-end}
.pp-form{display:flex;flex-direction:column;gap:10px;padding:14px;border:1px solid var(--border,var(--line));border-radius:var(--r-card,12px);background:var(--surface,var(--bg-0))}
.pp-form .form-grid{grid-template-columns:repeat(3,1fr)}
.pp-picks{display:flex;flex-direction:column;border:1px solid var(--border,var(--line));border-radius:8px;overflow:hidden;max-height:200px;overflow-y:auto}
.pp-picks button{text-align:left;padding:7px 10px;border:0;background:none;font:inherit;color:var(--text);cursor:pointer;display:flex;gap:8px;align-items:baseline}
.pp-picks button:hover{background:var(--bg-sunken,var(--bg-1))}
.pp-picks button.on{background:var(--brand-soft,var(--bg-2))}
/* ── work orders: list + packet ── */
.wo-cols{display:grid;grid-template-columns:minmax(260px,.6fr) minmax(0,1.4fr);gap:28px;align-items:start}
.wo-list .row{grid-template-columns:minmax(0,1fr) auto}
.wo-list .row-m{grid-column:1 / -1;margin-top:0}
.wo-doc{display:flex;flex-direction:column;gap:16px}
.wo-doc .ph h1{font-size:18px}
.wo-doc .onething{cursor:default}.wo-doc .onething:hover{background:var(--surface,var(--bg-0))}
.wo-doc .onething.ok{border-left-color:var(--good)}.wo-doc .onething.wait{border-left-color:var(--warn)}
.wo-punch{display:flex;flex-direction:column;gap:6px}.wo-bar{height:6px;border-radius:99px;background:var(--bg-sunken,var(--bg-2));overflow:hidden;display:flex}.wo-bar i{display:block;height:100%;background:var(--good)}.wo-bar i.run{background:var(--warn)}
.wo-item{display:flex;flex-direction:column;gap:8px;padding:10px 0;border-bottom:1px solid var(--border-2,var(--line-soft))}
.wo-item-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.wo-item-h b{font-size:13px}
.wo-item-photos{display:flex;gap:6px;flex-wrap:wrap}.wo-item-photos figure{margin:0;width:88px}.wo-item-photos img{width:88px;height:66px;object-fit:cover;border-radius:6px;display:block;cursor:pointer;background:var(--bg-sunken,var(--bg-2))}.wo-item-photos figcaption{font-size:10px;color:var(--text-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wo-instr{white-space:pre-wrap;font-size:13px;line-height:1.5}
.wo-mats{margin:0;padding-left:18px;font-size:13px;line-height:1.6}
.wo-tools{display:flex;flex-wrap:wrap;gap:6px}
.wo-flag{font-size:12px;color:var(--warn)}
.wo-meta{display:grid;grid-template-columns:1fr 1fr auto;gap:10px;align-items:end}
@media (max-width:1100px){.pp-wrap.has-side{grid-template-columns:1fr}.pp-side{position:static;max-height:none}.wo-cols{grid-template-columns:1fr}.pp-form .form-grid{grid-template-columns:1fr 1fr}}
@media print{.wo-list,.pp-filters,.ph-actions,.wo-doc .toolbar,.wo-doc textarea,.wo-doc .seg,.wo-doc .btn,.rd-note{display:none!important}.wo-cols{display:block}.wo-doc .onething,.wo-item{break-inside:avoid}}
