/* ═══════════════════════════════════════════════════════════════════════════
   秋泽吉数 · v3「签文工作台」全站样式（2026-10-14）
   ───────────────────────────────────────────────────────────────────────────
   方向：票据编辑风（editorial-ticket）——hairline 分隔、12px 面板、直角控件、
   大号 tnum 数字、左侧竖线标题、非对称双栏。与 v1（软胶囊卡片流）/
   v2（顶栏 + Bento）明显不同。
   铁律：颜色/间距/圆角全部取 shared/design-tokens.css 令牌（单一主题：宣纸浅色
   + 靛蓝）；不引外部字体/CDN；动效只动 transform/opacity；reduced-motion 降级。
   结构契约：业务 JS 绑定的元素 id / 类名原样保留，本文件只负责视觉。
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── 0. 基础 ─────────────────────────────────────────────────────────── */
*, *::before, *::after{ box-sizing:border-box; }
[hidden]{ display:none; }
html{ -webkit-text-size-adjust:100%; scroll-behavior:smooth; }
body{
  margin:0; min-height:100dvh;
  background:var(--bg); color:var(--ink);
  font-family:-apple-system,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,sans-serif;
  font-size:14px; line-height:1.65;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4{ margin:0; font-weight:var(--fw-bold,700); letter-spacing:-.01em; color:var(--ink-strong); }
p{ margin:0 0 var(--sp-2); }
a{ color:var(--brand-ink); text-decoration:none; }
button{ font-family:inherit; }
img{ max-width:100%; }
:focus-visible{ outline:var(--focus-ring,2px solid var(--brand)); outline-offset:2px; border-radius:var(--r-sm); }
::selection{ background:var(--brand-soft); }

/* 宣纸颗粒：固定层，不参与滚动/交互（taste-skill：noise 只放固定层） */
.nx-grain{
  position:fixed; inset:0; z-index:0; pointer-events:none;
  background:
    repeating-linear-gradient(0deg, color-mix(in srgb, var(--ink) 2.5%, transparent) 0 1px, transparent 1px 3px),
    repeating-linear-gradient(90deg, color-mix(in srgb, var(--ink) 2%, transparent) 0 1px, transparent 1px 4px);
  opacity:.35; mix-blend-mode:multiply;
}

/* 星尘（core.js 注入 .star）*/
.stars{ position:fixed; inset:0; z-index:0; pointer-events:none; overflow:hidden; }
.star{ position:absolute; border-radius:var(--r-full); background:var(--brand-soft); animation:nxFloat 6s ease-in-out infinite; }
@keyframes nxFloat{ 0%,100%{ transform:translateY(0); opacity:.5; } 50%{ transform:translateY(-8px); opacity:1; } }

/* ── 1. 应用壳：桌面左栏工作台 ───────────────────────────────────────── */
.nx-shell{ position:relative; z-index:1; display:flex; min-height:100dvh; }
.nx-side{
  position:sticky; top:0; align-self:flex-start;
  width:236px; flex:none; height:100dvh; overflow-y:auto;
  display:flex; flex-direction:column; gap:var(--sp-4);
  padding:var(--sp-5) var(--sp-4);
  background:var(--surface-2);
  border-right:1px solid var(--line-soft);
}
.nx-brand{ display:flex; align-items:center; gap:var(--sp-3); padding:var(--sp-1) var(--sp-1) var(--sp-3); border-bottom:1px solid var(--line-soft); }
.nx-brand-logo{ width:44px; height:44px; border-radius:var(--r-md); }
.nx-brand-txt b{ display:block; font-size:16px; letter-spacing:.02em; color:var(--ink-strong); }
.nx-brand-txt small{ color:var(--dim); font-size:11px; }
.nx-side-sec{ display:flex; flex-direction:column; gap:var(--sp-2); }
.nx-side-label{
  font-size:10px; font-weight:800; letter-spacing:.18em; color:var(--dim);
  text-transform:uppercase; padding:0 var(--sp-2);
}
.nx-side-note p{ font-size:11px; color:var(--dim); line-height:1.7; margin:0; padding:0 var(--sp-2); }
.nx-side-foot{ margin-top:auto; padding-top:var(--sp-3); border-top:1px solid var(--line-soft); display:flex; align-items:center; gap:var(--sp-2); flex-wrap:wrap; }
.nx-staff{ flex:1; min-width:0; }

/* 主导航：桌面＝侧栏竖列（同一元素移动端变底部 Dock）*/
.tabs{ display:flex; flex-direction:column; gap:var(--sp-1); }
.tab{
  appearance:none; border:1px solid transparent; background:none;
  display:flex; align-items:center; gap:var(--sp-3);
  min-height:44px; padding:var(--sp-2) var(--sp-3);
  border-radius:var(--r-sm); cursor:pointer;
  color:var(--dim); font-size:13px; font-weight:600;
  transition:background-color var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard);
  position:relative;
}
.tab:hover{ background:var(--surface-4); color:var(--ink); }
.tab.on{
  background:var(--brand-soft); color:var(--brand-ink); font-weight:700;
}
.tab.on::before{
  content:''; position:absolute; left:calc(-1 * var(--sp-4)); top:20%; bottom:20%;
  width:3px; border-radius:var(--r-full); background:var(--brand);
}
.nx-i{ width:18px; height:18px; flex:none; fill:none; stroke:currentColor; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
.tab .nx-i{ width:17px; height:17px; }

/* 服务组 */
.nx-services{ display:flex; flex-direction:column; gap:2px; }
.nx-svc{
  appearance:none; border:0; background:none; cursor:pointer;
  display:flex; align-items:center; gap:var(--sp-3);
  min-height:38px; padding:var(--sp-1) var(--sp-3);
  border-radius:var(--r-sm); color:var(--dim); font-size:13px; font-weight:550;
  transition:background-color var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard);
  text-align:left;
}
.nx-svc:hover{ background:var(--brand-softer); color:var(--brand-ink); }
.nx-svc .nx-i{ width:16px; height:16px; }

/* 主列 */
.nx-main{ flex:1; min-width:0; display:flex; flex-direction:column; }
.nx-top{
  position:sticky; top:0; z-index:40;
  display:none; align-items:center; justify-content:space-between; gap:var(--sp-3);
  padding:var(--sp-2) var(--sp-4);
  background:color-mix(in srgb, var(--bg) 88%, transparent);
  backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line-soft);
}
.nx-top-brand{ display:flex; align-items:center; gap:var(--sp-2); }
.nx-top-brand b{ font-size:14px; color:var(--ink-strong); }
.nx-top-brand img{ border-radius:var(--r-sm); }
.nx-top-tools{ display:flex; align-items:center; gap:var(--sp-2); }
.nx-topbtn{
  appearance:none; border:1px solid var(--line-soft); background:var(--card);
  width:38px; height:38px; border-radius:var(--r-sm);
  display:inline-flex; align-items:center; justify-content:center;
  color:var(--dim); cursor:pointer;
  transition:color var(--dur-fast) var(--ease-standard), border-color var(--dur-fast) var(--ease-standard);
}
.nx-topbtn:hover{ color:var(--brand-ink); border-color:var(--brand-line); }
.nx-clock{ text-align:right; line-height:1.2; }
.nx-clock b{ display:block; font-size:15px; font-variant-numeric:tabular-nums; color:var(--ink-strong); }
.nx-clock small{ font-size:10px; color:var(--dim); }

.nx-content{
  flex:1; width:100%; max-width:1240px; margin:0 auto;
  padding:var(--sp-5) var(--sp-5) var(--sp-8);
  display:flex; flex-direction:column; gap:var(--sp-5);
}
/* 视图切换（router.js 切换 .view.on；旧样式表已退役，此处是唯一裁决）*/
.view{ display:none; flex-direction:column; gap:var(--sp-5); }
.view.on{ display:flex; }

/* ── 2. 视图标题与面板 ───────────────────────────────────────────────── */
.nx-view-head{ position:relative; padding:var(--sp-2) 0 var(--sp-1) var(--sp-4); }
.nx-view-head::before{
  content:''; position:absolute; left:0; top:var(--sp-2); bottom:var(--sp-2);
  width:4px; border-radius:var(--r-full); background:var(--brand);
}
.nx-view-head h1{ font-size:24px; letter-spacing:.02em; }
.nx-view-head p{ margin:var(--sp-1) 0 0; color:var(--dim); font-size:13px; }
.nx-view-head .nx-head-act{ position:absolute; right:0; top:var(--sp-1); }

.nx-panel{
  background:var(--card);
  border:1px solid var(--line-soft);
  border-radius:var(--r-md);
  padding:var(--sp-4);
}
.nx-panel-hero{
  background:linear-gradient(180deg, var(--brand-softer), var(--card) 42%);
  border-color:var(--brand-line);
}
.nx-panel-head{
  display:flex; align-items:center; gap:var(--sp-2);
  margin-bottom:var(--sp-3); min-height:24px;
}
.nx-panel-head h2, .nx-panel-head > span{ font-size:14px; font-weight:800; letter-spacing:.04em; color:var(--ink-strong); }
.nx-tick{ width:8px; height:8px; flex:none; background:var(--brand); transform:rotate(45deg); }
.nx-panel-sub{ margin:calc(-1 * var(--sp-2)) 0 var(--sp-3); font-size:12px; color:var(--dim); line-height:1.7; }
.nx-mini{
  appearance:none; margin-left:auto;
  border:1px solid var(--line-soft); background:var(--surface-2);
  min-height:30px; padding:0 var(--sp-3); border-radius:var(--r-sm);
  color:var(--dim); font-size:12px; font-weight:600; cursor:pointer;
  transition:color var(--dur-fast) var(--ease-standard), border-color var(--dur-fast) var(--ease-standard);
}
.nx-mini:hover{ color:var(--brand-ink); border-color:var(--brand-line); }
.nx-head-act{ margin-left:auto; }
.nx-duo{ display:grid; grid-template-columns:1fr 1fr; gap:var(--sp-4); align-items:start; }
/* 摇号台单卡布局（2026-10-14：选择玩法 + 抽号合并一卡；
   二改·用户「不想让用户下滑」：桌面改内部双栏（左选择 / 右抽号），一屏可见） */
