/* FE-FORMAL-LIVE-001 正式赛现场页样式：样板页视觉对齐（2026-09-12）。
   本页以 docs/design-references/formal-live-20260910/approved-base-v2.png 为验收依据。
   全部图形只用纯 CSS 与内联 SVG 近似（径向渐变＋feTurbulence 噪点近似实拍桌毡、
   SVG pattern 近似牌背），不引任何外部图片、字体、CDN 或新依赖。
   .fc-* / .fsl-* / .fst-* 仍在各自已登记的样式文件里，本文件只负责现场页自身。 */

/* ---------- 设计令牌（主控 2026-09-12 从参考图抽出，全页统一；只在本页生效，前缀 --fs-） ---------- */
:root{
  --fs-card:#ffffff;          /* 卡面 */
  --fs-page:#f4f6fa;          /* 页面底／分段分隔带（参考图实测该处为 #f7f8fa，取同族） */
  --fs-line:#e6e9ef;          /* 1px 细线 */
  --fs-brand:#002080;         /* 品牌深海军蓝：按钮、徽章、下划线（原主绿 #17603c，2026-09-14 改蓝） */
  --fs-brand-ink:#001040;     /* 深色文字（原深绿 #14512f） */
  --fs-felt-a:#2a7a4e;        /* 桌毡径向渐变起点 */
  --fs-felt-b:#14512f;        /* 桌毡径向渐变终点 */
  --fs-wood-a:#7a4a2a;        /* 木质围边起点 */
  --fs-wood-b:#5a3520;        /* 木质围边终点 */
  --fs-mint:#e8f0fb;          /* 淡蓝浅底：提示条／进行中药丸（原薄荷 #e8f5ec） */
  --fs-mint-ink:#0b2a63;
  --fs-pill:#d9f0e1;          /* 浅绿药丸：已确认／二游等（语义绿保留，不随品牌改蓝） */
  --fs-ok-ink:#14512f;        /* 语义绿文字：配套 --fs-pill，替代品牌令牌 --fs-brand-ink */
  --fs-amber:#fff4e0;         /* 琥珀：待提交 */
  --fs-amber-ink:#a9660a;
  --fs-ink:#1e2028;           /* 正文 */
  --fs-ink-2:#5a6470;         /* 次要 */
  --fs-r-card:14px; --fs-r-pill:999px; --fs-r-btn:12px; --fs-r-seat:14px;
  --fs-sp-1:4px; --fs-sp-2:8px; --fs-sp-3:12px; --fs-sp-4:16px; --fs-sp-5:24px;
  /* 字号层级（390 宽基准）。参考图 768px 宽＝384 逻辑宽／2x 实测：
     赛事名字高≈17.5、顶栏标题≈16.5、区块标题≈13.5、正文≈11、次要≈10、
     桌面中央行宽 106 逻辑像素（约 16.5px）。故 20/18 两个令牌字号按图分别落在
     赛事名与顶栏标题上（主控令牌文字与图相反，以图为验收依据）。 */
  --fs-t-event:20px; --fs-t-nav:18px; --fs-t-sec:17px;
  --fs-t-body:15px; --fs-t-sub:13px; --fs-t-center:18px;
  --fs-shadow-card:0 1px 3px rgba(0,0,0,.06);
  --fs-shadow-seat:0 2px 6px rgba(0,0,0,.10);
}

.fs-page{padding:0 16px 28px;background:var(--fs-card);color:var(--fs-ink);overflow-x:hidden}

/* ---------- 顶栏：白底、标题居中、左返回箭头、右刷新图标 ---------- */
.topbar.fs-topbar{min-height:48px;padding:2px 4px;background:var(--fs-card);backdrop-filter:none;border-bottom:0}
.fs-topbar .tb-title{text-align:center;font-size:var(--fs-t-nav);font-weight:700;letter-spacing:.5px;color:var(--fs-ink)}
.fs-topbar .icon-btn{width:40px;height:40px;color:var(--fs-brand-ink)}
.fs-topbar .icon-btn:active{background:rgba(0,32,128,.08)}
.fs-ico{display:block}

