/* ============================================================================
   pages/today.css · 今日页（简报 hero / 串关入口 / 筛选 / 比赛卡 / 进行中 / 空态）
   依赖：tokens + base + components
   ========================================================================== */

/* ------------------------------ 日期条 ------------------------------ */
.date-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--s-2);
  padding: 2px 0 0;
}
.date-btn {
  width: 32px; height: 32px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--txt-2);
  background: var(--surface-1);
  border: 1px solid var(--line-1);
}
.date-btn svg { width: 16px; height: 16px; }
.date-mid { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px; min-width: 0; }
.date-main { font-size: var(--fs-15); font-weight: var(--fw-semibold); letter-spacing: .02em; white-space: nowrap; }
.date-sub { font-size: var(--fs-11); color: var(--txt-2); white-space: nowrap; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.date-today {
  height: 26px; padding: 0 10px;
  border-radius: var(--r-full);
  font-size: var(--fs-11);
  color: var(--brand-text);
  background: var(--brand-soft);
  border: 1px solid var(--brand-line);
}

/* ------------------------------ 每日简报 hero ------------------------------ */
.brief {
  position: relative;
  padding: var(--s-4);
  overflow: hidden;
}
.brief::after {                                   /* 右下角极光折射（纯装饰） */
  content: "";
  position: absolute;
  right: -30%; top: -40%;
  width: 70%; height: 160%;
  background: radial-gradient(closest-side, var(--aurora-teal-soft), transparent 70%);
  pointer-events: none;
}
.brief-top { display: flex; align-items: center; justify-content: space-between; gap: var(--s-2); }
.brief-top .eyebrow { color: var(--txt-2); }
.brief-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--s-2);
  margin-top: var(--s-3);
}
.brief-stat { position: relative; min-width: 0; }
.brief-stat + .brief-stat::before {
  content: "";
  position: absolute;
  left: calc(-1 * var(--s-2) / 2 - .5px);
  top: 6px; bottom: 6px;
  width: 1px;
  background: var(--line-1);
}
.brief-stat b {
  display: flex;
  align-items: baseline;
  gap: 3px;
  font-size: var(--fs-26);
  font-weight: var(--fw-bold);
  line-height: 1;
  letter-spacing: -.02em;
}
.brief-stat b em { font-style: normal; font-size: var(--fs-11); font-weight: var(--fw-medium); color: var(--txt-2); letter-spacing: .02em; }
.brief-stat span { display: block; margin-top: 5px; font-size: var(--fs-11); color: var(--txt-2); letter-spacing: .02em; }
.brief-stat .teal { color: var(--aurora-teal); }
.brief-stat .gold { color: var(--brand-text); }
.brief-foot {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: var(--s-3);
  padding-top: var(--s-3);
  border-top: 1px solid var(--line-1);
  font-size: var(--fs-11);
  color: var(--txt-2);
}
.brief-foot b { color: var(--txt-1); font-weight: var(--fw-medium); }
.brief-foot svg { width: 13px; height: 13px; color: var(--aurora-teal); }

/* ------------------------------ 串关入口卡 ------------------------------ */
.parlay-teaser {
  display: flex;
  align-items: center;
  gap: var(--s-3);
  padding: var(--s-3) var(--s-4);
}
.parlay-teaser .pt-ico {
  width: 38px; height: 38px;
  border-radius: 12px;
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--brand-text);
  background: var(--brand-soft);
  border: 1px solid var(--brand-line);
  box-shadow: 0 0 18px var(--brand-glow);
}
.parlay-teaser .pt-ico svg { width: 20px; height: 20px; }
.pt-main { flex: 1; min-width: 0; }
.pt-title { display: flex; align-items: center; gap: 6px; font-size: var(--fs-13); font-weight: var(--fw-semibold); }
.pt-title .badge { height: 18px; font-size: 10px; }
.pt-sub { margin-top: 2px; font-size: var(--fs-11); color: var(--txt-2); }
.pt-dots { display: flex; gap: 3px; margin-top: 5px; }
.pt-dots i { width: 9px; height: 4px; border-radius: 2px; background: var(--surface-2); }
.pt-dots i.on { background: var(--ok); box-shadow: 0 0 6px var(--ok-soft); }
.pt-dots i.off { background: var(--danger-soft); }
.pt-go {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px; height: 32px;
  border-radius: 50%;
  color: var(--txt-1);
  background: var(--surface-2);
  border: 1px solid var(--line-1);
}
.pt-go svg { width: 16px; height: 16px; }

