/* wallet-v2.css — Frenzy96 player Wallet, Stake-style dark. 2026-06-02. Vanilla, takes over #modal-wallet. */
#modal-wallet .wv {
  --w-bg:#07080d; --w-surface:#0b0c14; --w-surface2:#0e0f18; --w-border:#12131e; --w-border2:#1a1c2a;
  --w-text:#fff; --w-text2:#c0c0d0; --w-text3:#808090; --w-text4:#505070; --w-muted:#404060; --w-dim:#252840;
  --w-gold:#e8a124; --w-green:#1ed571; --w-green-dep:#0f7a40; --w-blue:#4a8ee8; --w-purple:#9070e8;
  background:var(--w-bg); border-radius:22px 22px 0 0; overflow-y:auto; -webkit-overflow-scrolling:touch;
  max-height:90vh; width:100%; color:var(--w-text); box-sizing:border-box;
  display:flex; flex-direction:column;
}
#modal-wallet.show .wv { animation:wvUp .3s ease-out; }
@keyframes wvUp { from{ transform:translateY(100%);} to{ transform:translateY(0);} }
.wv * { box-sizing:border-box; }
.wv-grip { width:32px; height:3px; border-radius:2px; background:#1a1c24; margin:8px auto 0; flex-shrink:0; }

/* top bar */
.wv-top { display:flex; align-items:center; justify-content:space-between; padding:14px 16px 12px; flex-shrink:0; }
.wv-title { font-size:15px; font-weight:800; color:var(--w-text); letter-spacing:-.3px; }
.wv-x { width:28px; height:28px; border-radius:50%; background:var(--w-surface2); border:1px solid var(--w-border2); display:flex; align-items:center; justify-content:center; color:#505070; cursor:pointer; flex-shrink:0; }
.wv-x svg { width:13px; height:13px; }

/* balance */
.wv-bal { padding:0 16px 14px; border-bottom:1px solid #0e0f18; }
.wv-bal-top { display:flex; justify-content:space-between; align-items:flex-end; }
.wv-bal-lbl { font-size:9px; color:var(--w-muted); font-weight:600; letter-spacing:.8px; text-transform:uppercase; margin-bottom:3px; }
.wv-bal-num { font-size:34px; font-weight:900; color:var(--w-text); letter-spacing:-2px; line-height:1; font-variant-numeric:tabular-nums; }
.wv-bal-sub { font-size:11px; color:var(--w-muted); margin-top:2px; }
.wv-refresh { width:30px; height:30px; border-radius:8px; background:var(--w-surface2); border:1px solid var(--w-border2); color:var(--w-muted); display:flex; align-items:center; justify-content:center; cursor:pointer; flex-shrink:0; }
.wv-refresh svg { width:14px; height:14px; }
.wv-refresh.spin svg { animation:wvSpin .5s linear; }
.wv-refresh.err { border-color:#e84040; color:#e84040; }
@keyframes wvSpin { to{ transform:rotate(360deg);} }

.wv-subs { display:flex; gap:6px; margin-top:10px; }
.wv-sub { flex:1; background:#0b0c14; border:1px solid #14152a; border-radius:10px; padding:8px 10px; display:flex; align-items:center; gap:6px; min-width:0; }
.wv-sub.click { cursor:pointer; }
.wv-dot { width:6px; height:6px; border-radius:50%; flex-shrink:0; }
.wv-sub-info { display:flex; flex-direction:column; min-width:0; }
.wv-sub-lbl { font-size:8px; color:var(--w-muted); text-transform:uppercase; letter-spacing:.5px; margin-bottom:1px; }
.wv-sub-val { font-size:11px; font-weight:700; font-variant-numeric:tabular-nums; white-space:nowrap; }

/* actions */
.wv-actions { display:flex; gap:6px; padding:12px 16px; }
.wv-act { flex:1; height:42px; border-radius:12px; font-size:12px; font-weight:800; cursor:pointer; display:flex; align-items:center; justify-content:center; gap:6px; border:none; }
.wv-act svg { width:14px; height:14px; }
.wv-act.dep { background:linear-gradient(135deg,#0f7a40,#1ed571); color:#fff; box-shadow:0 6px 20px rgba(30,213,113,.25); }
.wv-act.wd { background:var(--w-surface2); border:1px solid var(--w-border2); color:#808090; font-weight:700; }

/* quick icons */
.wv-quick { display:flex; padding:0 16px 12px; gap:5px; }
.wv-qi { flex:1; background:#0b0c14; border:1px solid var(--w-border); border-radius:10px; padding:9px 4px; display:flex; flex-direction:column; align-items:center; gap:4px; cursor:pointer; }
.wv-qi-ico { font-size:16px; line-height:1; }
.wv-qi-lbl { font-size:7px; font-weight:700; text-transform:uppercase; letter-spacing:.3px; color:var(--w-text3); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:100%; text-align:center; }

/* tickets */
.wv-tix { padding:0 16px 4px; }
.wv-tix-h { display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
.wv-tix-h-l { font-size:9px; font-weight:700; letter-spacing:.8px; text-transform:uppercase; color:var(--w-dim); }
.wv-tix-h-r { font-size:9px; color:var(--w-gold); cursor:pointer; }
.wv-trow { display:flex; align-items:center; gap:10px; background:#0b0c14; border:1px solid var(--w-border); border-radius:11px; padding:10px 12px; cursor:pointer; margin-bottom:4px; transition:border-color .15s; }
.wv-trow:hover { border-color:var(--w-dim); }
.wv-trow.empty { opacity:.3; cursor:default; }
.wv-tico { width:32px; height:32px; border-radius:9px; flex-shrink:0; display:flex; align-items:center; justify-content:center; font-size:17px; }
.wv-tmid { flex:1; min-width:0; }
.wv-tname { font-size:12px; font-weight:600; color:var(--w-text2); }
.wv-tsub { font-size:10px; color:var(--w-muted); margin-top:1px; }
.wv-tqty { font-size:13px; font-weight:800; font-variant-numeric:tabular-nums; }
.wv-tarrow { font-size:11px; color:var(--w-dim); }

/* in-game */
.wv-ig { margin:10px 16px 0; background:linear-gradient(135deg,#050c1a,#071428); border:1px solid #0d1e30; border-radius:12px; padding:12px 14px; display:flex; align-items:center; gap:10px; }
.wv-ig-ico { width:36px; height:36px; border-radius:10px; background:#0a1828; border:1px solid #0d2040; display:flex; align-items:center; justify-content:center; font-size:18px; flex-shrink:0; }
.wv-ig-mid { flex:1; min-width:0; }
.wv-ig-lbl { font-size:8px; color:#2a6099; font-weight:700; letter-spacing:.7px; text-transform:uppercase; }
.wv-ig-val { font-size:13px; font-weight:700; color:#c0d0e0; margin-top:2px; font-variant-numeric:tabular-nums; }
.wv-ig-hint { font-size:8px; color:#1a3050; margin-top:1px; }
.wv-ig-btn { background:#0d2040; border:1px solid #1a3a60; border-radius:8px; padding:7px 12px; font-size:9px; font-weight:700; color:var(--w-blue); cursor:pointer; flex-shrink:0; }
.wv-ig-btn:disabled { opacity:.45; cursor:not-allowed; }

/* tip */
.wv-tip { padding:10px 16px 20px; background:#0b0c14; border-top:1px solid #0e0f18; margin-top:12px; flex-shrink:0; }
.wv-tip-t { font-size:9px; color:#303040; line-height:1.5; }

/* skeleton */
.wv-sk { display:inline-block; border-radius:6px; background:linear-gradient(90deg,#0e0f18 25%,#16182400 37%,#0e0f18 63%); background-size:400% 100%; animation:wvSh 1.2s infinite; vertical-align:middle; }
@keyframes wvSh { 0%{background-position:100% 0;} 100%{background-position:0 0;} }

/* fix(2026-06-03): wallet 是底部 sheet(圆上角+wvUp 滑入),但 base .modal-backdrop 居中它,
   异步余额加载内容变高→重新居中→可见跳两次。锚定底部:从固定底边向上长,无重定位跳动。 */
#modal-wallet { align-items: flex-end !important; justify-content: center !important; padding: 0 !important; }
#modal-wallet .wv { max-height: 92vh; }

/* fix(2026-06-03 #2 真根因): wvUp 滑入动画原挂在 .wv 上,但 loadData 后 render() 重建 .wv innerHTML
   →新 .wv 命中 .show .wv 动画→滑入重播=第二跳。改挂到持久的 .modal(render 只换其 innerHTML 不重建它),
   动画只开屏播一次;取消 .wv 上的动画防重播。 */
#modal-wallet.show .modal { animation: wvUp .3s ease-out; }
#modal-wallet.show .wv { animation: none !important; }
