/*
 * 赛事视觉的单一来源。各业务 overlay 保留布局和行为，只消费同一套主题令牌。
 * 根因：旧规则在切换详情标签和办赛阶段时覆盖整页配色、标题、容器与按钮。
 * 此文件必须位于赛事样式之后；限定在赛事 host，避免改变其他产品页面。
 */
html:has(:is(app-tournament-detail-page, app-tournament-management-page, app-admin-tournaments-tab)) {
  --tv-bg: #11100e;
  --tv-panel: #1b1814;
  --tv-soft: #25201a;
  --tv-text: #f5efe3;
  --tv-muted: #bdb3a5;
  --tv-line: #433b31;
  --tv-accent: #ef8a80;
  --tv-action: #b72d32;
  --tv-active: #32211d;
  --tv-gold: #d1b37d;
  --tv-success: #a5d6b4;
  --tv-font: 'Inter', 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', system-ui, sans-serif;
  --tv-title-font: 'Noto Serif SC', 'Songti SC', 'SimSun', Georgia, serif;
  --tv-gutter: 32px;
  --tv-radius: 8px;
  --tv-content: min(1280px, calc(100% - var(--tv-gutter) * 2));
}
html:is(.light-mode, [data-ft-mode='paper']):has(:is(app-tournament-detail-page, app-tournament-management-page, app-admin-tournaments-tab)) {
  --tv-bg: #fdfbf6;
  --tv-panel: #fffdf9;
  --tv-soft: #f6f0e4;
  --tv-text: #262a33;
  --tv-muted: #655e54;
  --tv-line: #ded4c6;
  --tv-accent: #a92d32;
  --tv-active: #f6e8e1;
  --tv-gold: #82602a;
  --tv-success: #28684d;
}
/* 定义在旧令牌所在节点，防止局部令牌遮盖从 :root 继承的主题。 */
html:has(#tournament-title, app-tournament-management-page .workspace-shell, app-admin-tournaments-tab .workspace-shell),
html body:has(#tournament-title, app-tournament-management-page .workspace-shell, app-admin-tournaments-tab .workspace-shell),
html body app-tournament-detail-page:has(#tournament-title) :is(.tournament-detail-page, .ts-root, .tjr-root, .discussion-view),
html body :is(app-tournament-detail-page, .tournament-detail-page, .ts-root, .tjr-root, .discussion-view,
  app-tournament-management-page, app-admin-tournaments-tab, app-tournament-management-workspace,
  app-tournament-basics-editor, app-tournament-match-planning, app-tournament-user-lookup) {
  --detail-bg: var(--tv-bg); --detail-surface: var(--tv-panel); --detail-copy: var(--tv-text);
  --detail-soft: var(--tv-muted); --detail-muted: var(--tv-muted); --detail-line: var(--tv-line);
  --detail-purple: var(--tv-accent); --detail-cyan: var(--tv-accent);
  --poster-accent: var(--tv-accent); --poster-button: var(--tv-action); --poster-gold: var(--tv-gold);
  --tt-bg: var(--tv-bg); --tt-panel: var(--tv-panel); --tt-ink: var(--tv-text); --tt-muted: var(--tv-muted);
  --tt-line: var(--tv-line); --tt-accent: var(--tv-accent); --tt-focus: var(--tv-active); --tt-action: var(--tv-action);
  --tt-warm: var(--tv-gold); --tt-warm-bg: var(--tv-soft);
  --ts-paper: var(--tv-bg); --ts-panel: var(--tv-panel); --ts-text: var(--tv-text); --ts-muted: var(--tv-muted);
  --ts-line: var(--tv-line); --ts-accent: var(--tv-accent); --ts-selection: var(--tv-active);
  --ts-on-accent: var(--tv-bg); --ts-gold: var(--tv-gold); --ts-positive: var(--tv-success); --ts-heading-font: var(--tv-title-font);
  --trb-bg: var(--tv-bg); --trb-panel: var(--tv-panel); --trb-soft: var(--tv-soft); --trb-text: var(--tv-text);
  --trb-muted: var(--tv-muted); --trb-line: var(--tv-line); --trb-red: var(--tv-accent); --trb-gold: var(--tv-gold);
  --trb-good: var(--tv-success); --trb-serif: var(--tv-title-font); --trb-sans: var(--tv-font);
  --tjr-text: var(--tv-text); --tjr-muted: var(--tv-muted); --tjr-panel: var(--tv-panel);
  --tjr-line: var(--tv-line); --tjr-accent: var(--tv-accent); --tjr-soft: var(--tv-soft);
  --tf-bg: var(--tv-bg); --tf-panel: var(--tv-panel); --tf-ink: var(--tv-text); --tf-muted: var(--tv-muted);
  --tf-line: var(--tv-line); --tf-accent: var(--tv-accent); --tf-active: var(--tv-active); --tf-warm: var(--tv-gold);
  --tr-bg: var(--tv-bg); --tr-panel: var(--tv-panel); --tr-text: var(--tv-text); --tr-muted: var(--tv-muted);
  --tr-line: var(--tv-line); --tr-red: var(--tv-accent); --tr-button: var(--tv-action); --tr-tint: var(--tv-active);
  --bg-primary: var(--tv-bg); --bg-secondary: var(--tv-soft); --bg-card: var(--tv-panel);
  --text-primary: var(--tv-text); --text-secondary: var(--tv-muted); --text-muted: var(--tv-muted);
  --border-color: var(--tv-line); --accent-primary: var(--tv-action); --accent-color: var(--tv-action);
  color: var(--tv-text); font-family: var(--tv-font);
}
html body:has(:is(app-tournament-detail-page, app-tournament-management-page, app-admin-tournaments-tab)),
html body:has(#tournament-title, app-tournament-management-page .workspace-shell, app-admin-tournaments-tab .workspace-shell) { background: var(--tv-bg) !important; }
/* 六个详情标签共用外壳。赛事海报继续作为头部背景，正文始终位于同一列。 */
html body app-tournament-detail-page:has(#tournament-title) .tournament-detail-page {
  display: flex !important; flex-direction: column !important; padding-top: 68px !important;
  background: var(--tv-bg) !important; color: var(--tv-text) !important;
  min-width: 0; min-height: 100vh; font-family: var(--tv-font) !important;
}
html body app-tournament-detail-page:has(#tournament-title) .broadcast-hero {
  order: 0 !important; min-height: 0 !important; height: auto !important; margin: 0 !important;
  padding: 0 !important; background: var(--tv-bg) !important; color: var(--tv-text) !important;
  border: 0 !important; border-bottom: 1px solid var(--tv-line) !important;
}
html body app-tournament-detail-page:has(#tournament-title) .broadcast-hero::after { display: none !important; }
html body app-tournament-detail-page:has(#tournament-title) :is(.broadcast-hero__art, .broadcast-hero__shade) { display: block !important; }
html body app-tournament-detail-page:has(#tournament-title) .broadcast-hero__art { opacity: .14 !important; filter: saturate(.45) !important; object-position: center !important; }
html body app-tournament-detail-page:has(#tournament-title) .broadcast-hero__shade { background: linear-gradient(90deg, var(--tv-bg), transparent 70%) !important; }
html body app-tournament-detail-page:has(#tournament-title) :is(.broadcast-hero__inner, .tab-nav > .container, main.tab-content) {
  width: var(--tv-content) !important; max-width: 1280px !important; margin: 0 auto !important;
  padding-left: 0 !important; padding-right: 0 !important; box-sizing: border-box;
}
html body app-tournament-detail-page:has(#tournament-title) .broadcast-hero__inner {
  display: block !important; min-height: 0 !important; height: auto !important; padding-top: 16px !important; padding-bottom: 24px !important;
}
html body app-tournament-detail-page:has(#tournament-title) .broadcast-hero__utility {
  display: flex !important; align-items: center !important; justify-content: space-between !important;
  flex-wrap: wrap; gap: 12px !important; margin: 0 0 16px !important;
}
html body app-tournament-detail-page:has(#tournament-title) .hero-breadcrumb__current { display: none !important; }
html body app-tournament-detail-page:has(#tournament-title) .broadcast-hero__stage {
  display: flex !important; align-items: flex-end !important; justify-content: space-between !important;
  gap: 24px !important; padding: 0 !important; margin: 0 !important; min-height: 0 !important;
}
html body app-tournament-detail-page:has(#tournament-title) .hero-identity {
  display: block !important; max-width: none !important; min-width: 0; flex: 1 1 60%; padding: 0 !important;
}
html body app-tournament-detail-page:has(#tournament-title) .hero-badges { display: flex !important; gap: 8px !important; margin: 0 0 10px !important; }
html body app-tournament-detail-page:has(#tournament-title) .hero-badges > span {
  color: var(--tv-text) !important; background: var(--tv-soft) !important; border: 1px solid var(--tv-line) !important;
  border-radius: 4px !important; padding: 4px 9px !important; font-size: 12px !important;
  min-height: 0 !important; box-shadow: none !important;
}
html body app-tournament-detail-page:has(#tournament-title) #tournament-title {
  color: var(--tv-text) !important; font-family: var(--tv-title-font) !important; font-size: 32px !important;
  line-height: 1.45 !important; font-weight: 700 !important; letter-spacing: 0 !important;
  text-shadow: none !important; filter: none !important; margin: 0 !important; max-width: none !important;
}
html body app-tournament-detail-page:has(#tournament-title) #tournament-title span { display: inline !important; }
html body app-tournament-detail-page:has(#tournament-title) .registration-decision {
  display: block !important; flex: 0 1 340px; background: transparent !important; border: 0 !important;
  box-shadow: none !important; padding: 0 !important; color: var(--tv-text) !important;
}
html body app-tournament-detail-page:has(#tournament-title) .decision-dates { color: var(--tv-text) !important; border-color: var(--tv-line) !important; }
html body app-tournament-detail-page:has(#tournament-title) .decision-dates :is(strong,span) { color: var(--tv-text) !important; }
html body app-tournament-detail-page:has(#tournament-title) .decision-timezone { color: var(--tv-muted) !important; }
html body app-tournament-detail-page:has(#tournament-title) .tournament-timer-entry { margin: 16px 0 0 !important; }
html body app-tournament-detail-page:has(#tournament-title) :is(.decision-kicker, .decision-hint) { color: var(--tv-muted) !important; }
html body app-tournament-detail-page:has(#tournament-title) :is(.event-facts, .broadcast-facts, .broadcast-facts-strip) { display: none !important; }
html body app-tournament-detail-page:has(#tournament-title) .tab-nav {
  order: 1 !important; position: sticky !important; top: 68px !important; z-index: 20 !important;
  background: var(--tv-bg) !important; border-bottom: 1px solid var(--tv-line) !important;
  box-shadow: none !important; backdrop-filter: none !important;
}
html body app-tournament-detail-page:has(#tournament-title) .tab-nav .tab-item {
  min-height: 52px !important; padding: 0 18px !important; color: var(--tv-muted) !important;
  font: 600 14px/1.5 var(--tv-font) !important;
  /* 标签宽度由文字决定；窄屏由导航滚动承载，避免 flex 收缩成逐字竖排。 */
  flex: 0 0 auto !important; white-space: nowrap !important;
  word-break: normal !important; overflow-wrap: normal !important;
}
html body app-tournament-detail-page:has(#tournament-title) .tab-nav [role='tablist'] {
  flex-wrap: nowrap !important; overflow-x: auto !important; overflow-y: hidden !important;
  max-width: 100%; overscroll-behavior-x: contain;
}
html body app-tournament-detail-page:has(#tournament-title) .tab-nav .tab-item > span {
  white-space: nowrap !important;
}
html body app-tournament-detail-page:has(#tournament-title) .tab-nav .tab-item.active { color: var(--tv-accent) !important; }
html body app-tournament-detail-page:has(#tournament-title) .active-indicator { background: var(--tv-accent) !important; }
html body app-tournament-detail-page:has(#tournament-title) main.tab-content { order: 2 !important; padding-top: 28px !important; padding-bottom: 48px !important; color: var(--tv-text) !important; }
html body app-tournament-detail-page:has(#tournament-title) :is(.hero-breadcrumb__link, .hero-icon-button, .hero-secondary-button) {
  color: var(--tv-text) !important; background: var(--tv-panel) !important; border-color: var(--tv-line) !important;
  box-shadow: none !important; border-radius: var(--tv-radius) !important;
}
html body app-tournament-detail-page:has(#tournament-title) .tt-header-actions { flex-wrap: wrap; gap: 12px !important; }
/* 正文层级和卡片。只改变视觉，不改变各模块的信息结构。 */
html body app-tournament-detail-page:has(#tournament-title) main :is(h2,h3),
html body :is(app-tournament-management-page, app-admin-tournaments-tab):has(.workspace-shell) :is(.tf-task-title h2, .tp-heading h2, .tc-heading h2, .workspace-heading h2),
html body app-admin-tournaments-tab :is(#admin-tournaments-title,#tournament-detail-title,#tournament-editor-title) {
  color: var(--tv-text) !important; font-family: var(--tv-title-font) !important;
  font-size: 24px !important; line-height: 1.5 !important; font-weight: 700 !important;
}
html body app-tournament-detail-page:has(#tournament-title) :is(.info-card,.tjr-root,.ts-dossier,.trb-conclusion,.trb-summary),
html body app-tournament-detail-page:has(#tournament-title) main > app-tournament-participation-panel > div > section,
html body app-tournament-detail-page:has(#tournament-title) main > app-tournament-manage-tab > div {
  color: var(--tv-text) !important; background: var(--tv-panel) !important; border: 1px solid var(--tv-line) !important;
  border-radius: var(--tv-radius) !important; box-shadow: none !important;
}
html body app-tournament-detail-page:has(#tournament-title) :is(app-tournament-participation-panel, app-tournament-manage-tab) :is(h3,[class~='text-white']) { color: var(--tv-text) !important; }
html body app-tournament-detail-page:has(#tournament-title) :is(app-tournament-participation-panel, app-tournament-manage-tab) :is(p,[class~='text-slate-400']) { color: var(--tv-muted) !important; }
html body app-tournament-detail-page:has(#tournament-title) :is(app-tournament-participation-panel, app-tournament-manage-tab) [class~='text-cyan-300'] { color: var(--tv-accent) !important; }
/* 工作台全部阶段保持相同容器和侧栏，名册、赛前、收尾共用主题。 */
html body app-tournament-management-page .management-shell { background: var(--tv-bg) !important; color: var(--tv-text) !important; }
html body app-tournament-management-page main { width: var(--tv-content) !important; max-width: 1280px !important; margin: 0 auto !important; padding: 16px 0 48px !important; }
html body :is(app-tournament-management-page, app-admin-tournaments-tab):has(.workspace-shell) .workspace-shell {
  grid-template-columns: 210px minmax(0,1fr) !important; column-gap: 24px !important; color: var(--tv-text) !important;
}
/* 赛前是两个内容栏，不是侧栏加正文；保留原有工作布局，避免评委行被挤压。 */
html body :is(app-tournament-management-page, app-admin-tournaments-tab):has(.workspace-shell) .workspace-shell.tp-active {
  --tp-paper: var(--tv-panel) !important; --tp-success: var(--tv-success) !important;
  grid-template-columns: minmax(0,1.58fr) minmax(320px,1fr) !important;
}
html body :is(app-tournament-management-page, app-admin-tournaments-tab):has(.workspace-shell) .tf-context { padding: 16px 20px !important; background: var(--tv-panel) !important; border-color: var(--tv-line) !important; border-radius: var(--tv-radius) !important; }
html body :is(app-tournament-management-page, app-admin-tournaments-tab):has(.workspace-shell) .tf-context h1 { color: var(--tv-text) !important; font: 700 24px/1.5 var(--tv-title-font) !important; margin-bottom: 8px !important; }
html body :is(app-tournament-management-page, app-admin-tournaments-tab):has(.workspace-shell) .tf-workflow { display: flex !important; flex-direction: column !important; }
html body :is(app-tournament-management-page, app-admin-tournaments-tab):has(.workspace-shell) .tf-context { order: 0 !important; margin: 16px 0 0 !important; }
html body :is(app-tournament-management-page, app-admin-tournaments-tab):has(.workspace-shell) .tc-banner h1 { color: var(--tv-text) !important; font: 700 24px/1.5 var(--tv-title-font) !important; }
html body :is(app-tournament-management-page, app-admin-tournaments-tab):has(.workspace-shell) :is(.data-card,.rules-panel,.planning-card,.summary-item,.stat-card,.registration-panel,.tp-preparation-form,.tc-surface) {
  background: var(--tv-panel) !important; border-color: var(--tv-line) !important; border-radius: var(--tv-radius) !important; box-shadow: none !important;
}
html body app-admin-tournaments-tab .rounded-xl { border-radius: var(--tv-radius) !important; }
html body .admin-content-surface:has(app-admin-tournaments-tab) { background: var(--tv-bg) !important; }
html body app-tournament-management-workspace .workspace-heading p { color: var(--tv-accent) !important; }
html body :is(app-tournament-management-page, app-admin-tournaments-tab):has(.workspace-shell) .tf-phase-nav button { border-radius: var(--tv-radius) !important; }
/* CTA 与控件同源。危险、成功和警告状态继续使用原组件语义色。 */
html body :is(app-tournament-detail-page, app-tournament-management-page, app-admin-tournaments-tab) :is(button,summary,input:not([type='checkbox']):not([type='radio']):not([type='hidden']),select) { min-height: 44px !important; }
html body :is(app-tournament-detail-page, app-tournament-management-page, app-admin-tournaments-tab) :is(button,summary) { min-width: 44px !important; }
html body :is(app-tournament-management-page,app-admin-tournaments-tab):has(.workspace-shell) .tf-context-actions a { display: inline-flex; align-items: center; min-height: 44px !important; }
html body :is(app-tournament-management-page,app-admin-tournaments-tab) :is(.secondary-button,.tf-secondary,.admin-secondary-button) { color: var(--tv-text) !important; background: var(--tv-panel) !important; border-color: var(--tv-line) !important; border-radius: var(--tv-radius) !important; }
html body :is(app-tournament-detail-page, app-tournament-management-page, app-admin-tournaments-tab) :is(.hero-icon-button,.tjr-refresh,.trb-button,.trb-round-button,.tt-link,.ts-button,.secondary-button,.tf-secondary,.tf-picker-step,.tf-picker-toggle,.field,.admin-field) { border-radius: var(--tv-radius) !important; }
html body :is(app-tournament-detail-page, app-tournament-management-page, app-admin-tournaments-tab) :is(.primary-button,.tf-primary,.tc-primary,.tp-save,.admin-primary-button,.tournament-timer-entry),
html body app-tournament-manage-tab a[href],
html body app-tournament-participation-panel a[class*='bg-gradient'] {
  display: inline-flex !important; align-items: center; justify-content: center; min-height: 44px !important;
  padding: 10px 18px !important; background: var(--tv-action) !important; border: 1px solid var(--tv-action) !important;
  border-radius: var(--tv-radius) !important; color: #fff !important; font: 600 14px/1.5 var(--tv-font) !important; box-shadow: none !important;
}
html body :is(app-tournament-detail-page, app-tournament-management-page, app-admin-tournaments-tab) :is(.primary-button,.tf-primary,.tc-primary,.tp-save,.admin-primary-button):disabled {
  color: var(--tv-muted) !important; background: var(--tv-soft) !important; border-color: var(--tv-line) !important; opacity: 1 !important; cursor: not-allowed;
}
html body app-admin-tournaments-tab .admin-link-button { color: var(--tv-accent) !important; }
html body :is(app-tournament-management-workspace,app-tournament-match-planning,app-tournament-user-lookup) .link-button:not([class*=text-red]):not(.danger-button) { color: var(--tv-accent) !important; }
html body app-tournament-management-workspace .workspace-tab-active { color: var(--tv-accent) !important; background: var(--tv-active) !important; border-color: var(--tv-line) !important; }
html body :is(app-tournament-management-page,app-admin-tournaments-tab) label:has(> input:is([type='checkbox'],[type='radio'])) { display: inline-flex; align-items: center; gap: 8px; min-height: 44px !important; }
html body :is(app-tournament-detail-page,app-tournament-management-page,app-admin-tournaments-tab) :is(button,a,input,select,textarea,summary):focus-visible { outline: 2px solid var(--tv-accent) !important; outline-offset: 3px; }
@media (max-width: 900px) {
  html:has(:is(app-tournament-detail-page,app-tournament-management-page,app-admin-tournaments-tab)) { --tv-gutter: 24px; }
  html body app-tournament-detail-page:has(#tournament-title) .broadcast-hero__stage { flex-wrap: wrap; align-items: flex-start !important; }
  html body app-tournament-detail-page:has(#tournament-title) .registration-decision { flex-basis: 100%; }
  html body :is(app-tournament-management-page,app-admin-tournaments-tab):has(.workspace-shell) .workspace-shell { grid-template-columns: minmax(0,1fr) !important; }
  html body :is(app-tournament-management-page,app-admin-tournaments-tab):has(.workspace-shell) .workspace-shell.tp-active { grid-template-columns: minmax(0,1fr) !important; }
  html body app-tournament-management-page:has(.workspace-shell) .workspace-shell > :not(.tf-workflow) { grid-column: 1 !important; grid-row: auto !important; }
  html body :is(app-tournament-management-page,app-admin-tournaments-tab):has(.workspace-shell) .workspace-shell.tp-active > :is(app-tournament-match-planning,#tournament-judge-links,.jl-aux,.tp-footer) { grid-column: 1 !important; grid-row: auto !important; }
}
@media (max-width: 600px) {
  html:has(:is(app-tournament-detail-page,app-tournament-management-page,app-admin-tournaments-tab)) { --tv-gutter: 16px; }
  html body app-tournament-detail-page:has(#tournament-title) #tournament-title { font-size: 24px !important; }
  html body app-tournament-detail-page:has(#tournament-title) .broadcast-hero__inner { padding-bottom: 20px !important; }
  html body app-tournament-detail-page:has(#tournament-title) .hero-identity { flex-basis: 100%; }
  html body app-tournament-detail-page:has(#tournament-title) .tab-nav .tab-item { padding: 0 14px !important; }
  html body app-tournament-detail-page:has(#tournament-title) main.tab-content { padding-top: 20px !important; }
  html body app-tournament-detail-page:has(#tournament-title) main :is(h2,h3),
  html body :is(app-tournament-management-page,app-admin-tournaments-tab):has(.workspace-shell) :is(.tf-task-title h2,.tp-heading h2,.tc-heading h2,.workspace-heading h2,.tf-context h1,.tc-banner h1),
  html body app-admin-tournaments-tab :is(#admin-tournaments-title,#tournament-detail-title,#tournament-editor-title) { font-size: 20px !important; }
  html body app-tournament-detail-page:has(#tournament-title) .tt-header-actions { width: 100%; justify-content: flex-start; }
  html body :is(app-tournament-management-page,app-admin-tournaments-tab):has(.workspace-shell) .tf-context { padding: 16px !important; }
  html body app-tournament-management-page:has(.workspace-shell) main { padding-left: 0 !important; padding-right: 0 !important; }
}