.nx-console.nx-console-solo{ grid-template-columns:1fr; }
.nx-console.nx-console-solo .nx-console-main{ display:flex; flex-direction:column; gap:var(--sp-3); }
.nx-console.nx-console-solo .nx-console-main > .nx-panel-head{ margin-bottom:0; }
.nx-console.nx-console-solo .nx-console-main > .nx-panel-head h2{ margin:0 auto 0 0; }
.nx-pick{ display:flex; flex-direction:column; gap:var(--sp-2); }
.nx-draw{ display:flex; flex-direction:column; gap:var(--sp-2); }
.nx-pick .mode-row{ margin:0; }
.nx-draw .act-row{ margin-top:0; }
.nx-draw .hint{ margin-top:0; }
.nx-draw .enh-row{ margin-top:var(--sp-2); padding-top:var(--sp-2); }
@media (min-width:1024px){
  /* 铺满：视图 → 卡片 → 主格吃掉剩余高度，号码屏随之放大；左栏提示贴底对齐 */
  #view-roll.view.on{ flex:1 1 auto; min-height:0; }
  .nx-console.nx-console-solo{ display:flex; flex-direction:column; flex:1 1 auto; min-height:0; }
  .nx-console.nx-console-solo .nx-console-main{
    display:grid; grid-template-columns:minmax(320px,1fr) 1.15fr;
    gap:var(--sp-3) var(--sp-4); align-items:stretch;
    flex:1 1 auto; min-height:0;
  }
  .nx-console.nx-console-solo .nx-draw{ min-height:0; }
  .nx-console.nx-console-solo .screen{ flex:1 1 auto; min-height:112px; }
  /* 左栏整组垂直居中 + 玩法格加大，与右侧大号码屏观感均衡 */
  .nx-console.nx-console-solo .nx-pick{ justify-content:center; }
  .nx-console.nx-console-solo .game-btn{ min-height:62px; }
  .nx-console.nx-console-solo .play-note{ margin-top:var(--sp-2); }
  .nx-console.nx-console-solo .nx-console-main > .nx-panel-head{ grid-column:1 / -1; }
  .nx-pick{ grid-column:1; }
  .nx-draw{ grid-column:2; }
  .nx-console.nx-console-solo .screen{ min-height:112px; }
}
/* 开奖日历：日期点选（2026-10-14 修复「点日期没反应」） */
.cal-cell[data-day]{ cursor:pointer; }
.cal-cell.sel{ border-color:var(--brand); box-shadow:inset 0 0 0 1px var(--brand); background:var(--brand-soft); }
.cal-detail{ margin-top:var(--sp-3); padding-top:var(--sp-3); border-top:1px dashed var(--line); }
.cal-detail-row{ margin-top:var(--sp-2); }
.cal-detail-nums{ margin-top:2px; font-weight:650; letter-spacing:.08em; color:var(--ink); font-variant-numeric:tabular-nums; }
.nx-btnrow{ display:flex; align-items:center; justify-content:center; gap:var(--sp-3); flex-wrap:wrap; margin-top:var(--sp-3); }
.nx-inrow{ display:flex; flex-wrap:wrap; gap:var(--sp-2); align-items:center; }
.nx-fortune:empty::before{ content:'推算中…'; color:var(--dim); font-size:13px; }

