:root{--navy:#092942;--blue:#178cff;--pink:#f42681;--ink:#15314a;--muted:#668096;--line:#dbe7f2;--bg:#f1f7fc;--good:#08784e}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);font:15px/1.45 system-ui,-apple-system,"Segoe UI",Arial,sans-serif;color:var(--ink)}button,select{font:inherit}button{cursor:pointer}button:focus-visible,a:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--pink);outline-offset:2px}button:disabled{opacity:.55;cursor:not-allowed}a{color:inherit;text-decoration:none}
header{background:var(--navy);color:white;border-bottom:4px solid var(--pink)}header .top{max-width:1470px;padding:12px 24px;min-height:71px;margin:0 auto;display:flex;gap:24px;align-items:center}header .brand{font-weight:900;letter-spacing:-.7px;font-size:22px;white-space:nowrap}header .brand span{color:#52a7ff}.brand small{display:block;color:#b5d0e6;font-size:9px;letter-spacing:2px;margin-left:27px}header nav{display:flex;align-items:center;gap:18px;color:#d6e7f5;font-size:13px;font-weight:650;margin-left:auto}header nav a:hover{text-decoration:underline}.mode{white-space:nowrap;color:#e94f88;background:#ffe7f1;border-radius:30px;padding:7px 11px;font-size:11px;font-weight:850}
main{max-width:1470px;margin:auto;padding:25px 23px 55px}.hero{margin-bottom:18px}.eyebrow{letter-spacing:1.6px;font-size:10px;color:#0968ce;font-weight:850}.hero h1{font-size:clamp(28px,3.2vw,43px);line-height:1.16;letter-spacing:-.9px;margin:8px 0}.hero p{margin:0;color:var(--muted);max-width:850px}.notice{background:#fff1f6;border:1px solid #ffd1e2;border-radius:12px;color:#8f3152;font-size:13px;padding:13px 17px;margin-bottom:17px}.filterbar{display:flex;align-items:end;gap:11px;flex-wrap:wrap;margin-bottom:15px}.filterbar label{font-size:12px;font-weight:800;display:grid;gap:5px}.filterbar select{min-width:175px;border:1px solid #bcd0e2;border-radius:11px;padding:10px 35px 10px 12px;min-height:44px;background:white;color:var(--ink)}.btn{min-height:44px;border:0;border-radius:11px;padding:10px 16px;font-size:13px;font-weight:850;white-space:nowrap;color:white;background:#127bf0}.btn.light{color:#0b66b9;background:#e5f3ff;border:1px solid #bbdaef}.btn.pink{background:linear-gradient(105deg,#f42681,#db0a6d)}.status{background:#e6f4ff;color:#1066a1;border-radius:11px;padding:10px 13px;margin:0 0 14px;font-size:13px;font-weight:650}.status.warn{background:#fff1f5;color:#a5294f}.status.good{background:#e2f7ee;color:#097e59}
.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;margin-bottom:16px}.kpi{min-height:120px;background:white;border:1px solid var(--line);border-radius:15px;padding:16px;box-shadow:0 5px 25px rgba(13,54,87,.03)}.kpi small{display:block;font-size:12px;color:var(--muted);font-weight:700}.kpi strong{display:block;font-size:31px;color:#0a3560;letter-spacing:-.4px;margin:9px 0 2px;line-height:1.2}.kpi strong.smallvalue{font-size:19px;min-height:38px;overflow-wrap:anywhere}.kpi span{color:#70879b;font-size:11px}
.dashgrid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(270px,1fr);gap:15px}.panel{background:white;border:1px solid var(--line);border-radius:16px;padding:18px;box-shadow:0 5px 25px rgba(13,54,87,.03)}.panelHead{display:flex;justify-content:space-between;align-items:start;gap:16px;margin-bottom:13px}.panel h2{font-size:20px;margin:5px 0 3px}.panel p{color:var(--muted);font-size:13px;margin:0 0 10px}.mapPanel{grid-column:1;grid-row:1 / span 2}.mapframe{background:#eef6fd;border-radius:15px;border:1px solid #cedeed;overflow:hidden}.mapframe svg{display:block;width:100%;height:auto;aspect-ratio:860/510;touch-action:manipulation}.mapframe svg [data-road],.mapframe svg [data-district]{cursor:pointer}.mapframe svg .route:hover{filter:drop-shadow(0 0 3px #0d58a080)}.legend{display:flex;flex-wrap:wrap;gap:12px;margin:12px 0}.legend span{display:flex;align-items:center;gap:6px;color:#63788c;font-size:11px}.legendIcon{width:17px;height:7px;border-radius:20px;display:inline-block}.legendIcon.low{background:#53b6f5}.legendIcon.medium{background:#137ff2}.legendIcon.hot{background:#f42681}.legendIcon.none{background:#bbcada}.mapSelection{margin-top:10px;padding:12px 14px;background:#f0f7fe;border-radius:11px;color:#264b69;font-size:13px;min-height:49px}
.ranklist{display:grid;gap:11px}.rankitem{display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;column-gap:10px;row-gap:3px;cursor:pointer;border:1px solid #e3edf6;background:#fbfdff;border-radius:12px;padding:9px 10px;text-align:left;color:inherit}.rankitem:hover{border-color:#8cc1f0;background:#eff7ff}.rankno{font-size:13px;font-weight:900;color:#0e76e8}.rankname{font-weight:800;font-size:13px}.rankvalue{font-size:13px;font-weight:900;color:#153e68;white-space:nowrap}.rankmeta{font-size:11px;color:#70889b}.progress{grid-column:2/-1;height:7px;background:#e5eef7;border-radius:999px;overflow:hidden}.progress>span{display:block;height:100%;background:linear-gradient(90deg,#178cff,#f42681);border-radius:999px}.empty{padding:15px;border:1px dashed #bfd5e6;border-radius:11px;color:#6e8296;font-size:13px}
.hourbars{height:132px;display:flex;align-items:end;gap:3px;border-bottom:1px solid #ceddea;padding:5px 0}.hourbar{flex:1;min-width:0;min-height:3px;background:#2689f2;border-radius:4px 4px 0 0;position:relative}.hourbar.hot{background:#f42681}.hourbar.suppressed{background:#dce6ee;border-top:2px dashed #8ca7bc}.hourlabels{display:flex;justify-content:space-between;color:#708499;font-size:10px;margin-top:5px}.panel h3{font-size:14px;margin:19px 0 7px}.dailybars{height:86px;display:flex;align-items:end;gap:3px;border-bottom:1px solid #ceddea}.dailybar{min-width:2px;flex:1;min-height:3px;background:linear-gradient(0deg,#137df0,#88c6fa);border-radius:3px 3px 0 0}.dailybar.suppressed{background:#c6d6e5}.fine{font-size:11px;color:#6a8196;margin-top:8px}.guidance{margin-top:17px}.guidanceGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:13px}.guidanceGrid>div{padding:14px;background:#f1f8ff;border-radius:12px}.guidanceGrid b{color:#165282;font-size:13px}.guidanceGrid p{font-size:12px;margin-top:6px}.guidance .fine{margin-top:15px}.errorPrompt{color:#a52854;font-weight:750}footer{font-size:11px;color:#74889c;text-align:center;margin-top:21px}
@media(max-width:1100px){.kpis{grid-template-columns:repeat(2,1fr)}.dashgrid{grid-template-columns:1fr}.mapPanel{grid-column:auto;grid-row:auto}.guidanceGrid{grid-template-columns:1fr}}
@media(max-width:560px){header .top{padding:10px 13px;flex-wrap:wrap;gap:8px}header .brand{font-size:20px}header nav{margin-left:0;order:3;width:100%;font-size:12px}.mode{margin-left:auto;font-size:9px;padding:6px 8px}main{padding:16px 10px 40px}.hero h1{font-size:29px}.notice{padding:11px 12px}.filterbar{display:grid;grid-template-columns:1fr 1fr;gap:7px}.filterbar label{min-width:0}.filterbar select{min-width:0;width:100%;padding:8px 7px}.filterbar button{width:100%}.kpis{gap:8px}.kpi{padding:11px;min-height:112px}.kpi strong{font-size:24px}.kpi strong.smallvalue{font-size:15px}.kpi span{font-size:10px}.panel{padding:13px}.panel h2{font-size:18px}.legend{gap:9px}.mapSelection{font-size:12px}.mapframe svg{min-height:230px}}