/* ------------------------------ 进行中条 ------------------------------ */
.live-strip {
  display: flex;
  align-items: center;
  gap: var(--s-3);
  padding: 10px var(--s-4);
}
.live-dot {
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--danger);
  box-shadow: 0 0 0 4px var(--danger-soft);
  animation: pulse-dot 1.8s var(--ease-out) infinite;
  flex: none;
}
.live-main { flex: 1; min-width: 0; }
.live-title { font-size: var(--fs-13); font-weight: var(--fw-semibold); }
.live-title .num { margin-left: 6px; color: var(--brand-text); }
.live-sub { font-size: var(--fs-11); color: var(--txt-2); margin-top: 1px; }
.live-min { font-size: var(--fs-11); color: var(--danger); font-weight: var(--fw-semibold); }

/* ------------------------------ 筛选栏（44px 单行 · 方案 A） ------------------------------
   DOM 由 today.js paintFilterBar() 生成：
     .filterbar.tf-bar > .tf-tabs（4 × .tf-tab）+ .tf-acts（搜索 / 筛选图标）
   设计：一行只承担「状态」；联赛多选 / 排序 / 自定义收进底部抽屉（.tf-* 见文件末尾）。
   视觉 20px（13px 字 + 2px 金色下划线），触控仍是 44px 真实矩形。 */
.filterbar {
  position: sticky;
  top: calc(var(--topbar-h) + var(--safe-t));
  z-index: var(--z-sticky);
  min-height: 44px;                                 /* 首帧（空 host）不塌陷，避免加载后跳版 */
  margin: 0 calc(-1 * var(--page-x));
}
#views .filterbar.tf-bar {
  display: flex;
  align-items: stretch;
  height: 44px;                                     /* 唯一高度来源，禁止再叠 padding */
  padding: 0 var(--page-x);
  background: var(--bg-0);
  box-shadow: inset 0 -1px 0 var(--line-1);         /* 底缘发丝线，不占高度 */
}
.tf-tabs { display: flex; align-items: stretch; flex: 1; min-width: 0; }
.tf-tab {
  position: relative;
  flex: 0 0 auto;
  height: 44px;
  padding: 0 12px;
  border: 0;
  background: none;
  font-size: var(--fs-13);
  font-weight: var(--fw-medium);
  letter-spacing: var(--ls-cjk);
  color: var(--txt-2);
  white-space: nowrap;
  -webkit-tap-highlight-color: transparent;
  transition: color var(--dur-1) var(--ease-out);
}
.tf-tab:first-child { padding-left: 0; }
.tf-tab::after {                                    /* 指示线：宽度 = 文字宽 */
  content: "";
  position: absolute;
  left: 12px; right: 12px; bottom: 0;
  height: 2px;
  border-radius: 1px 1px 0 0;
  background: transparent;
  transition: background-color var(--dur-2) var(--ease-out);
}
.tf-tab:first-child::after { left: 0; }
.tf-tab[aria-selected="true"] { color: var(--txt-0); font-weight: var(--fw-semibold); }
.tf-tab[aria-selected="true"]::after { background: var(--brand); box-shadow: 0 0 8px var(--brand-glow); }
.tf-tab:active { color: var(--txt-0); }

.tf-acts { display: flex; align-items: center; margin-left: auto; flex: none; }
.tf-ic {
  position: relative;
  width: 44px; height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 0;
  background: none;
  color: var(--txt-2);
  border-radius: 50%;
  -webkit-tap-highlight-color: transparent;
  transition: color var(--dur-1) var(--ease-out);
}
.tf-ic svg { width: 17px; height: 17px; }
.tf-ic:active { color: var(--txt-0); }
.tf-ic.is-on { color: var(--brand-text); }
/* 生效条件数徽标（0 个不渲染；>9 显示 9+；不改变 44px 热区） */
.tf-badge {
  position: absolute;
  top: 7px; right: 5px;
  min-width: 15px; height: 15px;
  padding: 0 4px;
  border-radius: 8px;
  background: var(--brand);
  color: var(--brand-ink);
  font-family: var(--font-num);
  font-size: 10px;
  font-weight: var(--fw-bold);
  font-variant-numeric: tabular-nums;
  line-height: 15px;
  text-align: center;
  box-shadow: 0 0 0 2px var(--bg-0);
}

