/* ============================================================
   工气预报 · 全国务工观测网
   设计系统「观测网图纸」：冷调图纸纸面 / 墨蓝线稿 / 印章红点缀
   字体：站酷小薇（题字）· Noto Sans SC（正文）· IBM Plex Mono（读数）
   ============================================================ */

:root{
  --paper:#E7EDEF;          /* 图纸底 */
  --paper-2:#F4F7F8;        /* 卡面 */
  --paper-3:#FBFDFD;        /* 浮面/输入 */
  --ink:#1B2A33;            /* 墨蓝 */
  --ink-2:#4E6270;
  --ink-3:#8CA0AA;
  --line:#C8D5DA;           /* 细线 */
  --line-2:#A9BEC6;
  --seal:#BF4630;           /* 印章红 */
  --sun:#C89414;            /* 晴·琥珀 */
  --cloud:#7E97A6;          /* 多云·灰蓝 */
  --over:#5A6E78;           /* 阴·石板 */
  --rain:#3E6C8E;           /* 雨·靛蓝 */
  --ok:#2E8C5A; --mid:#C9A400; --warn:#D2791F; --bad:#BC3F2E; --na:#9AABB3;
  --disp:'ZCOOL XiaoWei','Noto Serif SC',serif;
  --body:'Noto Sans SC','PingFang SC','Microsoft YaHei',sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,'SF Mono',Consolas,'Noto Sans SC',monospace;
  --shadow-1:0 1px 2px rgba(27,42,51,.08),0 2px 8px rgba(27,42,51,.06);
  --shadow-2:0 4px 14px rgba(27,42,51,.14),0 2px 5px rgba(27,42,51,.10);
  --ease:cubic-bezier(.22,.8,.28,1);
}
*{margin:0;padding:0;box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  font-family:var(--body);color:var(--ink);background:var(--paper);
  min-height:100vh;-webkit-tap-highlight-color:transparent;
  -webkit-font-smoothing:antialiased;font-size:14px;line-height:1.6;
}
button{font-family:inherit;color:inherit;background:none;border:none;cursor:pointer}
input{font-family:inherit;color:inherit}
::selection{background:rgba(191,70,48,.22)}
:focus-visible{outline:2px solid var(--seal);outline-offset:2px;border-radius:4px}

/* 图纸细网格（铺在底层，营造坐标纸质感） */
body::before{
  content:"";position:fixed;inset:0;pointer-events:none;z-index:0;opacity:.5;
  background-image:
    linear-gradient(rgba(78,98,112,.05) 1px,transparent 1px),
    linear-gradient(90deg,rgba(78,98,112,.05) 1px,transparent 1px);
  background-size:28px 28px;
}

/* ── 报头 ─────────────────────────────────────── */
.masthead{
  position:sticky;top:0;z-index:60;display:flex;align-items:center;gap:18px;
  height:60px;padding:0 18px;background:rgba(231,237,239,.92);
  backdrop-filter:blur(8px);border-bottom:3px double var(--line-2);
}
.brand{display:flex;align-items:center;gap:10px;cursor:pointer;flex-shrink:0}
.seal{
  display:grid;place-items:center;width:42px;height:42px;border-radius:9px;
  background:var(--seal);color:#FBF3EF;font-family:var(--disp);
  font-size:17px;line-height:1.05;letter-spacing:1px;text-align:center;
  box-shadow:inset 0 0 0 1.5px rgba(251,243,239,.5),var(--shadow-1);
  transform:rotate(-2deg);transition:transform .25s var(--ease);
}
.brand:hover .seal{transform:rotate(0deg) scale(1.03)}
.wordmark{font-family:var(--disp);font-size:25px;letter-spacing:2px;line-height:1}
.wordmark i{
  display:block;font-style:normal;font-family:var(--mono);font-size:10px;
  letter-spacing:3px;color:var(--ink-2);margin-top:3px;
}

