/* ===== 欢迎页 v2：浅色、温暖、留白 ===== */
html.w-open{overflow:hidden}
.welcome{position:fixed;inset:0;z-index:100;overflow-y:auto;overflow-x:hidden;color:#24313f;background:#f7f1e6;transition:opacity .7s ease,transform .7s ease}
.welcome.leaving{opacity:0;transform:scale(1.02);pointer-events:none}
.welcome[hidden]{display:none}
.w-bg{position:fixed;inset:0;background:url(welcome-fieldv1.0.jpg) center right/cover no-repeat;animation:wZoom 24s ease-out both}
.w-bg::after{content:"";position:absolute;inset:0;background:
  linear-gradient(90deg,rgba(252,248,240,.96) 0%,rgba(252,248,240,.9) 32%,rgba(252,248,240,.55) 52%,rgba(252,248,240,0) 72%),
  linear-gradient(180deg,rgba(255,250,240,.35),rgba(255,250,240,0) 30%,rgba(255,250,240,0) 80%,rgba(255,248,236,.5))}
.w-top{position:relative;display:flex;justify-content:space-between;align-items:center;padding:22px 5vw}
.w-brand{display:flex;align-items:center;gap:10px;font-weight:700;color:#24313f;letter-spacing:.04em}
.w-brand svg{width:30px;height:30px;color:#c8692c}
.w-music{display:inline-flex;align-items:center;gap:8px;background:rgba(255,255,255,.7);backdrop-filter:blur(8px);border:1px solid rgba(36,49,63,.12);color:#3c4a59;border-radius:999px;padding:8px 16px;font:inherit;font-size:.86rem;cursor:pointer;transition:.2s}
.w-music:hover{background:#fff}.w-music[aria-pressed=true]{color:#c8692c;border-color:rgba(200,105,44,.45)}
.w-inner{position:relative;min-height:calc(100vh - 80px);display:flex;align-items:center;padding:0 5vw 9vh}
.w-left{max-width:520px}
.w-eyebrow{font-size:.74rem;letter-spacing:.22em;color:#c8692c;font-weight:700;margin:0 0 22px}
.w-id{display:flex;align-items:center;gap:16px;margin-bottom:14px}
.w-mono{flex:none;width:58px;height:58px;border-radius:50%;display:grid;place-items:center;font-size:1.5rem;font-weight:700;color:#fff;background:linear-gradient(140deg,#e08a4b,#c8692c);box-shadow:0 8px 22px rgba(200,105,44,.28),0 0 0 4px rgba(255,255,255,.8)}
.welcome h1{font-size:clamp(1.9rem,3vw,2.5rem);line-height:1.15;margin:0;color:#1f2b38;letter-spacing:.06em;font-weight:700}
.w-en{margin:2px 0 0;color:#7a8794;font-size:.92rem;letter-spacing:.06em}
.w-role{margin:0 0 18px;color:#5b6876;font-size:.95rem}
.w-intro{font-size:1.12rem;line-height:1.85;color:#33414f;margin:0 0 22px}
.w-intro b{color:#2f6f5e;font-weight:700;background:linear-gradient(transparent 62%,rgba(242,193,78,.35) 62%)}
.w-chips{list-style:none;padding:0;margin:0 0 16px;display:flex;flex-wrap:wrap;gap:8px}
.w-chips li{display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.75);border:1px solid rgba(36,49,63,.08);border-radius:999px;padding:6px 14px 6px 10px;font-size:.86rem;color:#3c4a59;box-shadow:0 2px 8px rgba(36,49,63,.04)}
.w-chips i{width:8px;height:8px;border-radius:50%}
.w-chips .c1{background:#c8692c}.w-chips .c2{background:#d9534f}.w-chips .c3{background:#2f8f9d}
.w-aud{margin:0 0 30px;color:#7a8794;font-size:.86rem}
.w-cta{display:flex;align-items:center;gap:22px;flex-wrap:wrap}
.w-enter{font:inherit;font-weight:700;font-size:1rem;color:#fff;background:#2f6f5e;border:0;border-radius:999px;padding:13px 28px;cursor:pointer;box-shadow:0 10px 24px rgba(47,111,94,.25);transition:.25s}
.w-enter span{display:inline-block;transition:transform .25s}
.w-enter:hover{background:#285f51;transform:translateY(-1px)}.w-enter:hover span{transform:translateX(4px)}
.w-link{color:#5b6876;font-size:.9rem;text-decoration:none;border-bottom:1px solid rgba(91,104,118,.3)}
.w-play{position:absolute;right:5vw;bottom:6vh;width:250px;background:rgba(255,255,255,.72);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.8);border-radius:18px;padding:14px 16px 12px;box-shadow:0 14px 40px rgba(36,49,63,.12)}
.w-play p{margin:0 0 4px;font-size:.72rem;letter-spacing:.14em;color:#7a8794}
.w-play svg{width:100%;height:auto;overflow:visible}
.w-play .w-route{fill:none;stroke:#2f8f9d;stroke-width:2.5;stroke-linecap:round;stroke-dasharray:6 6;animation:wDash 2.4s linear infinite}
.w-play circle{fill:#fff;stroke:#c8692c;stroke-width:2.5}
.w-play ol{list-style:none;display:flex;justify-content:space-between;padding:0;margin:2px 0 0;font-size:.82rem;color:#3c4a59;font-weight:600}
@keyframes wDash{to{stroke-dashoffset:-24}}
@keyframes wZoom{from{transform:scale(1.06)}to{transform:scale(1)}}
.welcome .w-left>*{animation:wIn .9s both}
.welcome .w-left>*:nth-child(2){animation-delay:.1s}.welcome .w-left>*:nth-child(3){animation-delay:.2s}.welcome .w-left>*:nth-child(4){animation-delay:.3s}.welcome .w-left>*:nth-child(5){animation-delay:.4s}.welcome .w-left>*:nth-child(6){animation-delay:.5s}.welcome .w-left>*:nth-child(7){animation-delay:.6s}
.w-play{animation:wIn 1s .8s both}
@keyframes wIn{from{opacity:0;transform:translateY(14px)}}
@media (max-width:820px){
  .w-bg{background-position:72% center}
  .w-bg::after{background:linear-gradient(180deg,rgba(252,248,240,.94) 0%,rgba(252,248,240,.88) 60%,rgba(252,248,240,.45) 100%)}
  .w-inner{align-items:flex-start;padding-top:4vh;padding-bottom:200px}
  .w-play{left:5vw;right:5vw;width:auto;bottom:24px}
}

/* ===== 音乐 ===== */
.eq{display:inline-flex;align-items:flex-end;gap:2px;height:14px}
.eq i{width:3px;height:4px;background:currentColor;border-radius:1px}
[aria-pressed=true] .eq i{animation:eq .9s infinite ease-in-out}
[aria-pressed=true] .eq i:nth-child(2){animation-delay:.2s}[aria-pressed=true] .eq i:nth-child(3){animation-delay:.4s}
@keyframes eq{0%,100%{height:4px}50%{height:14px}}
.music-ctl{position:fixed;right:20px;bottom:20px;z-index:110;display:flex;align-items:center;gap:10px;padding:6px 14px 6px 6px;border-radius:999px;background:rgba(255,255,255,.92);backdrop-filter:blur(10px);border:1px solid rgba(36,49,63,.12);box-shadow:0 10px 30px rgba(36,49,63,.15)}
.music-fab{display:flex;align-items:center;gap:8px;padding:8px 14px;border-radius:999px;border:0;background:#2f6f5e;color:#fff;font:inherit;font-size:.86rem;cursor:pointer}
.music-fab[aria-pressed=true]{background:#c8692c}
.music-vol{width:84px;accent-color:#c8692c;cursor:pointer}
html.w-open .music-ctl{top:16px;bottom:auto;right:calc(5vw + 210px);padding:4px 10px 4px 4px;box-shadow:none;background:rgba(255,255,255,.6)}
html.w-open .music-ctl .music-fab{display:none}
.w-credit{position:absolute;left:5vw;bottom:14px;margin:0;font-size:.7rem;color:#9aa5b0}
@media (max-width:820px){html.w-open .music-ctl{display:none}.w-credit{bottom:4px}}

/* ===== 新战术板 ===== */
.hero-board svg{box-shadow:0 30px 70px rgba(7,18,36,.35),0 0 0 1px rgba(34,211,238,.25)}
.hero-board .halo{fill:none;stroke:#22d3ee;stroke-width:9;opacity:.12;stroke-linecap:round}
.hero-board .flow{fill:none;stroke:url(#rtG);stroke-width:3.2;stroke-linecap:round;stroke-dasharray:10 8;filter:url(#neon);animation:flow 1.2s linear infinite}
.hero-board .flow.d2{animation-duration:1.5s}.hero-board .flow.d3{animation-duration:1.8s}
@keyframes flow{to{stroke-dashoffset:-36}}
.hero-board .dot{fill:#fff;filter:url(#neon)}
.hero-board .tgt circle{fill:#a78bfa;filter:url(#neon);animation:tg 2s infinite}
@keyframes tg{50%{opacity:.4}}
.hero-board .bus{fill:none;stroke:#22d3ee;stroke-width:1.2;stroke-dasharray:3 5;opacity:.55;animation:flow 2.4s linear infinite}
.hero-board .chip-t{fill:#a5f3fc;font-size:12px;font-weight:800;letter-spacing:.18em}
.hero-board .los{animation:flow 3s linear infinite}
.hero-board .los-t{fill:#fbbf24;font-size:10px;letter-spacing:.14em;opacity:.9}
.hero-board .ply circle{fill:#0b1a2e;stroke:#f59e0b;stroke-width:3;filter:url(#neon)}
.hero-board .ply .ring{fill:none;stroke:#f59e0b;stroke-width:1.5;opacity:.6;transform-box:fill-box;transform-origin:center;animation:ring 2.2s infinite}
.hero-board .ply .ring.r2{animation-delay:.5s}.hero-board .ply .ring.r3{animation-delay:1s}
@keyframes ring{0%{transform:scale(.7);opacity:.8}100%{transform:scale(1.7);opacity:0}}
.hero-board .ply text{fill:#fff;font-size:13px;font-weight:800;text-anchor:middle}
.hero-board .tag rect{fill:rgba(245,158,11,.14);stroke:rgba(245,158,11,.6)}
.hero-board .tag text{fill:#fde68a;font-size:11px;font-weight:700;text-anchor:middle}
.hero-board .status circle{fill:#4ade80;animation:tg 1.2s infinite}.hero-board .status text{fill:#86efac;font-size:10px;letter-spacing:.16em}
.hero-board .cap{font-size:17px;font-weight:800;letter-spacing:.2em;fill:url(#capG)}
.hero-board .board-label{fill:#8fb3d9}
@media (prefers-reduced-motion:reduce){.welcome *,.w-bg,.hero-board *{animation:none!important}.w-ecg path,.w-ecg-strip path{stroke-dashoffset:0}}