/* 搜索态：原地接管同一行（高度不变，不新增行、不抖动） */
#views .filterbar.tf-bar.is-search { padding-right: calc(var(--page-x) - 4px); }
.tf-search { display: flex; align-items: center; flex: 1; min-width: 0; gap: 7px; }
.tf-search .tf-search-ico { display: inline-flex; color: var(--txt-3); flex: none; }
.tf-search .tf-search-ico svg { width: 16px; height: 16px; }
.tf-input {
  flex: 1;
  min-width: 0;
  height: 40px;
  padding: 0;
  border: 0;
  background: none;
  outline: none;
  font-size: var(--fs-13);
  color: var(--txt-0);
}
.tf-input::placeholder { color: var(--txt-3); }
.tf-cancel {
  flex: none;
  height: 44px;
  padding: 0 4px 0 10px;
  border: 0;
  background: none;
  font-size: var(--fs-13);
  color: var(--txt-1);
}

/* ------------------------------ 分组头 ------------------------------ */
.group-head {
  display: flex;
  align-items: center;
  gap: var(--s-2);
  padding: var(--s-2) 2px 0;
  font-size: var(--fs-11);
  color: var(--txt-2);
  letter-spacing: .04em;
}
.group-head b { color: var(--txt-1); font-weight: var(--fw-medium); }
.group-head .count { color: var(--txt-3); }
.group-head::after { content: ""; flex: 1; height: 1px; background: var(--line-1); }

/* ------------------------------ 比赛卡（今日列表核心） ------------------------------ */
.match-card {
  padding: 11px 14px 12px;
  border-radius: var(--r-lg);
  cursor: pointer;
  transition: transform var(--dur-1) var(--ease-out), box-shadow var(--dur-2) var(--ease-out);
}
.match-card:active { transform: scale(.985); }
.match-card + .match-card { margin-top: 10px; }

.mc-top {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: var(--fs-11);
  color: var(--txt-2);
  min-height: 18px;
}
.mc-code {
  color: var(--brand-text);
  background: var(--brand-soft);
  border: 1px solid var(--brand-line);
  border-radius: var(--r-xs);
  padding: 1px 5px;
  font-size: 10px;
  letter-spacing: .04em;
}
.mc-league { color: var(--txt-1); }
.mc-time { margin-left: auto; color: var(--txt-1); }
.mc-time .cd { color: var(--aurora-teal); margin-left: 4px; }
.mc-star {
  width: 30px; height: 30px;
  margin: -6px -8px -6px 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--txt-3);
  flex: none;
}
.mc-star svg { width: 17px; height: 17px; }
.mc-star.is-on { color: var(--brand-text); }
.mc-star.is-on svg { fill: var(--brand); }

