/* ── 系统更新 UI（2026-10-03）：登录页/系统页共用 ─────────────────────────
   确认弹窗 + 科技感全屏更新页 + 更新日志弹窗。
   全屏更新页刻意使用独立的深色科技风（扫描线/网格/辉光），与业务页主题无关。 */

/* ── 页内版本行（登录页卡片下方 / 系统页顶栏） ── */
.upd-line{margin-top:18px;text-align:center;position:relative;z-index:1}
.upd-line .upd-btn{position:relative;display:inline-flex;align-items:center;gap:6px;padding:7px 18px;border:1px solid var(--accent);
  background:transparent;color:var(--accent);border-radius:7px;font-size:.85rem;cursor:pointer;transition:all .25s}
.upd-line .upd-btn:hover{background:var(--accent);color:var(--text-strong)}
/* 高亮态：有新版本时按钮发光 + 呼吸动画 */
.upd-line .upd-btn.hl{background:var(--accent);color:var(--text-strong);border-color:var(--accent);
  box-shadow:0 0 10px var(--accent-glow, rgba(59,130,246,.55));animation:updPulse 1.6s infinite}
@keyframes updPulse{0%,100%{box-shadow:0 0 6px var(--accent-glow, rgba(59,130,246,.45))}50%{box-shadow:0 0 18px var(--accent-glow, rgba(59,130,246,.9))}}
.upd-line .upd-hint{display:inline-block;margin-left:8px;font-size:.78rem;color:var(--accent);vertical-align:middle}
.upd-line .upd-ver{display:block;margin-top:7px;font-size:.8rem;color:var(--text-dim);letter-spacing:.04em}
.upd-line .upd-log{display:inline-block;margin-left:10px;font-size:.78rem;color:var(--text-dim);
  background:none;border:none;cursor:pointer;text-decoration:underline;vertical-align:middle}
.upd-line .upd-log:hover{color:var(--text)}

/* ── 页头更新组件（2026-10-03b，nav.js 注入，首页及各业务页页头共用）──────────
   多版本多颜色主题适配：颜色全部走 CSS 变量（--accent/--danger/--text-dim…），
   各模板换色自动跟随。按钮上、版本小字在下：有新版时按钮高亮 + 感叹号角标呼吸，
   小字显示「当前版本 Vx · 最新版本 Vy」；无新版仅显示「当前版本 Vx」。 */
.upd-hdr{display:flex;flex-direction:column;align-items:stretch;margin:0 14px 0 2px}
.upd-hdr .upd-hbtn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:4px 12px;border:1px solid var(--accent);background:transparent;color:var(--accent);
  border-radius:7px;font-size:.78rem;cursor:pointer;transition:all .25s;white-space:nowrap}
.upd-hdr .upd-hbtn:hover{background:var(--accent);color:var(--text-strong)}
.upd-hdr .upd-hbtn.hl{background:var(--accent);color:var(--text-strong);
  box-shadow:0 0 10px var(--accent-glow, rgba(59,130,246,.55));animation:updPulse 1.6s infinite}
/* 高亮感叹号角标：有新版本时出现（危险色呼吸光，任何主题下都醒目） */
.upd-badge{position:absolute;top:-7px;right:-7px;min-width:17px;height:17px;padding:0 4px;border-radius:9px;
  background:var(--danger);color:#fff;font-size:.68rem;font-weight:700;line-height:17px;text-align:center;
  box-shadow:0 0 8px var(--danger-glow, rgba(255,59,92,.7));animation:updBadgePulse 1.4s infinite}
@keyframes updBadgePulse{0%,100%{box-shadow:0 0 4px var(--danger-glow, rgba(255,59,92,.5))}50%{box-shadow:0 0 14px var(--danger-glow, rgba(255,59,92,.95))}}
.upd-hdr .upd-ver{margin-top:3px;font-size:.68rem;color:var(--text-dim);letter-spacing:.02em;text-align:center;white-space:nowrap;line-height:1.3}
.upd-hdr .upd-ver b{color:var(--text)}
.upd-hdr .upd-ver b.latest{color:var(--accent)}
@media (max-width:900px){.upd-hdr .upd-ver{display:none}}

