  /* ===== 设计 token（WP7）：色板/字号/间距/圆角/阴影，归纳自既有硬编码值 ===== */
  :root{
    /* 色板 */
    --c-primary:#0ea5e9;        /* 主色 sky：按钮/激活态/滑块 accent/强调数字 */
    --c-primary-soft:#e0f2fe;   /* 主色浅底：徽章/提示条底 */
    --c-accent:#0d9488;         /* 强调 teal：图标/圆点/标签文字 */
    --c-accent-deep:#0f766e;    /* 强调深：标题文字 */
    --c-text:#0f172a;           /* 文字一级（标题/主文字） */
    --c-text-2:#475569;         /* 文字二级（次要文字/图标钮） */
    --c-text-3:#94a3b8;         /* 文字三级（占位/弱化提示） */
    --c-border:#e2e8f0;         /* 常规边框 */
    --c-border-soft:#eef2f7;    /* 发丝分隔线 */
    --c-bg:#fff;                /* 容器背景 */
    --c-bg-page:#eef2f7;        /* 页面底色 */
    --c-bg-soft:#f1f5f9;        /* 弱底（圆形小钮/灰徽章） */
    --c-bg-hover:#f8fafc;       /* 列表项按压底 */
    --c-danger:#b91c1c;         /* 危险文字 */
    --c-danger-bg:#fef2f2;      /* 危险底 */
    --c-danger-line:#fecaca;    /* 危险边 */
    --c-fa:#0d9488;             /* FontAwesome 彩色图标统一色 */
    /* 字号三档（10/12/14/16px+ 为刻意偏离档，不入 token） */
    --fs-ssm:10px;               /* 辅助说明/徽章 */
    --fs-sm:11px;               /* 辅助说明/徽章 */
    --fs-md:13px;               /* 正文 */
    --fs-lg:15px;               /* 标题 */
    /* 间距两档 */
    --sp-sm:6px;
    --sp-lg:12px;
    /* 圆角两档 + 胶囊（既有 999px 胶囊归纳为 --r-pill） */
    --r-sm:8px;
    --r-lg:16px;
    --r-pill:999px;
    /* 阴影一档（顶栏/图例/面板/卡片统一） */
    --sh-1:0 2px 10px rgba(15,23,42,.14);
  }

  *{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
  html,body{margin:0;height:100%;width:100%;overflow:hidden;
    font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
    background:var(--c-bg-page);color:var(--c-text)}
  #map{position:absolute;inset:0;z-index:1}

  /* 顶栏 */
  #top{position:absolute;top:0;left:0;right:0;z-index:600;
    display:flex;align-items:center;gap:8px;padding:var(--sp-sm) var(--sp-lg);padding-top:calc(var(--sp-sm) + env(safe-area-inset-top));
    background:linear-gradient(90deg,rgba(14,165,233,.92),rgba(34,197,94,.92));
    color:#fff;backdrop-filter:blur(6px);box-shadow:var(--sh-1)}
  #top .head-title{display:flex;align-items:center;gap:2px;flex-direction:column}
  #top .head-title h1{margin:0;font-size:var(--fs-lg);font-weight:700;flex:0 0 auto}
  #top .modes{margin-left:auto;display:flex;gap:var(--sp-sm)}
  #top button{font-size:var(--fs-md);border:none;border-radius:var(--r-pill);padding:var(--sp-sm) var(--sp-lg);background:rgba(255,255,255,.22);color:#fff;cursor:pointer}
  #top button.active{background:var(--c-bg);color:var(--c-primary);font-weight:700}
  #topBtn{font-size:var(--fs-md);border:1px solid rgba(255,255,255,.6);border-radius:var(--r-pill);padding:var(--sp-sm) 10px;background:transparent;color:#fff;cursor:pointer}
  /* 当前模式徽章（凉快/耍雪由后端季节或管理员设定，用户不可切换） */
  #modeChip{font-size:var(--fs-sm);font-weight:700;flex:0 0 auto;padding:2px 10px;border-radius:var(--r-pill);
    background:rgba(255,255,255,.25);border:1px solid rgba(255,255,255,.45);color:#fff;
    white-space:nowrap;max-width:30vw;overflow:hidden;text-overflow:ellipsis}

  /* 图例 */
  #legend{position:absolute;left:12px;right:12px;top:calc(64px + env(safe-area-inset-top));z-index:500;
    display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--c-text-2);
    background:rgba(255,255,255,.82);border-radius:var(--r-pill);padding:5px var(--sp-lg);box-shadow:var(--sh-1)}
  #legend .bar{position:relative;height:9px;flex:1;border-radius:6px;cursor:pointer;background:linear-gradient(90deg,#1e96e6,#3ad1c9,#ffd24a,#e63428)}

  /* 设置抽屉（右侧滑入，仅个性化设置） */
  #backdrop,#favBackdrop{position:absolute;inset:0;z-index:680;background:rgba(15,23,42,.38);opacity:0;visibility:hidden;
    transition:opacity .26s ease,visibility .26s}
  #backdrop.show,#favBackdrop.show{opacity:1;visibility:visible}
  #drawer,#favDrawer{position:absolute;top:0;right:0;bottom:0;width:86%;max-width:380px;z-index:690;
    background:var(--c-bg);display:flex;flex-direction:column;box-shadow:var(--sh-1);
    transform:translateX(100%);visibility:hidden;pointer-events:none;
    transition:transform .26s ease,visibility 0s linear .26s;padding-top:env(safe-area-inset-top)}
  #drawer.show,#favDrawer.show{transform:translateX(0);visibility:visible;pointer-events:auto;
    transition:transform .26s ease}
  #drawer .dh,#favDrawer .dh{display:flex;align-items:center;justify-content:space-between;
    padding:14px 16px;border-bottom:1px solid var(--c-border-soft);flex:0 0 auto}
  #drawer .dh h2,#favDrawer .dh h2{margin:0;font-size:16px;font-weight:800;color:var(--c-text)}
  #drawer .dh .x,#favDrawer .dh .x{width:34px;height:34px;border:none;border-radius:var(--r-pill);background:var(--c-bg-soft);font-size:16px;color:var(--c-text-2);cursor:pointer}
  #drawer .dbody,#favDrawer .dbody{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;
    padding:var(--sp-sm) 16px calc(18px + env(safe-area-inset-bottom))}
  .sec{margin:8px 0 12px}
  .sec .lbl{font-size:var(--fs-md);font-weight:700;color:var(--c-text);margin-bottom:7px;display:flex;align-items:center;gap:var(--sp-sm)}
  .rowline{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:var(--fs-md)}
  input[type=range]{width:100%;accent-color:var(--c-primary)}
  .thval{font-size:14px;font-weight:800;color:var(--c-primary)}
  .layer{display:flex;align-items:center;gap:9px;padding:8px 4px;border-bottom:1px solid var(--c-border-soft);font-size:var(--fs-md)}
  .layer input{width:18px;height:18px;accent-color:var(--c-primary)}
  .layer .sw{width:14px;height:14px;border-radius:4px;flex:0 0 auto}
  .subrow{display:flex;align-items:center;gap:8px;padding:4px 4px 9px;font-size:12px;color:var(--c-text-2)}
  .subrow .sublbl{font-size:12px;color:var(--c-text-2);flex:0 0 auto;margin-right:2px}
  .subrow input[type=range]{flex:1;width:auto;min-width:80px}
  .opval{font-size:var(--fs-sm);color:var(--c-primary);font-weight:600;min-width:36px;text-align:right}
  #legend .lbllo,#legend .lblhi{font-size:var(--fs-sm);color:var(--c-text-2);font-weight:600}
  select{border:1px solid #cbd5e1;border-radius:var(--r-sm);padding:7px 10px;font-size:var(--fs-md);background:var(--c-bg);width:100%}
  .hint{font-size:var(--fs-sm);color:var(--c-text-2);margin-top:6px;line-height:1.5}

  /* 选点卡片（底部上滑） */
  #card{position:absolute;left:0;right:0;bottom:0;z-index:650;background:var(--c-bg);
    border-radius:var(--r-lg) var(--r-lg) 0 0;box-shadow:var(--sh-1);
    padding:14px 16px calc(16px + env(safe-area-inset-bottom));display:none;
    max-height:64vh;overflow-y:auto;transform:translateY(100%);transition:transform .26s ease}
  #card.show{transform:translateY(0);display:block}
  #card .close{position:absolute;top:12px;right:14px;font-size:18px;color:var(--c-text-3);cursor:pointer}
  #card h3{margin:0 0 8px;font-size:var(--fs-lg);color:var(--c-accent-deep);line-height:1.4;word-break:break-all;padding-right:24px}
  .c-row{display:flex;justify-content:space-between;font-size:var(--fs-md);padding:6px 0;border-bottom:1px dashed var(--c-border-soft);align-items:center}
  .c-row .k{color:var(--c-text-2)}
  .twotemp{display:flex;gap:10px;margin:10px 0}
  .twotemp .box{flex:1;border:1px solid var(--c-border);border-radius:10px;padding:9px;text-align:center}
  .twotemp .v{font-size:22px;font-weight:800}
  .twotemp .cap{font-size:var(--fs-sm);color:var(--c-text-2);margin-top:3px}
  .delta{font-size:var(--fs-sm);color:var(--c-text-2);text-align:center;margin-bottom:6px}
  .tag{display:inline-block;padding:2px 9px;border-radius:var(--r-pill);font-size:var(--fs-sm);color:#fff}
  .navbtn{margin-left:0;border:1px solid var(--c-primary);color:var(--c-primary);background:var(--c-bg);border-radius:var(--r-pill);padding:5px var(--sp-lg);font-size:12px;font-weight:600;cursor:pointer}
  .navbtn:active{background:var(--c-primary);color:#fff}
  .navrow{display:flex;gap:8px;flex-wrap:wrap;margin-top:var(--sp-lg)}
  /* Font Awesome 图标适配（emoji 已全部替换为 FA 本地字体图标） */
  #top button .fa-solid{font-size:14px;line-height:1}          /* 顶栏圆钮图标 */
  #modeChip .fa-solid{font-size:var(--fs-sm)}                          /* 模式徽章 */
  .sp-ico .fa-solid{font-size:14px}                            /* 搜索框放大镜 */
  .c-sec .fa-solid,.lbl .fa-solid,.dh h2 .fa-solid{font-size:.92em}  /* 分区标题随字号 */
  .c-row .fa-solid,.fav-ico .fa-solid{font-size:.95em}         /* 行内小图标 */
  .sr-empty .fa-spinner{margin-right:4px}                      /* 搜索中转圈 */
  /* 卡片分区（位置/温度对比/实况） */
  .c-sec{font-size:12px;font-weight:800;color:var(--c-accent-deep);background:#f0fdfa;border-radius:var(--r-sm);
    padding:5px 10px;margin:var(--sp-lg) 0 var(--sp-sm)}
  .c-sec:first-of-type{margin-top:4px}
  .c-sub{font-size:var(--fs-sm);color:var(--c-text-2);margin:6px 0 2px;font-weight:700}
  #card .cap small{font-size:10px;color:var(--c-text-3);display:block}
  /* 选点卡片：今日温度走势（24h 曲线，纯 canvas 手绘） */
  .cardHourlySec{margin:0}
  .cardHourly{position:relative;border:1px solid var(--c-border);border-radius:10px;
    padding:6px 4px 2px;margin:2px 0 6px;background:var(--c-bg);overflow:hidden}
  .cardHourly canvas{display:block;width:100%;height:120px}
  .cardHourlyLoad{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
    gap:var(--sp-sm);font-size:12px;color:var(--c-text-3);background:var(--c-bg)}
  .cardHourlyLoad .fa-spinner{font-size:14px}

  /* 标注 */
  .iso-label{font-size:var(--fs-sm);font-weight:800;text-shadow:0 0 3px #fff,0 0 3px #fff,0 0 2px #fff;white-space:nowrap}
  .st-label{font-size:var(--fs-sm);font-weight:700;background:rgba(255,255,255,.9);border:1px solid #cbd5e1;border-radius:6px;padding:2px 6px;white-space:nowrap;box-shadow:0 1px 3px rgba(0,0,0,.12);line-height:1.25;text-align:center}
  .st-label b{font-size:var(--fs-sm)}
  .placelabel{display:flex;align-items:center;gap:3px;font-size:var(--fs-sm);color:var(--c-text);text-shadow:0 0 3px #fff,0 0 3px #fff;white-space:nowrap;cursor:pointer}
  .placelabel .dot{width:9px;height:9px;border-radius:50%;background:var(--c-accent);border:1.5px solid #fff;box-shadow:0 0 3px rgba(0,0,0,.45);flex:0 0 auto}
  .placelabel .nm{font-weight:700}
  .peak-marker{filter:drop-shadow(0 1px 1px rgba(0,0,0,.45))}
  .peakwrap{position:relative;width:20px;height:15px;cursor:pointer}
  .peaklbl{position:absolute;left:21px;bottom:-1px;font-size:10px;font-weight:700;color:#fff;
    background:rgba(22,163,74,.82);padding:1px 4px;border-radius:6px;white-space:nowrap;line-height:1.3;
    text-shadow:0 0 2px rgba(0,0,0,.4)}
  /* 山峰详情入口：峰窗内按钮 + 提示行（样式全 token，WP7 约定） */
  .peak-pop .leaflet-popup-tip{pointer-events:none}   /* tip 压住峰标上半，须穿透才能「再点山峰」 */
  .peak-pop-btn{margin-top:var(--sp-sm);width:100%;display:flex;align-items:center;justify-content:center;gap:5px;
    border:none;border-radius:var(--r-sm);padding:6px var(--sp-lg);
    background:var(--c-primary);color:#fff;font-size:var(--fs-md);font-weight:600;cursor:pointer}
  .peak-pop-btn:active{opacity:.82}
  .peak-pop-hint{margin-top:4px;font-size:var(--fs-ssm);color:var(--c-text-3);text-align:center}

  /* key 提示 */
  #keynote{position:absolute;top:calc(64px + env(safe-area-inset-top));left:50%;transform:translateX(-50%);
    z-index:550;background:#fef3c7;color:#92400e;font-size:var(--fs-sm);padding:5px 10px;border-radius:var(--r-pill);
    box-shadow:var(--sh-1);max-width:92vw;text-align:center;display:none}
  .pop{font-size:var(--fs-md);min-width:160px}
  .pop b{font-size:14px}
  .ptype{font-size:var(--fs-sm);color:#fff;background:#64748b;border-radius:var(--r-pill);padding:1px 7px;margin-left:4px}
  .prow{margin:5px 0;color:var(--c-text-2)}

  /* 定位按钮（右下角，zoom 控件上方） */
  .locate-btn{width:34px;height:34px;background:#fff;border:0;border-radius:4px;
    box-shadow:0 1px 5px rgba(0,0,0,.4);font-size:17px;cursor:pointer;line-height:1;
    display:flex;align-items:center;justify-content:center;padding:0}
  .locate-btn:active{background:#e2e8f0}
  .locate-btn.locating{background:#e0f2fe;opacity:.75;pointer-events:none}

  /* 收藏列表 */
  .fav-item{display:flex;align-items:center;gap:10px;padding:10px 4px;border-bottom:1px solid var(--c-border-soft);
    cursor:pointer;border-radius:var(--r-sm)}
  .fav-item:active{background:var(--c-bg-hover)}
  .fav-item .fav-ico{font-size:18px;flex:0 0 auto}
  .fav-item .fav-info{flex:1;min-width:0}
  .fav-item .fav-name{font-size:14px;font-weight:700;color:var(--c-text);white-space:nowrap;
    overflow:hidden;text-overflow:ellipsis}
  .fav-item .fav-sub{font-size:var(--fs-sm);color:var(--c-text-2);margin-top:2px}
  .fav-item .fav-ops{display:flex;gap:2px;flex:0 0 auto}
  .fav-item .fav-ops button{width:30px;height:30px;border:none;border-radius:var(--r-pill);background:var(--c-bg-soft);
    font-size:14px;cursor:pointer;color:var(--c-text-2)}
  .fav-item .fav-ops button:active{background:var(--c-border)}
  .fav-empty{text-align:center;color:var(--c-text-3);font-size:var(--fs-md);padding:36px 0;line-height:1.9}

  /* 轻提示 */
  #toast{position:absolute;left:50%;bottom:120px;transform:translateX(-50%) translateY(8px);
    z-index:900;background:rgba(15,23,42,.85);color:#fff;font-size:var(--fs-md);padding:8px 16px;
    border-radius:var(--r-pill);box-shadow:var(--sh-1);opacity:0;visibility:hidden;
    transition:opacity .22s ease,transform .22s ease,visibility .22s;max-width:82vw;text-align:center}
  #toast.show{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}

  /* ===== 地点搜索（免费：天地图地名搜索，后端 /api/search 代理）===== */
  #searchPanel{position:absolute;top:calc(64px + env(safe-area-inset-top));left:12px;right:12px;
    z-index:650;background:var(--c-bg);border-radius:var(--r-lg);box-shadow:var(--sh-1);
    opacity:0;visibility:hidden;transform:translateY(-6px);
    transition:opacity .2s ease,transform .2s ease,visibility .2s;overflow:hidden}
  #searchPanel.show{opacity:1;visibility:visible;transform:translateY(0)}
  #searchPanel .sp-bar{display:flex;align-items:center;gap:8px;padding:10px 12px;
    border-bottom:1px solid var(--c-border-soft)}
  #searchPanel .sp-ico{font-size:15px;color:var(--c-text-3)}
  #searchPanel input{flex:1;border:none;outline:none;font-size:var(--fs-lg);background:transparent;color:var(--c-text)}
  #searchPanel input::placeholder{color:var(--c-text-3)}
  #spClose{width:28px;height:28px;border:none;border-radius:var(--r-pill);background:var(--c-bg-soft);color:var(--c-text-2);
    font-size:var(--fs-md);cursor:pointer;flex:0 0 auto}
  #spClose:active{background:var(--c-border)}
  #searchResults{max-height:min(46vh,340px);overflow-y:auto;-webkit-overflow-scrolling:touch}
  .sr-item{padding:10px 14px;border-bottom:1px solid var(--c-border-soft);cursor:pointer}
  .sr-item:last-child{border-bottom:none}
  .sr-item:active{background:#f0fdf4}
  .sr-name{font-size:14px;font-weight:600;color:var(--c-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .sr-sub{font-size:var(--fs-sm);color:var(--c-text-2);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .sr-empty{padding:22px 14px;text-align:center;color:var(--c-text-3);font-size:var(--fs-md);line-height:1.8}
  .sr-tip{padding:10px 14px;font-size:var(--fs-sm);color:var(--c-text-3);line-height:1.7;border-top:1px dashed var(--c-border-soft)}

  /* ===== 纳凉点推荐面板（底部上滑，数据来自后端 /api/coolspots） ===== */
  #coolPanel{position:absolute;left:0;right:0;bottom:0;z-index:660;background:var(--c-bg);
    border-radius:var(--r-lg) var(--r-lg) 0 0;box-shadow:var(--sh-1);
    display:none;max-height:72vh;flex-direction:column;
    transform:translateY(100%);transition:transform .26s ease}
  #coolPanel.show{display:flex;transform:translateY(0)}
  .cp-bar{display:flex;align-items:center;gap:8px;padding:12px 14px 10px;border-bottom:1px solid var(--c-border-soft);flex:0 0 auto}
  .cp-title{font-size:var(--fs-lg);font-weight:800;color:var(--c-accent-deep);white-space:nowrap}
  .cp-th{font-size:12px;font-weight:700;color:var(--c-primary);background:var(--c-primary-soft);border-radius:var(--r-pill);padding:2px 9px;white-space:nowrap}
  .cp-sort{display:flex;gap:4px;margin-left:auto}
  .cp-sort button{border:1px solid #cbd5e1;border-radius:var(--r-pill);padding:3px 6px;font-size:12px;background:var(--c-bg);color:var(--c-text-2);cursor:pointer}
  .cp-sort button.active{background:var(--c-primary);border-color:var(--c-primary);color:#fff;font-weight:600}
  #cpClose{width:30px;height:30px;border:none;border-radius:var(--r-pill);background:var(--c-bg-soft);color:var(--c-text-2);font-size:14px;cursor:pointer;flex:0 0 auto}
  .cp-ref{display:flex;align-items:center;gap:var(--sp-sm);padding:9px 16px;font-size:12px;color:#0284c7;
    background:#f0f9ff;border-bottom:1px solid var(--c-primary-soft);flex:0 0 auto}
  #cpRefText{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* 参考行操作钮：重置定位 / 地图选点计算（计算中心三入口之二，第三入口=地图长按） */
  .cp-ref-btns{display:flex;gap:var(--sp-sm);margin-left:auto;flex:0 0 auto}
  .cp-ref-btns button{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--c-primary);border-radius:var(--r-pill);
    padding:3px 9px;font-size:var(--fs-md);background:var(--c-bg);color:var(--c-primary);cursor:pointer;white-space:nowrap}
  .cp-ref-btns button:active{background:var(--c-primary);color:#fff}
  .cp-ref-btns button .fa-rotate-right,.cp-ref-btns button .fa-map-pin{font-size:var(--fs-md)}
  #coolList{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:2px 10px calc(var(--sp-lg) + env(safe-area-inset-bottom))}
  .cp-item{display:flex;align-items:center;gap:10px;padding:10px 8px;border-bottom:1px solid var(--c-border-soft);cursor:pointer}
  .cp-item:active{background:var(--c-bg-hover)}
  .cp-temp{flex:0 0 auto;width:54px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:2px}  /* 纵列：温度行居上、凉差徽章居底 */
  .cpTL{display:inline-flex;align-items:baseline}   /* 温度值+℃ 一行 */
  .cp-temp .t{font-size:19px;font-weight:800;line-height:1.1}
  .cp-temp .u{font-size:10px;color:var(--c-text-3)}
  .cp-main{flex:1;min-width:0}
  .cp-name{font-size:14px;font-weight:700;color:var(--c-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cp-sub{font-size:var(--fs-sm);color:var(--c-text-2);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cp-tags{display:flex;gap:4px;margin-top:4px;flex-wrap:wrap}
  .cp-tag{font-size:10px;color:var(--c-accent);background:#f0fdfa;border:1px solid #ccfbf1;border-radius:var(--r-pill);padding:1px 6px;white-space:nowrap}
  .cp-tag.peak{color:#b45309;background:#fffbeb;border-color:#fde68a}
  .cp-tag.large{color:#7c3aed;background:#f5f3ff;border-color:#ddd6fe}
  .cp-tag.dist{color:var(--c-text-2);background:var(--c-bg-soft);border-color:var(--c-border)}
  .cp-nav{flex:0 0 auto;display:flex;flex-direction:column;gap:4px}
  .cp-nav button{border:1px solid var(--c-primary);color:var(--c-primary);background:var(--c-bg);border-radius:var(--r-pill);
    padding:4px var(--sp-lg);font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap}
  .cp-nav button:active{background:var(--c-primary);color:#fff}
  .cp-nav .cp-goto{border-color:#cbd5e1;color:var(--c-text-2);font-weight:500}
  .cp-empty{text-align:center;color:var(--c-text-3);font-size:var(--fs-md);padding:36px var(--sp-lg);line-height:1.9}
  .cp-loading{text-align:center;color:var(--c-text-3);font-size:var(--fs-md);padding:36px var(--sp-lg)}
  .cp-more{text-align:center;color:var(--c-text-3);font-size:12px;padding:12px 12px 16px}

  /* 纳凉点过滤行（距离 / 温度 / 仅景区）+ 结果计数 */
  .cp-filter{display:flex;gap:var(--sp-sm);align-items:center;padding:8px 12px;border-bottom:1px solid var(--c-border-soft);flex:0 0 auto;flex-wrap:wrap}
  .cp-filter select{flex:1 1 0;min-width:0;border:1px solid #cbd5e1;border-radius:var(--r-sm);padding:4px 5px;font-size:11px;background:var(--c-bg);color:var(--c-text-2);appearance:auto}
  .cp-scenic{display:flex;align-items:center;gap:1px;font-size:12px;color:var(--c-text-2);white-space:nowrap}
  .cp-scenic input{width:16px;height:16px;accent-color:var(--c-primary)}
  .cp-count{font-size:var(--fs-sm);color:var(--c-text-3);margin-left:auto;white-space:nowrap}
  .cp-tag.scenic{color:#047857;background:#ecfdf5;border-color:#6ee7b7}
  .cp-tag.eta{color:#7c3aed;background:#f5f3ff;border-color:#ddd6fe}
  .cp-name .fa-tree{color:var(--c-fa);margin-right:3px}

  /* 纳凉点凉差对比：参考行温度徽章 + 列表凉差徽章 + 按温差排序按钮 */
  .cp-ref{flex-wrap:wrap}
  .cpRefTemp{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-sm);font-weight:700;color:#0369a1;
    background:var(--c-primary-soft);border:1px solid #bae6fd;border-radius:var(--r-pill);padding:1px 8px;white-space:nowrap;flex:0 0 auto}
  .cpRefTemp .fa-temperature-half{font-size:var(--fs-sm)}
  .cpDelta{flex:0 0 auto;font-size:10px;font-weight:700;color:#047857;background:#ecfdf5;
    border:1px solid #6ee7b7;border-radius:var(--r-pill);padding:1px 7px;white-space:nowrap}   /* 并入 cp-temp 底部（2026-09-02） */
  .cpDeltaHot{color:var(--c-danger);background:var(--c-danger-bg);border-color:var(--c-danger-line)}
  .cpDeltaFlat{color:var(--c-text-2);background:var(--c-bg-soft);border-color:var(--c-border)}
  .cp-sort button:disabled{opacity:.45;cursor:not-allowed}

  /* ===== WP7 纳凉点列表骨架屏（15-coolspots.js 加载态模板，cp-skel 前缀） ===== */
  .cp-skel{display:flex;align-items:center;gap:10px;padding:12px 8px;border-bottom:1px solid var(--c-border-soft)}
  .cp-skel-ico{width:36px;height:36px;border-radius:50%;flex:0 0 auto;
    background:linear-gradient(90deg,var(--c-bg-soft) 25%,var(--c-border) 50%,var(--c-bg-soft) 75%);
    background-size:200% 100%;animation:cpSkelShine 1.4s linear infinite}
  .cp-skel-lines{flex:1;min-width:0}
  .cp-skel-ln{height:13px;border-radius:var(--r-pill);
    background:linear-gradient(90deg,var(--c-bg-soft) 25%,var(--c-border) 50%,var(--c-bg-soft) 75%);
    background-size:200% 100%;animation:cpSkelShine 1.4s linear infinite}
  .cp-skel-ln+.cp-skel-ln{margin-top:9px;width:56%}
  @keyframes cpSkelShine{0%{background-position:200% 0}100%{background-position:-200% 0}}

  /* ===== WP8b 人防纳凉点列表项（15-coolspots.js）：名称前圆形图标位 / 洞温口径胶囊 / 时段缀 / 备注行 ===== */
  .cpShelterIco{display:inline-flex;align-items:center;justify-content:center;width:17px;height:17px;
    border-radius:var(--r-pill);background:var(--c-accent);color:var(--c-bg);
    font-size:10px;  /* 10px=刻意偏离档（同 cp-tag） */
    vertical-align:-3px;margin-right:3px;flex:0 0 auto}
  .cpShelterTemp{flex-direction:column;align-items:center;gap:2px}  /* 温度值+℃ 一行、「洞内」胶囊居下，总宽仍 72px */
  .cpShelterTL{display:inline-flex;align-items:baseline}
  .cpShelterCave{font-size:10px;  /* 刻意偏离档 */
    font-weight:700;line-height:1.5;color:var(--c-bg);background:var(--c-accent);border-radius:var(--r-pill);
    padding:0 var(--sp-sm);white-space:nowrap}
  .cpShelterHours{margin-left:var(--sp-sm);color:var(--c-text-3);white-space:nowrap}
  .cpShelterHours .fa-clock{margin-right:2px}
  .cpShelterNote{font-size:var(--fs-sm);color:var(--c-text-3);margin-top:2px;line-height:1.45;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

  /* ===== WP7 可交互图例（17-legend.js）：阈值凉爽线 + 点选温度 chip ===== */
  .legendThMark{position:absolute;top:-3px;bottom:-3px;width:2px;margin-left:-1px;border-radius:1px;
    background:var(--c-text);box-shadow:0 0 0 1px rgba(255,255,255,.85);pointer-events:none}
  .legendChip{position:absolute;left:0;top:0;z-index:560;transform:translate(-50%,-100%);
    background:var(--c-text);color:#fff;font-size:var(--fs-sm);font-weight:700;font-variant-numeric:tabular-nums;
    padding:2px 9px;border-radius:var(--r-pill);white-space:nowrap;box-shadow:var(--sh-1);
    opacity:0;visibility:hidden;transition:opacity .25s ease,visibility .25s;pointer-events:none}
  .legendChip.show{opacity:1;visibility:visible}
  .legendChip::after{content:'';position:absolute;left:50%;top:100%;transform:translateX(-50%);
    border:4px solid transparent;border-top-color:var(--c-text)}

  /* ===== WP6 实时海拔徽章（16-elevbadge.js）：右下角常驻胶囊，风格对齐 #legend =====
     #legend 在页面顶部（top:64px+safe-area），与此无重叠；右下角真正要避让的是 Leaflet
     控件柱（zoom 下、定位按钮上，34px 宽 + 10px 外距），故 right:54px 贴其左侧落位。
     z-index 与 #legend 同级（500）：纳凉点面板/选点卡片/抽屉打开时自然盖住徽章。 */
  #elevB{position:absolute;left:12px;bottom:12px;z-index:500;display:none;align-items:center;gap:5px;
    font-size:var(--fs-sm);font-weight:700;color:var(--c-text-2);background:rgba(255,255,255,.82);border-radius:var(--r-pill);
    padding:5px var(--sp-lg);box-shadow:var(--sh-1);white-space:nowrap}
  #elevB.show{display:inline-flex}
  #elevB .fa-mountain{font-size:var(--fs-sm);color:var(--c-fa)}
  #elevB .elevBv{font-variant-numeric:tabular-nums;letter-spacing:.2px}

  /* ===== WP10 选点卡片「沿途路线海拔」剖面（18-profile.js）：入口条对齐 .c-sec 风格，默认收起 ===== */
  .cardProfSec{margin:0}
  .cardProfEntry{display:flex;width:100%;align-items:center;justify-content:space-between;
    font-size:var(--fs-md);font-weight:800;color:var(--c-accent-deep);background:var(--c-primary-soft);
    border:0;border-radius:var(--r-sm);padding:5px 10px;margin:var(--sp-lg) 0 var(--sp-sm);
    cursor:pointer;font-family:inherit;text-align:left}
  .cardProfEntryT{display:flex;align-items:center;gap:var(--sp-sm);min-width:0}
  .cardProfEntryT .fa-mountain{font-size:.92em;color:var(--c-fa)}
  .cardProfEntryT small{font-weight:600;color:var(--c-text-2);font-size:var(--fs-sm)}
  .cardProfCaret{font-size:10px;color:var(--c-text-2);transition:transform .2s ease}
  .cardProfEntry.open .cardProfCaret{transform:rotate(180deg)}
  .cardProfBox{position:relative;border:1px solid var(--c-border);border-radius:var(--r-sm);
    padding:6px 4px 2px;margin:2px 0 var(--sp-sm);background:var(--c-bg);overflow:hidden}
  .cardProfBox canvas{display:block;width:100%;height:110px}
  .cardProfLoad{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
    gap:var(--sp-sm);font-size:var(--fs-md);color:var(--c-text-3);background:var(--c-bg)}
  .cardProfSum{font-size:var(--fs-ssm);color:var(--c-text-2);text-align:center;
    padding:2px 0 var(--sp-sm);font-variant-numeric:tabular-nums}
  /* 剖面点按 chip：fixed 定位锚在画布上方，样式对齐 .legendChip */
  .profChip{position:fixed;left:0;top:0;z-index:570;transform:translate(-50%,-100%);
    background:var(--c-text);color:#fff;font-size:var(--fs-sm);font-weight:700;font-variant-numeric:tabular-nums;
    padding:2px 9px;border-radius:var(--r-pill);white-space:nowrap;box-shadow:var(--sh-1);
    opacity:0;visibility:hidden;transition:opacity .25s ease,visibility .25s;pointer-events:none}
  .profChip.show{opacity:1;visibility:visible}
  .profChip::after{content:'';position:absolute;left:50%;top:100%;transform:translateX(-50%);
    border:4px solid transparent;border-top-color:var(--c-text)}
  /* 徽章温度段（当前位置修正温度）+ 可点击态 */
  #elevB{cursor:pointer}
  #elevB .elevBt{margin-left:6px;padding-left:8px;border-left:1px solid var(--c-border);
    color:var(--c-primary);font-weight:800}

  /* ===== 3D 地形底座（map3d/）：2D/3D 双底座共存，body.map3d-on 切换显示 ===== */
  #map3dWrap{position:absolute;inset:0;z-index:1;display:none;touch-action:none}
  body.map3d-on #map3dWrap{display:block}
  body.map3d-on #map{display:none}
  #map3dLabels{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:5}
  #map3dCtl{position:absolute;right:12px;bottom:calc(12px + env(safe-area-inset-bottom));z-index:20;
    display:flex;flex-direction:column;gap:var(--sp-sm);align-items:stretch}
  #map3dCtl button{border:1px solid rgba(255,255,255,.28);border-radius:var(--r-pill);
    padding:var(--sp-sm) var(--sp-lg);font-size:var(--fs-md);cursor:pointer;
    background:rgba(11,18,32,.72);color:#dbeafe;box-shadow:var(--sh-1);
    display:flex;align-items:center;justify-content:center;gap:4px;white-space:nowrap}
  #map3dCtl button.on{background:var(--c-primary);border-color:var(--c-primary);color:#fff;font-weight:700}
  /* 长按涟漪动效（2D/3D 共用，pressRipple 创建，700ms 自删） */
  .mapPressRipple{position:fixed;z-index:640;width:56px;height:56px;margin:-28px 0 0 -28px;
    border-radius:50%;pointer-events:none;border:2px solid var(--c-primary);
    background:rgba(14,165,233,.18);animation:wicRipple .68s ease-out forwards}
  @keyframes wicRipple{
    0%{opacity:.85;transform:scale(.25)}
    100%{opacity:0;transform:scale(2.1)}
  }
  /* ===== 区域列表（T7 大区分组，搜索面板空态展示）===== */
  .rb-wrap{ max-height:calc(100vh - 240px); overflow-y:auto; padding:0 var(--sp-lg) var(--sp-lg); }
  /* 高差榜单入口行（2026-09-07 自顶栏挪入：手机端顶栏图标放不下） */
  .rb-relief{ display:flex; align-items:center; gap:var(--sp-sm);
    margin:var(--sp-sm) 0; padding:var(--sp-lg) var(--sp-lg);
    border-radius:var(--r-lg); background:var(--c-primary-soft);
    color:var(--c-accent-deep); font-size:var(--fs-lg); font-weight:600; cursor:pointer; }
  .rb-relief:active{ filter:brightness(.96); }
  .rb-relief em{ margin-left:auto; font-style:normal; font-weight:400;
    font-size:var(--fs-ssm); color:var(--c-text-3); }
  .rb-title{ font-size:var(--fs-ssm); color:var(--c-text-3); padding:var(--sp-sm) 2px; }
  .rb-group{ border-top:1px solid var(--c-border-soft); }
  .rb-group summary{ list-style:none; display:flex; align-items:center; gap:6px;
    padding:var(--sp-sm) 2px; font-size:var(--fs-lg); font-weight:600; color:var(--c-text); cursor:pointer; }
  .rb-group summary::-webkit-details-marker{ display:none; }
  .rb-group summary::before{ content:'\f078'; font-family:'Font Awesome 6 Free'; font-weight:900;
    font-size:var(--fs-ssm); color:var(--c-text-3); transition:transform .15s; }
  .rb-group[open] summary::before{ transform:rotate(180deg); }
  .rb-cnt{ margin-left:auto; font-size:var(--fs-sm); font-weight:400; color:var(--c-text-3); }
  .rb-items{ display:flex; flex-wrap:wrap; gap:8px; padding:2px 0 var(--sp-lg); }
  .rb-item{ padding:var(--sp-sm) var(--sp-lg); border-radius:var(--r-lg);
    background:var(--c-bg-soft); color:var(--c-text-2); font-size:var(--fs-md); cursor:pointer; }
  .rb-item:active{ background:var(--c-primary-soft); color:var(--c-accent-deep); }

  /* ===== 高差榜单（T10：底部上滑面板 + 地图标记）===== */
  #reliefPanel{position:absolute;left:0;right:0;bottom:0;z-index:660;background:var(--c-bg);
    border-radius:var(--r-lg) var(--r-lg) 0 0;box-shadow:var(--sh-1);
    display:none;max-height:72vh;flex-direction:column;
    transform:translateY(100%);transition:transform .26s ease}
  #reliefPanel.show{display:flex;transform:translateY(0)}
  .rp-bar{display:flex;align-items:center;gap:var(--sp-sm);padding:var(--sp-lg) 14px 10px;
    border-bottom:1px solid var(--c-border-soft);flex:0 0 auto}
  .rp-title{font-size:var(--fs-lg);font-weight:800;color:var(--c-accent-deep);white-space:nowrap}
  .rp-tiers{display:flex;gap:4px;margin-left:auto}
  .rp-tiers button{border:1px solid var(--c-border);border-radius:var(--r-pill);padding:3px 8px;
    font-size:var(--fs-sm);background:var(--c-bg);color:var(--c-text-2);cursor:pointer}
  .rp-tiers button.active{background:var(--c-primary);border-color:var(--c-primary);color:var(--c-bg);font-weight:600}
  #rpClose{width:30px;height:30px;border:none;border-radius:var(--r-pill);background:var(--c-bg-soft);
    color:var(--c-text-2);font-size:var(--fs-md);cursor:pointer;flex:0 0 auto}
  .rp-filter{display:flex;align-items:center;gap:var(--sp-sm);padding:var(--sp-sm) 14px;flex:0 0 auto}
  .rp-filter select{border:1px solid var(--c-border);border-radius:var(--r-sm);
    padding:4px 8px;font-size:var(--fs-md);color:var(--c-text-2);background:var(--c-bg)}
  .rp-cnt{margin-left:auto;font-size:var(--fs-sm);color:var(--c-text-3)}
  #reliefList{overflow-y:auto;flex:1 1 auto;padding:0 0 calc(var(--sp-lg) + env(safe-area-inset-bottom))}
  .rl-item{padding:10px 16px;border-bottom:1px solid var(--c-border-soft);cursor:pointer}
  .rl-item:active{background:var(--c-bg-hover)}
  .rl-main{display:flex;align-items:center;gap:var(--sp-sm)}
  .rl-name{font-size:var(--fs-md);font-weight:600;color:var(--c-text);overflow:hidden;
    text-overflow:ellipsis;white-space:nowrap}
  .rl-relief{margin-left:auto;flex:0 0 auto;font-size:var(--fs-sm);font-weight:700;
    color:var(--c-accent-deep);background:var(--c-primary-soft);border-radius:var(--r-pill);padding:2px 9px}
  .rl-sub{margin-top:3px;font-size:var(--fs-sm);color:var(--c-text-3)}
  .rl-temp{color:var(--c-primary);font-weight:700}
  .rl-empty{padding:26px 16px;text-align:center;font-size:var(--fs-md);color:var(--c-text-3)}
  .relief-marker-wrap{background:none;border:none}
  .relief-marker{display:flex;align-items:center;gap:2px;background:var(--c-bg);
    border:1px solid var(--c-accent);border-radius:var(--r-pill);padding:1px 7px 1px 5px;
    font-size:var(--fs-ssm);font-weight:700;color:var(--c-accent-deep);
    box-shadow:var(--sh-1);white-space:nowrap}
  .relief-marker i{font-size:var(--fs-ssm);color:var(--c-fa)}


  /* ===== 全国城市天气图标（20-cityweather.js；动画=纯 CSS）===== */
  .cwx-wrap{background:none;border:none}
  .cwx{display:flex;align-items:center;gap:3px;background:rgba(15,23,42,.78);color:#f8fafc;
    border-radius:var(--r-pill);padding:2px 8px 2px 4px;font-size:var(--fs-ssm);font-weight:700;
    box-shadow:var(--sh-1);white-space:nowrap}
  .cwx-ico{position:relative;display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center}
  .cwx-ico .fa-solid{font-size:12px}
  .cwx-t{color:#f8fafc}
  .cwx-sun .fa-sun{color:#fbbf24;animation:cwxPulse 3s ease-in-out infinite}
  .cwx-cloudsun .fa-cloud-sun{color:#e2e8f0;animation:cwxDrift 5s ease-in-out infinite}
  .cwx-cloud .fa-cloud{color:#cbd5e1;animation:cwxDrift 5s ease-in-out infinite}
  .cwx-rain .fa-cloud-rain,.cwx-heavyrain .fa-cloud-showers-heavy{color:#93c5fd}
  .cwx-rain .cwx-ico::after,.cwx-rain .cwx-ico::before,
  .cwx-heavyrain .cwx-ico::after,.cwx-heavyrain .cwx-ico::before{
    content:'';position:absolute;top:10px;width:2px;height:5px;border-radius:2px;
    background:#60a5fa;animation:cwxDrop 1.1s linear infinite}
  .cwx-rain .cwx-ico::after{left:4px}
  .cwx-rain .cwx-ico::before{left:10px;animation-delay:.55s}
  .cwx-heavyrain .cwx-ico::after{left:3px;animation-duration:.7s}
  .cwx-heavyrain .cwx-ico::before{left:11px;animation-delay:.35s;animation-duration:.7s}
  .cwx-thunder .fa-cloud-bolt{color:#facc15;animation:cwxFlash 1.6s steps(1,end) infinite}
  .cwx-snow .fa-snowflake{color:#e0f2fe;animation:cwxFall 2.4s linear infinite}
  .cwx-fog .fa-smog{color:#94a3b8;animation:cwxDrift 4s ease-in-out infinite}
  .cwx-wind .fa-wind{color:#a5f3fc;animation:cwxDrift 2.6s ease-in-out infinite}
  @keyframes cwxDrop{0%{transform:translateY(0);opacity:1}100%{transform:translateY(8px);opacity:0}}
  @keyframes cwxFlash{0%,58%{opacity:1}59%,68%{opacity:.15}69%,100%{opacity:1}}
  @keyframes cwxPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.92)}}
  @keyframes cwxDrift{0%,100%{transform:translateX(-1.2px)}50%{transform:translateX(1.6px)}}
  @keyframes cwxFall{0%{transform:translateY(-2px) rotate(0deg);opacity:.9}100%{transform:translateY(7px) rotate(45deg);opacity:.15}}

  /* ===== 天气胶囊城市名 + 重庆区县卡片同风格 ===== */
  .cwx-n{color:#f8fafc;font-weight:600}
  .st-label{background:rgba(15,23,42,.78);border:none;border-radius:var(--r-pill);
    padding:2px 9px 2px 3px;display:flex;align-items:center;gap:4px;
    box-shadow:var(--sh-1);white-space:nowrap;line-height:1.1}
  .st-label .st-nm{color:#f8fafc;font-size:var(--fs-ssm);font-weight:600}
  .st-label .st-t{font-size:var(--fs-ssm);font-weight:700}
  .st-label .st-h{color:#93c5fd;font-size:var(--fs-ssm)}
  .cwx-mini{width:15px;height:15px}
  .cwx-mini .fa-solid{font-size:11px}  .st-label{display:inline-flex;align-items:center;text-align:left;line-height:1.1}

/* 加载前摇遮罩（#bootVeil 内联样式为首帧即显，这里补淡出/动画/观感精修）。
   2026-09-10 起为唯一加载遮罩（用户拍板「加载二选一」）：3D 构建期文案由
   scene.js 写入 bootVeilMain/Detail，双条件收口见 14-main */
#bootVeil.off{opacity:0;pointer-events:none}
@keyframes bootSpin{to{transform:rotate(360deg)}}
@keyframes bvBreathe{0%,100%{transform:scale(1);opacity:.9}50%{transform:scale(1.12);opacity:1}}
.bv-spin{position:relative;box-shadow:0 0 24px rgba(14,116,144,.18);animation:bvBreathe 2.2s ease-in-out infinite}
.bv-spin::after{content:'';position:absolute;inset:-7px;border-radius:50%;
  border:2px dashed var(--c-brand,#0e7490);opacity:.35;animation:bootSpin 3.6s linear infinite reverse}