.mc-mid {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: var(--s-2);
  margin-top: 6px;
}
.mc-team { display: flex; align-items: center; gap: 7px; min-width: 0; }
.mc-team--away { flex-direction: row-reverse; }
.mc-name {
  font-size: var(--fs-17);
  font-weight: var(--fw-semibold);
  letter-spacing: .01em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  color: var(--txt-0);
}
.mc-badge {
  width: 24px; height: 24px;
  border-radius: 50%;
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
  font-weight: var(--fw-semibold);
  color: #fff;
  background: linear-gradient(135deg, var(--c1, #3b82f6), var(--c2, #1e40af));
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .18);
}
.mc-center { text-align: center; min-width: 46px; }
.mc-vs { font-size: var(--fs-11); color: var(--txt-3); letter-spacing: .06em; }
.mc-score { font-size: var(--fs-20); font-weight: var(--fw-bold); line-height: 1; letter-spacing: .02em; }
.mc-score span { color: var(--txt-3); margin: 0 2px; font-weight: var(--fw-regular); }

/* 结论胶囊行：左「结论胶囊」（≤2，可换行）+ 右「状态徽章」（固定最右，只出现一次）。
   旧实现 .mc-verdict{display:flex;overflow:hidden} + 徽章跟在 chips 末尾 → 内容一多就被裁（本次修复根因）。 */
.mc-verdict {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: start;
  gap: var(--s-2);
  margin-top: 9px;
  overflow: visible;
}
.mc-verdict .mc-picks {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  min-width: 0;
}
.pick {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 23px;
  padding: 0 8px;
  border-radius: var(--r-xs);
  font-size: var(--fs-11);
  font-weight: var(--fw-medium);
  white-space: nowrap;
  color: var(--txt-1);
  background: var(--surface-2);
  border: 1px solid var(--line-1);
  flex: none;
  max-width: 46%;
  overflow: hidden;
  text-overflow: ellipsis;
}
.pick b { color: var(--txt-0); font-weight: var(--fw-semibold); }
.pick--brand { color: var(--brand-text); background: var(--brand-soft); border-color: var(--brand-line); }
.pick--brand b { color: var(--brand-text); }
.pick--teal { color: var(--aurora-teal); background: var(--aurora-teal-soft); border-color: var(--aurora-teal-line); }
.pick--risk { color: var(--warn); background: var(--warn-soft); border-color: var(--warn-line); }
.pick--muted { color: var(--txt-2); }
.pick svg { width: 12px; height: 12px; }
/* 结论胶囊：允许换行、长内容不裁切；徽章独立成列（不复用 .pick 的 nowrap/固定高） */
.mc-verdict .pick {
  max-width: 100%;
  min-width: 0;
  height: auto;
  min-height: 23px;
  padding: 4px 8px;
  line-height: 1.3;
  white-space: normal;
  overflow-wrap: anywhere;
  text-overflow: clip;
}
.mc-verdict .mc-status,
.mc-result .mc-status { margin: 0; flex: none; align-self: start; }
.mc-result .pick {
  max-width: 100%;
  min-width: 0;
  height: auto;
  min-height: 23px;
  padding: 3px 8px;
  line-height: 1.35;
  white-space: normal;
  overflow-wrap: anywhere;
  text-overflow: clip;
}

/* 赔率三宫格 + 迷你趋势 + 异动「异」角标（20×20 斜跨右上角，0 行高增量）
   2026-11-12 醒目度增强：暖色渐变底 + 白字 1px 描边 + 柔光；high 换暖红并入场 pulse；
   受影响结果格加 --warn-soft 底色 + 1px 内侧描边；卡片用 JS 类加 2px 卡顶暖线。 */
.mc-odds {
  position: relative;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  margin-top: 9px;
  border-radius: var(--r-sm);
  overflow: visible;                                  /* 角标要跨出角点；圆角由首末列补齐 */
  background: var(--line-1);
  border: 1px solid var(--line-1);
}
.mc-odds .odds-cell:first-child { border-radius: calc(var(--r-sm) - 1px) 0 0 calc(var(--r-sm) - 1px); }
.mc-odds .odds-cell:last-child { border-radius: 0 calc(var(--r-sm) - 1px) calc(var(--r-sm) - 1px) 0; }
.mc-odds-badge {
  position: absolute;
  top: -10px;
  right: -10px;                                       /* 斜跨右上角：外 10px 落在行间，不压赔率数字 */
  width: 20px;
  height: 20px;
  display: grid;
  place-items: center;
  border-radius: 6px;
  background: linear-gradient(165deg, var(--warn) 0%, var(--warn-line) 100%), var(--warn-soft);
  border: 1px solid var(--warn-line);
  color: #fff;
  font-size: 10px;
  font-weight: var(--fw-bold);
  line-height: 1;
  letter-spacing: 0;
  pointer-events: none;
  z-index: 1;
  /* 1px 描边用 8 向 text-shadow（不侵入字心，10px 下白字仍清晰） */
  text-shadow:
    1px 0 0 var(--scrim), -1px 0 0 var(--scrim), 0 1px 0 var(--scrim), 0 -1px 0 var(--scrim),
    1px 1px 0 var(--scrim), -1px 1px 0 var(--scrim), 1px -1px 0 var(--scrim), -1px -1px 0 var(--scrim);
  box-shadow: 0 2px 8px var(--warn-line), inset 0 0 0 1px var(--warn-soft);
}
.mc-odds-badge.is-high {
  background: linear-gradient(165deg, var(--danger) 0%, var(--danger-line) 100%), var(--danger-soft);
  border-color: var(--danger-line);
  box-shadow: 0 2px 10px var(--danger-line), inset 0 0 0 1px var(--danger-soft);
}
/* high 入场脉冲：只动伪元素 ring，不改变尺寸/布局；减少动效时关闭 */
.mc-odds-badge.is-high::after {
  content: "";
  position: absolute;
  inset: -1px;
  border-radius: 8px;
  border: 1px solid var(--danger);
  opacity: 0;
  pointer-events: none;
  animation: mc-anom-pulse 900ms var(--ease-out) 1;
}
@keyframes mc-anom-pulse {
  0% { opacity: .7; transform: scale(.86); }
  70% { opacity: 0; transform: scale(1.4); }
  100% { opacity: 0; transform: scale(1.4); }
}
@media (prefers-reduced-motion: reduce) {
  .mc-odds-badge.is-high::after { animation: none; }
}
/* 受影响的结果格：只亮命中格，另外两格保持原样 */
.mc-odds .odds-cell.is-anom {
  background: var(--warn-soft);
  box-shadow: inset 0 0 0 1px var(--warn-line);
}
/* 卡顶 2px 暖色细线（JS 加 .match-card--anom；不依赖 :has）
   亮色下 .card--lit::after 的白色受光高光特异性更高，这里补一条同权重更高的覆盖 */
.match-card.match-card--anom::after {
  left: 0;
  right: 0;
  top: 0;
  height: 2px;
  background: linear-gradient(90deg, transparent 0%, var(--warn) 16%, var(--warn-line) 50%, var(--warn) 84%, transparent 100%);
  opacity: 1;
}
:root[data-theme="light"] .match-card.match-card--anom::after {
  background: linear-gradient(90deg, transparent 0%, var(--warn) 16%, var(--warn-line) 50%, var(--warn) 84%, transparent 100%);
}
.odds-cell {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 2px 5px;
  min-width: 0;
  padding: 6px 9px;
  background: var(--bg-inset);
}
.odds-k { font-size: 10px; color: var(--txt-2); flex: none; letter-spacing: .04em; }
.odds-v { font-size: var(--fs-13); font-weight: var(--fw-semibold); color: var(--txt-0); }
.odds-m { font-size: 10px; font-weight: var(--fw-medium); }
.odds-m.up { color: var(--data-up); }
.odds-m.down { color: var(--data-down); }
.odds-cell .spark { flex: 0 0 100%; width: 100%; height: 15px; margin-left: 0; margin-top: 1px; }
.odds-cell .odds-k { white-space: nowrap; }
.odds-cell .odds-v, .odds-cell .odds-m { white-space: nowrap; }

/* 已完赛卡：比分大、结果行（状态徽章只在无报告时回落于此，结果行不再重复命中/未中） */
.match-card--done { opacity: .92; }
.match-card--done .mc-name { color: var(--txt-1); }
.mc-result { display: flex; align-items: center; justify-content: space-between; gap: var(--s-2); min-width: 0; margin-top: 9px; padding-top: 8px; border-top: 1px solid var(--line-1); }
.mc-result .hit { color: var(--ok); font-size: var(--fs-12); font-weight: var(--fw-semibold); display: inline-flex; align-items: center; gap: 4px; }
.mc-result .miss { color: var(--danger); font-size: var(--fs-12); font-weight: var(--fw-semibold); display: inline-flex; align-items: center; gap: 4px; }
.mc-result svg { width: 14px; height: 14px; }

/* 空槽位不占间距（无赔率 / 无结论 / 无状态行时不留 9px 空档） */
.mc-verdict:empty,
.mc-odds:empty,
.mc-result:empty,
.mc-result-right:empty,
.mc-pending:empty,
.mc-verdict .mc-picks:empty { display: none; }

/* 长联赛名：卡片头 / 分组头单行省略，永不吃掉时间与场次数 */
.mc-top { min-width: 0; }
.mc-league {
  flex: 0 1 auto;
  min-width: 0;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.group-head b {
  min-width: 0;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.group-head .count { flex: none; }

/* 未分析卡：弱化、只留一个行动入口 */
.match-card--pending .mc-name { color: var(--txt-1); }
.mc-pending {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 9px;
  padding-top: 8px;
  border-top: 1px solid var(--line-1);
  font-size: var(--fs-11);
  color: var(--txt-2);
}
.mc-pending svg { width: 14px; height: 14px; color: var(--brand-text); }

/* 已读态：整卡降一档，不抢注意力 */
.match-card.is-read .mc-name { color: var(--txt-1); }

/* ------------------------------ 今日页空态 / 首屏骨架 ------------------------------ */
.today-empty { margin-top: var(--s-4); }
.today-skeleton .sk-card { margin-bottom: 10px; }
.today-skeleton .sk-card:first-child { height: 132px; }

/* ============================================================================
   今日页 · builder-core 增补（动态元素：下拉刷新 / 搜索 / 分组折叠 / 多场进行中 /
   关注引导 / 排序菜单 / 球队选择器）。全部使用 tokens，不改动上方 designer 规则。
   ========================================================================== */

/* 下拉刷新（JS 写 transform，只在顶部下拉时出现） */
.view-today .page { position: relative; }
.ptr {
  position: absolute;
  top: -34px; left: 0; right: 0;
  display: flex; align-items: center; justify-content: center; gap: 6px;
  height: 34px; opacity: 0;
  transition: opacity var(--dur-2) var(--ease-out);
  pointer-events: none;
}
.ptr-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--aurora-teal); box-shadow: 0 0 8px var(--aurora-teal-soft); }
.ptr-txt { font-size: var(--fs-11); color: var(--txt-2); }
.ptr--on .ptr { opacity: 1; }
.ptr--busy .ptr-dot { animation: pulse-dot 1s infinite; }

/* 联赛分组折叠（复用 fold 记忆键：today:g:*） */
.group-head[role="button"] { cursor: pointer; user-select: none; min-height: 40px; }
.group-head[role="button"]:active { opacity: .8; }
.group-chev { display: inline-flex; align-items: center; margin-left: 6px; color: var(--txt-3); transition: transform var(--dur-2) var(--ease-out); }
.group-chev svg { width: 15px; height: 15px; }
.group-chev.folded { transform: rotate(-90deg); }
.group-body[hidden] { display: none; }

/* 多场进行中 */
.live-strip--rows { display: block; padding: 4px var(--s-4); }
.live-row { display: flex; align-items: center; gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--line-1); min-height: 44px; cursor: pointer; }
.live-row:last-child { border-bottom: 0; }
.live-row:active { opacity: .85; }