.search{position:relative;flex:1;max-width:460px;margin-left:auto}
.search .s-ico{
  position:absolute;left:12px;top:50%;transform:translateY(-50%);
  width:16px;height:16px;color:var(--ink-3);pointer-events:none;
}
#search-input{
  width:100%;height:38px;padding:0 34px 0 36px;font-size:13px;
  background:var(--paper-3);border:1px solid var(--line);border-radius:999px;
  transition:border-color .2s,box-shadow .2s;
}
#search-input::placeholder{color:var(--ink-3)}
#search-input:focus{outline:none;border-color:var(--ink-2);box-shadow:0 0 0 3px rgba(62,108,142,.14)}
.s-kbd{
  position:absolute;right:10px;top:50%;transform:translateY(-50%);
  font-family:var(--mono);font-size:10px;color:var(--ink-3);
  border:1px solid var(--line);border-bottom-width:2px;border-radius:5px;
  padding:1px 6px;background:var(--paper-2);pointer-events:none;
}
.search:focus-within .s-kbd,.search.has-value .s-kbd{display:none}
.s-clear{
  position:absolute;right:6px;top:50%;transform:translateY(-50%);
  width:26px;height:26px;border-radius:50%;color:var(--ink-3);font-size:12px;
}
.s-clear:hover{background:var(--line);color:var(--ink)}
.search-drop{
  position:absolute;top:calc(100% + 8px);left:0;right:0;z-index:70;
  background:var(--paper-3);border:1px solid var(--line-2);border-radius:12px;
  box-shadow:var(--shadow-2);overflow:hidden;max-height:340px;overflow-y:auto;
}
.sd-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 14px;text-align:left}
.sd-item:hover,.sd-item.on{background:var(--paper)}
.sd-item .dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.sd-item .nm{font-size:13px;font-weight:500;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sd-item .ct{font-family:var(--mono);font-size:11px;color:var(--ink-3)}
.sd-empty{padding:14px;font-size:12px;color:var(--ink-3);text-align:center}

.obs-stamp{
  font-family:var(--mono);font-size:10.5px;color:var(--ink-2);text-align:right;
  line-height:1.7;letter-spacing:.5px;flex-shrink:0;
}
.obs-stamp b{color:var(--ink);font-weight:600}

/* ── 主布局 ───────────────────────────────────── */
main{display:grid;grid-template-columns:1fr 424px;position:relative;z-index:1}
#map-wrap{position:relative;height:calc(100vh - 60px);min-height:430px;overflow:hidden}
#map,#chart-fallback{position:absolute;inset:0}
#map .maplibregl-ctrl-attrib{font-size:10px;background:rgba(251,253,253,.8)}
#map canvas{outline:none}

/* 图纸角标（四角十字刻度） */
#map-wrap::before,#map-wrap::after{
  content:"";position:absolute;z-index:6;pointer-events:none;width:26px;height:26px;
  background:
    linear-gradient(var(--ink-2),var(--ink-2)) 13px 0/1px 9px no-repeat,
    linear-gradient(var(--ink-2),var(--ink-2)) 13px 17px/1px 9px no-repeat,
    linear-gradient(var(--ink-2),var(--ink-2)) 0 13px/9px 1px no-repeat,
    linear-gradient(var(--ink-2),var(--ink-2)) 17px 13px/9px 1px no-repeat;
  opacity:.4;
}
#map-wrap::before{left:9px;top:9px}
#map-wrap::after{right:9px;bottom:9px}

/* 载入雷达 */
#map-loading{
  position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;
  gap:16px;align-items:center;justify-content:center;
  background:var(--paper);transition:opacity .4s;
}
#map-loading.off{opacity:0;pointer-events:none}
.radar{
  width:54px;height:54px;border-radius:50%;border:1.5px solid var(--line-2);
  position:relative;overflow:hidden;
}
.radar::before,.radar::after{
  content:"";position:absolute;border-radius:50%;border:1.5px solid var(--line-2);
}
.radar::before{inset:11px}
.radar::after{inset:24px}
.radar i{
  position:absolute;left:50%;top:50%;width:50%;height:1.5px;transform-origin:left center;
  background:linear-gradient(90deg,var(--seal),transparent);
  animation:sweep 1.6s linear infinite;
}
@keyframes sweep{to{transform:rotate(360deg)}}
#map-loading .txt{font-family:var(--mono);font-size:11px;letter-spacing:3px;color:var(--ink-2)}

