/* ============================================================
   竞彩出票方案助手 · 样式
   ============================================================ */
:root{
  --ink:#16202E;
  --ink-2:#3C4A5E;
  --muted:#78859B;
  --bg:#F1F4F8;
  --card:#FFFFFF;
  --line:#E1E7EF;
  --line-2:#EDF1F6;
  --brand:#E02020;
  --brand-d:#B41717;
  --brand-l:#FFF1F1;
  --blue:#0B6BCB;
  --blue-l:#EEF5FE;
  --ok:#0E9F6E;
  --warn:#B45309;
  --radius:14px;
  --shadow:0 1px 2px rgba(22,32,46,.05), 0 8px 24px -12px rgba(22,32,46,.18);
  --shadow-lg:0 24px 60px -20px rgba(22,32,46,.35);
}

*{box-sizing:border-box}
html,body{margin:0;padding:0}
/* 全局兜底：作者样式表里的 display 会盖掉浏览器默认的 [hidden]{display:none}。
   一旦某个带 hidden 的元素自己设了 display（如 .modal 的 flex），hidden 就会完全失效。
   这里同时做两件事：
     ① 用 !important
     ② 把选择器提权成 `html [hidden]`（0,1,1），高于任何单类名规则（0,1,0）
   两道保险是有必要的 —— 部分环境（例如 jsdom）对 !important 的支持不可靠，
   只写 !important 时 `.modal{display:flex}` 仍可能靠源码顺序胜出，导致线上/测试表现不一致。 */
html [hidden]{display:none!important}
body{
  font:15px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;
  padding-bottom:76px;
}
a{color:var(--blue);text-decoration:none}
a:hover{text-decoration:underline}
b,strong{font-weight:700}
.wrap{max-width:1340px;margin:0 auto;padding:0 18px}
.muted{color:var(--muted);font-weight:400;font-size:12.5px}