/* 已完赛卡右侧结果区 */
.mc-result-right { display: inline-flex; align-items: center; gap: 6px; }

/* 关注引导（新用户） */
.fav-onboard { display: flex; align-items: center; gap: 10px; padding: 10px var(--s-3); }
.fo-ico { flex: none; width: 30px; height: 30px; border-radius: 10px; display: grid; place-items: center; color: var(--brand-text); background: var(--brand-soft); border: 1px solid var(--brand-line); }
.fo-ico svg { width: 16px; height: 16px; }
.fo-main { flex: 1; min-width: 0; }
.fo-title { font-size: var(--fs-13); font-weight: var(--fw-semibold); }
.fo-sub { font-size: var(--fs-11); color: var(--txt-2); margin-top: 1px; }
.fav-onboard .icon-btn { flex: none; width: 32px; height: 32px; }

/* 金色 pick（行动建议） */
.pick--gold { color: var(--brand-text); background: var(--brand-soft); border-color: var(--brand-line); }

/* 球队选择器 */
.team-picker .chips { max-height: 46vh; overflow: auto; }
.team-picker .chip { min-height: 34px; }

/* 比赛卡整卡可点 */
.match-card { cursor: pointer; }

/* ============================================================================
   用户端请求分析（J1 补丁）：服务端开关 gated，false 时入口不渲染
   ========================================================================== */
