/* Phase 2E.3 Hardening — Resource Planning & Staffing v0.7.1 */
.staffing-note{background:linear-gradient(90deg,var(--purple-soft),var(--green-soft));border:1px solid var(--line);border-radius:13px;padding:11px 14px;margin-bottom:14px;color:var(--muted);font-size:10px;line-height:1.55}.staffing-note strong{color:var(--text)}
.staffing-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:14px}.staffing-kpi{border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:14px;box-shadow:var(--shadow)}.staffing-kpi span{display:block;font-size:8px;letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}.staffing-kpi strong{display:block;font-family:'Plus Jakarta Sans';font-size:24px;margin-top:5px}.staffing-kpi small{display:block;color:var(--muted);font-size:8px;margin-top:4px;line-height:1.45}
.staffing-toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}.staffing-toolbar .filter{min-width:155px}.staffing-view-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-left:auto}.staffing-view-tab{border:1px solid var(--line);background:var(--surface);padding:8px 11px;border-radius:10px;font-size:9px;font-weight:800;color:var(--muted);cursor:pointer}.staffing-view-tab.active{background:var(--purple);color:#fff;border-color:var(--purple)}

/* Board: use the workspace deliberately. One project spans the full row; multiple projects use a responsive two-column grid. */
.staffing-board{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.staffing-board.single{grid-template-columns:1fr}.staffing-project{border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:14px;box-shadow:var(--shadow);min-width:0}.staffing-project-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.staffing-project-title strong{display:block;font-size:13px}.staffing-project-title span{display:block;color:var(--muted);font-size:8px;margin-top:3px}.staffing-stage{font-size:8px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;border-radius:999px;padding:5px 8px}.staffing-stage.pipeline{background:var(--cream);color:var(--muted)}.staffing-stage.review{background:var(--orange-soft);color:var(--warning)}.staffing-stage.confirmed{background:var(--purple-soft);color:var(--purple)}.staffing-stage.active{background:var(--green-soft);color:var(--green-dark)}
.staffing-project-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:11px 0}.staffing-project-meta div{background:var(--cream);border-radius:9px;padding:8px}.staffing-project-meta span{display:block;font-size:7px;color:var(--muted)}.staffing-project-meta strong{display:block;font-size:11px;margin-top:3px}
.staffing-role-list{display:flex;flex-direction:column;gap:7px}.staffing-role{display:grid;grid-template-columns:minmax(180px,2fr) .55fr .65fr .65fr minmax(118px,auto);gap:8px;align-items:center;padding:9px;border:1px solid var(--line);border-radius:10px}.staffing-role-name strong{display:block;font-size:10px}.staffing-role-name span{display:block;font-size:7px;color:var(--muted);margin-top:2px}.staffing-role-stat span{display:block;font-size:7px;color:var(--muted)}.staffing-role-stat strong{display:block;font-size:10px;margin-top:2px}.staffing-gap{font-weight:800}.staffing-gap.open{color:var(--danger)}.staffing-gap.covered{color:var(--green-dark)}

/* Capacity forecast: incomplete BAU is deliberately neutral/warning, never green availability. */
.staffing-capacity-legend{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin:0 0 9px;color:var(--muted);font-size:8px}.staffing-capacity-legend span{display:flex;align-items:center;gap:5px}.staffing-capacity-legend .dot{width:8px;height:8px;border-radius:99px;display:inline-block}.staffing-capacity-legend .dot.complete{background:var(--green)}.staffing-capacity-legend .dot.partial{background:var(--warning)}
.staffing-capacity-wrap{overflow:auto;border:1px solid var(--line);border-radius:12px}.staffing-capacity-table{min-width:1180px;width:100%;border-collapse:collapse}.staffing-capacity-table th,.staffing-capacity-table td{border-bottom:1px solid var(--line);padding:8px;text-align:center;font-size:8px}.staffing-capacity-table th{color:var(--muted);font-weight:800;background:var(--cream)}.staffing-capacity-table th:first-child,.staffing-capacity-table td:first-child{text-align:left;position:sticky;left:0;z-index:2;background:var(--surface);min-width:220px}.staffing-capacity-table th:first-child{background:var(--cream);z-index:3}.staffing-person strong{display:block;font-size:10px}.staffing-person span{display:block;color:var(--muted);font-size:7px;margin-top:2px}.staffing-week{display:block;border-radius:8px;padding:7px 5px;font-weight:800;border:1px solid transparent;min-width:62px}.staffing-week small{display:block;font-weight:600;font-size:7px;margin-top:2px;opacity:.8}.staffing-week.available{background:var(--green-soft);color:var(--green-dark)}.staffing-week.review{background:var(--orange-soft);color:var(--warning)}.staffing-week.over_capacity{background:var(--danger-soft);color:var(--danger)}.staffing-week.partial{background:var(--cream);color:var(--warning);border-color:rgba(196,123,20,.22)}
.staffing-peak{display:inline-flex;flex-direction:column;align-items:center;border-radius:999px;padding:6px 9px;font-size:8px;line-height:1.15}.staffing-peak strong{font-size:8px}.staffing-peak small{font-size:6px;margin-top:2px}.staffing-peak.partial{background:var(--cream);color:var(--warning);border:1px solid rgba(196,123,20,.22)}

.staffing-gap-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.staffing-gap-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:10px}.staffing-gap-summary div{border:1px solid var(--line);border-radius:10px;padding:10px;background:var(--cream)}.staffing-gap-summary span{display:block;font-size:7px;color:var(--muted)}.staffing-gap-summary strong{display:block;font-size:16px;margin-top:3px}.staffing-gap-list{display:flex;flex-direction:column;gap:7px}.staffing-gap-row{display:grid;grid-template-columns:1.5fr 1fr .55fr auto;gap:8px;align-items:center;border:1px solid var(--line);border-radius:10px;padding:9px}.staffing-gap-row strong{font-size:9px}.staffing-gap-row span{font-size:7px;color:var(--muted)}
.staffing-empty{padding:26px;text-align:center;color:var(--muted);font-size:10px}.staffing-empty.positive{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:130px}.staffing-empty.positive strong{color:var(--green-dark);font-size:12px}.staffing-empty.positive span{margin-top:5px}

