:root{
  --bg:#f5f7fb;
  --surface:#ffffff;
  --surface-soft:#f8fafc;
  --ink:#13233b;
  --muted:#728197;
  --navy:#173a63;
  --blue:#2f80c9;
  --sky:#71b7e6;
  --teal:#2aa79a;
  --green:#4da773;
  --amber:#e7a52f;
  --coral:#e46f68;
  --violet:#7b70d3;
  --line:#dce4ee;
  --line-soft:#e9eef4;
  --radius:12px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}
button{font:inherit;cursor:pointer}.app-shell{max-width:1500px;margin:0 auto;padding:22px}
.hero-panel,.card,.stat-card,.pulse-card,.contractor-detail,.quality-group{animation:fadeUp .42s ease both}
.hero-panel{display:flex;justify-content:space-between;gap:24px;align-items:flex-start;margin-bottom:14px;background:#fff;border:1px solid var(--line);border-left:5px solid var(--navy);border-radius:var(--radius);padding:20px 20px 18px}
.hero-copy{max-width:760px}.eyebrow{margin:0 0 5px;color:var(--blue);font-size:10.5px;font-weight:850;letter-spacing:.15em;text-transform:uppercase}
h1,h2,h3,p{margin-top:0}h1{margin-bottom:6px;font-size:clamp(30px,4vw,42px);line-height:1.04;letter-spacing:-.04em;color:#102c4b}h2{margin-bottom:0;font-size:25px;letter-spacing:-.025em;color:#173a63}h3{margin-bottom:3px;font-size:16px;color:#173a63}.subtitle,.section-note,.card-heading p,.stat-foot,.graph-sub,.pulse-progress-row .detail,.contractor-meta,.quality-item{color:var(--muted)}.subtitle{margin:0;max-width:700px;line-height:1.5;font-size:13px}
.topbar-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.status-pill{display:flex;align-items:center;gap:7px;background:#f8fafc;border:1px solid var(--line);border-radius:8px;padding:9px 11px;color:#52657c;font-size:11.5px}.status-dot{width:7px;height:7px;border-radius:50%;background:var(--amber)}.status-pill.live .status-dot{background:var(--green)}.status-pill.fallback .status-dot{background:var(--coral)}
.button{border:1px solid transparent;border-radius:8px;padding:9px 12px;font-weight:780;font-size:11.5px;transition:background .15s ease,border-color .15s ease,transform .15s ease}.button:hover{transform:translateY(-1px)}.button.secondary{background:var(--navy);color:#fff}.button.secondary:hover{background:#102f52}.button.export{background:#fff;border-color:#b9c9dc;color:var(--navy)}.button.export:hover{background:#eef5fb;border-color:#7fa5c9}

.stats-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:12px}
.stat-card{--stat-accent:var(--blue);background:#fff;border:1px solid var(--line);border-top:3px solid var(--stat-accent);border-radius:10px;padding:10px 11px;min-height:84px;display:flex;flex-direction:column;justify-content:space-between;animation:fadeUp .42s ease both;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease}
.stat-card:hover{transform:translateY(-2px);border-color:#c8d6e6;box-shadow:0 8px 18px rgba(19,58,99,.06)}
.stat-blue{--stat-accent:var(--blue)}.stat-teal{--stat-accent:var(--teal)}.stat-green{--stat-accent:var(--green)}.stat-violet{--stat-accent:var(--violet)}.stat-amber{--stat-accent:var(--amber)}.stat-coral{--stat-accent:var(--coral)}
.stat-top{display:flex;align-items:center;gap:7px;min-width:0}.stat-label{font-size:10px;color:#4c6380;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.stat-marker{width:8px;height:8px;border-radius:2px;background:var(--stat-accent);flex:0 0 auto}
.stat-value{display:block;font-size:23px;line-height:1;font-weight:880;letter-spacing:-.04em;color:#0f2d4f;margin:5px 0 3px}.stat-foot{font-size:9.5px;line-height:1.2;color:#71839a}
.tabs{display:flex;gap:4px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:4px;margin-bottom:14px;overflow:auto;position:sticky;top:7px;z-index:20}.tab{border:0;background:transparent;color:#657991;font-weight:760;padding:8px 12px;border-radius:7px;white-space:nowrap;font-size:12px}.tab.active{background:#eaf2fa;color:var(--navy)}.tab:hover{color:var(--navy)}
.tab-panel{display:none}.tab-panel.active{display:block;animation:fadeIn .22s ease}.section-heading{display:flex;justify-content:space-between;gap:22px;align-items:end;margin:2px 0 10px}.section-note{margin:0;max-width:590px;line-height:1.4;font-size:12px;text-align:right}.dashboard-grid{display:grid;gap:10px}.two-col{grid-template-columns:repeat(2,minmax(0,1fr))}
.card{--accent:var(--blue);background:#fff;border:1px solid var(--line);border-top:3px solid var(--accent);border-radius:var(--radius);padding:15px}.accent-blue{--accent:var(--blue)}.accent-violet{--accent:var(--violet)}.accent-teal{--accent:var(--teal)}.accent-coral{--accent:var(--coral)}.accent-navy{--accent:var(--navy)}.card-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:12px}.card-heading p{font-size:11px;margin:0;line-height:1.35}.mini-tag{font-size:9.5px;font-weight:850;padding:5px 7px;border-radius:6px;white-space:nowrap;border:1px solid currentColor;background:#fff}.mini-tag.blue{color:var(--blue)}.mini-tag.violet{color:var(--violet)}.mini-tag.teal{color:var(--teal)}.mini-tag.coral{color:var(--coral)}.mini-tag.navy{color:var(--navy)}

.project-pulse-shell{padding:14px}.pulse-heading{margin-bottom:11px}.project-pulse{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.pulse-card{--project-accent:var(--blue);border:1px solid var(--line);border-top:4px solid var(--project-accent);border-radius:12px;padding:12px;background:#fff;min-width:0;transition:transform .2s ease,border-color .2s ease,box-shadow .2s ease;position:relative;overflow:hidden}
.pulse-card:nth-child(2){--project-accent:var(--teal)}.pulse-card:nth-child(3){--project-accent:var(--violet)}
.pulse-card:hover{transform:translateY(-3px);border-color:#c7d5e4;box-shadow:0 10px 24px rgba(20,49,82,.08)}
.pulse-card::after{content:"";position:absolute;right:-22px;top:-22px;width:74px;height:74px;border-radius:50%;background:color-mix(in srgb,var(--project-accent) 8%,transparent);pointer-events:none}
.pulse-title{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;font-weight:850;margin-bottom:11px;position:relative;z-index:1}.pulse-project-name{font-size:16px;line-height:1.2;color:#173a63}.score-pill{background:#f4f7fb;color:#173a63;font-size:9.5px;font-weight:850;padding:5px 8px;border-radius:7px;white-space:nowrap;border:1px solid var(--line)}
.pulse-section-label{display:flex;align-items:center;gap:6px;font-size:8.8px;font-weight:850;letter-spacing:.09em;color:#687c93;text-transform:uppercase;margin:10px 0 6px}.pulse-section-label::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--project-accent)}
.delivery-list{display:flex;flex-direction:column;gap:6px}.delivery-row{--metric-accent:var(--blue);background:#f8fafc;border:1px solid var(--line-soft);border-radius:9px;padding:7px 8px;transition:background .16s ease,border-color .16s ease}.delivery-row:hover{background:#f5f9fd;border-color:#d7e3ef}.delivery-row.readiness{--metric-accent:var(--teal)}.delivery-row.handover{--metric-accent:var(--blue)}.delivery-row.snags{--metric-accent:var(--green)}
.delivery-head{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:6px;align-items:baseline;margin-bottom:5px}.delivery-label{font-size:9.7px;color:#314d6c;font-weight:820;white-space:nowrap}.delivery-count{font-size:8.7px;color:#74869b;white-space:nowrap}.delivery-rate{font-size:9.7px;font-weight:850;color:var(--metric-accent);white-space:nowrap}.metric-track{height:5px;background:#e8edf3;border-radius:999px;overflow:hidden}.metric-fill{height:100%;background:var(--metric-accent);border-radius:999px;min-width:2px;transform-origin:left;animation:barGrow .72s cubic-bezier(.2,.8,.2,1) both}
.pulse-count-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:5px}.pulse-metric{--metric-tint:#eef5fb;background:var(--metric-tint);border:1px solid var(--line-soft);padding:6px 7px;border-radius:8px;min-width:0;position:relative}.pulse-metric:nth-child(1){--metric-tint:#fff7e8}.pulse-metric:nth-child(2){--metric-tint:#f1effd}.pulse-metric:nth-child(3){--metric-tint:#fff1f0}.pulse-metric:nth-child(4){--metric-tint:#edf8f6}.pulse-metric:nth-child(5){--metric-tint:#eef5fb}.pulse-metric span{display:block;font-size:7.9px;color:#77899e;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pulse-metric strong{font-size:11.8px;display:block;overflow:hidden;text-overflow:ellipsis;color:#173a63}
.quality-summary{background:#f8fafc;border:1px solid var(--line-soft);border-radius:9px;padding:8px}.ncr-line{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}.ncr-copy{min-width:0}.ncr-title{font-size:9.7px;font-weight:820;color:#314d6c;margin-bottom:2px}.ncr-detail{font-size:8.6px;color:#74869b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ncr-rate{font-size:13px;font-weight:880;color:var(--violet);white-space:nowrap}.ncr-stack{display:flex;height:6px;border-radius:999px;overflow:hidden;background:#e8edf3;margin:6px 0 8px}.ncr-closed{background:var(--violet);animation:barGrow .72s cubic-bezier(.2,.8,.2,1) both;transform-origin:left}.ncr-open{background:#f1b5b1}
.sla-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:center}.sla-label{font-size:9.4px;font-weight:800;color:#314d6c}.sla-rate{font-size:9.7px;font-weight:850;color:var(--green)}.sla-track{grid-column:1/-1;height:5px;background:#e8edf3;border-radius:999px;overflow:hidden}.sla-fill{height:100%;background:var(--green);border-radius:999px;transform-origin:left;animation:barGrow .72s cubic-bezier(.2,.8,.2,1) both}
.pulse-divider{height:1px;background:var(--line-soft);margin:10px 0 7px}
@keyframes barGrow{from{transform:scaleX(0);opacity:.45}to{transform:scaleX(1);opacity:1}}

.contractor-layout{grid-template-columns:minmax(0,1.55fr) minmax(300px,.85fr)}.accordion-list{display:flex;flex-direction:column;gap:7px}.contractor-detail{border:1px solid var(--line);border-left:3px solid var(--teal);border-radius:8px;overflow:hidden;background:#fff}.contractor-detail summary{list-style:none;display:grid;grid-template-columns:1fr auto auto;gap:10px;align-items:center;padding:10px 11px;cursor:pointer}.contractor-detail summary:hover{background:#f7fbfa}.contractor-detail summary::-webkit-details-marker{display:none}.contractor-name{font-weight:800;font-size:12.5px}.contractor-meta{font-size:10.5px}.chevron{font-size:16px;color:#728197;transition:transform .15s}.contractor-detail[open] .chevron{transform:rotate(180deg)}.detail-body{padding:0 11px 9px}.contractor-project-row{display:grid;grid-template-columns:minmax(115px,1fr) 2fr 48px;gap:8px;align-items:center;padding:7px 0;border-top:1px solid var(--line-soft);font-size:10.5px}.contractor-project-row .bar-track{height:6px;background:#e8edf3;border-radius:3px;overflow:hidden}.contractor-project-row .bar-fill{height:100%;background:var(--teal);border-radius:3px}
.quality-groups{display:flex;flex-direction:column;gap:8px}.quality-group{border:1px solid var(--line);border-left:3px solid var(--coral);border-radius:8px;padding:10px;background:#fff}.quality-group-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}.quality-group-head strong{font-size:12.5px}.count-badge{background:#fff1ef;color:#b84943;border-radius:6px;padding:4px 6px;font-size:9.5px;font-weight:800;border:1px solid #f2cbc8}.quality-item{padding:6px 0;border-top:1px solid var(--line-soft);font-size:10.5px}.quality-item:first-of-type{border-top:0}.print-page-heading{display:none}
footer{display:flex;justify-content:space-between;gap:15px;color:var(--muted);font-size:10px;padding:16px 3px 2px}
@keyframes fadeUp{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}

@media (max-width:1200px){.stats-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.project-pulse{grid-template-columns:repeat(2,minmax(0,1fr))}.pulse-count-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:860px){.app-shell{padding:15px}.hero-panel{flex-direction:column}.topbar-actions{justify-content:flex-start}.two-col,.contractor-layout{grid-template-columns:1fr}.section-heading{align-items:flex-start;flex-direction:column}.section-note{text-align:left}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.tabs{top:5px}.project-pulse{grid-template-columns:1fr}}
@media (max-width:560px){.app-shell{padding:9px}.stats-grid{grid-template-columns:1fr 1fr;gap:6px}.stat-card{min-height:78px;padding:9px 10px}.stat-value{font-size:20px}.stat-foot{font-size:9px}.tab{padding:8px 9px;font-size:11px}.card{padding:11px}.pulse-count-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.contractor-detail summary{grid-template-columns:1fr auto}.contractor-meta{grid-column:1}.chevron{grid-column:2;grid-row:1/3}.contractor-project-row{grid-template-columns:1fr 1.4fr 42px}footer{flex-direction:column}}

@page{size:A4 portrait;margin:8mm}
@media print{
  *{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important;animation:none!important;transition:none!important}
  html,body{width:210mm;background:#fff!important;color:#13233b}
  body{margin:0!important}
  .app-shell{max-width:none;width:auto;padding:0!important}
  .hero-panel{margin:0 0 3mm;border-radius:0;padding:4mm 4.5mm 3.4mm;min-height:0;border-left-width:4px}
  .hero-copy{max-width:135mm}.hero-panel h1{font-size:21pt;margin-bottom:1.5mm}.hero-panel .subtitle{font-size:7.6pt;line-height:1.25}.hero-panel .eyebrow{font-size:6.5pt;margin-bottom:1mm}.topbar-actions{display:none!important}
  .stats-grid{grid-template-columns:repeat(3,1fr);gap:1.4mm;margin-bottom:2.5mm}.stat-card{min-height:0;border-radius:1.8mm;padding:1.7mm 2mm;border-top-width:2px;box-shadow:none!important}.stat-label{font-size:5.3pt}.stat-marker{width:1.5mm;height:1.5mm;border-radius:.4mm}.stat-value{font-size:10.5pt;margin:1mm 0 .5mm}.stat-foot{font-size:4.9pt}
  .tabs,footer{display:none!important}
  main{display:block}.tab-panel,.tab-panel.active{display:block!important}
  .report-page{break-inside:avoid-page}.report-page-overview{break-after:page;page-break-after:always}.report-page-contractors{break-before:page;page-break-before:always}
  .section-heading{margin:0 0 2mm;align-items:end}.section-heading .eyebrow{font-size:6pt;margin-bottom:.7mm}.section-heading h2{font-size:14pt}.section-note{font-size:6.3pt;line-height:1.2;max-width:95mm}
  .card{border-radius:2mm;padding:2.5mm;border-top-width:2px}.card-heading{margin-bottom:1.5mm}.card-heading h3{font-size:8.8pt;margin-bottom:.4mm}.card-heading p{font-size:5.8pt;line-height:1.2}.mini-tag{font-size:5.6pt;padding:1mm 1.4mm;border-radius:1mm}
  .project-pulse-shell{padding:2.3mm}.pulse-heading{margin-bottom:1.5mm}.project-pulse{grid-template-columns:repeat(3,1fr);gap:1.5mm}.pulse-card{border-radius:1.8mm;padding:2mm;border-top-width:2px;box-shadow:none!important;transform:none!important}.pulse-title{margin-bottom:1.3mm}.pulse-project-name{font-size:8.3pt}.score-pill{font-size:5.4pt;padding:.9mm 1.2mm;border-radius:1mm}.pulse-section-label{font-size:4.8pt;margin:1.4mm 0 .8mm}.delivery-list{gap:1mm}.delivery-row{padding:1mm 1.1mm;border-radius:1mm}.delivery-head{gap:.8mm;margin-bottom:.6mm}.delivery-label{font-size:5.4pt}.delivery-count{font-size:4.7pt}.delivery-rate{font-size:5.4pt}.metric-track{height:1mm}.pulse-count-grid{grid-template-columns:repeat(5,1fr);gap:.7mm}.pulse-metric{padding:.9mm 1mm;border-radius:1mm}.pulse-metric span{font-size:4.3pt;margin-bottom:.2mm}.pulse-metric strong{font-size:6.2pt}.pulse-divider{margin:1.2mm 0 .7mm}.quality-summary{padding:1.1mm;border-radius:1mm}.ncr-title{font-size:5.3pt}.ncr-detail{font-size:4.6pt}.ncr-rate{font-size:6.5pt}.ncr-stack{height:1mm;margin:.7mm 0 1mm}.sla-label{font-size:5.1pt}.sla-rate{font-size:5.3pt}.sla-track{height:1mm}
  .print-page-heading{display:block;margin:0 0 3mm;padding:0 0 2mm;border-bottom:1px solid var(--line)}.print-page-heading .eyebrow{font-size:6.5pt;margin-bottom:.8mm}.print-page-heading h2{font-size:16pt;margin:0}.report-page-contractors>.section-heading{display:none}
  .contractor-layout{grid-template-columns:1.45fr .85fr;gap:2mm}.accordion-list{gap:1.2mm}.contractor-detail{border-radius:1.5mm;border-left-width:2px;break-inside:avoid}.contractor-detail summary{padding:1.5mm 1.7mm;grid-template-columns:1fr auto;gap:1.5mm}.contractor-name{font-size:6.3pt}.contractor-meta{font-size:5pt}.contractor-detail summary .chevron{display:none}.detail-body{display:block!important;padding:0 1.7mm 1.3mm}.contractor-project-row{grid-template-columns:minmax(26mm,1fr) 1.7fr 11mm;gap:1.5mm;padding:1mm 0;font-size:5.3pt}.contractor-project-row .bar-track{height:1.2mm}.quality-groups{gap:1.2mm}.quality-group{border-radius:1.5mm;padding:1.5mm;border-left-width:2px;break-inside:avoid}.quality-group-head{margin-bottom:.7mm}.quality-group-head strong{font-size:6.3pt}.count-badge{font-size:5pt;padding:.8mm 1mm;border-radius:1mm}.quality-item{padding:.9mm 0;font-size:5.3pt}
}
