.content-page{padding:0 30px 30px}.content-copy{font-size:14px;line-height:2;padding:20px 14px}.content-copy p{margin-bottom:12px}.content-copy h2,.content-copy h3{color:var(--blue);font-size:18px;font-weight:400;margin:15px 0 10px}.content-copy ul{padding-left:22px}.sample-banner,.status-banner{padding:12px 15px;border:1px solid #c7e2f1;background:#f0f8fd;color:#506a7a;margin:15px 0;font-size:13px;line-height:1.8}.sample-banner strong{color:var(--blue);font-weight:400}.emergency-banner{background:#fff3ec;border-color:#efc7b4;color:#ad5128}.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:15px 0}.toolbar input,.toolbar select{min-width:0;border:1px solid #bbb;padding:7px 10px;background:white;font-size:14px;max-width:100%}.toolbar input{flex:1}.feedback{padding:12px;margin:12px 0;font-size:14px;background:#eef7fc;border:1px solid #c7e2f1;overflow-wrap:anywhere}.feedback:empty{display:none}.feedback.error{color:#a83229;border-color:#e3b5af;background:#fff6f3}.page-message{padding:25px 15px;font-size:14px;line-height:1.9}.account-summary{font-size:14px;padding:12px 15px;border-bottom:1px dashed #aaa;display:flex;gap:15px;flex-wrap:wrap}.data-table{width:100%;border-collapse:collapse;font-size:13px;background:white}.data-table td,.data-table th{border:1px solid #c7e2f1;padding:10px;text-align:left;vertical-align:top;overflow-wrap:anywhere}.data-table th{color:var(--blue);background:#f0f8fd;font-weight:400}.table-scroll{overflow-x:auto;max-width:100%;margin:15px 0}.table-scroll .data-table{min-width:580px}.status-tag{font-size:12px;display:inline-block;padding:2px 7px;color:var(--blue);background:#eef7fc;border:1px solid #c7e2f1}.status-tag.approved{color:#347344;background:#f0f8ee}.status-tag.rejected,.status-tag.failed{color:#b44837;background:#fff2ef}.status-tag.admin{color:#7a3a8a;background:#f5edf8;border-color:#decbe6}.status-tag.reviewer{color:#1a6b50;background:#ecf6f1;border-color:#bcdfd0}.status-tag.technical{color:#7a4a0a;background:#fdf3e0;border-color:#efd49b}.status-tag.draft{color:#5b6b7a;background:#eef2f6;border-color:#cfd8e0}.status-tag.withdrawn{color:#7a4a0a;background:#fdf3e0;border-color:#efd49b}.news-full-list .news-row{height:auto;min-height:48px;padding:8px 6px}.news-full-list .news-row-heading strong{white-space:normal}.news-article{font-size:14px;line-height:2;color:#666;margin:20px 0;overflow-wrap:anywhere}.news-article p{margin:12px 0}.news-article img,.news-article video{max-width:100%;height:auto}.article-meta{font-size:12px;color:#888;text-align:center;margin:0 0 20px}.attachment-list{list-style:none;padding:0;margin:15px 0}.attachment-list li{padding:10px 0;border-bottom:1px dashed #aaa}.pagination{display:flex;justify-content:center;gap:15px;flex-wrap:wrap;margin:25px 0;font-size:13px}.faq-search{width:100%;max-width:100%}.faq-results{margin:20px 0}.faq-results details{border-bottom:1px dashed #aaa}.faq-results summary{cursor:pointer;color:var(--blue);font-size:15px;padding:12px 0}.faq-results p{font-size:14px;line-height:1.9;padding:0 15px 15px}.auth-tabs{display:flex;justify-content:center;gap:20px;font-size:14px;margin:20px 0}.auth-tabs a{color:var(--blue)}.auth-form{max-width:800px}.otp-tools{grid-column:2;display:flex;gap:10px;flex-wrap:wrap}.otp-tools button{font-size:12px}.sample-inbox{white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px;line-height:1.8;padding:12px;background:#f7fbfe;border:1px dashed #c7e2f1;max-height:180px;overflow:auto;margin:12px 0}.download-list>.download-entry{display:flex;gap:12px;align-items:center;min-height:49px;border-bottom:1px dashed #aaa;padding:0 9px;text-align:left;font-size:16px}.download-entry>span{display:flex;gap:8px;align-items:center}.download-entry small{margin-left:auto;font-size:12px;color:#999}.download-entry.disabled{color:#999;cursor:not-allowed}.download-entry.disabled small{color:#bbb}.download-entry.disabled svg{color:#bbb}.readonly-value{padding:6px 10px;border:1px solid #ddd;font-size:14px;min-height:36px;max-width:620px;overflow-wrap:anywhere}.review-card{border:1px solid #c7e2f1;margin:18px 0;padding:15px}.review-card h3{font-size:16px;font-weight:400;color:var(--blue);margin-bottom:10px}.review-card .review-list{margin-bottom:10px}.review-reason{width:100%;border:1px solid #bbb;min-height:60px;font:14px/1.7 inherit;padding:8px}.review-card .toolbar{margin-bottom:0}.empty-state{font-size:14px;color:#999;padding:20px 10px}.admin-navigation{padding:5px 0}.form-panel textarea{font:14px/1.7 "Microsoft YaHei",sans-serif;width:100%;min-height:180px;border:1px solid #bbb;padding:10px}.field>textarea{max-width:620px}.download-list .download-entry:hover{color:var(--blue)}.download-list .download-entry.disabled:hover{color:#999}.mobile-wrap{overflow-wrap:anywhere}.news-cover{max-height:400px;object-fit:contain}.content-page .page-title{margin:0 -15px}.mfa-box{max-width:650px;margin:auto}.password-hint{color:#888}.account-linkbar{padding:10px 15px;display:flex;flex-wrap:wrap;gap:15px;font-size:13px}.save-status{font-size:12px;margin:12px 0;color:#888}.button-danger{color:#b44837;border-color:#c99d95;background:#fff6f3}
/* 通用显隐工具类：脚本用类名控制显隐，不写内联 style */
.is-hidden{display:none !important}
/* 登录页（/admin/login）：较宽表单 + 居中标题 + 居中按钮；字段 label 与输入框同一行，整行作为块居中 */
.admin-login-form{max-width:1287px;margin-bottom:60px}
/* 无图的页头：去掉原本为横幅图片预留的固定高度，让大标题更紧凑 */
.page-title-plain{height:auto;min-height:0;padding:38px 16px 18px;margin:0;text-align:center}
.page-title-plain>span{display:none}
.page-title-plain h1{font-size:24px;line-height:1.6;color:#333;font-weight:500;margin:0;letter-spacing:1px}
/* 公开登录表单（/login、/signup、/mfa）：窄表单 + 居中标题 + 居中按钮 + 字段整行居中；按钮宽度翻倍 */
.user-login-form{max-width:760px;margin-bottom:60px}
.user-login-form .form-heading-center{justify-content:center;text-align:center}
.user-login-form .form-heading-center h2{font-size:18px;font-weight:400;color:var(--blue);margin:0}
.user-login-form .form-body-tight{padding:28px 36px 12px}
.user-login-form .form-actions-center{justify-content:center;padding:18px 36px 36px}
.user-login-form .field{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:18px;align-items:center;margin:0 auto 16px;max-width:520px;width:100%;row-gap:6px}
.user-login-form .field>label{text-align:left;font-size:14px;color:#333;min-width:5em;white-space:nowrap}
.user-login-form .field>input,.user-login-form .field>.password-wrap{width:100%;min-width:0;max-width:none}
.user-login-form .field-hint{grid-column:2}
.user-login-form .form-actions-center .button-primary{min-width:240px;padding:10px 36px;font-size:15px}
@media(max-width:560px){.user-login-form .form-body-tight{padding:22px 20px 8px}.user-login-form .form-actions-center{padding:12px 20px 24px}.user-login-form .field{max-width:none}.user-login-form .form-actions-center .button-primary{min-width:0;width:100%;padding:10px 24px}}
.admin-login-form .form-heading-center{justify-content:center;text-align:center}
.admin-login-form .form-heading-center h2{font-size:18px;font-weight:400;color:var(--blue);margin:0}
.admin-login-form .form-body-tight{padding:28px 36px 12px}
.admin-login-form .form-actions-center{justify-content:center;padding:18px 36px 36px}
/* 字段行：label 在左、输入框在右；行作为整体在表单中水平居中 */
.admin-login-form .field{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:18px;align-items:center;margin:0 auto 16px;max-width:680px;width:100%;row-gap:6px}
.admin-login-form .field>label{text-align:left;font-size:14px;color:#333;min-width:5em;white-space:nowrap}
.admin-login-form .field>input,.admin-login-form .field>.password-wrap{width:100%;min-width:0;max-width:none}
.admin-login-form .field-hint{grid-column:2}
/* 登录按钮：宽度翻倍，更醒目 */
.admin-login-form .form-actions-center .button-primary{min-width:240px;padding:10px 36px;font-size:15px}
@media(max-width:560px){.admin-login-form .form-body-tight{padding:22px 20px 8px}.admin-login-form .form-actions-center{padding:12px 20px 24px}.admin-login-form .field{max-width:none}.admin-login-form .form-actions-center .button-primary{min-width:0;width:100%;padding:10px 24px}}
@media(max-width:767px){.content-page{padding:0 15px 22px}.content-copy{padding:15px 4px;font-size:13px}.toolbar{gap:7px}.toolbar .button{font-size:12px;padding:6px 9px}.otp-tools{grid-column:1}.news-full-list .news-row-heading{align-items:flex-start}.news-full-list .news-row-heading strong{font-size:13px}.news-full-list .news-row time{font-size:10px}.sample-banner,.status-banner{font-size:11px}.review-card{padding:10px}.review-card h3{font-size:14px}.review-card .review-list>div{grid-template-columns:90px 1fr}.news-article{font-size:13px}.download-list>.download-entry{font-size:13px;padding:10px 4px}.auth-tabs{font-size:12px;gap:15px}.data-table{font-size:12px}.account-summary{font-size:12px;gap:8px}.content-copy h2,.content-copy h3{font-size:16px}}
.primary-button{display:inline-flex;align-items:center;justify-content:center;font-size:14px;line-height:20px;min-height:36px;padding:7px 16px;border:1px solid var(--blue);background:var(--blue);color:white}.primary-button:hover{background:#0784c6}.field>span{text-align:right;font-size:15px;color:#666}.field>small{grid-column:2;font-size:12px;line-height:1.8}.field>textarea{border:1px solid #bbb;border-radius:6px;font:14px/1.7 "Microsoft YaHei",sans-serif;padding:10px;min-height:100px;max-width:620px;width:100%}.news-body{font-size:14px;line-height:2;overflow-wrap:anywhere}.news-body p{margin:12px 0}.news-body img,.news-body video{max-width:100%;height:auto}.contact-list{display:grid;grid-template-columns:80px 1fr;gap:8px 18px;margin:0 0 18px;font-size:14px;line-height:1.9}.contact-list dt{color:var(--blue);font-weight:400}.contact-list dd{margin:0;overflow-wrap:anywhere}.content-copy fieldset{border:1px solid #c7e2f1;padding:12px 18px;margin:14px 0}.content-copy fieldset legend{color:var(--blue);font-size:14px;padding:0 8px}
@media(max-width:767px){.field>span{text-align:left;font-size:13px}.field>small{grid-column:1}.primary-button{font-size:12px;padding:6px 9px}.news-body{font-size:13px}}
.download-list.document-grid{display:block;margin:10px 3px 0}
.download-list.document-grid small{margin-left:0}
.download-list>.document-entry{display:block;padding:8px 0;border-bottom:1px dashed #e0e0e0;font-size:13px}
.document-entry .document-lines{display:grid;grid-template-columns:280px 240px minmax(0,1fr) 88px 104px;column-gap:14px;align-items:center}
.document-entry .document-name{grid-row:1/span 99;display:flex;gap:8px;align-items:center;align-self:center;min-width:0;font-weight:600;color:#555}
.document-entry .document-name svg{flex:0 0 auto;color:var(--blue)}
.document-entry .document-name>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.document-entry .document-note{font-size:12px;color:#777;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:9px 0}
.document-entry .document-meta{font-size:12px;color:#999;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:none;padding:9px 0;text-align:left}
.document-entry a.document-meta:hover{color:var(--blue)}
.document-entry .document-dl{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--blue);text-decoration:none;white-space:nowrap;padding:9px 0}
.document-entry .document-dl:hover{text-decoration:underline}
.document-entry .document-dl svg{width:16px;height:16px;flex:0 0 auto}
.document-entry .document-history summary{font-size:12px;color:#888;cursor:pointer;white-space:nowrap;list-style:none;display:inline-flex;align-items:center;gap:4px;padding:9px 0}
.document-entry .document-history summary::-webkit-details-marker{display:none}
.document-entry .document-history summary::marker{content:""}
.document-entry .document-history summary:hover{color:var(--blue)}
.document-history .when-open{display:none}
.document-history[open] .when-open{display:inline}
.document-history[open] .when-closed{display:none}
.document-entry:not(:has(.document-history[open])) .history-line{display:none}
.document-entry .history-line{border-top:1px dotted #e5e5e5}
.document-entry .history-line.document-more{border-top:1px dotted #e5e5e5}
.document-entry .history-line.document-meta,.document-entry .history-line.document-note{color:#aaa}
.document-entry .history-line.document-dl{color:#8ab6d6}
.toolbar-push-right{margin-left:auto}
.filter-form{margin:0;flex:0 0 auto}
.filter-form label{font-size:14px;color:#506a7a}
.news-list-note{padding:14px 0 0}
/* 后台布局：左侧导航与右侧（大字标题+蓝条+内容）等高 */
.admin-layout{align-items:stretch;margin-bottom:18px;grid-template-rows:auto minmax(0,1fr)}
.admin-layout .page-title{grid-column:2;grid-row:1;margin:0;height:auto;padding:6px 0 10px}
.admin-side{position:static;grid-column:1;grid-row:1/span 2}
.admin-main{grid-column:2;grid-row:2}
.admin-navigation{height:100%}
.admin-navigation .admin-nav-note{margin-top:auto}
/* 队伍列表勾选框：与站点蓝色方形控件风格一致 */
.team-item .select-team{-webkit-appearance:none;appearance:none;width:15px;height:15px;flex:0 0 auto;border:1px solid var(--blue);background:#fff;position:relative;cursor:pointer;vertical-align:-2px;margin:0}
.team-item .select-team:hover{border-color:#0784c6;background:#f0f8fd}
.team-item .select-team:checked{background:var(--blue);border-color:var(--blue)}
.team-item .select-team:checked::after{content:"";position:absolute;left:4px;top:1px;width:4px;height:8px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}
.team-item .select-team:focus-visible{outline:2px solid #7cc3e6;outline-offset:1px}
.team-item .team-name>label{display:inline-flex;align-items:center;cursor:pointer;margin-right:6px}
/* 列表行末箭头：纯 CSS 三角形，稳定水平向右，展开时旋转向下 */
.team-item>summary .chevron{width:0;height:0;font-size:0;line-height:0;border-left:7px solid #9cc3de;border-top:5px solid transparent;border-bottom:5px solid transparent}
.team-item[open]>summary .chevron{transform:rotate(90deg)}
@media(max-width:900px){.admin-layout .page-title,.admin-side,.admin-main{grid-column:1;grid-row:auto}.admin-navigation{height:auto}}
/* 页脚贴底：内容不足一屏时页脚停靠在视口底部 */
.site-shell{display:flex;flex-direction:column}
.site-shell>main{flex:1}
body[data-page^="admin"] .site-shell>main{display:flex;flex-direction:column}
body[data-page^="admin"] main>.registration-content{flex:1;display:flex;flex-direction:column}
body[data-page^="admin"] .registration-content>.admin-layout{flex:1}
/* 页脚配色：黑色改为与站点主题一致的深蓝 */
.footer-bottom{background:var(--background)}
/* 按钮统一圆角 */
.button,.primary-button{border-radius:6px}
/* 后台左侧导航按钮美化 */
.admin-navigation .button{border-radius:6px;gap:8px;font-weight:500}
.admin-navigation .button svg{width:16px;height:16px;flex:0 0 auto;color:var(--blue)}
.admin-navigation .button:hover{border-color:var(--blue);color:var(--blue);background:#eef7fc}
/* 平板宽度（768–1199px）：文档列表的固定列收窄，避免栅格最小宽度（280+240+88+104+4×14=768px）超出容器造成横向溢出 */
@media(min-width:768px) and (max-width:1199px){.document-entry .document-lines{grid-template-columns:200px 150px minmax(0,1fr) 78px 88px;column-gap:10px}}
@media(max-width:767px){.document-entry .document-lines{grid-template-columns:118px minmax(0,1fr) 30px 78px;column-gap:8px}.document-entry .document-note{display:none}.document-entry .document-dl{font-size:0;gap:0;padding:9px 0}.document-entry .document-dl svg{width:18px;height:18px}.document-entry .document-history summary{font-size:11px}.document-entry .document-meta{font-size:11px}}

/* 后台弹窗：内联 style 会被 CSP style-src 'self' 拦截，样式统一走类 */
.password-reveal-value{font-family:ui-monospace,Consolas,monospace;font-size:18px;text-align:center;letter-spacing:2px}
.dialog-actions-center{justify-content:center;margin-top:14px}
.dialog-actions-end{justify-content:flex-end;margin-top:10px}
.dialog-field{display:block}
.dialog-textarea{width:100%;min-height:80px;font:14px/1.7 inherit;padding:8px;border:1px solid #bbb;border-radius:6px}
/* 表格操作列：按钮成组排列并留出水平间距（编辑等主操作、删除等次操作） */
.row-actions{display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap}

/* 后台表单排版：赛事项目（标识占整行 + 两列），标签列自适应且与值域间隔 12px
   两个逻辑列之间用一条固定 30px 的间隔列分开（column-gap 只接受单值） */
.event-form-grid{display:grid;grid-template-columns:max-content minmax(0,1fr) 30px max-content minmax(0,1fr);column-gap:12px;row-gap:11px;align-items:center}
.event-form-grid .field{display:grid;grid-template-columns:subgrid;column-gap:12px;margin:0}
.event-form-grid .field>span{text-align:left}
/* 标识只占第一列并与排序对齐；排序/状态、名称中英文各占一列 */
.event-form-grid .event-id{grid-column:1/3;grid-row:1}
.event-form-grid .event-r2c1{grid-column:1/3;grid-row:2}
.event-form-grid .event-r2c2{grid-column:4/6;grid-row:2}
.event-form-grid .event-r3c1{grid-column:1/3;grid-row:3}
.event-form-grid .event-r3c2{grid-column:4/6;grid-row:3}
.event-actions{justify-content:center}
@media(max-width:767px){.event-form-grid{grid-template-columns:1fr;column-gap:0;row-gap:0}.event-form-grid .field{grid-template-columns:1fr;grid-column:1/-1;grid-row:auto;column-gap:0;row-gap:4px;margin:0 0 12px}}/* 赛事日历：字段名与正文说明一致左对齐 */
#calendar-editor .field>span{text-align:left}
/* 问答编辑：标题列与输入列都左对齐 */
#faq-form .field>span{text-align:left}
/* 赛事项目列表：标题与文字居中 */
.events-table th,.events-table td{text-align:center;vertical-align:middle}
.events-table td .row-actions{justify-content:center}
/* 备份与还原列表：只显示备份时间、校验状态与操作三列，内容居中；
   大小折叠成“备份时间”下方的灰色小字，不单独占列 */
.backup-table th,.backup-table td{text-align:center;vertical-align:middle}
.backup-table td .toolbar{justify-content:center;margin:0}
.backup-table .backup-size{display:block;margin-top:4px;color:#7a8a97;font-size:12px}
/* 操作日志：主句说清做了什么，下方小字给出"改前 → 改后"的变更明细 */
.admin-main .data-table.audit-table .audit-detail{display:block;margin-top:4px;color:#7a8a97;font-size:12px;line-height:1.5;word-break:break-word}
/* 找回密码申请：表头不折行，"重置密码 / 取消"始终在同一行（不再被挤成两行） */
.reset-table th{white-space:nowrap}
.reset-table td{vertical-align:middle}
.reset-table .reset-actions{flex-wrap:nowrap;justify-content:flex-start;gap:8px;margin:0}
.reset-table .reset-actions .button{white-space:nowrap}
/* ===== 个人中心：个人信息与账号 =====
   ① 账号信息一行：手机号、邮箱，后面紧跟"导出我的资料 / 退出登录"两个小按钮
   ② 需要填表的操作（修改密码 / 注销账号）单独一行，入口与真正的区块标题同字号（14px），
      点开后表单在下方整行展开
   ③ 表单内部沿用前台登录页版式：标签左对齐、值域左对齐且各行左缘一致、
      按钮组居中、标题列与值域列整体居中，按钮与输入框之间不画横线 */
.account-profile{display:flex;flex-wrap:wrap;align-items:center;gap:10px 20px;margin:14px 0;padding:12px 15px;border:1px solid #c7e2f1;background:#f0f8fd;font-size:14px}
.account-profile .account-field{display:inline-flex;align-items:baseline;gap:6px}
.account-profile .account-label{color:#506a7a}
.account-profile .account-value{color:#333}
.account-profile .account-inline-actions{display:inline-flex;flex-wrap:wrap;gap:10px}
.account-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin:10px 0 4px}
.account-danger-link{color:#b44837;background:none;border:0;padding:0;font-size:14px;cursor:pointer}
.account-danger-link:hover{text-decoration:underline}
.account-note{font-size:12px;line-height:1.9;color:#7a8a97;padding:16px 0 0;margin-bottom:18px}
.account-note p{margin-bottom:6px}
.account-form .form-body{
  display:grid;grid-template-columns:max-content minmax(0,1fr);column-gap:18px;row-gap:14px;align-items:center;
  width:calc(100% - 120px);max-width:560px;margin-inline:auto;padding:22px 30px 4px}
.account-form .field{display:contents}
.account-form .field>label{text-align:left;font-size:14px;color:#333;white-space:nowrap}
.account-form .field>input,.account-form .field>select{width:100%;max-width:none}
.account-form .field>small{grid-column:2;font-size:12px;line-height:1.8}
.account-form .account-form-note{grid-column:1/-1;margin:0 0 2px;font-size:12px;color:#7a8a97;line-height:1.8}
/* 按钮居中且与输入框之间不画分隔横线 */
.account-form .form-actions{justify-content:center;border-top:none;padding:10px 30px 24px}
@media(max-width:767px){
  .account-profile{font-size:13px;gap:8px 14px;padding:10px 12px}
  .account-profile .button{font-size:12px;padding:6px 9px}
  .account-actions{gap:14px}
  .account-form .form-body{width:100%;grid-template-columns:1fr;row-gap:0;padding:16px 15px 4px}
  .account-form .field{display:grid;grid-template-columns:1fr;column-gap:0;row-gap:4px;margin:0 0 12px}
  .account-form .field>small{grid-column:1}
  .account-form .form-actions{padding:8px 15px 18px}
}
/* 回收站：表头标题水平与垂直居中，内容垂直居中 */
.trash-table th,.trash-table td{text-align:center;vertical-align:middle}
.trash-table td .toolbar{justify-content:center;margin:0}
/* 前台成绩榜单：表头与内容全部水平 + 垂直居中 */
.scores-table th,.scores-table td{text-align:center;vertical-align:middle}
/* 前台名单公示：表头与内容全部水平 + 垂直居中 */
.publications-table th,.publications-table td{text-align:center;vertical-align:middle}
/* 后台账号注销申请：表格内容全部水平 + 垂直居中；说明列限宽并自动换行 */
.deletion-table th,.deletion-table td{text-align:center;vertical-align:middle}
.deletion-table .deletion-reason{display:block;max-width:220px;margin:0 auto;white-space:normal;overflow-wrap:anywhere;line-height:1.6}
.deletion-table td .deletion-actions{justify-content:center;margin:0}
/* 后台新闻发布管理：表格内容全部水平 + 垂直居中；操作列为「编辑」按钮（紧凑尺寸） */
.news-list-table th,.news-list-table td{text-align:center;vertical-align:middle}
.news-list-table .news-list-actions{display:flex;justify-content:center;align-items:center;gap:6px;min-height:30px;margin:0}
.news-list-table td .button{font-size:12px;min-height:30px;padding:4px 14px}
/* 竞赛日历与首页大赛日程：四个标题下面的文字水平 + 垂直居中
   （标题保持顶部，文字在标题下方的剩余空间内垂直居中；长文本允许换行，不再溢出格子） */
.schedule-grid>div{display:flex;flex-direction:column;align-items:center}
.schedule-grid h3,.schedule-grid strong{width:100%}
.schedule-grid strong{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;white-space:normal;overflow-wrap:anywhere;line-height:1.35}
/* 文档卡片：英文名称、当前版本、下载统计三行"左侧标题列"文字水平垂直居中（右侧内容保持左对齐） */
.document-item .review-list>div.row-centered dt{display:flex;align-items:center;justify-content:center;text-align:center}

/* 名单公示：公告表单两列（标题列 | 输入列），栅格规则见文末"后台表单统一版式" */
.notice-form{max-width:none;margin:20px auto 0}
.notice-form-grid .field>span{line-height:36px}
.notice-form-grid .field>select{width:200px}
/* 正文文本域高度约为原来的三分之二 */
.notice-form-grid .field>textarea{height:78px;min-height:78px}
.notice-form .notice-actions{justify-content:center}
@media(max-width:767px){.notice-form-grid .field>span{line-height:1.6}.notice-form-grid .field>select{width:100%}}

.upload-form{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px 14px;align-items:center;margin:15px 0}
.upload-form input{border:1px solid #bbb;padding:7px 10px;background:#fff;font-size:14px;min-width:0;width:100%;box-sizing:border-box}
.upload-form .button{justify-self:end}
@media(max-width:767px){.upload-form{grid-template-columns:1fr}.upload-form .button{justify-self:stretch}}

#news-editor .field>span,#news-upload .field>span{text-align:left}
@media(max-width:767px){#news-editor .field,#news-upload .field{grid-template-columns:1fr}}

/* 联系方式：单列 8 项（每项分中英两行）；沿用后台统一版式——
   标题列与值域列都左对齐，两列块整体居中，离面板边框左右各留 60-90px */
#contact-editor .contact-fields .field>span{font-size:13px;text-align:left}
#contact-editor .contact-fields .field>input{height:30px;padding:3px 8px;font-size:13px;text-align:left;max-width:100%;box-sizing:border-box}
#contact-editor .contact-fields .field>textarea{font-size:13px;line-height:1.6;padding:6px 8px;min-height:58px;text-align:left;max-width:100%;box-sizing:border-box}
#contact-editor .contact-actions{justify-content:center;margin:0 0 10px}

.inline-field{display:flex;align-items:center;gap:10px;min-width:0;grid-column:2}
.inline-field>input{flex:1;border:1px solid #b9b9b9;border-radius:6px;background:#fff;color:#555;min-width:0;max-width:620px;height:36px;padding:5px 10px;font-size:14px}
.inline-field>small{font-size:12px;color:#999;white-space:nowrap}
@media(max-width:767px){.inline-field{flex-wrap:wrap}.inline-field>small{white-space:normal}}

.download-empty{text-align:center}
.secret-dialog{border:1px solid #c7e2f1;border-radius:6px;padding:24px 28px;max-width:520px;width:90%;background:#fff;color:#333;box-shadow:0 8px 32px rgba(0,0,0,.2)}
.secret-dialog::backdrop{background:rgba(0,0,0,.45)}
.secret-dialog h2{font-size:18px;color:var(--blue);margin:0 0 12px;display:flex;align-items:center;gap:8px}
.secret-dialog p{font-size:14px;line-height:1.7;margin:0 0 10px}
.secret-meta{font-weight:600;color:#444}
.secret-value-row{display:flex;align-items:center;gap:10px;margin:14px 0 10px;padding:14px 12px;background:#f6f8fa;border:1px dashed #b9c3cf;border-radius:4px}
.secret-value{font-family:Consolas,Menlo,monospace;font-size:18px;letter-spacing:2px;color:#1f3b66;background:#fff;padding:8px 12px;border:1px solid #c7e2f1;border-radius:3px;flex:1;text-align:center;user-select:all;word-break:break-all}

/* 后台各面板统一：标题栏下的说明文字与标题栏左对齐（去掉左缩进），并收紧与下方状态行/表单的间距 */
.admin-main .content-copy{padding-left:0;padding-bottom:6px}
.admin-main .content-copy p:last-child{margin-bottom:0}
.admin-main .content-copy + .toolbar{margin:8px 0 12px}
.admin-main .page-message{padding-left:0;padding-bottom:6px}
.admin-main .page-message + .toolbar{margin:8px 0 12px}

/* 角色分配面板：添加新人员表单改为单个统一栅格（手机号 / 初始密码 / 邮箱号 / 角色），
   标签列与值域列的排布、居中留白与其它后台表单一致（见文末统一版式） */
#roles-create .roles-form{margin:0 auto}
@media(max-width:767px){#roles-create .roles-form{max-width:620px}}

/* 隐私与政策：赛后清理区——按钮在左，队伍编号字段占右侧并沿用统一版式 */
.purge-row{align-items:flex-start}
.purge-ids{flex:1;min-width:0}

/* 运行状态页：说明段行距收紧（第二段不再离第一段过远），
   各标题栏（当前状态 / 备份与还原 / 压测演练 / 系统边界）与上方内容留 30px 间距 */
.system-page .content-copy{line-height:1.75}
.system-page .content-copy p{margin-bottom:6px}
.system-page .section-bar{margin-top:30px}
.system-page .section-bar:first-of-type{margin-top:0}
/* 备份与还原标题栏与上方"审计链自检"列表边框的净距压到 30px：
   review-list 自带 25px 下外边距、content-copy 自带 20px 下内边距，一并清零后
   只剩 section-bar 的 30px 上外边距 */
.system-page #system-status{padding-bottom:0}
.system-page #system-status .review-list{margin-bottom:0}

/* 后台 tab 页（隐私与数据权利：隐私与政策 / 账号注销申请 / 赛后清理证件信息；
   统计看板：报名总览 / 分布构成 / 参赛单位，两处共用同一套样式） */
.tab-bar{display:flex;flex-wrap:wrap;gap:6px;border-bottom:1px solid #c7e2f1;margin:0 0 22px}
.tab-button{appearance:none;border:1px solid transparent;border-bottom:none;border-radius:6px 6px 0 0;background:transparent;color:#506a7a;font-size:14px;line-height:1.4;padding:9px 18px;cursor:pointer}
.tab-button:hover{background:#eef7fd;color:var(--blue)}
.tab-button.is-active{background:#fff;border-color:#c7e2f1;color:var(--blue);font-weight:600;margin-bottom:-1px}
.tab-button:focus-visible{outline:2px solid #1d7fc2;outline-offset:-2px}
.tab-panel{margin:0}
.tab-panel[hidden]{display:none}
.policy-actions{justify-content:center;padding-left:20px;padding-right:20px}
.policy-actions .button-secondary{display:inline-flex;align-items:center;justify-content:center}
@media(max-width:767px){.tab-button{font-size:13px;padding:7px 14px}}

/* 图形验证码：输入框 + 验证码图 + 刷新按钮同一行；窄屏时图片与按钮不换行 */
.captcha-row{display:flex;align-items:center;gap:10px;width:100%;min-width:0}
.captcha-row>input[type=text]{flex:1 1 auto;min-width:0}
.captcha-row>input[type=hidden]{display:none}
.captcha-image{flex:0 0 auto;width:120px;height:40px;border:1px solid #bbb;background:#eef6fb;cursor:pointer}
.captcha-refresh{flex:0 0 auto;white-space:nowrap;font-size:13px;padding:7px 12px}
@media(max-width:420px){.captcha-row{flex-wrap:wrap}.captcha-row>input[type=text]{flex:1 1 100%}}

/* ===== 后台表单统一版式 =====
   标准：①字段标题一律左对齐；
        ②标签列按本表单内最长标题自适应，右侧值域与标题固定间隔 12px；
        ③同一表单内各行的值域左缘对齐——标签与控件都作为父栅格的直接项
          （.field 用 display:contents 展开），标签列的 max-content 因此只由
          标题文字决定，不会被富文本等超宽值域反向撑宽；
        ④窄屏（≤767px）回落为单列堆叠。
   参与统一版式的容器：.admin-fields（通用类）、.calendar-grid、.notice-form-grid、
   #faq-form .form-body。角色分配页的添加人员表单已并入同一个 .admin-fields 栅格。
   例外：.event-form-grid 是多列并排布局，仍用 subgrid 继承父级列宽。 */
.admin-fields,.calendar-grid,.notice-form-grid,#faq-form .form-body{
  display:grid;grid-template-columns:max-content minmax(0,1fr);column-gap:12px;row-gap:11px;align-items:center}
.admin-fields .field,.calendar-grid .field,.notice-form-grid .field,#faq-form .field{display:contents}
.admin-fields .field>span,.calendar-grid .field>span,.notice-form-grid .field>span,#faq-form .field>span{text-align:left}
/* 值域很高（富文本编辑器、长文本域）时，标题与值域顶部对齐而非垂直居中 */
.admin-fields .field>span.field-label-top{align-self:start}
@media(max-width:767px){
  .admin-fields,.calendar-grid,.notice-form-grid,#faq-form .form-body{grid-template-columns:1fr;row-gap:0}
  .admin-fields .field,.calendar-grid .field,.notice-form-grid .field,#faq-form .field{
    display:grid;grid-template-columns:1fr;column-gap:0;row-gap:4px;margin:0 0 12px}}

/* 问答编辑：底部两个按钮整体居中 */
#faq-form .toolbar{justify-content:center}
/* 问答编辑：标题栏与表单边框之间留 20px（原为 0，两者贴在一起）；
   值域控件撑满第 2 列（解除 620px 上限），使"标签列 + 值域列"这一块左右对称 */
#faq-form{margin:20px auto 0}
#faq-form .field>input,#faq-form .field>select,#faq-form .field>textarea{max-width:100%}

/* 名单公示公告、赛事日历、问答编辑、修改密码、隐私与政策、联系方式：
   标题列 + 值域列作为一个整体在表单内水平居中。
   宽度取"容器宽度 - 120px"：容器是 .form-body（内边距 30px）或 .review-card（内边距 15px），
   因此两列整体离表单左右边框约 90px / 75px，控件等宽且左缘对齐。 */
.notice-form-grid,.calendar-grid,#faq-form .form-body,#policy-form .admin-fields,#password-form .admin-fields,#contact-editor .contact-fields,#instructions-form .admin-fields,#readonly-form .admin-fields,#news-editor .admin-fields,#news-upload .admin-fields,#roles-create .admin-fields{
  width:calc(100% - 120px);max-width:100%;margin-inline:auto;
  grid-template-columns:max-content minmax(0,1fr)}
@media(max-width:767px){
  .notice-form-grid,.calendar-grid,#faq-form .form-body,#policy-form .admin-fields,#password-form .admin-fields,#contact-editor .contact-fields,#instructions-form .admin-fields,#readonly-form .admin-fields,#news-editor .admin-fields,#news-upload .admin-fields,#roles-create .admin-fields{
    width:100%;grid-template-columns:1fr}}
/* 赛事日历：表单主体收窄居中后，按钮组一并居中，避免按钮贴在左边与表单脱节 */
#calendar-editor .toolbar{justify-content:center}

/* 公示公告（底部区块）：标题栏标题水平与垂直居中；表单内容垂直居中；
   值域控件撑满第 2 列（状态下拉与输入框同宽），公告列表的表头与内容同样居中 */
.notice-bar{justify-content:center}
.notice-bar h2{align-items:center}
.notice-form-grid{align-items:center}
.notice-form-grid .field>select{width:100%}
.notice-form-grid .field>input,.notice-form-grid .field>select,.notice-form-grid .field>textarea{max-width:100%}
.notice-list-table th,.notice-list-table td{text-align:center;vertical-align:middle}
.notice-list-table td .toolbar{justify-content:center;margin:0}

/* 文档历史：英文名称输入框与其后文字在行内垂直居中 */
.document-item .review-list>div.row-centered dd{align-self:center}
.document-item .review-list>div.row-centered dd .toolbar{margin:0}

/* 角色分配：标题靠外边框 10px；两列标签各自左对齐；按钮整体居中 */
#roles-create h3{margin:-6px 0 10px -6px}
#roles-create .toolbar{justify-content:center}

/* 修改密码：按钮整体居中 */
#password-form .toolbar{justify-content:center}

/* 运行状态：保存开关居中；当前状态标题列居中；备份与还原按钮居中 */
#readonly-form .toolbar{justify-content:center}
#system-status .review-list dt{display:flex;align-items:center;justify-content:center;text-align:center}
#backup-actions{justify-content:center}

/* ===== 后台表格统一版式 ===== 表头一律水平 + 垂直居中；短字段内容同样居中；
   长文本列（操作日志摘要、邮件主题与报错、问答正文、附件地址）加 .cell-text-left 单列左对齐，便于阅读 */
.admin-main .data-table th{text-align:center;vertical-align:middle}
.admin-main .data-table td{text-align:center;vertical-align:middle}
.admin-main .data-table .cell-text-left{text-align:left;vertical-align:middle}
/* 后台表格操作列：按钮组水平居中、按钮之间留 6px */
.admin-main .data-table .row-actions{display:inline-flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap}
/* ===== 后台表单值域统一等宽 ===== 新闻编辑、角色分配等页面的输入控件不再被 620px 上限截断，
   值域与其它行同列同宽，左缘对齐 */
#news-editor .admin-fields .field>input,#news-editor .admin-fields .field>select,#news-editor .admin-fields .field>textarea,#news-editor .admin-fields .rich-wrap,#news-editor .admin-fields .inline-field>input,#news-upload .admin-fields .field>input,#roles-create .admin-fields .field>input,#roles-create .admin-fields .field>select{max-width:none}
#news-editor .admin-fields .inline-field>input{flex:1}
/* ===== 后台表单底部按钮组统一水平居中 ===== */
#news-editor .toolbar.actions,#instructions-form .toolbar,.publication-actions{justify-content:center}
/* ===== 新闻编辑：置顶与紧急公告两个复选框落在值域列（第 2 列），左缘与正文(EN)等其它值域一致 ===== */
#news-editor .news-options{grid-column:2;display:flex;flex-wrap:wrap;align-items:center;gap:20px;padding:2px 0}
#news-editor .news-options label{display:inline-flex;align-items:center;gap:6px;font-size:14px;color:#333}
#news-editor .news-options input[type=checkbox]{width:16px;height:16px;margin:0}
/* ===== 新闻发布管理列表：标题列占剩余宽度，其余列按内容收窄 ===== */
.news-list-table{table-layout:fixed}
.news-list-table th:nth-child(1),.news-list-table td:nth-child(1){width:auto;word-break:break-word}
.news-list-table th:nth-child(2),.news-list-table td:nth-child(2){width:11%}
.news-list-table th:nth-child(3),.news-list-table td:nth-child(3){width:12%}
.news-list-table th:nth-child(4),.news-list-table td:nth-child(4){width:18%}
.news-list-table th:nth-child(5),.news-list-table td:nth-child(5){width:12%}
.news-list-table th:nth-child(6),.news-list-table td:nth-child(6){width:17%}
@media(max-width:767px){.news-list-table{table-layout:auto}.news-list-table th,.news-list-table td{width:auto}}