/* Modal + simulator */
.staffing-modal{width:min(1240px,calc(100vw - 40px));max-height:calc(100vh - 40px)}.staffing-modal-table{width:100%;border-collapse:collapse;min-width:980px}.staffing-modal-table th,.staffing-modal-table td{padding:9px 8px;border-bottom:1px solid var(--line);font-size:8px;text-align:left;vertical-align:middle}.staffing-modal-table th{color:var(--muted)}.staffing-modal-table td>span,.staffing-modal-table td>strong+br+span{color:var(--muted);font-size:7px}.staffing-employee-row{cursor:pointer}.staffing-employee-row:hover td{background:var(--cream)}
.staffing-sim-legend{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:-3px 0 10px;color:var(--muted);font-size:7px}.staffing-sim-legend span{background:var(--cream);border-radius:999px;padding:5px 8px}.role-fit{display:flex;flex-direction:column;gap:2px}.role-fit strong{font-size:8px}.role-fit small{font-size:6.5px;color:var(--muted)}.role-fit.strong strong{color:var(--green-dark)}.role-fit.moderate strong{color:var(--purple)}.role-fit.weak strong,.role-fit.unverified strong{color:var(--warning)}.load-cell{display:flex;flex-direction:column;gap:2px}.load-cell strong{font-size:8px}.load-cell small{font-size:6.5px;color:var(--muted)}.load-cell.partial strong,.partial-text{color:var(--warning)!important}.confidence{font-size:7px;font-weight:800;text-transform:capitalize}.confidence.high{color:var(--green-dark)}.confidence.medium{color:var(--warning)}

/* Employee Staffing Portfolio */
.portfolio-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0 0 12px}.portfolio-kpis>div{border:1px solid var(--line);border-radius:12px;background:var(--surface);padding:11px}.portfolio-kpis span{display:block;color:var(--muted);font-size:7px;text-transform:uppercase;letter-spacing:.05em}.portfolio-kpis strong{display:block;font-size:18px;margin-top:4px}.portfolio-kpis small{display:block;color:var(--muted);font-size:7px;margin-top:3px}
.portfolio-timeline{border:1px solid var(--line);border-radius:13px;background:var(--surface);padding:12px;margin-bottom:12px}.portfolio-section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:10px}.portfolio-section-head h3{font-size:11px;margin:0}.portfolio-section-head p{font-size:8px;color:var(--muted);margin:3px 0 0}.portfolio-week-grid{display:grid;grid-template-columns:repeat(12,minmax(48px,1fr));gap:5px;overflow:auto;padding-bottom:2px}.portfolio-week{height:92px;min-width:48px;border:1px solid var(--line);border-radius:9px;background:var(--cream);padding:6px;display:grid;grid-template-rows:auto 1fr auto;gap:4px;text-align:center}.portfolio-week>span{font-size:7px;font-weight:800}.portfolio-week>span small{display:block;font-size:6px;color:var(--muted);margin-top:1px}.portfolio-week>strong{font-size:7px}.portfolio-bar{height:45px;display:flex;align-items:flex-end;justify-content:center;background:rgba(0,0,0,.025);border-radius:5px;overflow:hidden}.portfolio-bar i{display:block;width:100%;background:var(--green);min-height:2px}.portfolio-week.review .portfolio-bar i{background:var(--warning)}.portfolio-week.over_capacity .portfolio-bar i{background:var(--danger)}.portfolio-week.partial{border-color:rgba(196,123,20,.22)}.portfolio-week.partial .portfolio-bar i{background:var(--warning)}.portfolio-week.partial>strong{color:var(--warning)}
.portfolio-project-grid{margin-top:0}.staffing-portfolio-list{display:flex;flex-direction:column;gap:7px}.staffing-portfolio-item{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px;display:flex;justify-content:space-between;gap:10px;background:var(--surface);text-align:left;color:inherit}.staffing-portfolio-item strong{font-size:10px}.staffing-portfolio-item div>span{font-size:8px;color:var(--muted);display:block;margin-top:3px}.staffing-project-link{cursor:pointer}.staffing-project-link:hover{border-color:var(--purple);background:var(--purple-soft)}

@media(max-width:1050px){.staffing-kpis{grid-template-columns:repeat(2,1fr)}.staffing-board,.staffing-gap-grid{grid-template-columns:1fr}.staffing-project-meta{grid-template-columns:repeat(2,1fr)}.portfolio-kpis{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.staffing-kpis{grid-template-columns:1fr}.staffing-role{grid-template-columns:1fr 1fr}.staffing-role-name{grid-column:1/-1}.staffing-role>div:last-child{grid-column:1/-1}.staffing-role>div:last-child .btn{width:100%}.staffing-view-tabs{width:100%;margin-left:0}.staffing-gap-row{grid-template-columns:1fr 1fr}.portfolio-kpis{grid-template-columns:1fr 1fr}.staffing-modal{width:calc(100vw - 20px)}}
@media(max-width:520px){.portfolio-kpis{grid-template-columns:1fr}.staffing-project-meta{grid-template-columns:repeat(2,1fr)}}