/* ── 3. 摇号台（非对称主控台）────────────────────────────────────────── */
.nx-console{ display:grid; grid-template-columns:minmax(280px,5fr) 7fr; gap:var(--sp-4); align-items:start; }
.nx-segrow{
  display:flex; flex-wrap:wrap; gap:var(--sp-1);
  border:0; padding:0; background:none;
}
/* 彩种选择：直角票据块 */
.game-row{ margin-bottom:var(--sp-3); }
.game-btn{
  appearance:none; cursor:pointer; user-select:none;
  flex:1 1 auto; min-width:72px;
  border:1px solid var(--line-soft); background:var(--surface-2);
  border-radius:var(--r-sm);
  padding:var(--sp-2) var(--sp-2);
  display:flex; flex-direction:column; align-items:center; gap:1px;
  font-size:13px; font-weight:650; color:var(--ink);
  transition:background-color var(--dur-fast) var(--ease-standard), border-color var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard);
}
.game-btn small{ font-size:10px; font-weight:500; color:var(--dim); }
.game-btn:hover{ border-color:var(--brand-line); color:var(--brand-ink); }
.game-btn.on{ background:var(--ink-strong); border-color:var(--ink-strong); color:#fff; }
.game-btn.on small{ color:color-mix(in srgb, #fff 72%, transparent); }

/* 模式：票据标签 */
.mode-row{ display:flex; flex-wrap:wrap; gap:var(--sp-2); margin:var(--sp-3) 0; }
.mode-chip{
  appearance:none; cursor:pointer; user-select:none;
  display:inline-flex; align-items:center; gap:var(--sp-1);
  border:1px solid var(--line); background:var(--card);
  border-radius:var(--r-sm);
  min-height:34px; padding:0 var(--sp-3);
  font-size:13px; font-weight:650; color:var(--dim);
  transition:all var(--dur-fast) var(--ease-standard);
}
.mode-chip small{ font-size:10px; font-weight:700; }
.mode-fee{ color:var(--red-ink); }
.mode-free{ color:var(--brand-ink); }
.mode-chip.on{ background:var(--ink-strong); border-color:var(--ink-strong); color:#fff; }
.mode-chip.on .mode-fee{ color:#ffd9d9; }
.mode-chip.on .mode-free{ color:#cfe3ff; }
.play-note{ font-size:12px; color:var(--dim); min-height:18px; }

/* 号码屏幕：票据大数字 */
.screen{
  min-height:150px; border-radius:var(--r-sm);
  border:1px dashed var(--line-strong);
  background:var(--card);
  display:flex; flex-wrap:wrap; align-items:center; justify-content:center; gap:var(--sp-3);
  padding:var(--sp-5) var(--sp-4); margin-bottom:var(--sp-4);
}
.screen.rolling{ animation:nxShake .4s linear infinite; }
@keyframes nxShake{ 0%,100%{ transform:translateY(0); } 50%{ transform:translateY(-2px); } }
.placeholder-txt{ color:var(--dim); font-size:13px; }
/* 号码球 v3：双环票据章（非实心胶囊）*/
.vr-tile{
  width:62px; height:62px; border-radius:var(--r-full);
  border:2px solid var(--brand-ink);
  background:var(--card);
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  box-shadow:var(--shadow-sm);
  position:relative;
}
.vr-tile .vr-num{ font-size:24px; font-weight:800; font-variant-numeric:tabular-nums; color:var(--ink-strong); line-height:1.1; }
.vr-tile .vr-ord{ font-size:9px; letter-spacing:.14em; color:var(--dim); }
.vr-tile.gold{ border-color:var(--gold); background:linear-gradient(180deg, var(--gold-soft), var(--card)); }
.vr-tile.gold .vr-num{ color:var(--gold-hi); }
.vr-tile.red{ border-color:var(--red); background:linear-gradient(180deg, var(--red-soft), var(--card)); }
.vr-tile.red .vr-num{ color:var(--red-ink); }
.vr-tile.blue{ border-color:var(--brand); background:linear-gradient(180deg, var(--brand-softer), var(--card)); }
.vr-tile.blue .vr-num{ color:var(--brand-ink); }
.vr-sep{ font-size:20px; font-weight:800; color:var(--dim); }
.vr-tile.rolling .vr-num{ animation:nxRoll .5s linear infinite; }
@keyframes nxRoll{ 0%{ transform:translateY(-6px); opacity:.35; } 50%{ transform:translateY(0); opacity:1; } 100%{ transform:translateY(6px); opacity:.35; } }
.screen .vr-tile{ animation:nxPop .3s var(--ease-out) both; }
@keyframes nxPop{ from{ transform:scale(.7); opacity:0; } to{ transform:scale(1); opacity:1; } }

/* 主按钮 + 次操作 */
.go-btn{
  min-width:200px; min-height:48px;
  border:0; border-radius:var(--r-sm); cursor:pointer;
  background:var(--ink-strong); color:#fff;
  font-size:15px; font-weight:750; letter-spacing:.3em; text-indent:.3em;
  display:inline-flex; align-items:center; justify-content:center; gap:var(--sp-2);
  box-shadow:var(--shadow-md);
  transition:transform var(--dur-fast) var(--ease-standard), box-shadow var(--dur-fast) var(--ease-standard);
}
.go-btn svg{ width:16px; height:16px; fill:none; stroke:currentColor; stroke-width:1.7; }
.go-btn:hover{ transform:translateY(-1px); box-shadow:var(--shadow-lg); }
.go-btn:active{ transform:translateY(0) scale(.98); box-shadow:var(--shadow-sm); }
.ref-btn{
  min-height:36px; padding:0 var(--sp-3);
  border:1px solid var(--line); border-radius:var(--r-sm);
  background:var(--card); color:var(--ink);
  font-size:13px; font-weight:600; cursor:pointer;
  transition:border-color var(--dur-fast) var(--ease-standard), color var(--dur-fast) var(--ease-standard);
}
.ref-btn:hover{ border-color:var(--brand-line); color:var(--brand-ink); }
.act-row{ display:flex; justify-content:center; flex-wrap:wrap; gap:var(--sp-2); margin-top:var(--sp-3); }
.hint{ margin-top:var(--sp-3); font-size:13px; color:var(--dim); min-height:20px; text-align:center; line-height:1.8; }
.hint b{ color:var(--ink-strong); }
.hint small{ font-size:11px; }

/* ── 4. 通用面板内组件 ───────────────────────────────────────────────── */
/* 彩种 seg（开奖/AI/刮刮乐/过滤共用 .kj-control/.kj-game）*/
.kj-control{ margin-bottom:var(--sp-2); }
.kj-game{
  appearance:none; cursor:pointer; user-select:none;
  border:1px solid var(--line-soft); background:var(--surface-2);
  border-radius:var(--r-sm);
  min-height:36px; padding:var(--sp-1) var(--sp-3);
  display:inline-flex; flex-direction:column; align-items:center; justify-content:center;
  font-size:13px; font-weight:600; color:var(--dim);
  transition:all var(--dur-fast) var(--ease-standard);
}
.kj-game small{ font-size:10px; color:var(--dim); }
.kj-game:hover{ color:var(--brand-ink); border-color:var(--brand-line); }
.kj-game.on{ background:var(--ink-strong); border-color:var(--ink-strong); color:#fff; }
.kj-game.on small{ color:color-mix(in srgb, #fff 70%, transparent); }
/* 期数 chips */
.period-row{ display:flex; flex-wrap:wrap; gap:var(--sp-1); margin:var(--sp-2) 0; }
.p-chip{
  appearance:none; cursor:pointer; user-select:none;
  border:1px solid var(--line-soft); background:var(--surface-2);
  border-radius:var(--r-sm);
  min-height:28px; padding:0 var(--sp-2);
  font-size:11px; font-weight:650; color:var(--dim);
  transition:all var(--dur-fast) var(--ease-standard);
}
.p-chip:hover{ color:var(--ink); }
.p-chip.on{ background:var(--brand-soft); border-color:var(--brand-line); color:var(--brand-ink); font-weight:750; }

/* 开奖号码盒（kj.js renderKjBox：.vr-kj-meta + .vr-tile 复用）*/
.kj-box{
  min-height:120px; border-radius:var(--r-sm);
  border:1px solid var(--line-soft); background:var(--surface-2);
  padding:var(--sp-4); margin:var(--sp-2) 0 var(--sp-3);
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:var(--sp-2);
}
.vr-kj-num{ display:flex; flex-wrap:wrap; align-items:center; justify-content:center; gap:var(--sp-2); }
.vr-kj-meta{ font-size:12px; color:var(--dim); text-align:center; }
.kj-status{ width:100%; }
.kj-table-scroll{ overflow:auto; border:1px solid var(--line-soft); border-radius:var(--r-sm); }
.kj-history{ width:100%; border-collapse:collapse; font-size:13px; }
.kj-history th{
  position:sticky; top:0; background:var(--surface-2);
  font-size:11px; letter-spacing:.08em; color:var(--dim); font-weight:700;
  text-align:left; padding:var(--sp-2) var(--sp-3); border-bottom:1px solid var(--line);
}
.kj-history td{ padding:var(--sp-2) var(--sp-3); border-bottom:1px solid var(--line-soft); font-variant-numeric:tabular-nums; }
.kj-history tr:last-child td{ border-bottom:0; }
.kj-note{ font-size:12px; color:var(--dim); }
.live-dot{ width:8px; height:8px; border-radius:var(--r-full); background:var(--red); display:inline-block; }

/* 历史记录（effects.js）*/
.his-list{ display:flex; flex-direction:column; }
.his-item{
  display:flex; align-items:center; gap:var(--sp-2);
  padding:var(--sp-2) 0; border-bottom:1px dashed var(--line-soft);
  font-size:13px;
}
.his-item:last-child{ border-bottom:0; }
.his-item .tag{
  flex:none; font-size:10px; font-weight:750; letter-spacing:.06em;
  color:var(--brand-ink); background:var(--brand-soft);
  border-radius:var(--r-sm); padding:1px var(--sp-1);
}
.his-item .nums{ flex:1; font-weight:700; font-variant-numeric:tabular-nums; letter-spacing:.12em; }
.his-item .time{ color:var(--dim); font-size:11px; font-variant-numeric:tabular-nums; }
.empty{ color:var(--dim); font-size:13px; padding:var(--sp-3) 0; text-align:center; }

/* ── 5. 按钮（shared dsh-* 的 v3 视觉覆盖）──────────────────────────── */
.dsh-btn{
  appearance:none; border:1px solid transparent; cursor:pointer;
  display:inline-flex; align-items:center; justify-content:center; gap:var(--sp-1);
  min-height:38px; padding:0 var(--sp-4);
  border-radius:var(--r-sm); font-size:13px; font-weight:650;
  transition:all var(--dur-fast) var(--ease-standard);
  text-decoration:none;
}
.dsh-btn:disabled{ opacity:.45; pointer-events:none; }
.dsh-btn-primary{ background:var(--ink-strong); color:#fff; }
.dsh-btn-primary:hover{ transform:translateY(-1px); box-shadow:var(--shadow-md); }
.dsh-btn-secondary{ background:var(--brand-soft); color:var(--brand-ink); border-color:var(--brand-line); }
.dsh-btn-secondary:hover{ background:var(--brand-softer); }
.dsh-btn-ghost{ background:var(--card); color:var(--dim); border-color:var(--line-soft); }
.dsh-btn-ghost:hover{ color:var(--ink); border-color:var(--line); }
.dsh-btn-sm{ min-height:32px; padding:0 var(--sp-3); font-size:12px; }
.dsh-btn-lg{ min-height:48px; font-size:15px; }
.dsh-btn-block{ width:100%; }
.gen-btn{ letter-spacing:.2em; }

/* 表单 */
.dsh-input, .dsh-select, .dsh-textarea{
  width:100%; min-height:42px; padding:var(--sp-2) var(--sp-3);
  border:1px solid var(--line); border-radius:var(--r-sm);
  background:var(--card); color:var(--ink); font-size:14px; font-family:inherit;
  transition:border-color var(--dur-fast) var(--ease-standard);
}
.dsh-input:focus, .dsh-select:focus, .dsh-textarea:focus{ outline:none; border-color:var(--brand); }
.dsh-input-lg{ min-height:48px; }
.dsh-input[hidden]{ display:none; }
.dsh-field-label{ display:block; font-size:12px; font-weight:700; color:var(--ink); margin-bottom:var(--sp-1); }
.dsh-field{ margin-bottom:var(--sp-3); }
.dsh-select{ appearance:none; cursor:pointer; }
.dsh-textarea{ min-height:88px; resize:vertical; }
.dsh-check{ display:inline-flex; align-items:center; gap:var(--sp-2); cursor:pointer; }
.dsh-check input{ accent-color:var(--brand); width:16px; height:16px; }
.dsh-grow{ flex:1; min-width:0; }

/* ── 6. 数据行家族（JS 生成）────────────────────────────────────────── */
.dsh-list-item{
  display:flex; align-items:center; justify-content:space-between; gap:var(--sp-3);
  padding:var(--sp-3) 0; border-bottom:1px solid var(--line-soft);
}
.dsh-list-item:last-child{ border-bottom:0; }
.dsh-li-main{ flex:1; min-width:0; }
.dsh-li-title{ font-weight:750; font-variant-numeric:tabular-nums; letter-spacing:.08em; word-break:break-all; }
.dsh-li-desc{ font-size:12px; color:var(--dim); margin-top:2px; }
.dsh-li-value{ flex:none; }
.dsh-state-box{
  display:flex; flex-direction:column; align-items:center; gap:var(--sp-2);
  padding:var(--sp-5) var(--sp-3); text-align:center;
}
.dsh-state-icon{ font-size:26px; }
.dsh-state-title{ font-weight:750; color:var(--ink-strong); }
.dsh-state-desc{ color:var(--dim); font-size:13px; }
.dsh-spinner{
  width:18px; height:18px; border-radius:var(--r-full); display:inline-block;
  border:2px solid var(--line); border-top-color:var(--brand);
  animation:nxSpin .8s linear infinite; vertical-align:-4px;
}
@keyframes nxSpin{ to{ transform:rotate(360deg); } }
.dsh-badge{ display:inline-flex; align-items:center; border-radius:var(--r-sm); font-size:11px; font-weight:700; padding:1px var(--sp-2); background:var(--surface-3); color:var(--ink); }
.dsh-badge-brand{ background:var(--brand-soft); color:var(--brand-ink); }
.dsh-badge-gold{ background:var(--gold-soft); color:var(--gold-hi); }
.dsh-badge-success{ background:color-mix(in srgb, var(--brand-soft) 60%, var(--card)); color:var(--brand-ink); }
.dsh-badge-warn{ background:var(--red-soft); color:var(--red-ink); }
.dsh-progress{ height:8px; border-radius:var(--r-full); background:var(--surface-3); overflow:hidden; }
.dsh-progress i{ display:block; height:100%; background:var(--brand); border-radius:var(--r-full); }
.dsh-num, .dsh-tnum{ font-variant-numeric:tabular-nums; }

/* 对账 / 榜单 / 追号表格（st-*）*/
.st-picker{ display:flex; flex-wrap:wrap; gap:var(--sp-1); }
.st-chip{
  appearance:none; cursor:pointer;
  border:1px solid var(--line-soft); background:var(--surface-2);
  border-radius:var(--r-sm); min-height:30px; padding:0 var(--sp-2);
  font-size:12px; font-weight:600; color:var(--dim);
  transition:all var(--dur-fast) var(--ease-standard);
}
.st-chip:hover{ color:var(--ink); }
.st-chip.on{ background:var(--brand-soft); border-color:var(--brand-line); color:var(--brand-ink); font-weight:750; }
.st-meta{ font-size:13px; margin-bottom:var(--sp-3); }
.st-hint{ color:var(--dim); font-size:12px; }
.st-sec{ margin-top:var(--sp-4); }
.sf-head{ display:flex; align-items:baseline; justify-content:space-between; font-size:13px; font-weight:800; margin-bottom:var(--sp-2); }
.st-sub{ font-size:11px; font-weight:500; color:var(--dim); }
.st-balls{ display:flex; flex-wrap:wrap; gap:var(--sp-2); }
.st-ball{
  width:48px; height:58px; border-radius:var(--r-sm);
  border:1px solid var(--line-soft); background:var(--surface-2);
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
  position:relative; overflow:hidden;
}
.st-ball b{ position:relative; z-index:1; font-size:14px; font-variant-numeric:tabular-nums; }
.st-ball em{ position:relative; z-index:1; font-style:normal; font-size:11px; color:var(--dim); }
.st-ball .st-bar{ position:absolute; left:0; right:0; bottom:0; background:var(--brand-soft); }
.st-ball.hot b{ color:var(--red-ink); }
.st-ball.hot .st-bar{ background:var(--red-soft); }
.st-ball.cold b{ color:var(--dim); }
.st-table{ display:flex; flex-direction:column; }
.st-table-box{ max-height:300px; overflow:auto; }
.st-tr{
  display:grid; grid-template-columns:1.4fr .8fr 1fr 1.2fr;
  align-items:center; gap:var(--sp-2);
  padding:var(--sp-2) 0; border-bottom:1px solid var(--line-soft); font-size:13px;
}
.st-tr:last-child{ border-bottom:0; }
.st-tr.st-th{
  position:sticky; top:0; background:var(--card); z-index:1;
  font-size:11px; letter-spacing:.08em; color:var(--dim); font-weight:800;
  border-bottom:1px solid var(--line);
}
.st-tr.st-win{ background:var(--brand-soft); border-radius:var(--r-sm); padding-left:var(--sp-2); padding-right:var(--sp-2); }
.st-num{ font-weight:750; font-variant-numeric:tabular-nums; }
.st-omit{ font-weight:750; color:var(--red-ink); }
.st-note{ margin-top:var(--sp-3); font-size:12px; color:var(--dim); line-height:1.7; }

/* 守号对账 */
.sh-main{ display:flex; flex-direction:column; min-width:0; }
.sh-nums{ font-weight:750; font-variant-numeric:tabular-nums; letter-spacing:.1em; word-break:break-all; }
.sh-issue{ color:var(--dim); font-size:12px; font-variant-numeric:tabular-nums; }
.sh-hit{ font-weight:650; font-variant-numeric:tabular-nums; }
.sh-prize{ font-weight:700; color:var(--brand-ink); }
.sh-new{
  font-style:normal; padding:0 var(--sp-1); border-radius:var(--r-sm);
  background:var(--red); color:#fff; font-size:10px; line-height:16px; vertical-align:1px;
}

/* 杀号过滤 */
.fg-sec-head{ display:flex; align-items:center; justify-content:space-between; gap:var(--sp-2); }
.fg-clear{ appearance:none; border:0; background:none; padding:0; color:var(--dim); font-size:12px; cursor:pointer; }
.fg-clear:hover{ color:var(--red-ink); }
.fg-grid{ display:flex; flex-wrap:wrap; gap:var(--sp-1); margin-top:var(--sp-2); }
.fg-cell{
  width:38px; height:38px; border-radius:var(--r-full);
  border:1px solid var(--line); background:var(--surface-2);
  color:var(--ink); font-size:12px; font-weight:650; font-variant-numeric:tabular-nums;
  cursor:pointer; transition:all var(--dur-fast) var(--ease-standard);
}
.fg-cell:hover{ border-color:var(--brand-ink); color:var(--brand-ink); }
.fg-cell.killed{ background:var(--red-soft); border-color:var(--red); color:var(--red-ink); text-decoration:line-through; opacity:.8; }
.fg-range{ display:flex; align-items:center; gap:var(--sp-2); margin-top:var(--sp-2); }
.fg-range-label{ flex:none; min-width:var(--sp-10); font-size:13px; color:var(--dim); }
.fg-input{ width:88px; text-align:center; }
.fg-range-sep{ color:var(--dim); }
.fg-hint{ font-size:12px; color:var(--dim); line-height:1.7; }
.fg-new-row{ display:flex; gap:var(--sp-2); }
.fg-new-row .dsh-input{ flex:1; min-width:0; }
.fg-note{ padding:var(--sp-2) var(--sp-3); border-radius:var(--r-sm); background:var(--surface-2); color:var(--dim); font-size:13px; line-height:1.7; }
.fg-res{ display:flex; align-items:center; gap:var(--sp-2); padding:var(--sp-2) 0; border-bottom:1px dashed var(--line-soft); }
.fg-res:last-child{ border-bottom:0; }
.fg-res-idx{
  flex:none; width:var(--sp-6); height:var(--sp-6); border-radius:var(--r-full);
  background:var(--ink-strong); color:#fff; font-size:11px; font-weight:800;
  display:inline-flex; align-items:center; justify-content:center;
}
.fg-res-nums{ flex:1; font-weight:700; letter-spacing:.12em; word-break:break-all; }
.book-group-bar{ display:flex; flex-wrap:wrap; gap:var(--sp-1); margin:var(--sp-2) 0; }
.book-group-bar:empty{ margin:0; }
.book-grp-add{ border-style:dashed; }
.book-grp-tag{
  appearance:none; border:0; padding:0 var(--sp-2); margin-left:var(--sp-1);
  border-radius:var(--r-full); background:var(--brand-soft); color:var(--brand-ink);
  font-size:11px; line-height:18px; font-weight:650; cursor:pointer;
}
.book-grp-tag:hover{ background:var(--brand-softer); }
.enh-row{
  display:flex; flex-wrap:wrap; justify-content:center; gap:var(--sp-2);
  margin-top:var(--sp-4); padding-top:var(--sp-3); border-top:1px dashed var(--line-soft);
}
.enh-btn{
  appearance:none; cursor:pointer;
  display:inline-flex; align-items:center; gap:var(--sp-1);
  min-height:36px; padding:0 var(--sp-3);
  border:1px solid var(--line-soft); border-radius:var(--r-sm);
  background:var(--card); color:var(--dim);
  font-size:12px; font-weight:600; white-space:nowrap;
  transition:all var(--dur-fast) var(--ease-standard);
}
.enh-btn:hover{ color:var(--brand-ink); border-color:var(--brand-line); background:var(--brand-softer); }
.enh-btn:active{ transform:scale(.97); }
.enh-btn:disabled{ opacity:.45; pointer-events:none; }
.enh-btn.is-speaking{ background:var(--brand-soft); color:var(--brand-ink); border-color:var(--brand-line); }
.calc-result{
  padding:var(--sp-3); border-radius:var(--r-sm);
  border:1px solid var(--line-soft); background:var(--surface-2);
  font-size:13px; line-height:1.8;
}
.calc-result.cr-win{ border-color:var(--brand-line); background:var(--brand-softer); }
.calc-result.cr-lose{ color:var(--dim); }

/* 开奖日历 */
.cal-nav{ display:flex; align-items:center; gap:var(--sp-2); margin-left:auto; }
.cal-month{ font-size:13px; font-variant-numeric:tabular-nums; }
.cal-grid{ display:grid; grid-template-columns:repeat(7,1fr); gap:var(--sp-1); }
.cal-wd{ text-align:center; font-size:10px; font-weight:800; letter-spacing:.1em; color:var(--dim); padding:var(--sp-1) 0; }
.cal-cell{
  min-height:46px; border-radius:var(--r-sm);
  border:1px solid var(--line-soft); background:var(--surface-2);
  padding:var(--sp-1); display:flex; flex-direction:column; align-items:center; gap:2px;
}
.cal-cell.empty{ background:transparent; border-color:transparent; }
.cal-cell.today{ border-color:var(--brand-ink); background:var(--brand-soft); }
.cal-d{ font-size:12px; font-weight:650; font-variant-numeric:tabular-nums; }
.cal-dots{ display:flex; gap:2px; }
.cal-dots i{ width:5px; height:5px; border-radius:var(--r-full); display:inline-block; }
.cal-dot{ width:8px; height:8px; border-radius:var(--r-full); display:inline-block; }
.cal-legend{ line-height:2; }
.cal-next-title{ font-weight:800; color:var(--dim); margin-bottom:var(--sp-2); }
.cal-chips{ display:flex; flex-wrap:wrap; gap:var(--sp-2); }
.cal-chip{
  display:inline-flex; align-items:center; gap:var(--sp-1);
  padding:var(--sp-1) var(--sp-3);
  border:1px solid var(--line-soft); border-radius:var(--r-full);
  background:var(--surface-2); font-size:12px;
}
.cal-chip em{ font-style:normal; font-weight:750; color:var(--brand-ink); margin-left:var(--sp-1); }

/* 刮奖图鉴 */
.al-grid{ display:flex; flex-wrap:wrap; gap:var(--sp-2); }
.al-card{
  flex:1 1 calc(50% - var(--sp-2)); min-width:0;
  border:1px dashed var(--line); border-radius:var(--r-sm);
  background:var(--surface-2); padding:var(--sp-3); opacity:.6;
}
.al-card.got{ opacity:1; background:var(--card); border:1px solid var(--brand-line); }
.al-name{ font-weight:750; display:flex; align-items:center; justify-content:space-between; gap:var(--sp-2); }
.al-unknown{ font-style:normal; font-size:10px; color:var(--dim); border:1px dashed var(--line); border-radius:var(--r-full); padding:0 var(--sp-2); }
.al-meta{ font-size:11px; margin-top:2px; }
.al-stat{ font-size:12px; margin-top:var(--sp-1); }
.al-ach{ display:flex; align-items:center; gap:var(--sp-2); padding:var(--sp-2) 0; border-bottom:1px dashed var(--line-soft); }
.al-ach:last-child{ border-bottom:0; }
.al-ach:not(.done){ opacity:.55; }
.al-ach-main{ flex:1; display:flex; flex-direction:column; min-width:0; }
.al-prog{ color:var(--dim); font-size:12px; font-variant-numeric:tabular-nums; }

/* ── 7. AI 推荐结果（ai.js 生成）────────────────────────────────────── */
.ai-engine{ font-size:11px; letter-spacing:.1em; color:var(--dim); border:1px dashed var(--line-soft); display:inline-block; padding:1px var(--sp-2); border-radius:var(--r-sm); margin-bottom:var(--sp-2); }
.kj-num{ display:flex; flex-wrap:wrap; gap:var(--sp-2); margin:var(--sp-2) 0; }
.kj-tile{
  width:52px; height:52px; border-radius:var(--r-full);
  border:2px solid var(--brand-ink); background:var(--card);
  display:flex; align-items:center; justify-content:center;
  font-size:20px; font-weight:800; font-variant-numeric:tabular-nums; color:var(--ink-strong);
}
.kj-tile.red{ border-color:var(--red); background:linear-gradient(180deg, var(--red-soft), var(--card)); color:var(--red-ink); }
.kj-tile.blue{ border-color:var(--brand); background:linear-gradient(180deg, var(--brand-softer), var(--card)); color:var(--brand-ink); }
.kj-tile.special{ border-color:var(--gold); color:var(--gold-hi); }
.ai-expl{ font-size:13px; line-height:1.8; }
.ai-expl ul{ margin:var(--sp-1) 0; padding-left:var(--sp-5); }
.ai-expl li{ margin:2px 0; }
.ai-cfg{
  display:flex; flex-direction:column; gap:var(--sp-2);
  border:1px dashed var(--line); border-radius:var(--r-sm);
  background:var(--surface-2); padding:var(--sp-3); margin-bottom:var(--sp-3);
  font-size:12px;
}
.read-row{ display:flex; align-items:center; gap:var(--sp-2); padding:var(--sp-2) 0; border-bottom:1px dashed var(--line-soft); font-size:13px; }
.luck-pool{ display:flex; flex-wrap:wrap; gap:var(--sp-1); margin:var(--sp-2) 0; }
.luck-chip{ border:1px solid var(--brand-line); background:var(--brand-soft); color:var(--brand-ink); border-radius:var(--r-sm); font-size:12px; font-weight:700; padding:2px var(--sp-2); font-variant-numeric:tabular-nums; }
.pillar{ display:flex; flex-direction:column; align-items:center; gap:2px; padding:var(--sp-2); border:1px solid var(--line-soft); border-radius:var(--r-sm); background:var(--surface-2); min-width:64px; }
.gan, .zhi{ font-size:15px; font-weight:800; }
.k{ font-size:11px; color:var(--dim); }
.disc{ font-size:12px; color:var(--dim); margin-top:var(--sp-2); }
.sep-plus{ font-size:18px; font-weight:800; color:var(--dim); align-self:center; }
.use-btn{ margin-top:var(--sp-2); }
.cell{ display:flex; flex-direction:column; align-items:center; gap:2px; }

/* ── 8. 刮刮乐（ggl.js 生成）────────────────────────────────────────── */
.ggl-stat{ font-size:12px; color:var(--dim); }
.ggl-tickets{ display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:var(--sp-2); }
.vm-ticket{
  border:1px solid var(--line-soft); border-radius:var(--r-sm);
  background:var(--surface-2); padding:var(--sp-3); cursor:pointer;
  transition:all var(--dur-fast) var(--ease-standard);
}
.vm-ticket:hover{ border-color:var(--brand-line); }
.vm-ticket.on{ border-color:var(--brand-ink); background:var(--brand-softer); box-shadow:var(--shadow-sm); }
.vm-ticket b{ display:block; font-size:14px; color:var(--ink-strong); }
.vm-ticket small{ color:var(--dim); font-size:11px; }
.vm-ticket-card{
  position:relative; border:1px solid var(--line); border-radius:var(--r-md);
  background:var(--card); overflow:hidden; margin-top:var(--sp-3);
}
.vm-tc-body{ padding:var(--sp-4); }
.vm-tc-issuer{ font-size:11px; letter-spacing:.12em; color:var(--dim); }
.vm-tc-head{ display:flex; align-items:baseline; justify-content:space-between; gap:var(--sp-2); margin:var(--sp-1) 0; }
.vm-tc-head b{ font-size:18px; color:var(--ink-strong); }
.vm-tc-head span{ font-size:12px; color:var(--gold-hi); font-weight:750; }
.vm-tc-rule{ font-size:12px; color:var(--dim); line-height:1.7; border-left:3px solid var(--brand-soft); padding-left:var(--sp-2); margin-bottom:var(--sp-3); }
.vm-zone-title{ font-size:11px; font-weight:800; letter-spacing:.14em; color:var(--dim); margin:var(--sp-3) 0 var(--sp-1); }
.vm-zone-title small{ font-weight:500; margin-left:var(--sp-2); }
.vm-winzone{ display:flex; gap:var(--sp-2); }
.vm-grid{ display:grid; gap:var(--sp-2); margin-top:var(--sp-1); }
.vm-cell{
  position:relative; aspect-ratio:1; max-width:92px;
  border:1px solid var(--line); border-radius:var(--r-sm);
  background:var(--surface-2);
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
  overflow:hidden;
}
.vm-cell .sym{ font-size:16px; font-weight:800; color:var(--ink-strong); }
.vm-cell .prize{ font-size:10px; font-weight:750; color:var(--gold-hi); }
.vm-cell.hit{ border-color:var(--gold); background:var(--gold-soft); }
.vm-cell.revealed{ border-style:dashed; }
.vm-cell.win-hint{ border-color:var(--gold-soft); }
.vm-tc-prog{ font-size:11px; color:var(--dim); margin-top:var(--sp-2); font-variant-numeric:tabular-nums; }
.vm-prize{
  margin-top:var(--sp-3); padding:var(--sp-3); border-radius:var(--r-sm);
  background:var(--surface-2); color:var(--dim); text-align:center; font-size:13px;
}
.vm-prize.win{ background:var(--gold-soft); color:var(--gold-hi); font-weight:750; border:1px solid var(--gold); }
.vm-ticket-card.win-card{ border-color:var(--gold); box-shadow:0 0 0 3px var(--gold-soft); }
.vm-ticket-card.lose-card{ opacity:.85; }
.vm-burst{ position:absolute; inset:0; pointer-events:none; overflow:hidden; }
.spark{
  --dx:0px; --dy:0px;   /* 运行时由 ggl.js 逐粒 span 覆写（JS 注入，非令牌缺失） */
  position:absolute; width:7px; height:7px; border-radius:var(--r-full);
  background:var(--gold); animation:nxBurst .9s var(--ease-out) forwards;
}
.spark.sad{ background:var(--line-strong); animation:nxSad .9s var(--ease-out) forwards; }
@keyframes nxBurst{ from{ transform:translate(0,0) scale(1); opacity:1; } to{ transform:translate(var(--dx),var(--dy)) scale(.2); opacity:0; } }
@keyframes nxSad{ from{ transform:translateY(0); opacity:1; } to{ transform:translateY(120px); opacity:0; } }
canvas.gcoat{ position:absolute; inset:0; touch-action:none; }

/* ── 9. 福利中心（welfare.js 生成）──────────────────────────────────── */
.wf-pointbar{
  font-size:13px; padding:var(--sp-3); border-radius:var(--r-sm);
  background:var(--brand-softer); border:1px solid var(--brand-line); margin-bottom:var(--sp-3);
}
.wf-tabs{ display:flex; flex-wrap:wrap; gap:var(--sp-1); margin-bottom:var(--sp-3); }
.wf-tab{
  cursor:pointer; padding:var(--sp-1) var(--sp-3);
  border:1px solid var(--line-soft); border-radius:var(--r-full);
  font-size:12px; font-weight:650; color:var(--dim);
  transition:all var(--dur-fast) var(--ease-standard);
}
.wf-tab.on{ background:var(--ink-strong); border-color:var(--ink-strong); color:#fff; }
.wf-pane{ max-height:56vh; overflow:auto; }
.wf-sign, .wf-row, .wf-faq{ padding:var(--sp-3) 0; border-bottom:1px dashed var(--line-soft); }
.wf-faq .wq{ font-weight:750; cursor:pointer; }
.wf-btn{ min-height:36px; padding:0 var(--sp-3); border-radius:var(--r-sm); border:1px solid var(--line); background:var(--card); font-size:12px; font-weight:650; cursor:pointer; }
.wf-btn:hover{ border-color:var(--brand-line); color:var(--brand-ink); }
.wr-name{ font-weight:750; }
.wr-n{ font-variant-numeric:tabular-nums; color:var(--gold-hi); font-weight:800; }
.vs-row{ display:flex; align-items:center; justify-content:space-between; gap:var(--sp-2); padding:var(--sp-2) 0; border-bottom:1px dashed var(--line-soft); font-size:13px; }
.vs-num{ font-weight:800; font-variant-numeric:tabular-nums; }
.vs-low{ color:var(--red-ink); }
.vs-hint{ font-size:11px; color:var(--dim); margin-top:var(--sp-2); }
.vs-act{ min-height:32px; padding:0 var(--sp-3); border-radius:var(--r-sm); border:1px solid var(--line); background:var(--card); font-size:12px; cursor:pointer; }
.vs-shop{ padding:var(--sp-3); border:1px solid var(--line-soft); border-radius:var(--r-sm); background:var(--surface-2); }
.vs-shop-top{ display:flex; justify-content:space-between; gap:var(--sp-2); font-weight:750; }
.vs-shop-dist{ color:var(--brand-ink); font-size:12px; }
.vs-shop-addr{ font-size:12px; color:var(--dim); margin-top:2px; }
.dsh-data{ font-variant-numeric:tabular-nums; font-weight:750; }
.wa{ font-weight:800; }

/* ── 10. 客服 / 工单（service.js）───────────────────────────────────── */
.wo-row{ padding:var(--sp-2) 0; border-bottom:1px dashed var(--line-soft); font-size:13px; }
.wo-st{ margin:0 var(--sp-1); }
.kefu-fab{
  position:fixed; right:var(--sp-4); bottom:calc(var(--sp-6) + env(safe-area-inset-bottom,0px)); z-index:60;
  width:52px; height:52px; border-radius:var(--r-full);
  background:var(--ink-strong); color:#fff; font-size:20px;
  display:flex; align-items:center; justify-content:center; cursor:pointer;
  box-shadow:var(--shadow-lg); border:0;
}
.kefu-dot{ position:absolute; top:4px; right:4px; width:10px; height:10px; border-radius:var(--r-full); background:var(--red); }
.kefu-panel{
  position:fixed; right:var(--sp-4); bottom:calc(var(--sp-9) + env(safe-area-inset-bottom,0px)); z-index:60;
  width:320px; max-height:70vh; display:none; flex-direction:column;
  background:var(--card); border:1px solid var(--line); border-radius:var(--r-md);
  box-shadow:var(--shadow-lg); overflow:hidden;
}
.kefu-panel[style*="flex"], .kefu-panel.show{ display:flex; }
.kefu-head{ display:flex; align-items:center; justify-content:space-between; padding:var(--sp-3); border-bottom:1px solid var(--line-soft); font-weight:800; }
.kefu-msgs{ flex:1; overflow-y:auto; padding:var(--sp-3); display:flex; flex-direction:column; gap:var(--sp-2); min-height:200px; }
.kefu-msg{ display:flex; }
.kefu-msg.agent{ justify-content:flex-start; }
.kefu-msg.user{ justify-content:flex-end; }
.dsh-msg-bubble{
  max-width:78%; padding:var(--sp-2) var(--sp-3); border-radius:var(--r-md);
  background:var(--surface-2); font-size:13px; line-height:1.7;
}
.kefu-msg.user .dsh-msg-bubble{ background:var(--ink-strong); color:#fff; }
.kefu-sys{ text-align:center; color:var(--dim); font-size:11px; }
.kf-who{ font-size:10px; color:var(--dim); margin-bottom:2px; }
.kf-who-ai{ color:var(--brand-ink); }
.kefu-input{ display:flex; gap:var(--sp-2); padding:var(--sp-2); border-top:1px solid var(--line-soft); }

/* ── 11. 用户 / 商城 / 支付（user.js 生成）──────────────────────────── */
.user-info{ font-size:13px; }
.uc-card{
  background:var(--card); border:1px solid var(--line-soft);
  border-radius:var(--r-md); padding:var(--sp-5);
}
.uc-head{ display:flex; align-items:center; gap:var(--sp-3); margin-bottom:var(--sp-3); }
.uc-avatar{
  width:56px; height:56px; border-radius:var(--r-full);
  background:var(--brand-soft); color:var(--brand-ink);
  display:flex; align-items:center; justify-content:center;
  font-size:22px; font-weight:800; cursor:pointer; overflow:hidden;
}
.uc-name{ font-size:17px; font-weight:800; }
.uc-role{ font-size:12px; color:var(--dim); }
.uc-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(130px,1fr)); gap:var(--sp-2); margin:var(--sp-3) 0; }
.uc-chip{
  min-height:42px; padding:0 var(--sp-3);
  border:1px solid var(--line-soft); border-radius:var(--r-sm);
  background:var(--surface-2); color:var(--ink); font-size:13px; font-weight:650; cursor:pointer;
  transition:all var(--dur-fast) var(--ease-standard);
}
.uc-chip:hover{ border-color:var(--brand-line); color:var(--brand-ink); }
.uc-chip.hot{ background:var(--ink-strong); border-color:var(--ink-strong); color:#fff; }
.ui-row{ display:flex; justify-content:space-between; gap:var(--sp-2); padding:var(--sp-2) 0; border-bottom:1px dashed var(--line-soft); font-size:13px; }
.auth-tip{ font-size:12px; color:var(--dim); margin-top:var(--sp-2); }
.auth-form{ margin:var(--sp-3) 0; }
.staff-badge, .vip-badge{ margin-left:var(--sp-1); }
.shop-goods{ display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:var(--sp-2); margin:var(--sp-3) 0; }
.sg-cover{ width:100%; border-radius:var(--r-sm); aspect-ratio:16/10; object-fit:cover; background:var(--surface-2); }
.sg-name{ font-weight:750; font-size:13px; }
.sg-tag{ font-size:10px; font-weight:800; color:var(--brand-ink); background:var(--brand-soft); border-radius:var(--r-sm); padding:0 var(--sp-1); margin-right:var(--sp-1); }
.sg-buy{
  width:100%; min-height:34px; margin-top:var(--sp-2);
  border:0; border-radius:var(--r-sm);
  background:var(--ink-strong); color:#fff; font-size:12px; font-weight:750; cursor:pointer;
}
.sg-buy:hover{ transform:translateY(-1px); }
.dsh-card{ background:var(--card); border:1px solid var(--line-soft); border-radius:var(--r-md); }
.dsh-card-pad{ padding:var(--sp-4); }
.dsh-card-pad-lg{ padding:var(--sp-5); }
.dsh-card-head{ display:flex; align-items:center; justify-content:space-between; gap:var(--sp-2); margin-bottom:var(--sp-2); }
.dsh-card-title{ font-size:15px; font-weight:800; }
.dsh-card-body{ font-size:13px; }

/* ── 12. 弹窗（底部 Sheet → 桌面居中卡）─────────────────────────────── */
.modal-mask{
  position:fixed; inset:0; z-index:100;
  display:flex; align-items:flex-end; justify-content:center;
  background:var(--overlay);
  opacity:0; visibility:hidden;
  transition:opacity var(--dur) var(--ease-standard), visibility var(--dur);
  padding:0;
}
.modal-mask.show{ opacity:1; visibility:visible; }
.modal{
  position:relative; width:100%; max-width:100%; max-height:86dvh; overflow-y:auto;
  background:var(--card); color:var(--ink);
  border:1px solid var(--line-soft); border-bottom:0;
  border-radius:var(--r-lg) var(--r-lg) 0 0;
  padding:var(--sp-5) var(--sp-5) var(--sp-6);
  transform:translateY(6%);
  transition:transform var(--dur) var(--ease-out);
}
.modal-mask.show .modal{ transform:translateY(0); }
.modal::before{
  content:''; display:block; width:40px; height:4px; margin:0 auto var(--sp-4);
  border-radius:var(--r-full); background:var(--line-strong);
}
.modal-mask.show .modal::before{ display:block; }
.modal .tag{
  display:inline-block; font-size:10px; font-weight:800; letter-spacing:.18em;
  color:var(--dim-2); margin-bottom:var(--sp-2);
}
.modal h3{ font-size:20px; margin-bottom:var(--sp-3); padding-right:44px; }
.modal h4{ font-size:14px; margin:var(--sp-3) 0 var(--sp-1); }
.modal-text{ font-size:14px; line-height:1.8; }
.modal-text p{ margin:0 0 var(--sp-2); }
.modal-close{
  position:absolute; top:var(--sp-3); right:var(--sp-4);
  width:34px; height:34px; border-radius:var(--r-full);
  border:1px solid var(--line-soft); background:var(--surface-2);
  color:var(--dim); font-size:15px; line-height:1; cursor:pointer;
  display:inline-flex; align-items:center; justify-content:center;
  transition:all var(--dur-fast) var(--ease-standard);
}
.modal-close:hover{ color:var(--ink); border-color:var(--line); }
.dsh-modal-mask{ display:flex; }
.dsh-modal-mask[hidden]{ display:none; }
.dsh-modal-sm{ max-width:380px; }
.dsh-modal-lg{ max-width:640px; }
@media (min-width:768px){
  .modal-mask{ align-items:center; padding:var(--sp-5); }
  .modal{
    max-width:520px; max-height:84dvh;
    border-radius:var(--r-md); border-bottom:1px solid var(--line-soft);
    transform:translateY(8px) scale(.98);
    box-shadow:var(--shadow-lg);
  }
  .modal-mask.show .modal{ transform:translateY(0) scale(1); }
  .modal::before{ display:none; }
  .dsh-modal-lg{ max-width:680px; }
}

/* toast：顶部居中票据条 */
.toast{
  position:fixed; top:var(--sp-4); left:50%; transform:translate(-50%,-16px);
  z-index:200; max-width:min(92vw,480px);
  background:var(--ink-strong); color:#fff;
  border-left:3px solid var(--gold);
  padding:var(--sp-2) var(--sp-4); border-radius:var(--r-sm);
  font-size:13px; font-weight:600;
  opacity:0; visibility:hidden; pointer-events:none;
  transition:all var(--dur) var(--ease-standard);
  box-shadow:var(--shadow-lg);
}
.toast.show{ opacity:1; visibility:visible; transform:translate(-50%,0); }

/* ── 13. 登录 / 用户中心整页（票据式构图）───────────────────────────── */
.page{ display:none; min-height:100dvh; background:var(--bg); position:relative; z-index:1; }
.pg-top{
  display:flex; align-items:center; gap:var(--sp-3);
  padding:var(--sp-3) var(--sp-4);
  border-bottom:1px solid var(--line-soft);
  background:var(--surface-2);
}
.pg-back{ appearance:none; border:0; background:none; color:var(--dim); font-size:13px; font-weight:650; cursor:pointer; min-height:36px; }
.pg-back:hover{ color:var(--brand-ink); }
.pg-brand{ font-size:12px; font-weight:800; letter-spacing:.14em; color:var(--dim); }
.pg-sp{ flex:1; }
.pg-body{ max-width:880px; margin:0 auto; padding:var(--sp-6) var(--sp-4) var(--sp-8); }
.lp-wrap{ display:grid; grid-template-columns:1fr; gap:var(--sp-5); align-items:center; }
.lp-hero{
  text-align:center; padding:var(--sp-6) var(--sp-4);
  border:1px solid var(--line-soft); border-radius:var(--r-md);
  background:linear-gradient(180deg, var(--brand-softer), var(--surface-2));
  position:relative; overflow:hidden;
}
.lp-hero-logo{
  width:64px; height:64px; margin:0 auto var(--sp-3);
  border-radius:var(--r-md); background:var(--ink-strong); color:#fff;
  display:flex; align-items:center; justify-content:center;
  font-size:30px; font-weight:800; font-family:serif;
  overflow:hidden;
}
/* 登录/注册页 logo 改为真图（2026-10-15 用户「有一个 logo 没有替换」）：
   此处原先是文字「晖」（旧品牌字），现换成与全站一致的 /assets/logo.svg。 */
.lp-hero-logo img{ width:100%; height:100%; object-fit:cover; display:block; border-radius:inherit; }
.lp-hero-name{ font-size:26px; font-weight:800; letter-spacing:.14em; }
.lp-hero-rule{ display:flex; align-items:center; gap:var(--sp-3); margin:var(--sp-3) auto; max-width:320px; }
.lp-hero-rule i{ flex:1; height:1px; background:var(--line); }
.lp-hero-rule span{ font-size:11px; letter-spacing:.5em; text-indent:.5em; color:var(--dim); font-weight:700; }
.lp-hero-slogan{ font-size:13px; color:var(--ink); }
.lp-hero-foot{ margin-top:var(--sp-3); font-size:11px; color:var(--dim-2); }
.lp-card{
  position:relative; max-width:420px; width:100%; margin:0 auto;
  background:var(--card); border:1px solid var(--line);
  border-radius:var(--r-md); padding:var(--sp-6) var(--sp-5);
  box-shadow:var(--shadow-md);
}
.lp-notch{
  position:absolute; top:-7px; left:50%; transform:translateX(-50%);
  width:56px; height:14px; border-radius:var(--r-full);
  background:var(--bg); border:1px solid var(--line);
}
.lp-logo{ display:none; }
.lp-title{ font-size:20px; font-weight:800; text-align:center; letter-spacing:.1em; }
.lp-sub{ text-align:center; font-size:12px; color:var(--dim); margin:var(--sp-1) 0 var(--sp-4); }
.lp-tabs{
  display:flex; gap:var(--sp-1);
  border:1px solid var(--line-soft); border-radius:var(--r-sm);
  background:var(--surface-2); padding:var(--sp-1); margin-bottom:var(--sp-4);
}
.lp-tab{
  flex:1; text-align:center; min-height:36px; line-height:36px;
  border-radius:var(--r-sm); font-size:13px; font-weight:700; color:var(--dim);
  cursor:pointer; transition:all var(--dur-fast) var(--ease-standard);
}
.lp-tab.on{ background:var(--ink-strong); color:#fff; }
/* user.js authSwitch 会把标签 className 整体改写为 .auth-tab（覆盖 lp-tab），两套都要有样式 */
.auth-tab{
  flex:1; text-align:center; min-height:36px; line-height:36px;
  border-radius:var(--r-sm); font-size:13px; font-weight:700; color:var(--dim);
  cursor:pointer; transition:all var(--dur-fast) var(--ease-standard);
}
.auth-tab.on{ background:var(--ink-strong); color:#fff; }
.lp-form .dsh-field{ margin-bottom:var(--sp-3); }
.lp-code-row{ display:flex; gap:var(--sp-2); margin-bottom:var(--sp-3); }
.lp-getcode{ flex:none; }
.lp-btn{ min-height:48px; font-size:15px; }
.lp-tip{ text-align:center; }
.lp-foot{ text-align:center; }
.uc-card + .uc-card{ margin-top:var(--sp-4); }
.uc-card .nx-panel-head{ margin-bottom:var(--sp-2); }

/* ── 14. pkg-rounds 注入物 ───────────────────────────────────────────── */
.bottom-nav{ display:none; }   /* 移动 Dock 由 .tabs 承担，避免双导航 */
.fortune-chip{
  font-size:12px; color:var(--dim);
  border:1px dashed var(--line); border-radius:var(--r-sm);
  background:var(--surface-2); padding:var(--sp-2) var(--sp-3);
  margin:0 0 var(--sp-3);
}
.fortune-chip b{ color:var(--brand-ink); }
.onb-mask{
  position:fixed; inset:0; z-index:150; display:flex; align-items:center; justify-content:center;
  background:var(--overlay); opacity:0; visibility:hidden; transition:opacity var(--dur) var(--ease-standard), visibility var(--dur);
  padding:var(--sp-4);
}
.onb-mask.show{ opacity:1; visibility:visible; }
.onb-box{
  width:100%; max-width:400px; background:var(--card);
  border:1px solid var(--line-soft); border-radius:var(--r-md);
  padding:var(--sp-6) var(--sp-5); text-align:center; box-shadow:var(--shadow-lg);
}
.onb-emoji{ font-size:44px; }
.cfm-mask{
  position:fixed; inset:0; z-index:160; display:flex; align-items:center; justify-content:center;
  background:var(--overlay); opacity:0; visibility:hidden; transition:opacity var(--dur-fast) var(--ease-standard), visibility var(--dur-fast);
}
.cfm-mask.show{ opacity:1; visibility:visible; }
.cfm-box{
  width:100%; max-width:320px; background:var(--card);
  border:1px solid var(--line-soft); border-radius:var(--r-md);
  padding:var(--sp-5); box-shadow:var(--shadow-lg);
}
.cfm-box h4{ font-size:15px; }
.cfm-box p{ font-size:13px; color:var(--dim); }
.cfm-btns{ display:flex; gap:var(--sp-2); margin-top:var(--sp-4); }
.cfm-btns button{ flex:1; min-height:40px; border-radius:var(--r-sm); border:1px solid var(--line); background:var(--card); font-size:13px; font-weight:700; cursor:pointer; }
.cfm-ok{ background:var(--ink-strong) !important; border-color:var(--ink-strong) !important; color:#fff; }
.notify-mask{
  position:fixed; inset:0; z-index:110; display:flex; align-items:center; justify-content:center;
  background:var(--overlay); opacity:0; visibility:hidden; transition:opacity var(--dur-fast) var(--ease-standard), visibility var(--dur-fast);
}
.notify-mask.show{ opacity:1; visibility:visible; }
.legal-box{
  width:100%; max-width:360px; background:var(--card);
  border:1px solid var(--line-soft); border-radius:var(--r-md);
  padding:var(--sp-5); max-height:70dvh; overflow:auto;
}
.notify-item{ padding:var(--sp-2) 0; border-bottom:1px dashed var(--line-soft); font-size:13px; }
.notify-item .nt{ font-weight:750; }
.notify-item .nd{ color:var(--dim); font-size:12px; }
.notify-item.unread .nt::before{ content:''; display:inline-block; width:6px; height:6px; border-radius:var(--r-full); background:var(--red); margin-right:var(--sp-1); vertical-align:2px; }
.splash-mask{
  position:fixed; inset:0; z-index:300; display:flex; align-items:center; justify-content:center;
  background:var(--bg); opacity:1; visibility:visible; transition:opacity .4s var(--ease-standard), visibility .4s;
}
.splash-mask:not(.show){ opacity:0; visibility:hidden; }
.ad-slot{ margin:var(--sp-3) 0; }
.ad-banner{
  border:1px dashed var(--line); border-radius:var(--r-sm);
  padding:var(--sp-3); text-align:center; font-size:13px; color:var(--dim);
  display:flex; flex-direction:column; gap:2px;
}
.ad-tag{ font-size:10px; letter-spacing:.14em; color:var(--dim-2); }
.cmp-table{ width:100%; border-collapse:collapse; font-size:12px; }
.cmp-table td{ padding:var(--sp-1) var(--sp-2); border-bottom:1px dashed var(--line-soft); }
.site-disclaimer{ font-size:11px; color:var(--dim-2); text-align:center; }
.lh{ color:var(--brand-ink); }
.nd, .nt{ min-width:0; }
.streak-bar{ height:8px; border-radius:var(--r-full); background:var(--surface-3); overflow:hidden; }
.streak-bar i{ display:block; height:100%; background:var(--gold); }
.qr-card{ margin:0 auto var(--sp-4); max-width:760px; }
.sponsor-fold{
  border:1px solid var(--line-soft); border-radius:var(--r-sm);
  background:var(--surface-2); padding:var(--sp-2) var(--sp-3); cursor:pointer;
}
.sf-head{ display:flex; align-items:center; justify-content:space-between; font-size:12px; font-weight:800; letter-spacing:.08em; color:var(--dim); }
.sf-body{ margin-top:var(--sp-2); }
.foot-links{ display:flex; justify-content:center; flex-wrap:wrap; gap:var(--sp-2); margin:var(--sp-4) 0 var(--sp-2); }
.ver-note, .geo-note{ text-align:center; font-size:11px; color:var(--dim-2); }
.nx-foot{
  border-top:1px solid var(--line-soft);
  padding:var(--sp-4) var(--sp-5) calc(var(--sp-6) + env(safe-area-inset-bottom,0px));
  margin-top:auto; background:var(--surface-2);
}

/* ── 15. 助手 / 看板娘快捷入口 / 分享 ───────────────────────────────── */
.mascot-fab{
  position:fixed; left:var(--sp-4); bottom:calc(var(--sp-6) + env(safe-area-inset-bottom,0px)); z-index:60;
  width:46px; height:46px; border-radius:var(--r-full);
  border:1px solid var(--line-soft); background:var(--card);
  font-size:20px; cursor:pointer; box-shadow:var(--shadow-md);
}
.mascot{
  position:fixed; left:var(--sp-4); bottom:calc(var(--sp-9) + env(safe-area-inset-bottom,0px)); z-index:60;
  width:220px; background:var(--card); border:1px solid var(--line-soft);
  border-radius:var(--r-md); box-shadow:var(--shadow-lg); overflow:hidden;
}
.mascot-head{ display:flex; align-items:center; justify-content:space-between; padding:var(--sp-2) var(--sp-3); font-weight:800; font-size:13px; border-bottom:1px solid var(--line-soft); }
.mascot-x{ appearance:none; border:0; background:none; color:var(--dim); font-size:14px; cursor:pointer; }
.mascot-body{ padding:var(--sp-3); text-align:center; font-size:12px; color:var(--dim); }
.mascot-acts{ display:flex; border-top:1px solid var(--line-soft); }
.mascot-acts button{ flex:1; min-height:38px; border:0; background:none; font-size:12px; font-weight:650; cursor:pointer; color:var(--brand-ink); }
.mascot-acts button + button{ border-left:1px solid var(--line-soft); }
.share-img{ width:100%; border-radius:var(--r-sm); border:1px solid var(--line-soft); }
.qqcard{
  display:flex; align-items:center; gap:var(--sp-3);
  border:1px solid var(--line-soft); border-radius:var(--r-md);
  padding:var(--sp-3); margin:var(--sp-3) 0;
  transition:border-color var(--dur-fast) var(--ease-standard);
}
.qqcard:hover{ border-color:var(--brand-line); }
.qqavatar-wrap{ width:52px; height:52px; border-radius:var(--r-full); overflow:hidden; flex:none; }
.qqcard-txt b{ display:block; }
.qqcard-txt span{ font-size:12px; color:var(--dim); }
.thanks{ font-size:11px; letter-spacing:.2em; color:var(--gold-hi); font-weight:800; text-align:center; margin-top:var(--sp-2); }
.small{ font-size:12px; }

/* ── 16. 响应式（Wise 断点：<768 / 768-1023 / ≥1024）────────────────── */
@media (max-width:1023px){
  .nx-shell{ display:block; }
  .nx-side{ display:none; }   /* 移动端：品牌并入 nx-top，导航沉底为 Dock */
  .nx-nav{
    position:fixed; left:0; right:0; bottom:0; z-index:50;
    flex-direction:row; justify-content:space-around;
    background:color-mix(in srgb, var(--card) 92%, transparent);
    backdrop-filter:blur(12px);
    border-top:1px solid var(--line-soft); border-radius:0;
    padding:var(--sp-1) var(--sp-1) calc(var(--sp-1) + env(safe-area-inset-bottom,0px));
    gap:0;
  }
  .tab{
    flex:1; flex-direction:column; gap:2px; min-height:52px;
    padding:var(--sp-1); border-radius:var(--r-sm);
    font-size:11px; justify-content:center;
  }
  .tab.on::before{ display:none; }
  .tab .nx-i{ width:19px; height:19px; }
  .nx-side-sec, .nx-side-note, .nx-side-foot{ display:none; }
  .nx-top{ display:flex; }
  .nx-content{ padding:var(--sp-4) var(--sp-3) calc(var(--sp-10) + env(safe-area-inset-bottom,0px)); }
  .nx-duo, .nx-console{ grid-template-columns:1fr; }
  .nx-view-head h1{ font-size:20px; }
  .nx-foot{ padding-bottom:calc(var(--sp-10) + env(safe-area-inset-bottom,0px)); }
}
@media (max-width:480px){
  .nx-content{ padding-left:var(--sp-3); padding-right:var(--sp-3); }
  .nx-panel{ padding:var(--sp-3); }
  .vr-tile{ width:52px; height:52px; }
  .vr-tile .vr-num{ font-size:20px; }
  .game-btn{ min-width:64px; }
  .st-tr{ grid-template-columns:1.2fr .9fr 1fr 1fr; font-size:12px; }
  .fg-cell{ width:34px; height:34px; }
  .cal-cell{ min-height:40px; }
  .nx-clock small{ display:none; }
  .mascot-fab{ bottom:calc(var(--sp-12) + env(safe-area-inset-bottom,0px)); left:var(--sp-3); }
  .kefu-fab{ bottom:calc(var(--sp-12) + env(safe-area-inset-bottom,0px)); right:var(--sp-3); }
}
@media (min-width:1024px){
  .nx-top{ display:none; }
}
@media (prefers-reduced-motion:reduce){
  *, *::before, *::after{ animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; }
  html{ scroll-behavior:auto; }
}

/* 一屏不滚动（2026-10-14 用户「不想让用户滑动」）：底部合规声明条在壳层之外占一行，
   桌面端壳层按这一行减掉，避免固定 18px 溢出滚动条。 */
.site-disclaimer{ min-height:18px; }
@media (min-width:1024px){
  .nx-shell{ min-height:calc(100dvh - 18px); }
  .nx-main{ min-height:calc(100dvh - 18px); }
  .nx-side{ height:calc(100dvh - 18px); }
}

/* 会员商城：商品行（2026-10-14 修补）——
   v3 重写时漏了 .sg-row/.sg-body/.vu-shop-desc，商品在面板里挤成一条竖排文字，
   现按工作台语言补齐（行卡 + 4px 网格 + 令牌色）。 */
.sg-row{
  display:grid; grid-template-columns:84px minmax(0,1fr) auto; align-items:center; gap:var(--sp-3);
  padding:var(--sp-3); border:1px solid var(--line-soft); border-radius:var(--r-sm);
  background:var(--card); margin-bottom:var(--sp-2);
}
.sg-row.no-cover, .sg-row:not(.has-cover){ grid-template-columns:minmax(0,1fr) auto; }
.sg-cover{ width:84px; height:60px; border-radius:var(--r-sm); object-fit:cover; }
.sg-body{ min-width:0; }
.sg-name{ display:flex; align-items:center; gap:6px; flex-wrap:wrap; font-weight:700; color:var(--ink); font-size:14px; }
.sg-name small, .vu-shop-desc{ display:block; width:100%; margin-top:4px; font-weight:400; font-size:12px; color:var(--dim); line-height:1.6; }
.sg-buy{ flex:none; white-space:nowrap; }

/* ==========================================================================
   手机端补强（2026-10-15 · 用户反馈「手机端浏览有问题 / 摇一摇够不到 / 公告栏不好看 / 客服没气泡」）
   实测 360×640：摇号页整页 1249px，摇一摇按钮落在 y=794（屏外 ~150px），必须下滑才点得到。
   目标：一屏放得下（按钮回到屏内）；顺带补齐手机端「更多功能」抽屉与公告板版式。
   ========================================================================== */
@media (max-width:1023px){
  /* 顶栏登录/用户徽标：从侧栏搬来后保持可点、不挤掉工具按钮 */
  .nx-top-tools .nx-side-foot{ display:flex; align-items:center; gap:var(--sp-1); margin-right:var(--sp-1); }
  .nx-top-tools .nx-side-foot .nx-auth{ white-space:nowrap; }
  .nx-top-tools .nx-staff{ display:none; }        /* 手机顶栏窄，身份徽标让位 */
  .nx-topbtn.nx-more{ display:inline-flex; }
  /* 「更多功能」底部抽屉：服务组 + 声明 */
  .nx-sheet{
    position:fixed; inset:0; z-index:120; background:var(--overlay, rgba(20,30,40,.45));
    display:flex; align-items:flex-end; opacity:0; visibility:hidden;
    transition:opacity var(--dur-fast) var(--ease-standard), visibility var(--dur-fast);
  }
  .nx-sheet.show{ opacity:1; visibility:visible; }
  .nx-sheet-head{
    display:flex; align-items:center; justify-content:space-between;
    padding:var(--sp-3) var(--sp-4) var(--sp-2); font-size:15px; color:var(--ink-strong);
    border-bottom:1px solid var(--line-soft);
  }
  .nx-sheet-close{ appearance:none; border:0; background:none; font-size:18px; color:var(--dim); cursor:pointer; }
  .nx-sheet-body{
    background:var(--card); border-radius:var(--r-lg) var(--r-lg) 0 0; width:100%;
    max-height:76vh; overflow-y:auto;
    padding-bottom:calc(var(--sp-4) + env(safe-area-inset-bottom,0px));
    transform:translateY(12px); transition:transform var(--dur) var(--ease-out);
  }
  .nx-sheet.show .nx-sheet-body{ transform:translateY(0); }
  /* 抽屉里的服务组：三列格子铺开，触控目标 ≥48px */
  .nx-sheet-body .nx-side-sec{ display:block; padding:var(--sp-3) var(--sp-4) 0; }
  .nx-sheet-body .nx-side-label{ font-size:11px; color:var(--dim); margin-bottom:var(--sp-2); }
  .nx-sheet-body .nx-services{ display:grid; grid-template-columns:repeat(3,1fr); gap:var(--sp-2); }
  .nx-sheet-body .nx-svc{ min-height:56px; border-radius:var(--r-md); }
  .nx-sheet-body .nx-side-note{ display:block; padding:var(--sp-3) var(--sp-4) 0; }
  .nx-sheet-body .nx-side-note p{ font-size:11.5px; color:var(--dim); line-height:1.7; margin:0; }
  .nx-sheet-tip{
    margin:var(--sp-3) var(--sp-4) 0; padding-top:var(--sp-3);
    border-top:1px solid var(--line-soft);
    font-size:11.5px; color:var(--dim); text-align:center;
  }
}
/* 摇一摇提示（触屏设备才注入） */
.shake-hint{
  margin-top:var(--sp-2); text-align:center;
  font-size:12px; color:var(--dim);
}
@media (max-width:480px){
  /* ① 顶栏瘦身：只留 logo + 登录 + 更多 + 工具，隐藏时钟与品牌文字（360px 下否则竖排折行） */
  .nx-top{ gap:var(--sp-1); }
  .nx-top-brand b{ display:none; }
  .nx-top-tools .nx-clock{ display:none; }
  .nx-top-tools .nx-side-foot .nx-auth{ padding:0 10px; font-size:12px; }
  /* ② 今日运势条在手机上隐藏：同一信息在「命盘」面板有完整版，且它占 40+px 会把摇一摇顶出屏幕 */
  .fortune-chip{ display:none; }
  /* ③ 摇号页压进一屏：逐块收紧（页头 / 彩种格 / 号码屏 / 按钮 / 提示） */
  .nx-view-head{ padding:0 0 var(--sp-1) var(--sp-3); }
  .nx-view-head h1{ font-size:19px; line-height:1.2; }
  .nx-view-head p{ font-size:11.5px; margin-top:2px; line-height:1.5;
    display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
  .fortune-chip{ font-size:11.5px; padding:6px 10px; margin-bottom:var(--sp-2);
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .nx-panel{ padding:var(--sp-3); }
  .nx-console.nx-console-solo .nx-console-main{ gap:var(--sp-2); }
  .nx-panel-head{ margin-bottom:var(--sp-2); }
  .nx-panel-head h2{ font-size:15px; }
  .game-btn{ min-width:58px; padding:6px 6px; font-size:12px; }
  .game-btn small{ font-size:9.5px; }
  .mode-row{ margin:var(--sp-2) 0 0; gap:6px; }
  .mode-chip{ min-height:30px; padding:0 10px; font-size:12px; }
  .play-note{ display:none; }
  .screen{ min-height:100px; padding:var(--sp-3); margin-bottom:var(--sp-2); gap:var(--sp-2); }
  .placeholder-txt{ font-size:12px; }
  .go-btn{ width:100%; min-width:0; min-height:46px; }
  .act-row{ gap:6px; margin-top:var(--sp-2); }
  .ref-btn{ min-height:32px; padding:0 10px; font-size:12px; }
  .hint{ margin-top:var(--sp-2); font-size:11.5px; min-height:0; line-height:1.5; }
  /* 公告板：手机上更大字号、更高列表 */
  .nb-list{ max-height:64vh; gap:10px; }
  .nb-item{ padding:11px 12px; }
  .nb-item .date{ font-size:10.5px; }
  .nb-item .title{ font-size:13.5px; }
  .nb-item .desc{ font-size:12px; }
}
/* 抽屉里的服务组在宽屏不显示（节点已搬回，这里只是兜底） */
@media (min-width:1024px){
  .nx-sheet{ display:none !important; }
  .nx-topbtn.nx-more{ display:none !important; }
}

/* ── 客服气泡：补描边与兜底色，任何主题/缓存异常下都能看出是气泡 ── */
.dsh-msg-bubble{
  border:1px solid var(--line-soft, rgba(0,0,0,.08));
  background:var(--surface-2, #eef1f6);
}
.kefu-msg.user .dsh-msg-bubble{ border-color:transparent; }
.kefu-msg.kf-agent .dsh-msg-bubble{ border-color:var(--gold, #d9b26a); }

/* ── 公告板条目：左侧时间轴 + 单调排版（原先 74 条平铺，日期/标题/描述层级不明显）── */
.nb-list{ position:relative; }
.nb-item{ position:relative; padding-left:16px; }
.nb-item::before{
  content:''; position:absolute; left:5px; top:16px; width:6px; height:6px; border-radius:50%;
  background:var(--brand, #2E62D8); box-shadow:0 0 0 3px var(--brand-soft, rgba(46,98,216,.12));
}
.nb-item::after{
  content:''; position:absolute; left:7.5px; top:24px; bottom:-10px; width:1px;
  background:var(--line-soft, rgba(0,0,0,.08));
}
.nb-item:last-child::after{ display:none; }
.nb-group{
  font-size:11px; color:var(--dim); letter-spacing:.06em;
  margin:6px 0 -2px; padding-left:16px; font-weight:700;
}
.nb-item .desc{ display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }

/* ==========================================================================
   手机端重做（2026-10-15 · 用户「底部导航栏呢？手机端重新设计排版」）
   --------------------------------------------------------------------------
   根因：主导航 .nx-nav 是 .nx-side 的子元素，≤1023px 时 .nx-side{display:none}
   把「固定定位」的 Dock 一并隐藏（display:none 的祖先无法被 position:fixed 逃逸），
   手机端从来没有真正的底部导航栏。nav-mobile.js 已把 .nx-nav 移到 body 下，
   这里负责底部导航栏本体 + 手机端排版重排。
   ========================================================================== */
@media (max-width:1023px){
  /* ── 底部导航栏（Dock）：5 格 = 摇号 / 开奖 / AI 推荐 / 命盘 / 更多 ── */
  body > .nx-nav{
    position:fixed; left:0; right:0; bottom:0; z-index:70;
    display:flex; flex-direction:row; align-items:stretch;
    background:color-mix(in srgb, var(--card) 94%, transparent);
    -webkit-backdrop-filter:blur(14px); backdrop-filter:blur(14px);
    border-top:1px solid var(--line-soft);
    box-shadow:0 -6px 18px rgba(21,34,45,.06);
    padding:var(--sp-1) var(--sp-1) calc(var(--sp-1) + env(safe-area-inset-bottom,0px));
    gap:2px;
  }
  body > .nx-nav .tab,
  body > .nx-nav .nx-dock-more{
    position:relative;
    flex:1 1 0; min-width:0;
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:3px;
    min-height:52px; padding:var(--sp-1) 2px;
    border:0; background:none; border-radius:var(--r-md);
    font:inherit; font-size:11px; font-weight:600; line-height:1.1;
    color:var(--dim); cursor:pointer;
    -webkit-tap-highlight-color:transparent;
    transition:color var(--dur-fast) var(--ease-standard), background var(--dur-fast) var(--ease-standard);
  }
  body > .nx-nav .tab .nx-i,
  body > .nx-nav .nx-dock-more .nx-i{ width:20px; height:20px; }
  body > .nx-nav .tab.on{
    color:var(--brand-ink, var(--brand));
    background:var(--brand-soft, rgba(41,102,224,.12));
  }
  body > .nx-nav .tab.on .nx-i{ color:var(--brand); }
  body > .nx-nav .tab.on::before{ display:none; }     /* 覆盖桌面左竖条指示器 */
  /* 网点收进「更多」抽屉，Dock 固定 5 格 */
  body > .nx-nav .tab[data-view="shop"]{ display:none; }

  /* 抽屉里的「导航」组与「服务」组同版式 */
  .nx-sheet-body-sec{ display:block; padding:var(--sp-3) var(--sp-4) 0; }
  .nx-sheet-body-sec .nx-services{ display:grid; grid-template-columns:repeat(3,1fr); gap:var(--sp-2); }
  .nx-sheet-body-sec .nx-svc{ min-height:56px; border-radius:var(--r-md); }

  /* Dock 占位：内容/页脚/悬浮球都要让开，否则最后一行被 Dock 压住 */
  .nx-content{ padding-bottom:calc(76px + env(safe-area-inset-bottom,0px)); }
  .nx-foot{ padding-bottom:calc(76px + env(safe-area-inset-bottom,0px)); }
  .kefu-fab, .mascot-fab{ bottom:calc(80px + env(safe-area-inset-bottom,0px)); }

  /* 手机/平板顶栏不显示站点时钟（与系统状态栏重复，且挤占登录/公告按钮） */
  .nx-top-tools .nx-clock{ display:none; }
}

/* ── 手机排版重排（≤620px）：玩法 4 列网格、模式 3 列、动作 3 列，全部对齐 ── */
@media (max-width:620px){
  .nx-content{ padding-left:var(--sp-3); padding-right:var(--sp-3); }
  .nx-view-head{ padding:0 0 var(--sp-2) var(--sp-3); }
  .nx-view-head h1{ font-size:19px; }
  .nx-view-head .nx-head-act{ padding:0 10px; min-height:32px; font-size:12px; }
  .fortune-chip{
    font-size:11.5px; padding:6px 10px; margin-bottom:var(--sp-2);
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  }
  /* 玩法：4 列等宽网格（原来 5+3 参差换行） */
  .nx-segrow.game-row{ display:grid; grid-template-columns:repeat(4,1fr); gap:6px; }
  .game-btn{ min-width:0; width:auto; padding:8px 4px; text-align:center; }
  .game-btn small{ display:block; margin-top:2px; font-size:9.5px; }
  /* 模式：3 列等宽 */
  .mode-row{ display:grid; grid-template-columns:repeat(3,1fr); gap:6px; margin-top:var(--sp-2); }
  .mode-chip{ justify-content:center; min-height:34px; padding:0 6px; }
  /* 号码屏：手机端更紧凑，留白不再占满半屏 */
  .screen{ min-height:112px; padding:var(--sp-3); margin-bottom:var(--sp-2); }
  .go-btn{ width:100%; min-width:0; min-height:48px; }
  /* 动作条：3 列等宽（原来一行溢出，第三个按钮被切掉） */
  .act-row{ display:grid; grid-template-columns:repeat(3,1fr); gap:6px; margin-top:var(--sp-2); }
  .act-row .ref-btn{ width:100%; min-width:0; padding:0 6px; min-height:38px; font-size:12px; }
  .play-note{ display:none; }
  .hint{ margin-top:var(--sp-2); font-size:11.5px; min-height:0; line-height:1.5; }
  .nx-panel{ padding:var(--sp-3); }
  .nx-panel-head h2{ font-size:15px; }
  .nx-panel-head .nx-mini{ padding:0 8px; min-height:28px; font-size:11.5px; }
  /* 抽屉：手机端服务格子两列，触控目标更大 */
  .nx-sheet-body-sec .nx-services,
  .nx-sheet-body .nx-services{ grid-template-columns:repeat(3,1fr); }
}

/* ==========================================================================
   浮层兜底（2026-10-15）
   --------------------------------------------------------------------------
   用户反馈（手机端登录页）：「往下滑出现用户协议正文」「点《用户协议》没反应」。
   排查后是**同一个根因**：.legal-mask（以及 .notify-mask/.cfm-mask 等同类浮层）
   在全部样式表里**没有任何定义** —— 它们不是浮层，只是普通 div，
   内容被追加到 body 末尾后直接排在文档流里：点协议看起来"没打开"，
   往下滑就把整篇协议当正文看见了。
   这里给它们补上全屏遮罩 + 居中卡片（可滚动），并把卡片文案排版理顺。
   ========================================================================== */

.legal-mask, .notify-mask{
  position:fixed; inset:0; z-index:var(--z-modal,110);
  display:flex; align-items:center; justify-content:center;
  padding:var(--sp-4);
  background:var(--overlay, rgba(21,34,45,.42));
  opacity:0; visibility:hidden;
  transition:opacity var(--dur, .24s) var(--ease-out, ease), visibility var(--dur, .24s);
  overflow:auto; -webkit-overflow-scrolling:touch;
}
.legal-mask.show, .notify-mask.show{ opacity:1; visibility:visible; }
.legal-box{
  position:relative; width:100%; max-width:560px;
  max-height:86vh; overflow:auto; -webkit-overflow-scrolling:touch;
  background:var(--card); border:1px solid var(--line-soft);
  border-radius:var(--r-lg); padding:var(--sp-5) var(--sp-5) var(--sp-4);
  box-shadow:var(--shadow-lg);
  color:var(--ink); font-size:13.5px; line-height:1.85;
}
.legal-box h3{ margin:0 0 var(--sp-3); font-size:17px; font-weight:var(--fw-heavy); }
.legal-box .lh h4{ margin:var(--sp-4) 0 6px; font-size:14px; font-weight:var(--fw-bold); color:var(--ink-strong); }
.legal-box .lh h4:first-child{ margin-top:0; }
.legal-box .lh p{ margin:0 0 8px; }
.legal-box .modal-close{ position:absolute; right:10px; top:10px; }

/* 登录/注册页 logo 边缘"黑点"（2026-10-15 用户反馈）
   --------------------------------------------------------------------------
   容器 .lp-hero-logo/.lp-logo 原本铺了 --ink-strong（近黑）底色，
   而 logo 图是圆角透明底的 SVG —— 四角露出的深色底看起来就是"黑点/黑边没补齐"。
   改为透明底，圆角交给图片自身。 */
.lp-hero-logo, .lp-logo{ background:transparent !important; }
.lp-hero-logo img, .lp-logo img{ border-radius:var(--r-md); }

/* ==========================================================================
   统一细滚动条（2026-10-15 用户「滑动条不好看」）
   --------------------------------------------------------------------------
   浏览器默认滚动条在圆角卡片/深色弹层里又粗又亮，还会切断卡片圆角。
   全站统一为 6px 细条 + 半透明圆头滑块 + 透明轨道；Firefox 走
   scrollbar-width/scrollbar-color，Chromium 走 ::-webkit-scrollbar。
   弹层卡片内再细 1px，尽量不打断圆角观感。
   ========================================================================== */
*{ scrollbar-width:thin; scrollbar-color:rgba(21,34,45,.22) transparent; }
::-webkit-scrollbar{ width:6px; height:6px; }
::-webkit-scrollbar-track{ background:transparent; }
::-webkit-scrollbar-thumb{ background:rgba(21,34,45,.22); border-radius:999px; }
::-webkit-scrollbar-thumb:hover{ background:rgba(21,34,45,.34); }
::-webkit-scrollbar-corner{ background:transparent; }
.legal-box::-webkit-scrollbar, .nx-sheet-body::-webkit-scrollbar, #kefuMsgs::-webkit-scrollbar,
.modal::-webkit-scrollbar, #pageUC::-webkit-scrollbar, .nx-content::-webkit-scrollbar{ width:5px; }
/* 弹层内部滚动时不带动背后页面 */
.legal-box, .nx-sheet-body, .modal{ overscroll-behavior:contain; }

/* 客服悬浮球拖走后：位置由内联 left/top 控制，这里只做过渡与提升层级 */
.kefu-fab.fab-moved{ transition:left .18s var(--ease-out, ease), top .18s var(--ease-out, ease); z-index:65; }
.mascot-fab.fab-moved{ transition:left .18s var(--ease-out, ease), top .18s var(--ease-out, ease); z-index:65; }
