/* 北京十二宫联赛中心 v2.45.14 · 版式回归 v2.34.0 经典结构（大页眉 + 主页三段）
   + 保留 v2.37.0 全幅流式布局；全站金额统一标注为俱乐部积分；
   十二宫 × 圣斗士 × 北京 · muted 极简 · 正式书面文案 */
:root{
  color-scheme:light;
  --bg:#f4f1ea;--surface:#fcfaf5;--surface-2:#ede9df;--ink:#1e1d1a;--ink-2:#3d3b35;--muted:#5b584e;
  --line:#d5cfbc;--line-strong:#b0a88f;--accent:#7a5f2c;--accent-deep:#5c471e;--gold:#7a5f2c;--gold-2:#6d5524;
  --accent-soft:#eee7d8;--gold-soft:#eee7d8;--danger:#9c4f34;--status-open:#149647;--status-free:#dd8a00;--status-full:#d92b2b;--status-over:#8f1212;--status-over-bg:#fbeae7;
  --seal:#7a5f2c;--panel-ink:#f1ede3;--panel-ink-text:#1e1d1a;
  --shadow:0 18px 44px rgba(74,66,48,.14);--radius:4px;
  --serif:'Noto Serif SC','Songti SC','STSong',serif;
  /* 全站流体内边距（v2.37.0）：随视口在 16–64px 间连续变化，宽屏更疏朗 */
  --pad-x:clamp(16px,4vw,64px);
  --sans:"Noto Sans SC",sans-serif;--number:"Barlow Condensed","Noto Sans SC",sans-serif;
}
@font-face{font-family:'Noto Serif SC';src:url('../fonts/noto-serif-sc-600.woff2') format('woff2');font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:'Noto Serif SC';src:url('../fonts/noto-serif-sc-900.woff2') format('woff2');font-weight:900;font-style:normal;font-display:swap}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background-color:var(--bg);color:var(--ink);font-family:var(--sans);font-weight:500;min-height:100vh;font-variant-numeric:tabular-nums;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.9 0.9 0 0'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)' opacity='0.055'/%3E%3C/svg%3E")}
::selection{background:var(--gold-soft);color:var(--ink)}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer}
/* —— 全幅流体布局（v2.37.0 引入，v2.39.0 保留）：主容器不再封顶 1240px 居中。旧版 .app 定宽居中，
   内部面板（--surface 浅纸面 + 罫线）与 body（--bg + 纹理）有色差，宽屏/缩小时
   所有面板边缘在同一竖线戛然而止，呈「一张纸摆在桌上」的纵向纸边。现容器通栏
   100%、自身无底色无描边（与 body 同为透明，纸面只出现在各组件自身），左右改
   流体内边距；页眉、页签、页脚、表格随之全幅。≤620px 仍由下方断点给 12px 边距。 */
.app{width:100%;margin:0;padding:20px var(--pad-x) 104px}

/* —— 刊头：节目单式大标题 + 印章 + 星盘 —— */
.mast{position:relative;overflow:hidden;display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:26px;align-items:center;padding:30px 4px 24px;border-top:2px solid var(--gold);border-bottom:1px solid var(--line-strong)}
.mast::after{content:"";position:absolute;left:0;right:0;bottom:3px;border-bottom:1px solid var(--line)}
.vertical-note{position:relative;z-index:1;writing-mode:vertical-rl;letter-spacing:.42em;font-family:var(--serif);font-weight:600;font-size:13px;color:var(--muted);border-right:1px solid var(--line);padding-right:14px;white-space:nowrap}
.mast-main{position:relative;z-index:1;min-width:0}
.mast h1{margin:0;font-family:var(--serif);font-weight:900;font-size:clamp(36px,5.4vw,62px);line-height:1.04;letter-spacing:.015em}
.mast h1 .h1-part{display:inline-block;white-space:nowrap}
.mast h1 .h1-accent{color:var(--accent)}
.mast-sub{margin:13px 0 0;font-family:var(--number);font-size:13px;font-weight:600;letter-spacing:.27em;color:var(--muted);text-wrap:balance}
.mast-side{position:relative;z-index:1;display:flex;align-items:center;gap:20px}
.temple{flex:none;width:92px;color:var(--gold)}
.temple svg{display:block;width:100%;height:auto}
/* —— v2.39.2：后台页眉十二宫圆环改回背景纹 —— v2.39.1 曾将圆环钉为标题旁的
   定尺寸徽记，用户裁定圆环原是背景、徽记形态不取：现令其退出文档流，作
   .mast 内的绝对定位背景层——尺寸约为页眉高的 1.6–2 倍，锚定右侧、垂直
   居中、右缘出血由 .mast 的 overflow:hidden 裁切；古铜色、透明度 0.13 的
   淡纹水平，不拦截指针，层级低于页眉文字（.mast-main / .mast-side /
   .vertical-note 均为 z-index:1）。圆环退出流后控制台页眉回到单行经典
   排布，总高以 min-height 锁定为 v2.39.1 实测值（桌面 345 / 中档 312 /
   手机随视口 360 档 178 · 390 档 208），版心高度不变。min-height 作用域
   body:not(.front) .admin-app 仅限后台控制台；后台登录页（body.front、
   无圆环）与前台均不受影响（.zodiac 元素仅存在于控制台页眉）。 */
.zodiac{position:absolute;top:50%;right:-92px;transform:translateY(-50%);width:420px;height:420px;z-index:0;pointer-events:none;color:var(--gold);opacity:.13}
body:not(.front) .admin-app .mast{min-height:345px}
@media(min-width:621px) and (max-width:1023px){
  .zodiac{width:340px;height:340px;right:-76px}
  body:not(.front) .admin-app .mast{min-height:312px}
}
@media(max-width:620px){
  .zodiac{width:300px;height:300px;right:-118px}
  body:not(.front) .admin-app .mast{min-height:clamp(170px,calc(100vw - 182px),209px)}
}
.stamp{text-align:right;color:var(--muted);font-size:12px;line-height:1.7;white-space:nowrap;padding-left:20px;border-left:1px solid var(--line)}
.stamp strong{display:block;color:var(--ink);font:700 30px/1 var(--number)}

/* —— 通用按钮 —— */
.btn{background:var(--accent);border:1px solid var(--accent);color:#f7ecd2;border-radius:2px;padding:10px 22px;font-weight:700;letter-spacing:.06em}
a.btn{display:inline-flex;align-items:center;justify-content:center;text-decoration:none}
.btn:hover{background:var(--accent-deep);border-color:var(--accent-deep)}
.btn-ghost{background:transparent;border:1px solid var(--line-strong);color:var(--accent-deep);border-radius:2px;padding:8px 16px;font-weight:700}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent)}
.btn-danger{background:transparent;border:1px solid var(--danger);color:var(--danger);border-radius:2px;padding:7px 13px;font-weight:700}
.btn-danger:hover{background:var(--danger);color:#f7ecd2}
/* 不可点的撤回/取消按钮须一眼可辨（v2.45.7）：置灰、不可点 */
.btn-danger:disabled,.btn-ghost:disabled{opacity:.45;cursor:not-allowed}
.btn-danger:disabled:hover{background:transparent;color:var(--danger)}

/* —— 章节题头：编辑式题签 —— */
.section-head{display:flex;justify-content:space-between;gap:18px;align-items:center;margin:36px 0 14px;padding-bottom:11px;border-bottom:1px solid var(--line-strong)}
.section-head h2{margin:0;font-family:var(--serif);font-weight:900;font-size:23px;line-height:1.25;letter-spacing:.03em;display:flex;align-items:center;gap:11px}
.section-head h2::before{content:"";flex:none;width:9px;height:9px;background:var(--accent);transform:rotate(45deg)}
.section-head p{margin:6px 0 0;color:var(--muted);font-size:13px;line-height:1.65;max-width:760px;text-wrap:balance}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:3px;padding:20px}

/* —— 总身价排行：编辑式榜单 —— */
.value-ranking{display:grid;gap:0;border:1px solid var(--line);border-radius:3px;background:var(--surface);overflow:hidden}
.value-rank-head,.value-rank-row{display:grid;grid-template-columns:64px minmax(180px,1fr) 180px 90px;gap:16px;align-items:center}
.value-rank-head{padding:10px 16px 8px;color:var(--muted);font-size:11px;letter-spacing:.12em;border-bottom:1px solid var(--line-strong);background:var(--surface-2)}
.value-rank-head span:nth-last-child(-n+2){text-align:right}
.value-rank-row{--value-width:0%;position:relative;width:100%;border:0;border-bottom:1px solid var(--line);background:transparent;padding:15px 16px;text-align:left}
.value-rank-row:last-child{border-bottom:0}
.value-rank-row::before{content:"";position:absolute;left:16px;bottom:-1px;height:2px;width:calc(var(--value-width) - 16px);max-width:calc(100% - 32px);background:var(--gold);opacity:.4;pointer-events:none}
.value-rank-row:hover{background:color-mix(in srgb,var(--gold) 6%,transparent)}
.value-rank-row:focus-visible{outline:2px solid var(--gold);outline-offset:-2px}
.value-rank-row.rank-1{background:color-mix(in srgb,var(--gold) 7%,transparent)}
.value-rank-row.rank-1::before{background:var(--gold);opacity:.9;height:3px}
.value-rank-number{font:900 30px/1 var(--serif);color:var(--muted)}
.rank-1 .value-rank-number{color:var(--accent)}
.rank-2 .value-rank-number,.rank-3 .value-rank-number{color:var(--gold)}
.value-rank-team{min-width:0}
.value-rank-team strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:15px;font-family:var(--serif);font-weight:700}
.value-rank-team small{display:block;margin-top:4px;color:var(--muted);font-size:11px;letter-spacing:.04em}
.value-rank-value,.value-rank-count{text-align:right}
.value-rank-value b{display:block;font:700 27px/1 var(--number);color:var(--gold)}
.rank-1 .value-rank-value b{color:var(--accent)}
.value-rank-value small,.value-rank-count small{display:block;margin-top:4px;color:var(--muted);font-size:10px}
.value-rank-count b{display:block;font:700 22px/1 var(--number)}

/* —— 球员查询筛选 —— */
/* v2.41.1：取消 1180 限宽、满宽分布——筛选首行为弹性排布：球队下拉定宽
   264px、解约金滑杆占余宽、排序下拉定宽 200px、搜索钮随行右端底对齐；
   位置 chips 行整行占满。控件仅改排布，尺寸口径不变。 */
.player-query-toolbar{display:grid;gap:10px;margin-bottom:10px}
.query-search-row input{width:100%;border:1px solid var(--line-strong);background:var(--surface);padding:12px 14px;border-radius:3px;outline:none;font-size:15px}
.query-search-row input:focus,.query-field select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.query-filter-row{display:grid;gap:10px}
.query-filter-row.primary{display:flex;gap:10px}
.query-filter-row.primary .qf-team{flex:0 0 264px}
.query-filter-row.primary .qf-range{flex:1 1 auto;min-width:0}
.query-filter-row.primary .qf-sort{flex:0 0 200px}
.query-actions{flex:0 0 auto;display:flex;align-items:flex-end;padding-bottom:11px}
.query-actions .btn{white-space:nowrap}
.query-filter-row.secondary{grid-template-columns:minmax(0,1fr)}
.query-field{min-width:0;padding:11px 13px;background:var(--surface-2);border:1px solid var(--line);border-radius:3px}
.query-field-label{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 8px;color:var(--muted);font-size:11px;font-weight:700;letter-spacing:.08em}
.query-field-label output{color:var(--accent-deep);font:700 15px/1 var(--number);letter-spacing:.02em;white-space:nowrap}
.query-field select{width:100%;border:1px solid var(--line-strong);background:var(--surface);padding:10px 11px;border-radius:3px;outline:none}
.position-options{display:flex;flex-wrap:wrap;gap:6px}
.position-chip{border:1px solid var(--line-strong);background:var(--surface);padding:7px 9px;border-radius:2px;color:var(--muted);font:700 12px/1 var(--number)}
.position-chip:hover{border-color:var(--accent);color:var(--ink)}
.position-chip.active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-deep)}
.dual-range{--range-low:0%;--range-high:100%;position:relative;height:26px;margin:0 1px}
.dual-range::before{content:"";position:absolute;left:7px;right:7px;top:12px;height:3px;background:linear-gradient(to right,var(--line-strong) 0 var(--range-low),var(--accent) var(--range-low) var(--range-high),var(--line-strong) var(--range-high) 100%)}
.dual-range input[type="range"]{position:absolute;inset:0;width:100%;height:26px;margin:0;background:transparent;appearance:none;-webkit-appearance:none;pointer-events:none;outline:none}
.dual-range input[type="range"]::-webkit-slider-runnable-track{height:3px;background:transparent}
.dual-range input[type="range"]::-webkit-slider-thumb{width:17px;height:17px;margin-top:-7px;border:2px solid var(--surface);border-radius:50%;background:var(--accent);box-shadow:0 0 0 1px var(--accent);appearance:none;-webkit-appearance:none;pointer-events:auto;cursor:grab}
.dual-range input[type="range"]::-moz-range-track{height:3px;background:transparent}
.dual-range input[type="range"]::-moz-range-thumb{width:15px;height:15px;border:2px solid var(--surface);border-radius:50%;background:var(--accent);box-shadow:0 0 0 1px var(--accent);pointer-events:auto;cursor:grab}
.dual-range input[type="range"]:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 1px var(--accent),0 0 0 4px var(--accent-soft)}
.range-scale{display:flex;justify-content:space-between;margin-top:1px;color:var(--muted);font:600 10px/1 var(--number)}

