  :root{
    color-scheme:light;
    --bg:#F7F8FA; --card:#FFFFFF; --line:#E6E8EC; --ink:#111418; --mut:#6B7280;
    --blue:#2E5CFF; --blue-soft:#EEF2FF; --green:#178A50; --green-soft:#E7F6EE;
    --red:#D64545; --red-soft:#FDECEC; --radius:14px;
    /* Phase 19：把原先散落的硬编码白色/浅灰收进变量，深色模式整套替换 */
    --surface:#FFFFFF; --input-bg:#FFFFFF; --skel:#E9EDF2; --track:#EDF0F3;
    --tag-gray:#F1F2F4; --stat-bg:#F2F4F8; --bubble-bg:#F3F4F6; --soft-border:#C7D4FF;
    --red-border:#F2B8B8; --red-ink:#8A2B2B;
    --amber-soft:#FFF7E6; --amber-border:#F2C94C; --amber-ink:#7A5200;
    --toast-bg:#111418; --toast-ink:#FFFFFF;
    --chart-grid:#EDF0F3; --chart-dash:#9AA3AF;
    --select-arrow:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236B7280' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
    --bg-tex:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='96' viewBox='0 0 96 96'%3E%3Cg stroke='%232E5CFF' stroke-opacity='.07' fill='none'%3E%3Cpath d='M0 .5H96M.5 0V96M0 0L96 96M96 0L0 96'/%3E%3C/g%3E%3Ccircle cx='0' cy='0' r='2.4' fill='%232E5CFF' fill-opacity='.13'/%3E%3Ccircle cx='48' cy='48' r='1.7' fill='%232E5CFF' fill-opacity='.11'/%3E%3C/svg%3E");
  }
  /* Phase 19：深色模式（<html data-theme="dark">，页眉按钮切换，存 localStorage） */
  [data-theme="dark"]{
    color-scheme:dark;
    --bg:#0E1013; --card:#171A20; --line:#262C38; --ink:#EDF0F5; --mut:#9AA3B2;
    --bg-tex:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='96' viewBox='0 0 96 96'%3E%3Cg stroke='%238FA8FF' stroke-opacity='.10' fill='none'%3E%3Cpath d='M0 .5H96M.5 0V96M0 0L96 96M96 0L0 96'/%3E%3C/g%3E%3Ccircle cx='0' cy='0' r='2.4' fill='%238FA8FF' fill-opacity='.16'/%3E%3Ccircle cx='48' cy='48' r='1.7' fill='%238FA8FF' fill-opacity='.13'/%3E%3C/svg%3E");
    --blue-soft:#1C2748; --green-soft:#10301F; --red-soft:#381D1D;
    --surface:#1E232E; --input-bg:#1E232E; --skel:#222836; --track:#222836;
    --tag-gray:#222836; --stat-bg:#1E232E; --bubble-bg:#1E232E; --soft-border:#33406B;
    --red-border:#6E3434; --red-ink:#F0A8A8;
    --amber-soft:#33290F; --amber-border:#8A6D1F; --amber-ink:#EFC65C;
    --toast-bg:#EDF0F5; --toast-ink:#111418;
    --chart-grid:#222836; --chart-dash:#5B6577;
    --select-arrow:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%239AA3B2' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  }
  [data-theme="dark"] .card{box-shadow:none}
  .theme-btn .ic-sun{display:none}
  [data-theme="dark"] .theme-btn .ic-sun{display:block}
  [data-theme="dark"] .theme-btn .ic-moon{display:none}
  *{box-sizing:border-box; -webkit-tap-highlight-color:transparent}
  b,strong{font-weight:600}
  h1,h2,h3{font-weight:600}
  :focus-visible{outline:2px solid var(--blue);outline-offset:2px}
  .btn:hover{opacity:.94}
  .chip:hover{border-color:#C3C9D1}
  html,body{overflow-x:clip}
  html{overscroll-behavior:none}
  body{overscroll-behavior:none;touch-action:pan-y pinch-zoom;margin:0;background-color:var(--bg);background-image:var(--bg-tex);background-size:96px 96px;color:var(--ink);
    font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;}
  a{color:var(--blue);text-decoration:none}
  a:hover{text-decoration:underline;text-underline-offset:2px}
  .txtlink{background:none;border:0;padding:0;color:var(--blue);cursor:pointer;font:inherit}
  .txtlink:hover{text-decoration:underline;text-underline-offset:2px}
  .btn-reset{background:none;border:0;padding:0;font:inherit;cursor:pointer;color:inherit}
  .skip-link{position:fixed;left:12px;top:-60px;z-index:400;background:var(--blue);color:#fff;height:44px;padding:0 16px;display:inline-flex;align-items:center;font-size:13px;border-radius:8px;transition:top .15s}
  .skip-link:focus{top:12px;color:#fff;text-decoration:none}
  .wrap{max-width:1180px;margin:0 auto;padding:0 16px 40px}
  header{position:sticky;top:0;background:var(--bg);z-index:5;padding:12px 0;border-bottom:1px solid var(--line)}
  header .row{display:flex;align-items:center;justify-content:space-between}
  .logo{display:flex;align-items:center;gap:8px;font-weight:600;font-size:17px;margin:0}
  .logo svg{display:block}
  .pill{background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:5px 12px;font-size:13px;color:var(--mut)}
  .pill b{color:var(--ink);font-variant-numeric:tabular-nums}
  .card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
    padding:16px;margin-top:16px;box-shadow:0 1px 2px rgba(16,24,40,.04)}
  h3{font-size:16px;font-weight:600}
  h4{font-size:14px;font-weight:600}
  .card h3{margin:0 0 6px;font-size:15px}
  .card>h3{font-size:17px}
  .card h3.subh{font-size:15px}
  .flab{display:block;margin:14px 0 6px;color:var(--mut);font-size:12px;font-weight:600}
  .sub{color:var(--mut);font-size:13px;line-height:1.5}
  .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;cursor:pointer;text-decoration:none;white-space:nowrap;
    background:var(--blue);color:#fff;font-size:15px;font-weight:600;border-radius:10px;height:44px;padding:0 20px;width:100%}
  .btn:disabled{opacity:.45;cursor:not-allowed}
  .btn.ghost{background:var(--surface);color:var(--blue);border:1px solid var(--line)}
  .btn.small{width:auto;height:40px;padding:0 16px;font-size:13px;border-radius:10px}
  .btnrow{display:flex;gap:8px}.btnrow .btn{flex:1}
  /* Base flex row: dozens of templates use class="row" with flex inline
     styles (gap/align-items) — without this rule they stacked as blocks
     and their buttons dropped below-left (owner audit 2026-11-09). */
  .row{display:flex;align-items:center;gap:8px}
  .game-item{display:flex;justify-content:space-between;align-items:center;padding:12px 8px;border-bottom:1px solid var(--line);border-radius:8px}
  .game-item:last-child{border-bottom:0}
  .game-item:hover{background:var(--blue-soft)}
  .tag{font-size:11px;padding:2px 8px;border-radius:999px;background:var(--blue-soft);color:var(--blue);font-weight:600}
  .wsdot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#C3C9D1;margin-left:7px;flex:none}
  .wsdot.live{background:var(--green)}
  .wsdot.poll{background:#E8A13A}
  .tag.gray{background:var(--tag-gray);color:var(--mut)}
  .big-price{font-size:30px;font-weight:600;font-variant-numeric:tabular-nums;transition:color .3s}
  /* Phase 19：价格变动闪烁（只动颜色，300ms 后由 JS 摘掉 class 自然回落） */
  .big-price.flash-up{color:var(--green)}
  .big-price.flash-dn{color:var(--red)}
  .count{font-variant-numeric:tabular-nums;color:var(--blue);font-weight:600}
  .bar{height:6px;background:var(--track);border-radius:99px;overflow:hidden;margin-top:10px}
  .bar>i{display:block;height:100%;background:var(--blue);border-radius:99px;transition:width .3s}
  .sides{display:flex;gap:8px;margin-top:12px}
  .side{flex:1;border-radius:12px;padding:12px;border:1px solid transparent;cursor:pointer;text-align:left;font:inherit}
  .side.up{background:var(--green-soft);color:var(--green)}
  .side.down{background:var(--red-soft);color:var(--red)}
  .side.sel{border-color:currentColor}
  .side .nm{font-weight:600;font-size:15px}
  .side .pr{font-size:22px;font-weight:600;font-variant-numeric:tabular-nums}
  .chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
  .chip{display:inline-flex;align-items:center;border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:999px;height:40px;padding:0 16px;font-size:13px;cursor:pointer}
  .chip.sel{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600}
  input.amt{width:100%;margin-top:10px;height:44px;padding:0 12px;border:1px solid var(--line);border-radius:10px;font-size:15px;background:var(--input-bg);color:var(--ink)}
  select.amt{appearance:none;-webkit-appearance:none;width:100%;height:44px;margin-top:10px;
    padding:0 42px 0 14px;border:1px solid var(--line);border-radius:10px;background-color:var(--input-bg);
    background-image:var(--select-arrow);background-repeat:no-repeat;background-position:right 14px center;background-size:16px 16px;
    color:var(--ink);font:inherit;font-size:14px;font-weight:600;line-height:1.35;cursor:pointer;
    box-shadow:0 1px 2px rgba(16,24,40,.03);transition:border-color .15s,box-shadow .15s}
  select.amt:hover{border-color:var(--soft-border)}
  select.amt:focus-visible{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-soft)}
  select.amt:disabled{opacity:.55;cursor:not-allowed}
  .btnrow>select.amt,.row>select.amt{flex:1 1 0;min-width:0}
  textarea.amt{width:100%;margin-top:10px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;
    background:var(--input-bg);color:var(--ink);font:inherit;font-size:14px;line-height:1.5;resize:vertical}
  textarea.amt:focus-visible{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-soft)}
  table{width:100%;border-collapse:collapse;font-size:14px}
  td,th{padding:10px 8px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}
  th{background:color-mix(in srgb, var(--ink) 5%, var(--card));color:var(--mut);font-size:12px;font-weight:600;white-space:nowrap}
  td.n,th.n{text-align:right;font-variant-numeric:tabular-nums}
  td.nm{max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  tbody tr:nth-child(even) td{background:color-mix(in srgb, var(--ink) 2.5%, var(--card))}
  tbody tr.me td{background:var(--blue-soft);font-weight:600}
  tr:last-child td{border-bottom:0}
  .mut{color:var(--mut)} .small{font-size:12px}
  .toast{position:fixed;left:50%;transform:translateX(-50%);bottom:26px;background:var(--toast-bg);color:var(--toast-ink);
    padding:10px 16px;border-radius:10px;font-size:14px;opacity:0;pointer-events:none;transition:opacity .2s;max-width:88vw;text-align:center;z-index:90}
  .toast.on{opacity:.94}
  canvas{width:100%;height:180px;display:block}
  @media(min-width:1024px){ canvas{height:260px} }
  .hide{display:none!important}
  .kv{display:flex;justify-content:space-between;font-size:14px;padding:9px 0;border-bottom:1px solid var(--line)}
  .kv:last-child{border-bottom:0}
  .kv b{font-variant-numeric:tabular-nums}
  /* ================= Phase 19：主流级外壳 ================= */
  /* ---- 分区 tab 栏：移动端底部固定，桌面端页眉下方横向 ---- */
  .tabbar{display:flex;gap:4px;background:var(--card);border-top:1px solid var(--line);
    position:fixed;left:0;right:0;bottom:0;z-index:6;padding:6px 8px calc(6px + env(safe-area-inset-bottom))}
  .tab-btn{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;border:0;background:none;cursor:pointer;
    color:var(--mut);font:inherit;font-size:11px;padding:5px 2px;border-radius:10px}
  .tab-btn.sel{color:var(--blue)}
  .tab-btn.sel svg{color:var(--blue)}
  @media(max-width:767px){ .wrap{padding-bottom:96px} }
  @media(min-width:768px){
    .tabbar{position:static;background:none;border-top:0;padding:0;margin-top:16px;gap:8px;z-index:auto}
    .tab-btn{flex:0 1 auto;flex-direction:row;gap:8px;font-size:14px;padding:8px 16px;background:var(--card);
      border:1px solid var(--line);border-radius:999px}
    .tab-btn.sel{background:var(--blue-soft);border-color:var(--soft-border);font-weight:600}
  }

  /* ---- 视图容器 ---- */
  .view{min-width:0}
  #authCard{max-width:560px}
  #authView{padding-top:6px}
  @media(min-width:1024px){ #authView{padding-top:44px} }
  @media(min-width:1024px){
    .view[data-view="wallet"]>.card,.view[data-view="account"]>.card{max-width:760px;margin-left:auto;margin-right:auto}
  }
  /* ---- 账号分区入口行 ---- */
  .acct-row{display:flex;align-items:center;gap:8px;width:100%;height:44px;background:none;border:0;border-bottom:1px solid var(--line);
    padding:0 8px;font:inherit;font-size:14px;color:var(--ink);cursor:pointer;text-align:left;border-radius:8px}
  .acct-row:hover{background:var(--blue-soft)}
  .acct-row:last-child{border-bottom:0}
  .acct-row .chev{margin-left:auto;color:var(--mut);display:flex}
  /* ---- 大厅市场卡网格 ---- */
  #gameList{display:grid;grid-template-columns:1fr;gap:12px;margin-top:12px}
  @media(min-width:680px){ #gameList{grid-template-columns:repeat(2,1fr)} }
  @media(min-width:1024px){ #gameList{grid-template-columns:repeat(3,1fr)} }
  @media(min-width:1600px){ .wrap{max-width:1400px} #gameList{grid-template-columns:repeat(4,1fr)} }
  #gameList>p{grid-column:1/-1;margin:0}
  #gameList .game-item{display:flex;flex-direction:column;align-items:stretch;gap:8px;background:var(--card);
    border:1px solid var(--line);border-radius:var(--radius);padding:16px;position:relative;overflow:hidden}
  #gameList .game-item:last-child{border-bottom:1px solid var(--line)}
  .gi-top{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;font-size:15px;padding-right:36px}
  .gi-corner{position:absolute;top:0;right:0;width:58px;height:58px;pointer-events:none}
  .gi-corner::before{content:"";position:absolute;inset:0;background:var(--blue);clip-path:polygon(0 0,100% 0,100% 100%)}
  .gi-corner i{position:absolute;left:36px;top:22px;transform:translate(-50%,-50%) rotate(45deg);font-style:normal;font-size:10px;font-weight:600;color:#fff;white-space:nowrap}
  .gi-top b{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .gi-top .tag{flex:none}
  #gameList .game-item:nth-child(even){background:var(--blue-soft)}
  .gi-pool{display:flex;align-items:flex-start;gap:8px}
  .gi-pool-l{display:flex;flex-direction:column}
  .gi-lab{font-size:11px;color:var(--mut);line-height:1.25}
  .gi-pool-v{font-size:24px;font-weight:600;font-variant-numeric:tabular-nums;line-height:1.15}
  .gi-bar{display:flex;align-items:center;gap:8px}
  .gi-bar .bar{flex:1}
  .gi-pct{font-size:11px;color:var(--mut);font-variant-numeric:tabular-nums;flex:none}
  .gi-meta{color:var(--mut);font-size:12px}
  .gi-chips{display:flex;flex-wrap:wrap;gap:6px}
  .gi-chip{display:inline-flex;align-items:center;background:var(--tag-gray);border-radius:999px;padding:3px 8px;font-size:11px;color:var(--ink)}
  .gi-extra{margin-top:6px}
  #gameList .bar{margin-top:2px}
  .gi-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:auto;padding-top:4px}
  .gi-actions .btn{flex:1 1 auto}
  /* ---- 骨架卡（加载中）：只动 opacity，深色下同样可读 ---- */
  .skel{border-radius:var(--radius);background:var(--skel);min-height:158px;animation:skelPulse 1.1s ease-in-out infinite alternate}
  @keyframes skelPulse{from{opacity:.45}to{opacity:1}}
  @media (prefers-reduced-motion: reduce){ .skel{animation:none} }
  /* ---- 对局页分段切换 ---- */
  .seg{display:flex;background:var(--track);border-radius:10px;padding:4px;gap:4px;margin-top:16px}
  .seg-btn{flex:1;border:0;background:transparent;height:32px;padding:0 8px;display:flex;align-items:center;justify-content:center;border-radius:8px;font:inherit;
    font-size:13px;color:var(--mut);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .seg-btn.sel{background:var(--card);color:var(--ink);font-weight:600;box-shadow:0 1px 2px rgba(16,24,40,.10)}
  .seg-btn.is-disabled{opacity:.45}
  .auth-seg-btn{flex:1;border:0;background:transparent;height:32px;padding:0 8px;display:flex;align-items:center;justify-content:center;border-radius:8px;font:inherit;color:var(--mut);cursor:pointer}
  .auth-seg-btn.sel{background:var(--card);color:var(--ink);font-weight:600;box-shadow:0 1px 2px rgba(16,24,40,.10)}
  #termsRow,#ageRow{gap:8px;align-items:flex-start;font-size:13px;color:var(--mut);line-height:1.5}
  #termsRow{margin-top:10px}
  #ageRow{margin-top:6px}
  #termsRow:not(.hide),#ageRow:not(.hide){display:flex}
  /* 窄屏分段页签（2026-11-10）：原横滚条会把最后一个页签切一半——改为 2 列
     网格整齐排布，每个标签完整显示（2 钮分段仍是一行两列，外观不变）。 */
  @media(max-width:480px){ .seg{display:grid;grid-template-columns:repeat(2,1fr)} .seg-btn{font-size:13px;padding:0 6px;white-space:nowrap} }
  /* 恰好 3 个按钮的分段条一排三列，不再 2+1 折行（主人 2026-11-12，
     先房间页签、后总榜周期）；:has 不支持的老引擎保留 2 列兜底。 */
  @media(max-width:480px){ .room-seg{grid-template-columns:repeat(3,1fr)} .seg:has(> :nth-child(3)):not(:has(> :nth-child(4))){grid-template-columns:repeat(3,1fr)} }
  /* 总榜表格（2026-11-12）：定宽列 + 数字列不换行 + 名字超长省略，
     「第 N 名」「奖金」不再被挤成两行（主人截图） */
  #boardList table{table-layout:fixed}
  #boardList th:nth-child(1){width:28px}
  #boardList th:nth-child(3),#boardList th:nth-child(4){width:42px}
  #boardList th:nth-child(5){width:58px}
  #boardList th:nth-child(6){width:86px}
  #boardList td,#boardList th{padding:8px 5px}
  #boardList td.n,#boardList th.n{white-space:nowrap}
  #boardList td.nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* ---- 游客展区（未登录大厅）：Hero + 实时数据 + 玩法三步 + 高手榜，登录后整体隐藏 ---- */
  .gs-title{font-size:22px;line-height:1.3;margin:0 0 6px}
  @media(min-width:1024px){ .gs-title{font-size:27px} }
  .gs-stats{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:14px 0}
  @media(min-width:768px){ .gs-stats{grid-template-columns:repeat(4,1fr)} }
  .gs-stat{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px 12px;min-width:0}
  .gs-num{font-size:20px;font-weight:600;font-variant-numeric:tabular-nums;min-width:0;overflow:hidden}
  .gs-lab{color:var(--mut);font-size:12px;margin-top:2px}
  .ref-trend{display:flex;gap:4px;align-items:flex-end;margin-top:8px}
  .ref-trend .col{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0}
  .ref-trend .barwrap{height:44px;width:100%;display:flex;align-items:flex-end}
  .ref-trend .bar{width:100%;background:var(--blue);border-radius:3px 3px 0 0}
  .ref-trend .dlab{font-size:9px;color:var(--mut);white-space:nowrap}
  .gs-steps{display:grid;gap:14px;margin-top:10px}
  @media(min-width:768px){ .gs-steps{grid-template-columns:repeat(3,1fr)} }
  .gs-step p{margin:4px 0 0;color:var(--mut);font-size:13px;line-height:1.55}
  .gs-step .gs-ic{color:var(--blue);margin-bottom:6px}
  /* ---- 说明弹窗：常驻说明收进 ⓘ 点击弹窗，正文只留操作信息 ---- */
  .info-dot{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;flex:none;border-radius:50%;
    border:1px solid var(--line);background:var(--surface);color:var(--mut);cursor:pointer;padding:0}
  .info-dot svg{width:15px;height:15px}
  .watch-link{color:var(--blue);text-decoration:none;font-weight:500;white-space:nowrap}
  @media (max-width:380px){ #mePill{display:none} }
  .info-dot:hover{color:var(--blue);border-color:var(--soft-border)}
  #infoModal{position:fixed;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;padding:16px}
  #infoModal.hide{display:none}
  .im-backdrop{position:absolute;inset:0;background:rgba(10,15,30,.45)}
  .im-card{position:relative;width:100%;max-width:480px;max-height:82vh;overflow:auto;animation:imIn .3s cubic-bezier(0.22,1,0.36,1)}
  @keyframes imIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
  #passModal{position:fixed;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;padding:16px}
  #passModal.hide{display:none}
  #emailModal,#forgotModal,#bookModal,#playerModal,#matchModal,#promoModal{position:fixed;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;padding:16px}
  #emailModal.hide,#forgotModal.hide,#bookModal.hide,#playerModal.hide,#matchModal.hide,#promoModal.hide{display:none}
  #infoModal,#passModal,#emailModal,#forgotModal,#bookModal,#playerModal,#matchModal,#promoModal,.im-card{overscroll-behavior:contain}
  .player-link{background:none;border:0;padding:0;font:inherit;color:var(--blue);cursor:pointer;text-align:left}
  .player-link:hover{text-decoration:underline}
  .pp-stats{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-top:12px}
  @media(min-width:560px){ .pp-stats{grid-template-columns:repeat(4,1fr)} }
  .pp-stat{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:8px 4px;text-align:center}
  /* 玩家动态滚动瀑布流（2026-11-12） */
  .feed-dot{width:8px;height:8px;border-radius:50%;background:var(--green);flex:none;animation:feedPulse 1.6s ease-in-out infinite}
  @keyframes feedPulse{0%,100%{opacity:1}50%{opacity:.3}}
  .feed-view{height:120px;overflow:hidden;margin-top:6px;-webkit-mask-image:linear-gradient(180deg,#000 84%,transparent 100%);mask-image:linear-gradient(180deg,#000 84%,transparent 100%)}
  .feed-track{will-change:transform}
  .feed-row{display:flex;align-items:center;gap:8px;height:40px;border-bottom:1px dashed var(--line);font-size:13.5px}
  .feed-row:last-child{border-bottom:0}
  .feed-main{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  button.pp-recent{display:flex;align-items:center;gap:8px;width:100%;background:var(--stat-bg);border:1px solid var(--line);border-radius:10px;padding:10px;margin:0 0 8px;font:inherit;color:inherit;text-align:left;cursor:pointer}
  button.pp-recent:active{border-color:var(--blue)}
  .pp-ic{flex:none;display:flex}
  .pp-mid{flex:1;min-width:0}
  /* 标题/日期/名次一律单行：币种已有左侧图标，标题不再重复币名，
     避免窄屏把「合约盘」「2026/11/12 15:10:00」挤成多行（主人 2026-11-12 截图） */
  .pp-t{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .pp-d{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .pp-r{display:flex;align-items:center;gap:8px;flex:none}
  .pp-r b{white-space:nowrap}
  @media(max-width:480px){ button.pp-recent{gap:6px;padding:9px} .pp-r{gap:5px} .pp-r b{font-size:13px} .pp-chev{font-size:16px} }
  .pp-chev{color:var(--mut);font-size:20px;line-height:1}
  .pp-stat b{display:block;font-size:15px;font-weight:600}
  .pp-stat span{display:block;font-size:11px;color:var(--mut);margin-top:2px}
  .btn,button{touch-action:manipulation}
  .gi-pool-v,.gs-stats{font-variant-numeric:tabular-nums}
  @media (prefers-reduced-motion: reduce){ *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important} }
  #infoModalBody{line-height:1.55;white-space:pre-wrap}
  /* ---- 介绍区收紧：展区卡片/数据条/三步改紧凑版式（图标与文字并排），弹窗正文行距同步收紧 ---- */
  #guestShowcase .card{padding:13px 14px;margin-top:10px}
  #guestShowcase .gs-title{font-size:20px;line-height:1.25;margin:0 0 4px}
  @media(min-width:1024px){ #guestShowcase .gs-title{font-size:24px} }
  #guestShowcase .btnrow{margin-top:10px}
  #guestShowcase .btnrow .btn{padding:0 20px}
  .gs-steps2{display:flex;align-items:stretch;gap:6px;margin:12px 0 0}
  .gs-s2{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;background:var(--stat-bg);border-radius:10px;padding:9px 4px;font-weight:600;font-size:13px;min-width:0;white-space:nowrap}
  .gs-s2 svg{color:var(--blue);flex:none}
  .gs-sep{align-self:center;color:var(--mut);flex:none}
  .gs-steps2 .info-dot{flex:none;align-self:center}
  .gs-line{margin-top:10px;color:var(--mut);font-size:12.5px;display:flex;flex-wrap:wrap;gap:6px;align-items:baseline}
  .gs-line b{color:var(--ink);font-size:14px;font-variant-numeric:tabular-nums}
  #guestShowcase .kv{padding:4px 0}
  /* ---- 大厅行情条 + 卡片迷你走势（真实 1 分钟 K 线；演示填充时用演示序列并打标） ---- */
  #navProgress{position:fixed;top:0;left:0;height:2.5px;width:0;background:linear-gradient(90deg,var(--blue),#7EA0FF);z-index:80;opacity:0;pointer-events:none}
  @keyframes screenIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
  .screen-in{animation:screenIn .3s cubic-bezier(.22,1,.36,1)}
  @media (prefers-reduced-motion: reduce){.screen-in{animation:none}#navProgress{display:none}}
  .mkt-card{position:relative;overflow:hidden;padding:10px 0;margin-top:12px}
  .mkt-tape{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 20px,#000 calc(100% - 20px),transparent);mask-image:linear-gradient(90deg,transparent,#000 20px,#000 calc(100% - 20px),transparent)}
  .mkt-track{display:flex;width:max-content;will-change:transform}
  .mkt-group{display:flex;align-items:center;gap:30px;padding-right:30px}
  .tick-item{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;font-size:13.5px}
  .tick-item b{font-weight:600}
  .tick-item .tk-p,.tick-item .tk-c{font-variant-numeric:tabular-nums}
  .tick-item .tk-c{font-weight:600}
  .gi-cd{margin-left:auto;flex:none;text-align:right}
  .gi-cd-l{display:block;font-size:11px;color:var(--mut);line-height:1.2}
  .gi-cd-v{display:block;font-size:20px;font-weight:600;font-variant-numeric:tabular-nums;line-height:1.15}
  .gi-chg{font-size:12px;font-weight:600}
  .gi-chg.up{color:var(--green)}
  .gi-chg.down{color:var(--red)}
  /* ---- 对局页交易台（桌面两列：左信息列，右交易卡 sticky） ---- */
  @media(min-width:1024px){
    #room:not(.hide){display:grid;grid-template-columns:minmax(0,1fr) 400px;column-gap:16px;align-items:start;
      grid-template-areas:"back back" "head trade" "seg trade" "side trade"}
    .room-head{grid-area:head}
    .room-trade{grid-area:trade;position:sticky;top:76px;align-self:start}
    .room-seg{grid-area:seg}
    .room-panel{grid-area:side}
    #btnBack{grid-area:back}
    #room:not(.hide).waiting{display:block;max-width:820px;margin-left:auto;margin-right:auto}
  }
  /* ---- 合约参数选择：用带标签的分段选项替代裸原生下拉框 ---- */
  .contract-pickers{display:grid;grid-template-columns:minmax(0,2fr) minmax(190px,1fr);gap:16px;margin-top:14px}
  .picker-label{display:block;margin-bottom:8px;color:var(--mut);font-size:12px;font-weight:600}
  .choice-grid{display:grid;gap:8px}
  .choice-grid.period{grid-template-columns:repeat(4,minmax(0,1fr))}
  .choice-grid.rounds{grid-template-columns:repeat(2,minmax(0,1fr))}
  .choice{min-height:44px;padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface);
    color:var(--mut);font:inherit;font-size:13px;font-weight:600;line-height:1.3;cursor:pointer;
    transition:border-color .15s,background .15s,color .15s}
  .choice:hover{border-color:var(--soft-border);color:var(--ink)}
  .choice.sel{background:var(--blue-soft);border-color:var(--blue);color:var(--blue)}
  @media(max-width:700px){
    .contract-pickers{grid-template-columns:1fr}
    .choice-grid.period{grid-template-columns:repeat(2,minmax(0,1fr))}
  }
  /* ---- 移动端页眉收紧：图标按钮只留图标，用户胶囊省略号，实在放不下才换行（不裁剪） ---- */
  @media(max-width:640px){
    header .row{flex-wrap:wrap}
    .logo{font-size:15px;white-space:nowrap}
    .logo svg{flex:none}
    header .btn.small{padding:6px 8px;font-size:12px;white-space:nowrap}
    header .btn.theme-btn,header #btnTickets,header #btnInbox{width:40px;padding-left:0;padding-right:0;justify-content:center}
    #btnTickets [data-i18n],#btnInbox [data-i18n]{display:none}
    #btnInbox #inboxBadge{margin-left:2px}
    .pill{padding:4px 8px;font-size:12px;white-space:nowrap;max-width:30vw;overflow:hidden;text-overflow:ellipsis}
  }

/* App footer (2026-11-06: homepage merged into the app — board and
   content-page links live at the bottom of the app shell). */
.app-footer{margin:22px auto 6px;max-width:760px;padding:16px 12px 4px;border-top:1px solid var(--line);text-align:center}
.af-links{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 18px}
.af-links a{color:var(--mut);font-size:13px;text-decoration:none}
.af-links a:hover{color:var(--blue)}
.af-links a:focus-visible{outline:2px solid var(--blue);outline-offset:2px;border-radius:4px}
.af-note{margin:10px 0 0;color:var(--mut);font-size:12px;line-height:1.55}

/* Board tabs (Web3 / Polymarket inside the app shell). */
.coin-row{display:flex;align-items:center;gap:10px;padding:10px 8px;border-bottom:1px solid var(--line);border-radius:10px}
.coin-row:last-child{border-bottom:0}
.coin-row:nth-child(even){background:color-mix(in srgb, var(--ink) 2.5%, var(--card))}
.coin-row:hover{background:var(--blue-soft)}
.cr-rank{width:22px;color:var(--mut);font-size:13px;text-align:right;font-variant-numeric:tabular-nums;flex:none}
.cr-ic{width:22px;height:22px;border-radius:50%;flex:none}
.cr-name{flex:1;display:flex;flex-direction:column;min-width:0}
.cr-name b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cr-spark{flex:none;width:72px;height:24px;display:block}
.cr-px{text-align:right;font-variant-numeric:tabular-nums;flex:none}
.chg-up{color:var(--green)}
.chg-dn{color:var(--red)}
/* ---- 玩家操作信息流（房间操作记录，与观战页同款结构） ---- */
.act-row{display:flex;gap:10px;padding:9px 8px;border-bottom:1px solid var(--line);align-items:flex-start}
@keyframes actIn{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}
.act-row.act-new{animation:actIn .45s cubic-bezier(.22,1,.36,1) both}
@media (prefers-reduced-motion: reduce){.act-row.act-new{animation:none}}
.act-row:last-child{border-bottom:0}
.act-row:nth-child(even){background:color-mix(in srgb, var(--ink) 2.5%, var(--card))}
.act-round{flex:none;font-size:11px;font-weight:600;color:var(--mut);background:color-mix(in srgb, var(--ink) 6%, var(--card));border-radius:6px;padding:2px 7px;margin-top:1px;white-space:nowrap}
.act-main{flex:1;min-width:0}
.act-line1{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:13px}
.act-name{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}
.act-badge{font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;white-space:nowrap}
.act-badge.open{background:var(--blue-soft);color:var(--blue)}
.act-badge.close{background:color-mix(in srgb, var(--ink) 8%, var(--card));color:var(--mut)}
.act-badge.buy{background:color-mix(in srgb, var(--green) 12%, var(--card));color:var(--green)}
.act-badge.sell{background:color-mix(in srgb, var(--red) 12%, var(--card));color:var(--red)}
.act-dir{font-weight:600}
.act-dir.long,.act-dir.up{color:var(--green)}
.act-dir.short,.act-dir.down{color:var(--red)}
.act-lev{font-size:11px;font-weight:600;color:var(--mut);background:color-mix(in srgb, var(--ink) 6%, var(--card));border-radius:6px;padding:2px 6px}
.act-line2{color:var(--mut);font-size:12px;margin-top:2px;font-variant-numeric:tabular-nums}
.act-side{flex:none;text-align:right}
.act-pnl{font-weight:600;font-variant-numeric:tabular-nums;font-size:13px}
.act-pnl.pos{color:var(--green)} .act-pnl.neg{color:var(--red)} .act-pnl.zero{color:var(--mut)}
.act-time{display:block;color:var(--mut);font-size:12px;margin-top:2px;font-variant-numeric:tabular-nums}
.pm-row{display:flex;gap:10px;padding:11px 8px;border-bottom:1px solid var(--line);border-radius:10px}
  .pm-icwrap{flex:none;display:flex;align-items:flex-start;padding-top:2px}
  .pm-toprow{display:flex;justify-content:space-between;align-items:center;gap:8px}
  .pm-cd{font-variant-numeric:tabular-nums;font-weight:600;color:var(--blue);font-size:13px}
  [data-pmcd].hot{color:var(--red)}
.pm-row:nth-child(even){background:color-mix(in srgb, var(--ink) 2.5%, var(--card))}
.pm-row:hover{background:var(--blue-soft)}
.pm-row:last-child{border-bottom:0}
.pm-ic{width:40px;height:40px;border-radius:8px;object-fit:cover;flex:none}
.pm-main{flex:1;min-width:0}
.pm-q{display:block;line-height:1.4}
.pm-spot{display:flex;align-items:baseline;gap:8px;margin:3px 0 1px}
.pm-spot b{font-size:16px;font-weight:600;font-variant-numeric:tabular-nums}
.pm-spot span{font-size:12px;font-weight:600}
.pm-spot span.up{color:var(--green)}
.pm-spot span.dn{color:var(--red)}
.pm-link{margin-top:3px;font-size:13px}
.buy-row{display:flex;gap:8px;margin:8px 0 2px}
.board-period.sel{background:var(--blue-soft);border-color:var(--blue);color:var(--blue);font-weight:600}
.buy-btn{flex:1;display:flex;justify-content:space-between;align-items:center;height:40px;padding:0 16px;cursor:pointer;border:0;font-family:inherit;border-radius:10px;font-size:14px;font-weight:600;text-decoration:none}
.buy-btn b{font-size:15px}
.buy-btn.up{background:var(--green-soft);color:var(--green)}
.buy-btn.dn{background:var(--red-soft);color:var(--red)}
.buy-btn.g1{background:var(--blue-soft);color:var(--blue)}
.buy-btn.g2{background:var(--surface);color:var(--mut)}
.nw{white-space:nowrap}
@media(max-width:560px){ .cr-spark{display:none} .cr-px{flex:0 1 auto} .cr-px .mut{display:none} .cr-name b{white-space:normal} }
@media(max-width:380px){ .cr-rank{display:none} .coin-row{gap:8px} .cr-px{font-size:12.5px} }
.prob2{display:flex;height:8px;border-radius:99px;overflow:hidden;background:var(--line);margin:7px 0 4px}
.prob2 .pu{background:var(--green)}
.prob2 .pd{background:var(--red)}
.dir-up{color:var(--green)}
.dir-dn{color:var(--red)}
.prob{height:8px;border-radius:99px;background:var(--line);overflow:hidden;margin:7px 0 4px}
.prob>span{display:block;height:100%;background:var(--blue);border-radius:99px}
.prob-lab{display:flex;justify-content:space-between;gap:8px;font-size:12px;color:var(--mut)}

.board-head{display:flex;justify-content:space-between;align-items:center;gap:10px}

/* PM walkthrough fixes (2026-11-06 evening batch). */
.btn.inline{width:auto;flex:none}
.amt{min-width:0}
.wseg{display:flex;gap:6px;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:4px;margin-top:12px}
.wseg-btn{flex:1;border:0;background:none;height:32px;padding:0;display:flex;align-items:center;justify-content:center;border-radius:8px;font-size:14px;font-weight:600;color:var(--mut);cursor:pointer}
.wseg-btn.sel{background:var(--card);color:var(--blue);box-shadow:0 1px 3px rgba(16,24,40,.08)}
.wseg-btn:focus-visible{outline:2px solid var(--blue);outline-offset:1px}
.wchains{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}
.wchain-btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--card);color:var(--mut);border-radius:999px;height:40px;padding:0 16px;font-size:13px;font-weight:600;cursor:pointer}
.wchain-btn.sel{border-color:var(--blue);color:var(--blue);background:var(--blue-soft)}
.wchain-btn:focus-visible{outline:2px solid var(--blue);outline-offset:1px}
.dep-addr{margin-top:10px}
.dep-addr-text{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;word-break:break-all;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-top:8px;line-height:1.5}
.my-result{background:var(--blue-soft);border:1px solid var(--soft-border);border-radius:10px;padding:10px 12px;margin-top:10px;font-weight:600;line-height:1.5}
.my-result.win{background:var(--green-soft);border-color:var(--green-soft)}
.tile-name{display:block;font-size:14px;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.badge-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
@media(max-width:480px){ .badge-grid{grid-template-columns:repeat(3,1fr)} .badge-cond{font-size:11px;line-height:1.35} }
.cbx{appearance:none;-webkit-appearance:none;width:20px;height:20px;flex:none;border:1.5px solid var(--line);border-radius:6px;background:var(--card);cursor:pointer;margin-top:1px;position:relative;vertical-align:-4px}
.cbx:checked{background:var(--blue);border-color:var(--blue)}
.cbx:checked::after{content:'';position:absolute;inset:0;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") center/12px no-repeat}
.cbx:focus-visible{outline:2px solid var(--blue);outline-offset:2px}

@media (pointer:coarse){ input,select,textarea{font-size:16px !important} }

/* Lobby status filter chips */
.lchip{display:inline-flex;align-items:center;border:1px solid var(--line);background:var(--panel);color:var(--mut);border-radius:999px;height:32px;padding:0 12px;font-size:12.5px;cursor:pointer}
.lchip.active{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600}
.pager{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:12px}
  .att-img{max-width:180px;max-height:140px;border-radius:8px;display:block;margin-top:6px;background:var(--bubble-bg)}
  .att-link{display:inline-block}

/* ---- 挤压/换行巡查修复（2026-11-10）：flex 子项被压扁与无保护换行的系统性根因 ----
   1) 页眉铃铛：按钮 40px 内铃铛 svg 被 flex 压成 7px、角标 inline 塞不下 → svg flex:none + 角标改绝对定位角标；
   2) 行情条走势 svg 固定 120px 宽、容器可缩 → 被视口裁剪（320px 下容器缩到 0）→ svg 随容器缩放 + 容器下限；
   3) .kv 值侧（<b>）无 nowrap → "0.00 / USDT" 断行；带图标的标签侧同样保护；
   4) .btnrow 按钮 min-content 之和超行宽时不换行、直接溢出（如开局演示/正式按钮）→ 允许换行成整行；
   5) .board-head 标题无 nowrap 被按钮挤成两行 → 标题不换行、放不下时整行换行；
   6) .choice 选项文字换行导致同组高度不一 → nowrap + 窄屏收紧字号。 */
header .btn svg{flex:none}
.kv{gap:10px}
.kv>b{flex:none;white-space:nowrap}
.kv>span{min-width:0}
.kv>span:first-child:has(svg):not(:has(br)){flex:none;white-space:nowrap}
.btnrow{flex-wrap:wrap}
.mkt-card .tag{position:absolute;right:8px;top:50%;transform:translateY(-50%);z-index:2}
.board-head{flex-wrap:wrap}
.board-head h3{white-space:nowrap}
.board-head>span:first-child{flex:none}
.board-head>span:last-child{margin-left:auto}
.choice{white-space:nowrap}
@media(max-width:640px){
  header .btn.theme-btn,header #btnTickets,header #btnInbox{flex:none}
  header #btnInbox{position:relative;overflow:visible}
  #btnInbox #inboxBadge{position:absolute;top:-6px;right:-6px;margin:0!important;z-index:2;min-width:18px;text-align:center}
}
@media(max-width:480px){
  .side .small{font-size:11px;line-height:1.35}
}
@media(max-width:380px){
  .choice{font-size:13px;padding-left:8px;padding-right:8px}
  .gi-top{font-size:14px}
  .gi-pool-v{font-size:22px}
  .gi-cd-v{font-size:18px}
}

/* ---- 导航可达性（2026-11-10）：页签栏移出 #lobby 分区、对局房/总榜/消息/工单内同样可用；
   登录屏是门禁，菜单在登录屏隐藏；logo 可点击回大厅。 ---- */
body:has(#authView:not(.hide)) .tabbar{display:none}
.logo{cursor:pointer}

/* ---- 分区顶部返回：无边框文字链（2026-11-10 主人：原来的幽灵按钮太难看） ----
   不带盒子、不带底色，与卡片左缘对齐；hover 才有蓝色反馈。 */
.back-link{display:inline-flex;align-items:center;height:36px;padding:0 10px 0 2px;margin:0 0 4px -2px;
  background:none;border:0;border-radius:8px;color:var(--mut);font:inherit;font-size:14px;font-weight:500;cursor:pointer}
.back-link:hover{color:var(--blue);background:var(--blue-soft)}
.back-link:active{opacity:.75}
.txhash{overflow-wrap:anywhere}

/* ---- 结算证据表（2026-11-10）：7 列在手机上改为横滚条，前四列（期/开/收/结果）
   首屏完整，来源与抓取时间横滑可见；单元格不换行，不再被卡片边缘切一半。 ---- */
.tblscroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.ev-tbl{min-width:560px}
.ev-tbl th,.ev-tbl td{white-space:nowrap}

/* ---- 对局态势模块（2026-11-12）：大额播报 / 期回顾 / 资金流向 / 榜单动态 ---- */
.bigplay{margin:0 0 12px;padding:10px 14px;border-radius:10px;background:var(--blue);color:#fff;font-weight:600;font-size:14px;text-align:center;box-shadow:0 4px 14px rgba(46,92,255,.25);animation:bigplayIn .25s ease-out}
@keyframes bigplayIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion: reduce){.bigplay{animation:none}}
.flowbar{display:flex;height:14px;border-radius:7px;overflow:hidden;background:var(--line)}
.flowbar .flow-a{background:var(--green);transition:width .45s ease}
.flowbar .flow-b{background:var(--red);transition:width .45s ease}
#roundRecap{border-color:var(--blue)}
#boardBody tr.top3 td:first-child{font-weight:700;color:var(--blue)}
#boardBody tr.prize-line-row td{border-top:2px dashed var(--blue);color:var(--blue);font-size:12px;font-weight:600;text-align:center;padding:4px 6px}
.rank-delta{font-size:11px;font-weight:600;margin-left:4px}
.rank-delta.up{color:var(--green)}
.rank-delta.down{color:var(--red)}
