:root{
  --bg:#eaffff;
  --primary:#0796a2;
  --primary-dark:#075d77;
  --blue:#1f88d5;
  --green:#37bf8a;
  --orange:#ff9e2c;
  --text:#173344;
  --muted:#6b7f8d;
  --line:#d7edf3;
  --card:#ffffff;
  --shadow:0 18px 45px rgba(12,108,134,.16);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",Arial,sans-serif;background:linear-gradient(180deg,#c9f6ff 0%,#fbfffb 62%,#eefbea 100%);color:var(--text)}
body.sheet-open{overflow:hidden}
.app-shell{max-width:760px;margin:0 auto;min-height:100vh;background:linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,.82));position:relative;overflow:hidden}
.hero{position:relative;background:#c8f5ff}
.hero-map{display:block;width:100%;height:auto}
.map-hotspots{position:absolute;inset:0;z-index:3;pointer-events:none}
.map-hotspot{position:absolute;left:var(--x);top:var(--y);width:var(--w);height:var(--h);transform:translate(-50%,-50%);border:0;border-radius:999px;background:rgba(255,255,255,.01);cursor:pointer;pointer-events:auto;-webkit-tap-highlight-color:rgba(7,150,162,.18)}
.map-hotspot::after{content:"";position:absolute;inset:3%;border-radius:999px;border:2px solid rgba(255,255,255,0);transition:.18s ease}
.map-hotspot:active::after,.map-hotspot:focus-visible::after{border-color:#fff;box-shadow:0 0 0 5px rgba(7,150,162,.22);background:rgba(7,150,162,.14)}
.content{margin:-8px 14px 0;position:relative;z-index:2}.quick-card,.city-card,.notice-card{background:rgba(255,255,255,.96);border:1px solid rgba(255,255,255,.72);border-radius:22px;padding:18px;box-shadow:var(--shadow);backdrop-filter:blur(8px);margin-bottom:16px}.quick-title{font-size:22px;font-weight:900;color:var(--primary-dark);margin-bottom:8px}.quick-card p,.notice-card p{margin:0;color:#365261;line-height:1.75;font-size:15px}.quick-search{display:flex;gap:10px;margin-top:14px}.quick-search input{flex:1;min-width:0}.quick-search button{flex:0 0 86px}.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:12px}.section-head h1{margin:0;color:var(--primary-dark);font-size:24px}.section-head span{font-size:13px;color:var(--orange);font-weight:900}.city-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.city-chip{border:1px solid #c7eaf0;background:linear-gradient(180deg,#fff,#eefcff);border-radius:999px;padding:10px 8px;color:#126e7b;font-weight:900;font-size:15px;cursor:pointer;box-shadow:0 6px 16px rgba(22,130,150,.08)}.city-chip:active{transform:scale(.98)}
input,select{width:100%;border:1px solid #cbe7ec;border-radius:14px;padding:12px 13px;font-size:15px;background:#fbfeff;color:#183645;outline:none;appearance:auto}input:focus,select:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(7,150,162,.12)}button{font-family:inherit}.quick-search button,.load-more{height:44px;border-radius:999px;border:0;background:linear-gradient(135deg,var(--primary),var(--green));color:#fff;font-weight:900;font-size:15px;cursor:pointer;box-shadow:0 10px 22px rgba(7,150,162,.22)}.notice-card{background:#fff9ec;border-color:#ffe3b6}.notice-card strong{display:block;color:#8a5a0c;margin-bottom:6px}.notice-card p{color:#7c5a20}.footer{text-align:center;color:#395867;font-size:13px;line-height:1.6;padding:8px 18px 30px}.sheet-backdrop{position:fixed;inset:0;background:rgba(9,43,58,.38);z-index:20;opacity:0;transition:.2s ease}.sheet-backdrop.show{opacity:1}.city-sheet{position:fixed;left:50%;bottom:0;width:min(760px,100%);max-height:84dvh;transform:translate(-50%,105%);z-index:21;background:linear-gradient(180deg,#ffffff 0%,#f8feff 100%);border-radius:26px 26px 0 0;box-shadow:0 -20px 55px rgba(8,66,82,.25);padding:10px 14px calc(16px + env(safe-area-inset-bottom));overflow:auto;transition:.24s cubic-bezier(.2,.8,.2,1)}.city-sheet.open{transform:translate(-50%,0)}.sheet-handle{width:48px;height:5px;border-radius:99px;background:#c9e2e8;margin:0 auto 10px}.sheet-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;position:sticky;top:-10px;background:linear-gradient(180deg,#fff 72%,rgba(255,255,255,.9));z-index:2;padding:4px 0 10px}.sheet-kicker{font-size:13px;color:var(--muted);font-weight:800;margin-bottom:3px}.sheet-head h2{margin:0;color:var(--primary-dark);font-size:23px;line-height:1.22}.sheet-close{width:38px;height:38px;border-radius:50%;border:0;background:#eef8fb;color:#47717c;font-size:28px;line-height:34px;cursor:pointer}.sheet-tools{display:grid;grid-template-columns:1.2fr 1fr 1fr;gap:10px;margin:8px 0 10px}.sheet-tools span{display:block;font-size:12px;color:#55707b;margin:0 0 5px 4px;font-weight:800}.district-tabs{display:flex;gap:8px;overflow-x:auto;padding:2px 0 10px;margin-bottom:4px;scrollbar-width:none}.district-tabs::-webkit-scrollbar{display:none}.district-tab{flex:0 0 auto;border:1px solid #c7eaf0;background:#f1fcff;color:#167486;border-radius:999px;padding:8px 11px;font-size:13px;font-weight:900}.district-tab.active{background:linear-gradient(135deg,var(--primary),var(--green));color:#fff;border-color:transparent}.sheet-summary{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#effcff;border:1px solid #c9edf3;color:#126e7b;border-radius:16px;padding:10px 12px;margin-bottom:10px;font-weight:900}.sheet-summary button{border:0;background:#fff;color:#237383;border-radius:999px;padding:7px 10px;font-weight:900}.results{display:grid;grid-template-columns:1fr;gap:10px}.point-card{border:1px solid var(--line);background:linear-gradient(180deg,#fff,#f9feff);border-radius:16px;padding:13px;box-shadow:0 8px 20px rgba(20,110,130,.08)}.point-title{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:10px}.badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 9px;font-size:12px;font-weight:900;background:#e6f9ff;color:#126f88;border:1px solid #c8edf6}.badge.city{background:#e8fff5;color:#0b7a56;border-color:#c3efd9}.address{font-size:15px;line-height:1.65;color:#213f4d;margin:0 0 8px;font-weight:800}.time{font-size:14px;color:#31505d;margin:0;display:flex;gap:8px;align-items:flex-start}.time::before{content:"开班时间";flex:0 0 auto;border-radius:6px;background:#f1f8ff;color:#1c7cc0;padding:1px 6px;font-size:12px;font-weight:900;margin-top:1px}.empty{padding:26px 12px;text-align:center;color:var(--muted);line-height:1.8}.load-more{display:none;width:100%;margin-top:12px;background:#effcff;color:#126e7b;border:1px solid #c9edf3;box-shadow:none}.sheet-note{font-size:12px;color:#78909b;line-height:1.6;margin:10px 2px 0}@media (max-width:520px){.content{margin:-6px 10px 0}.quick-card,.city-card,.notice-card{border-radius:18px;padding:16px}.city-grid{grid-template-columns:repeat(2,1fr)}.sheet-tools{grid-template-columns:1fr}.city-sheet{max-height:88dvh;border-radius:22px 22px 0 0}.quick-search{flex-direction:column}.quick-search button{width:100%;flex:0 0 auto}.section-head{align-items:flex-start;flex-direction:column;gap:4px}}


/* 调试用：地址栏加 ?debug=1 可显示地图热区位置，正式访问不会显示 */
body.debug-hotspots .map-hotspot{
  background:rgba(255,120,0,.14);
  outline:2px dashed rgba(255,120,0,.75);
}
body.debug-hotspots .map-hotspot::before{
  content:attr(data-city);
  position:absolute;
  left:50%;
  top:50%;
  transform:translate(-50%,-50%);
  color:#fff;
  background:rgba(0,115,135,.9);
  border-radius:999px;
  padding:2px 6px;
  font-size:12px;
  font-weight:900;
  white-space:nowrap;
}
