/* 第 30 章 · 城市系统（专属场景） */
.c30-stage{position:relative;height:300px;border-radius:18px;border:1px solid rgba(99,102,241,.22);background:radial-gradient(ellipse at 50% 45%,rgba(99,102,241,.1),transparent 68%),linear-gradient(180deg,#080B1A,#04050C);overflow:hidden}
.c30-grid{position:absolute;inset:12px;border-radius:8px;background:repeating-linear-gradient(0deg,transparent 0 49px,rgba(129,140,248,.08) 49px 51px),repeating-linear-gradient(90deg,transparent 0 69px,rgba(129,140,248,.08) 69px 71px)}
.c30-road{position:absolute;background:rgba(129,140,248,.1);z-index:1}
.c30-road.h{left:8%;right:8%;top:48%;height:10px}.c30-road.v{top:10%;bottom:10%;left:49%;width:10px}
.c30-link{position:absolute;inset:0;z-index:2;pointer-events:none}
.c30-link path{fill:none;stroke:rgba(129,140,248,.35);stroke-width:2;stroke-dasharray:6 6}
.c30-link path.on{stroke:#818CF8;stroke-width:3;stroke-dasharray:none}
.c30-flow{position:absolute;inset:0;z-index:3;pointer-events:none;overflow:hidden}
.c30-flow i{position:absolute;width:6px;height:6px;border-radius:50%;background:#818CF8;box-shadow:0 0 9px #818CF8;animation:c30flow 2.6s linear infinite}
.c30-node{position:absolute;width:76px;height:52px;border-radius:9px;border:1px solid rgba(129,140,248,.4);background:rgba(8,11,26,.92);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;z-index:5;cursor:pointer;transition:.2s}
.c30-node b{font-size:9.5px;color:#C7D2FE}.c30-node span{font-size:7px;color:var(--faint)}
.c30-node:hover,.c30-node.on{border-color:#818CF8;background:rgba(99,102,241,.16);box-shadow:0 0 22px rgba(129,140,248,.28)}
.c30-node.new{border-color:#FBBF24;box-shadow:0 0 22px rgba(251,191,36,.3);animation:c30pop .5s ease}
.c30-label{position:absolute;left:14px;top:12px;font-size:8px;letter-spacing:.16em;color:rgba(165,180,252,.75);z-index:9}
.c30-tip{position:absolute;right:14px;top:12px;font-size:8px;color:var(--faint);border:1px solid var(--line);border-radius:6px;padding:4px 7px;background:rgba(4,5,12,.6);z-index:9}
.c30-context-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-top:8px}
.c30-context{padding:8px 10px;border-radius:9px;border:1px solid var(--line);background:rgba(255,255,255,.025);color:var(--dim);text-align:left;font-size:9.5px;line-height:1.5}
.c30-context b{display:block;color:var(--ink);font-size:10px;margin-bottom:2px}
.c30-context:hover,.c30-context.on{border-color:rgba(129,140,248,.55);background:rgba(129,140,248,.08)}
.c30-feats{display:grid;grid-template-columns:1fr 1fr;gap:5px}
.c30-feat{padding:6px 8px;border-radius:7px;border:1px solid var(--line);background:rgba(255,255,255,.03);color:var(--dim);font-size:8.5px;text-align:left}
.c30-feat:hover,.c30-feat.on{border-color:rgba(129,140,248,.55);background:rgba(129,140,248,.08);color:#C7D2FE}
.c30-actions{display:flex;gap:5px;flex-wrap:wrap;margin-top:6px}
.c30-act{padding:4px 8px;border-radius:6px;border:1px solid var(--line);background:rgba(255,255,255,.03);color:var(--dim);font-size:8.5px}
.c30-act:hover,.c30-act.on{border-color:rgba(129,140,248,.55);background:rgba(129,140,248,.08);color:#C7D2FE}
.c30-meters{display:flex;flex-direction:column;gap:5px;margin-top:6px}
.c30-meter{display:flex;align-items:center;gap:6px;font-size:8.5px;color:var(--faint)}
.c30-meter .bar{flex:1;height:6px;border-radius:99px;background:rgba(255,255,255,.1);overflow:hidden}
.c30-meter .bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,#818CF8,#4FE0D0);transition:.5s}
.c30-test{position:relative;height:280px;border-radius:15px;border:1px solid rgba(99,102,241,.2);background:linear-gradient(180deg,#080B1A,#04050C);overflow:hidden}
.c30-test .c30-stage{position:absolute;inset:8px;height:auto;border:0}
.c30-fixes{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-top:5px}
.c30-fix{padding:6px 8px;border-radius:7px;border:1px solid var(--line);background:rgba(255,255,255,.03);color:var(--dim);font-size:8.5px;text-align:left}
.c30-fix:hover,.c30-fix.on{border-color:rgba(79,224,208,.55);background:rgba(79,224,208,.08);color:var(--teal)}
.c30-bp-icon{width:160px;height:100px;margin:0 auto}
.c30-bp-icon svg{width:100%;height:100%}
@keyframes c30flow{0%{transform:translate(0,0);opacity:0}15%{opacity:1}100%{transform:translate(90px,70px);opacity:0}}
@keyframes c30pop{0%{transform:scale(.5);opacity:0}100%{transform:scale(1);opacity:1}}
@media(max-width:900px){.c30-stage,.c30-test{height:250px}.c30-context-grid,.c30-feats{grid-template-columns:1fr}.c30-node{width:64px;height:46px}}
@media(max-height:800px){.c30-stage{height:286px}}