/* —— 球员小卡 —— */
/* 球员卡网格（v2.37.0 流体化）：auto-fill + minmax 自适应列数，卡片保持
   约 300px 起的理想宽度，宽屏自动增列，不再等分拉成巨卡 */
.player-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(300px,100%),1fr));gap:9px}
.player-card{background:var(--surface);border:1px solid var(--line);border-radius:3px;padding:14px;text-align:left;display:grid;grid-template-columns:48px minmax(0,1fr) auto;gap:11px;align-items:start;width:100%}
.player-card:hover{border-color:var(--line-strong);background:color-mix(in srgb,var(--gold) 5%,var(--surface))}
.player-card:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.player-card .rating{width:48px;height:52px}
.rating{display:grid;place-items:center;border:1px solid color-mix(in srgb,var(--gold) 55%,var(--line));background:color-mix(in srgb,var(--gold) 13%,var(--surface));color:var(--accent-deep);font:900 26px/1 var(--serif);box-shadow:inset 0 0 0 2px var(--surface),inset 0 0 0 3px color-mix(in srgb,var(--gold) 38%,var(--line))}
.player-name{min-width:0}
.player-name strong{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px}
.player-name small{display:block;color:var(--muted);font-size:12px;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.alias-note{display:inline-block;margin-top:5px;color:var(--accent);font-size:11px;line-height:1.45;border:1px solid color-mix(in srgb,var(--gold) 45%,var(--line));background:var(--accent-soft);border-radius:2px;padding:2px 6px}
.player-position{display:block;margin-top:7px;color:var(--ink);font-size:12px;line-height:1.45}
.trait-list{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.trait-tag{position:relative;display:inline-flex;align-items:center;max-width:100%;padding:4px 7px;border-radius:2px;border:1px solid color-mix(in srgb,var(--gold) 38%,var(--line));background:color-mix(in srgb,var(--gold) 11%,var(--surface));color:var(--ink);font-size:11px;font-weight:700;line-height:1.2;overflow-wrap:anywhere;cursor:help;outline:none}
.trait-tag-plus{background:color-mix(in srgb,var(--gold) 24%,var(--surface));border-color:color-mix(in srgb,var(--gold) 70%,var(--line));color:var(--accent-deep);font-weight:900}
.trait-tag::after{content:attr(data-trait-en);position:absolute;left:50%;bottom:calc(100% + 8px);z-index:12;transform:translate(-50%,4px);width:max-content;max-width:min(220px,70vw);padding:6px 8px;border-radius:3px;background:var(--ink);color:var(--bg);font-size:10px;font-weight:600;line-height:1.35;white-space:normal;pointer-events:none;opacity:0;visibility:hidden;transition:opacity .16s,transform .16s,visibility .16s}
.trait-tag:hover::after,.trait-tag:focus-visible::after{opacity:1;visibility:visible;transform:translate(-50%,0)}
.trait-tag:focus-visible{box-shadow:0 0 0 2px var(--surface),0 0 0 4px var(--gold)}
.player-price{text-align:right}
.player-price b{display:block;font:700 20px/1 var(--number);color:var(--gold)}
.player-price small{font-size:11px;color:var(--muted)}

/* —— 分页 —— */
.pager{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:7px;margin:22px 0}
.pager button{border:1px solid var(--line-strong);background:var(--surface);min-width:38px;padding:8px 11px;border-radius:2px}
.pager button:hover{border-color:var(--accent);color:var(--accent)}
.pager button:disabled{opacity:.35;cursor:not-allowed}
.pager .pager-info{color:var(--muted);font-size:13px}
.empty{padding:54px 20px;text-align:center;border:1px dashed var(--line-strong);border-radius:3px;color:var(--muted);grid-column:1/-1}
.empty h3{color:var(--ink);margin:0 0 8px;font-family:var(--serif);font-weight:900}
.empty p{max-width:520px;margin:0 auto;line-height:1.8}

/* —— 编辑式表格（管理后台） —— */
.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:3px;background:var(--surface)}
table.standings-table{width:100%;border-collapse:collapse}
.standings-table th,.standings-table td{padding:11px 10px;text-align:left;border-bottom:1px solid var(--line);font-size:13.5px}
.standings-table thead th{color:var(--muted);font-size:11px;font-weight:700;letter-spacing:.12em;border-bottom:1px solid var(--line-strong);white-space:nowrap}
.standings-table td{font-weight:600;color:var(--ink-2)}
.standings-table tbody tr:last-child td{border-bottom:0}
.standings-table tbody tr:hover{background:color-mix(in srgb,var(--gold) 6%,transparent)}
.standings-table input[type="text"],.standings-table input[type="password"],.standings-table input:not([type]){border:1px solid var(--line-strong);background:var(--surface);padding:7px 9px;border-radius:2px;outline:none;font-size:13px}
.standings-table input:focus{border-color:var(--accent)}

/* —— 工具条（管理后台） —— */
.toolbar{display:flex;flex-wrap:wrap;gap:8px;padding:10px;background:var(--surface-2);border:1px solid var(--line);border-radius:3px;margin-bottom:10px;align-items:center}
.toolbar input[type="text"],.toolbar input[type="password"],.toolbar input:not([type]),.toolbar select{border:1px solid var(--line-strong);background:var(--surface);padding:10px 11px;border-radius:3px;outline:none}
.toolbar input:focus,.toolbar select:focus{border-color:var(--accent)}
.toolbar input[type="text"],.toolbar input:not([type]){flex:2 1 200px;min-width:0}

/* —— 表单 —— */
.field label{display:block;font-size:12px;color:var(--muted);margin-bottom:7px;letter-spacing:.06em}
.field input,.field select{width:100%;height:46px;border:1px solid var(--line-strong);background:var(--surface);padding:0 12px;border-radius:3px;outline:none;text-align:left}
.field input:focus,.field select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
/* 文本域基础样式（v2.29.3）：此前桌面端无 .field textarea 基础规则，智能粘贴框
   在桌面上只剩浏览器默认小尺寸；现全断点统一占满容器宽、16px 字号，粘贴框另
   保底高 120px 以完整显示多行公告（手机端 .admin-app 内同名规则与此一致） */
.field textarea{width:100%;border:1px solid var(--line-strong);background:var(--surface);padding:10px 12px;border-radius:3px;outline:none;resize:vertical;font-size:16px;line-height:1.6;text-align:left}
.field textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
#tfPaste{min-height:120px}
/* 智能粘贴操作行（v2.29.3）：主按钮弹性占主宽、清空次级按钮同高同排；窄屏自动换行 */
.parse-actions .btn-big{width:auto;flex:1 1 220px}
.parse-actions .btn-ghost{min-height:52px;padding:12px 22px;font-size:15px;display:inline-flex;align-items:center;justify-content:center}
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.form-actions{margin-top:14px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.announce-wrap{margin-top:16px;padding-top:14px;border-top:1px dashed var(--line-strong)}
.announce-wrap textarea{width:100%;border:1px solid var(--line-strong);background:var(--surface);padding:10px 12px;border-radius:3px;outline:none;resize:vertical;font-size:14px;line-height:1.7}
.announce-wrap .form-actions{margin-top:10px}
.hint{color:var(--muted);font-size:13px;line-height:1.7;margin:0 0 12px}

/* —— 登录页背景纹层：固定全屏、纯背景平铺，不拦截事件、不参与布局 —— */
#markLayer{position:fixed;inset:0;z-index:60;display:none;pointer-events:none;background-repeat:repeat}

/* —— 球员详情弹窗 —— */
.modal{position:fixed;inset:0;z-index:50;display:none;background:rgba(59,58,54,.38);padding:22px;overflow:auto}
.modal.open{display:grid;place-items:center}
.sheet{width:min(720px,100%);background:var(--surface);border:1px solid var(--line-strong);border-radius:6px;box-shadow:var(--shadow);padding:24px;position:relative}
.close{position:absolute;right:16px;top:16px;border:1px solid var(--line-strong);background:var(--surface-2);width:36px;height:36px;border-radius:50%;font-size:19px;line-height:1}
.close:hover{border-color:var(--accent);color:var(--accent)}
.profile{display:grid;grid-template-columns:76px 1fr;gap:16px;align-items:center;padding-right:42px}
.profile .rating{width:76px;height:80px;font-size:42px}
.profile h2{margin:0 0 6px;font-family:var(--serif);font-weight:900;font-size:25px}
.profile p{margin:0;color:var(--muted);font-size:13px}
.profile-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);margin:20px 0;overflow:hidden}
.profile-stats div{background:var(--surface-2);padding:13px}
.profile-stats span{display:block;color:var(--muted);font-size:11px}
.profile-stats b{display:block;margin-top:5px;font:700 24px/1 var(--number)}
.profile-extra{display:grid;gap:12px;margin:0 0 4px;padding:15px 16px;background:var(--surface-2);border-radius:3px}
.profile-extra-row>span{display:block;color:var(--muted);font-size:11px;margin-bottom:6px;letter-spacing:.06em}
.profile-extra-row>strong{font-size:14px;line-height:1.55;font-weight:600}
.profile-extra .trait-list{margin-top:0}
/* 球员详情数据来源标注（v2.42.0）：价格曲线下方一行，小字号、链向 SoFIFA 官网 */
.profile-source{border-top:1px solid var(--line);padding-top:10px}
.sofifa-source{display:inline-flex;align-items:center;gap:7px;color:var(--muted);font-size:12px;letter-spacing:.04em;text-decoration:none}
.sofifa-source img{width:16px;height:16px;display:block}
.sofifa-source:hover{color:var(--accent-deep);text-decoration:underline;text-underline-offset:3px}

