/* 城区专题：地图内水流、公路脉冲与粒子态势增强 */
.urban-page .map-wrap{background:radial-gradient(circle at 50% 45%,#08254a,#020a19 74%)}
.urban-page #map .leaflet-tile-pane{filter:saturate(.67) brightness(.72) contrast(1.12) hue-rotate(4deg)}
.urban-motion-canvas{position:absolute;z-index:532;inset:0;width:100%;height:100%;pointer-events:none;mix-blend-mode:screen}

.urban-page #map path.zd-flow{filter:drop-shadow(0 0 4px rgba(255,215,70,.9)) drop-shadow(0 0 9px rgba(255,160,30,.35))!important;stroke-dasharray:5 14!important;animation:urban-road-surge 1.44s linear infinite!important}
@keyframes urban-road-surge{to{stroke-dashoffset:-57}}
.urban-page #map path.zd-river-flow{filter:drop-shadow(0 0 4px rgba(30,190,255,.95)) drop-shadow(0 0 12px rgba(0,119,255,.5))!important;stroke-dasharray:2 8!important;animation:urban-water-surge 1.28s linear infinite!important}
@keyframes urban-water-surge{to{stroke-dashoffset:-40}}

.urban-motion-hud{position:absolute;z-index:542;right:12px;bottom:42px;display:flex;gap:6px;pointer-events:none}
.urban-motion-module{position:relative;display:grid;grid-template-columns:34px 1fr;align-items:center;width:128px;height:43px;padding:5px 8px 5px 5px;overflow:hidden;
  border:1px solid rgba(54,207,255,.20);background:linear-gradient(90deg,rgba(3,18,39,.92),rgba(7,39,68,.76));box-shadow:inset 0 0 18px rgba(54,207,255,.04);backdrop-filter:blur(8px)}
.urban-motion-module::after{content:"";position:absolute;left:-45%;top:0;width:35%;height:100%;transform:skewX(-18deg);background:linear-gradient(90deg,transparent,rgba(96,224,255,.09),transparent);animation:urban-hud-scan 4.6s ease-in-out infinite}
@keyframes urban-hud-scan{60%,100%{left:125%}}
.urban-motion-module b{display:block;color:#cceff7;font-size:8px;font-weight:500;letter-spacing:.5px}.urban-motion-module small{display:block;margin-top:2px;color:#507b98;font:7px Bahnschrift,monospace;letter-spacing:.7px}
.urban-water-wave{position:relative;width:28px;height:28px;overflow:hidden;border:1px solid rgba(30,191,255,.38);border-radius:50%;box-shadow:0 0 10px rgba(30,191,255,.12)}
.urban-water-wave::before,.urban-water-wave::after{content:"";position:absolute;left:-35%;width:170%;height:170%;border-radius:42%;background:rgba(25,170,255,.28);animation:urban-water-roll 4s linear infinite}
.urban-water-wave::before{top:37%}.urban-water-wave::after{top:45%;background:rgba(67,222,255,.15);animation-duration:6.5s;animation-direction:reverse}
@keyframes urban-water-roll{to{transform:rotate(360deg)}}
.urban-road-meter{position:relative;width:28px;height:28px;border:1px solid rgba(248,189,67,.34);border-radius:50%;box-shadow:0 0 10px rgba(248,189,67,.1)}
.urban-road-meter::before{content:"";position:absolute;left:4px;right:4px;top:13px;height:2px;background:linear-gradient(90deg,transparent,#ffd763,transparent);box-shadow:0 0 6px #f8bd43;animation:urban-road-meter 1.05s linear infinite}
.urban-road-meter::after{content:"";position:absolute;left:12px;top:4px;bottom:4px;width:2px;background:linear-gradient(180deg,transparent,#ffd763,transparent);opacity:.55}
@keyframes urban-road-meter{from{transform:translateX(-5px);opacity:.35}50%{opacity:1}to{transform:translateX(5px);opacity:.35}}

.urban-live-chip{position:absolute;z-index:541;left:12px;top:51px;display:flex;align-items:center;gap:7px;height:26px;padding:0 9px;color:#6d98b4;font-size:7px;letter-spacing:.7px;
  border:1px solid rgba(54,207,255,.16);background:rgba(3,17,37,.78);pointer-events:none;backdrop-filter:blur(7px)}
.urban-live-chip i{width:5px;height:5px;border-radius:50%;background:#46e7ab;box-shadow:0 0 8px #46e7ab;animation:urban-chip-pulse 1.6s ease-in-out infinite}.urban-live-chip b{color:#aeeeff;font-weight:500}
@keyframes urban-chip-pulse{50%{opacity:.3;transform:scale(.65)}}

@media (max-width:1365px){.urban-motion-module{width:108px}.urban-motion-hud{gap:4px}.urban-live-chip{display:none}}
@media (prefers-reduced-motion:reduce){.urban-page #map path.zd-flow,.urban-page #map path.zd-river-flow,.urban-motion-module::after,.urban-water-wave::before,.urban-water-wave::after,.urban-road-meter::before,.urban-live-chip i{animation:none!important}}