/* 未分析卡：「报告未发布 + ⚡请求分析」一行 */
.mc-ask-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.mc-ask-row .mc-pending-txt { display: inline-flex; align-items: center; gap: 5px; min-width: 0; }
.mc-ask-row .btn { flex: none; white-space: nowrap; }
.mc-analyzing { display: flex; align-items: center; gap: 6px; }

/* 自定义分析表单（弹层内；V3 组件 + 少量排版） */
.custom-form .field + .field { margin-top: 10px; }
.custom-form .label { display: block; }
.custom-form .muted { color: var(--txt-3); font-weight: var(--fw-regular); margin-left: 2px; }
.custom-form .input-row { display: flex; align-items: center; gap: 8px; }
.custom-form .input-row .input { flex: 1; min-width: 0; }
.custom-form .input-row .vs { flex: none; font-size: var(--fs-11); color: var(--txt-3); letter-spacing: .06em; }
.custom-form textarea.input { min-height: 84px; }
.custom-form .help { margin-top: 6px; }


/* 中文短徽章兜底：390 宽下不竖排（可小额/转推/不碰/并列/弃权） */
.pick, .badge, .score-chip, .tag-inline { white-space: nowrap; }
/* 单字队标：绝不溢出圆形 */
.mc-badge { overflow: hidden; }
/* 内容最后一张卡不被底栏压住 */
.view-today .page { padding-bottom: calc(var(--tabbar-h) + 20px + var(--safe-b)); }

