/* 央企水泥/砂石/管桩招标地图 —— 样式（零依赖，手机优先） */
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{font:14px/1.5 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;color:#1c2530;background:#f4f6f9}
header{position:sticky;top:0;z-index:30;background:linear-gradient(135deg,#0f3057,#1b6ca8);color:#fff;padding:10px 12px 8px}
header h1{margin:0;font-size:16px;font-weight:600;letter-spacing:.3px}
header .meta{margin-top:4px;font-size:11px;opacity:.85}
.kpis{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap}
.kpi{background:rgba(255,255,255,.14);border-radius:8px;padding:4px 8px;font-size:11px}
.kpi b{font-size:14px;margin-right:3px}
.toolbar{position:sticky;top:0;z-index:20;background:#fff;border-bottom:1px solid #e3e8ef;padding:8px 10px;display:flex;flex-direction:column;gap:6px}
.chips{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px}
.chip{flex:0 0 auto;border:1px solid #d4dbe5;background:#fff;color:#465569;border-radius:14px;padding:4px 11px;font-size:12px;cursor:pointer}
.chip.on{background:#1b6ca8;border-color:#1b6ca8;color:#fff}
.chip.watch{border-color:#d93025;color:#d93025}
.chip.watch.on{background:#d93025;border-color:#d93025;color:#fff}
.soesel{width:100%;border:1px solid #d4dbe5;border-radius:8px;padding:7px 10px;font-size:13px;background:#fff;outline:none}
input[type=search]{width:100%;border:1px solid #d4dbe5;border-radius:8px;padding:7px 10px;font-size:13px;outline:none}
#map{position:relative;height:48vh;min-height:260px;overflow:hidden;background:#dfe6ee;touch-action:none;cursor:grab}
#map.dragging{cursor:grabbing}
#tiles,#markers{position:absolute;left:0;top:0;will-change:transform}
#tiles img{position:absolute;width:256px;height:256px;user-select:none;pointer-events:none}
.mk{position:absolute;transform:translate(-50%,-100%);cursor:pointer;font-size:0;line-height:0}
.mk i{display:block;width:14px;height:14px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);border:1.5px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,.35)}
.mk.cement i{background:#d93025}.mk.agg i{background:#f2a600}.mk.both i{background:#7b3fb5}
.mk.lime i{background:#0a8f52}.mk.phc i{background:#0a8f52}
.mk.plat i{background:#5b6b7c}.mk.win i{background:#0a8f52}.mk.other i{background:#1b6ca8}
/* 在招可动作(活标)闪烁：红圈 + ping 扩散 */
.mk.blink i{border:2px solid #d93025;box-shadow:0 0 0 0 rgba(217,48,37,.75);animation:ping 1.4s infinite}
@keyframes ping{0%{box-shadow:0 0 0 0 rgba(217,48,37,.75)}70%{box-shadow:0 0 0 11px rgba(217,48,37,0)}100%{box-shadow:0 0 0 0 rgba(217,48,37,0)}}
/* 独库蹲守命中：红色脉冲放大 */
.mk.hit i{width:20px;height:20px;border-width:2.5px;border-color:#d93025;animation:pulse 1.3s infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(217,48,37,.6)}50%{box-shadow:0 0 0 9px rgba(217,48,37,0)}}
/* legend 闪烁点 */
.blinkdot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#d93025;vertical-align:middle;animation:ping 1.4s infinite}
.mapctl{position:absolute;right:8px;bottom:8px;z-index:10;display:flex;flex-direction:column;gap:4px}
.mapctl button{width:32px;height:32px;border:1px solid #cfd8e3;background:#fff;border-radius:6px;font-size:16px;color:#33465c;cursor:pointer}
.legend{position:absolute;left:8px;bottom:8px;z-index:10;background:rgba(255,255,255,.92);border-radius:6px;padding:5px 7px;font-size:10px;color:#465569;line-height:1.7}
.legend s{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:4px;text-decoration:none}
#pop{position:absolute;z-index:15;max-width:80%;background:#fff;border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.25);padding:8px 10px;font-size:12px;display:none}
#pop b{display:block;font-size:12.5px;margin-bottom:3px}
#pop a{color:#1b6ca8}
#pop .x{position:absolute;right:5px;top:3px;color:#9aa7b5;cursor:pointer;font-size:14px}
.list{padding:8px 10px 24px}
.card{background:#fff;border:1px solid #e5eaf1;border-left:3px solid #1b6ca8;border-radius:8px;padding:9px 10px;margin-bottom:8px}
.card.cement{border-left-color:#d93025}.card.agg{border-left-color:#f2a600}
.card.both{border-left-color:#7b3fb5}.card.lime{border-left-color:#0a8f52}.card.phc{border-left-color:#0a8f52}
.card.win{border-left-color:#0a8f52}.card.plat{border-left-color:#5b6b7c}
.card.hit{background:#fff6f5;border-color:#ffd2ce}
.card.act{border-left-width:4px}
.card h3{margin:0 0 4px;font-size:13.5px;font-weight:600;line-height:1.45}
.card .row{font-size:11.5px;color:#5b6b7c;margin-top:2px}
.card .row b{color:#33465c;font-weight:600}
.badges{display:flex;gap:4px;flex-wrap:wrap;margin-top:5px}
.b{font-size:10px;border-radius:4px;padding:1.5px 6px;background:#eef3f8;color:#33465c}
.b.on{background:#e6f4ea;color:#0a8f52}.b.off{background:#f0f2f5;color:#8b97a4}
.b.watch{background:#fdeceb;color:#d93025;font-weight:600}
.card a.go{display:inline-block;margin-top:6px;font-size:11.5px;color:#1b6ca8;text-decoration:none;border:1px solid #cfe0ef;border-radius:5px;padding:3px 8px}
.empty{text-align:center;color:#8b97a4;padding:24px 10px;font-size:12.5px}
footer{padding:10px 12px 26px;font-size:10.5px;color:#8b97a4;text-align:center;line-height:1.7}
