/* ==========================================================================
   三角洲赛事系统 — 页面级样式 (pages.css)
   hero / 特性卡 / 赛事卡 / 赛事详情 / 战队主页 / 后台专用布局
   ========================================================================== */

/* ---------- 首页 Hero：封面照 + 深色蒙层（白页里的一块暗色横幅，字全压暗部） ---------- */
.hero { position: relative; padding: 0 0 56px; }
.hero-stage { position: relative; isolation: isolate; display: flex; align-items: flex-end;
  min-height: clamp(520px, 42vw, 660px); overflow: hidden; border-radius: 0 0 var(--p-r-xl) var(--p-r-xl);
  background: var(--p-ink-900); box-shadow: var(--shadow-xl); }
/* 封面主角的头在画面上 1/5，取 16% 才不被裁掉 */
.hero-photo { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover;
  object-position: 50% 16%; z-index: -2; }
/* 蒙层按实测铺：封面中上部是过曝的天空（亮度 0.96），标题落在上面只有 2.6:1。
   横向 + 顶部两道把标题区抬到 4.5 以上，右侧留白给封面主角。 */
.hero-stage::after { content: ''; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background:
    linear-gradient(100deg, rgba(5,10,20,0.94) 0%, rgba(5,10,20,0.86) 30%, rgba(5,10,20,0.62) 52%, rgba(5,10,20,0.18) 78%, rgba(5,10,20,0.04) 100%),
    linear-gradient(to bottom, rgba(5,10,20,0.60) 0%, rgba(5,10,20,0.22) 40%, transparent 72%),
    linear-gradient(to top, rgba(5,10,20,0.80) 0%, rgba(5,10,20,0.34) 34%, transparent 60%),
    radial-gradient(120% 90% at 50% 40%, transparent 52%, rgba(3,7,15,0.42) 100%); }
.hero .container { position: relative; }
.hero-inner { max-width: 720px; padding: 88px 0 0; }
.hero-title { font-size: clamp(40px, 6.4vw, 72px); font-weight: 700; line-height: 1.04; letter-spacing: -0.028em;
  /* 渐变字是硬禁项：纯色 + 一档投影就够压在封面上读 */
  margin: 16px 0 0; color: #F4F9FF;
  filter: drop-shadow(0 2px 6px rgba(3, 7, 15, 0.6)); }
.hero-desc { font-size: 18px; line-height: 1.7; color: rgba(240, 246, 255, 0.95); margin: 20px 0 0; max-width: 56ch;
  text-shadow: 0 1px 12px rgba(3, 7, 15, 0.5); }
/* 统计条：压在封面底部的一块实心深色板（磨砂玻璃撤了），宽度跟标题同栏——
   铺满整行会伸进右侧亮天空，字就糊了 */
.hero-stats { display: flex; gap: 48px; margin-top: 44px; padding: 20px 26px; flex-wrap: wrap;
  max-width: 720px; background: rgba(6, 11, 20, 0.72); border: 1px solid var(--chrome-rule);
  border-radius: var(--p-r-md); }