/* ---------- topbar ---------- */
.topbar{background:linear-gradient(120deg,#1B2739 0%,#222F45 55%,#2A1A1D 100%);color:#fff;position:relative;overflow:hidden}
.topbar::after{content:"";position:absolute;right:-80px;top:-120px;width:340px;height:340px;border-radius:50%;background:radial-gradient(circle,rgba(224,32,32,.42),transparent 68%)}
.topbar-in{display:flex;align-items:center;gap:12px;padding:16px 18px;position:relative;z-index:1}
/* .brand 吸收剩余宽度，把操作区顶到右边。
   为什么不再用 justify-content:space-between：「刷新」按钮现在与 .topbar-act
   **平级**（手机上要单独排到第一行，见 ≤720px 断点），三个子元素用 space-between
   会把它俩拆到左右两端、中间留一条空档。 */
.brand{display:flex;align-items:center;gap:13px;min-width:0;flex:1 1 auto}
.logo{width:44px;height:44px;flex:none;border-radius:12px;background:linear-gradient(145deg,#E02020,#8E1212);display:grid;place-items:center;font-size:21px;font-weight:800;letter-spacing:1px;box-shadow:0 6px 18px -6px rgba(224,32,32,.8)}
.brand h1{margin:0;font-size:19px;letter-spacing:.5px;white-space:nowrap}
.brand .sub{margin:2px 0 0;font-size:12.5px;color:#A9B6CB;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.topbar-act{display:flex;align-items:center;gap:12px;flex:none}
.live{display:flex;align-items:center;gap:9px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.13);padding:7px 13px;border-radius:11px}
.live-txt b{display:block;font-size:13px;font-variant-numeric:tabular-nums;letter-spacing:.3px}
.live-txt small{display:block;font-size:11px;color:#9DABC2;margin-top:1px}
.dot{width:8px;height:8px;border-radius:50%;background:#0E9F6E;box-shadow:0 0 0 0 rgba(14,159,110,.6);animation:pulse 2.2s infinite}
.dot.err{background:#E02020;animation:none;box-shadow:none}
.dot.busy{background:#E8A33D;animation:none}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(14,159,110,.55)}70%{box-shadow:0 0 0 9px rgba(14,159,110,0)}100%{box-shadow:0 0 0 0 rgba(14,159,110,0)}}

.notice{background:#FFFBEB;border-bottom:1px solid #F6E3B4;color:#7A5A12;font-size:12.5px;padding:9px 0}
.notice b{color:#8A5B00}

/* ---------- buttons ---------- */
.btn{
  appearance:none;border:1px solid var(--line);background:#fff;color:var(--ink);
  padding:9px 15px;border-radius:10px;font-size:13.5px;font-weight:600;cursor:pointer;
  transition:.15s;white-space:nowrap;font-family:inherit;
}
.btn:hover{border-color:#C9D3E0;background:#FAFBFD}
.btn:active{transform:translateY(1px)}
.btn.primary{background:linear-gradient(160deg,#E93A3A,#C61A1A);border-color:#B41717;color:#fff;box-shadow:0 6px 16px -8px rgba(224,32,32,.9)}
.btn.primary:hover{background:linear-gradient(160deg,#EE4A4A,#D52020)}
.btn.primary:disabled{background:#D8DEE7;border-color:#D8DEE7;color:#96A2B4;box-shadow:none;cursor:not-allowed}
/* 次要按钮：默认按【浅色底】设计（白底 + 描边 + 深字）。
   历史教训：早期这里默认是「半透明白底 + 白字」，那是深色顶栏专用的配色。
   结果凡是把 .btn.ghost 放到白卡片上（弹窗页脚、方案卡、管理页操作列…）
   按钮就连文字带边框一起隐形，还压根不报错。
   现在反转：默认安全，深色顶栏单独覆盖 —— 新加按钮不会再踩这个坑。 */
.btn.ghost{background:#fff;border-color:var(--line);color:var(--ink-2)}
.btn.ghost:hover{background:#F4F7FB;border-color:#C9D3E0;color:var(--ink)}
.topbar .btn.ghost{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2);color:#fff}
.topbar .btn.ghost:hover{background:rgba(255,255,255,.18);border-color:rgba(255,255,255,.3)}
/* 「历史方案」在顶栏，选中时要比 hover 更实一档，才看得出当前位置 */
.topbar .nav-schemes.active{background:rgba(255,255,255,.26);border-color:rgba(255,255,255,.44)}
.btn.sm{padding:6px 11px;font-size:12.5px}
.btn.big{width:100%;padding:14px;font-size:15.5px;border-radius:12px;margin-top:6px}

/* ---------- 手机端禁止"误触放大" ----------
   号码球、赔率按钮这类元素又小又密，连点两下很容易触发浏览器的**双击缩放**，
   页面一放大就"显示不全"了。touch-action:manipulation 保留单指拖动和双指缩放，
   只砍掉双击缩放 —— iOS 从 10 起就**忽略** viewport 的 user-scalable=no，
   所以真正管用的是这一条（Android 那边两条一起生效）。
   注意不能写 touch-action:none，那会把导航的横向滑动一起废掉。 */
html,body{touch-action:manipulation;-webkit-text-size-adjust:100%}

/* ---------- 顶栏右侧四件控件统一尺寸 ----------
   蚂蚁反馈「历史方案、登录注册、已同步、刷新 按钮大小不一致很难看」。
   根因：这四件来自三套内边距 —— .btn 是 9px 15px、.btn.sm 是 6px 11px、
   .live 是 7px 13px，圆角也分别是 10/10/11px。**靠 padding 凑永远对不齐**，
   只能定高。基础规则写在这里（所有媒体查询之前），手机端各自再收一档。
   用 id / 容器限定提权：`.topbar .btn.ghost` 是 (0,3,0)。 */
.topbar-in > .btn,
.topbar-in .topbar-act > .btn,
.topbar-in .topbar-act .userbox > .btn,
.topbar-in .topbar-act .uname,
.topbar-in .topbar-act .live{
  height:36px;border-radius:10px;padding:0 15px;font-size:13.5px;
  display:inline-flex;align-items:center;justify-content:center;
}
.topbar-in .topbar-act .uname{font-size:13px;font-weight:600;padding:0 11px}
.topbar-in .topbar-act .live{padding:0 13px;gap:9px}
.topbar-in .topbar-act .unote{align-self:center}

/* ---------- layout ---------- */
.layout{display:grid;grid-template-columns:minmax(0,1fr) 388px;gap:20px;align-items:start;padding-top:18px;padding-bottom:40px}
.toolbar{margin-bottom:13px}
.tools{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.tools input[type=search]{
  flex:1;min-width:220px;padding:10px 13px;border:1px solid var(--line);border-radius:10px;
  font-size:14px;font-family:inherit;background:#fff;outline:none;transition:.15s;
}
.tools input[type=search]:focus{border-color:#9EB6D6;box-shadow:0 0 0 3px rgba(11,107,203,.1)}
.chk{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-2);white-space:nowrap;cursor:pointer;user-select:none}
.chk input{accent-color:var(--brand);width:15px;height:15px}
.stat-line{font-size:12.5px;color:var(--muted);margin-top:9px}
.stat-line.warn{color:var(--warn)}

/* ---------- 赛事卡片 ---------- */
.match-list{display:flex;flex-direction:column;gap:9px}
.daysep{display:flex;align-items:center;gap:10px;margin:14px 0 4px;font-size:13px;color:var(--ink-2);font-weight:700}
.daysep::after{content:"";flex:1;height:1px;background:var(--line)}
.daysep .pill{background:#E7ECF4;color:var(--ink-2);font-size:11.5px;font-weight:600;padding:2px 8px;border-radius:99px}

.mc{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:13px 15px;box-shadow:var(--shadow);transition:.18s}
.mc:hover{border-color:#CFD9E6}
.mc.picked{border-color:#F0A8A8;background:linear-gradient(180deg,#FFFAFA,#fff);box-shadow:0 1px 2px rgba(224,32,32,.06),0 10px 26px -16px rgba(224,32,32,.5)}
.mc.off{opacity:.55}

.mc-top{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:12px;color:var(--muted);margin-bottom:9px}
.numtag{background:#1B2739;color:#fff;font-weight:700;font-size:12px;padding:2.5px 8px;border-radius:6px;letter-spacing:.4px;font-variant-numeric:tabular-nums}
.numtag.on{background:linear-gradient(150deg,#E93A3A,#C61A1A)}
.lgtag{background:#EEF2F8;color:#4A5B74;padding:2.5px 8px;border-radius:6px;font-weight:600}
.hot{background:#FFF3E0;color:#B45309;padding:2.5px 7px;border-radius:6px;font-weight:600}
.off-tag{background:#F1F4F8;color:#9AA6B8;padding:2.5px 8px;border-radius:6px;font-weight:600}
.mc-top .sp{flex:1}
.mc-top .tm{font-variant-numeric:tabular-nums;color:var(--ink-2);font-weight:600}

.mc-mid{display:flex;align-items:center;gap:10px;margin-bottom:11px}
.teams{flex:1;min-width:0;font-size:15.5px;font-weight:700;line-height:1.35}
.teams .vs{color:var(--muted);font-weight:500;font-size:12.5px;margin:0 7px}
.teams .rk{color:var(--muted);font-size:11.5px;font-weight:500}
.handicap{font-size:12px;color:var(--blue);background:var(--blue-l);border:1px solid #D5E6FA;padding:3px 9px;border-radius:7px;font-weight:700;white-space:nowrap}

/* 玩法切换 */
.pooltabs{display:inline-flex;background:#EEF2F8;border-radius:9px;padding:3px;gap:2px;margin-bottom:11px}
.pooltabs button{
  appearance:none;border:0;background:transparent;font:inherit;font-size:12.5px;font-weight:600;color:#5B6B84;
  padding:5px 13px;border-radius:7px;cursor:pointer;transition:.15s;white-space:nowrap;
}
.pooltabs button.active{background:#fff;color:var(--brand);box-shadow:0 1px 3px rgba(22,32,46,.14)}
.pooltabs button:disabled{color:#B7C0CE;cursor:not-allowed}

/* 赔率按钮 */
.odds{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
/* 2 项玩法（竞彩篮球：胜负 / 让分 / 大小分）—— 2 列铺满，不留空格子 */
.odds.two{grid-template-columns:repeat(2,1fr)}
.ob{
  appearance:none;font-family:inherit;cursor:pointer;border:1.5px solid var(--line);background:#fff;
  border-radius:11px;padding:9px 6px;text-align:center;transition:.15s;position:relative;overflow:hidden;
}
.ob:hover:not(:disabled):not(.sel){border-color:#C4CFDE;background:#FAFCFE;transform:translateY(-1px)}
.ob .lbl{display:block;font-size:12.5px;color:var(--ink-2);font-weight:600;margin-bottom:2px}
.ob .od{display:block;font-size:19px;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:.2px;color:var(--ink)}
.ob.sel{background:#D81919;border-color:#B01414;box-shadow:0 6px 16px -8px rgba(224,32,32,.85)}
.ob.sel .lbl{color:rgba(255,255,255,.92)}
.ob.sel .od{color:#fff}
.ob.sel::after{content:"✓";position:absolute;top:3px;right:6px;font-size:11px;color:rgba(255,255,255,.9);font-weight:700}
/* 不可投（该选项赔率缺失 / 官方封盘 / 整场停售）。
   原先靠 opacity:.75 让整体变淡 —— 但那是"整体变淡"，连文字一起糊掉，
   在手机小屏上就变成「看不清」（线上被反馈过两次）。
   现在：不降透明度，改用明确的浅灰底 + 可读的灰字 + **虚线边框**。
   虚线是通用的"此路不通"语义，即使颜色淡也一眼能看出这里有个不能点的选项。 */
.ob:disabled{
  background:#EEF1F6;border-color:#CFD7E1;border-style:dashed;
  cursor:not-allowed;opacity:1;
}
.ob:disabled .lbl{color:#75839A}
.ob:disabled .od{color:#96A2B4}
.ob:disabled .chg{opacity:.6}
.ob:disabled::after{content:none}

/* 已选中「且」当前不可投（停售 / 该选项无赔率）。
   真事：用户选好之后比赛停售，或赔率刷新后该选项没了值，
   按钮同时带上 .sel 与 disabled。上面 .ob:disabled 的特异性与 .ob.sel 相同、
   但在后面，于是底色被刷成浅灰；而 .ob:disabled .od 又把文字刷成浅灰 ——
   浅灰底 + 浅灰字 + opacity .75，整个按钮看起来就是个空白的白框，
   用户根本不知道自己选了什么。线上在手机上复现过。
   规则：**选中态永远要看得见**，所以这里用更高的特异性把它捞回来，
   用灰底白字表达「你选了它，但现在不能打」—— 既不隐形，也不会让人误以为还能点。 */
.ob.sel:disabled{
  background:#5A6472;
  border-color:#39404A;border-width:2px;
  box-shadow:none;opacity:1;cursor:not-allowed;
}
.ob.sel:disabled .lbl{color:rgba(255,255,255,.92)}
.ob.sel:disabled .od{color:#fff}
.ob.sel:disabled .chg{color:#fff;opacity:.9}
/* 选中+禁用时也要保留 ✓ —— 否则用户看不出自己选的是哪一项。
   （.ob:disabled::after{content:none} 会把它抹掉，这里用更高特异性抢回来） */
.ob.sel:disabled::after{content:"✓";color:rgba(255,255,255,.88)}

/* ---------- 侧栏 ---------- */
.col-side{position:sticky;top:14px}
.panel{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.panel-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--line-2);background:#FBFCFE}
.panel-head h2{margin:0;font-size:15.5px;letter-spacing:.3px}
.badge{font-size:12px;font-weight:700;background:#EEF2F8;color:#5B6B84;padding:3px 10px;border-radius:99px}
.badge.on{background:var(--brand-l);color:var(--brand)}
/* 方案栏本体不滚动，只让内容区在真正放不下时才滚。
   这里的 max-height 要给足：留白过多会导致「明明能全部显示却出现滚动条」。
   可用高度 = 视口 − 顶部吸附偏移(14) − 面板头(约50) − 底部留白(约26)。 */
.panel-body{
  padding:14px 16px 16px;
  max-height:calc(100vh - 90px);
  overflow-y:auto;
  overscroll-behavior:contain;
  scrollbar-width:thin;
  scrollbar-color:#CBD4E0 transparent;
}
.panel-body::-webkit-scrollbar{width:8px}
.panel-body::-webkit-scrollbar-track{background:transparent}
.panel-body::-webkit-scrollbar-thumb{background:#CBD4E0;border-radius:99px}
.panel-body::-webkit-scrollbar-thumb:hover{background:#B4BFCF}
.block{margin-bottom:16px}
.block-title{font-size:12.5px;font-weight:700;color:var(--ink-2);letter-spacing:.4px;margin-bottom:8px}
.block-title .muted{margin-left:5px}

.sel-list{display:flex;flex-direction:column;gap:7px}
.empty{font-size:13px;color:var(--muted);background:#F8FAFC;border:1px dashed var(--line);border-radius:10px;padding:14px;text-align:center}
.sel-item{display:flex;align-items:flex-start;gap:8px;background:#F8FAFC;border:1px solid var(--line-2);border-radius:10px;padding:8px 10px}
.sel-item .idx{width:19px;height:19px;flex:none;border-radius:50%;background:#1B2739;color:#fff;font-size:11px;font-weight:700;display:grid;place-items:center;margin-top:1px}
.sel-item .body{flex:1;min-width:0}
.sel-item .l1{font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sel-item .l2{font-size:11.5px;color:var(--muted);margin-top:2px}
.sel-item .l2 .pick{color:var(--brand);font-weight:700}
.sel-item .rm{appearance:none;border:0;background:transparent;color:#A9B3C2;font-size:16px;line-height:1;cursor:pointer;padding:2px 3px;border-radius:6px}
.sel-item .rm:hover{background:#FDECEC;color:var(--brand)}

.formula-list{display:flex;flex-wrap:wrap;gap:7px}
.fb{
  appearance:none;font-family:inherit;cursor:pointer;border:1.5px solid var(--line);background:#fff;
  border-radius:9px;padding:6px 11px;font-size:13px;font-weight:700;color:var(--ink-2);transition:.15s;
}
.fb:hover:not(:disabled):not(.sel){border-color:#C4CFDE;background:#FAFCFE}
.fb.sel{background:#D81919;border-color:#B01414;color:#fff;box-shadow:0 5px 13px -7px rgba(224,32,32,.85)}
.fb small{display:block;font-size:10.5px;font-weight:600;opacity:.7;margin-top:1px}
.fb:disabled{opacity:.4;cursor:not-allowed}

.row{display:flex;align-items:center;justify-content:space-between;gap:10px}
.stepper{display:flex;align-items:center;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:#fff}
.stepper button{appearance:none;border:0;background:#F8FAFC;width:34px;height:34px;font-size:17px;font-weight:700;color:var(--ink-2);cursor:pointer;font-family:inherit}
.stepper button:hover{background:#EEF2F8}
.stepper input{width:56px;height:34px;border:0;border-left:1px solid var(--line);border-right:1px solid var(--line);text-align:center;font:inherit;font-weight:700;outline:none;font-variant-numeric:tabular-nums}
.quick-mult{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap}
.quick-mult button{appearance:none;border:1px solid var(--line);background:#fff;border-radius:8px;padding:4px 10px;font-size:12px;font-weight:600;color:var(--ink-2);cursor:pointer;font-family:inherit}
.quick-mult button:hover:not(.on){border-color:#C4CFDE;background:#FAFCFE}
.quick-mult button.on{background:#D81919;border-color:#B01414;color:#fff}

/* 结果 */
.result{background:#F8FAFC;border:1px solid var(--line-2);border-radius:12px;padding:13px;margin-bottom:14px}
.result.has{background:linear-gradient(180deg,#FFF9F9,#fff);border-color:#F5D9D9}
.rrow{display:flex;justify-content:space-between;align-items:baseline;padding:5px 0;font-size:13px;color:var(--ink-2)}
.rrow+.rrow{border-top:1px dashed #E6ECF4}
.rrow b{font-size:15px;font-variant-numeric:tabular-nums;color:var(--ink)}
.rrow.hero{border-top:1px solid #F0DADA;margin-top:6px;padding-top:9px}
.rrow.hero b{font-size:20px;color:var(--brand);letter-spacing:.2px}
.rrow .hl{color:var(--ok);font-weight:700}
.rrow .small{font-size:11.5px;color:var(--muted);font-weight:400}
.capnote{margin-top:9px;background:#FFFBEB;border:1px solid #F6E3B4;color:#7A5A12;font-size:11.5px;border-radius:9px;padding:8px 10px;line-height:1.5}
.tip{font-size:11.5px;color:var(--muted);margin-top:9px;line-height:1.6}

/* ---------- 移动端吸底 ---------- */
.mobilebar{
  display:none;position:fixed;left:0;right:0;bottom:0;z-index:40;
  background:rgba(255,255,255,.96);backdrop-filter:blur(12px);border-top:1px solid var(--line);
  padding:10px 14px calc(10px + env(safe-area-inset-bottom));align-items:center;gap:12px;
}
.mobilebar.show{display:flex}
.mb-left{flex:1;display:flex;align-items:baseline;gap:10px;min-width:0}
.mb-left b{font-size:17px;color:var(--brand);font-variant-numeric:tabular-nums}
.mb-left span{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}

/* ---------- 弹窗 ---------- */
.modal{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;padding:22px}
.modal-mask{position:absolute;inset:0;background:rgba(16,24,36,.55);backdrop-filter:blur(3px)}
.modal-box{position:relative;background:#fff;border-radius:16px;width:min(820px,100%);max-height:92vh;display:flex;flex-direction:column;box-shadow:var(--shadow-lg);overflow:hidden}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;border-bottom:1px solid var(--line-2)}
.modal-head h3{margin:0;font-size:16.5px}
.modal-head .x{appearance:none;border:0;background:transparent;font-size:24px;line-height:1;color:#9AA6B8;cursor:pointer;padding:0 4px;border-radius:8px}
.modal-head .x:hover{background:#F1F4F8;color:var(--ink)}
.modal-tabs{display:flex;gap:4px;padding:10px 18px 0;border-bottom:1px solid var(--line-2)}
.modal-tabs .tab{appearance:none;border:0;background:transparent;font:inherit;font-size:13.5px;font-weight:600;color:var(--muted);padding:8px 14px;border-radius:9px 9px 0 0;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.modal-tabs .tab.active{color:var(--brand);border-bottom-color:var(--brand)}
.modal-body{padding:16px 18px;overflow-y:auto;flex:1;background:#F8FAFC}
.modal-foot{display:flex;gap:9px;justify-content:flex-end;padding:13px 18px;border-top:1px solid var(--line-2);background:#fff;flex-wrap:wrap}
#sheetText{width:100%;height:46vh;min-height:300px;border:1px solid var(--line);border-radius:10px;padding:13px;font:12.5px/1.75 ui-monospace,SFMono-Regular,Menlo,Consolas,"Microsoft YaHei",monospace;resize:vertical;outline:none;background:#fff;color:var(--ink)}

/* 方案单预览 */
.sheet{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;font-size:13px}
.sheet-hd{background:linear-gradient(120deg,#1B2739,#2A1A1D);color:#fff;padding:16px 18px}
.sheet-hd h4{margin:0 0 5px;font-size:16.5px;letter-spacing:.6px}
.sheet-hd p{margin:0;font-size:11.5px;color:#A9B6CB}
.sheet-sec{padding:13px 18px;border-bottom:1px solid var(--line-2)}
.sheet-sec h5{margin:0 0 9px;font-size:12.5px;color:var(--ink-2);letter-spacing:.5px}
.sheet table{width:100%;border-collapse:collapse;font-size:12.5px}
.sheet th{background:#F4F7FB;color:#5B6B84;font-size:11.5px;font-weight:700;text-align:left;padding:7px 8px;border-bottom:1px solid var(--line)}
.sheet td{padding:7px 8px;border-bottom:1px solid var(--line-2);vertical-align:top}
.sheet td.pick{color:var(--brand);font-weight:700;white-space:nowrap}
.sheet td.od{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.sheet .kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:9px}
.sheet .kv div{background:#F8FAFC;border:1px solid var(--line-2);border-radius:9px;padding:8px 10px}
.sheet .kv span{display:block;font-size:11px;color:var(--muted);margin-bottom:2px}
.sheet .kv b{font-size:14.5px;font-variant-numeric:tabular-nums}
.sheet .kv b.hi{color:var(--brand);font-size:17px}
.sheet-foot{padding:12px 18px;background:#F8FAFC;font-size:11px;color:var(--muted);line-height:1.75}

/* toast */
.toast{position:fixed;left:50%;bottom:96px;transform:translateX(-50%);background:#1B2739;color:#fff;font-size:13.5px;font-weight:600;padding:10px 20px;border-radius:99px;z-index:99;box-shadow:var(--shadow-lg)}
.toast.ok{background:#0E9F6E}
.toast.err{background:#C41818}

/* skeleton */
.sk{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px 15px;margin-bottom:9px}
.sk i{display:block;height:12px;border-radius:6px;background:linear-gradient(90deg,#EEF2F8 25%,#F7F9FC 50%,#EEF2F8 75%);background-size:200% 100%;animation:sh 1.3s infinite}
.sk i+i{margin-top:9px}
@keyframes sh{0%{background-position:200% 0}100%{background-position:-200% 0}}

/* ---------- 打印 ---------- */
@media print{
  body{background:#fff;padding:0}
  .topbar,.notice,.col-main,.mobilebar,.modal-head,.modal-tabs,.modal-foot,.toolbar{display:none!important}
  .modal{position:static;padding:0;display:block}
  .modal-mask{display:none}
  .modal-box{box-shadow:none;border-radius:0;max-height:none;width:100%;border:0}
  .modal-body{background:#fff;padding:0;overflow:visible}
  .sheet{border:0;border-radius:0}
  #paneText{display:none!important}
  .layout{display:block;padding:0}
  .col-side{position:static}
}

/* ---------- 响应式 ---------- */
/* 方案栏关闭按钮：基础态隐藏，抽屉模式下才显示。
   注意基础规则必须写在媒体查询之前 —— 同优先级时源码顺序靠后的会赢，
   否则媒体查询里的 display:block 会被后面的 display:none 盖掉。 */
.panel-x{
  display:none;appearance:none;border:0;background:transparent;color:#9AA6B8;
  font-size:22px;line-height:1;cursor:pointer;padding:0 6px;margin-left:2px;border-radius:8px;
}
.panel-x:hover{background:#F1F4F8;color:var(--ink)}

/* 方案抽屉的遮罩：点它关闭。桌面端方案栏是常驻侧栏，不需要遮罩 */
.side-mask{position:fixed;inset:0;background:rgba(16,24,36,.45);z-index:45}
@media (min-width:1081px){ .side-mask{display:none!important} }

@media (max-width:1080px){
  .layout{grid-template-columns:1fr}
  .col-side{position:fixed;left:0;right:0;bottom:0;top:auto;z-index:50;padding:0 10px;transform:translateY(calc(100% + 20px));transition:transform .28s cubic-bezier(.3,.8,.3,1);max-height:88vh;overflow:auto}
  .col-side.open{transform:translateY(0)}
  .panel{border-radius:16px 16px 0 0;box-shadow:0 -18px 50px -18px rgba(22,32,46,.5)}
  /* 抽屉顶部给一个抓手条，暗示可以下拉/点遮罩关闭 */
  .panel::before{content:"";display:block;width:42px;height:4px;border-radius:99px;background:#D8DEE7;margin:9px auto 0}
  .panel-body{max-height:70vh}
  .panel-x{display:block}
}
/* 场次卡片：窄屏友好，替代原先的 5 列表格。
   表格在手机宽度不足时会把「对阵」列压到只剩几个字宽，
   于是「叁武里 VS 上海海港」被拆成竖向单字（线上实拍过）。 */
.sheet .mlist{display:flex;flex-direction:column;gap:8px}
.sheet .mitem{border:1px solid var(--line);border-radius:9px;padding:9px 11px;background:#fff}
.sheet .mitem-hd{display:flex;align-items:baseline;gap:7px;font-size:11.5px;color:#5B6B84;margin-bottom:5px}
.sheet .mitem-hd b{color:var(--ink);font-size:12.5px}
.sheet .mitem-hd .tm{margin-left:auto;font-variant-numeric:tabular-nums;white-space:nowrap;color:#78859B}
.sheet .mitem-vs{font-size:14.5px;font-weight:700;color:var(--ink);margin-bottom:7px;word-break:break-word}
.sheet .mitem-vs i{font-style:normal;color:#9AA6B8;font-weight:600;font-size:12px;padding:0 7px}
.sheet .mitem-pick{display:flex;flex-wrap:wrap;align-items:baseline;gap:5px 10px}
.sheet .mitem-pick .pn{color:#78859B;background:#F2F5FA;border-radius:5px;padding:2px 7px;font-size:11.5px}
.sheet .mitem-pick .pk{font-size:12.5px;color:#3C4A5E}
.sheet .mitem-pick .pk b{color:var(--brand);font-size:14px;font-variant-numeric:tabular-nums}

/* ============================================================
   开奖大厅（数字彩）
   ============================================================ */
.ltabs{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:12px}
.ltab{
  appearance:none;font-family:inherit;cursor:pointer;
  border:1.5px solid var(--line);background:#fff;border-radius:9px;
  padding:7px 14px;font-size:13.5px;font-weight:700;color:var(--ink-2);transition:.15s;
}
/* 悬停只对「未选中」生效 —— 这条刚在赔率按钮上栽过，这里直接写对 */
.ltab:hover:not(.active):not(:disabled){border-color:#C4CFDE;background:#FAFCFE}
.ltab.active{background:#D81919;border-color:#B01414;color:#fff}

/* 开奖大厅的二级页签（大乐透/7星彩/…），一级是「数字彩/体育赛事」 */
.ltabs-sub{margin-top:-2px;margin-bottom:11px}
.ltabs-sub .ltab{font-size:12.5px;padding:5px 12px;border-radius:8px}

.lotbody{display:flex;flex-direction:column;gap:14px}
.lcard{background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);overflow:hidden}
.lcard-hd{display:flex;align-items:baseline;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line-2)}
.lcard-hd .no{font-size:17px;font-weight:800;color:var(--ink);font-variant-numeric:tabular-nums}
.lcard-hd .dt{margin-left:auto;font-size:12.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.lcard-bd{padding:14px 18px}

.balls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ball{
  width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:16px;font-weight:800;color:#fff;font-variant-numeric:tabular-nums;
  background:#D81919;            /* 默认红球（大乐透前区 / 数字彩） */
}
.ball.blue{background:#1E7FD8}   /* 后区 / 特别号 */
.ball-sep{color:#B4BCC9;font-size:15px;font-weight:700;padding:0 2px}

.lmeta{display:flex;flex-wrap:wrap;gap:8px 20px;margin-top:14px;font-size:12.5px;color:var(--muted)}
.lmeta b{color:var(--ink-2);font-variant-numeric:tabular-nums;font-weight:700}

.lprize{margin-top:14px;border-top:1px solid var(--line-2);padding-top:10px}
.lprize .row{display:flex;align-items:baseline;gap:10px;font-size:13px;padding:3px 0}
.lprize .lv{color:#3C4A5E;font-weight:700;min-width:64px}
.lprize .ct{color:var(--muted);font-variant-numeric:tabular-nums}
.lprize .am{margin-left:auto;color:var(--brand);font-weight:800;font-variant-numeric:tabular-nums}

.lhist{background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);overflow:hidden}
.lhist-hd{padding:12px 18px;border-bottom:1px solid var(--line-2);font-size:13px;font-weight:700;color:var(--ink-2)}
.lrow{display:flex;align-items:center;gap:10px;padding:10px 18px;border-bottom:1px solid var(--line-2)}
.lrow:last-child{border-bottom:0}
.lrow .no{font-size:12.5px;color:var(--muted);font-variant-numeric:tabular-nums;min-width:54px}
.lrow .dt{font-size:12px;color:#9AA6B8;font-variant-numeric:tabular-nums}
.lrow .ns{display:flex;gap:5px;flex-wrap:wrap;margin-left:auto;justify-content:flex-end}
.lrow .n{
  min-width:24px;height:24px;padding:0 5px;border-radius:6px;background:#F2F5FA;color:#3C4A5E;
  font-size:12.5px;font-weight:700;font-variant-numeric:tabular-nums;
  display:inline-flex;align-items:center;justify-content:center;
}
.lrow .n.back{background:#E8F2FD;color:#1E7FD8}

@media (max-width:720px){
  /* 开奖大厅：号码多（大乐透 7 个），窄屏把号码换到第二行，别把期号挤没了 */
  .lrow{flex-wrap:wrap;gap:6px 10px;padding:10px 14px}
  .lrow .ns{width:100%;margin-left:0;justify-content:flex-start}
  .ball{width:34px;height:34px;font-size:14.5px}
  .lcard-hd,.lcard-bd,.lhist-hd{padding-left:14px;padding-right:14px}
  .lcard-hd .no{font-size:15.5px}
}
/* ============================================================
   传统足彩（胜负彩 14 场 / 任选9场）
   ============================================================ */
.sfc-head{
  background:#fff;border:1px solid var(--line);border-radius:12px;
  padding:12px 18px;margin-bottom:12px;font-size:12.5px;color:var(--muted);
  display:flex;flex-wrap:wrap;gap:5px 18px;align-items:baseline;
}
.sfc-head b{color:var(--ink);font-size:15px;font-variant-numeric:tabular-nums}
.sfc-head .cut{color:var(--brand);font-weight:700}
.sfc-head .warn{color:var(--brand)}

.sfc-opts{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  background:#fff;border:1px solid var(--line);border-radius:11px;
  padding:9px 13px;margin-bottom:12px;
}
.sfc-opts-lb{font-size:12.5px;color:var(--muted)}
/* 吸底条里的「生成方案单」 */
.sfc-bar .sfc-go{padding:7px 16px;font-size:13.5px;border-radius:9px}

.sfc-list{display:flex;flex-direction:column;gap:8px}
.sfc-row{background:#fff;border:1px solid var(--line);border-radius:11px;padding:10px 13px}
.sfc-row .top{display:flex;align-items:center;gap:8px;font-size:11.5px;color:#5B6B84;margin-bottom:6px}
.sfc-row .no{
  flex:none;min-width:20px;height:20px;padding:0 5px;border-radius:6px;background:#EEF2F8;color:#3C4A5E;
  font-size:11.5px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;
  font-variant-numeric:tabular-nums;
}
.sfc-row .lg{color:#78859B}
.sfc-row .tm{margin-left:auto;font-variant-numeric:tabular-nums;color:#9AA6B8}
.sfc-vs{font-size:14.5px;font-weight:700;color:var(--ink);margin-bottom:8px}
.sfc-vs i{font-style:normal;color:#9AA6B8;font-weight:600;font-size:11.5px;padding:0 6px}
.sfc-vs .done{color:#0E9F6E;font-weight:800}

.sfc-picks{display:flex;gap:7px}
.sfcp{
  flex:1;appearance:none;font-family:inherit;cursor:pointer;
  border:1.5px solid var(--line);background:#fff;border-radius:9px;
  padding:6px 4px;font-size:13px;font-weight:700;color:var(--ink-2);
  display:flex;align-items:baseline;justify-content:center;gap:5px;transition:.15s;
}
.sfcp b{font-size:12px;color:#8A96A8;font-weight:600;font-variant-numeric:tabular-nums}
/* 悬停必须排除选中态 —— 这个坑在赔率按钮和过关方式上各栽过一次 */
.sfcp:hover:not(.on):not(:disabled){border-color:#C4CFDE;background:#FAFCFE}
.sfcp.on{background:#D81919;border-color:#B01414;color:#fff}
.sfcp.on b{color:rgba(255,255,255,.85)}
/* 不可投：不用 opacity（会连文字一起糊掉），用浅底 + 虚线边框 */
.sfcp:disabled{background:#F4F6FA;border-style:dashed;border-color:#DCE2EB;color:#A8B2C1;cursor:not-allowed}
.sfcp:disabled b{color:#BCC5D2}

.sfc-bar{
  position:sticky;bottom:0;margin-top:12px;background:#1B2739;color:#fff;
  border-radius:11px;padding:11px 16px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  font-size:12.5px;color:#A9B6CB;box-shadow:0 -8px 22px -14px rgba(22,32,46,.7);
}
.sfc-bar .big{font-size:17px;font-weight:800;color:#fff;font-variant-numeric:tabular-nums}
.sfc-bar .hint{margin-left:auto;color:#A9B6CB}
.sfc-bar .hint.ok{color:#5EE0A8;font-weight:700}

/* ============================================================
   数字彩（大乐透 / 7星彩 / 排列3 / 排列5）
   结构统一为「区」：大乐透 2 个区，按位玩法 N 个区。
   号码球用圆形 + 固定尺寸 —— 两位数（"35"）和一位数（"0"）
   在同一个网格里必须占同样宽度，否则 35 个球会参差不齐。
   ============================================================ */
.num-body{display:flex;flex-direction:column;gap:11px}
.nzone{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 15px 14px}
.nzone-hd{display:flex;align-items:baseline;gap:9px;margin-bottom:10px}
.nzone-hd b{font-size:13.5px;color:var(--ink);letter-spacing:.3px}
.nzone-hint{margin-left:auto;font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums}
/* 「已经选够」用绿色说出来，比只报数字更有用 —— 用户不用自己心算 */
.nzone-hint.ok{color:#0E9F6E;font-weight:700}

.nballs{display:flex;flex-wrap:wrap;gap:8px}
.nb{
  appearance:none;font-family:inherit;cursor:pointer;padding:0;
  flex:none;width:40px;height:40px;border-radius:50%;
  border:1.5px solid var(--line);background:#fff;color:var(--ink-2);
  font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;
  display:inline-flex;align-items:center;justify-content:center;
  transition:background .15s,border-color .15s,color .15s;
}
/* 悬停必须排除**所有**选中态。现在选中态有两个（.on 已选/拖码、.dan 胆码），
   少排除一个就会出现"鼠标移上去变浅、字还是白的"那种隐形 bug ——
   :hover 的特异性是 (0,3,0)，压得过任何一个 (0,2,0) 的状态类。
   这个坑在赔率按钮/过关方式/足彩选号/数字彩号码球上已经栽过四次。 */
.nb:hover:not(.on):not(.dan){border-color:#C4CFDE;background:#FAFCFE}
.nb.on{background:#D81919;border-color:#B01414;color:#fff}
/* 胆码：橙金底 + 一圈光环，与「已选/拖码」的红底一眼分得开。
   为什么不用同一个红色系：胆码和拖码在方案单上是**两种不同的东西**，
   颜色混了用户会看错票。 */
.nb.dan{
  background:linear-gradient(160deg,#F2A11E,#C87A00);border-color:#A86400;color:#fff;
  box-shadow:0 0 0 2px rgba(242,161,30,.30);
}
/* 大乐透后区用蓝球区分前区（红/蓝是彩民认惯的配色） */
.nballs.is-ball.z1 .nb.on{background:#1265C8;border-color:#0E4FA0}

/* 和值 / 跨度：这些是「值」不是「号码球」，用方角药丸更合适
   （0–27 一共 28 个，圆的排起来太空） */
.nballs.is-val{gap:6px}
.nb.is-valbtn{
  width:auto;min-width:40px;height:34px;padding:0 10px;border-radius:9px;font-size:13.5px;
}

/* 胆码 / 拖码 图例 */
.nlegend{
  display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-top:9px;
  font-size:11.5px;color:var(--muted);
}
.nlegend .nlg{
  display:inline-flex;align-items:center;gap:5px;font-weight:700;color:var(--ink-2);
}
.nlegend .nlg::before{content:"";width:12px;height:12px;border-radius:4px;flex:none}
.nlegend .nlg.dan::before{background:linear-gradient(160deg,#F2A11E,#C87A00)}
.nlegend .nlg.drag::before{background:#D81919}
.nlegend .vsub{flex:1 1 140px;min-width:0}

/* 投注方式页签
   ★ 细类**换行铺开、不横滑**：横滑会把后面的选项藏起来，用户根本不知道有几种
     （蚂蚁原话「显示不全」）。排列3 直选 8 种 / 组选 9 种，换行后 2~3 行，
     全部看得见，比"滑一下还有"清楚得多。 */
.num-plays{flex-wrap:wrap;gap:6px;margin-bottom:9px}
.num-plays .ltab{padding:5px 11px;font-size:12.5px;border-radius:8px}
/* 大类单独一行，3 个放得下，不换行 */
.num-cats{flex-wrap:wrap;gap:6px;margin-bottom:7px}
.num-cats .ltab{
  padding:6px 15px;font-size:13.5px;font-weight:700;border-radius:9px;
  background:#F4F7FB;border-color:#E1E7EF;color:#3C4A5E;
}
.num-cats .ltab:hover:not(.active):not(:disabled){background:#EAF0F8;border-color:#C9D6E6}
.num-cats .ltab.active{background:#1B2739;border-color:#1B2739;color:#fff}
.np-hint{margin:0 0 12px;font-size:12px;color:var(--muted);line-height:1.6}
/* 形态选号器里的两级页签 */
.ltabs.nmorph{margin:0 0 7px;flex-wrap:wrap}
.ltabs.nmode{margin:0 0 9px;font-size:12px;flex-wrap:wrap}

/* 方案单预览里的号码小球（与足彩方案单同一套 .mitem 版式） */
.sheet .mitem-pick .nball{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:26px;height:26px;padding:0 6px;border-radius:50%;
  background:#FBEEEE;border:1px solid #F3D6D6;color:var(--brand);
  font-size:12.5px;font-weight:800;font-variant-numeric:tabular-nums;
}
/* 大乐透后区在方案单里也用蓝球，跟前区区分（与选号页一致） */
.sheet .mitem-pick .nball.b{background:#EDF3FC;border-color:#D6E3F5;color:#1265C8}
/* 胆码用橙金，与拖码（红）分开 —— 票面上这是两种不同的东西 */
.sheet .mitem-pick .nball.dan{background:#FEF4E4;border-color:#F2D9AE;color:#A86400}

/* 数字彩方案单：「一行一位」。
   起因：按位玩法（排列3/5、7星彩）如果每位一张卡，7星彩要滚好几屏
   才能看全自己选了什么。标签与号码同排后高度减半，7 位也能一屏看完。
   标签给固定宽度（「特别号」三字比「第1位」宽），否则各位的号码球对不齐。 */
.sheet .mlist.num-rows .mitem{display:flex;align-items:center;gap:10px;padding:7px 11px}
.sheet .mlist.num-rows .mitem-hd{margin:0;flex:none;width:58px}
.sheet .mlist.num-rows .mitem-pick{flex:1;min-width:0}

/* ============================================================
   实时比分（比分直播）
   ------------------------------------------------------------
   ⚠️ 类名一律用 lv- 前缀：顶栏那个同步状态条已经占了 `.live` / `.live-txt`，
      同名会互相污染（这个项目在 `.sp` 上栽过一次，撞车不报错、只是看着不对）。
   布局要点：比分区用「1fr auto 1fr」三栏 —— 主队名右对齐、客队名左对齐，
   这样一列里所有比分竖直对齐，扫一眼就能横向比大小。
   ============================================================ */
/* 筛选页签上的计数小药丸 */
.ltab .lcnt{
  display:inline-block;min-width:16px;padding:0 4px;margin-left:5px;border-radius:99px;
  background:#EEF2F8;color:#5B6B84;font-size:11px;font-weight:700;line-height:16px;
  text-align:center;font-variant-numeric:tabular-nums;
}
.ltab.active .lcnt{background:rgba(255,255,255,.28);color:#fff}
.ltab .lcnt.hot{background:#FDECEC;color:var(--brand)}
.ltab.active .lcnt.hot{background:#fff;color:var(--brand)}

.lv-list{display:flex;flex-direction:column;gap:9px}
.lv-row{
  background:#fff;border:1px solid var(--line);border-left:3px solid var(--line);
  border-radius:11px;padding:10px 13px 11px;
}
/* 直播中的场次：左侧一条红边 + 比分高亮，让它在一片卡片里跳出来 */
.lv-row.is-live{border-left-color:var(--brand);background:linear-gradient(180deg,#FFFDFD,#fff)}
.lv-top{display:flex;align-items:center;gap:8px;font-size:11.5px;color:#78859B;margin-bottom:7px}
.lv-top .lv-no{
  flex:none;min-width:20px;height:20px;padding:0 6px;border-radius:6px;background:#EEF2F8;color:#3C4A5E;
  font-weight:800;display:inline-flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums;
}
.lv-row.is-live .lv-no{background:#FDECEC;color:var(--brand)}
.lv-top .lv-lg{color:#5B6B84}
.lv-top .lv-tm{margin-left:auto;font-variant-numeric:tabular-nums;color:#9AA6B8}

.lv-mid{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px}
.lv-team{font-size:14px;font-weight:700;color:var(--ink);word-break:break-word}
.lv-team.h{text-align:right}
.lv-team.a{text-align:left}
/* ★ 比分块必须**定宽居中**。
   中间栏是 auto（按内容宽），而「1:1」比「VS」宽 —— 不定宽的话每行的中间栏宽度
   都不一样，两边的 1fr 跟着缩，结果**所有行的比分和队名都错位**，
   "扫一眼比大小"这个设计目的就废了。真机实测 x 去重出现 3 个值才发现
   （jsdom 量不出布局，是靠 CDP 断言抓到的）。 */
.lv-sc{
  display:inline-flex;align-items:baseline;justify-content:center;gap:3px;white-space:nowrap;
  min-width:86px;font-variant-numeric:tabular-nums;font-weight:800;
}
.lv-sc .lv-a,.lv-sc .lv-b{font-size:21px;line-height:1.1}
.lv-sc i{font-style:normal;color:#B4BFCF;font-size:14px;font-weight:700}
.lv-row.is-live .lv-sc .lv-a,.lv-row.is-live .lv-sc .lv-b{color:var(--brand)}
.lv-sc .lv-vs{font-style:normal;font-size:13px;font-weight:700;color:#A8B2C1;letter-spacing:1px}
.lv-sc .lv-na{font-style:normal;font-size:12.5px;font-weight:700;color:#A8B2C1}
/* 已结束的比分读起来要"沉"一点，跟进行中的区分开 */
.lv-row.st-end .lv-sc .lv-a,.lv-row.st-end .lv-sc .lv-b{color:var(--ink-2)}

/* 进球闪一下 —— 不做声音提示：这站主要在微信里打开，突然出声比不提示更糟 */
@keyframes lvflash{
  0%{background:#FFF1F1;box-shadow:0 0 0 0 rgba(224,32,32,.45)}
  100%{background:#fff;box-shadow:0 0 0 10px rgba(224,32,32,0)}
}
.lv-row.flash{animation:lvflash 1.1s ease-out 2}

.lv-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 9px;margin-top:7px;font-size:11.5px;color:#78859B}
.lv-badge{display:inline-flex;align-items:center;gap:5px;font-weight:700;color:#5B6B84}
.lv-badge.live{color:var(--brand)}
.lv-dot{
  width:7px;height:7px;border-radius:50%;background:var(--brand);flex:none;
  box-shadow:0 0 0 0 rgba(224,32,32,.6);animation:pulse 1.8s infinite;
}
.lv-min{color:var(--brand);font-weight:700;font-variant-numeric:tabular-nums}

/* 进球事件：主客两列，谁进的、第几分钟 */
.lv-goals{display:grid;grid-template-columns:1fr 1fr;gap:3px 12px;margin-top:7px;position:relative}
/* 中间一条细分隔线：主队进球靠右、客队靠左，没有这条线时两列紧挨着像同一句 */
.lv-goals::before{
  content:"";position:absolute;left:50%;top:1px;bottom:1px;width:1px;background:var(--line-2);
}
.lv-gl{display:flex;flex-direction:column;gap:3px;min-width:0}
.lv-gl.h{align-items:flex-end;text-align:right}
.lv-goal{font-size:11.5px;color:#5B6B84;line-height:1.45;word-break:break-word}
.lv-goal b{color:var(--ink);font-variant-numeric:tabular-nums}
.lv-goal i{font-style:normal;color:#A8B2C1}

.lv-foot{
  margin-top:12px;padding:9px 13px;border:1px solid var(--line);border-radius:10px;background:#F8FAFC;
  font-size:11.5px;color:var(--muted);line-height:1.7;
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
}
.lv-foot > span{flex:1 1 200px;min-width:0}
.lv-foot .btn{flex:none}

@media (max-width:720px){
  .sfc-row{padding:9px 11px}
  .sfcp{font-size:12.5px;padding:6px 2px;gap:4px}
  .sfcp b{font-size:11.5px}
  .sfc-vs{font-size:13.5px}
  .sfc-head{padding:11px 13px}
  .sfc-bar{padding:10px 13px;gap:9px;font-size:12px}
  .sfc-bar .big{font-size:15.5px}
  /* 数字彩：360px 宽的手机上 35 个球排 7 列 × 5 行，
     球径 36px + 间隙 6px = 42px 一列，一眼能看清、手指也点得准 */
  .nzone{padding:11px 12px 13px}
  .nzone-hd b{font-size:13px}
  .nballs{gap:6px}
  .nb{width:36px;height:36px;font-size:14px}
  .sheet .mitem-pick .nball{min-width:24px;height:24px;font-size:12px}
  /* 实时比分：名字与比分各收一档，保证「主队 比分 客队」在 360px 上也不换行 */
  .lv-row{padding:9px 11px 10px}
  .lv-team{font-size:13px}
  .lv-sc .lv-a,.lv-sc .lv-b{font-size:19px}
  .lv-mid{gap:8px}
  .lv-goals{gap:3px 8px}
  .lv-goal{font-size:11px}
  /* 筛选页签收窄，让「全部/直播中/未开播/已结束」四个在手机上排成一行 ——
     不收窄的话「已结束」会被挤到第二行，看着像少了一块（真机 390px 下发生过） */
  #lvFilters .ltab{padding:5px 9px;font-size:12px}
  #lvFilters .lcnt{margin-left:4px;min-width:15px;font-size:10.5px;line-height:15px}
}
@media (max-width:720px){
  .wrap{padding:0 12px}
  .brand .sub{display:none}
  .brand h1{font-size:16.5px}
  .logo{width:38px;height:38px;font-size:18px;border-radius:10px}
  .live{padding:5px 10px}
  .live-txt b{font-size:12px}
  .teams{font-size:14.5px}
  .ob .od{font-size:16px}
  .ogrid{grid-template-columns:repeat(auto-fit,minmax(64px,1fr))}
  .crsgrid .crsrow{grid-template-columns:34px 1fr}
  .modal{padding:0;align-items:flex-end}
  .modal-box{border-radius:16px 16px 0 0;max-height:94vh}
  .modal-foot{padding-bottom:calc(13px + env(safe-area-inset-bottom))}
  .legend{display:none}
}

/* ============================================================
   主视图导航
   ============================================================ */
.mainnav{display:flex;align-items:center;gap:6px;padding-bottom:10px;position:relative;z-index:1;flex-wrap:nowrap}
.mntab{
  appearance:none;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.07);color:#C8D2E0;
  font:inherit;font-size:13.5px;font-weight:600;padding:7px 16px;border-radius:10px;cursor:pointer;transition:.15s;
}
.mntab:hover:not(.active){background:rgba(255,255,255,.14);color:#fff}
.mntab.active{background:#fff;color:var(--ink);border-color:#fff}
.mntab .mcnt{
  display:inline-block;min-width:18px;padding:0 5px;margin-left:3px;border-radius:99px;
  background:var(--brand);color:#fff;font-size:11px;line-height:17px;text-align:center;
}
.mn-sp{flex:1}
.legend{font-size:11.5px;color:#93A2B8;white-space:nowrap}
.legend i{font-style:normal;font-weight:700}

/* 走势按钮 */
.glyph{
  appearance:none;border:1px solid var(--line);background:#fff;color:var(--blue);
  font:inherit;font-size:11.5px;font-weight:600;padding:2px 9px;border-radius:7px;cursor:pointer;transition:.15s;
}
.glyph:hover{background:var(--blue-l);border-color:#C6DDF6}

/* 赔率涨跌箭头 */
.chg{font-style:normal;font-size:11px;font-weight:700;margin-left:2px;vertical-align:top;line-height:1.6}
.chg.dn{color:#0E9F6E}
.chg.up{color:var(--brand)}
.ob.sel .chg{color:#fff;opacity:.9}

/* ============================================================
   选项网格（总进球 / 比分 / 半全场）
   ============================================================ */
/* ★ `auto-fit` 而不是 `auto-fill` —— 两者只在「项目数 < 轨道数」时有区别：
     auto-fill 会**保留空轨道**，于是宽屏下 6 个按钮占 6 条轨道、右侧空出 170px；
     auto-fit 把空轨道折叠掉，按钮平分整行宽度。
     项目数 ≥ 轨道数时（例如比分 13 个按钮）两者**完全等价**，手机端因此是 no-op。 */
.ogrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(76px,1fr));gap:7px}
.ogrid .ob{padding:7px 4px;border-radius:9px}
.ogrid .ob .lbl{font-size:11.5px;margin-bottom:1px}
.ogrid .ob .od{font-size:15px}
.ogrid .ob.sel::after{font-size:10px;top:1px;right:4px}

.crsgrid{display:flex;flex-direction:column;gap:8px}
.crsgrid .crsrow{display:grid;grid-template-columns:42px 1fr;gap:9px;align-items:start}
.crslb{
  font-size:11.5px;font-weight:700;color:#5B6B84;background:#EEF2F8;border-radius:7px;
  padding:5px 0;text-align:center;margin-top:1px;
}

.empty.tiny{font-size:12px;padding:9px}
.appver{
  display:inline-block;margin:0 8px 0 4px;padding:1px 7px;border-radius:999px;
  background:#EEF2F8;color:#5B6B84;font:11px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  vertical-align:1px;
}
.appver.bad{color:#C41818;font-weight:700}
.appver:empty{display:none}
.empty.big{padding:44px 20px;font-size:14px;line-height:1.8}
.empty .errbox{
  margin:12px auto;max-width:720px;text-align:left;
  background:#FFF7F7;border:1px solid #F3D6D6;border-radius:10px;padding:12px 14px;
  font:12.5px/1.7 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  color:#8A2B2B;word-break:break-all;white-space:pre-wrap;
}
.empty code{
  display:inline-block;margin-top:4px;padding:3px 8px;border-radius:6px;
  background:#F1F4F8;color:#1B2739;font:12px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
.ptag{color:var(--brand);font-weight:700}
.pick{color:var(--brand);font-weight:700;margin-right:1px}

/* ============================================================
   赔率走势弹窗
   ============================================================ */
.modal-box.narrow{width:min(620px,100%)}
.htabs{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:12px}
.htab{
  appearance:none;border:1px solid var(--line);background:#fff;font:inherit;font-size:12.5px;font-weight:600;
  color:var(--ink-2);padding:5px 11px;border-radius:9px;cursor:pointer;transition:.15s;
}
.htab small{display:inline-block;margin-left:4px;font-size:10.5px;color:var(--muted)}
.htab.active{background:linear-gradient(165deg,#1E7FD8,#0A5AAE);border-color:#0A5AAE;color:#fff}
.htab.active small{color:rgba(255,255,255,.8)}
.htable{max-height:44vh;overflow:auto;border:1px solid var(--line-2);border-radius:10px}
.htable table{width:100%;border-collapse:collapse;font-size:13px;background:#fff}
.htable th{
  position:sticky;top:0;background:#F4F7FB;color:#5B6B84;font-size:11.5px;font-weight:700;
  text-align:left;padding:7px 11px;border-bottom:1px solid var(--line);z-index:1;
}
.htable td{padding:7px 11px;border-bottom:1px solid var(--line-2)}
.htable tr:last-child td{border-bottom:0}
.htable .pk{font-weight:600;color:var(--ink-2)}
.htable .nm{font-variant-numeric:tabular-nums;text-align:right;color:#5B6B84}
.htable .nm.now{font-weight:700;color:var(--ink)}
.htable .nm .dn{color:#0E9F6E;font-weight:700}
.htable .nm .up{color:var(--brand);font-weight:700}
.htable .nm .flat{color:#B4BCC9}
/* 走势列头里的盘口（让球线 / 大小分线）：小一号、跟正文区分开，别抢了「初盘 / 即时」 */
.htable th .hc{display:inline-block;margin-left:4px;font-size:11px;color:var(--blue);font-weight:700}
/* 盘口中途变过时提醒：初盘与即时不是同一个盘口，赔率不能直接比 */
.hnote{
  font-size:11.5px;line-height:1.7;color:#8A5A00;background:#FFF8E8;border:1px solid #F0DEB0;
  border-radius:8px;padding:6px 10px;margin-top:9px;
}
.hfoot{font-size:11.5px;color:var(--muted);margin-top:9px}
.htimes{margin-top:10px;font-size:12px;color:var(--ink-2)}
.htimes summary{cursor:pointer;color:var(--blue);font-weight:600;font-size:12px}
.htimes ol{margin:8px 0 0;padding-left:22px;max-height:22vh;overflow:auto;color:var(--muted);line-height:1.9}

/* ============================================================
   方案核对
   ============================================================ */
.vwrap{padding-top:18px;padding-bottom:60px}
.vhead{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.vhead h2{margin:0;font-size:18px}
.vsub{margin:5px 0 0;font-size:12.5px;color:var(--muted);max-width:640px;line-height:1.7}
.vctl{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.vctl input[type=date]{
  padding:8px 11px;border:1px solid var(--line);border-radius:10px;font:inherit;font-size:13.5px;
  background:#fff;outline:none;color:var(--ink-2);
}
.vlist{display:flex;flex-direction:column;gap:14px}

.vcard{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.vhead-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 16px;border-bottom:1px solid var(--line-2);background:#FBFCFE;flex-wrap:wrap}
.vmeta{font-size:12.5px;color:var(--muted)}
.vmeta b{color:var(--ink);font-size:13.5px;margin-right:2px}
.vstate{font-size:12.5px;font-weight:700;padding:4px 12px;border-radius:99px;background:#EEF2F8;color:#5B6B84;white-space:nowrap}
.vstate.win{background:#E7F7EF;color:#0B7A55}
.vstate.lose{background:#FDECEC;color:#B41717}
.vstate.pending{background:#FFF6E5;color:#96650B}

.vlegs{padding:4px 0}
.vleg{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1.6fr) auto;gap:12px;align-items:center;padding:9px 16px;border-bottom:1px solid var(--line-2)}
.vleg:last-child{border-bottom:0}
.vleg.leg-hit{background:#F6FCF9}
.vleg-l{font-size:13px;color:var(--muted);min-width:0}
.vleg-l b{color:var(--ink);font-size:13.5px;margin-right:5px}
.vteams{display:block;margin-top:2px;font-size:13.5px;color:var(--ink);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vleg-m{font-size:12.5px;color:var(--ink-2);min-width:0}
.vleg-r{display:flex;flex-direction:column;align-items:flex-end;gap:2px;white-space:nowrap}
.vres{font-size:12.5px;font-weight:700}
.vres.hit{color:#0B7A55}
.vres.miss{color:#B41717}
.vres.void{color:#96650B}
.vres.pending{color:var(--muted);font-weight:600}
.vact{font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums}

.vfoot{display:flex;gap:18px;flex-wrap:wrap;padding:12px 16px;background:#F8FAFC;border-top:1px solid var(--line-2);font-size:12.5px;color:var(--muted)}
.vfoot b{font-size:14px;color:var(--ink);font-variant-numeric:tabular-nums}
.vfoot .up{color:#0B7A55;font-weight:700}
.vfoot .dn{color:#B41717;font-weight:700}
.vcard-act{padding:10px 16px;border-top:1px solid var(--line-2);text-align:right}

@media (max-width:720px){
  .vleg{grid-template-columns:1fr;gap:5px}
  .vleg-r{align-items:flex-start;flex-direction:row;gap:8px}
  .vmeta{font-size:11.5px}
  .mn-sp{display:none}
  .unote{display:none}
  .uname{max-width:76px;font-size:12px;padding:4px 9px}
  .vstore{font-size:12.5px}
}

/* ============================================================
   用户区 / 登录注册
   ============================================================ */
.userbox{display:flex;align-items:center;gap:7px}
.uname{
  font-size:13px;font-weight:600;color:#fff;background:rgba(255,255,255,.14);
  border:1px solid rgba(255,255,255,.16);padding:5px 11px;border-radius:9px;
  max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.unote{font-size:11.5px;color:#93A2B8;white-space:nowrap}

.authswitch{display:flex;gap:4px;background:#EEF2F8;border-radius:10px;padding:4px;margin-bottom:16px}
.asw{
  flex:1;appearance:none;border:0;background:transparent;font:inherit;font-size:13px;font-weight:600;
  color:#5B6B84;padding:8px;border-radius:8px;cursor:pointer;transition:.15s;white-space:nowrap;
}
.asw.active{background:#fff;color:var(--brand);box-shadow:0 1px 3px rgba(22,32,46,.14)}

.fld{display:block;margin-bottom:13px}
.fld span{display:block;font-size:12.5px;font-weight:600;color:var(--ink-2);margin-bottom:6px}
.fld input{
  width:100%;padding:11px 13px;border:1px solid var(--line);border-radius:10px;
  font:inherit;font-size:14.5px;outline:none;transition:.15s;background:#fff;color:var(--ink);
}
.fld input:focus{border-color:#9EB6D6;box-shadow:0 0 0 3px rgba(11,107,203,.1)}
.autherr{
  background:#FDECEC;border:1px solid #F5D9D9;color:#B41717;font-size:13px;
  border-radius:10px;padding:10px 12px;margin-bottom:13px;line-height:1.6;
}
.authnote{font-size:11.5px;color:var(--muted);line-height:1.8;margin-top:12px}
.authnote b{color:var(--ink-2)}

/* ============================================================
   方案存储位置提示
   ============================================================ */
.vstore{
  display:flex;align-items:center;gap:9px;flex-wrap:wrap;
  background:#F8FAFC;border:1px solid var(--line);border-radius:12px;
  padding:11px 14px;margin-bottom:14px;font-size:13px;
}
.vstore b{font-weight:700;color:var(--ink)}
.st-dot{width:8px;height:8px;border-radius:50%;flex:none}
.st-dot.cloud{background:#0E9F6E;box-shadow:0 0 0 3px rgba(14,159,110,.16)}
.st-dot.local{background:#E8A33D;box-shadow:0 0 0 3px rgba(232,163,61,.16)}
.st-tip{font-size:12px;color:var(--muted)}

/* ============================================================
   盘口行（胜平负 / 让球 并列常驻，不用切页签）
   ============================================================ */
.optrow{display:grid;grid-template-columns:70px minmax(0,1fr);gap:10px;align-items:center;margin-bottom:8px}
.optrow:last-child{margin-bottom:0}
.optlb{
  font-size:11.5px;font-weight:700;color:#4A5B74;background:#F2F5FA;border-radius:8px;
  padding:9px 4px;text-align:center;line-height:1.25;word-break:break-all;
}
.optrow.off .optlb{color:#B4BCC9;background:#F7F9FC}
.optrow .offtip{font-size:12px;color:#B4BCC9;padding:0 4px}

/* 更多玩法 */
.morebtn{
  appearance:none;width:100%;border:0;background:transparent;color:var(--blue);
  font:inherit;font-size:12.5px;font-weight:600;padding:7px 2px 2px;cursor:pointer;text-align:right;
}
.morebtn:hover{text-decoration:underline}
.morebtn i{font-style:normal;margin-left:2px}
.morebtn.open{color:var(--ink-2)}
.morebox{margin-top:5px;padding-top:10px;border-top:1px dashed var(--line)}
.xtabs{display:inline-flex;background:#EEF2F8;border-radius:9px;padding:3px;gap:2px;margin-bottom:10px;flex-wrap:wrap}
.xtabs .xpool{
  appearance:none;border:0;background:transparent;font:inherit;font-size:12.5px;font-weight:600;
  color:#5B6B84;padding:5px 12px;border-radius:7px;cursor:pointer;transition:.15s;white-space:nowrap;
}
.xtabs .xpool.active{background:#fff;color:var(--brand);box-shadow:0 1px 3px rgba(22,32,46,.14)}

/* ============================================================
   自由过关：关数按钮 + 已选条
   ============================================================ */
.foldgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}
.foldgrid .fb{padding:9px 4px;text-align:center;font-size:13.5px;border-radius:9px}
.fold-sel{margin-top:9px}
.fsbox{
  display:flex;align-items:center;gap:9px;background:#F8FAFC;border:1px solid var(--line);
  border-radius:10px;padding:6px 7px 6px 12px;
}
.fslb{font-size:12px;color:var(--muted);flex:none}
.fschips{
  flex:1;min-width:0;font-size:13px;font-weight:700;color:var(--ink);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.fschips.empty{color:#B4BCC9;font-weight:400}
.fsclr{
  appearance:none;flex:none;border:1px solid var(--line);background:#fff;border-radius:8px;
  font:inherit;font-size:12px;font-weight:600;color:var(--ink-2);padding:4px 10px;cursor:pointer;transition:.15s;
}
.fsclr:hover:not(:disabled){background:#FDECEC;border-color:#F5D9D9;color:var(--brand)}
.fsclr:disabled{opacity:.45;cursor:not-allowed}

/* ============================================================
   回到顶部
   ------------------------------------------------------------
   只在单列布局（≤1080px）出现：桌面是两列，右下角那个位置是方案栏，
   fixed 按钮会盖在它上面。位置要避开移动端吸底条（60px 高）。
   ============================================================ */
.to-top{
  position:fixed;right:14px;
  bottom:calc(76px + env(safe-area-inset-bottom));
  z-index:38;width:44px;height:44px;padding:0;
  display:none;align-items:center;justify-content:center;
  appearance:none;cursor:pointer;
  border-radius:50%;border:1px solid var(--line);
  background:rgba(255,255,255,.96);color:var(--ink-2);
  box-shadow:0 8px 22px -10px rgba(22,32,46,.5);
  transition:opacity .18s,transform .12s;
}
.to-top.show{display:flex}
.to-top:hover{border-color:#C9D3E0;color:var(--brand)}
.to-top:active{transform:scale(.93)}
/* 桌面两列布局下不显示（右下角是方案栏） */
@media (min-width:1081px){ .to-top{display:none!important} }

/* ============================================================
   合规声明页脚 + 微信内提示
   ============================================================ */
.site-foot{
  margin-top:24px;padding:20px 0 28px;
  border-top:1px solid var(--line);background:#FBFCFE;
  font-size:12.5px;color:var(--muted);line-height:1.9;
}
.site-foot p{margin:0 0 7px}
.site-foot p:last-child{margin-bottom:0}
.sf-strong{color:var(--ink-2);font-weight:700;font-size:13px}
.sf-dim{color:#9AA6B8}

.wx-tip{
  background:#F0F7FF;border:1px solid #CFE2F7;border-radius:10px;
  padding:10px 13px;margin-bottom:12px;font-size:12.5px;line-height:1.75;color:#25537F;
}
.wx-tip b{color:#12406B}

@media (max-width:720px){
  .optrow{grid-template-columns:70px minmax(0,1fr);gap:8px}
  .optlb{font-size:11px;padding:8px 2px;word-break:keep-all}
  .foldgrid{grid-template-columns:repeat(4,1fr);gap:6px}
  .foldgrid .fb{font-size:12.5px;padding:8px 2px}
  .xtabs .xpool{padding:5px 10px;font-size:12px}
}

/* ============================================================
   历史赛果页 / 用户管理页
   ============================================================ */
.hfilter{
  display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  background:#fff;border:1px solid var(--line);border-radius:var(--radius);
  padding:10px 14px;margin-bottom:12px;box-shadow:var(--shadow);
}
.hstat{margin-left:auto;font-size:12.5px;color:var(--muted)}

.hdatebar{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:12px}
.hdatebar button{
  appearance:none;border:1px solid var(--line);background:#fff;border-radius:999px;
  font:inherit;font-size:12.5px;font-weight:600;color:var(--ink-2);
  padding:5px 13px;cursor:pointer;transition:.15s;
}
.hdatebar button:hover:not(.on){background:#F4F7FB}
.hdatebar button.on{background:var(--brand);border-color:var(--brand);color:#fff}

.hlist{display:flex;flex-direction:column;gap:14px}
.hday{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.hday-head{
  display:flex;align-items:center;gap:10px;
  padding:11px 15px;border-bottom:1px solid var(--line-2);background:#FBFCFE;
}
.hday-head h3{margin:0;font-size:14.5px}
.hday-head .pill{margin-left:auto}

.hrow{
  display:grid;grid-template-columns:88px minmax(0,1.5fr) 74px minmax(0,1.2fr) 92px;
  gap:10px;align-items:center;padding:10px 15px;border-bottom:1px solid var(--line-2);
  font-size:13px;
}
.hrow:last-child{border-bottom:0}
.hrow:hover{background:#FAFBFD}
.hrow .hnum{font-weight:700;color:var(--ink)}
.hrow .hmatch{font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hrow .hleague{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hrow .hscore{
  text-align:center;font-weight:800;font-variant-numeric:tabular-nums;
  color:#fff;background:#94A3B8;border-radius:8px;padding:3px 0;font-size:13.5px;
}
.hrow .hscore.done{background:var(--ink)}
.hrow .hscore.cancel{background:#B4BCC9;font-size:11.5px}
.hrow .hscore.pending{background:#CBD5E1;color:#475569;font-size:11.5px}
.hres{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}
.hres em{
  font-style:normal;font-size:11px;font-weight:700;letter-spacing:.4px;
  background:#EEF2F8;color:#5B6B84;border-radius:6px;padding:2px 7px;
}
.hres em.on{background:#FDECEC;color:var(--brand)}
.hlist .empty{padding:34px 20px}

/* ------- 用户管理 ------- */
.astats{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.astat{
  flex:1;min-width:120px;background:#fff;border:1px solid var(--line);
  border-radius:var(--radius);box-shadow:var(--shadow);padding:12px 15px;
}
.astat b{display:block;font-size:21px;line-height:1.25;font-variant-numeric:tabular-nums}
.astat span{font-size:12px;color:var(--muted)}

.awarn{
  background:#FFF7F7;border:1px solid #F3D6D6;border-radius:10px;
  padding:10px 14px;margin-bottom:12px;color:#8A2B2B;font-size:13px;
}

.alist{display:flex;flex-direction:column;gap:10px}
.acard{
  display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) auto;
  gap:14px;align-items:center;
  background:#fff;border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:13px 16px;
}
.acard.off{background:#FCFCFD;opacity:.82}
.acard.me{border-color:#F5D9D9;background:#FFFCFC}
.awho{display:flex;align-items:center;gap:9px;flex-wrap:wrap;min-width:0}
.awho b{font-size:14.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ameta{font-size:12px;color:var(--muted);line-height:1.8}
.ameta code{background:#F1F4F8;border-radius:4px;padding:1px 5px;font-size:11.5px}
.arole{font-size:11px;font-weight:700;border-radius:999px;padding:2px 9px;letter-spacing:.3px}
.arole.admin{background:#FDECEC;color:var(--brand)}
.arole.user{background:#EEF2F8;color:#5B6B84}
.astat2{font-size:11px;font-weight:700;border-radius:999px;padding:2px 9px}
.astat2.active{background:#E9F8F1;color:#0E7A55}
.astat2.disabled{background:#F3F4F6;color:#8A93A3}
.atag{font-size:11px;font-weight:700;color:var(--brand)}
.aact{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.anote{font-size:12.5px;color:var(--muted);line-height:1.9;margin-top:14px}
.anote code{background:#F1F4F8;border-radius:4px;padding:1px 5px;font-size:12px}

/* ------- 选择 / 搜索控件（历史页与核对页复用） ------- */
.vctl input[type=search]{
  appearance:none;border:1px solid var(--line);background:#fff;border-radius:9px;
  font:inherit;font-size:13px;padding:8px 12px;min-width:200px;color:var(--ink);
}
.vctl input[type=search]:focus{outline:none;border-color:#BBD0E8;box-shadow:0 0 0 3px #EEF5FE}
.vctl select{
  appearance:none;border:1px solid var(--line);background:#fff;border-radius:9px;
  font:inherit;font-size:13px;padding:8px 30px 8px 12px;color:var(--ink);cursor:pointer;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath fill='%2378859B' d='M1 1l5 5 5-5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 11px center;background-size:11px;
}

@media (max-width:720px){
  .hrow{grid-template-columns:76px minmax(0,1fr) 64px;gap:8px;padding:9px 12px}
  .hrow .hleague{display:none}
  .hres{display:none}
  .acard{grid-template-columns:1fr;gap:9px}
  .aact{justify-content:flex-start}
  .vctl input[type=search]{min-width:0;flex:1}
}

/* ------- 未开售 / 已停售 的空状态块 ------- */
.salebox{
  display:inline-block;text-align:left;margin:0 auto 4px;
  background:linear-gradient(180deg,#FFF9F9,#fff);border:1px solid #F5E0E0;
  border-radius:12px;padding:16px 20px;line-height:1.9;
}
.salebox b{color:var(--brand)}
.salemeta{margin-top:6px;font-size:12px;color:var(--muted)}

/* ------- 空窗期的「最近赛事与赛果」兜底 ------- */
.lday{margin:16px auto 6px;max-width:900px;text-align:left;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#fff}
.lday-head{display:flex;align-items:center;gap:10px;padding:11px 15px;border-bottom:1px solid var(--line-2);background:#FBFCFE}
.lday-head h3{margin:0;font-size:14px}
.lday-head .pill{margin-left:auto}
.lday-head .btn{margin-left:8px}
.lday-date{
  display:flex;align-items:center;gap:9px;padding:8px 15px;background:#F7F9FC;
  font-size:12.5px;font-weight:700;color:var(--ink-2);border-bottom:1px solid var(--line-2);
}
.lday-date .pill{margin-left:auto;font-weight:600}
.lday .hrow{padding:8px 15px;font-size:12.5px}
.lday .hrow:last-child{border-bottom:1px solid var(--line-2)}
.lday-more{padding:8px 15px;font-size:12px;color:var(--muted);text-align:center}
.lday-empty{padding:22px;font-size:12.5px;color:var(--muted);text-align:center}

.unote.admin{background:#FDECEC;color:var(--brand);font-weight:700}

@media (max-width:720px){
  .lday{margin-top:12px}
  .lday .hrow{grid-template-columns:70px minmax(0,1fr) 58px}
  .lday .hleague,.lday .hres{display:none}
  .salebox{display:block;padding:13px 15px;font-size:13px}
}

/* ============================================================
   手机端专门适配（≤720px）
   ------------------------------------------------------------
   起因：390px 宽下顶栏内容总宽 455px 塞进 375px，被 .topbar 的 overflow:hidden
   裁掉 —— 表现为「标题被登录按钮压住」。根因是 .brand 被 flex 压到只剩 63px，
   而 .brand h1（136px、nowrap）溢出父容器，直接盖到右侧控制区上。
   这里把顶栏改成两行网格：第一行品牌 + 操作，第二行整宽状态条。
   ============================================================ */
@media (max-width:720px){
  /* ---- 顶栏：两行 ----
     第一行 品牌 + 刷新；第二行 登录 / 历史方案 / 已同步 三个同高控件。
     上一版这里用 display:contents 把 .topbar-act 的子元素摊进父网格，
     但「历史方案」**没被分配 grid-area** —— 它被自动塞进隐式的第三行、
     还只占第一列（1fr），于是渲染成一条**右边缺一块的怪条**，
     蚂蚁截图反馈「排版好丑」。三条控件大小也不统一：
     已同步是 11px 圆角的宽药丸、刷新是 .btn 的 10px 圆角、历史方案根本不在这一行。
     现在改成：操作区自己就是一行 flex，尺寸统一，也不再依赖 display:contents
     （顺带去掉老版微信 X5 不支持 display:contents 的那个降级分支）。 */
  .topbar-in{
    display:grid;
    grid-template-columns:minmax(0,1fr) auto;
    grid-template-areas:
      "brand refresh"
      "act   act";
    gap:9px 8px;
    align-items:center;
    padding:10px 12px 9px;
  }
  .brand{grid-area:brand;min-width:0;gap:10px}
  #btnRefresh{grid-area:refresh;justify-self:end}

  /* 第二行：登录 / 历史方案 / 已同步 —— 三个在同一行、同一套尺寸 */
  .topbar-act{grid-area:act;display:flex;align-items:stretch;gap:7px;min-width:0}
  #userBox{order:1;min-width:0}
  #navSchemes{order:2}
  .live{order:3;flex:1 1 auto;min-width:0}

  /* ★ 统一尺寸：等高等圆角等字号。高度**定死 32px** 而不是靠 padding 凑 ——
     这几件的内边距/字号原本各不相同（.btn 是 9px/15px、.live 是 7px/13px、
     .btn.sm 是 6px/11px），靠 padding 永远对不齐。
     必须用 id 定：`.topbar .btn.ghost` 是 (0,3,0)，比 `.topbar-act > .btn` (0,2,0) 高，
     否则 padding 会被它盖掉、又变回不一致。 */
  #navSchemes,
  #btnRefresh,
  #userBox > .btn,
  #userBox .uname,
  .topbar .topbar-act .live{
    height:32px;border-radius:9px;font-size:12.5px;padding:0 11px;
    display:inline-flex;align-items:center;justify-content:center;
  }
  #userBox .uname{max-width:70px}
  /* 「已同步」是状态不是按钮：同高对齐，但底子更淡，不抢按钮的注意力。
     选择器写成 .topbar .topbar-act .live（(0,3,0)）—— 桌面那条同权重，
     靠"写在后面"取胜；写 (0,2,0) 的话会被桌面规则反过来盖掉。 */
  .topbar .topbar-act .live{
    flex:1 1 auto;width:auto;min-width:0;padding:0 10px;gap:6px;
    background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.1);
  }
  /* 手机上只留「多久前同步」—— 绝对时间和「25 秒前」并排塞不下，
     会被截成「19:12:3…」。绝对时间在赛事列表头部已经有了。 */
  .live-txt{display:flex;align-items:center;min-width:0;overflow:hidden}
  .live-txt b{display:none}
  .live-txt small{margin-top:0;font-size:11.5px;color:#B7C3D6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

  .logo{width:34px;height:34px;font-size:16px;border-radius:10px}
  .brand h1{font-size:15.5px;letter-spacing:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* 兜底：万一用户名很长，宁可省略也不要撑破布局（宽度上限见上面的统一尺寸块） */
  .uname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* 手机上「用户管理」标签本身就是身份提示，顶栏徽标省掉 */
  .unote.admin{display:none}

  /* ---- 导航：横滑，不换行 ---- */
  .mainnav{
    overflow-x:auto;overflow-y:hidden;flex-wrap:nowrap;
    padding-bottom:8px;scrollbar-width:none;-webkit-overflow-scrolling:touch;
  }
  .mainnav::-webkit-scrollbar{display:none}
  .mntab{flex:none;padding:7px 13px;font-size:13px}
  .mn-sp{display:none}

  /* ---- 来源说明：收紧，藏掉固定免责文案（它每天都不变，手机上不必占两行）---- */
  .notice{padding:7px 0;font-size:12px;line-height:1.6}
  .notice-legal{display:none}
  #sourceLine{display:block}

  /* ---- 工具栏：搜索框独占一行，筛选与清空并排 ----
     字号 16px 不是为了好看：**iOS 在聚焦 font-size < 16px 的输入框时会自动把
     整页放大**（然后页面就"显示不全"了，还得手动缩回去）。这是手机上
     「误触放大」最常见的一个来源，比双击缩放还容易触发。
     想同时保留小字号又不触发放大是不行的 —— Safari 只看字号。 */
  .tools{gap:8px}
  .tools input[type=search]{flex:1 1 100%;min-width:0;font-size:16px;padding:9px 12px}
  .tools .chk{flex:1 1 auto}
  #btnClear{flex:0 0 auto;margin-left:auto}
  .fld input{font-size:16px}   /* 登录/注册弹窗同理 */

  /* ---- 底部留白，别让吸底条压住最后一张卡片（含合规声明页脚） ---- */
  .layout{padding-bottom:calc(84px + env(safe-area-inset-bottom))}
  .vwrap{padding-bottom:calc(84px + env(safe-area-inset-bottom))}
  .site-foot{padding-bottom:calc(28px + 84px + env(safe-area-inset-bottom));font-size:12px}
  .sf-strong{font-size:12.5px}
}

/* 更窄的机器（≤380px，如 iPhone SE）：再收一档 */
@media (max-width:380px){
  .brand h1{font-size:14.5px}
  .logo{width:30px;height:30px;font-size:15px}
  .mntab{padding:6px 11px;font-size:12.5px}
  .tools input[type=search]{font-size:16px}   /* 同 16px：低于它 iOS 会放大页面 */
  #btnAuth,#btnLogout{padding:0 9px;font-size:12px}
  #userBox .uname{max-width:52px}
}

/* ============================================================
   比赛分析弹窗（v3.13.0）
   —— 类名**全部带 ana- 前缀**。后台管理模块已经占了 .astat/.astats/.astat2，
      短名撞车不报错、只会串味，是最难查的一类问题（见 MEMORY 坑 #5）。
   —— 这一段**故意排在所有媒体查询之后**：里面的选择器全是新类名，
      不存在被前面的同特异性规则反覆盖的问题；手机端的微调则写在下面自己的
      媒体查询里，同一段内"基础在前、覆盖在后"，顺序是自洽的。
   ============================================================ */
.modal-box.wide{width:min(980px,100%)}

/* 卡片头部那个「分析」小按钮：沿用 .glyph 的尺寸，只做一点强调，
   免得两个同款小按钮并排时分不清哪个是哪个 */
.anabtn{color:var(--blue);border-color:#CFE1F7;background:var(--blue-l)}

.anabanner{
  background:var(--blue-l);border:1px solid #CFE1F7;color:#2A4A6B;
  border-radius:10px;padding:9px 12px;font-size:12px;line-height:1.65;margin-bottom:12px;
}
.anacap{margin:0 0 12px;font-size:13px;font-weight:600;color:var(--ink-2)}

.ana-sec{
  background:#fff;border:1px solid var(--line-2);border-radius:12px;
  padding:14px 16px;margin-bottom:12px;
}
.ana-sec h5{
  margin:0 0 11px;font-size:13.5px;font-weight:700;color:var(--ink);
  padding-left:9px;border-left:3px solid var(--brand);line-height:1.3;
}
.ana-sub{margin:15px 0 7px;font-size:12.5px;font-weight:700;color:var(--ink-2)}
.ana-sub2{margin-top:2px;font-size:11.5px;color:var(--muted);font-weight:400;line-height:1.5}
.ana-row{
  display:flex;justify-content:space-between;align-items:baseline;gap:8px;
  margin:10px 0 5px;font-size:13px;color:var(--ink);
}
.ana-row:first-child{margin-top:0}
/* 页脚两段各自成整体换行（flex 项），窄屏不会把「抓取时间」断成两半 */
.ana-foot{
  display:flex;flex-wrap:wrap;gap:2px 14px;justify-content:center;
  margin-top:14px;font-size:11.5px;color:var(--muted);line-height:1.6;
}

/* 「第三方」徽标 —— 来源必须让用户一眼看得到，不能跟官方数据混为一谈 */
.ana-third{
  display:inline-block;margin-left:6px;padding:1px 6px;border-radius:6px;
  font-size:10.5px;font-weight:600;color:var(--warn);
  background:#FFF4E5;border:1px solid #F4D9AE;vertical-align:2px;
}

/* 首发名单：一人一格，窄屏自动换行（比表格稳，不会被压成一列单字） */
.ana-lineup{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 10px}
.ana-pl{
  display:inline-flex;align-items:center;gap:5px;max-width:100%;
  background:#F8FAFC;border:1px solid var(--line-2);border-radius:8px;
  padding:4px 8px;font-size:12px;color:var(--ink);
}
.ana-pl i{font-style:normal;font-weight:700;color:var(--brand);min-width:18px;text-align:right;font-variant-numeric:tabular-nums}
.ana-pl em{font-style:normal;font-size:11px;color:var(--muted)}

/* 动画直播的 iframe 容器。
   ⚠️ 用 padding-bottom 撑比例，**不要用 aspect-ratio / inset** ——
      微信内置浏览器（老版 X5，Chromium < 65）两个都不认，
      在微信里会塌成 0 高度、什么都看不见。 */
.animframe{
  position:relative;width:100%;padding-bottom:62.5%;
  background:#0E141B;border-radius:10px;overflow:hidden;
}
.animframe iframe{
  position:absolute;top:0;left:0;right:0;bottom:0;
  width:100%;height:100%;border:0;display:block;
}

/* ---- 板块页签（内容到 7 块以后，切页签比长滚动好找）---- */
.anatabs{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}
.anatab{
  appearance:none;font:inherit;font-size:12.5px;font-weight:600;line-height:1.2;
  color:var(--ink-2);background:#fff;border:1px solid var(--line);
  padding:6px 11px;border-radius:99px;cursor:pointer;touch-action:manipulation;
}
.anatab.on{background:var(--brand);border-color:var(--brand);color:#fff}
.anatab:not(.on):hover{background:#F4F6FA}
/* 页签切的是 section 的 hidden —— 必须显式写，否则被 .modal 的 display:flex 之类盖掉 */
.ana-sec[hidden]{display:none!important}

/* ---- 主客对比两列（阵容概览 / 技术对比）---- */
.acmp{background:#F8FAFC;border:1px solid var(--line-2);border-radius:10px;padding:3px 12px;margin-bottom:4px}
.acmp-row{
  display:grid;grid-template-columns:1fr auto 1fr;gap:8px;align-items:center;
  padding:7px 0;border-bottom:1px solid var(--line-2);
}
.acmp-row:last-child{border-bottom:0}
.acmp-row > b{font-size:13px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums}
.acmp-row > b:first-child{text-align:right}
.acmp-row > b:last-child{text-align:left}
.acmp-row > b.hi{color:var(--brand)}          /* 占优的一方标红（按指标方向自动判，不瞎标） */
.acmp-row > span{font-size:11.5px;color:var(--muted);text-align:center;white-space:nowrap}

/* ---- 阵型图 ----
   球员用 transform 居中定位；同名球员靠 CSS 换行显示两行，不做截断
   （kt 也是两行显示的，截断成「赛-范韦…」反而认不出人）。 */
.apitchwrap{display:flex;flex-direction:column;gap:10px}
.apitch{
  position:relative;width:100%;height:250px;border-radius:10px;overflow:hidden;
  background:repeating-linear-gradient(180deg, #2E7D32 0 25px, #338A37 25px 50px);
  border:1px solid #256428;
}
.apitch-c{
  position:absolute;left:50%;top:50%;width:70px;height:70px;margin:-35px 0 0 -35px;
  border:1px solid rgba(255,255,255,.3);border-radius:50%;
}
.apitch-t{
  position:absolute;left:8px;top:6px;z-index:2;
  font-size:11px;font-weight:700;color:rgba(255,255,255,.92);text-shadow:0 1px 2px rgba(0,0,0,.5);
}
.aplayer{
  position:absolute;transform:translate(-50%,-50%);
  display:flex;flex-direction:column;align-items:center;gap:2px;
  width:52px;text-align:center;
}
.aplayer i{
  display:flex;align-items:center;justify-content:center;
  width:22px;height:22px;border-radius:50%;background:#fff;
  color:var(--brand-d);font-style:normal;font-weight:700;font-size:11px;
  box-shadow:0 1px 3px rgba(0,0,0,.4);
}
.aplayer b{
  font-size:10px;font-weight:600;color:#fff;line-height:1.15;
  text-shadow:0 1px 2px rgba(0,0,0,.65);word-break:break-all;
}
.aplayer.is-off i{background:#FFE9A8}
.aplayer em{font-style:normal;font-size:10px;font-weight:700;color:#FFE9A8;line-height:1}

/* ---- 阵型图 / 名单 切换 ---- */
.aseg{
  display:inline-flex;border:1px solid var(--line);border-radius:8px;
  overflow:hidden;margin-left:10px;vertical-align:1px;
}
.aseg button{
  appearance:none;border:0;font:inherit;font-size:11.5px;font-weight:600;
  color:var(--ink-2);background:#fff;padding:3px 10px;cursor:pointer;touch-action:manipulation;
}
.aseg button.on{background:var(--brand);color:#fff}

/* ---- 两队并排。中间栏给**定宽** —— 「VS」比「1:1」窄，用 auto 会每行都不一样宽，
        整排就错位了（MEMORY 坑 #6③） ---- */
.ana-vs{display:grid;grid-template-columns:1fr 34px 1fr;gap:8px;align-items:stretch}
.ana-vsx{width:34px;display:flex;align-items:center;justify-content:center;
  font-size:11.5px;font-weight:700;color:var(--muted)}
.ana-team{min-width:0;background:#F8FAFC;border:1px solid var(--line-2);border-radius:10px;padding:11px 12px}
.ana-thd{display:flex;flex-direction:column;gap:2px;margin-bottom:10px;min-width:0}
.ana-thd b{font-size:14px;line-height:1.35;word-break:break-word}
.ana-stats{margin-top:9px;font-size:12px;color:var(--ink-2);line-height:1.7}
.ana-stats b{font-variant-numeric:tabular-nums;color:var(--ink)}

/* 战绩条：胜/平/负 三段 */
.ana-fbar{display:flex;height:22px;border-radius:7px;overflow:hidden;background:#E9EEF5}
.ana-fbar i{
  display:flex;align-items:center;justify-content:center;
  font-style:normal;font-size:11.5px;font-weight:700;color:#fff;
}
.ana-fw{background:var(--brand)}
.ana-fd{background:#98A5B8}
.ana-fl{background:var(--blue)}

/* 概率条：主胜/平/客胜 */
.ana-pbar{display:flex;height:26px;border-radius:8px;overflow:hidden;background:#E9EEF5}
.ana-pbar span{
  display:flex;align-items:center;justify-content:center;
  font-size:11.5px;font-weight:700;color:#fff;
  /* 段太窄时百分比数字会挤出来 → 裁掉，宁可只剩色块也不糊成一团 */
  overflow:hidden;white-space:nowrap;
}
.ana-pbh{background:var(--brand)}
.ana-pbd{background:#98A5B8}
.ana-pba{background:var(--blue)}
.ana-plabel{
  display:flex;justify-content:space-between;gap:6px;
  margin-top:5px;font-size:11.5px;color:var(--muted);
}

/* ---- 逐场明细表。刻意用 table-layout:fixed + 固定列宽：
        窄屏上非固定列会被挤成一列单字（MEMORY 界面约定） ---- */
.ana-tbl{
  width:100%;border-collapse:collapse;table-layout:fixed;
  font-size:12.5px;background:#fff;
  border:1px solid var(--line-2);border-radius:10px;overflow:hidden;
}
.ana-tbl td{padding:7px 9px;border-bottom:1px solid var(--line-2);vertical-align:top}
.ana-tbl tr:last-child td{border-bottom:0}
.ana-d{width:42px;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
/* 未来赛程表的时间列。★ 这一列**不能用固定宽度** ——
   它放的是 "09-20 18:00"（11 个字符），而这段文字的实际宽度由**设备字体**决定：
     · 本机 Chrome（Windows）                        量到 65px
     · 蚂蚁真机（截图 1320×2868 = 440px @3x，机型推测为 iPhone 16 Pro Max 一档） 量到 ≈78px
   给 76px 时内容区只剩 62px，真机上就溢出 16px —— 恰好把右邻格的左右内边距
   （7+7）吃光，「主」字的笔画**直接压在时间末尾的 "0" 上**（2026-09-17 截图实证）。
   同类事故 2026-09-16 在 .ana-d 上已犯过一次（42px 装不下 70px 的日期）。
   → 根治办法是让这一列**按内容自适应**，见下面 .ana-tbl-sched 的三条规则。 */
.ana-dt{color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.ana-opp{line-height:1.55;word-break:break-word;color:var(--ink)}
.ana-opp b{font-weight:600}
/* 未来赛程那张表（全站只有它用 .ana-dt）。
   ⚠️ 不能直接改 .ana-tbl —— 那个类被逐场明细 / 伤停 / 缺阵三张表共用，它们靠
      table-layout:fixed 的固定列宽防"列被挤成一列单字"，动它会连累三张表。
   这里：table-layout:auto + 时间列 width:1% + white-space:nowrap 是经典的
   「收缩到内容」写法 —— 时间列永远恰好装下文字，换任何字体/机型都不会再溢出；
   余下的宽度全给对手列（width:99%），padding-right 提供固定的视觉间距。 */
.ana-tbl-sched{table-layout:auto}
.ana-tbl-sched .ana-dt{width:1%;padding-right:16px}
.ana-tbl-sched .ana-opp{width:99%}
.ana-sc{width:54px;text-align:center;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
/* 缺阵期战绩（第三方独有）：右对齐小字。
   ⚠️ 宽度要**按最长内容给够**："缺阵期 42胜 25平 18负" 约 13 个字符 ≈ 127px ——
      112px 时最后一个"负"字会被裁掉（真机抓到的）。定宽是为了不把姓名列挤没，
      但给少了比不给还糟：用户看到的是"18"而不是"18负"，会读错。 */
.ana-wdl{width:138px;text-align:right;font-size:11.5px;color:var(--muted);white-space:nowrap}
.ana-r{width:42px;text-align:center;white-space:nowrap}
/* ⚠️ 这里是「球队战绩」的胜/负，不是股价：胜=红、负=蓝、平=灰，
      避免用绿把「输球」看成利好 */
.ana-tbl tr.r-w .ana-r{color:var(--brand);font-weight:700}
.ana-tbl tr.r-l .ana-r{color:var(--blue);font-weight:700}
.ana-tbl tr.r-d .ana-r{color:var(--muted);font-weight:700}

/* 伤停 / 停赛 / 模型 小标签 */
.ana-inj,.ana-sus,.ana-model{
  display:inline-block;font-size:11px;font-weight:700;line-height:1.6;
  padding:0 6px;border-radius:6px;margin-left:4px;white-space:nowrap;
}
.ana-inj{background:#FDECEC;color:var(--brand-d);border:1px solid #F7C9C9}
.ana-sus{background:#FFF4E5;color:var(--warn);border:1px solid #F4D9AE}
.ana-model{background:#EEF2F8;color:var(--ink-2);border:1px solid var(--line);font-weight:600}

/* 比分 / 总进球分布的小格子 */
.ana-scgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(74px,1fr));gap:8px}
.ana-scit{
  display:flex;flex-direction:column;align-items:center;gap:1px;
  background:#F8FAFC;border:1px solid var(--line-2);border-radius:9px;padding:7px 4px;
}
.ana-scit b{font-size:13.5px;font-variant-numeric:tabular-nums;color:var(--ink)}
.ana-scit i{font-style:normal;font-size:11px;color:var(--muted)}
.ana-scit.top{border-color:#F7C9C9;background:var(--brand-l)}
.ana-scit.top b{color:var(--brand-d)}

.ana-warn{
  margin-top:12px;background:#FFF9EC;border:1px solid #F4DFAE;color:#7A5410;
  border-radius:10px;padding:9px 12px;font-size:11.5px;line-height:1.7;
}

/* 「官方无此数据」：如实列出来，不拿假数据填版面 */
.ana-unavail{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.ana-unavail span{
  font-size:11.5px;color:var(--muted);background:#F4F6FA;
  border:1px solid var(--line);border-radius:7px;padding:3px 8px;
}

/* ---- 手机端（≤720px）：两队从并排改成上下，表格列再收一档 ---- */
@media (max-width:720px){
  .modal-box.wide{width:100%}
  .ana-sec{padding:12px 12px}
  /* 并排两块在 390px 上每块只剩 ~150px，球队名会折成三行 —— 改成上下叠放 */
  .ana-vs{grid-template-columns:1fr;gap:6px}
  .ana-vsx{width:auto;height:18px}
  .ana-d{width:38px}
  /* .ana-dt（未来赛程的时间列）宽度已改为**按内容自适应**（见 .ana-tbl-sched），
     这里不再给死宽度 —— 真机字体比本机宽，给 76px 会让"主"压到时间末尾的 "0" 上。 */
  .ana-sc{width:48px}
  .ana-r{width:34px}
  .ana-wdl{width:128px;font-size:11px}
  .ana-tbl td{padding:6px 7px}
  .ana-scgrid{grid-template-columns:repeat(auto-fill,minmax(68px,1fr));gap:6px}
}
/* 实时比分 · 动画直播入口（第三方播放页）。
   放在 .lv-meta 里当 inline 按钮；红框白底，比状态徽标更显眼但不抢主信息。 */
.lv-anim{display:inline-flex;align-items:center;gap:2px;border:1px solid #e8553f;background:#fff6f4;color:#d9412b;font:inherit;font-size:12px;line-height:1;padding:5px 9px;border-radius:10px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.lv-anim:hover,.lv-anim:active{background:#e8553f;border-color:#e8553f;color:#fff}
