:root{
  --bg:#FFFFFF; --soft:#F2F7FC; --line:#DCE6F0; --ink:#1B2A38; --sub:#5E6E80; --faint:#93A2B3;
  --sky:#2F86D6; --sky2:#DCEBFA; --own:#E2683C; --comp:#55657A; --mrt:#7A4FD0;
  --up:#C9473B; --down:#2E8A5F;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.55 -apple-system,"PingFang TC","Noto Sans TC","Microsoft JhengHei",sans-serif}
button,input,select{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--sky);outline-offset:2px}

.top{padding:14px 20px 10px;border-bottom:1px solid var(--line);background:var(--bg);position:relative;z-index:500}
.brand{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
.brand h1{margin:0;font-size:22px;letter-spacing:.02em}
.brand p{margin:0;color:var(--sub);font-size:13px}
.controls{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center;margin-top:10px}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:999px;padding:3px;background:var(--soft)}
.seg button{border:0;background:none;padding:5px 12px;border-radius:999px;cursor:pointer;font-size:13px;color:var(--sub);display:flex;gap:4px;align-items:baseline}
.seg button small{font-size:11px;opacity:.75}
.seg button.on{background:var(--sky);color:#fff}
.sel{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--sub)}
.sel select{border:1px solid var(--line);border-radius:8px;padding:5px 8px;background:#fff;color:var(--ink)}
.search{position:relative;flex:1 1 260px;min-width:220px}
.search input{width:100%;border:1px solid var(--line);border-radius:10px;padding:8px 12px;background:#fff}
#sugg{position:absolute;left:0;right:0;top:100%;margin:4px 0 0;padding:4px;list-style:none;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px rgba(27,42,56,.12);max-height:320px;overflow:auto;z-index:900}
#sugg li{padding:7px 10px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between;gap:10px}
#sugg li small{color:var(--faint)}
#sugg li:hover,#sugg li.act{background:var(--soft)}
.ours{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.ours button{border:1px solid #F3C9B6;background:#FFF5F0;color:#9A4320;border-radius:999px;padding:3px 10px;font-size:12px;cursor:pointer}
.ours button:hover{background:#FDE7DC}
.ours .area{font-size:12px;color:var(--faint);align-self:center;margin:0 2px 0 8px}
.ours .area:first-child{margin-left:0}

.wrap{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(340px,1fr);gap:0;height:calc(100vh - 168px);min-height:560px}
.mapbox{position:relative;border-right:1px solid var(--line)}
#map{position:absolute;inset:0}
.layers{position:absolute;left:12px;bottom:14px;z-index:400;background:rgba(255,255,255,.95);border:1px solid var(--line);border-radius:10px;padding:8px 10px;display:flex;flex-wrap:wrap;gap:6px 12px;font-size:12px;align-items:center;max-width:calc(100% - 24px)}
.layers label{display:flex;align-items:center;gap:4px;cursor:pointer}
.layers button{border:1px solid var(--line);background:#fff;border-radius:6px;padding:2px 8px;font-size:12px;cursor:pointer}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%}
.dot.own{background:var(--own)} .dot.comp{background:var(--comp)} .dot.mrt{background:var(--mrt);border-radius:2px}
.legend{position:absolute;right:12px;bottom:14px;z-index:400;background:rgba(255,255,255,.95);border:1px solid var(--line);border-radius:10px;padding:8px 10px;font-size:12px;width:180px}
.legend .bar{height:8px;border-radius:4px;margin:6px 0 2px}
.legend .ends{display:flex;justify-content:space-between;color:var(--sub)}

.panel{overflow:auto;padding:18px 20px 40px;background:var(--bg)}
.empty{max-width:380px;margin:40px auto;text-align:center;color:var(--sub)}
.empty h2{color:var(--ink);font-size:18px;margin:18px 0 10px}
.empty ol{text-align:left;padding-left:20px;font-size:14px}
.ring{width:84px;height:84px;margin:0 auto;border-radius:50%;border:2px solid var(--sky);display:grid;place-items:center;background:var(--sky2)}
.ring span{width:12px;height:12px;border-radius:50%;background:var(--ink)}

.hd{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.hd h2{margin:0;font-size:15px;color:var(--sub);font-weight:500}
.hd .where{font-size:13px;color:var(--sub);margin-top:2px}
.big{font-size:40px;font-weight:700;letter-spacing:-.01em;line-height:1.1;margin:10px 0 2px}
.big small{font-size:15px;font-weight:500;color:var(--sub);margin-left:4px}
.acts{display:flex;gap:8px;margin:12px 0 4px;flex-wrap:wrap}
.acts button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:6px 12px;cursor:pointer;font-size:13px}
.acts button.pri{background:var(--ink);color:#fff;border-color:var(--ink)}

.kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden;margin:14px 0}
.kpi{background:#fff;padding:10px 12px}
.kpi b{display:block;font-size:19px}
.kpi span{font-size:12px;color:var(--sub)}
.kpi em{font-style:normal;font-size:11px;color:var(--faint);display:block}
.kpi .u{color:var(--down)} .kpi .d{color:var(--up)}

.sec{margin-top:22px}
.sec h3{font-size:15px;margin:0 0 4px}
.sec .note{font-size:12px;color:var(--faint);margin:0 0 10px}
.focus{background:var(--soft);border-radius:12px;padding:12px 14px;margin:14px 0}
.focus b{font-size:22px}
.focus p{margin:2px 0 0;font-size:13px;color:var(--sub)}

.age{display:grid;grid-template-columns:78px 1fr 92px;gap:8px;align-items:center;margin:8px 0;font-size:13px}
.age .lab small{display:block;color:var(--faint);font-size:11px}
.age .track{position:relative;height:10px;background:#EEF2F6;border-radius:5px}
.age .fill{position:absolute;left:0;top:0;bottom:0;border-radius:5px;background:var(--sky)}
.age.hot .fill{background:var(--own)}
.age .avg{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--ink)}
.age .val{text-align:right}
.age .val small{display:block;color:var(--faint);font-size:11px}

.pyr{display:grid;grid-template-columns:1fr 34px 1fr;gap:1px 0;font-size:10px;color:var(--faint)}
.pyr .l,.pyr .r{position:relative;height:9px}
.pyr .l i,.pyr .r i{position:absolute;top:0;bottom:0}
.pyr .l i{right:0;background:#6FA6DB} .pyr .r i{left:0;background:#E59A86}
.pyr .l s,.pyr .r s{position:absolute;top:0;bottom:0;border:1px dashed var(--sub);border-width:1px 0}
.pyr .l s{right:0;border-left-width:1px} .pyr .r s{left:0;border-right-width:1px}
.pyr .m{text-align:center;line-height:9px}

table{width:100%;border-collapse:collapse;font-size:13px}
th{font-weight:500;color:var(--sub);text-align:left;padding:6px 4px;border-bottom:1px solid var(--line)}
td{padding:7px 4px;border-bottom:1px solid #EEF2F6;vertical-align:top}
td.n,th.n{text-align:right;white-space:nowrap}
tr.click{cursor:pointer} tr.click:hover td{background:var(--soft)}
td small{display:block;color:var(--faint);font-size:11px}
.cmpwrap{overflow-x:auto}
.cmpwrap table{min-width:640px}
.cmpwrap td:first-child{white-space:nowrap}
.tag{display:inline-block;font-size:11px;padding:0 6px;border-radius:4px;background:#FFF0E9;color:#9A4320;margin-left:4px}

.src{font-size:11px;color:var(--faint);padding:10px 20px 16px;border-top:1px solid var(--line);line-height:1.6}

.pin{width:16px;height:16px;border-radius:50%;background:var(--ink);border:3px solid #fff;box-shadow:0 0 0 2px var(--ink)}
.num{width:22px;height:22px;border-radius:50%;background:var(--own);color:#fff;font-size:12px;font-weight:700;display:grid;place-items:center;border:2px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,.3)}
.leaflet-tooltip{font-size:12px}

@media (max-width:860px){
  .wrap{grid-template-columns:1fr;height:auto}
  .mapbox{height:58vh;border-right:0;border-bottom:1px solid var(--line)}
  .panel{overflow:visible}
  .top{padding:12px 16px}
  .panel,.src{padding-left:16px;padding-right:16px}
  .kpis{grid-template-columns:repeat(2,1fr)}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

.ad table{margin-bottom:12px}
.ad tr.pick td{background:#FFF7F2}
.adv{display:grid;grid-template-columns:72px 1fr;gap:8px 12px;margin:0;font-size:14px}
.adv dt{color:var(--sub);font-size:13px}
.adv dd{margin:0}