/* T19-5 关注置顶组：关注的比赛优先展示（与「关注」筛选同一判据） */
.group-head--pin { margin-top: 2px; }
.group-head--pin b { color: var(--brand-text); }
.group-head--pin .pin-ico { display: inline-flex; align-items: center; color: var(--brand-text); margin-right: 2px; }
.group-head--pin .pin-ico svg { width: 13px; height: 13px; }
.group-body--pin .match-card { box-shadow: var(--sh-brand, 0 0 0 1px var(--brand-line)); }

/* ============================================================================
   F2/F3 APP 更新横幅（仅安卓壳内显示；网页/PWA 不显示）
   F3：主按钮「浏览器打开更新」（绝对 URL → Capacitor 交系统浏览器）+ 次按钮「复制链接」备用
   —— 沿用 tokens（brand 系）与 .btn/.icon-btn 组件；44px 触控；390/360 不溢出
   ========================================================================== */
.upd-banner {
  display: flex;
  flex-direction: column;
  gap: 9px;
  margin: 2px 0 var(--s-2);
  padding: 10px 12px 11px;
  border-radius: var(--r-lg);
  background: var(--brand-soft);
  border: 1px solid var(--brand-line);
  box-shadow: var(--sh-1);
}
.upd-top { display: flex; align-items: center; gap: 10px; }
.upd-ico {
  flex: none;
  width: 34px;
  height: 34px;
  border-radius: 10px;
  display: grid;
  place-items: center;
  color: var(--brand-text);
  background: var(--brand-softer, var(--brand-soft));
  border: 1px solid var(--brand-line);
}
.upd-ico svg { width: 17px; height: 17px; }
.upd-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.upd-title {
  font-size: var(--fs-13);
  font-weight: var(--fw-semibold);
  color: var(--txt-0);
  line-height: 1.3;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.upd-sub {
  font-size: var(--fs-11);
  color: var(--txt-2);
  line-height: 1.35;
  /* 更新说明可能较长（"点按钮用浏览器下载安装，或复制链接"）：允许 2 行，不做单行省略 */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.upd-actions { display: flex; align-items: center; gap: 8px; }
.upd-actions .btn--primary { flex: 1; min-width: 0; }
.upd-actions .btn--ghost { flex: none; }
/* 触控 ≥44px（与全局 .btn 触控口径一致；360 宽仍不溢出） */
.upd-banner .btn {
  min-height: 44px;
  height: 44px;
  padding: 0 12px;
  font-size: var(--fs-12);
  white-space: nowrap;
}
.upd-banner .upd-close {
  width: 44px;
  height: 44px;
  min-width: 44px;
  color: var(--txt-2);
}
.upd-banner .upd-close svg { width: 16px; height: 16px; }
/* 极窄屏（≤360）时缩小按钮水平内边距，保证主按钮文字完整 */
@media (max-width: 360px) {
  .upd-banner { padding: 9px 10px 10px; }
  .upd-banner .btn { padding: 0 9px; }
  .upd-main { min-width: 96px; }
}

/* ============================================================================
   筛选抽屉（core.popup 底部弹层）：联赛多选 / 排序 / 自定义分析
   —— 复用现役 .sheet 视觉语言（圆角 2xl / 卡片面 / 抓手），只加本页专属排版。
   —— 抽屉挂在 body 上（不在 #views 内），因此不受 #views 的 44px 触控规则影响。
   ========================================================================== */
.tf-sheet.sheet {
  padding: var(--s-4) var(--s-4) calc(var(--s-4) + var(--safe-b));
  background: var(--card-face-flat);
  border-color: var(--line-2);
}
.tf-sheet .sheet-title { font-size: var(--fs-17); font-weight: var(--fw-semibold); letter-spacing: var(--ls-cjk-title); }
/* 底部筛选抽屉不需要顶部安全区偏移；否则 ✕ 会被 safe-t 推下去压住「全部联赛」（用户 2026-11-12 反馈） */
.tf-sheet .sheet-x { top: var(--s-3); right: var(--s-3); }
.tf-sheet .sheet-body { margin-top: var(--s-3); }
.tf-sec + .tf-sec { margin-top: var(--s-4); }
.tf-sec-h {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--s-2);
  margin-bottom: var(--s-2);
}
.tf-sec-h b { font-size: var(--fs-12); font-weight: var(--fw-semibold); letter-spacing: .04em; color: var(--txt-1); }
.tf-sec-h span { font-size: var(--fs-11); color: var(--txt-3); font-variant-numeric: tabular-nums; }
.tf-lgs {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  max-height: 38vh;
  overflow-y: auto;
  overscroll-behavior: contain;
}
.tf-lg {
  display: inline-flex;
  align-items: center;
  min-height: 34px;
  max-width: 100%;
  padding: 7px 12px;
  border: 1px solid var(--line-2);
  border-radius: var(--r-full);
  background: var(--surface-1);
  color: var(--txt-1);
  font-size: var(--fs-12);
  font-weight: var(--fw-medium);
  line-height: 1.25;
  text-align: left;
  white-space: normal;
  overflow-wrap: anywhere;
  -webkit-tap-highlight-color: transparent;
  transition: color var(--dur-1) var(--ease-out), background-color var(--dur-1) var(--ease-out),
              border-color var(--dur-1) var(--ease-out);
}
.tf-lg[aria-pressed="true"] { color: var(--brand-text); background: var(--brand-soft); border-color: var(--brand-line); }
.tf-lg:active { transform: scale(.98); }
.tf-lg-empty { font-size: var(--fs-12); color: var(--txt-3); }

.tf-sort {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 3px;
  padding: 3px;
  border: 1px solid var(--line-1);
  border-radius: var(--r-sm);
  background: var(--surface-1);
}
.tf-sort > button {
  height: 38px;
  border: 0;
  border-radius: var(--r-xs);
  background: transparent;
  color: var(--txt-2);
  font-size: var(--fs-12);
  font-weight: var(--fw-medium);
  white-space: nowrap;
}
.tf-sort > button[aria-checked="true"] { color: var(--txt-0); background: var(--surface-2); }

.tf-sh-ask { margin-top: var(--s-4); padding-top: var(--s-3); border-top: 1px solid var(--line-1); }
.tf-ask {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  min-height: 44px;
  padding: 0;
  border: 0;
  background: none;
  text-align: left;
  color: var(--txt-1);
}
.tf-ask > svg { width: 18px; height: 18px; flex: none; color: var(--brand-text); }
.tf-ask .tf-ask-t { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; text-align: left; }
.tf-ask .tf-ask-t b { font-size: var(--fs-13); font-weight: var(--fw-medium); color: var(--txt-0); }
.tf-ask .tf-ask-t em { font-style: normal; font-size: var(--fs-11); color: var(--txt-3); }
.tf-ask .tf-ask-go { color: var(--txt-3); display: inline-flex; flex: none; }
.tf-ask .tf-ask-go svg { width: 15px; height: 15px; }

.tf-sh-foot { display: flex; align-items: center; gap: var(--s-2); margin-top: var(--s-4); }
.tf-reset {
  flex: none;
  height: 44px;
  padding: 0 14px;
  border: 0;
  background: none;
  color: var(--txt-2);
  font-size: var(--fs-13);
}
.tf-reset:disabled { opacity: .4; }
.tf-apply {
  flex: 1;
  min-width: 0;
  height: 44px;
  border: 1px solid transparent;
  border-radius: var(--r-full);
  background: var(--brand-grad);
  color: var(--txt-on-brand);
  font-size: var(--fs-15);
  font-weight: var(--fw-bold);
  box-shadow: var(--sh-brand), inset 0 1px 0 rgba(255, 255, 255, .5);
  font-variant-numeric: tabular-nums;
}

/* ============================================================================
   窄屏（≤360 / ≤330）：收内边距，保证 4 tab + 2 图标不换行
   实测：390 → tabs 215 + 图标 88 = 303 < 362（余 59）
        320 → tabs 187 + 图标 88 = 275 < 292（余 17）
   ========================================================================== */
@media (max-width: 360px) {
  .tf-tab { padding: 0 9px; }
  .tf-tab::after { left: 9px; right: 9px; }
  .tf-tab:first-child::after { left: 0; }
}
@media (max-width: 330px) {
  .tf-tab { padding: 0 8px; }
  .tf-tab::after { left: 8px; right: 8px; }
  .tf-tab:first-child::after { left: 0; }
}

/* 320（iPhone SE 一代）：日期条会把「11月12日 · 周三 / 销售日 · N 场」挤成两行。
   窄屏下收起副文案，日期主文案不换行（场次数在简报卡里已有），保证 0 横向溢出。 */
@media (max-width: 340px) {
  .date-bar { gap: 6px; }
  .date-bar .date-mid { min-width: 0; }
  .date-bar .date-main { font-size: var(--fs-13); white-space: nowrap; }
  .date-bar .date-sub { display: none; }
}