/* ---------- 赛事信息区：大号加粗赛事名＋药丸行＋进行中药丸 ---------- */
.fs-header{padding:4px 0 12px}
.fs-head-top{display:flex;align-items:center;justify-content:space-between;gap:var(--fs-sp-3)}
.fs-head-top h1{min-width:0;margin:0;font-size:var(--fs-t-event);font-weight:700;line-height:1.25;
  color:var(--fs-ink);overflow-wrap:anywhere}
.fs-status{flex:none;padding:3px 11px;border-radius:var(--fs-r-pill);background:var(--fs-pill);
  color:var(--fs-ok-ink);font-size:13px;font-weight:700;line-height:1.35;white-space:nowrap}
.fs-status.review{background:var(--fs-amber);color:var(--fs-amber-ink)}
.fs-status.settled{background:#eef1f7;color:var(--fs-ink-2)}
.fs-status.halted{background:#f8ecea;color:#8b4a44}
.fs-head-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--fs-sp-2);margin-top:10px}
.fs-head-meta b{font-size:14px;font-weight:700;color:var(--fs-brand-ink)}
.fs-head-meta .fs-meta-group{font-size:14px;color:var(--fs-ink-2)}
.fs-meta-sep{flex:none;width:1px;height:13px;background:var(--fs-line)}
.fs-head-meta .fs-chip{padding:3px 10px;border-radius:var(--fs-r-pill);font-size:13px;font-weight:700;
  line-height:1.35;white-space:nowrap}