/* 面包屑 & 返回全国 */
.crumb{
  position:absolute;top:14px;left:14px;z-index:7;display:flex;align-items:center;gap:2px;
  background:var(--paper-3);border:1px solid var(--line-2);border-radius:999px;
  padding:5px 8px 5px 4px;box-shadow:var(--shadow-1);font-size:12.5px;
}
.crumb .c-back{
  display:grid;place-items:center;width:24px;height:24px;border-radius:50%;
  font-size:15px;line-height:1;color:var(--ink-2);
}
.crumb .c-back:hover{background:var(--line);color:var(--ink)}
.crumb .c-sep{color:var(--ink-3);margin:0 2px}
.crumb .c-cur{font-weight:600;padding-right:6px;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#btn-nation{
  position:absolute;top:14px;right:14px;z-index:7;padding:7px 14px;
  font-size:12.5px;font-weight:500;background:var(--ink);color:var(--paper-3);
  border-radius:999px;box-shadow:var(--shadow-1);transition:transform .15s var(--ease);
}
#btn-nation:hover{transform:translateX(-2px)}

.map-hint{
  position:absolute;bottom:52px;left:50%;transform:translateX(-50%);z-index:5;
  font-family:var(--mono);font-size:10.5px;letter-spacing:2px;color:var(--ink-2);
  background:rgba(251,253,253,.85);border:1px solid var(--line);border-radius:999px;
  padding:5px 14px;pointer-events:none;transition:opacity .5s;white-space:nowrap;
}
.map-hint.off{opacity:0}

/* 图例（双行：厂评灯 + 城市工气） */
.legend{
  position:absolute;left:14px;bottom:14px;z-index:7;display:flex;flex-direction:column;gap:4px;
  font-size:11px;color:var(--ink-2);background:rgba(251,253,253,.88);
  backdrop-filter:blur(4px);border:1px solid var(--line);border-radius:10px;
  padding:7px 12px;box-shadow:var(--shadow-1);max-width:min(92%,560px);
}
.lg-row{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.legend .lg-t{font-family:var(--mono);font-size:10px;letter-spacing:1px;color:var(--ink-3)}
.legend span{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.lg{width:9px;height:9px;border-radius:50%;display:inline-block;border:1.5px solid #fff;box-shadow:0 0 0 1px var(--line-2)}
.lg.ok{background:var(--ok)} .lg.mid{background:var(--mid)}
.lg.warn{background:var(--warn)} .lg.bad{background:var(--bad)} .lg.na{background:var(--na)}
.lg.w-sun{background:var(--sun)} .lg.w-cloud{background:var(--cloud)}
.lg.w-over{background:var(--over)} .lg.w-rain{background:var(--rain)}

/* ── 地图标记：观测站 / 等压线 / 厂灯 / 选中钉 ───── */
.hub{
  position:absolute;left:0;top:0;transform:translate(-50%,-50%);
  cursor:pointer;z-index:2;width:0;height:0;
}
.hub .ring{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  border-radius:50%;border:1px solid var(--ink);pointer-events:none;
  transition:opacity .5s,transform .5s var(--ease);
}
.hub .r1{width:120px;height:120px;opacity:.14}
.hub .r2{width:190px;height:190px;opacity:.09}
.hub .r3{width:268px;height:268px;opacity:.05}
.hub .badge{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:52px;height:52px;border-radius:50%;background:var(--paper-3);
  border:2.5px solid var(--w,var(--cloud));display:grid;place-items:center;
  box-shadow:var(--shadow-1),inset 0 0 0 2px var(--paper-3);
  transition:transform .25s var(--ease),box-shadow .25s;
}
.hub .badge svg{width:26px;height:26px;color:var(--w,var(--cloud))}
.hub .tag{
  position:absolute;left:50%;top:calc(50% + 30px);transform:translateX(-50%);
  font-family:var(--disp);font-size:16px;letter-spacing:2px;color:var(--ink);
  background:rgba(251,253,253,.82);padding:1px 8px;border-radius:6px;
  white-space:nowrap;text-shadow:0 1px 0 var(--paper-3);
}
.hub .sub{
  position:absolute;left:50%;top:calc(50% + 53px);transform:translateX(-50%);
  font-family:var(--mono);font-size:9.5px;letter-spacing:1px;color:var(--ink-2);
  background:rgba(251,253,253,.85);padding:0 6px;border-radius:6px;white-space:nowrap;
}
.hub:hover .badge{transform:translate(-50%,-50%) scale(1.14);box-shadow:var(--shadow-2),inset 0 0 0 2px var(--paper-3)}
.hub:hover .r1{opacity:.28}
.hub.dim .badge{opacity:.55}
.hub.hide,.hub.hide .ring,.hub.hide .badge,.hub.hide .tag,.hub.hide .sub{opacity:0;pointer-events:none}

/* 非枢纽小城观测点 */
.mini-city{
  position:absolute;left:0;top:0;transform:translate(-50%,-50%);z-index:1;
  display:flex;align-items:center;gap:5px;cursor:pointer;opacity:.82;transition:opacity .15s;
}
.mini-city:hover{opacity:1}
.mini-city i{
  width:9px;height:9px;border-radius:50%;border:1.5px solid var(--ink-2);
  background:var(--paper-3);box-shadow:var(--shadow-1);flex-shrink:0;
}
.mini-city span{
  font-size:11px;color:var(--ink-2);background:rgba(251,253,253,.85);
  padding:0 5px;border-radius:5px;white-space:nowrap;
}
.mini-city:hover span{color:var(--ink);font-weight:600}
.mini-city.hide{opacity:0;pointer-events:none}

/* 选中厂：水滴钉 */
.pin{
  position:absolute;left:0;top:0;transform:translate(-50%,-100%);z-index:4;
  pointer-events:none;filter:drop-shadow(0 3px 4px rgba(27,42,51,.35));
}
.pin svg{display:block}
.pin .p-label{
  position:absolute;left:50%;bottom:calc(100% + 4px);transform:translateX(-50%);
  font-size:11.5px;font-weight:600;color:var(--ink);background:var(--paper-3);
  border:1px solid var(--line-2);border-radius:7px;padding:3px 9px;white-space:nowrap;
  box-shadow:var(--shadow-1);
}

/* 图纸兜底模式 */
#chart-fallback{background:var(--paper);z-index:1}
#chart-fallback svg{display:block;width:100%;height:100%}

/* 浮动提示 */
#tooltip{
  position:fixed;z-index:80;pointer-events:none;max-width:240px;
  background:var(--ink);color:var(--paper-3);font-size:11.5px;line-height:1.5;
  border-radius:8px;padding:7px 10px;box-shadow:var(--shadow-2);
}
#tooltip b{font-weight:600}
#tooltip .tt-sub{font-family:var(--mono);font-size:10px;opacity:.75}

/* ── 右侧面板 ─────────────────────────────────── */
#panel{
  height:calc(100vh - 60px);overflow-y:auto;background:var(--paper-2);
  border-left:1px solid var(--line-2);padding:20px 22px 40px;scrollbar-width:thin;
  scrollbar-color:var(--line-2) transparent;
}
#panel::-webkit-scrollbar{width:8px}
#panel::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:4px}

.eyebrow{
  display:flex;align-items:center;gap:10px;font-family:var(--mono);font-size:10.5px;
  letter-spacing:3px;color:var(--ink-2);margin:26px 0 12px;
}
.eyebrow::after{content:"";flex:1;border-top:1px solid var(--line-2)}
.eyebrow:first-child{margin-top:2px}

/* L0 · 民情速览 */
.digest{display:grid;grid-template-columns:repeat(5,1fr);gap:7px}
.dg{
  background:var(--paper-3);border:1px solid var(--line);border-radius:10px;
  padding:10px 8px 9px;text-align:center;
}
.dg b{
  display:block;font-family:var(--mono);font-size:19px;font-weight:600;
  letter-spacing:-.5px;line-height:1.2;
}
.dg b em{font-style:normal;font-size:11px;letter-spacing:0}
.dg span{display:block;font-size:10px;color:var(--ink-2);line-height:1.35;margin-top:2px}
.dg-hot b{color:var(--seal)}
.dg-hot{box-shadow:inset 0 2px 0 var(--seal)}
.q-top{display:flex;flex-wrap:wrap;gap:6px}
.q-top .chip b{font-family:var(--mono);font-weight:600;color:var(--ink)}

.chip{
  display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--ink-2);
  background:var(--paper-3);border:1px solid var(--line);border-radius:999px;padding:3px 9px;
}
.chip.warn{color:var(--warn);border-color:rgba(210,121,31,.4)}
.chip.bad{color:var(--bad);border-color:rgba(188,63,46,.4)}
.chip.ok{color:var(--ok);border-color:rgba(46,140,90,.4)}

/* L0 · 城市预报卡 */
.city-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.fc{
  text-align:left;background:var(--paper-3);border:1px solid var(--line);
  border-radius:12px;padding:13px 14px 11px;position:relative;overflow:hidden;
  transition:transform .2s var(--ease),box-shadow .2s,border-color .2s;
}
.fc:hover{transform:translateY(-2px);box-shadow:var(--shadow-2);border-color:var(--line-2)}
.fc .fc-top{display:flex;align-items:center;gap:8px}
.fc .fc-ico{display:grid;place-items:center;width:30px;height:30px;flex-shrink:0;color:var(--wc)}
.fc .fc-ico svg{width:27px;height:27px}
.fc .fc-city{font-family:var(--disp);font-size:20px;letter-spacing:2px;line-height:1.1}
.fc .fc-wx{
  margin-left:auto;font-family:var(--disp);font-size:24px;color:var(--wc);
  border:1.5px solid var(--wc);border-radius:9px;width:38px;height:38px;
  display:grid;place-items:center;transform:rotate(-3deg);flex-shrink:0;
}
.fc .fc-rows{margin-top:9px;display:grid;gap:3px}
.fc .fc-row{display:flex;justify-content:space-between;font-size:11.5px;color:var(--ink-2)}
.fc .fc-row b{font-family:var(--mono);font-weight:500;color:var(--ink)}
.fc .fc-row b em{font-style:normal;font-size:10px;color:var(--ink-3);letter-spacing:0}
.fc .fc-bar{margin-top:9px;height:3.5px;background:var(--line);border-radius:2px;overflow:hidden}
.fc .fc-bar i{display:block;height:100%;background:var(--wc);border-radius:2px}
.fc .fc-best{
  margin-top:8px;padding-top:7px;border-top:1px dashed var(--line);
  font-size:11px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.fc .fc-best b{color:var(--ink)}
.fc-caveat{font-size:10px;color:var(--ink-3);margin-top:6px;font-family:var(--mono)}

/* L0 · 其他观测点 */
.other-grid{display:flex;flex-wrap:wrap;gap:7px}
.oc{
  display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;
  background:var(--paper-3);border:1px solid var(--line);font-size:12px;color:var(--ink-2);
  transition:border-color .15s,transform .15s var(--ease);
}
.oc:hover{border-color:var(--ink-2);transform:translateY(-1px)}
.oc b{color:var(--ink);font-family:var(--disp);font-size:14px;letter-spacing:1px}
.oc i{font-style:normal;font-family:var(--mono);font-size:10px;color:var(--ink-3)}

/* L1 · 城市页 */
.city-hero{
  background:var(--paper-3);border:1px solid var(--line-2);border-radius:14px;
  padding:16px 18px 14px;position:relative;overflow:hidden;
  animation:rise .3s var(--ease);
}
.city-hero::after{
  content:"";position:absolute;right:-46px;top:-46px;width:170px;height:170px;border-radius:50%;
  border:26px solid var(--wc,var(--line));opacity:.1;pointer-events:none;
}
.ch-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.ch-name{font-family:var(--disp);font-size:31px;letter-spacing:3px;line-height:1}
.ch-wx{
  display:inline-flex;align-items:center;gap:7px;color:var(--wc);font-family:var(--disp);
  font-size:19px;border:1.5px solid var(--wc);border-radius:9px;padding:2px 11px;
  transform:rotate(-2.5deg);background:var(--paper-3);
}
.ch-stats{display:flex;gap:0;margin-top:12px;flex-wrap:wrap}
.ch-stat{padding:0 16px;border-left:1px solid var(--line)}
.ch-stat:first-child{padding-left:0;border-left:none}
.ch-stat b{display:block;font-family:var(--mono);font-size:17px;font-weight:600;line-height:1.3}
.ch-stat b em{font-style:normal;font-size:11px;color:var(--ink-3)}
.ch-stat span{font-size:10.5px;color:var(--ink-2)}
.ch-note{margin-top:10px;font-size:11px;color:var(--ink-3)}

/* 筛选条 */
.filters{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:14px 0 4px}
.ft{
  display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ink-2);
  border:1px solid var(--line);border-radius:999px;padding:4px 11px;background:var(--paper-3);
  transition:all .15s;
}
.ft i{width:8px;height:8px;border-radius:50%;display:inline-block}
.ft.on{border-color:var(--ink);color:var(--ink);font-weight:600;box-shadow:inset 0 0 0 1px var(--ink)}
.ft.on.off-mode{border-color:var(--seal);color:var(--seal);box-shadow:inset 0 0 0 1px var(--seal)}
.ft-ghost{border-style:dashed}
.filters select{
  margin-left:auto;font-size:11.5px;color:var(--ink-2);background:var(--paper-3);
  border:1px solid var(--line);border-radius:999px;padding:4px 8px;height:27px;
}
.f-count{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);margin:8px 0 6px}