.hero .stat { padding: 6px 0; }
/* Hero 内的深色专用排版：白页的语义色在这里一律反过来，别跟着 --text-* 走 */
.hero .eyebrow { color: var(--p-gold-300); }
.hero .stat-label { color: rgba(226,235,246,0.72); }
.hero .stat-value { color: #fff; }
.hero .stat-value.accent { color: var(--p-blue-300); }
.hero .stat-value.gold { color: var(--p-gold-300); }
.hero .btn-outline { background: rgba(255,255,255,0.06); color: #fff; border-color: rgba(255,255,255,0.42); }
.hero .btn-outline:hover { background: rgba(255,255,255,0.14); border-color: #fff; }
@media (max-width: 640px) {
  .hero-stage { min-height: 460px; }
  .hero-inner { padding-top: 48px; }
  .hero-stats { gap: 24px; padding: 16px 18px; }
}

/* ---------- 特性卡图标 ---------- */
/* 分区标题前的一道信号色短标：给白页的每个 section 一个起点 */
.sec-bar { display: block; width: 22px; height: 4px; border-radius: 1px; margin-bottom: 14px;
  background: var(--signal); }
.feat-icon { width: 46px; height: 46px; border-radius: var(--p-r-md); display: grid; place-items: center; }
.feat-icon svg { width: 24px; height: 24px; }
.feat-icon.blue { background: var(--accent-soft); color: var(--accent-hover); }
.feat-icon.gold { background: var(--gold-soft); color: var(--gold); }
.feat-icon.green { background: var(--success-soft); color: var(--success); }
.feat-icon.purple { background: rgba(135,80,190,0.13); color: var(--p-purple-600); }

/* ---------- 赛事卡片 ---------- */
.tour-card { display: flex; flex-direction: column; gap: 12px; cursor: pointer; text-decoration: none; color: inherit; }
/* 状态角标：右上角一颗实心方块（单边粗条是禁项），白底卡片扫一眼分出报名中/进行中/已结束 */
.tour-card::before { content: ''; position: absolute; top: 14px; right: 14px; left: auto; bottom: auto;
  width: 10px; height: 10px; border-radius: var(--p-r-xs); background: var(--p-paper-4); }
.tour-card.st-registering::before { background: var(--accent); }
.tour-card.st-ongoing::before { background: var(--success); }
.tour-card.st-finished::before { background: var(--p-slate-300); }
.tour-card:hover .tour-name { color: var(--accent-hover); }
.tour-card-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.tour-name { font-size: 17px; font-weight: 600; letter-spacing: -0.01em; margin: 0; line-height: 1.3;
  transition: color var(--p-dur-fast); }
.tour-meta { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 4px; }
.tour-foot { display: flex; align-items: center; justify-content: space-between; padding-top: 12px;
  border-top: 1px solid var(--border-subtle); margin-top: auto; }
.tour-teams { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text-tertiary); }
.tour-teams svg { width: 15px; height: 15px; }
.tour-format { font-size: 12px; color: var(--text-tertiary); }
/* 首页「显示更多」：占满整行居中，别跟着卡片网格挤成一格 */
.list-more { grid-column: 1 / -1; display: flex; justify-content: center; padding-top: var(--p-sp-4); }

/* ---------- 赛事详情 ---------- */
.tour-hero { padding: 40px 0 24px; }
.tour-hero-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; flex-wrap: wrap; }
.tour-badges { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }
.info-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px,1fr)); gap: 20px; }
.info-item .k { font-size: 12px; color: var(--text-tertiary); margin-bottom: 4px; }
.info-item .v { font-size: 16px; font-weight: 600; color: var(--text-primary); }

/* 积分榜表格强调（亮色下银/铜要加深，白底上 #C0C8D4 只有 1.6:1，等于看不见） */
.standing-table .rank-1 { color: var(--gold); font-weight: 700; }
.standing-table .rank-2 { color: var(--p-slate-500); font-weight: 700; }
.standing-table .rank-3 { color: #A05A12; font-weight: 700; }
.standing-table .team-cell { display: flex; align-items: center; gap: 10px; }
.qualify-mark { width: 8px; height: 8px; align-self: center; flex-shrink: 0; margin: 0;
  background: var(--success); border-radius: var(--p-r-xs); }

/* ---------- 战队主页 ---------- */
.team-cover { height: 160px; border-radius: var(--p-r-lg) var(--p-r-lg) 0 0; position: relative; overflow: hidden;
  background: var(--p-ink-800); }
.team-profile { margin-top: -48px; padding: 0 24px 24px; position: relative; }
.team-name-row { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.player-chip { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-radius: var(--p-r-md);
  background: var(--bg-subtle); border: 1px solid var(--border-subtle); }
.player-chip .gid { font-family: var(--font-mono); font-size: 13px; color: var(--text-primary); }
.player-chip .pos { font-size: 11px; color: var(--text-tertiary); }
/* 表格里的一行是一块次级表面，不是一张卡片：卡片里再套卡片，读起来像列表坏了。
   代报名那张「一个队员一行、每行还带自己的报名材料」的表就是这个形状。 */
.sub-row { padding: 10px 12px; border-radius: var(--p-r-md); background: var(--bg-subtle); border: 1px solid var(--border-subtle); }
.captain-flag { font-size: 10px; font-weight: 700; color: var(--gold); background: var(--gold-soft);
  padding: 2px 6px; border-radius: 5px; letter-spacing: 0.04em; }
/* 优化控制台待审战队的排版 */
@media (min-width: 768px) {
  .player-chip { max-width: 400px; flex: none; } 
  .player-chip .gid, .player-chip .pos { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
}

/* 战绩条目 */
.match-row { display: flex; align-items: center; gap: 16px; padding: 14px 16px; border-radius: var(--p-r-md);
  background: var(--bg-subtle); border: 1px solid var(--border-subtle); }
.match-row + .match-row { margin-top: 8px; }
.match-teams { flex: 1; display: flex; align-items: center; gap: 12px; min-width: 0; }
.match-vs { font-size: 12px; color: var(--text-quaternary); font-weight: 600; }
.match-score { font-family: var(--font-mono); font-size: 18px; font-weight: 700; }
.result-tag { width: 30px; height: 30px; border-radius: 9px; display: grid; place-items: center; font-size: 13px;
  font-weight: 700; flex-shrink: 0; }
.result-win { background: var(--success-soft); color: var(--success); }
.result-lose { background: var(--danger-soft); color: var(--danger); }
.result-draw { background: var(--neutral-soft); color: var(--text-tertiary); }

/* ---------- 排行榜 ---------- */
.podium { display: flex; gap: 16px; align-items: flex-end; justify-content: center; margin-bottom: 40px; flex-wrap: wrap; }
.podium-item { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 24px 20px;
  border-radius: var(--p-r-lg); background: var(--bg-panel); border: 1px solid var(--border-subtle);
  min-width: 180px; text-align: center; box-shadow: var(--shadow-sm); }
.podium-item.first { border-color: var(--gold); box-shadow: var(--shadow-glow-gold); transform: translateY(-12px); }
.podium-item.second { border-color: var(--p-slate-300); }
.podium-item.third { border-color: #C08A4A; }
.podium-rank { font-size: 40px; font-weight: 800; line-height: 1; font-family: var(--font-mono);
  letter-spacing: -0.03em; }
.podium-item.first .podium-rank { color: var(--gold); }
.podium-item.second .podium-rank { color: var(--p-slate-400); }
.podium-item.third .podium-rank { color: #A05A12; }
.podium-score { font-size: 14px; color: var(--text-tertiary); }

/* ---------- 管理后台专用 ---------- */
.admin-page-head { display: flex; align-items: center; justify-content: space-between; gap: 16px;
  margin-bottom: 24px; flex-wrap: wrap; }
.admin-page-title { font-size: 22px; font-weight: 700; letter-spacing: -0.02em; margin: 0; }
.wizard-steps { display: flex; gap: 8px; margin-bottom: 24px; flex-wrap: wrap; }
.wizard-step { display: flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: var(--p-r-pill);
  background: var(--bg-muted); border: 1px solid var(--border-subtle); font-size: 13px; color: var(--text-tertiary); }
.wizard-step .step-no { width: 20px; height: 20px; border-radius: 50%; background: var(--p-paper-0);
  border: 1px solid var(--border-default); color: var(--text-tertiary);
  display: grid; place-items: center; font-size: 11px; font-weight: 700; }
.wizard-step.active { background: var(--accent-soft); border-color: var(--accent); color: var(--accent-hover); }
.wizard-step.active .step-no { background: var(--accent); color: #fff; }
.wizard-step.done { color: var(--success); }
.wizard-step.done .step-no { background: var(--success-soft); color: var(--success); }

/* 编排：种子设置行 */
.seed-row { display: flex; align-items: center; gap: 12px; padding: 10px 14px; border-radius: var(--p-r-md);
  background: var(--bg-subtle); border: 1px solid var(--border-subtle); margin-bottom: 8px; }
.seed-input { width: 68px; text-align: center; }

/* 房间/回合编辑网格 */
.round-edit-row { display: grid; grid-template-columns: 40px 1fr 120px 120px; gap: 10px; align-items: center;
  padding: 8px 0; border-bottom: 1px solid var(--border-subtle); }
@media (max-width: 640px){ .round-edit-row { grid-template-columns: 32px 1fr; } }

/* BP 回合时间线 */
.bp-turn { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-radius: var(--p-r-md);
  background: var(--bg-subtle); border: 1px solid var(--border-subtle); margin-bottom: 8px; }
.bp-turn.current { border-color: var(--accent); box-shadow: var(--shadow-glow-blue); }
.bp-turn.done { opacity: 0.7; }

/* 小队编制 */
.squad-board { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; }
@media (max-width: 1024px){ .squad-board { grid-template-columns: repeat(2,1fr);} }
@media (max-width: 640px){ .squad-board { grid-template-columns: 1fr;} }
.squad-col { background: var(--bg-subtle); border: 1px solid var(--border-subtle); border-radius: var(--p-r-md);
  padding: 12px; min-height: 200px; }
.squad-col.full { border-color: var(--success); }
.squad-head { font-size: 13px; font-weight: 700; color: var(--gold); text-align: center; padding-bottom: 8px;
  margin-bottom: 8px; border-bottom: 1px solid var(--border-subtle); }
.squad-slot { padding: 8px 10px; border-radius: var(--p-r-xs); background: var(--bg-muted); font-size: 13px;
  margin-bottom: 6px; display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.squad-slot.empty { color: var(--text-quaternary); border: 1px dashed var(--border-default); background: transparent; }
.player-pool { display: flex; flex-wrap: wrap; gap: 8px; }
.pool-chip { padding: 6px 12px; border-radius: var(--p-r-pill); background: var(--bg-muted);
  border: 1px solid var(--border-subtle); font-size: 13px; cursor: pointer; transition: all 140ms; }
.pool-chip:hover { border-color: var(--accent); }
.pool-chip.assigned { opacity: 0.4; pointer-events: none; }

/* 赛果录入比分器 */
.score-stepper { display: flex; align-items: center; gap: 8px; }
.score-stepper button { width: 34px; height: 34px; border-radius: 10px; border: 1px solid var(--border-default);
  background: var(--bg-subtle); color: var(--text-primary); font-size: 18px; cursor: pointer; line-height: 1; }
.score-stepper button:hover { background: var(--bg-hover); }
.score-stepper .val { min-width: 44px; text-align: center; font-family: var(--font-mono); font-size: 24px; font-weight: 700; }

/* 详情描述列表 */
.dl { display: grid; grid-template-columns: auto 1fr; gap: 10px 20px; font-size: 14px; }
.dl dt { color: var(--text-tertiary); }
.dl dd { margin: 0; color: var(--text-primary); }

/* ==================== 赛程日历 ==================== */
/* 月视图：一格一天，格子里只放「几场 + 头一场的对手」，具体场次交给下面的当日列表 */
.cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; }
.cal-dow { font-size: var(--p-fs-12); color: var(--text-tertiary); text-align: center; padding: 4px 0; }
.cal-cell { min-height: 76px; padding: 6px 8px; border-radius: var(--p-r-sm); cursor: pointer;
  background: var(--bg-subtle); border: 1px solid var(--border-subtle);
  transition: background 140ms var(--p-ease-out), border-color 140ms var(--p-ease-out); }
.cal-cell:hover { border-color: var(--accent); }
.cal-cell.blank { background: transparent; border-color: transparent; cursor: default; }
.cal-cell.off { opacity: 0.45; }
.cal-cell.today { border-color: var(--accent); }
.cal-cell.picked { background: var(--accent-soft); border-color: var(--accent); box-shadow: var(--shadow-glow-blue); }
.cal-day { font-size: var(--p-fs-12); font-family: var(--font-mono); color: var(--text-tertiary); }
.cal-cell.today .cal-day { color: var(--accent-hover); font-weight: 700; }
.cal-count { font-size: var(--p-fs-11); color: var(--text-secondary); margin-top: 4px; line-height: 1.45; }
@media (max-width: 640px) {
  .cal-grid { gap: 4px; }
  .cal-cell { min-height: 54px; padding: 4px 5px; }
  .cal-count { display: none; }
}
/* 订阅链接：URL 本体要能选中复制，所以是普通文本而不是按钮 */
.sub-url { font-family: var(--font-mono); font-size: var(--p-fs-12); color: var(--text-secondary);
  background: var(--bg-sunken); border: 1px solid var(--border-subtle); border-radius: var(--p-r-xs);
  padding: 6px 8px; word-break: break-all; }

/* ---------- 在线背景音乐 ----------
   后台那一侧是列表里的一枚封面；前台那一侧是挂在 body 上的浮层 ——
   浮层按 tokens.css 作用域档 ③ 的口径走「可见边框 + 短投影」，别跟着观众侧的长投影跑：
   它压在内容上面，长投影只会糊成一块脏边。 */
.music-thumb { width: 40px; height: 40px; border-radius: var(--p-r-sm); object-fit: cover;
  background: var(--bg-sunken); border: 1px solid var(--border-subtle); flex-shrink: 0; }
.music-thumb-empty { display: inline-block; }
.music-thumb.playing { border-color: var(--accent); }

.music-dock { position: fixed; right: 18px; bottom: calc(18px + var(--cookie-lift, 0px)); z-index: var(--p-z-sticky);
  display: flex; align-items: center; gap: 8px; padding: 8px;
  background: var(--bg-elevated); border: 1px solid var(--border-default);
  border-radius: 999px; box-shadow: var(--shadow-lg); }
.music-disc { position: relative; width: 44px; height: 44px; border-radius: 50%; padding: 0;
  border: 1px solid var(--border-default); background: var(--bg-sunken); cursor: pointer; overflow: hidden;
  display: grid; place-items: center; color: var(--text-primary); }
.music-disc img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.music-disc .music-spin { animation: music-spin 9s linear infinite; }
.music-disc::after { content: ''; position: absolute; width: 8px; height: 8px; border-radius: 50%;
  background: var(--bg-elevated); border: 1px solid var(--border-subtle); }
.music-disc svg { position: relative; z-index: 1; width: 18px; height: 18px; }
@keyframes music-spin { to { transform: rotate(360deg); } }
.music-now { max-width: 168px; min-width: 0; }
.music-now-title { font-size: var(--p-fs-12); font-weight: var(--p-fw-semi); color: var(--text-primary);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.music-now-artist { font-size: var(--p-fs-11); color: var(--text-tertiary);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* 位置那一行是给人读数的，所以用等宽数字：0:58 与 1:02 换着跳时别让整行跟着抖 */
.music-now-pos { font-family: var(--font-mono); font-size: var(--p-fs-11); color: var(--text-tertiary);
  font-variant-numeric: tabular-nums; white-space: nowrap; }
.music-btn { width: 30px; height: 30px; border-radius: 50%; border: 1px solid var(--border-subtle);
  background: transparent; color: var(--text-secondary); cursor: pointer; display: grid; place-items: center; }
.music-btn:hover { color: var(--text-primary); border-color: var(--accent); }
.music-btn svg { width: 15px; height: 15px; }
.music-vol { width: 76px; accent-color: var(--accent); }

/* 面板靠整块浮层撑开，不套第二层卡片：列头 + 行 + 一条 footnote 就够
   bottom 里那一项跟坞同一个抬升量：Cookie 条露出来的时候两者都要让到它上面 */
.music-panel { position: fixed; right: 18px; bottom: calc(74px + var(--cookie-lift, 0px)); z-index: var(--p-z-sticky);
  width: min(320px, calc(100vw - 24px)); max-height: min(52vh, 420px); overflow-y: auto;
  background: var(--bg-elevated); border: 1px solid var(--border-default);
  border-radius: var(--p-r-lg); box-shadow: var(--shadow-lg); padding: 10px 12px; }
.music-panel-title { font-size: var(--p-fs-12); font-weight: var(--p-fw-semi); letter-spacing: .04em;
  color: var(--text-secondary); margin: 0 0 8px; }
.music-item { display: flex; align-items: center; gap: 8px; padding: 6px 4px; border-radius: var(--p-r-sm);
  cursor: pointer; }
.music-item:hover { background: var(--bg-hover); }
.music-item.on { background: var(--accent-soft); }
.music-item.on .music-item-title { color: var(--accent-hover); font-weight: var(--p-fw-semi); }
.music-item-title { font-size: var(--p-fs-13); color: var(--text-primary); min-width: 0;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.music-item-artist { font-size: var(--p-fs-11); color: var(--text-tertiary); }
.music-item-dur { margin-left: auto; font-family: var(--font-mono); font-size: var(--p-fs-11); color: var(--text-tertiary); }
.music-panel-foot { font-size: var(--p-fs-11); color: var(--text-tertiary); line-height: 1.6;
  border-top: 1px solid var(--border-subtle); margin-top: 8px; padding-top: 8px; }

/* 收起来不是删掉：右边缘留一枚不显眼的角，点它回来 —— 找不到开关比看见图标更烦人 */
.music-tab { position: fixed; right: 0; bottom: 22%; z-index: var(--p-z-sticky);
  width: 24px; height: 34px; display: grid; place-items: center; cursor: pointer;
  background: var(--bg-elevated); border: 1px solid var(--border-default); border-right: 0;
  border-radius: var(--p-r-sm) 0 0 var(--p-r-sm); color: var(--text-tertiary); }
.music-tab:hover { color: var(--text-primary); }
.music-tab svg { width: 14px; height: 14px; }

@media (max-width: 520px) {
  .music-dock { right: 12px; bottom: calc(12px + var(--cookie-lift, 0px)); padding: 6px; gap: 6px; }
  .music-disc { width: 38px; height: 38px; }
  .music-now { max-width: 122px; }
  .music-vol { display: none; }
  .music-panel { bottom: calc(62px + var(--cookie-lift, 0px)); }
}
@media (prefers-reduced-motion: reduce) {
  .music-disc .music-spin { animation: none; }
}

/* ---------- Cookie 同意条（访客第一次进站那一次） ----------
   不用 position:fixed：右下角那枚音乐坞是固定的，两条都钉在底下就会互相压。
   sticky 贴在文档末尾，滚到哪儿都在视野下沿；坞那边读 --cookie-lift（core.js 量出这条的真实高度挂上去的）
   把自己整块抬到条上面，所以这里不再给坞留右侧那块白 —— 留 112px 兜不住 304px 宽的坞，
   实测第一次进站的访客，「接受」那颗按钮正好被压在坞底下。 */
.cookie-bar { position: sticky; bottom: 0; z-index: var(--p-z-sticky);
  background: var(--bg-elevated); border-top: 1px solid var(--border-default);
  box-shadow: var(--shadow-lg); }
.cookie-bar[hidden] { display: none; }
.cookie-bar-inner { max-width: var(--content-max); margin: 0 auto; padding: 14px 24px;
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px 16px; }
/* 标题与正文占一格，右侧那两格（两页链接、两只按钮）才不会被文字挤散 */
.cookie-bar-copy { flex: 1 1 320px; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.cookie-bar-title { margin: 0; font-size: var(--p-fs-14); font-weight: var(--p-fw-semi);
  color: var(--text-primary); letter-spacing: -0.01em; }
.cookie-bar-text { margin: 0; font-size: var(--p-fs-13); color: var(--text-secondary); line-height: 1.65; }
.cookie-bar-links { display: flex; gap: 12px; flex: 0 0 auto; }
.cookie-bar-links a { font-size: var(--p-fs-13); color: var(--text-link); text-decoration: none; }
.cookie-bar-links a:hover { text-decoration: underline; }
.cookie-bar-actions { display: flex; gap: 8px; flex: 0 0 auto; }
@media (max-width: 720px) {
  /* 窄屏上坞收到右下角只占一小块，横幅改成上下排，按钮排满一行，不必再留那块白 */
  .cookie-bar-inner { flex-direction: column; align-items: stretch; padding: 12px 16px 16px; }
  /* flex-basis 跟着主轴走：竖排时那 320px 会从「一行多宽」变成「这一块多高」，
     一句话的文案会被撑成 320px 的空条（实测三行字占了 320px）。竖排改回按内容长。 */
  .cookie-bar-copy { flex: 1 1 auto; }
  .cookie-bar-actions { justify-content: flex-end; }
  .cookie-bar-actions .btn { flex: 1 1 auto; }
}

/* ---------- 条款那一页（隐私政策 / 服务条款） ----------
   正文是他自己在后台写的纯文本，段落靠空行分，所以这里只管一行读多宽、段间距多少，
   不排版标题层级 —— 层级在纯文本里表达不出来，硬造一个「自动认标题」反而会把「一、」这种分行认错。 */
.doc-wrap { max-width: var(--content-max); margin: 0 auto; padding: 40px 24px 72px; }
.doc-head { border-bottom: 1px solid var(--border-subtle); padding-bottom: 16px; margin-bottom: 28px; }
.doc-body { max-width: 72ch; }
.doc-body p { margin: 0 0 18px; font-size: 15px; line-height: 1.85; color: var(--text-primary); }
.doc-body p:last-child { margin-bottom: 0; }
.doc-note { max-width: 72ch; margin-top: 40px; padding: 18px 20px;
  border: 1px solid var(--border-default); border-radius: var(--p-r-md); background: var(--bg-subtle); }
.doc-note-title { margin: 0 0 8px; font-size: var(--p-fs-13); font-weight: var(--p-fw-semi);
  letter-spacing: 0.02em; color: var(--text-secondary); }
.doc-note p { margin: 0 0 12px; line-height: 1.7; }
@media (max-width: 720px) {
  .doc-wrap { padding: 28px 16px 56px; }
  .doc-body p { font-size: 14.5px; }
}

/* 页脚那两个条款链接：跟页脚同一档灰字， hover 才变链接色（它不是主导航，别抢） */
.site-foot { padding: 40px 0 48px; border-top: 1px solid var(--border-subtle); }
.site-foot .footer-docs a { color: var(--text-tertiary); text-decoration: none; font-size: var(--p-fs-12); }
.site-foot .footer-docs a:hover { color: var(--text-link); }

/* ---------- 后台 · 站点对外形象（SEO 与站点文案） ----------
   左边是填的那几条，右边那张是「爬虫实际会拿到的样子」：按分享卡片那一套排 ——
   图在上、地址小字、标题粗一档、描述两行截掉。它是预览，不是又一个卡片区。 */
[data-page="seo"] .seo-meta-grid { display: grid; grid-template-columns: minmax(0, 1fr) 320px;
  gap: var(--p-sp-5); align-items: start; }
[data-page="seo"] .seo-share { border: 1px solid var(--border-default); border-radius: var(--p-r-md);
  overflow: hidden; background: var(--p-paper-0);
  /* 这一列收成整行宽时（<1080px）预览别跟着长：它是「一张分享卡片」的样子，撑到 725px 就不像卡片了 */
  max-width: 420px; }
[data-page="seo"] .seo-share-img { display: block; width: 100%; aspect-ratio: 1.91 / 1;
  object-fit: cover; background: var(--bg-muted); }
[data-page="seo"] .seo-share-body { padding: 10px 12px 12px; display: flex; flex-direction: column; gap: 4px; }
[data-page="seo"] .seo-share-url { font-size: var(--p-fs-11); color: var(--text-tertiary);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
[data-page="seo"] .seo-share-title { font-size: var(--p-fs-14); font-weight: var(--p-fw-semi); color: var(--text-primary); }
[data-page="seo"] .seo-share-desc { font-size: var(--p-fs-12); line-height: 1.5; color: var(--text-secondary);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
[data-page="seo"] .seo-og-thumb { width: 168px; height: 88px; object-fit: cover; flex-shrink: 0;
  border: 1px solid var(--border-default); border-radius: var(--p-r-sm); background: var(--bg-muted); }
@media (max-width: 1080px) {
  [data-page="seo"] .seo-meta-grid { grid-template-columns: minmax(0, 1fr); }
}