.fs-chip.table{background:var(--fs-brand);color:#fff}

/* ---------- 提示条：淡蓝浅底圆角条＋ⓘ 图标 ---------- */
.fs-hint{display:flex;align-items:flex-start;gap:7px;margin:0 0 12px;padding:7px 12px;
  border-radius:10px;background:var(--fs-mint)}
.fs-hint-ico{flex:none;display:flex;margin-top:2px;color:var(--fs-mint-ink)}
.fs-hint p{min-width:0;margin:0;color:var(--fs-mint-ink);font-size:var(--fs-t-sub);line-height:1.5;overflow-wrap:anywhere}
.fs-hint p b{font-weight:700}

.fs-notice{margin:12px 0;padding:12px 14px;border-radius:var(--fs-r-card);background:var(--fs-amber)}
.fs-notice.halted{background:#f8ecea}
.fs-notice b{font-size:var(--fs-t-body);font-weight:700;color:var(--fs-ink)}
.fs-notice p{margin:4px 0 0;color:var(--fs-ink-2);font-size:var(--fs-t-sub);line-height:1.5}
.fs-notice-link{display:inline-flex;min-height:40px;align-items:center;margin-top:6px;padding:0 12px;
  border-radius:10px;background:var(--fs-card);box-shadow:inset 0 0 0 1px var(--fs-line);color:var(--fs-brand);font-size:var(--fs-t-sub);font-weight:700}
.fs-section-title{display:flex;align-items:center;justify-content:space-between;gap:var(--fs-sp-3);margin-bottom:10px}
.fs-section-title h2{margin:0;font-size:var(--fs-t-sec);font-weight:700}
.fs-section-title>span{flex:none;color:var(--fs-ink-2);font-size:var(--fs-t-sub)}
.fs-round-chip{padding:3px 10px;border-radius:9px;background:#f0f1f6;color:var(--fs-ink-2);font-weight:700}
.fs-empty{margin:6px 0;color:var(--fs-ink-2);font-size:var(--fs-t-sub);line-height:1.5}
.fs-flow-note{margin:4px 0 10px;color:var(--fs-ink-2);font-size:var(--fs-t-sub);line-height:1.5}

/* ---------- 桌台：木质围边＋径向渐变绿毡（叠极轻噪点），四角只表达真实分组与真实关系 ---------- */
.fs-stage{margin:0 -16px;padding:9px 16px 10px;
  background:
    repeating-linear-gradient(45deg,rgba(255,255,255,.022) 0 3px,rgba(0,0,0,0) 3px 7px),
    repeating-linear-gradient(-45deg,rgba(255,255,255,.016) 0 3px,rgba(0,0,0,0) 3px 7px),
    radial-gradient(120% 90% at 50% 0%,#3b2a1e 0%,#241a13 46%,#160f0b 100%)}
.fs-felt{position:relative;margin:0 33px;padding:8px;border-radius:var(--fs-r-seat);
  background:linear-gradient(158deg,var(--fs-wood-a) 0%,var(--fs-wood-b) 58%,#412516 100%);
  box-shadow:0 8px 18px rgba(0,0,0,.34),inset 0 0 0 1px rgba(0,0,0,.28)}
.fs-felt-noise{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;
  border-radius:inherit;opacity:.13;mix-blend-mode:overlay}
.fs-felt-in{position:relative;display:grid;
  grid-template-columns:minmax(0,1fr) minmax(0,2.6fr) minmax(0,1fr);
  grid-template-rows:minmax(52px,auto) minmax(150px,1fr) minmax(52px,auto);
  gap:var(--fs-sp-1);padding:8px 0;min-height:262px;border-radius:12px;
  background:radial-gradient(circle at 50% 42%,var(--fs-felt-a) 0%,#1d6a44 46%,var(--fs-felt-b) 100%);
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.22),inset 0 10px 26px rgba(0,0,0,.30)}
/* 四角锚点：南北组占上/下，东西组占左/右（两名搭档永远相对）。左右座位压在木边上，与图一致。 */
.fs-seat{position:relative;display:flex;flex-direction:column;align-items:center;gap:var(--fs-sp-1);
  width:max-content;max-width:120px}
/* 上／下那一行没有别的元素，卡片按内容宽度展开，姓名不必折行（与图一致）。 */
.fs-seat.top,.fs-seat.bottom{max-width:200px}
.fs-seat.top{grid-area:1/2/2/3;justify-self:center;align-self:start;margin-top:-10px}
.fs-seat.bottom{grid-area:3/2/4/3;justify-self:center;align-self:end;margin-bottom:-8px}
.fs-seat.right{grid-area:2/3/3/4;align-self:center;justify-self:end;margin-right:-48px}
.fs-seat.left{grid-area:2/1/3/2;align-self:center;justify-self:start;margin-left:-48px}
.fs-seat-card{display:flex;min-width:0;align-items:center;gap:6px;padding:2px 8px 2px 2px;
  border-radius:var(--fs-r-seat);background:var(--fs-card);box-shadow:var(--fs-shadow-seat)}
.fs-seat.is-me .fs-seat-card{box-shadow:0 0 0 2px var(--fs-brand),var(--fs-shadow-seat)}
/* 圆形深蓝组别徽章：真实分组（南北组／东西组），不是个人方位。 */
.fs-seat-group{flex:none;display:flex;width:30px;height:30px;align-items:center;justify-content:center;
  border-radius:50%;background:var(--fs-brand-ink);color:#fff;font-size:8.5px;font-weight:700;
  line-height:1;letter-spacing:-.4px;white-space:nowrap}
.fs-seat-name{min-width:0;padding-right:2px;font-size:14px;font-weight:700;line-height:1.25;
  color:var(--fs-ink);overflow-wrap:anywhere}
.fs-seat-value{flex:none;padding:2px 7px;border-radius:var(--fs-r-pill);font-size:11.5px;font-weight:700;
  line-height:1.35;white-space:nowrap}
.fs-seat-value.first{background:var(--fs-brand);color:#fff}
.fs-seat-value.done{background:var(--fs-pill);color:var(--fs-ok-ink)}
.fs-seat-value.pending{background:var(--fs-amber);color:var(--fs-amber-ink)}
.fs-seat-value.void{background:#eee9e3;color:#7c6d5f}
/* 设计图口径：左／右座位的状态药丸落在卡片下方（卡片本身只有徽章＋姓名），
   这样卡片保持窄身，中央显示区才有设计图里的宽度。 */
.fs-seat.left .fs-seat-card,.fs-seat.right .fs-seat-card{position:relative}
.fs-seat.left .fs-seat-value,.fs-seat.right .fs-seat-value{position:absolute;left:50%;top:calc(100% + 3px);
  transform:translateX(-50%)}
.fs-seat.left .fs-seat-tags,.fs-seat.right .fs-seat-tags{margin-top:24px}
.fs-seat-tags{display:flex;max-width:100%;flex-wrap:wrap;justify-content:center;gap:3px}
.fs-seat-tag{padding:1px 7px;border-radius:var(--fs-r-pill);font-size:10.5px;line-height:1.65;
  white-space:nowrap;background:var(--fs-card);color:var(--fs-ink-2);box-shadow:inset 0 0 0 1px var(--fs-line)}
.fs-seat-tag.me{background:var(--fs-brand);color:#fff;font-weight:700;box-shadow:none}
.fs-seat-tag.opponent{background:#f0f2f7;color:var(--fs-ink-2);box-shadow:none}
.fs-center{grid-area:2/2/3/3;align-self:center;justify-self:center;min-width:0;max-width:100%;
  color:#fff;text-align:center}
.fs-center-deal{display:flex;align-items:baseline;justify-content:center;gap:5px;font-size:var(--fs-t-center);
  font-weight:700;line-height:1.25;letter-spacing:.5px;white-space:nowrap}
.fs-center-deal b{font-size:inherit;font-weight:700}
.fs-center-deal span{font-size:inherit;font-weight:700;opacity:.94}
.fs-center-rule{display:block;width:82px;height:1px;margin:7px auto;background:rgba(255,255,255,.34)}
.fs-center>span{display:block;font-size:var(--fs-t-body);color:rgba(255,255,255,.92);line-height:1.4}
.fs-center-progress{display:block;font-weight:400}
.fs-cardback{display:block;margin:8px auto 0}
.fs-stage-note{margin:8px 0 0;color:var(--fs-ink-2);font-size:var(--fs-t-sub);text-align:center;overflow-wrap:anywhere}
.fs-stage-staff{margin:12px 0 0;padding:18px 14px;border-radius:var(--fs-r-card);background:var(--fs-mint);
  color:var(--fs-ink-2);text-align:center;font-size:var(--fs-t-sub)}
.fs-stage-staff b{display:block;margin-bottom:4px;color:var(--fs-ink);font-size:var(--fs-t-body)}
.fs-stage-staff p{margin:0;line-height:1.5}

/* ---------- 主要操作区：全宽实心蓝「我已出完」＋说明＋右侧「ⓘ 报告异常」一行 ---------- */
.fs-main{margin:14px 0 0}
.fs-current-action{padding:0}
/* 卡头与顺位明细排在主按钮与说明之后：首屏与图一致（桌面下来就是大按钮），明细不删只下移。 */
.fs-current-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;
  gap:var(--fs-sp-1) var(--fs-sp-2);margin-top:12px;padding-top:10px;border-top:1px solid var(--fs-line)}
.fs-current-head b{font-size:var(--fs-t-sub);font-weight:700;color:var(--fs-ink-2)}
.fs-current-head span{color:var(--fs-ink-2);font-size:var(--fs-t-sub)}
/* v2 本副实时顺位明细（真实已报游数，按点击先后）。 */
.fs-deal-evidence{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 10px;
  margin-top:8px;padding:8px 10px;border-radius:10px;background:#f6f8fc}
.fs-deal-evidence>div{min-width:0}
.fs-deal-evidence b{display:block;margin-bottom:4px;font-size:var(--fs-t-sub);font-weight:700;color:var(--fs-ink)}
.fs-deal-evidence span{display:inline-block;margin:0 8px 3px 0;color:var(--fs-ink-2);font-size:var(--fs-t-sub)}
.fs-deal-evidence strong{flex:none;color:var(--fs-brand);font-size:var(--fs-t-sub);font-weight:700}
.fs-deal-evidence.void strong{color:var(--fs-ink-2)}
.fs-conflict{margin:6px 0 0;color:#a9660a;font-size:var(--fs-t-sub);font-weight:700}
.fs-primary-row{margin-top:10px}
.fs-primary{display:block;width:100%;min-height:46px;border:0;border-radius:var(--fs-r-btn);
  background:var(--fs-brand);color:#fff;font-family:inherit;font-size:20px;font-weight:700;
  letter-spacing:1px;cursor:pointer}
.fs-primary:disabled{opacity:.72}
.fs-primary.secondary{background:var(--fs-card);color:var(--fs-brand);box-shadow:inset 0 0 0 1px #98b4e0;
  font-size:16px;min-height:44px}
.fs-primary-hint{margin:9px 0 0;font-size:var(--fs-t-sub);line-height:1.55;text-align:center}
.fs-primary-hint .dark{display:block;color:var(--fs-ink)}
.fs-primary-hint .soft{display:block;color:var(--fs-ink-2)}
.fs-position-buttons{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;margin-top:10px}
.fs-position-buttons button{min-width:0;min-height:44px;padding:6px 3px;border:1px solid #98b4e0;
  border-radius:10px;background:var(--fs-card);color:var(--fs-brand);font-size:var(--fs-t-sub);font-weight:700}
.fs-main-blocked{margin-bottom:9px;padding:13px 14px;border-radius:var(--fs-r-card);background:var(--fs-amber)}
.fs-main-blocked b{font-size:var(--fs-t-body)}
.fs-main-blocked p{margin:4px 0 9px;color:var(--fs-ink-2);font-size:var(--fs-t-sub);line-height:1.5}
.fs-main-blocked button{width:100%}
.fs-report-row{display:flex;justify-content:flex-end;margin-top:2px}
.fs-report-entry{display:inline-flex;min-height:40px;align-items:center;gap:5px;padding:0 2px;border:0;
  background:none;color:var(--fs-ink);font-family:inherit;font-size:var(--fs-t-body);cursor:pointer}
.fs-report-ico{display:flex;color:var(--fs-ink)}

/* ---------- 全场进度：白底一行，左侧真实统计，右侧品牌蓝链接 ---------- */
.fs-progress{display:flex;align-items:center;gap:10px;margin:14px -16px 0;padding:0 16px;
  min-height:46px;background:var(--fs-card);border-top:1px solid var(--fs-line)}
.fs-progress>span{color:var(--fs-ink-2);font-size:var(--fs-t-body)}
.fs-progress b{flex:1;min-width:0;font-size:var(--fs-t-sec);font-weight:700;overflow-wrap:anywhere}
.fs-progress-link{flex:none;display:inline-flex;min-height:44px;align-items:center;padding:0 2px;border:0;
  background:none;color:var(--fs-brand);font-family:inherit;font-size:var(--fs-t-body);font-weight:700;cursor:pointer}

/* ---------- 牌局记录／赛程名次／异常更正：带品牌蓝下划线的分段标签 ---------- */
.fs-tabs{margin:0 -16px;background:var(--fs-card);border-top:7px solid var(--fs-page);
  background-clip:padding-box}
.fs-tabbar{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));padding:0 16px;
  border-bottom:1px solid var(--fs-line)}
.fs-tabbar button{position:relative;min-height:44px;min-width:0;padding:0 4px;border:0;background:none;
  color:var(--fs-ink-2);font-family:inherit;font-size:var(--fs-t-body);cursor:pointer}
.fs-tabbar button.on{color:var(--fs-brand-ink);font-size:16px;font-weight:700}
.fs-tabbar button.on::after{content:'';position:absolute;bottom:-1px;left:50%;width:46px;height:3px;
  border-radius:2px;background:var(--fs-brand);transform:translateX(-50%)}
.fs-panel{padding:14px 0}
.fs-panel[hidden]{display:none}
.fs-schedule,.fs-evidence,.fs-issues,.fs-corrections{padding:14px 0;border-bottom:1px solid var(--fs-line)}
.fs-corrections{border-bottom:0}

/* ---------- 逐副记录卡：卡头＋2×2 网格＋卡底细线（左查看依据／右申请更正） ---------- */
.fs-deal-list{display:grid;gap:10px;padding:2px 0 4px}
.fs-deal-card{border-radius:var(--fs-r-card);background:var(--fs-card);
  box-shadow:inset 0 0 0 1px var(--fs-line),var(--fs-shadow-card)}
.fs-deal-head{display:flex;align-items:center;gap:var(--fs-sp-2);padding:11px 12px 9px}
.fs-deal-head b{font-size:var(--fs-t-sec);font-weight:700;white-space:nowrap}
.fs-deal-state{padding:2px 9px;border-radius:var(--fs-r-pill);font-size:12.5px;font-weight:700;
  line-height:1.5;white-space:nowrap}
.fs-deal-state.valid{background:var(--fs-pill);color:var(--fs-ok-ink)}
.fs-deal-state.conflicted{background:#f7ddd7;color:#a03e2d}
.fs-deal-state.void{background:#eee9e3;color:#7c6d5f}
.fs-deal-state.collecting{background:#eef1f7;color:var(--fs-ink-2)}
.fs-deal-verdict{margin-left:auto;color:var(--fs-brand);font-size:var(--fs-t-body);font-weight:700;
  text-align:right;overflow-wrap:anywhere}
.fs-deal-grid{display:grid;grid-template-columns:1fr 1fr;padding:9px 0 10px;border-top:1px solid var(--fs-line)}
.fs-deal-grid.empty{grid-template-columns:1fr}
.fs-deal-cell{display:flex;min-width:0;align-items:baseline;gap:10px;padding:3px 12px}
.fs-deal-cell.c2{border-left:1px solid var(--fs-line)}
.fs-deal-cell i{min-width:0;font-size:var(--fs-t-body);font-style:normal;color:var(--fs-ink);overflow-wrap:anywhere}
.fs-deal-cell b{flex:none;font-size:var(--fs-t-body);font-weight:400;color:#5d6a7b;white-space:nowrap}
.fs-deal-cell.wide{gap:0}
.fs-deal-cell.wide i{color:var(--fs-ink-2)}
.fs-deal-foot{display:flex;align-items:center;gap:var(--fs-sp-2);padding:5px 12px 5px;
  border-top:1px solid var(--fs-line)}
.fs-deal-plain{flex:1;min-width:0;color:var(--fs-ink-2);font-size:var(--fs-t-sub)}
.fs-deal-actions{margin-left:auto;display:flex;flex:none;align-items:center;gap:10px}
.fs-deal-correct,.fs-evidence-report{min-height:40px;padding:0;border:0;background:none;
  color:var(--fs-brand);font-family:inherit;font-size:var(--fs-t-body);font-weight:700;cursor:pointer}
.fs-deal-source{flex:1;min-width:0}
.fs-deal-source>summary{display:flex;min-height:40px;align-items:center;gap:5px;color:var(--fs-ink-2);
  font-size:var(--fs-t-body);cursor:pointer;list-style:none}
.fs-deal-source>summary::-webkit-details-marker{display:none}
.fs-deal-source[open]>summary .fs-ico-chev{transform:rotate(180deg)}
.fs-deal-source ul{margin:0 0 8px;padding-left:16px}
.fs-deal-source li{margin:3px 0;color:var(--fs-ink-2);font-size:var(--fs-t-sub);line-height:1.5;overflow-wrap:anywhere}
.fs-deal-source li b{color:var(--fs-ink)}
.fs-evidence-round,.fs-evidence-table{border-top:1px solid var(--fs-line)}
.fs-evidence-round>summary,.fs-evidence-table>summary{display:flex;min-height:44px;align-items:center;
  justify-content:space-between;gap:var(--fs-sp-3);cursor:pointer;list-style:none}
.fs-evidence-round>summary::-webkit-details-marker,.fs-evidence-table>summary::-webkit-details-marker{display:none}
.fs-evidence-round>summary::before,.fs-evidence-table>summary::before{content:'›';flex:none;color:var(--fs-ink-2);
  font-size:18px;transition:transform .15s ease}
.fs-evidence-round[open]>summary::before,.fs-evidence-table[open]>summary::before{transform:rotate(90deg)}
.fs-evidence-round>summary b{flex:1;font-size:var(--fs-t-body);font-weight:700}
.fs-evidence-round>summary span,.fs-evidence-table>summary span{color:var(--fs-ink-2);font-size:var(--fs-t-sub)}
.fs-evidence-round>div{padding-left:6px}
.fs-evidence-table>summary{padding-right:2px}
.fs-evidence-table>summary b{flex:1;font-size:var(--fs-t-sub);font-weight:700}
.fs-evidence-table>div{padding:0 0 4px 6px}
.fs-evidence-more{margin:14px 0 0;color:var(--fs-ink-2);font-size:var(--fs-t-body);text-align:center}
.fs-deal-source>summary,.fs-deal-plain,.fs-deal-correct,.fs-evidence-report{white-space:nowrap}

/* ---------- 赛程名次：四桌进度行＋名次表（内容不减少，配色统一） ---------- */
.fs-table-row{display:grid;grid-template-columns:64px minmax(0,1fr) 92px;align-items:center;gap:10px;
  min-height:68px;padding:9px 4px;border-top:1px solid var(--fs-line)}
.fs-table-row.mine{margin:0 -6px;padding-right:10px;padding-left:10px;background:#f0f4fb}
.fs-table-no b,.fs-table-no span{display:block}
.fs-table-no b{font-size:14px;font-weight:700}
.fs-table-no span{margin-top:3px;color:var(--fs-ink-2);font-size:11.5px}
.fs-table-pairs{min-width:0}
.fs-table-pairs span{display:block;overflow:hidden;margin:2px 0;font-size:var(--fs-t-sub);line-height:1.4;
  text-overflow:ellipsis;white-space:nowrap}
.fs-table-pairs i{display:inline-block;width:28px;color:var(--fs-ink-2);font-size:11.5px;font-style:normal}
.fs-deal-track{display:grid;grid-template-columns:repeat(4,1fr);gap:4px}
.fs-deal-track span{display:flex;width:19px;height:19px;align-items:center;justify-content:center;
  border-radius:50%;background:#eef1f7;color:#68707a;font-size:10px;font-weight:700}
.fs-deal-track .valid{background:var(--fs-pill);color:var(--fs-ok-ink)}
.fs-deal-track .conflicted{background:#f7ddd7;color:#a03e2d}
.fs-deal-track .void{background:#eee9e3;color:#7c6d5f;text-decoration:line-through}
.fs-row-action{grid-column:2/4;min-height:40px;border:1px solid var(--fs-line);border-radius:10px;
  background:var(--fs-card);color:var(--fs-brand);font-size:var(--fs-t-sub);font-weight:700}

/* ---------- 异常更正 ---------- */
.fs-issue{padding:11px 2px;border-top:1px solid var(--fs-line)}
.fs-issue>div{display:flex;align-items:center;justify-content:space-between;gap:10px}
.fs-issue b{font-size:14px;font-weight:700}
.fs-issue span{color:#a9660a;font-size:var(--fs-t-sub);font-weight:700}
.fs-issue.resolved span{color:var(--fs-ink-2)}
.fs-issue p{margin:5px 0;color:var(--fs-ink);font-size:var(--fs-t-sub);line-height:1.5}
.fs-issue small{display:block;margin:4px 0;color:var(--fs-ink-2);font-size:var(--fs-t-sub)}
.fs-issue button,.fs-secondary,.fs-danger{min-height:44px;padding:0 13px;border:1px solid var(--fs-line);
  border-radius:10px;background:var(--fs-card);color:var(--fs-brand);font-weight:700}
.fs-issue button{width:100%;margin-top:6px}
.fs-session-actions{display:grid;gap:9px;padding-top:16px}

/* ---------- 版本冲突重试引导与其余状态 ---------- */
.fs-retry{display:flex;align-items:center;justify-content:space-between;gap:var(--fs-sp-3);margin:14px 0 0;
  padding:12px 14px;border-radius:var(--fs-r-card);background:var(--fs-amber)}
.fs-retry>div:first-child{min-width:0}
.fs-retry b{font-size:14px;font-weight:700}
.fs-retry p{margin:4px 0 0;color:var(--fs-ink-2);font-size:var(--fs-t-sub);line-height:1.5}
.fs-retry>div:last-child{display:flex;flex:none;gap:7px}
.fs-retry button{min-height:44px;padding:0 12px;border:0;border-radius:9px;background:var(--fs-brand);
  color:#fff;font-family:inherit;font-weight:700}
.fs-retry .fs-secondary{border:1px solid var(--fs-line);background:var(--fs-card);color:var(--fs-brand)}
.fs-retry.changed>button{flex:none}
.fs-danger{border-color:#e2b4ae;color:#a13e34}
.fs-state{margin:18px 0;padding:28px 16px;border:1px dashed var(--fs-line);border-radius:var(--fs-r-card);
  background:var(--fs-card);text-align:center;color:var(--fs-ink-2)}
.fs-state.error{border-style:solid;border-color:#e2b4ae}
.fs-state b{color:var(--fs-ink)}
.fs-state p{font-size:var(--fs-t-sub);line-height:1.5}
.fs-state button{min-height:44px;padding:0 18px;border:0;border-radius:10px;background:var(--fs-brand);
  color:#fff;font-weight:700}

/* ---------- 弹层（沿用既有结构，只统一配色） ---------- */
.fs-modal-scope{margin:-4px 0 14px;padding:8px 10px;border-radius:8px;background:#f1f4fa;color:var(--fs-ink-2);font-size:var(--fs-t-sub)}
.fs-admin-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px}
.fs-admin-grid label{display:flex;min-width:0;flex-direction:column;gap:5px;color:var(--fs-ink-2);font-size:var(--fs-t-sub)}
.fs-admin-grid select{width:100%;height:42px;border:1px solid var(--fs-line);border-radius:9px;background:var(--fs-card);color:var(--fs-ink)}
.fs-modal-textarea{display:block;width:100%;min-height:96px;padding:10px 11px;border:1px solid var(--fs-line);
  border-radius:10px;background:var(--fs-card);color:var(--fs-ink);font:inherit;line-height:1.5;resize:vertical}

@media(max-width:350px){
  .fs-page{padding-right:12px;padding-left:12px}
  .fs-stage{margin-right:-12px;margin-left:-12px;padding-right:12px;padding-left:12px}
  .fs-progress{margin-right:-12px;margin-left:-12px;padding-right:12px;padding-left:12px}
  .fs-tabs{margin-right:-12px;margin-left:-12px}
  .fs-tabbar{padding-right:12px;padding-left:12px}
  .fs-head-top h1{font-size:18px}
  .fs-felt{margin:0 10px;padding:6px}
  .fs-felt-in{min-height:238px;grid-template-columns:minmax(0,1fr) minmax(0,2.4fr) minmax(0,1fr);
    grid-template-rows:minmax(48px,auto) minmax(136px,1fr) minmax(48px,auto)}
  .fs-seat{max-width:96px}
  /* 窄屏收窄左右座位的压边量，保证座位卡仍在视口内（不靠 overflow 裁切）。 */
  .fs-seat.left{margin-left:-16px}
  .fs-seat.right{margin-right:-16px}
  .fs-seat-group{width:26px;height:26px;font-size:8.5px}
  .fs-seat-name{font-size:13px}
  .fs-seat-value{font-size:11px;padding:2px 6px}
  .fs-seat-tag{font-size:10px}
  .fs-center-deal{font-size:17px}
  .fs-center>span{font-size:13px}
  .fs-cardback{width:80px;height:50px}
  .fs-table-row{grid-template-columns:58px minmax(0,1fr) 84px;gap:7px}
  .fs-table-pairs span{font-size:12px}
  .fs-position-buttons button{font-size:11.5px}
  .fs-tabbar button{font-size:14px}
  .fs-tabbar button.on{font-size:15px}
  .fs-primary{font-size:18px}
  .fs-deal-head{padding:10px 10px 8px}
  .fs-deal-cell{padding:3px 9px}
  .fs-deal-foot{padding:5px 10px}
  .fs-retry{display:block}
  .fs-retry>div:last-child{margin-top:10px}
  .fs-retry>div:last-child button{flex:1}
  .fs-retry.changed>button{width:100%;margin-top:10px}
}