/* 厂卡 */
.f-list{display:flex;flex-direction:column;gap:8px}
.fcard{
  text-align:left;display:flex;gap:11px;align-items:flex-start;width:100%;
  background:var(--paper-3);border:1px solid var(--line);border-radius:11px;
  padding:11px 13px;transition:transform .15s var(--ease),box-shadow .15s,border-color .15s;
}
.fcard:hover{transform:translateX(3px);box-shadow:var(--shadow-1);border-color:var(--line-2)}
.fcard.sel{border-color:var(--seal);box-shadow:inset 0 0 0 1px var(--seal)}
.fc-lamp{
  width:11px;height:11px;border-radius:50%;flex-shrink:0;margin-top:5px;
  border:1.5px solid #fff;box-shadow:0 0 0 1px var(--line-2),0 0 6px var(--lc);
  background:var(--lc);background:var(--lc);
}
.fcard .fc-main{flex:1;min-width:0}
.fcard .fc-name{
  font-size:13.5px;font-weight:600;line-height:1.35;
  display:flex;align-items:baseline;gap:7px;flex-wrap:wrap;
}
.fcard .fc-name .stars{font-family:var(--mono);font-size:10.5px;color:var(--ink-3)}
.fcard .fc-meta{display:flex;gap:5px;flex-wrap:wrap;margin-top:5px}
.fcard .fc-area{font-size:11px;color:var(--ink-3);margin-top:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fcard .fc-price{
  text-align:right;flex-shrink:0;font-family:var(--mono);line-height:1.35;
}
.fcard .fc-price b{font-size:14px;font-weight:600;display:block;white-space:nowrap}
.fcard .fc-price span{font-size:9.5px;color:var(--ink-3);letter-spacing:.5px}
.f-empty{
  padding:26px 14px;text-align:center;color:var(--ink-3);font-size:12.5px;
  border:1.5px dashed var(--line);border-radius:12px;
}
.f-empty b{display:block;font-size:14px;color:var(--ink-2);margin-bottom:3px}

/* ── L2 · 观测记录单 ───────────────────────────── */
.dossier{animation:rise .3s var(--ease)}
@keyframes rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.do-head{display:flex;gap:12px;align-items:flex-start}
.do-lamp{
  width:15px;height:15px;border-radius:50%;flex-shrink:0;margin-top:6px;
  border:2px solid #fff;box-shadow:0 0 0 1.5px var(--line-2),0 0 10px var(--lc);background:var(--lc);
}
.do-title{flex:1;min-width:0}
.do-title h2{font-family:var(--disp);font-size:22px;line-height:1.3;letter-spacing:1px;font-weight:400}
.do-title .do-sub{font-size:11.5px;color:var(--ink-2);margin-top:3px;line-height:1.5}
.do-title .do-sub .sep{margin:0 5px;color:var(--line-2)}
.do-stars{font-family:var(--mono);font-size:12px;color:var(--ink-2);flex-shrink:0;margin-top:6px}
.do-stars b{font-size:17px;color:var(--ink);font-weight:600}

/* 工价块 */
.wage-block{
  display:flex;gap:10px;margin-top:14px;flex-wrap:wrap;
}
.wg{
  flex:1;min-width:130px;background:var(--paper-3);border:1px solid var(--line-2);
  border-radius:12px;padding:11px 14px;
}
.wg b{
  display:block;font-family:var(--mono);font-size:22px;font-weight:600;letter-spacing:-.5px;
  line-height:1.25;white-space:nowrap;
}
.wg b em{font-style:normal;font-size:11px;font-weight:400;color:var(--ink-3);letter-spacing:0}
.wg span{font-size:10.5px;color:var(--ink-2)}
.wg-note{
  flex-basis:100%;font-family:var(--mono);font-size:10.5px;color:var(--ink-3);
  background:var(--paper-3);border:1px dashed var(--line);border-radius:9px;padding:7px 11px;
  word-break:break-all;line-height:1.7;
}
.wage-alert{
  margin-top:8px;flex-basis:100%;font-size:12px;color:var(--bad);font-weight:500;
  background:rgba(188,63,46,.06);border:1px solid rgba(188,63,46,.35);border-radius:9px;
  padding:8px 12px;line-height:1.6;
}

/* 记录单行 */
.spec{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-top:12px}
.spec>div{background:var(--paper-3);padding:9px 12px 8px}
.spec .k{
  display:block;font-family:var(--mono);font-size:9.5px;letter-spacing:2px;
  color:var(--ink-3);margin-bottom:2px;
}
.spec .v{font-size:12.5px;line-height:1.5;word-break:break-word}
.spec .v.dim{color:var(--ink-3)}
.spec .v .yes{color:var(--ok);font-weight:600}
.spec .v .no{color:var(--bad);font-weight:600}
.spec .v .mid-w{color:var(--warn);font-weight:600}

/* 面试锦囊 */
.qa{display:flex;flex-direction:column;gap:8px}
.qa-item{
  background:var(--paper-3);border:1px solid var(--line);border-left:3px solid var(--rain);
  border-radius:0 10px 10px 0;padding:9px 13px;font-size:12.5px;line-height:1.65;
}
.qa-item .qa-k{font-family:var(--mono);font-size:9.5px;letter-spacing:2px;color:var(--rain);display:block;margin-bottom:2px}
.qa-none{font-size:12px;color:var(--ink-3);padding:10px 4px}

/* 吐槽墙：便签化（微旋转 + 纸胶带） */
.wall{display:flex;flex-direction:column;gap:10px}
.wall-note{
  background:var(--paper-3);border:1px solid var(--line);border-radius:4px 11px 11px 11px;
  padding:12px 13px 10px 26px;font-size:12.5px;line-height:1.7;position:relative;
  box-shadow:var(--shadow-1);
}
.wall-note:nth-child(odd){transform:rotate(-.35deg)}
.wall-note:nth-child(even){transform:rotate(.3deg)}
.wall-note::before{
  content:"「";font-family:var(--disp);position:absolute;left:9px;top:5px;
  font-size:17px;color:var(--line-2);
}
.wall-note::after{
  content:"";position:absolute;top:-6px;left:50%;width:46px;height:12px;
  transform:translateX(-50%) rotate(-1.5deg);
  background:linear-gradient(180deg,rgba(201,164,0,.16),rgba(201,164,0,.10));
  border-left:1px dashed rgba(169,190,198,.5);border-right:1px dashed rgba(169,190,198,.5);
}
.wall-note .wn-src{display:block;font-family:var(--mono);font-size:9.5px;color:var(--ink-3);margin-top:5px;letter-spacing:1px}

/* 环境标签 & 备注自由文本 */
.env-chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.free-text{
  font-size:12px;color:var(--ink-2);line-height:1.7;background:var(--paper-3);
  border:1px dashed var(--line);border-radius:10px;padding:9px 12px;word-break:break-word;
}

/* 多条实测折叠分段 */
details.obs{
  border:1px solid var(--line);border-radius:12px;background:var(--paper-3);
  margin-top:10px;overflow:hidden;
}
details.obs summary{
  list-style:none;cursor:pointer;padding:13px 14px;min-height:44px;box-sizing:border-box;
  font-family:var(--mono);font-size:11px;letter-spacing:1.5px;color:var(--ink);
  display:flex;align-items:center;gap:9px;user-select:none;font-weight:500;
}
details.obs summary::-webkit-details-marker{display:none}
details.obs summary::before{
  content:"";width:0;height:0;border-left:6px solid var(--ink-2);border-top:5px solid transparent;
  border-bottom:5px solid transparent;transition:transform .2s var(--ease);flex-shrink:0;
}
details.obs[open] summary{border-bottom:1px solid var(--line);background:var(--paper)}
details.obs[open] summary::before{transform:rotate(90deg)}
details.obs summary:hover{color:var(--ink);background:var(--paper)}
details.obs summary .obs-hint{margin-left:auto;font-size:9.5px;color:var(--ink-3);letter-spacing:1px}
details.obs .obs-body{padding:2px 14px 14px;border-top:1px dashed var(--line)}
.obs-divider{
  display:flex;align-items:center;gap:10px;margin:20px 0 10px;
  font-family:var(--mono);font-size:10px;letter-spacing:2px;color:var(--ink-3);
}
.obs-divider::before,.obs-divider::after{content:"";flex:1;border-top:1px dashed var(--line-2)}

.do-foot{
  margin-top:20px;padding-top:12px;border-top:1px solid var(--line);
  font-size:10.5px;color:var(--ink-3);line-height:1.8;
}
.do-foot .loc{font-family:var(--mono);word-break:break-all}

/* ── 移动端 ───────────────────────────────────── */
@media (max-width:960px){
  .masthead{gap:10px;padding:0 12px;height:56px}
  .wordmark{font-size:20px}
  .wordmark i{letter-spacing:2px;font-size:9px}
  .obs-stamp{display:none}
  .s-kbd{display:none}
  .search{max-width:none}
  main{display:block}
  #map-wrap{height:41vh;min-height:280px}
  #panel{height:auto;min-height:59vh;border-left:none;border-top:1px solid var(--line-2);padding:16px 14px 90px}
  .legend{max-width:calc(100% - 28px);gap:7px;font-size:10px;padding:5px 9px}
  .map-hint{bottom:12px;font-size:9.5px;letter-spacing:1px}
  .digest{grid-template-columns:repeat(2,1fr)}
  .digest .dg:nth-child(5){grid-column:span 2}
  .city-grid{grid-template-columns:1fr}
  .spec{grid-template-columns:1fr 1fr}
  .hub .r1{width:90px;height:90px}
  .hub .r2{width:140px;height:140px}
  .hub .r3{width:196px;height:196px}
  .crumb{top:10px;left:10px}
  #btn-nation{top:10px;right:10px}
}

/* 底部浮层（移动端 L2） */
#sheet{
  position:fixed;left:0;right:0;bottom:0;z-index:90;height:86vh;
  background:var(--paper-2);border-radius:18px 18px 0 0;border-top:1px solid var(--line-2);
  box-shadow:0 -8px 30px rgba(27,42,51,.22);display:flex;flex-direction:column;
  transform:translateY(100%);transition:transform .32s var(--ease);
}
#sheet.on{transform:translateY(0)}
.sheet-bar{width:100%;padding:10px 0 4px;cursor:grab;flex-shrink:0}
.sheet-bar::before{
  content:"";display:block;width:42px;height:4.5px;border-radius:3px;
  background:var(--line-2);margin:0 auto;
}
.sheet-x{
  position:absolute;right:12px;top:10px;width:40px;height:40px;border-radius:50%;
  background:var(--paper-3);border:1px solid var(--line);font-size:14px;color:var(--ink-2);z-index:2;
}
#sheet-body{flex:1;overflow-y:auto;padding:8px 16px 60px;-webkit-overflow-scrolling:touch}
@media (min-width:961px){#sheet{display:none}}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important}
}
