/* Admin Dashboard redesign (Issues-Dashboard-001, Phase 1) */
.dash-head{display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:12px;margin-bottom:18px}
.dash-title{font-size:24px;font-weight:700;color:#0f172a;margin:0}
.dash-sub{color:#64748b;font-size:14px;margin:4px 0 0}
.dash-head-right{display:flex;align-items:center;gap:12px}
.dash-date{font-size:13px;color:#475569;font-weight:500}
.dash-weather-chip{display:inline-flex;align-items:center;gap:6px;background:#eff6ff;color:#1d4ed8;border:1px solid #bfdbfe;border-radius:999px;padding:6px 12px;font-size:13px;font-weight:600}

.card{background:#fff;border:1px solid #e8edf1;border-radius:12px;padding:16px 18px;box-shadow:0 1px 2px rgba(15,23,42,.04)}
.card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.card-head h2{font-size:15px;font-weight:600;color:#0f172a;margin:0}
.mock-badge{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#b45309;background:#fef3c7;border:1px solid #fde68a;border-radius:4px;padding:2px 6px}

/* ZONE 1 — KPI cards */
.kpi-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:14px;margin-bottom:18px}
@media(max-width:1280px){.kpi-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:680px){.kpi-grid{grid-template-columns:repeat(2,1fr)}}
.kpi-card{background:#fff;border:1px solid #e8edf1;border-radius:12px;padding:14px 16px;display:flex;flex-direction:column;gap:8px;box-shadow:0 1px 2px rgba(15,23,42,.04)}
.kpi-top{display:flex;justify-content:space-between;align-items:flex-start}
.kpi-icon{width:34px;height:34px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:#eef4f8;color:#406e8b}
.kpi-icon svg{width:18px;height:18px}
.kpi-delta{font-size:12px;font-weight:700;display:inline-flex;align-items:center;gap:2px}
.kpi-delta.up{color:#16a34a}.kpi-delta.down{color:#dc2626}.kpi-delta.flat{color:#94a3b8}
.kpi-label{font-size:11px;color:#64748b;text-transform:uppercase;letter-spacing:.04em;font-weight:600}
.kpi-value{font-size:24px;font-weight:700;color:#0f172a;line-height:1.1}
.kpi-spark{height:30px;width:100%}
.kpi-progress{height:8px;border-radius:6px;background:#eef2f6;overflow:hidden;margin-top:2px}
.kpi-progress>span{display:block;height:100%;background:#406e8b;border-radius:6px}
.kpi-progress-label{font-size:11px;color:#64748b;margin-top:2px}

/* ZONE 2 — charts */
.chart-grid{display:grid;grid-template-columns:2fr 1fr;gap:16px;margin-bottom:18px}
@media(max-width:980px){.chart-grid{grid-template-columns:1fr}}
.seg{display:inline-flex;background:#f1f5f9;border-radius:8px;padding:2px}
.seg button{border:0;background:transparent;font-size:12px;font-weight:600;color:#64748b;padding:5px 10px;border-radius:6px;cursor:pointer}
.seg button.active{background:#fff;color:#0f172a;box-shadow:0 1px 2px rgba(15,23,42,.08)}
.legend{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.legend-row{display:flex;align-items:center;justify-content:space-between;font-size:12px}
.legend-left{display:flex;align-items:center;gap:8px;color:#334155}
.legend-dot{width:10px;height:10px;border-radius:3px;flex:0 0 auto}
.legend-val{color:#64748b;font-variant-numeric:tabular-nums}

/* Peak-hours heatmap */
.heatmap{display:grid;grid-template-columns:auto repeat(6,1fr);gap:5px;align-items:center}
.hm-corner,.hm-col,.hm-row{font-size:11px;color:#64748b;font-weight:600;text-align:center}
.hm-row{text-align:right;padding-right:6px}
.hm-cell{height:30px;border-radius:5px;display:flex;align-items:center;justify-content:center;font-size:11px;color:#1e293b}
.hm-legend{display:flex;align-items:center;gap:6px;justify-content:flex-end;margin-top:10px;font-size:11px;color:#64748b}
.hm-legend i{width:16px;height:10px;border-radius:2px;display:inline-block}

/* ZONE 3/4 — panels */
.panel-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:18px}
@media(max-width:980px){.panel-grid{grid-template-columns:1fr}}
.sess-list,.ro-list{display:flex;flex-direction:column;gap:2px;max-height:300px;overflow:auto}
.sess-row,.ro-row{display:flex;align-items:center;justify-content:space-between;padding:9px 4px;border-bottom:1px solid #f1f5f9;font-size:13px}
.sess-row:last-child,.ro-row:last-child{border-bottom:0}
.sess-time{font-weight:600;color:#0f172a;width:74px;flex:0 0 auto}
.sess-name{flex:1;color:#334155;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sess-lvl{font-size:11px;color:#64748b;margin-left:6px}
.sess-cap{font-weight:600;color:#406e8b;font-variant-numeric:tabular-nums}
.sess-cap.full{color:#dc2626}
.muted{color:#94a3b8;font-size:13px;padding:10px 4px}

.staff-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px}
.staff-stat{background:#f8fafc;border:1px solid #eef2f6;border-radius:8px;padding:10px}
.staff-stat .v{font-size:18px;font-weight:700;color:#0f172a}
.staff-stat .l{font-size:11px;color:#64748b;margin-top:2px}

.quick-actions{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.qa-btn{display:flex;align-items:center;gap:8px;border:1px solid #e2e8f0;background:#fff;border-radius:8px;padding:11px 12px;font-size:13px;font-weight:600;color:#334155;cursor:pointer;text-decoration:none;transition:.15s}
.qa-btn:hover{border-color:#406e8b;color:#406e8b;background:#f8fbfd}
.qa-btn svg{width:16px;height:16px;flex:0 0 auto}

.ro-cust{flex:1;color:#334155;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ro-total{font-weight:600;color:#0f172a;font-variant-numeric:tabular-nums;margin:0 10px}
.pill{font-size:11px;font-weight:700;border-radius:999px;padding:2px 9px}
.pill.completed{background:#dcfce7;color:#15803d}
.pill.pending{background:#fef3c7;color:#b45309}
.pill.cancelled{background:#fee2e2;color:#b91c1c}
.pill.other{background:#e2e8f0;color:#475569}

.weather-card .wx-main{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.wx-temp{font-size:38px;font-weight:700;color:#0f172a;line-height:1}
.wx-cond{font-size:14px;color:#475569}
.wx-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.wx-item{background:#f8fafc;border:1px solid #eef2f6;border-radius:8px;padding:8px 10px}
.wx-item .l{font-size:11px;color:#64748b}.wx-item .v{font-size:15px;font-weight:600;color:#0f172a}
.wx-note{margin-top:10px;font-size:13px;color:#16a34a;font-weight:600}

.alerts{display:flex;flex-direction:column;gap:8px}
.alert-row{display:flex;gap:10px;align-items:flex-start;padding:9px 10px;border-radius:8px;font-size:13px;border:1px solid}
.alert-row.warn{background:#fffbeb;border-color:#fde68a;color:#92400e}
.alert-row.info{background:#eff6ff;border-color:#bfdbfe;color:#1e40af}
.alert-row.ok{background:#f0fdf4;border-color:#bbf7d0;color:#166534}
.alert-row .a-ico{flex:0 0 auto;font-weight:800}
.alert-time{display:block;font-size:11px;opacity:.7;margin-top:2px}
.chart-card canvas{max-height:240px}
/* coverage chart: fixed-height wrapper so Chart.js (responsive + maintainAspectRatio:false)
   can't enter the resize-grow feedback loop — it's in a plain .card, not .chart-card. */
.cov-chart{position:relative;height:140px;width:100%}
.cov-chart canvas{max-height:140px}