/* 🆕 版本预告播报条（2026-10-04f）：页头正下方独立一行，醒目琥珀横幅
   内容放得下=静态显示；放不下=无缝循环滚动（悬停暂停）；整条可点看完整说明 */
.upd-ticker{overflow:hidden;cursor:pointer;white-space:nowrap;
  background:linear-gradient(90deg,#92400e 0%,#d97706 45%,#f59e0b 100%);
  border-bottom:1px solid #fbbf24;box-shadow:0 2px 10px rgba(217,119,6,.35);
  color:#1a0e02;font-weight:700;font-size:.84rem;line-height:30px;letter-spacing:.02em}
.upd-ticker:hover .upd-ticker-track{animation-play-state:paused}
.upd-ticker-track{display:inline-flex;white-space:nowrap;will-change:transform}
.upd-ticker-item{display:inline-block;padding:0 48px 0 16px;text-shadow:0 1px 0 rgba(255,255,255,.25)}
@keyframes upd-ticker-scroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* ── 确认弹窗 / 更新日志弹窗（浅层遮罩） ── */
.upd-modal-ov{position:fixed;inset:0;background:rgba(3,7,18,.72);backdrop-filter:blur(4px);
  display:flex;align-items:center;justify-content:center;z-index:99990}
.upd-modal{background:var(--panel,#10131c);border:1px solid var(--border,#232a3a);border-radius:12px;
  padding:22px;width:420px;max-width:92vw;max-height:80vh;overflow:auto;box-shadow:0 12px 48px rgba(0,0,0,.55)}
.upd-modal h3{margin:0 0 12px;font-size:1.05rem;color:var(--text-strong);display:flex;align-items:center;gap:8px}
.upd-modal h3 .dot{width:8px;height:8px;border-radius:50%;background:#22d3ee;box-shadow:0 0 10px #22d3ee;animation:updPulse 1.6s infinite}
.upd-modal .m-sub{font-size:.82rem;color:var(--text-dim);margin-bottom:12px;line-height:1.6}
.upd-modal .m-notes{background:var(--panel2,#151a27);border:1px solid var(--border,#232a3a);border-radius:8px;
  padding:12px;font-size:.85rem;color:var(--text);line-height:1.7;white-space:pre-wrap;word-break:break-word;max-height:220px;overflow:auto;margin-bottom:14px}
.upd-modal .m-notes-link{display:block;margin:0 0 12px;font-size:.82rem;color:#22d3ee;cursor:pointer;background:none;border:none;padding:0;text-decoration:underline}
.upd-modal .m-actions{display:flex;gap:10px;justify-content:flex-end}
.upd-modal .m-actions button{padding:8px 18px;border-radius:7px;font-size:.85rem;cursor:pointer;border:1px solid var(--border,#232a3a);
  background:var(--panel2,#151a27);color:var(--text)}
.upd-modal .m-actions .go{background:linear-gradient(135deg,#0ea5e9,#6366f1);border:none;color:#fff;font-weight:600}
.upd-modal .m-actions .go:hover{filter:brightness(1.12)}
.upd-modal .m-hist{border-top:1px solid var(--border-soft,#1d2433);padding:9px 2px}
.upd-modal .m-hist .h-v{font-weight:600;color:var(--text-strong);font-size:.88rem}
.upd-modal .m-hist .h-v .me{font-size:.72rem;color:#22d3ee;margin-left:8px}
.upd-modal .m-hist .h-t{font-size:.72rem;color:var(--text-faint,#5a6478);margin:2px 0 5px}
.upd-modal .m-hist .h-n{font-size:.8rem;color:var(--text-dim);line-height:1.6;white-space:pre-wrap;word-break:break-word}
/* 🆕 更新日志弹窗「即将推出」预告区（2026-10-04）：琥珀渐变卡 */
.upd-modal .m-prev{margin:0 0 12px;padding:12px 14px;border-radius:9px;
  background:linear-gradient(135deg,rgba(251,191,36,.1),rgba(249,115,22,.06));
  border:1px solid rgba(251,191,36,.35)}
.upd-modal .m-prev-tag{display:inline-block;font-size:.66rem;letter-spacing:.12em;color:#0f1115;font-weight:700;
  background:linear-gradient(135deg,#fbbf24,#f59e0b);border-radius:4px;padding:2px 8px;margin-bottom:7px}
.upd-modal .m-prev-v{font-weight:600;color:var(--text-strong);font-size:.92rem}
.upd-modal .m-prev-n{font-size:.8rem;color:var(--text-dim);line-height:1.6;white-space:pre-wrap;word-break:break-word;margin-top:5px}
.upd-modal .m-prev-t{font-size:.72rem;color:#fbbf24;margin-top:7px}
/* 🆕 预告说明弹窗（2026-10-04f）：完整标题 + 说明全文 + 倒计时 */
.upd-modal .m-pv-dt{font-size:1.05rem;font-weight:700;margin:10px 0 6px;color:var(--text-strong)}
.upd-modal .m-pv-dn{font-size:.86rem;color:var(--text-dim);line-height:1.7;white-space:pre-wrap;word-break:break-word;max-height:240px;overflow-y:auto;background:var(--panel2);border:1px solid var(--border);border-radius:8px;padding:10px 12px}
.upd-modal .m-pv-t{font-size:.8rem;color:#fbbf24;margin-top:10px}
/* 🆕 已发布新版本超出账户上限（2026-10-04b）：弹窗锁定提示 */
.upd-modal .m-cap{margin:0 0 12px;padding:8px 12px;border-radius:8px;font-size:.78rem;color:#f87171;
  background:rgba(248,113,113,.08);border:1px solid rgba(248,113,113,.35);line-height:1.5}

/* ── 全屏更新页（2026-10-03b 重设计：玻璃卡片 + 时间轴步骤 + 终端控制台 + 完成自动返回） ── */
#upd-fullscreen{position:fixed;inset:0;z-index:99999;background:#04070f;color:#c9d6e8;
  font-family:'Segoe UI',system-ui,sans-serif;overflow:hidden;display:none}
#upd-fullscreen.on{display:block}
/* 深层背景：光晕呼吸 + 网格 + 星点闪烁 */
.upd-bg{position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(ellipse at 50% -20%, rgba(14,165,233,.22), transparent 55%),
    radial-gradient(ellipse at 85% 115%, rgba(99,102,241,.18), transparent 50%),
    linear-gradient(rgba(34,211,238,.04) 1px, transparent 1px),
    linear-gradient(90deg, rgba(34,211,238,.04) 1px, transparent 1px);
  background-size:100% 100%,100% 100%,42px 42px,42px 42px;
  animation:updBgPulse 8s ease-in-out infinite}
@keyframes updBgPulse{0%,100%{opacity:.8}50%{opacity:1}}
.upd-bg::after{content:'';position:absolute;inset:0;
  background:
    radial-gradient(2px 2px at 14% 18%, rgba(255,255,255,.35), transparent 100%),
    radial-gradient(1.6px 1.6px at 36% 74%, rgba(125,211,252,.5), transparent 100%),
    radial-gradient(2px 2px at 58% 30%, rgba(255,255,255,.28), transparent 100%),
    radial-gradient(1.4px 1.4px at 76% 62%, rgba(165,180,252,.45), transparent 100%),
    radial-gradient(2px 2px at 90% 14%, rgba(255,255,255,.32), transparent 100%),
    radial-gradient(1.6px 1.6px at 24% 88%, rgba(125,211,252,.4), transparent 100%),
    radial-gradient(1.8px 1.8px at 66% 92%, rgba(255,255,255,.3), transparent 100%);
  animation:updTwinkle 3.4s ease-in-out infinite alternate}
@keyframes updTwinkle{0%{opacity:.4}100%{opacity:1}}
.upd-scan{position:absolute;left:0;right:0;height:120px;pointer-events:none;
  background:linear-gradient(180deg, transparent, rgba(34,211,238,.06), transparent);
  animation:updScan 4s linear infinite}
@keyframes updScan{0%{top:-140px}100%{top:110%}}
.upd-wrap{position:relative;max-width:760px;margin:0 auto;padding:5vh 20px 40px;height:100%;
  box-sizing:border-box;overflow-y:auto}
/* 玻璃卡片：毛玻璃 + 顶缘辉光描边 */
.upd-card{position:relative;background:rgba(10,16,32,.72);border:1px solid rgba(34,211,238,.18);
  border-radius:16px;padding:24px 28px 20px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  box-shadow:0 20px 70px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.06);
  transition:filter .5s, opacity .5s}
.upd-card::before{content:'';position:absolute;top:0;left:8%;right:8%;height:1px;
  background:linear-gradient(90deg,transparent,rgba(34,211,238,.65),rgba(129,140,248,.65),transparent)}
#upd-fullscreen.done .upd-card{filter:blur(5px) brightness(.55)}
.upd-head{display:flex;align-items:center;gap:14px}
.upd-head .cube{width:40px;height:40px;flex-shrink:0;border:2px solid #22d3ee;border-radius:9px;position:relative;
  box-shadow:0 0 16px rgba(34,211,238,.5), inset 0 0 12px rgba(34,211,238,.18);
  animation:updCube 2.6s ease-in-out infinite}
.upd-head .cube::after{content:'';position:absolute;inset:6px;border:1px solid rgba(34,211,238,.6);border-radius:4px}
@keyframes updCube{0%,100%{transform:rotate(0)}25%{transform:rotate(90deg)}50%{transform:rotate(180deg)}75%{transform:rotate(270deg)}}
.upd-head-t h2{margin:0;font-size:1.3rem;font-weight:600;color:#e6f1ff;letter-spacing:.06em}
.upd-head-t .upd-site{color:#22d3ee;font-weight:700}
.upd-head-t .upd-subt{margin-top:4px;font-size:.68rem;color:#4a5874;letter-spacing:.32em;font-family:Consolas,monospace}
.upd-head .upd-tag{margin-left:auto;font-size:.74rem;color:#0a0f1c;background:linear-gradient(90deg,#22d3ee,#818cf8);
  padding:4px 12px;border-radius:20px;font-weight:700;letter-spacing:.1em;box-shadow:0 0 14px rgba(34,211,238,.45)}
.upd-big{text-align:center;margin:30px 0 14px}
.upd-big .pct{font-size:4.6rem;font-weight:200;line-height:1;color:#e6f1ff;font-variant-numeric:tabular-nums;
  text-shadow:0 0 30px rgba(34,211,238,.55)}
.upd-big .pct small{font-size:1.8rem;color:#7dd3fc;margin-left:2px}
.upd-big .phase{margin-top:10px;font-size:.98rem;color:#7dd3fc;letter-spacing:.34em;font-family:Consolas,monospace;
  text-shadow:0 0 12px rgba(125,211,252,.4)}
.upd-bar{height:9px;border-radius:5px;background:rgba(34,211,238,.1);overflow:hidden;position:relative;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.5)}
.upd-bar i{display:block;height:100%;width:0;border-radius:5px;
  background:linear-gradient(90deg,#0ea5e9,#22d3ee,#818cf8);background-size:200% 100%;
  box-shadow:0 0 14px rgba(34,211,238,.7);transition:width .4s linear;animation:updBarFlow 2s linear infinite}
@keyframes updBarFlow{0%{background-position:0 0}100%{background-position:200% 0}}
.upd-bar::after{content:'';position:absolute;top:0;left:-30%;width:30%;height:100%;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent);animation:updShine 1.8s linear infinite}
@keyframes updShine{0%{left:-30%}100%{left:100%}}
/* 步骤：圆点时间轴，连接线随完成态渐绿 */
.upd-steps{display:flex;margin:26px 0 22px}
.upd-step{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;gap:8px;min-width:0}
.upd-step::before{content:'';position:absolute;top:15px;left:-50%;width:100%;height:2px;
  background:rgba(34,211,238,.15);transition:background .4s}
.upd-step:first-child::before{display:none}
.upd-step.done::before{background:linear-gradient(90deg,rgba(52,211,153,.65),rgba(34,211,238,.35))}
.upd-step .s-dot{width:30px;height:30px;border-radius:50%;border:2px solid #2c3a55;background:#0a1020;
  display:flex;align-items:center;justify-content:center;font-size:.8rem;color:#34d399;z-index:1;
  transition:all .35s}
.upd-step .s-tx{font-size:.72rem;color:#4a5874;letter-spacing:.05em;text-align:center;transition:color .35s}
.upd-step.active .s-dot{border-color:#22d3ee;animation:updDotPulse 1.2s ease-in-out infinite}
.upd-step.active .s-dot::after{content:'';width:10px;height:10px;border-radius:50%;background:#22d3ee;
  box-shadow:0 0 8px #22d3ee}
.upd-step.active .s-tx{color:#e6f1ff;text-shadow:0 0 10px rgba(34,211,238,.5)}
.upd-step.done .s-dot{border-color:#34d399;background:rgba(52,211,153,.15);box-shadow:0 0 10px rgba(52,211,153,.4)}
.upd-step.done .s-tx{color:#9fb6d4}
@keyframes updDotPulse{0%,100%{box-shadow:0 0 8px rgba(34,211,238,.45)}50%{box-shadow:0 0 20px rgba(34,211,238,.9)}}
.upd-meta{display:flex;gap:10px;flex-wrap:wrap;font-family:Consolas,monospace;font-size:.74rem;color:#5a6a86;margin-bottom:18px}
.upd-meta span{padding:5px 12px;border:1px solid rgba(34,211,238,.16);border-radius:20px;background:rgba(9,14,28,.6)}
.upd-meta b{color:#7dd3fc;font-weight:400}
/* 终端控制台：窗口标题栏（红黄绿灯点）+ LIVE 呼吸指示 */
.upd-console{background:rgba(4,8,16,.85);border:1px solid rgba(34,211,238,.22);border-radius:10px;overflow:hidden;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}
.upd-console .c-bar{display:flex;align-items:center;gap:12px;padding:8px 14px;
  background:rgba(13,20,38,.9);border-bottom:1px solid rgba(34,211,238,.14)}
.c-bar .c-dots{display:flex;gap:6px}
.c-bar .c-dots i{width:10px;height:10px;border-radius:50%}
.c-bar .c-dots i:nth-child(1){background:#ff5f57}.c-bar .c-dots i:nth-child(2){background:#febc2e}.c-bar .c-dots i:nth-child(3){background:#28c840}
.c-bar .c-title{font-family:Consolas,monospace;font-size:.68rem;color:#5a6a86;letter-spacing:.26em;margin:0 auto}
.c-bar .c-live{font-family:Consolas,monospace;font-size:.66rem;color:#34d399;letter-spacing:.18em;
  display:flex;align-items:center;gap:5px}
.c-bar .c-live i{width:7px;height:7px;border-radius:50%;background:#34d399;box-shadow:0 0 8px #34d399;
  animation:updBlink 1.1s steps(1) infinite}
.upd-logbox{height:172px;overflow-y:auto;padding:12px 14px}
.upd-logbox .l{font-family:Consolas,monospace;font-size:.78rem;line-height:1.75;color:#8fa3c0;white-space:pre-wrap;word-break:break-all}
.upd-logbox .l b{color:#22d3ee;font-weight:400}
.upd-logbox .l.ok{color:#34d399}
.upd-cursor{display:inline-block;width:8px;height:14px;background:#22d3ee;vertical-align:-2px;margin-left:2px;animation:updBlink 1s steps(1) infinite}
@keyframes updBlink{50%{opacity:0}}
.upd-restart{text-align:center;margin-top:16px;font-size:.9rem;color:#fbbf24;font-family:Consolas,monospace;letter-spacing:.08em}
.upd-restart b{font-size:1.4rem;color:#fcd34d;font-variant-numeric:tabular-nums}
.upd-net{text-align:center;margin-top:14px;font-size:.82rem;color:#fbbf24;
  font-family:Consolas,monospace;letter-spacing:.05em;animation:updBlink 1.4s ease-in-out infinite}
/* 完成/失败：全屏居中结果层（玻璃盒入场动画） */
.upd-done,.upd-fail{position:absolute;inset:0;z-index:10;display:none;align-items:center;justify-content:center;
  padding:20px;text-align:center;box-sizing:border-box}
.ud-box,.uf-box{background:rgba(8,13,26,.88);border:1px solid rgba(52,211,153,.35);border-radius:16px;
  padding:36px 48px;max-width:440px;width:100%;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  box-shadow:0 24px 80px rgba(0,0,0,.6);animation:udBoxIn .45s cubic-bezier(.2,1.4,.4,1)}
.uf-box{border-color:rgba(248,113,113,.4)}
@keyframes udBoxIn{0%{transform:scale(.85) translateY(14px);opacity:0}100%{transform:scale(1) translateY(0);opacity:1}}
.upd-done .big-check{width:78px;height:78px;margin:0 auto 18px;border-radius:50%;
  border:2px solid #34d399;color:#34d399;display:flex;align-items:center;justify-content:center;
  font-size:2.1rem;box-shadow:0 0 30px rgba(52,211,153,.55), inset 0 0 18px rgba(52,211,153,.15);
  animation:updPop .5s cubic-bezier(.2,1.6,.4,1)}
@keyframes updPop{0%{transform:scale(.3);opacity:0}100%{transform:scale(1);opacity:1}}
.upd-done h3{margin:0 0 10px;color:#e6f1ff;font-size:1.3rem;letter-spacing:.1em}
.upd-done .sub{color:#8fa3c0;font-size:.86rem;margin-bottom:14px;line-height:1.7}
.upd-done .sub b{color:#34d399}
.upd-done .auto-tip{margin-bottom:20px;font-family:Consolas,monospace;font-size:.8rem;color:#7dd3fc;letter-spacing:.1em}
.upd-done .back{padding:11px 34px;border:none;border-radius:8px;cursor:pointer;font-size:.9rem;
  background:linear-gradient(135deg,#0ea5e9,#6366f1);color:#fff;font-weight:600;box-shadow:0 6px 20px rgba(14,165,233,.4)}
.upd-done .back:hover{filter:brightness(1.12)}
.upd-fail .x{width:78px;height:78px;margin:0 auto 18px;border-radius:50%;border:2px solid #f87171;color:#f87171;
  display:flex;align-items:center;justify-content:center;font-size:2.1rem;
  box-shadow:0 0 26px rgba(248,113,113,.4);animation:updPop .5s cubic-bezier(.2,1.6,.4,1)}
.upd-fail h3{margin:0 0 10px;color:#e6f1ff;font-size:1.3rem;letter-spacing:.1em}
.upd-fail .sub{color:#8fa3c0;font-size:.86rem;margin-bottom:22px;line-height:1.7}
.upd-fail .retry{padding:10px 30px;border:1px solid #f87171;background:none;color:#f87171;border-radius:8px;cursor:pointer;font-size:.9rem}
.upd-fail .retry:hover{background:rgba(248,113,113,.12)}
@media (max-width:520px){
  .upd-big .pct{font-size:3rem}
  .upd-logbox{height:130px}
  .upd-step .s-tx{font-size:.62rem}
  .upd-card{padding:18px 16px 16px}
  .ud-box,.uf-box{padding:28px 22px}
}