/* —— 账本记录：只列流动、方式、新标价 —— */
.ledger-list{display:grid}
.ledger-day{display:flex;align-items:center;gap:12px;margin:24px 0 2px;color:var(--muted);font:600 14px/1 var(--number);letter-spacing:.16em}
.ledger-day::after{content:"";flex:1;border-top:1px solid var(--line)}
.ledger-day:first-child{margin-top:4px}
.ledger-entry{display:grid;grid-template-columns:88px minmax(0,1fr);gap:6px 16px;padding:15px 4px;border-bottom:1px solid var(--line);align-items:start}
.ledger-tag{justify-self:start;margin-top:2px;padding:5px 10px;border-radius:2px;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-2);font-size:12px;font-weight:700;letter-spacing:.05em;white-space:nowrap}
.ledger-tag.buyout{background:var(--accent);border-color:var(--accent);color:#f7ecd2}
.ledger-tag.private,.ledger-tag.transfer{background:var(--accent-soft);border-color:color-mix(in srgb,var(--gold) 45%,var(--line));color:var(--accent-deep)}
.ledger-tag.preseason,.ledger-tag.pool{border-style:dashed;color:var(--muted)}
.ledger-tag.new{color:var(--accent-deep);background:var(--accent-soft)}
.ledger-tag.extra{border-color:var(--accent);color:var(--accent-deep)}
.ledger-tag.depart{color:var(--danger)}
.ledger-tag.guiku{border-style:dashed;color:var(--muted)}
.ledger-tag.loan{background:#e8eef8;border-color:#b9cbe4;color:#2d4a7a}
.ledger-tag.back{background:#e6f0e6;border-color:#bcd8bc;color:#2f6b33}
.ledger-fee{font-size:12px;color:var(--muted);letter-spacing:.04em}
.ledger-fee b{color:var(--accent-deep);font-size:13px}
.ledger-moves{display:grid;gap:11px;min-width:0}
.ledger-move{display:flex;justify-content:space-between;align-items:center;gap:16px;min-width:0}
.ledger-who{min-width:0}
.ledger-player{display:block;font-family:var(--serif);font-weight:900;font-size:16.5px;line-height:1.35}
.ledger-route{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:3px;color:var(--muted);font-size:12.5px}
.ledger-route strong{color:var(--ink);font-size:13px}
.ledger-route i{font-style:normal;color:var(--accent)}
.ledger-price{flex:none;text-align:right}
.ledger-price b{display:block;font:700 24px/1 var(--number);color:var(--accent)}
.ledger-price small{display:block;margin-top:3px;color:var(--muted);font-size:10px;letter-spacing:.14em}

/* —— 回到顶部 —— */
.back-to-top{position:fixed;right:max(22px,env(safe-area-inset-right));bottom:max(22px,env(safe-area-inset-bottom));z-index:35;width:50px;height:50px;padding:0;border:0;border-radius:4px;display:none;place-items:center;background:var(--seal);color:#f7ecd2;box-shadow:0 10px 26px rgba(74,66,48,.22)}
.back-to-top.show{display:grid}
.back-to-top:hover{background:var(--accent-deep)}
.back-to-top svg{width:22px;height:22px}

/* —— 页脚装饰：星座符号带 + 故宫屋檐线 —— */
.roofline{display:block;width:100%;height:auto;color:var(--gold);opacity:.5;margin-bottom:4px}
.data-note{display:flex;justify-content:space-between;gap:16px;margin-top:30px;padding-top:16px;border-top:3px double var(--line-strong);color:var(--muted);font-size:11px;flex-wrap:wrap}
.data-note .version{color:var(--ink);font-weight:700;white-space:nowrap}
/* 金额口径声明（v2.40.0）：页脚首行全幅居中，全页可见（手机端 .data-note 转 block 时同为独立一行） */
.data-note .points-declare{flex:1 1 100%;text-align:center;font-weight:700;color:var(--ink-2);letter-spacing:.04em}
/* 页眉 SoFIFA 品牌块（v2.42.3 三档落位）：元素置于 .mast-side 流内（计数块
   之后、账号区之前），形态恒为纵向叠放：logo 在上、「已接入 SoFIFA」在其
   下，整体链向官网。
   —— ≥1101：绝对定位于 .mast（定位上下文）水平、纵向双居中（logo 48px），
   居中于左侧标题块与右侧计数/账号区之间的中央区；为使居中基准回到 .mast
   而非 .mast-side，前台 .mast-side 在本档解除定位（其 z-index 身为网格子
   项仍然生效）。
   —— 621–1100：改走 .mast-side 流内落位（计数块之下整行、栏内居中，logo
   34px）——v2.42.2 的居中绝对定位在本档会与右侧计数块重叠（用户横屏实
   拍：logo 压住 416、「已接入 SoFIFA」与「21队球员/版本」叠字），故取消。
   —— ≤620：.mast-side 经 display:contents 摊平，品牌块作页眉网格右栏
   （150px）第二行落位，被计数块之下的既有空位吸收，见下方 ≤620 断点内
   body.front .mast:has(.auth-area) .sofifa-mast。 */
.sofifa-mast{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:1;display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--ink-2);font-size:13.5px;font-weight:700;letter-spacing:.05em;text-decoration:none;text-align:center}
.sofifa-mast img{width:48px;height:48px;display:block}
.sofifa-mast:hover{color:var(--accent-deep);text-decoration:underline;text-underline-offset:3px}
@media(min-width:1101px){
  body.front .mast-side{position:static}
}
@media(max-width:1100px){
  body.front .mast-side{flex-wrap:wrap;row-gap:8px}
  body.front .sofifa-mast{position:static;transform:none;flex:1 1 100%;order:1}
  body.front .sofifa-mast img{width:34px;height:34px}
}
.footer-link{border:0;background:none;padding:0;color:var(--accent);font-size:inherit;font-weight:700;text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent);text-underline-offset:3px}
.footer-link:hover{color:var(--accent-deep);text-decoration-color:currentColor}

/* —— 赛季积分榜：编辑式表格（公开） —— */
.standings-zone{position:relative;z-index:1}
table.pub-standings{width:100%;table-layout:fixed;border-collapse:collapse}
.pub-standings col.st-c-rank{width:9%}
.pub-standings col.st-c-num{width:7%}
.pub-standings col.st-c-diff{width:10%}
.pub-standings col.st-c-pts{width:9%}
.pub-standings th,.pub-standings td{padding:11px 6px;text-align:right;border-bottom:1px solid var(--line)}
.pub-standings thead th{padding-top:2px;padding-bottom:8px;color:var(--muted);font-size:11px;font-weight:700;letter-spacing:.12em;border-bottom:1px solid var(--line-strong)}
.pub-standings th.st-rank,.pub-standings td.st-rank{width:46px;text-align:center}
.pub-standings th.st-team,.pub-standings td.st-team{text-align:left}
.pub-standings td{font:600 17px/1.25 var(--number);color:var(--ink-2)}
.pub-standings td.st-team{font:700 15px/1.35 var(--serif);color:var(--ink)}
.pub-standings td.st-pts{font-size:19px;font-weight:800;color:var(--accent-deep)}
.pub-standings td.st-rank{font:900 20px/1 var(--serif);color:var(--muted)}
.pub-standings tbody tr.top-1{background:color-mix(in srgb,var(--gold) 7%,transparent)}
.pub-standings tbody tr.top-1 td.st-rank{color:var(--accent)}
.pub-standings tbody tr.top-2 td.st-rank,.pub-standings tbody tr.top-3 td.st-rank{color:var(--gold)}
.pub-standings tbody tr:hover{background:color-mix(in srgb,var(--gold) 6%,transparent)}
.pub-standings tbody tr:last-child td{border-bottom:0}
.standings-note{margin:11px 2px 0;color:var(--muted);font-size:12.5px;line-height:1.7}

/* —— 规则与试算 —— */
.rule-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.rule-card{background:var(--surface);border:1px solid var(--line);border-top:3px double var(--line-strong);padding:20px;border-radius:3px}
.rule-card .num{font:900 20px/1 var(--serif);color:var(--accent)}
.rule-card h3{margin:10px 0 8px;font-family:var(--serif);font-weight:900;font-size:17px}
.rule-card p{margin:0;color:var(--muted);font-size:15px;line-height:1.85}
.calculator{margin-top:16px;background:var(--surface-2);border:1px solid var(--line);border-radius:3px;padding:20px}
/* v2.41.1：试算区取消 1180 限宽——两台试算器以网格排布，<1200 上下单栏
   （原行为），≥1200 左右双栏并排占满，结果卡在各自栏内分布 */
.calc-wrap{display:grid;grid-template-columns:1fr;gap:14px;margin-top:16px}
.calc-wrap .calculator{margin-top:0}
@media(min-width:1200px){.calc-wrap{grid-template-columns:1fr 1fr}}
.calc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.calc-output{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line-strong);overflow:hidden;margin-top:14px}
.calc-output div{background:var(--surface);padding:18px}
.calc-output span{display:block;font-size:12px;color:var(--muted)}
.calc-output b{display:block;font:700 31px/1 var(--number);margin-top:8px}
.calc-output div:last-child b{color:var(--accent)}
.calc-rate-note{color:var(--muted);font-size:12px;line-height:1.7;margin:10px 0 0}
.warning{color:var(--danger);font-size:12px;margin:10px 0 0;display:none}
.warning.show{display:block}
.window-status{display:flex;gap:16px;align-items:flex-start;border:1px solid var(--line-strong);border-top:3px double var(--line-strong);border-radius:3px;padding:18px 20px;margin-bottom:14px;background:var(--surface)}
.window-status .ws-icon{flex:none;width:44px;height:44px;border-radius:3px;display:grid;place-items:center;background:var(--seal);color:#f7ecd2;font-family:var(--serif);font-weight:900;font-size:20px}
.window-status h3{margin:0;font-family:var(--serif);font-weight:900;font-size:22px;line-height:1.3}
.window-status .ws-main{flex:1;min-width:0}
.window-status p{margin:6px 0 0;color:var(--muted);font-size:13px;line-height:1.75}
.window-status .ws-rates{display:flex;gap:8px;flex-wrap:wrap;margin-top:11px}
.window-status .ws-rates span{border:1px solid var(--line);border-radius:2px;padding:5px 9px;font-size:12px;color:var(--muted)}
.window-status .ws-rates b{color:var(--ink)}

/* —— 转会录入候选 —— */
.candidate-list{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.candidate-list:empty{margin-top:0}
.candidate{border:1px solid var(--line-strong);background:var(--surface);border-radius:2px;padding:11px 14px;font-size:14px;font-weight:600;min-height:44px}
.candidate:hover{border-color:var(--accent);color:var(--accent-deep)}
.btn-big{min-height:52px;padding:12px 34px;font-size:16px;width:100%}
.page-editor{width:100%;border:1px solid var(--line-strong);border-radius:3px;padding:12px;background:var(--surface);font-size:14px;line-height:1.7;font-family:ui-monospace,monospace;min-height:280px}
.page-editor:focus{border-color:var(--accent);outline:none}

/* —— 触控与手机端优化 —— */
@media(max-width:900px){
  .rule-grid{grid-template-columns:1fr}
  .calc-grid{grid-template-columns:1fr 1fr}
  .calc-grid .field:last-child{grid-column:1/-1}
}
@media(max-width:620px){
  .btn{min-height:44px}
  .btn-danger,.btn-ghost{min-height:44px}
  .position-chip{min-height:44px}
  .calc-grid{grid-template-columns:1fr}
  .calc-output{grid-template-columns:1fr}
  .calc-output div{padding:14px}
  .window-status{padding:15px}
  .window-status h3{font-size:19px}
  .rule-card{padding:16px}
  .pub-standings th,.pub-standings td{padding:9px 4px}
  .pub-standings td.st-team{font-size:13px}
  .standings-table input[type="number"]{min-height:44px;font-size:16px}
  .standings-table input[type="text"],.standings-table input[type="password"]{min-height:44px;font-size:16px}
  .toolbar input,.toolbar select{font-size:16px}
  .toolbar input[type="password"]{flex:1 1 100%}
  .toolbar select{min-height:44px}
  .field input,.field select{font-size:16px}
  .candidate{flex:1 1 100%;text-align:left}
}
@media(max-width:900px){
  /* .app 内边距与 .player-grid 列数已流体化（v2.37.0），此处仅保留筛选行堆叠 */
  /* v2.41.1：筛选首行改弹性排布后，≤900 改纵向堆叠、搜索钮整行（原手机行为） */
  .query-filter-row.primary{flex-direction:column}
  .query-filter-row.primary .qf-team,.query-filter-row.primary .qf-range,.query-filter-row.primary .qf-sort{flex:0 0 auto}
  .query-actions{padding-bottom:0}
  .query-actions .btn{width:100%}
  .query-filter-row.secondary{grid-template-columns:1fr}
}
@media(max-width:620px){
  .app{padding:10px 12px 88px}
  .mast{grid-template-columns:minmax(0,1fr) auto;padding:16px 2px 15px;gap:12px}
  .vertical-note{display:none}
  .mast h1{font-size:32px;line-height:1.08}
  .mast-sub{font-size:10px;margin-top:9px}
  .temple{width:56px}
  .stamp{padding-left:11px;font-size:9px}
  .stamp strong{font-size:23px}
  /* —— v2.39.1：手机页眉几何定型（修复登录态下标题列被挤成 0 宽、印章压庙宇、
     英文副题逐词竖排）—— .mast-side 改定宽 150px 换行流：首行庙宇 + 计数，
     账号区整行换至其下右对齐；标题列由此获得确定宽度（390 档约 200px），
     大标题按词组两行、印章随第二行、副题至多两行，三者不再相压。
     仅前台（body.front），后台页眉结构不同、不受此规则影响。 */
  body.front .mast-side{flex-wrap:wrap;width:150px;justify-content:flex-end;row-gap:10px}
  body.front .auth-area{flex:1 1 100%;margin-top:2px;justify-content:flex-end}
  /* —— v2.39.2：手机前台页眉压缩（用户实拍裁定：v2.39.1 页眉在 390 档高达
     236.6px，主因账号两钮在 150px 侧栏内上下摞叠）—— 页眉改横向弹性排布：
     标题列占余宽（30px 两行 + 印章随行缩小 + 英文副题两行保留），侧栏以
     display:contents 摊平，庙宇与计数卡居首行标题之右，账号区整行移至
     次行——已登录信息与修改密码、退出登录两枚小钮（32px 高、13px 字）
     同行并列、不再摞叠。目标 390 档页眉总高 ≤170px。作用域以 .auth-area
     锚定：后台登录页同为 body.front 但无账号区，不受影响；桌面端不动。 */
  body.front .mast:has(.auth-area){display:grid;grid-template-columns:minmax(0,1fr) 150px;align-items:start;gap:8px 10px;padding:11px 2px 11px}
  body.front .mast:has(.auth-area) .mast-main{grid-column:1;grid-row:1/span 2}
  body.front .mast:has(.auth-area) h1{font-size:30px}
  body.front .mast:has(.auth-area) .mast-sub{margin-top:5px}
  body.front .mast:has(.auth-area) .mast-seal{width:30px;height:30px;margin-left:8px;padding-top:4px}
  body.front .mast:has(.auth-area) .mast-seal i{font-size:12px;letter-spacing:1px}
  body.front .mast:has(.auth-area) .mast-side{display:contents}
  body.front .mast:has(.auth-area) .temple{width:40px}
  body.front .mast:has(.auth-area) .stamp{padding:7px 10px;line-height:1.55}
  body.front .mast:has(.auth-area) .stamp strong{font-size:20px}
  body.front .mast:has(.auth-area) .auth-area{grid-column:1/-1;grid-row:3;margin-top:0;flex-wrap:nowrap;justify-content:flex-end;gap:6px}
  body.front .mast:has(.auth-area) .temple{grid-column:2;grid-row:1;justify-self:start}
  body.front .mast:has(.auth-area) .stamp{grid-column:2;grid-row:1;justify-self:end}
  body.front .mast:has(.auth-area) .auth-who{white-space:nowrap}
  body.front .mast:has(.auth-area) .auth-area .btn,body.front .mast:has(.auth-area) .auth-area .btn-ghost{display:inline-flex;align-items:center;justify-content:center;min-height:32px;padding:6px 10px;font-size:13px}
  /* —— v2.42.3：SoFIFA 品牌块手机端落位（用户实拍圈定）—— 不再作账号区
     之下的静态整行（v2.42.2 形态，额外增高约 55px，用户嫌页眉占地过大），
     改落页眉网格右栏（150px）第二行：计数块（庙宇 + 计数，第一行）之下、
     账号行（第三行）之上，纵向叠放（logo 30px 在上、文字在其下）、栏内
     居中。标题列跨第一、二行，右栏两行合计（计数约 62px + 行距 8 + 品牌
     块约 55px ≈ 125px）与标题列高（约 105px）相近，品牌块基本被既有空位
     吸收：较 v2.42.2 手机端页眉总高回落约 40px（CSS 盒模型推算，未渲染
     实测，用户真机验收）。 */
  body.front .mast:has(.auth-area) .sofifa-mast{position:static;transform:none;grid-column:2;grid-row:2;justify-self:center}
  body.front .mast:has(.auth-area) .sofifa-mast img{width:30px;height:30px}
  .section-head{display:block;margin:25px 0 11px;padding-bottom:9px}
  .position-options{gap:5px}
  .position-chip{flex:1 0 calc(20% - 5px);padding:8px 5px;text-align:center}
  .query-field{padding:10px}
  .toolbar{padding:8px;gap:7px}
  .toolbar input[type="text"],.toolbar input:not([type]){flex:1 1 100%}
  .value-rank-head{display:none}
  .value-rank-row{grid-template-columns:38px minmax(0,1fr) 48px;gap:5px 10px;padding:13px 8px}
  .value-rank-row::before{left:8px;max-width:calc(100% - 16px)}
  .value-rank-number{grid-row:1/3;font-size:25px}
  .value-rank-team strong{font-size:14px}
  .value-rank-value{grid-column:2;text-align:left}
  .value-rank-value b{display:inline;font-size:23px}
  .value-rank-value small{display:inline;margin:0 0 0 5px}
  .value-rank-count{grid-column:3;grid-row:1/3;align-self:center}
  .value-rank-count b{font-size:20px}
  .ledger-entry{grid-template-columns:1fr;gap:8px;padding:14px 2px}
  .ledger-move{gap:10px}
  .ledger-route{line-height:1.7}
  .ledger-price b{font-size:22px}
  .profile-stats{grid-template-columns:1fr}
  .profile-stats div{padding:14px}
  .data-note{display:block}
  .data-note span{display:block;margin-top:5px}
  .modal{padding:10px}
  .sheet{padding:18px;border-radius:5px}
  .profile{grid-template-columns:58px 1fr}
  .profile .rating{width:58px;height:62px;font-size:30px}
  .profile h2{font-size:20px}
  /* v2.45.7：手机端回到顶部按钮改放左下、抬高，避开表格右侧的操作列 */
  .back-to-top{left:max(14px,env(safe-area-inset-left));right:auto;bottom:max(76px,env(safe-area-inset-bottom));width:44px;height:44px}
  /* 后台多列表格手机端改为卡片式（v2.45.7）：8 列横向挤压无法阅读，逐行叠放、字段带标签 */
  table.admin-cards,table.admin-cards tbody,table.admin-cards tr,table.admin-cards td{display:block;width:100%}
  table.admin-cards thead{display:none}
  table.admin-cards tbody tr{border:1px solid var(--line-strong);border-radius:6px;margin-bottom:12px;padding:4px 12px}
  table.admin-cards td{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:7px 0;border-bottom:1px solid var(--line);text-align:right}
  table.admin-cards td:last-child{border-bottom:0}
  table.admin-cards td::before{content:attr(data-label);flex:none;font-size:13px;font-weight:700;color:var(--muted);text-align:left}
  table.admin-cards td .btn-danger,table.admin-cards td .btn-ghost{flex:1 1 120px;min-height:44px}
  table.admin-cards td[data-label="操作"]{flex-wrap:wrap}
}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}

/* —— v2.5.0：登录入口 / 门控占位 / 记住我 / 价格曲线 —— */
.auth-area{margin-top:12px;display:flex;gap:8px;align-items:center;justify-content:flex-end;flex-wrap:wrap}
.auth-who{color:var(--muted);font-size:12px;letter-spacing:.04em}
.auth-area a.btn-ghost{text-decoration:none}
.login-title{margin:0 0 6px;font-family:var(--serif);font-weight:900;font-size:24px}
.remember-row{display:flex;align-items:center;gap:8px;margin-top:14px;font-size:13px;color:var(--ink-2);cursor:pointer;min-height:32px}
.remember-row input{width:18px;height:18px;accent-color:var(--accent);flex:none}
.gate-note{border:1px dashed var(--line-strong);border-radius:3px;padding:30px 20px;text-align:center;background:var(--surface)}
.gate-note h3{margin:0 0 8px;font-family:var(--serif);font-size:18px}
.gate-note p{margin:0 auto 16px;color:var(--muted);font-size:13px;line-height:1.7;max-width:420px}
.price-chart{margin-top:2px}
.price-chart svg{width:100%;height:auto;display:block}
.price-chart .pc-axis{stroke:var(--line-strong);stroke-width:1}
.price-chart .pc-grid{stroke:var(--line);stroke-width:1;stroke-dasharray:3 4}
.price-chart .pc-line{fill:none;stroke:var(--accent);stroke-width:2}
.price-chart .pc-dot{fill:var(--surface);stroke:var(--accent);stroke-width:2}
.price-chart .pc-label{fill:var(--muted);font-size:11px;font-family:var(--number)}
.price-points{display:grid;gap:5px;margin-top:10px}
.price-points>div{display:flex;justify-content:space-between;gap:10px;font-size:12px;color:var(--muted)}
.price-points b{color:var(--ink);font-family:var(--number);font-weight:700}
.price-flat{color:var(--muted);font-size:12px;line-height:1.7;margin:8px 0 0}

/* —— v2.7.0：页签结构 + 视觉品质提升（公开站与后台统一） —— */
:root{
  --shadow-sm:0 1px 2px rgba(74,66,48,.05),0 6px 18px rgba(74,66,48,.06);
  --shadow-md:0 2px 4px rgba(74,66,48,.06),0 14px 34px rgba(74,66,48,.10);
  --silver:#98937f;--bronze:#a26a35;
}

/* 页签栏：横向可滑、吸顶、选中态明确 */
.tab-bar{position:sticky;top:0;z-index:40;display:flex;gap:8px;overflow-x:auto;padding:12px 2px 10px;background:var(--bg);border-bottom:1px solid var(--line-strong);-webkit-overflow-scrolling:touch;scrollbar-width:none}
.tab-bar::-webkit-scrollbar{display:none}
.tab-btn{flex:none;min-height:42px;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-2);border-radius:3px;padding:9px 18px;font-size:13.5px;font-weight:700;letter-spacing:.04em;white-space:nowrap;box-shadow:var(--shadow-sm);transition:background .16s,border-color .16s,color .16s,box-shadow .16s,transform .08s}
.tab-btn:hover{border-color:var(--accent);color:var(--accent-deep)}
.tab-btn:active{transform:translateY(1px)}
.tab-btn.active{background:var(--accent);border-color:var(--accent);color:#f7ecd2;box-shadow:0 4px 14px rgba(92,71,30,.28)}
.tab-btn:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.admin-tabs{margin-top:14px}

/* 页签页：一次只显示一页 */
.tab-pane{display:none}
.tab-pane.active{display:block;animation:paneIn .26s ease both}
@keyframes paneIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.tab-pane .section-head{margin-top:26px}

/* 卡片与容器：细腻边框 + 轻微阴影层次 */
.panel,.value-ranking,.table-wrap,.calculator,.rule-card{box-shadow:var(--shadow-sm)}
.player-card{box-shadow:var(--shadow-sm);transition:border-color .16s,box-shadow .16s,transform .16s,background .16s}
.player-card:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}
.mast h1{letter-spacing:.03em}
.stamp{background:color-mix(in srgb,var(--gold) 5%,var(--surface));border:1px solid var(--line);border-radius:3px;padding:10px 16px}
.stamp strong{letter-spacing:.02em}

/* 按钮与输入：质感统一（选中/按压/焦点） */
.btn,.btn-ghost,.btn-danger{transition:background .16s,border-color .16s,color .16s,box-shadow .16s,transform .08s}
.btn{box-shadow:0 2px 8px rgba(92,71,30,.18)}
.btn:active,.btn-ghost:active,.btn-danger:active{transform:translateY(1px)}
.btn:focus-visible,.btn-ghost:focus-visible,.btn-danger:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
input,select,textarea{transition:border-color .16s,box-shadow .16s}
.position-chip{transition:border-color .16s,background .16s,color .16s,transform .08s}
.position-chip:active{transform:translateY(1px)}

/* 表格：斑马纹与行高呼吸感（悬停最后声明，保证优先） */
.pub-standings tbody tr:nth-child(even){background:color-mix(in srgb,var(--ink) 2.2%,transparent)}
.standings-table tbody tr:nth-child(even){background:color-mix(in srgb,var(--ink) 2.2%,transparent)}
.pub-standings tbody tr.top-2{background:color-mix(in srgb,var(--silver) 7%,transparent)}
.pub-standings tbody tr.top-3{background:color-mix(in srgb,var(--bronze) 6%,transparent)}
.pub-standings tbody tr:hover{background:color-mix(in srgb,var(--gold) 7%,transparent)}
.standings-table tbody tr:hover{background:color-mix(in srgb,var(--gold) 7%,transparent)}

/* 前三名：金 / 银 / 铜细节（克制用色） */
.pub-standings tbody tr.top-2 td.st-rank{color:var(--silver)}
.pub-standings tbody tr.top-3 td.st-rank{color:var(--bronze)}
.value-rank-row.rank-2{background:color-mix(in srgb,var(--silver) 5%,transparent)}
.value-rank-row.rank-3{background:color-mix(in srgb,var(--bronze) 4%,transparent)}
.value-rank-row.rank-2 .value-rank-number{color:var(--silver)}
.value-rank-row.rank-3 .value-rank-number{color:var(--bronze)}

/* 空状态与登录占位：补齐设计感 */
.empty{position:relative}
.empty::before{content:"";display:block;width:9px;height:9px;margin:0 auto 14px;background:var(--accent);transform:rotate(45deg);opacity:.55;animation:emptyPulse 1.8s ease-in-out infinite}
@keyframes emptyPulse{0%,100%{opacity:.28}50%{opacity:.7}}
.gate-note{padding:42px 24px;background:linear-gradient(180deg,color-mix(in srgb,var(--gold) 5%,var(--surface)),var(--surface));box-shadow:var(--shadow-sm)}
.gate-note::before{content:"";display:block;width:11px;height:11px;margin:0 auto 16px;background:var(--accent);transform:rotate(45deg)}
.player-grid .gate-note,.value-ranking .gate-note{grid-column:1/-1}

@media(max-width:620px){
  .tab-bar{padding:10px 2px 8px}
  .tab-btn{min-height:44px;padding:10px 15px;font-size:13px}
  .stamp{padding:8px 10px}
  .tab-pane .section-head{margin-top:22px}
}
@media(prefers-reduced-motion:reduce){
  .tab-pane.active{animation:none}
  .empty::before{animation:none}
  .player-card:hover{transform:none}
}

/* —— v2.7.0 补：比分录入一行式紧凑布局（[主队] : [客队]　比分 [主] : [客]） —— */
.match-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.mt-teams{display:flex;align-items:center;gap:8px;flex:1 1 320px;min-width:0}
.mt-team{flex:1 1 0;min-width:0;height:48px;border:1px solid var(--line-strong);background:var(--surface);padding:0 10px;border-radius:3px;font-size:16px;font-weight:600;outline:none;text-overflow:ellipsis}
.mt-team:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.mt-score-group{display:flex;align-items:center;gap:8px;flex:none}
.mt-colon{flex:none;font:700 20px/1 var(--number);color:var(--muted)}
.mt-score-label{flex:none;font-size:13px;font-weight:700;letter-spacing:.08em;color:var(--muted)}
.mt-score{flex:none;width:62px;height:48px;border:1px solid var(--line-strong);background:var(--surface);border-radius:3px;padding:0 4px;text-align:center;font:700 20px/1 var(--number);outline:none}
.mt-score:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.match-actions{align-items:flex-end}
.match-actions .field{flex:0 1 210px;min-width:170px}
@media(max-width:620px){
  .match-row{gap:8px}
  .mt-teams{flex-basis:100%}
  .mt-team{height:46px}
  .mt-score{width:56px;height:46px;font-size:18px}
  .match-actions .field{flex:1 1 100%}
}

/* —— v2.12.0：比分录入防重复——对阵对照信息（两方向各一行） —— */
.fixture-info{margin-top:12px;border-top:1px dashed var(--line-strong);padding-top:10px}
.fixture-info p{margin:0 0 4px;font-size:13.5px;line-height:1.7;color:var(--ink-2)}
.fixture-info p:last-child{margin-bottom:0}
.fixture-info p.dup{color:var(--danger);font-weight:700}
.btn[disabled]{opacity:.45;cursor:not-allowed;box-shadow:none}

/* —— v2.9.0：账号角色徽标与角色切换下拉 —— */
.role-badge{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:2px;background:var(--accent);border:1px solid var(--accent);color:#f7ecd2;font-size:11px;font-weight:700;letter-spacing:.08em;vertical-align:2px}
.role-badge-owner{background:var(--ink);border-color:var(--accent);color:#e8cf8f}

/* ================================================================
   v2.26.0
   A. 手机积分榜球队格改双行（≤620px）：第一行队徽+队名，第二行赞助商；
      球队列收窄，释放的宽度分给数据列，短名行不再有大片留白。
      列宽与赞助商分行样式并入文件末尾既有的 ≤620px 积分榜区。
   B. 球员池公开留空：页签为空状态面板（.empty 既有样式），无新增样式。
   D. 待转会：账本「待转会」徽标、行底色与生效日期行、后台异常标记。
   ================================================================ */
.ledger-tag.pending{background:var(--gold);border-color:var(--gold);color:#f7ecd2}
.pending-entry{background:color-mix(in srgb,var(--gold) 7%,transparent)}
.pending-when{color:var(--accent-deep);font-size:12px;font-weight:700;margin-top:2px}
.pending-blocked{color:var(--danger);font-weight:700}
.pending-return-tag{display:inline-block;padding:2px 8px;border:1px solid #bcd8bc;background:#e6f0e6;color:#2f6b33;border-radius:2px;font-size:12px;font-weight:700;white-space:nowrap}
.pending-chain-tag{display:inline-block;padding:2px 8px;border:1px solid #b9c8e8;background:#e8eefb;color:#2c4a8a;border-radius:2px;font-size:12px;font-weight:700;white-space:nowrap}
.role-select{min-height:38px;font-size:14px}
#viewerNote{padding:14px 16px;text-align:left;margin:0 0 14px;line-height:1.7;font-size:13.5px;color:var(--ink-2)}

/* —— v2.10.0：日期框 iOS 修复 ——
   iOS Safari 的 input[type=date] 有固有最小宽度且文字居中，不处理会溢出卡片、与其它控件不对齐；
   去掉原生外观后宽度/高度/对齐与普通输入一致。 */
.field input[type="date"]{-webkit-appearance:none;appearance:none;width:100%;min-width:0;max-width:100%;min-height:46px;text-align:left}
.field input[type="date"]::-webkit-date-and-time-value{text-align:left;margin:0}
.field input[type="date"]::-webkit-calendar-picker-indicator{margin-left:8px;flex:none}
.match-actions .field{flex:1 1 210px;min-width:0;max-width:100%}
.match-actions .field input[type="date"]{display:block}
@media(max-width:620px){
  .match-actions .field{flex:1 1 100%}
}

/* —— v2.10.0：球队名额表（系统自动判定） —— */
.caps-table th:first-child,.caps-table td.caps-team{white-space:nowrap;min-width:108px}
.caps-table td.caps-team{font-weight:700;color:var(--ink)}
.caps-table td.caps-status{font-weight:600}
.fa-toggle{display:inline-flex;align-items:center;gap:7px;min-height:44px;cursor:pointer;font-weight:600;white-space:nowrap}
.fa-toggle input[type="checkbox"]{width:20px;height:20px;margin:0;accent-color:var(--accent);flex:none}
@media(max-width:620px){
  /* 小屏改为卡片式行：球队名整行不换行，其余字段带标签分区排布，不横滑、不溢出 */
  .caps-table,.caps-table tbody,.caps-table tr,.caps-table td{display:block;width:100%}
  .caps-table thead{display:none}
  .caps-table tr{border-bottom:1px solid var(--line);padding:12px 14px 14px}
  .caps-table tbody tr:hover{background:transparent}
  .caps-table td{border-bottom:0;padding:5px 0;display:flex;align-items:center;justify-content:space-between;gap:14px;text-align:right}
  .caps-table td::before{content:attr(data-label);flex:none;color:var(--muted);font-size:12px;font-weight:700;letter-spacing:.08em}
  .caps-table td.caps-team{display:block;padding:0 0 8px;font-size:16.5px;text-align:left;overflow:hidden;text-overflow:ellipsis}
  .caps-table td.caps-status{justify-content:space-between;text-align:right}
  .caps-table td input[type="text"]{flex:1 1 auto;min-width:0;width:auto!important}
  .caps-table td.caps-op{padding-top:10px}
  .caps-table td.caps-op::before{content:none}
  .caps-table td.caps-op .btn{width:100%;min-height:46px}
}

/* —— v2.25.2：名额管理状态呈现与公开站队盒统一 ——
   人数与有效上限成组呈现（仿队盒「N 人 / 上限 M 人」）；注册状态按文案着色，
   色值与公开站 .team-box-status 完全相同的一组 --status-* 变量；
   门将不足警示为状态格内的橙色小字（状态文案本身即该句时前端不重复渲染）。 */
.caps-table td .caps-count b{font:700 20px/1 var(--number);color:var(--ink)}
.caps-table td .caps-count small{color:var(--muted);font-size:11.5px;margin-left:4px;white-space:nowrap}
.caps-table td.caps-status{font-weight:700}
.caps-status-box{display:inline-flex;flex-direction:column;gap:2px}
.caps-status-main.st-open{color:var(--status-open)}
.caps-status-main.st-full{color:var(--status-full)}
.caps-status-main.st-over{color:var(--status-over)}
.caps-status-main.st-warn{color:var(--status-free)}
.caps-gk-warn{font-size:11.5px;font-weight:600;color:var(--status-free);white-space:nowrap}
.caps-rule-warn{font-size:11.5px;font-weight:600;color:var(--status-free);white-space:nowrap}
/* —— v2.33.0：名额出勤推导总表 + 整队批量调价 —— */
.caps-table td.caps-team .caps-basis{display:block;margin-top:2px;font-size:11px;font-weight:400;color:var(--muted);white-space:normal}
.caps-manual{display:inline-block;margin-left:6px;padding:1px 6px;border:1px solid var(--status-free);border-radius:3px;font-size:11px;font-weight:700;color:var(--status-free);vertical-align:1px}
.caps-att{display:inline-flex;align-items:center;gap:4px}
.caps-att-sep{color:var(--muted)}
.caps-att b{font:700 15px/1 var(--number);color:var(--ink);min-width:2ch;text-align:center}
.caps-final{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}
#bpBody tr.bp-bad{background:#f7e8e4}
#bpBody tr.bp-bad input{border-color:var(--status-over);outline-color:var(--status-over)}
#bpBody tr.bp-bad [data-bp-status]{color:var(--status-over);font-weight:600;font-size:12px}
.bp-pend{font-size:12px;color:var(--status-free);font-weight:600}
.bp-result{margin-top:12px;font-size:13.5px;color:var(--ink-2)}
.bp-result ul{margin:6px 0 0;padding-left:20px}
.bp-result .bp-ok{font-weight:700;color:var(--status-open)}
.bp-result .bp-fail{font-weight:700;color:var(--status-over)}
/* —— v2.33.1：球员价值页头牌设置 —— */
.bp-toupai-bar label{font-weight:700;color:var(--ink)}
.bp-toupai-note{margin:0 0 12px;font-size:12.5px;color:var(--muted)}
@media(max-width:620px){
  .caps-table td .caps-count b{font-size:18px}
  .caps-status-box{align-items:flex-end}
}

/* —— v2.13.0：积分榜出勤列 + 后台出勤管理 —— */
/* 出勤列加入后重新平衡列宽，球队列仍留足宽度，移动端沿用 .table-wrap 横滑 */
.pub-standings col.st-c-rank{width:8%}
.pub-standings col.st-c-num{width:6.5%}
.pub-standings col.st-c-diff{width:9%}
.pub-standings col.st-c-att{width:11%}
.pub-standings col.st-c-pts{width:9%}
.pub-standings td.st-att b{font:700 17px/1.2 var(--number);color:var(--ink)}
.pub-standings td.st-att small{display:block;margin-top:2px;font-size:10.5px;font-weight:600;color:var(--muted);letter-spacing:.02em;white-space:nowrap}
.att-table td.att-team{font-weight:700;color:var(--ink);white-space:nowrap}
.att-table .att-num{display:inline-block;min-width:2ch;text-align:center;font:700 20px/1 var(--number);color:var(--ink);vertical-align:middle}
.att-table .att-total{color:var(--accent-deep)}
.att-btns{display:inline-flex;gap:8px;margin-left:12px;vertical-align:middle}
.att-btn{min-width:52px;min-height:44px;padding:8px 14px;border:1px solid var(--line-strong);border-radius:4px;background:var(--accent);color:#fff;font:700 15px/1 var(--number);cursor:pointer}
.att-btn:active{transform:translateY(1px)}
.att-btn.att-minus{background:var(--surface);color:var(--ink-2)}
.att-btn:disabled{opacity:.5;cursor:wait}
@media(max-width:620px){
  .att-btns{margin-left:6px;gap:6px}
  .att-btn{min-width:46px;padding:8px 10px}
}

/* —— v2.13.0 补充：积分榜一键生成图片 —— */
.section-head .btn{flex:none}
.sheet-img{width:min(640px,100%)}
.sheet-img img{display:block;width:100%;height:auto;margin:10px 0 2px;border:1px solid var(--line);background:#f4f1ea}
#imgDownload{text-decoration:none}
@media(max-width:620px){
  .section-head{flex-wrap:wrap}
  .section-head .btn{padding:9px 14px}
}

/* —— v2.14.0：出勤管理队徽 —— */
.att-crest{width:28px;height:28px;object-fit:contain;vertical-align:middle;margin-right:8px}

/* —— v2.15.0：全站队徽统一接入 —— */
/* 凡显示球队名处（积分榜 / 身价排行 / 球队名单 / 球员卡片与详情 / 交易账本 / 后台各表）统一在队名前置队徽，
   映射缺失或图片加载失败时不显示、不占位。尺寸变体：默认 20px、.crest-lg 24px、.crest-sm 16px；
   出勤管理的 .att-crest 沿用 v2.14.0 的 28px（组合选择器保证优先级）。 */
.crest{width:20px;height:20px;object-fit:contain;vertical-align:-4px;margin-right:6px}
.crest-lg{width:24px;height:24px;vertical-align:-5px}
.crest-sm{width:16px;height:16px;vertical-align:-3px;margin-right:5px}
.crest.att-crest{width:28px;height:28px;vertical-align:middle;margin-right:8px}
.roster-head{display:flex;align-items:center;gap:8px;margin:0 0 14px;color:var(--ink)}
.roster-head strong{font-family:var(--serif);font-weight:700;font-size:17px}
.roster-head span{color:var(--muted);font-size:12.5px}
.roster-head:empty{display:none}

/* —— v2.17.0：球队名单全景铺开 + 点击展开；身价排行并入主页积分榜下方 —— */
/* 全部球队盒子网格铺开：盒子纵向略高，队徽/队名、人数与总身价、注册状态小字三层信息 */
/* 球队盒子网格（v2.37.0 流体化，v2.41.2 修正）：auto-fill + minmax 自适应列数。
   v2.41.2：下限由 260px 抬至 280px——260px 时 2560 宽屏摊出 9 列、盒宽仅 261px，
   脱离改版前基准家族（v2.34 桌面：4 列 × 287.5px），且人数行最小内容宽溢出
   （机制见下方 .team-box-nums 注）；280px 下限使各档盒宽回到约 283–347px。
   ≤1100px 档下限放宽至 250px，维持该档 3 列家族；≤620px 显式列数在下方断点保留 */
.team-box-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(280px,100%),1fr));gap:10px}
@media(max-width:1100px){
  .team-box-grid{grid-template-columns:repeat(auto-fill,minmax(min(250px,100%),1fr))}
}
.team-box-grid .gate-note,.team-box-grid .empty{grid-column:1/-1}
.team-box{display:flex;flex-direction:column;gap:10px;width:100%;min-height:132px;padding:15px 16px 13px;background:var(--surface);border:1px solid var(--line);border-radius:3px;text-align:left;box-shadow:var(--shadow-sm);transition:border-color .16s,box-shadow .16s,background .16s,transform .08s}
.team-box:hover{border-color:var(--line-strong);box-shadow:var(--shadow-md)}
.team-box:active{transform:translateY(1px)}
.team-box:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.team-box.active{border-color:var(--accent);background:color-mix(in srgb,var(--gold) 6%,var(--surface))}
.team-box-top{display:flex;align-items:center;gap:8px;min-width:0}
.team-box-top strong{flex:1;min-width:0;font-family:var(--serif);font-weight:900;font-size:16.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.team-box-arrow{flex:none;font-style:normal;font-size:19px;line-height:1;color:var(--muted);transition:transform .25s ease}
.team-box.active .team-box-arrow{transform:rotate(90deg);color:var(--accent)}
.team-box-nums{display:flex;justify-content:space-between;align-items:flex-end;gap:10px;margin-top:auto}
.team-box-count b{font:700 26px/1 var(--number);color:var(--ink)}
.team-box-count small,.team-box-value small{color:var(--muted);font-size:11px;margin-left:4px;white-space:nowrap}
.team-box-value{text-align:right}
/* 总身价防出框（v2.41.2）：人数行 .team-box-nums 的最小内容宽约 237px（人数块
   约 150px + 间隔 10px + 总身价块约 77px，均为 nowrap 文案的不可收缩宽）。
   flex 子项默认 min-width:auto、不能收缩到最小内容以下，当盒内宽小于 237px 时
   space-between 仍按最小内容排布，右侧总身价数字被顶出盒外——v2.41.1 在
   2560 宽屏摊出 9 列、盒宽 261px（内宽 223px）时实测出框 21.6px，67800 等
   大数值同理。主修复在网格层：下限抬至 280px 后主要宽度档盒宽 ≥283px
   （内宽 ≥245px，与改版前 287.5px 盒、249.5px 内宽的余量同族），排布与
   改版前逐项一致（两行式由宽度压力自然折行形成，不改结构）。仅剩
   800–940px 一档：250px 下限的 3 列盒宽 254–285px、内宽最低约 216px，
   该档放开人数小字折行（white-space:normal），最小内容随之塌缩、不再出框；
   该档盒高略增，属窄屏优雅降级，桌面与手机两端形态不受影响 */
@media(min-width:800px) and (max-width:940px){
  .team-box-count small{white-space:normal}
}
.team-box-value b{font:700 22px/1 var(--number);color:var(--gold)}
.team-box-status{font-size:12px;font-weight:700;letter-spacing:.03em}
.team-box-status.st-open{color:var(--status-open)}
.team-box-status.st-full{color:var(--status-full)}
.team-box-status.st-over{color:var(--status-over)}
.team-box-status.st-warn{color:var(--status-free)}
/* 续约金（v2.29.3）：球队框内状态行上方一行，标签置左、金额置右，与人数/总身价行同构 */
.team-box-renewal{display:flex;justify-content:space-between;align-items:baseline;gap:10px;min-width:0}
.team-box-renewal small{color:var(--muted);font-size:11px;white-space:nowrap;min-width:0;overflow:hidden;text-overflow:ellipsis}
.team-box-renewal b{font:700 17px/1 var(--number);color:var(--ink);flex:none}
/* 头牌标记（v2.29.3）：金棕小标签，用于迷你卡片与球员详情标题 */
.toupai-tag{display:inline-block;margin-left:7px;padding:1px 6px;border:1px solid color-mix(in srgb,var(--gold) 55%,var(--line));border-radius:2px;background:color-mix(in srgb,var(--gold) 13%,var(--surface));color:var(--accent-deep);font-size:10.5px;font-weight:700;letter-spacing:.08em;vertical-align:2px;white-space:nowrap}
.profile h2 .toupai-tag{font-size:11.5px;vertical-align:3px}
/* 展开抽屉：整行宽，grid-template-rows 0fr→1fr 平滑抽拉（与 v1 球队目录抽屉同手法） */
.team-drawer{display:grid;grid-template-rows:0fr;margin-top:0;border:1px solid transparent;border-radius:3px;background:var(--surface);overflow:hidden;visibility:hidden;transition:grid-template-rows .38s ease,margin-top .38s ease,border-color .38s ease,visibility 0s linear .38s}
.team-drawer.open{grid-template-rows:1fr;margin-top:10px;border-color:var(--line-strong);box-shadow:var(--shadow-sm);visibility:visible;transition:grid-template-rows .38s ease,margin-top .38s ease,border-color .38s ease,visibility 0s linear 0s}
.drawer-inner{overflow:hidden;min-height:0;opacity:0;transition:opacity .3s ease}
.team-drawer.open .drawer-inner{opacity:1}
.drawer-head{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:14px 16px 2px}
.drawer-head strong{font-family:var(--serif);font-weight:900;font-size:17px}
.drawer-head>span{color:var(--muted);font-size:12.5px}
.drawer-head .team-box-status{font-size:12.5px}
/* 续约金明细（v2.29.3）：抽屉头部下方一行，头牌底价与工资构成，与头部小字同调 */
.drawer-renewal{padding:6px 16px 0;color:var(--ink-2);font-size:12.5px;line-height:1.6}
/* 展开区球员紧凑小卡：明显小于查询卡，多列网格 */
/* 小卡网格（v2.37.0 流体化）：auto-fill + minmax 自适应列数（约 220px 起） */
.mini-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(220px,100%),1fr));gap:8px;padding:12px 16px 16px}
.mini-grid .empty{grid-column:1/-1}
.mini-card{display:grid;grid-template-columns:36px minmax(0,1fr) auto;gap:8px;align-items:center;width:100%;padding:8px 10px;background:var(--surface);border:1px solid var(--line);border-radius:3px;text-align:left;box-shadow:var(--shadow-sm);transition:border-color .16s,box-shadow .16s}
.mini-card:hover{border-color:var(--line-strong);box-shadow:var(--shadow-md)}
.mini-card:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.mini-rating{display:grid;place-items:center;width:36px;height:38px;border:1px solid color-mix(in srgb,var(--gold) 55%,var(--line));background:color-mix(in srgb,var(--gold) 13%,var(--surface));color:var(--accent-deep);font:900 18px/1 var(--serif)}
.mini-main{min-width:0}
.mini-main strong{display:block;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mini-en{display:block;margin-top:1px;font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mini-main small{display:block;margin-top:2px;color:var(--muted);font-size:11px;font-weight:700;letter-spacing:.06em}
.mini-price{text-align:right}
.mini-price b{display:block;font:700 16px/1 var(--number);color:var(--gold);font-variant-numeric:tabular-nums}
/* 国旗小图（flag-icons SVG）：16×12，轻微圆角，替代 emoji 国旗（Windows 无 emoji 国旗字体） */
.flag-ico{width:16px;height:12px;border-radius:2px;object-fit:cover;vertical-align:-1px;margin-right:5px;border:1px solid rgba(30,29,26,.14);background:var(--surface-2)}
.mini-price small{font-size:10px;color:var(--muted)}
/* 球队盒子 / 小卡列数已由 auto-fill 流体决定（v2.37.0；v2.41.2 抬高盒子下限至
   280px、≤1100 档放宽至 250px 维持列数家族），原 1100 / 900 两档
   写死列数的断点撤销；≤620px 的显式列数（盒子 2 列、小卡 2 列）仍保留在下方断点 */
@media(max-width:620px){
  .team-box-grid{grid-template-columns:repeat(2,1fr);gap:8px}
  .team-box{min-height:122px;padding:12px;gap:8px}
  .team-box-top strong{font-size:14.5px}
  .team-box-count b{font-size:22px}
  .team-box-value b{font-size:18px}
  .mini-grid{grid-template-columns:repeat(2,1fr);gap:7px;padding:10px 10px 12px}
  .drawer-head{padding:12px 10px 2px}
}

/* —— v2.18.0：名单抽屉改为网格子项，在被点球队所在行内原地整行展开 —— */
.team-box-grid>.team-drawer{grid-column:1/-1}
.team-box-grid>.team-drawer.open{margin-top:0}

/* —— v2.19.0：积分榜前六凸显 + 赞助商 + 直播奖金列；后台球队资料维护 —— */
/* 12 列重新平衡列宽：球队列保留约 22%，直播奖金列位于「分」与「出勤」之间 */
.pub-standings col.st-c-rank{width:7.5%}
.pub-standings col.st-c-num{width:6%}
.pub-standings col.st-c-diff{width:8%}
.pub-standings col.st-c-pts{width:8%}
.pub-standings col.st-c-bonus{width:8.5%}
.pub-standings col.st-c-att{width:10%}
.pub-standings td.st-bonus{font:700 16px/1.2 var(--number);color:var(--ink-2)}
.pub-standings td.st-team .st-sponsor{font-size:11.5px;font-weight:600;color:var(--muted);letter-spacing:.02em}
/* 前六名（奖金区）：整行统一淡金底，与第 7 名开外明确可辨；名次数字 1–3 名保留金 / 银 / 铜（前序规则），4–6 名着金棕 */
.pub-standings tbody tr.prize-row{background:color-mix(in srgb,var(--gold) 10%,transparent)}
.pub-standings tbody tr.prize-row:not(.top-1):not(.top-2):not(.top-3) td.st-rank{color:var(--accent)}
.standings-note.prize-note{color:var(--accent-deep);font-weight:700}
/* 后台出勤管理内的球队资料小表单（赞助商 + 直播奖金），紧随每队出勤行 */
.att-table tr.att-prof-row td{padding-top:6px;padding-bottom:12px;background:color-mix(in srgb,var(--ink) 1.6%,transparent)}
.att-prof{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px}
.att-prof label{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;color:var(--muted)}
.att-prof input{border:1px solid var(--line-strong);background:var(--surface);border-radius:2px;padding:8px 9px;min-height:40px;font-size:14px;color:var(--ink)}
.att-prof input.prof-sponsor-in{width:190px;max-width:58vw}
.att-prof input.prof-bonus-in{width:110px}
.att-prof .prof-save{min-height:40px;padding:8px 18px;border:1px solid var(--accent);border-radius:4px;background:var(--surface);color:var(--accent-deep);font-weight:700;cursor:pointer}
.att-prof .prof-save:active{transform:translateY(1px)}
.att-prof .prof-save:disabled{opacity:.5;cursor:wait}
.att-prof .prof-msg{font-size:12.5px;color:var(--accent-deep)}

/* —— v2.20.0：积分榜出勤列前移至球队之后（列宽类随列元素走位，本段仅调整赞助商小字） —— */
/* 赞助商小字放大加深：13px、颜色由 muted 提至 ink-2，仍弱于队名一档 */
.pub-standings td.st-team .st-sponsor{font-size:13px;color:var(--ink-2)}

/* —— v2.21.0（桌面）：积分榜赞助商完整显示，球队格永不折行 —— */
/* 用户图一实拍：宽屏下本菲卡赞助商「北京十二宫电竞体育俱乐部」在球队格内折到第二行。
   根因：fixed 布局下球队列仅分到剩余约 22%，长「队名+赞助商」放不下只能折行。
   改法：表格转 auto 布局（col 百分比降为分配提示），球队格 nowrap + min-width 320px
   （按最长组合估算：队徽 26 + 6 字队名 90 +「 · 」+ 12 字赞助商 13px ≈ 176 + 内边距 12 ≈ 304，取 320 留余量），
   其余列在中间宽度下可压缩，球队格始终单行；≤620px 由 v2.22.0 全列紧凑表接管（见文件末尾）。 */
table.pub-standings{table-layout:auto}
.pub-standings col.st-c-team{width:24%}
.pub-standings th.st-team,.pub-standings td.st-team{white-space:nowrap;min-width:320px}

/* —— v2.22.0：后台出勤管理卡片化对齐 + 赞助商/直播奖金统一保存 —— */
/* 原表格版每队两行（出勤行 + 资料行），列宽由内容撑动，各队控件横向对不齐、宽屏右侧溢出。
   改为每队一张卡：头行（队名左 / 合计右）、出勤行（两组等宽 grid）、资料行（赞助商占满余宽 / 奖金定宽），
   21 张卡同构纵向对齐；容器限宽 900px 居中，桌面与手机均无横向溢出。出勤 ±1 按钮沿用 .att-btn 基础样式。 */
.att-wrap{max-width:900px;margin:0 auto}
/* 后台登录卡（v2.37.0）：全幅布局下表单组保留合理最大宽度，不横向拉伸 */
.admin-app #loginCard{max-width:720px}
.att-cards{display:grid;grid-template-columns:1fr;gap:14px}
.att-card{border:1px solid var(--line);border-radius:6px;background:var(--surface);padding:14px 16px 16px}
.att-card-head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.att-card-head .att-team{font-weight:700;color:var(--ink);white-space:nowrap;font-size:15.5px}
.att-sum{font-size:12.5px;color:var(--muted);white-space:nowrap}
.att-sum b{font:700 19px/1 var(--number);color:var(--accent-deep);margin:0 2px}
.att-halves{display:grid;grid-template-columns:1fr 1fr;gap:10px 28px;margin-top:13px}
.att-half{display:flex;align-items:center;gap:10px;min-height:44px;min-width:0}
.att-half-label{font-size:13px;font-weight:700;color:var(--ink-2);white-space:nowrap;min-width:56px}
.att-card .att-num{display:inline-block;min-width:2ch;text-align:center;font:700 20px/1 var(--number);color:var(--ink)}
.att-card .att-btns{margin-left:0}
.att-card .att-prof{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px 22px;margin-top:13px;padding-top:13px;border-top:1px dashed var(--line)}
.att-card .att-prof-item{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700;color:var(--muted);min-width:0}
.att-card .att-prof-item>span{white-space:nowrap;min-width:52px}
.att-card .att-prof-item input{border:1px solid var(--line-strong);background:var(--surface);border-radius:2px;padding:8px 9px;min-height:40px;font-size:14px;color:var(--ink);box-sizing:border-box}
.att-card .att-prof-sponsor input{flex:1 1 auto;min-width:0;width:100%}
.att-card .att-prof-bonus input{width:110px;flex:none}
.att-savebar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:18px}
.att-savebar .btn-big{flex:none}
@media(max-width:620px){
  .att-halves{grid-template-columns:1fr}
  .att-card .att-prof{grid-template-columns:1fr}
  .att-card .att-prof-bonus input{flex:1 1 auto;width:100%}
}

/* —— v2.22.0：赞助商文字改金棕强调（显眼但与墨色队名可分） —— */
/* 桌面主页表格与手机卡片同口径：accent-deep 金棕 + 700，前六淡金底上深棕字对比仍充足。 */
.pub-standings td.st-team .st-sponsor{color:var(--accent-deep);font-weight:700}

/* —— v2.22.0：手机积分榜改全列紧凑表（撤销 v2.21.0 两行卡片，用户口径：字小没关系，要完整） —— */
/* ≤620px 直接显示表格本体：fixed 布局 + 手机专用列配比，12 列全显、全格 nowrap、不折行、不横滑；
   积分榜区全幅（负 margin 吃掉 .app 两侧各 12px 内边距），表宽 = 视口宽。
   表头长标签手机用缩写（排名→#、出勤（上/下）→出勤、直播奖金→奖金，.h-short），桌面仍显示全称（.h-full）。
   全体单元格 vertical-align:middle。

   —— v2.26.3：全行等高单行（用户第四次反馈：双行队格让有赞助商的行更高、难看） ——
   球队格恢复单行：赞助商段改回 inline、与队名同行（分隔符 .st-sep 恢复显示），
   撤销 v2.26.0 的 .st-sponsor display:block；全表所有行等高（约 26px：队名 11px×1.35
   + 纵向 padding 10 + 边框 1）。v2.26.2 的出勤单行化保留：隐藏总数 <b>，只留
   「上X · 下X」明细一行 9.5px、左对齐贴球队列（表头「出勤」同步左对齐）。
   列配比（合计恰 100%）：排名 4.5 / 球队 44 / 出勤 10 / 赛·胜·平·负·进·失 各 4.4 /
   差 5.1 / 分 4.5 / 直播奖金 5.5；队名 11px、赞助商金棕加粗 9.5px、数字 10px（分列 10.5px）。
   375px 核算（单元格左右内边距各 0.5px，可用 = 列宽 − 1；数字 0.5em/位、汉字 1em）：
   名次列 16.9、可用 15.9 ≥ 两位数 13px ≈ 13.0 ✓；球队列 165、可用 164：
   最坏组合 本菲卡 = 队徽 13 + 间距 2 + 队名 3 字×11 + 分隔「 · 」约 8
   + 赞助商「北京十二宫电竞体育俱乐部」12 字×9.5 = 170，名义超约 6px —— 由页内自适应
   脚本（index.html fitStandingsSponsors）逐行量测，仅溢出行把赞助商字号按 0.5px 步进
   下调（本例降至 9.0px 后合计 164 恰合），下限 7.5px，其余行保持 9.5px 不变；
   出勤列 37.5、可用 36.5 ≥「上1 · 下0」9.5px ≈ 36.2 ✓（半程出勤为个位数口径）；
   六个数字列各 16.5、可用 15.5 ≥ 三位数 10px ≈ 15.0 ✓；差列 19.1、可用 18.1：
   「-135」≈ 18.5，名义差 0.4px，单元格不裁剪、仅溢入内边距、不可见；
   分列 16.9、可用 15.9 ≥ 三位数 10.5px ≈ 15.75 ✓；直播奖金列 20.6、可用 19.6：
   四位数 10px ≈ 20，名义差 0.4px 同上（现行奖金最高两位数，余量充足）。
   360px 档：球队列 158.4、可用 157.4，本菲卡组合名义超约 12.6 → 自适应降至 8.0px
   后 152 ✓；皇家马德里（队名 5 字 + 赞助商 9 字 = 163.5）→ 降至 8.5px 后 154.5 ✓；
   现行数据下最坏情形均在下限 7.5px 之上解决，不截断、不换行。
   桌面版式不受影响（桌面出勤格仍为总数 + 明细双行、赞助商与队名同行）。 */
.h-short{display:none}
@media(max-width:620px){
  .standings-zone>.table-wrap{margin:0 -12px;overflow-x:visible}
  table.pub-standings{table-layout:fixed;width:100%}
  .pub-standings col.st-c-rank{width:4.5%}
  .pub-standings col.st-c-team{width:44%}
  .pub-standings col.st-c-att{width:10%}
  .pub-standings col.st-c-num{width:4.4%}
  .pub-standings col.st-c-diff{width:5.1%}
  .pub-standings col.st-c-pts{width:4.5%}
  .pub-standings col.st-c-bonus{width:5.5%}
  .pub-standings th,.pub-standings td{padding:5px .5px;white-space:nowrap;font-size:10px;font-variant-numeric:tabular-nums;vertical-align:middle}
  .pub-standings thead th{font-size:9px;letter-spacing:0}
  .pub-standings .h-full{display:none}
  .pub-standings .h-short{display:inline}
  .pub-standings th.st-team,.pub-standings td.st-team{min-width:0}
  .pub-standings td.st-rank{font:700 13px/1 var(--number);color:var(--muted)}
  .pub-standings td.st-team{font-size:11px;font-weight:700}
  .pub-standings td.st-team .st-team-main{white-space:nowrap}
  .pub-standings td.st-team .crest{width:13px;height:13px;margin-right:2px;vertical-align:-2px}
  .pub-standings td.st-team .st-sponsor{display:inline;font-size:9.5px;letter-spacing:0;margin-top:0;white-space:nowrap}
  .pub-standings td.st-team .st-sep{display:inline}
  .pub-standings td.st-att{text-align:left}
  .pub-standings thead th:nth-child(3){text-align:left}
  .pub-standings td.st-att b{display:none}
  .pub-standings td.st-att small{display:inline;margin-top:0;font-size:9.5px}
  .pub-standings td.st-pts{font-size:10.5px}
  .pub-standings td.st-bonus{font-size:10px}
}

/* —— v2.23.0：积分榜整行可点击跳转球队名单 —— */
/* 行带 data-team 时整行 pointer，悬停时在原有淡金行底之外再把队名提为金棕，给出可点击的克制提示；
   名单盒子加 scroll-margin-top，抵消 sticky 页签栏（约 60px）高度，跳转展开后 scrollIntoView 不被遮头。 */
.pub-standings tbody tr.st-link{cursor:pointer}
.pub-standings tbody tr.st-link:hover td.st-team{color:var(--accent-deep)}
.team-box{scroll-margin-top:76px}

/* ===== v2.28.0：智能粘贴识别 + 交手战绩 ===== */
/* 后台智能粘贴：重复提醒条（金棕描边 + 警示底色，仅提示不拦截）与候选高亮 */
.parse-dup{margin-top:12px;padding:10px 14px;border:1px solid var(--danger);border-left:4px solid var(--danger);
  background:var(--status-over-bg);color:var(--danger);font-weight:700;font-size:14px;border-radius:2px}
.candidate.candidate-auto{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-deep);
  box-shadow:inset 0 0 0 1px var(--accent)}
/* 主页交手战绩区块 */
.h2h-panel{background:var(--surface);border:1px solid var(--line);border-radius:2px;padding:16px 18px;margin-bottom:8px}
/* v2.41.1：取消 1120 限宽，两队下拉弹性占满面板、与积分榜同宽对齐 */
.h2h-controls{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap}
.h2h-field{display:flex;flex-direction:column;gap:6px;flex:1 1 200px;min-width:0}
.h2h-field label{font-size:13px;font-weight:700;color:var(--ink-2)}
.h2h-select-wrap{display:flex;align-items:center;gap:8px;min-width:0}
.h2h-select-wrap .crest{width:26px;height:26px;flex:none}
.h2h-select-wrap select{flex:1 1 auto;min-width:0;min-height:44px;font-size:15px;padding:8px 10px;
  border:1px solid var(--line-strong);border-radius:2px;background:var(--surface);color:var(--ink)}
.h2h-vs{font-family:Georgia,serif;font-style:italic;font-weight:700;color:var(--accent);padding-bottom:12px;flex:none}
.h2h-summary{margin:16px 0 6px;font-size:15px;color:var(--ink-2)}
.h2h-summary b{color:var(--accent-deep)}
.h2h-detail-title{margin:18px 0 4px;font-size:15px;color:var(--ink)}
.h2h-game{display:grid;grid-template-columns:86px minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:10px;
  padding:8px 2px;border-bottom:1px solid var(--line)}
.h2h-date{font-size:13px;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.h2h-side{display:flex;align-items:center;gap:7px;min-width:0;font-size:14px}
.h2h-side b{font-weight:600}
.h2h-side.h2h-home{justify-content:flex-end;text-align:right}
.h2h-score{font-weight:700;font-variant-numeric:tabular-nums;color:var(--accent-deep);white-space:nowrap;font-size:15px}
.h2h-opp-table{width:100%;border-collapse:collapse;font-size:14px;margin-top:8px}
.h2h-opp-table th,.h2h-opp-table td{padding:7px 8px;border-bottom:1px solid var(--line);text-align:center;font-variant-numeric:tabular-nums}
.h2h-opp-table th{color:var(--muted);font-size:12.5px;font-weight:700}
.h2h-opp-table td:first-child,.h2h-opp-table th:first-child{text-align:left}
.h2h-opp-name{display:inline-flex;align-items:center;gap:7px;font-weight:600}
/* 剩余赛程查询（v2.45.5）：未踢对手药丸列表 + 已踢小字 */
.fx-chips{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 4px}
.fx-chip{display:inline-flex;align-items:center;gap:7px;padding:6px 12px;border:1px solid var(--line-strong);border-radius:999px;font-size:14px;font-weight:600}
.fx-played{margin-top:10px;font-size:13px;color:var(--muted)}
@media (max-width:620px){
  .h2h-panel{padding:12px}
  .h2h-controls{gap:10px}
  .h2h-field{flex:1 1 100%}
  .h2h-vs{display:none}
  .h2h-game{grid-template-columns:74px minmax(0,1fr) auto minmax(0,1fr);gap:6px}
  .h2h-date{font-size:11.5px}
  .h2h-side{font-size:12.5px;gap:4px}
  .h2h-score{font-size:13.5px}
  .h2h-opp-table{font-size:12.5px}
  .h2h-opp-table th,.h2h-opp-table td{padding:6px 4px}
}

/* —— v2.29.0：积分榜出勤列配色区分 + 手机端页签换行平铺 —— */
/* 出勤列配色（v2.29.1 修正）：与全站一致的暖金棕系——表头与总数用较深的
   古铜棕，上/下小字用同系较浅一档，整列加极淡金棕底带与相邻列区分；
   与赞助商金 #7a5f2c 以色相深浅和底带、字重组合相区别，不相混淆。
   前六名奖金行底色在行上，本列半透明底带叠加其上，高亮行内仍可辨。 */
.pub-standings{--att-bronze:#6b4a2f;--att-bronze-soft:#94765a}
.pub-standings th.st-att{color:var(--att-bronze);background:color-mix(in srgb,var(--att-bronze) 8%,transparent)}
.pub-standings td.st-att{background:color-mix(in srgb,var(--att-bronze) 8%,transparent)}
.pub-standings td.st-att b{color:var(--att-bronze)}
.pub-standings td.st-att small{color:var(--att-bronze-soft)}
/* 手机端页签：取消横滑，换行平铺一屏看全（桌面单行样式不变） */
@media(max-width:620px){
  .tab-bar{flex-wrap:wrap;overflow-x:visible;gap:6px}
  .tab-btn{flex:1 1 21%;min-height:38px;padding:7px 4px;font-size:12.5px;text-align:center}
}
/* 出勤管理批量保存条置顶吸顶（v2.29.0）：位于球队卡片列表之前，滚动时常驻
   页签条下方；桌面页签条高约 65px，手机端页签换行三行时约 145px。 */
.att-savebar.att-savebar-top{position:sticky;top:65px;z-index:30;margin:0 0 16px;padding:10px 12px;background:color-mix(in srgb,var(--surface) 94%,transparent);border:1px solid var(--line);border-radius:4px;box-shadow:var(--shadow-sm)}
@media(max-width:620px){
  .att-savebar.att-savebar-top{top:145px}
}

/* —— v2.29.0：管理后台手机端排版收紧（仅 .admin-app 且 ≤620px，桌面与公开站不变） —— */
@media(max-width:620px){
  /* 卡片与分区头：减小留白，说明文字改小字号紧行距 */
  .admin-app .panel{padding:14px}
  .admin-app .tab-pane .section-head{margin-top:20px}
  .admin-app .section-head p{font-size:12px;line-height:1.6}
  .admin-app .section-head>.btn{width:100%;margin-top:10px}
  /* 转会录入顶部长说明：收成提示卡，不再大段占屏 */
  .admin-app #transferCard .section-head p{background:var(--accent-soft);border:1px solid var(--line);border-radius:3px;padding:9px 11px}
  /* 表单：标签收紧，短字段两列并排，长字段（备注等）整行 */
  .admin-app .field label{font-size:11.5px;margin-bottom:5px}
  .admin-app .form-grid{grid-template-columns:1fr 1fr;gap:10px}
  .admin-app #transferCard .form-grid .field:last-child{grid-column:1/-1}
  /* 文本框：占满卡片宽，字号 16px 防 iOS 聚焦缩放；粘贴框加高 */
  .admin-app .field textarea{width:100%;border:1px solid var(--line-strong);background:var(--surface);padding:10px 12px;border-radius:3px;outline:none;resize:vertical;font-size:16px;line-height:1.6}
  .admin-app .field textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
  .admin-app #tfPaste{min-height:120px}
  .admin-app .page-editor{font-size:16px;min-height:220px}
  /* 主按钮整行易点，提示文字独占一行 */
  .admin-app .form-actions .btn-big{flex:1 1 100%}
  .admin-app .form-actions .hint{flex:1 1 100%;margin:0}
  /* 工具条：输入与下拉弹性占宽，按钮不被挤压 */
  .admin-app .toolbar input,.admin-app .toolbar select{flex:1 1 130px;min-width:0}
  .admin-app .toolbar .btn{flex:none}
  /* 表格：字号与内边距收紧（表格本体在 .table-wrap 内，页面不溢出） */
  .admin-app .standings-table th,.admin-app .standings-table td{padding:8px 7px;font-size:13px}
  /* 出勤卡片：内边距收紧 */
  .admin-app .att-card{padding:12px}
}

/* ================================================================
   v2.32.0 全站视觉体系（v2.31.0 球队名单页试点经确认推广至前台整站）
   —— 宋体标题 / 罫线名册 / 纸纹底 / 装饰精简 ——
   推广要点：--serif 已换真宋体栈（文件前部）；body 底纹已由星图折线换纸纹、
   数字全局 tabular-nums；生肖大圆环与页脚生肖带已从 DOM 与 CSS 一并删除；
   试点作用域（名单页专属类）撤销，规则并入 body.front（前台与管理登录页），
   管理后台（body 无 .front）不受本块影响。朱红方印移至前台刊头主标题旁，
   全站仅此一处（.mast-seal），名单页标题区保留公文双线。
   ================================================================ */

/* —— 刊头方印：全站签名，哑光朱红、微倾；竖排右「十二」左「宫」合印章读序 —— */
.mast-seal{display:inline-flex;flex-direction:row-reverse;justify-content:center;gap:2px;width:42px;height:42px;padding-top:6px;margin-left:16px;background:#9e3b2c;color:#fdf8ec;border-radius:2px;transform:rotate(-2deg);vertical-align:middle}
.mast-seal i{writing-mode:vertical-rl;font-style:normal;font-family:var(--serif);font-weight:900;font-size:14px;line-height:1;letter-spacing:2px}
@media(max-width:620px){
  .mast-seal{width:34px;height:34px;padding-top:5px;margin-left:10px}
  .mast-seal i{font-size:11.5px}
}

/* —— 章节题头（前台）：公文式双线（上粗下细）+ 宋体大题，去菱形装饰 —— */
body.front .section-head{position:relative;padding-bottom:13px}
body.front .section-head::after{content:"";position:absolute;left:0;right:0;bottom:4px;height:3px;background:var(--ink)}
body.front .section-head h2{font-size:26px;letter-spacing:.04em}
body.front .section-head h2::before{display:none}
@media(max-width:620px){
  body.front .section-head h2{font-size:23px}
}

/* —— 球队名单（试点语言转全局）：罫线队框；展开名单为紧凑小卡片（v2.32.1 恢复） —— */
body.front .team-box{border:1px solid #d8cfbc;border-radius:0;box-shadow:none;padding:22px 18px 18px;gap:12px;transition:border-color .16s ease,background-color .16s ease}
body.front .team-box:hover{border-color:var(--line-strong);box-shadow:none;background:#fffdf7}
body.front .team-box:active{transform:none}
body.front .team-box.active{border-color:var(--accent);background:#faf5ea;box-shadow:none}
body.front .team-box-top strong{font-size:21px;letter-spacing:.02em}
body.front .team-drawer{border-radius:0;transition:grid-template-rows .2s ease,margin-top .2s ease,border-color .2s ease,visibility 0s linear .2s}
body.front .team-drawer.open{box-shadow:none;transition:grid-template-rows .2s ease,margin-top .2s ease,border-color .2s ease,visibility 0s linear 0s}
body.front .drawer-head strong{font-size:19px}
/* 展开名单恢复紧凑小卡片网格（v2.32.1）：外观仍从新体系——无圆角无投影、罫线边、纸色底 */
/* 小卡列数流体化（v2.37.0）：auto-fill + minmax（约 250px 起），宽屏自动增列、
   窄屏自动减列；≤620px 两列为既定手机口径，仍由下方断点显式保留 */
body.front .mini-grid{grid-template-columns:repeat(auto-fill,minmax(min(250px,100%),1fr));gap:8px;padding:12px 14px 14px}
body.front .mini-card{grid-template-columns:38px minmax(0,1fr) auto;gap:8px;padding:8px 10px;background:var(--surface);border:1px solid var(--line);border-radius:0;box-shadow:none;transition:border-color .16s ease,background-color .16s ease}
body.front .mini-card:hover{border-color:var(--line-strong);box-shadow:none;background:#faf5ea}
body.front .mini-rating{width:38px;height:40px;border:1px solid color-mix(in srgb,var(--gold) 55%,var(--line));background:color-mix(in srgb,var(--gold) 13%,var(--surface));font-size:18px}
body.front .mini-main strong{font-family:var(--serif);font-weight:600;font-size:14.5px}
@media(max-width:620px){
  body.front .team-box-grid{grid-template-columns:1fr}
  body.front .team-box{padding:19px 16px 16px}
  body.front .team-box-top strong{font-size:19px}
  body.front .mini-grid{grid-template-columns:repeat(2,1fr);gap:7px;padding:10px 10px 12px}
  body.front .mini-card{padding:7px 8px}
}

/* —— 主要块组件（前台）：去圆角去投影，罫线分隔 —— */
body.front .panel,body.front .table-wrap,body.front .value-ranking,body.front .calculator,body.front .rule-card{border-radius:0;box-shadow:none}
body.front .h2h-panel{border-radius:0}
body.front .gate-note{border-radius:0;background:var(--surface);box-shadow:none}
body.front .empty{border-radius:0}
/* v2.41.1：前台账本工具条取消 1180 限宽，搜索框弹性占满整行、与下方条目对齐 */
body.front .toolbar{border-radius:0}
body.front .window-status{border-radius:0}
body.front .window-status .ws-icon{border-radius:0}
body.front .stamp{border:0;border-left:1px solid var(--line);border-radius:0;background:transparent}
body.front .player-card{border-radius:0;box-shadow:none}
body.front .player-card:hover{box-shadow:none;transform:none}
body.front .query-field{border-radius:0}
body.front .query-search-row input,body.front .query-field select{border-radius:0}
body.front .position-chip{border-radius:0}
body.front .trait-tag{border-radius:0}
body.front .ledger-tag{border-radius:0}
body.front .pager button{border-radius:0}
body.front .field input,body.front .field select,body.front .field textarea{border-radius:0}
body.front .sheet{border-radius:0}
body.front .profile-extra{border-radius:0}
body.front .btn{box-shadow:none}

/* —— 姓名宋体（前台）：查询卡球员名、交手战绩队名 —— */
body.front .player-name strong{font-family:var(--serif);font-weight:600;font-size:15px}
body.front .h2h-side b,body.front .h2h-opp-name{font-family:var(--serif);font-weight:700}

/* —— 内容页阅读排版（前台）：正文 15px / 1.8，各级标题宋体 —— */
body.front [id^="pageBody-"]{font-size:15px;line-height:1.8}
/* 正文行宽（v2.37.0）：全幅布局下段落与列表项限约 72ch 可读行宽（左对齐、
   无边框无底色差）；卡片网格等结构块本身不限宽，随全幅舒展 */
body.front [id^="pageBody-"] p,body.front [id^="pageBody-"] li{max-width:72ch}
body.front [id^="pageBody-"] h3,body.front [id^="pageBody-"] h4{font-family:var(--serif);font-weight:900}
body.front [id^="pageBody-"] .standings-note{font-size:13.5px;line-height:1.8}

/* —— 页脚（前台）：顶部细线 + 宋体小字 —— */
body.front .data-note{border-top:1px solid var(--line-strong);font-family:var(--serif);font-size:12px}

/* —— 页签栏（前台）：文字式，古铜下划线指示当前页签；v2.39.2 起页签栏整体
   恢复为一张卡片（--surface 浅纸面 + 罫线边框 + 轻影），与页眉、内容明确
   分隔；手机端改 4 列网格平铺，单元格间以 1px 罫线底色作行列分隔线 —— */
.front-tabs{gap:2px;overflow-x:visible;flex-wrap:wrap;padding:8px 10px;margin-top:12px;background:var(--surface);border:1px solid var(--line);border-radius:3px;box-shadow:var(--shadow-sm)}
.front-tabs .tab-btn{flex:0 1 auto;min-height:42px;border:0;border-bottom:3px solid transparent;border-radius:0;background:transparent;box-shadow:none;color:var(--muted);padding:10px 15px 8px;margin-bottom:-1px;font-size:14px}
.front-tabs .tab-btn:hover{border-color:transparent;border-bottom-color:var(--line-strong);color:var(--ink);box-shadow:none}
.front-tabs .tab-btn:active{transform:none}
.front-tabs .tab-btn.active{background:transparent;border-color:transparent;border-bottom-color:var(--accent);color:var(--ink);box-shadow:none}
@media(max-width:620px){
  .front-tabs{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;padding:0;background:var(--line);overflow:hidden}
  .front-tabs .tab-btn{flex:none;min-height:40px;padding:8px 2px 6px;font-size:12.5px;text-align:center;background:var(--surface);margin-bottom:0}
  .front-tabs .tab-btn.active{background:var(--surface)}
  /* 末行两枚（10 个页签固定：第 9、10 枚）各跨两列填满整行，不留空轨 */
  .front-tabs .tab-btn:nth-child(9),.front-tabs .tab-btn:nth-child(10){grid-column:span 2}
}

/* —— v2.42.4：手机端（≤620px）名单小卡与查询卡纵向堆叠，姓名不再省略 ——
   根因：两列小卡的横排三栏（总评框 / 姓名组 / 价格块）中，价格块（数字 +
   「解约金（积分）」标签）占宽固定，中列被挤至约 50px——中文名 nowrap 省略
   只剩一字、英文名截断、「位置 · 年龄」的「岁」字被挤换行。查询卡同病：
   姓名行（中文名 + 英文名同行 nowrap 省略）与队伍行均会被截断。
   改法（仅 ≤620px，>620px 形态与几何一律不动）：
   · 小卡改 flex 换行排布，.mini-main 以 display:contents 摊平为三行——
     第一行 总评框 + 国旗 + 中文名（放开换行、取消省略，完整显示）；
     第二行 英文名独占整行（字号维持 11.5px，仅极端长名保留省略）；
     第三行 左「位置 · 年龄」单行不换行，右价格块（数字在上、「解约金
     （积分）」标签在下，口径不丢）以 margin-left:auto 靠右；
     第三行若宽度实在不足，价格块整体换至下一行右对齐，不重叠不截断。
   · 查询卡改两栏两行：总评框跨两行居左，姓名区居右上（姓名行、队伍行
     均放开换行完整显示），价格块移至姓名区下方整行、数字与口径标签
     同行基线对齐靠左呈现。 */
@media(max-width:620px){
  .mini-card,body.front .mini-card{display:flex;flex-wrap:wrap;align-items:center;column-gap:8px;row-gap:2px;padding:8px 9px}
  .mini-card .mini-main,body.front .mini-card .mini-main{display:contents}
  .mini-card .mini-main strong,body.front .mini-card .mini-main strong{flex:1 1 auto;min-width:0;white-space:normal;overflow:visible;text-overflow:clip;line-height:1.3}
  .mini-card .mini-en,body.front .mini-card .mini-en{flex:0 0 100%;margin-top:0}
  .mini-card .mini-main small,body.front .mini-card .mini-main small{margin-top:0;white-space:nowrap}
  .mini-card .mini-price,body.front .mini-card .mini-price{margin-left:auto}
  .player-card,body.front .player-card{grid-template-columns:48px minmax(0,1fr);grid-template-areas:"rating name" "rating price"}
  .player-card .rating{grid-area:rating}
  .player-card .player-name{grid-area:name}
  .player-card .player-price{grid-area:price;display:flex;align-items:baseline;gap:5px;margin-top:7px;text-align:left;white-space:nowrap}
  .player-card .player-price b{display:inline}
  .player-card .player-name strong{white-space:normal;overflow:visible;text-overflow:clip;line-height:1.4}
  .player-card .player-name small{white-space:normal;overflow:visible;text-overflow:clip}
}
