/* 赛事工作台视觉层：复用后台方向 37，仅负责布局、层级和响应式表现。 */
:root {
  --comp-ink: #183761;
  --comp-muted: #6d7d93;
  --comp-line: #dfe7f0;
  --comp-blue: #2563eb;
  --comp-blue-soft: #edf4ff;
  --comp-green: #0f9f76;
  --comp-amber: #b7791f;
  --comp-red: #c2414b;
}

body.is-competition-route .content { max-width: 1540px; }
body.is-competition-route {
  --comp-space-1: 4px;
  --comp-space-2: 8px;
  --comp-space-3: 12px;
  --comp-space-4: 16px;
  --comp-space-5: 20px;
  --comp-space-6: 24px;
  --comp-focus: 0 0 0 3px rgba(37,99,235,.18);
  color: var(--comp-ink);
}
body.is-competition-route #view { max-width: 1480px; margin: 0 auto; }
body.is-competition-route #view > .toolbar:first-child,
body.is-competition-route #view > .lib-toolbar:first-child,
body.is-competition-route #view > .fb-topbar:first-child,
body.is-competition-route #view > .vb-topbar:first-child {
  margin-top: 4px;
}
body.is-competition-route .toolbar,
body.is-competition-route .lib-toolbar,
body.is-competition-route .fb-topbar,
body.is-competition-route .vb-topbar {
  min-height: 64px;
  padding: 10px 14px;
  border: 1px solid rgba(223,231,240,.9);
  border-radius: 12px;
  gap: 10px;
}
body.is-competition-route .toolbar + .toolbar { margin-top: 12px; }
body.is-competition-route .toolbar .card-title { font-size: 15px; }
body.is-competition-route .toolbar .card-sub { margin-top: 3px; }
body.is-competition-route .toolbar .input,
body.is-competition-route .toolbar .select,
body.is-competition-route .lib-toolbar .input,
body.is-competition-route .lib-toolbar .select { border-color: #d7e2ef; background: #fbfdff; }
body.is-competition-route .input:focus,
body.is-competition-route .select:focus,
body.is-competition-route .textarea:focus { border-color: #6d9df7; box-shadow: var(--comp-focus); outline: none; }
body.is-competition-route .btn { border-radius: 8px; font-weight: 700; letter-spacing: .01em; }
body.is-competition-route .btn-primary { box-shadow: 0 6px 14px rgba(37,99,235,.16); }
body.is-competition-route .btn-primary:hover { transform: translateY(-1px); box-shadow: 0 9px 18px rgba(37,99,235,.22); }
body.is-competition-route .btn-ghost:hover { background: #edf4ff; color: var(--comp-blue); border-color: #bcd3fb; }
body.is-competition-route .card { border-radius: 12px; box-shadow: 0 6px 20px rgba(44,74,111,.045); }
body.is-competition-route .card > .card-title:first-child { line-height: 1.4; }
body.is-competition-route .section-bar { display: flex; align-items: center; gap: 12px; margin: 28px 0 12px; }
body.is-competition-route .section-bar h3 { margin: 0; font-size: 16px; }
body.is-competition-route .section-bar .line { height: 1px; flex: 1; background: #d8e4f2; }
body.is-competition-route .table-wrap { border-radius: 12px; background: #fff; overflow: auto; }
body.is-competition-route .tbl { min-width: 820px; }
body.is-competition-route .tbl thead th { height: 44px; padding: 10px 14px; background: #f7faff; border-bottom: 1px solid #e5edf6; }
body.is-competition-route .tbl tbody td { min-height: 58px; padding: 12px 14px; border-bottom-color: #edf2f7; }
body.is-competition-route .tbl tbody tr:last-child td { border-bottom: 0; }
body.is-competition-route .tbl tbody tr:focus-within { background: #f5f9ff; }
body.is-competition-route .comp-row-actions { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; min-width: 230px; }
body.is-competition-route .comp-row-actions .btn { white-space: nowrap; }
body.is-competition-route .pager { margin: 12px 0 0; }
body.is-competition-route .badge-status,
body.is-competition-route .badge { border: 1px solid rgba(37,99,235,.14); border-radius: 999px; font-weight: 700; }
body.is-competition-route .stage-pills { display: flex; flex-wrap: wrap; gap: 5px; max-width: 360px; }
body.is-competition-route .stage-pills .sp { padding: 4px 8px; border: 1px solid #dfe7f0; border-radius: 999px; background: #f8fafc; color: #71839b; font-size: 11px; line-height: 1.2; }
body.is-competition-route .stage-pills .sp.cur { border-color: #9fc2fb; background: #edf4ff; color: #2563eb; }
body.is-competition-route .steps { padding: 18px 12px 8px; }
body.is-competition-route .step-node { box-shadow: 0 0 0 4px #edf4ff; }
body.is-competition-route .step-node.current { box-shadow: 0 0 0 4px #d8e7ff, 0 5px 12px rgba(37,99,235,.18); }
body.is-competition-route .modal,
body.is-competition-route .drawer,
body.is-competition-route .ui-modal { border: 1px solid #dfe7f0; border-radius: 16px; box-shadow: 0 22px 60px rgba(19,48,85,.2); }
body.is-competition-route .modal-head,
body.is-competition-route .drawer-head { min-height: 60px; padding: 16px 20px; border-bottom: 1px solid #e8eef5; }
body.is-competition-route .modal-foot,
body.is-competition-route .drawer-foot { min-height: 68px; padding: 12px 20px; border-top: 1px solid #e8eef5; background: #fbfdff; }
body.is-competition-route #modalMask:has(.competition-detail-drawer) { align-items: stretch; justify-content: flex-end; padding: 0; background: rgba(8,24,48,.34); }
body.is-competition-route .modal.competition-detail-drawer { width: min(560px, 94vw); max-width: none; max-height: none; height: 100vh; margin: 0; border-radius: 16px 0 0 16px; animation: comp-drawer-in .24s ease both; }
body.is-competition-route .modal.competition-score-drawer { width: min(620px, 94vw); max-width: none; max-height: none; height: 100vh; margin: 0; border-radius: 16px 0 0 16px; animation: comp-drawer-in .24s ease both; }
body.is-competition-route .competition-detail-drawer .modal-head { margin-bottom: 18px; }
body.is-competition-route .empty { color: var(--comp-muted); }
body.is-competition-route .empty p { margin: 0; line-height: 1.65; }
body.is-competition-route .empty .em-ico { filter: grayscale(.2); opacity: .82; }

/* 赛事页面统一的“工作区”节奏：减少连续大块卡片造成的拥挤。 */
body[data-route="registrations"] #view,
body[data-route="review"] #view,
body[data-route="results"] #view,
body[data-route="experts"] #view,
body[data-route="recommendations"] #view,
body[data-route="recommendUnits"] #view { display: flow-root; }
body[data-route="registrations"] #rList,
body[data-route="review"] #scoringList,
body[data-route="results"] #rankTbl,
body[data-route="recommendations"] #recommendationList { margin-top: 14px; }
body[data-route="registrations"] #rList .table-wrap,
body[data-route="review"] #scoringList .card,
body[data-route="results"] #rankTbl .table-wrap,
body[data-route="experts"] #exList .table-wrap { background: #fff; }
body[data-route="review"] #scoringList .card { border-radius: 12px; }
body[data-route="review"] .score-row { border-bottom: 1px solid #edf2f7; padding: 10px 0; }
body[data-route="review"] .score-row:last-child { border-bottom: 0; }
body[data-route="results"] .card.mb-4 { padding: 18px 20px; }
body[data-route="competitionTemplates"] .fb-workspace,
body[data-route="competitionTemplates"] .ct-workspace,
body[data-route="scoringTemplates"] .lib-grid { gap: 16px; }
body[data-route="competitionTemplates"] .fb-panel,
body[data-route="competitionTemplates"] .ct-panel,
body[data-route="scoringTemplates"] .lib-card { border: 1px solid #dfe7f0; border-radius: 12px; box-shadow: 0 6px 20px rgba(44,74,111,.045); }
body[data-route="scoringTemplates"] .lib-grid { grid-template-columns: repeat(auto-fill,minmax(290px,1fr)); }
body[data-route="recommendUnits"] #ruRoot > .toolbar:first-child { background: #fff; }
body[data-route="recommendUnits"] #ruPane > .toolbar,
body[data-route="experts"] .toolbar { top: 10px; }
body.is-competition-route #view > .fade-in { animation: comp-enter .22s ease both; }
body.is-competition-route .card { border: 1px solid rgba(223,231,240,.92); }
body.is-competition-route .card-title,
body.is-competition-route .section-bar h3 { color: var(--comp-ink); letter-spacing: -.01em; }
body.is-competition-route .card-sub,
body.is-competition-route .cell-sub,
body.is-competition-route .muted { color: var(--comp-muted); }
body.is-competition-route .toolbar { align-items: center; background: rgba(255,255,255,.86); box-shadow: 0 4px 16px rgba(44,74,111,.04); }
body.is-competition-route .toolbar .search { min-width: 240px; flex: 0 1 320px; }
body.is-competition-route .toolbar .input,
body.is-competition-route .toolbar .select { min-height: 44px; }
body.is-competition-route .btn { min-height: 44px; }
body.is-competition-route .btn-sm { min-height: 40px; }
body.is-competition-route .table-wrap { border: 1px solid var(--comp-line); box-shadow: 0 5px 18px rgba(44,74,111,.04); }
body.is-competition-route table.tbl { border-collapse: separate; border-spacing: 0; }
body.is-competition-route .tbl thead th { color: #74849a; font-size: 12px; font-weight: 700; letter-spacing: .03em; text-transform: none; }
body.is-competition-route .tbl tbody tr { transition: background .16s ease; }
body.is-competition-route .tbl tbody tr:hover { background: #f8fbff; }
body.is-competition-route .tbl tbody td { vertical-align: middle; }
body.is-competition-route .tbl td:first-child { color: var(--comp-ink); }
body.is-competition-route .empty { min-height: 190px; display: grid; place-content: center; gap: 8px; border: 1px dashed var(--comp-line); border-radius: 12px; background: #fbfdff; }
body.is-competition-route .empty .em-ico { font-size: 28px; }
body.is-competition-route .badge { min-height: 28px; padding: 5px 10px; line-height: 1.2; }
body.is-competition-route .section-bar { margin-top: 30px; }

.competition-hero { display: flex; align-items: flex-end; justify-content: space-between; gap: 28px; padding: 26px 28px; margin-bottom: 16px; border: 1px solid #dce8f5; border-radius: 18px; background: #f4f8fd; box-shadow: 0 9px 28px rgba(40,80,130,.07); overflow: hidden; position: relative; }
.competition-hero::after { content: ''; position: absolute; width: 240px; height: 240px; right: -72px; top: -122px; border-radius: 50%; border: 28px solid rgba(37,99,235,.08); pointer-events: none; }
.competition-hero-copy, .competition-hero-actions { position: relative; z-index: 1; }
.competition-hero-copy { max-width: 720px; }
.competition-hero h2 { margin: 8px 0 8px; color: var(--comp-ink); font-size: clamp(22px, 3vw, 30px); line-height: 1.22; letter-spacing: -.03em; }
.competition-hero p { margin: 0; color: var(--comp-muted); font-size: 14px; line-height: 1.7; }
.eyebrow { display: flex; align-items: center; gap: 9px; color: var(--comp-blue); font-size: 12px; font-weight: 800; letter-spacing: .08em; }
.eyebrow-dot { width: 6px; height: 6px; border-radius: 50%; background: #48b59a; box-shadow: 0 0 0 4px rgba(72,181,154,.13); }
.competition-hero-actions { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; justify-content: flex-end; }
.hero-status { display: inline-flex; align-items: center; gap: 7px; color: #57708c; font-size: 12px; white-space: nowrap; }
.status-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--comp-green); box-shadow: 0 0 0 4px rgba(15,159,118,.12); }
.competition-kpis { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 12px; margin-bottom: 18px; }
.competition-kpi { min-height: 112px; padding: 18px 20px; border: 1px solid var(--comp-line); border-radius: 14px; background: #fff; box-shadow: 0 5px 18px rgba(44,74,111,.045); }
.competition-kpi.is-attention { border-color: #f0d49d; background: #fffaf0; }
.kpi-label, .kpi-note { display: block; color: var(--comp-muted); font-size: 12px; }
.competition-kpi strong { display: block; margin: 8px 0 4px; color: var(--comp-ink); font-size: 28px; line-height: 1; letter-spacing: -.04em; }
.kpi-note { font-size: 11px; }
.competition-template-callout { box-shadow: none !important; }

/* 各页面的层级补强 */
body[data-route="registrations"] #rList,
body[data-route="review"] #scoringList,
body[data-route="results"] #rankTbl,
body[data-route="recommendUnits"] #ruPane,
body[data-route="experts"] #exList,
body[data-route="recommendations"] #recommendationList { min-width: 0; }
body[data-route="registrations"] .card.mb-4,
body[data-route="review"] .card.mb-4 { background: #fff; }
body[data-route="results"] .grid.grid-2 .card { min-height: 220px; }
body[data-route="review"] .score-row { min-height: 52px; align-items: center; }
body[data-route="review"] #scoringList .card,
body[data-route="results"] #rankTbl .table-wrap { box-shadow: 0 8px 24px rgba(44,74,111,.06); }
body[data-route="competitionTemplates"] .fb-topbar,
body[data-route="competitionTemplates"] .vb-topbar,
body[data-route="scoringTemplates"] .lib-toolbar { box-shadow: 0 5px 18px rgba(44,74,111,.05); }
body[data-route="competitionTemplates"] .ct-list,
body[data-route="scoringTemplates"] .lib-grid { align-items: stretch; }
body[data-route="recommendUnits"] #ruRoot > .toolbar:first-child { background: #f7faff; border-color: #dbe8f7; }
body[data-route="recommendUnits"] #ruPane > .toolbar,
body[data-route="experts"] .toolbar { position: sticky; top: 8px; z-index: 4; }

@keyframes comp-enter { from { opacity: .45; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } }
@keyframes comp-drawer-in { from { opacity: .3; transform: translateX(28px); } to { opacity: 1; transform: translateX(0); } }
@media (prefers-reduced-motion: reduce) { body.is-competition-route #view > .fade-in { animation: none; } * { scroll-behavior: auto !important; } }

@media (max-width: 960px) {
  .competition-hero { align-items: flex-start; flex-direction: column; padding: 22px; }
  .competition-hero-actions { width: 100%; justify-content: space-between; }
  .competition-kpis { grid-template-columns: repeat(2, minmax(0,1fr)); }
  body.is-competition-route .toolbar .search { flex: 1 1 100%; min-width: 0; }
  body.is-competition-route .toolbar .grow { display: none; }
  body.is-competition-route .toolbar > .btn-primary:last-child { margin-left: auto; }
}
@media (max-width: 620px) {
  body.is-competition-route .app { grid-template-columns: 1fr; }
  body.is-competition-route .topbar { flex-wrap: wrap; gap: 8px; padding: 10px 12px; }
  body.is-competition-route .topbar-spacer { display: none; }
  body.is-competition-route .topbar h1 { min-width: 0; flex: 1 1 auto; }
  .competition-hero { margin: -2px 0 14px; border-radius: 14px; padding: 18px; }
  .competition-hero h2 { font-size: 22px; }
  .competition-hero-actions { align-items: stretch; flex-direction: column; }
  .competition-hero-actions .btn { width: 100%; }
  .competition-kpis { gap: 8px; }
  .competition-kpi { min-height: 98px; padding: 14px; }
  .competition-kpi strong { font-size: 24px; }
  body.is-competition-route .toolbar { padding: 10px; gap: 8px; }
  body.is-competition-route .toolbar > .select { flex: 1 1 45%; min-width: 0; }
  body.is-competition-route .toolbar > .btn { flex: 1 1 auto; }
  body.is-competition-route .table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  body.is-competition-route table.tbl { min-width: 760px; }
  body.is-competition-route .comp-row-actions { min-width: 220px; }
  body.is-competition-route #view { width: 100%; }
  body.is-competition-route .toolbar,
  body.is-competition-route .lib-toolbar,
  body.is-competition-route .fb-topbar,
  body.is-competition-route .vb-topbar { min-height: 0; padding: 10px; border-radius: 10px; }
  body.is-competition-route .toolbar .search { flex-basis: 100%; order: -1; }
  body.is-competition-route .toolbar .search .input { width: 100%; }
  body.is-competition-route .section-bar { margin-top: 22px; }
  body.is-competition-route .section-bar h3 { font-size: 15px; }
  body.is-competition-route .card { border-radius: 10px; }
  body.is-competition-route .modal,
  body.is-competition-route .drawer,
  body.is-competition-route .ui-modal { width: calc(100vw - 24px); max-width: none; border-radius: 14px; }
  body.is-competition-route .modal-head,
  body.is-competition-route .drawer-head { padding: 14px 16px; }
  body.is-competition-route .modal-foot,
  body.is-competition-route .drawer-foot { padding: 10px 16px; }
  body.is-competition-route .modal.competition-detail-drawer { width: 100vw; height: 100vh; border-radius: 14px 14px 0 0; align-self: flex-end; animation-name: comp-drawer-up; }
  body.is-competition-route .modal.competition-score-drawer { width: 100vw; height: 100vh; border-radius: 14px 14px 0 0; align-self: flex-end; animation-name: comp-drawer-up; }
  body[data-route="scoringTemplates"] .lib-grid { grid-template-columns: 1fr; }
  body[data-route="competitionTemplates"] .fb-workspace,
  body[data-route="competitionTemplates"] .ct-workspace { grid-template-columns: 1fr; }
  body[data-route="results"] .grid.grid-2 { grid-template-columns: 1fr; }
  body[data-route="results"] .grid.grid-2 .card { min-height: auto; }
  body[data-route="review"] .score-row { grid-template-columns: minmax(0,1fr) 58px 72px 44px; gap: 6px; }
  body[data-route="recommendUnits"] #ruPane > .toolbar,
  body[data-route="experts"] .toolbar { position: static; }
}

@keyframes comp-drawer-up { from { opacity: .3; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } }
