/* 共享榜单层（rank_ui）：ojweb 站内榜/滚榜/颁奖与独立外榜共用的唯一来源，只在此处手改。
   全部规则限定在 html.csg-rank-ui 之下（js/rank_ui_host.js 始终加上；新 UI 是唯一界面），作用域不泄漏到站内其它页面；
   深色 = html.csg-rank-ui--dark（外榜夜间 / ojweb dark_stage 皮肤）。令牌统一 --ru-* 前缀，定义见 palette.css。 */

/* ======== 源自外榜 rank_base.css ======== */
/* 榜单本体样式（外榜自有，逐步替换 ojweb 的榜单 css；只有白天/夜间两套令牌，随 html[data-theme]）。
   本阶段：榜单页原「配色」下拉只保留列表疏密，其中的配色列表与按需渲染开关不再显示。 */
/* ---------- 弹层里的首答图例、题目颜色（弹层挂在 body 下，令牌取 :root） ---------- */
.csg-rank-ui{ --rk-fb: #2862ab; --rk-star: #f5b301; }
.csg-rank-ui.csg-rank-ui--dark{ --rk-fb: #3470b8; --rk-star: #ffc928; }
.csg-rank-ui .rank-legend{ display: flex; flex-wrap: wrap; gap: 8px 16px; margin: 0 0 8px; padding: 0 0 8px; border-bottom: 1px solid var(--ru-rule); }
.csg-rank-ui .rank-legend-item{ display: flex; align-items: center; gap: 8px; min-width: 0; }
.csg-rank-ui .rank-legend-mark{ flex: none; display: inline-grid; place-items: center; width: 24px; height: 18px; border-radius: 4px; line-height: 1; }
.csg-rank-ui .rank-legend-mark--regular{ background: var(--rk-fb); }
.csg-rank-ui{ --or-star: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2.8l2.8 5.9 6.4.9-4.7 4.5 1.2 6.4L12 17.3 6.3 20.5l1.2-6.4L2.8 9.6l6.4-.9z' fill='%23000' stroke='%23000' stroke-width='1.4' stroke-linejoin='round'/%3E%3C/svg%3E"); }
.csg-rank-ui .rank-legend-mark--global{ width: 24px; font-size: 0; }
.csg-rank-ui .rank-legend-mark--global::before{ content: ''; width: 20px; height: 20px; background: var(--rk-star); -webkit-mask: var(--or-star) center/contain no-repeat; mask: var(--or-star) center/contain no-repeat; }
.csg-rank-ui .rank-color-copy{ display: inline-flex; align-items: center; gap: 8px; margin: -3px -6px; padding: 3px 6px; border: 0; border-radius: 6px; background: transparent; color: var(--ru-ink); cursor: pointer; font: inherit; }
.csg-rank-ui .rank-color-copy:hover{ background: var(--ru-sunken); }
.csg-rank-ui .rank-color-swatch{ flex: none; width: 40px; height: 24px; border-radius: 5px; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ru-ink) 20%, transparent); }
.csg-rank-ui .rank-color-copy code{ font: 500 12.5px/1.2 var(--ru-font-mono); letter-spacing: 0; color: var(--ru-ink); background: none; padding: 0; }
.csg-rank-ui .rank-color-copy .ic{ color: var(--ru-ink-3); font-size: 13px; }
/* 手机底部抽屉：题目详情头部的统计项（状态/提交数/用时/罚时）允许换行，不再整行撑出抽屉 */
.csg-rank-ui .pop--sheet .rank-problem-history{ width: auto; max-width: 100%; }
.csg-rank-ui .pop--sheet .rank-problem-history-head{ flex-wrap: wrap; width: auto; max-width: 100%; }
.csg-rank-ui .pop--sheet .rank-problem-history-head-stats{ flex-wrap: wrap; flex: 1 1 12rem; }

/* ======== 源自外榜 rank_skin.css ======== */
/* 榜单页外壳与默认皮肤 v2。
 * 榜单结构与交互由构建时拷入的 ojweb 核心 js/css 负责（只复用、不改）；这里用自己的 CSS 重画外观：
 * 外层布局、表头、工具条、配色、字体。成绩色保留功能语义：通过 绿 / 错误 红 / 待定（封榜后未揭晓）黄 / 未尝试 灰 / 首杀 蓝。
 * 只改外观，不改尺寸体系（列宽、行高仍由核心 js 的变量与按需渲染计算），大榜性能不受影响。
 * 其他皮肤（深色/浅色/素表）仍是 ojweb 原样，用户在调色板里切换。 */
/* 榜单字族：ojweb 里用 CsgRank SC / Latin，这里映射到本系统内置字体 */
@font-face{font-family:"CsgRank Latin";font-style:normal;font-weight:100 900;font-display:swap;src:url("../fonts/Geist-Latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+2010-203A,U+2212}
@font-face{font-family:"CsgLiveBebasNeue";font-style:normal;font-weight:400;font-display:swap;src:url("../../../../fonts/live_display/bebas-neue-latin-400-normal.woff2") format("woff2")}
@font-face{font-family:"CsgLiveOutfit";font-style:normal;font-weight:500;font-display:swap;src:url("../../../../fonts/live_display/outfit-latin-500.woff2") format("woff2")}
/* ---------- 页面外壳 ---------- */
/* ---------- 默认皮肤：令牌 ---------- */
.csg-rank-ui .contest-rank-page-shell{
  background:transparent;
  --rank-header-height:46px;
  --rank-radius-block:8px; --rank-radius-inner:4px; --rank-radius-pill:4px;
  --rank-bg-primary:var(--ru-surface); --rank-bg-secondary:var(--ru-surface-2); --rank-line-faint:var(--ru-rule);
  --rank-frame-line:var(--ru-rule-2);
  --rk-ac:#167a50; --rk-wa:#b93a47; --rk-pend:#f2c230; --rk-pend-ink:#2b1d00; --rk-fb:#2862ab;
  --rk-none:var(--ru-sunken); --rk-none-ink:var(--ru-ink-3);
}
.csg-rank-ui.csg-rank-ui--dark .contest-rank-page-shell{--rk-ac:#1b8057;--rk-wa:#c24650;--rk-fb:#3470b8}
/* 低色域 LED 大屏（全屏/滚榜）：压深底色、白字对比度 ≥ 6:1，避免亮色在低亮度/低色域屏上发白发灰 */
.csg-rank-ui .contest-rank-page-shell .rank-system.fullscreen,.csg-rank-ui .contest-rank-page-shell .rank-system[data-rank-mode="roll"]{--rk-ac:#126b46;--rk-wa:#a42f3b;--rk-fb:#1f559a}
/* 皮肤作用域简写：S = 外壳(默认皮肤) */
/* 工具条：一条发丝线边的横栏 */
.csg-rank-ui .contest-rank-page-shell .rank-header{padding:0;margin:0 0 8px;color:var(--ru-ink)}
.csg-rank-ui .contest-rank-page-shell .controls-time-section{padding:0}
.csg-rank-ui .contest-rank-page-shell .controls-time-container{max-width:none;padding:6px 10px;gap:10px;background:var(--ru-surface);border:1px solid var(--ru-rule);border-radius:var(--ru-r-lg);box-shadow:none}
.csg-rank-ui .contest-rank-page-shell .rank-mode-indicator{color:var(--ru-ink);font-weight:600;font-size:12.5px}
.csg-rank-ui .contest-rank-page-shell .rank-mode-indicator en-text{color:var(--ru-ink-4);font-weight:400;font-size:10.5px}
.csg-rank-ui .contest-rank-page-shell .time-current{color:var(--ru-accent);font:600 13px/1.2 var(--ru-font-mono);letter-spacing:0}
.csg-rank-ui .contest-rank-page-shell .time-total{color:var(--ru-ink-4);font:400 11px/1.2 var(--ru-font-mono);opacity:1;letter-spacing:0}
.csg-rank-ui .contest-rank-page-shell .time-progress-track{background:var(--ru-accent)}
.csg-rank-ui .contest-rank-page-shell .time-progress-track-outline{background:var(--ru-sunken)}
.csg-rank-ui .contest-rank-page-shell .time-progress-slider::-webkit-slider-thumb{background:var(--ru-surface);border:1.5px solid var(--ru-accent);box-shadow:none}
.csg-rank-ui .contest-rank-page-shell .time-progress-slider::-moz-range-thumb{background:var(--ru-surface);border:1.5px solid var(--ru-accent);box-shadow:none}
.csg-rank-ui .contest-rank-page-shell .control-btn,
.csg-rank-ui .contest-rank-page-shell .custom-select-btn,
.csg-rank-ui .contest-rank-page-shell .time-reset-btn{background:var(--ru-surface);color:var(--ru-ink-2);border:1px solid var(--ru-rule-2);border-radius:var(--ru-r);box-shadow:none;height:28px;min-width:28px;font:500 12px/1 var(--ru-font-sans)}
.csg-rank-ui .contest-rank-page-shell .control-btn:hover,
.csg-rank-ui .contest-rank-page-shell .custom-select-btn:hover,
.csg-rank-ui .contest-rank-page-shell .time-reset-btn:hover{background:var(--ru-sunken);border-color:var(--ru-ink-4);color:var(--ru-ink)}
.csg-rank-ui .contest-rank-page-shell .control-btn:focus-visible,
.csg-rank-ui .contest-rank-page-shell .custom-select-btn:focus-visible{outline:none;box-shadow:var(--ru-ring)}
.csg-rank-ui .contest-rank-page-shell .control-btn i,
.csg-rank-ui .contest-rank-page-shell .custom-select-btn i,
.csg-rank-ui .contest-rank-page-shell .time-reset-btn i{color:inherit;font-size:14px}
.csg-rank-ui .contest-rank-page-shell .controls-toggle-btn{background:var(--ru-surface);color:var(--ru-ink-2);border:1px solid var(--ru-rule-2);border-radius:var(--ru-r);box-shadow:none}
.csg-rank-ui .contest-rank-page-shell .controls-toggle-btn:hover,.csg-rank-ui .contest-rank-page-shell .controls-toggle-btn[aria-expanded="true"]{background:var(--ru-sunken);border-color:var(--ru-ink-4);color:var(--ru-ink)}
.csg-rank-ui .contest-rank-page-shell .controls-toggle-btn:focus-visible{outline:none;box-shadow:var(--ru-ring)}
.csg-rank-ui .contest-rank-page-shell .controls-toggle-btn i{color:inherit}
.csg-rank-ui .contest-rank-page-shell .control-btn.filter-info-btn .filter-quick-info{font:600 11.5px/1 var(--ru-font-mono);color:var(--ru-ink);letter-spacing:0}
.csg-rank-ui .contest-rank-page-shell .rank-header #rank-skin-btn,
.csg-rank-ui .contest-rank-page-shell .rank-header #rank-skin-btn-dd{background:var(--ru-surface);border-color:var(--ru-rule-2);color:var(--ru-ink-2)}
.csg-rank-ui .contest-rank-page-shell .rank-header #rank-skin-btn i{color:inherit}
/* 榜身：一整块白面板 */
.csg-rank-ui .contest-rank-page-shell #rank-container{color-scheme:inherit}
.csg-rank-ui .contest-rank-page-shell #rank-container,
.csg-rank-ui .contest-rank-page-shell .rank-container{font-family:var(--ru-font-sans)!important;font-feature-settings:"tnum" 1}
.csg-rank-ui .contest-rank-page-shell .rank-grid{background:var(--ru-surface);border:1px solid var(--ru-rule);border-top:0;border-radius:0 0 var(--ru-r-lg) var(--ru-r-lg);box-shadow:none;margin-top:0;padding-top:0}
/* 表头：浅灰底、小字标签；题目色用一枚小圆点表示，不再顶气球 */
.csg-rank-ui .contest-rank-page-shell .rank-header-row{padding:0 16px;background:var(--ru-surface-2);border:1px solid var(--ru-rule);border-radius:var(--ru-r-lg) var(--ru-r-lg) 0 0;color:var(--ru-ink-2)}
.csg-rank-ui .contest-rank-page-shell .rank-header-row .rank-col{background:var(--ru-surface-2);border:0;box-shadow:none;border-radius:0}
.csg-rank-ui .contest-rank-page-shell .rank-header-row .rank-col .header-cell,
.csg-rank-ui .contest-rank-page-shell .problem-header-content{color:var(--ru-ink);text-shadow:none;font-weight:600;font-size:13px;line-height:1.15}
.csg-rank-ui .contest-rank-page-shell .problem-header-title{color:var(--ru-ink);text-shadow:none;font:650 15px/1.1 var(--ru-font-mono)}
.csg-rank-ui .contest-rank-page-shell .rank-header-row .rank-col .header-cell en-text{color:var(--ru-ink-4);text-shadow:none;font-weight:400;font-size:10px;margin-top:1px}
.csg-rank-ui .contest-rank-page-shell .problem-header-stats{color:var(--ru-ink-3);text-shadow:none;font:400 11px/1.2 var(--ru-font-mono);margin-top:3px}
.csg-rank-ui .contest-rank-page-shell .problem-header-color-bg{top:6px;left:auto;right:8px;width:7px;height:7px;border-radius:50%;background:var(--rank-problem-color);font-size:0;transform:none;-webkit-text-stroke:0;box-shadow:inset 0 0 0 1px rgba(15,21,32,.18)}
.csg-rank-ui .contest-rank-page-shell .problem-header-color-bg i{display:none}
.csg-rank-ui .contest-rank-page-shell .rank-header-row .rank-col.rank-col-problem:hover{background:var(--ru-sunken);box-shadow:none}
.csg-rank-ui .contest-rank-page-shell .rank-header-row .pro-header-group{background:var(--ru-surface-2)}
/* 行：发丝线分隔，无斑马、无外框、无圆角卡片 */
.csg-rank-ui .contest-rank-page-shell .rank-row,
.csg-rank-ui .contest-rank-page-shell .rank-row:nth-child(even),
.csg-rank-ui .contest-rank-page-shell .rank-row:nth-child(odd){background:var(--ru-surface);border-radius:0;box-shadow:none;border-bottom:1px solid var(--ru-rule);margin-bottom:0}
.csg-rank-ui .contest-rank-page-shell .rank-row:hover:not(.roll-judging){background:var(--ru-surface-2)!important;box-shadow:none}
.csg-rank-ui .contest-rank-page-shell .rank-row:last-child{border-bottom:0}
.csg-rank-ui .contest-rank-page-shell .rank-row:not(:last-child){margin-bottom:0}
/* 队伍文字：三级层次 校名 600 / 队名 500 / 英文名 400 */
.csg-rank-ui .contest-rank-page-shell .school-name{font-size:15px;font-weight:650;color:var(--ru-ink);letter-spacing:0}
.csg-rank-ui .contest-rank-page-shell .team-name-cn{font-size:14px;font-weight:500;color:var(--ru-ink-2)}
.csg-rank-ui .contest-rank-page-shell .team-name-en{font-size:11.5px;font-weight:400;font-style:normal;color:var(--ru-ink-3)}
.csg-rank-ui .contest-rank-page-shell .coach-info,
.csg-rank-ui .contest-rank-page-shell .player-info,
.csg-rank-ui .contest-rank-page-shell .coach-name,
.csg-rank-ui .contest-rank-page-shell .player-name{color:var(--ru-ink-3);font-size:11.5px;font-weight:400;text-shadow:none;-webkit-text-stroke:0}
.csg-rank-ui .contest-rank-page-shell .coach-icon,
.csg-rank-ui .contest-rank-page-shell .player-icon{color:var(--ru-ink-4)}
/* 名次 / 题数 / 罚时：名次是徽标，题数罚时只写数字 */
.csg-rank-ui .contest-rank-page-shell .rank-item,
.csg-rank-ui .contest-rank-page-shell .solve-item,
.csg-rank-ui .contest-rank-page-shell .penalty-item{border-radius:var(--ru-r-sm);box-shadow:none;font-family:var(--ru-font-mono);font-weight:650;font-size:15px}
.csg-rank-ui .contest-rank-page-shell .rank-item:not(.gold):not(.silver):not(.bronze):not(.star){background:var(--ru-sunken);color:var(--ru-ink-2);border:0}
.csg-rank-ui .contest-rank-page-shell .rank-item.gold{background:#d9a514;color:#2e2100;border:0}
.csg-rank-ui .contest-rank-page-shell .rank-item.silver{background:#b4bccb;color:#1b2230;border:0}
.csg-rank-ui .contest-rank-page-shell .rank-item.bronze{background:#b9763c;color:#fff;border:0}
.csg-rank-ui .contest-rank-page-shell .rank-item.star{background:transparent;color:var(--ru-ink-3);border:1px dashed var(--ru-ink-4)}
.csg-rank-ui .contest-rank-page-shell .rank-emoji{display:none}
.csg-rank-ui .contest-rank-page-shell .solve-item{background:transparent;border:0;color:var(--ru-ink)}
.csg-rank-ui .contest-rank-page-shell .penalty-item{background:transparent;border:0;color:var(--ru-ink-3)}
.csg-rank-ui .contest-rank-page-shell .penalty-time-brief{color:var(--ru-ink-2);font-weight:600}
.csg-rank-ui .contest-rank-page-shell .solve-item .problem-label{font-weight:650}
/* 题格：纯色块表示结果；时间是主信息，提交次数是附注。
 * 版式（不照抄 ojweb 的“次数 | 时间”并排居中）：
 *   桌面：左“次数”小标签（等宽、居中），右“时间”右对齐，分隔线去掉。
 *         第 1 次就通过的格子，标签退成淡色数字；错过的格子（次数 ≥ 2、红格、待判）标签带深色底，一眼看出“这题做得费劲”。
 *   时间一律右对齐，同一列题目的撇号和个位数字上下对齐，扫读很顺。
 *   尺寸全部用 em，跟随 ojweb 核心按密度/全屏设定的格子字号；最坏情形（3 位次数 + 3 位时间）也放得下。
 * 不改 rank_core / rank_roll：只改样式；.pro-none 的题号字母、首杀角标、滚榜“揭晓中”黄色描边都保持原语义。 */
.csg-rank-ui .contest-rank-page-shell{
  & .rank-item *,& .solve-item *,& .penalty-item *,& .problem-item *{text-shadow:none!important;-webkit-text-stroke:0!important}
  & .rank-system .problem-item{border-radius:var(--ru-r-sm);border:0;box-shadow:none;font-family:var(--ru-font-mono);font-weight:600;font-variant-numeric:tabular-nums}
  & .rank-system .problem-item .problem-content{display:grid;grid-template-columns:auto minmax(min-content,1fr);align-items:center;gap:0 .2em;padding:0 .24em;line-height:1}
  & .rank-system .problem-item .problem-separator{display:none}
  & .rank-system .problem-item .pro-submit-cnt{grid-column:1;justify-self:start;min-width:1.6em;height:1.5em;padding:0 .2em;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;
    font-size:.66em;font-weight:650;letter-spacing:0;border-radius:3px;background:rgba(0,0,0,.26);color:#fff;text-align:center}
  & .rank-system .problem-item .time-brief{grid-column:2;justify-self:end;text-align:right;font-size:.88em;font-weight:700;letter-spacing:-.01em;color:inherit}
  & .rank-system .problem-item .time-brief.time-brief-long{font-size:.74em}
  & .rank-system .problem-item.pro-ac[d-sub-cnt="1"] .pro-submit-cnt{background:transparent;opacity:.7;font-weight:500}
  & .rank-system .problem-item.pro-none .problem-content{display:flex;justify-content:center;padding:0}
  & .rank-system .problem-item.pro-none .pro-submit-cnt{background:transparent;min-width:0;height:auto;padding:0;font-size:1em;font-weight:650;color:var(--rk-none-ink)}
  & .rank-system .problem-item.pro-none .time-brief,& .rank-system .problem-item.pro-none .time-full{display:none}
  & .rank-system .problem-item.pro-ac{background:var(--rk-ac);color:#fff}
  & .rank-system .problem-item.pro-wa{background:var(--rk-wa);color:#fff}
  & .rank-system .problem-item.pro-pending{background:var(--rk-pend);color:var(--rk-pend-ink)}
  & .rank-system .problem-item.pro-pending .pro-submit-cnt{background:rgba(43,29,0,.16);color:var(--rk-pend-ink)}
  & .rank-system .problem-item.pro-pending .time-brief{color:var(--rk-pend-ink)}
  & .rank-system .problem-item.pro-none{background:var(--rk-none);color:var(--rk-none-ink)!important}
  & .rank-system .problem-item.pro-first-blood-regular{background:var(--rk-fb)!important;border:0!important}
  & .rank-system.fullscreen .problem-item,& .rank-system[data-rank-mode="roll"] .problem-item{font-weight:700}
  /* 滚榜“正在揭晓”的格子是黄色底：字改深色，白字压在琥珀黄上只有 1.8:1 */
  & .rank-system .problem-item.roll-judging-problem{color:var(--rk-pend-ink)!important}
  & .rank-system .problem-item.roll-judging-problem .pro-submit-cnt,& .rank-system .problem-item.roll-judging-problem .time-brief{color:var(--rk-pend-ink)!important;opacity:1}
  & .rank-system .problem-item.roll-judging-problem .pro-submit-cnt{background:rgba(43,29,0,.16)}
}
/* 全屏榜单（含 iOS 上不走原生全屏 API 的伪全屏）：顶栏让位。顶栏在层级梯子里是 sticky 档，高于榜单孤岛，必须显式收起 */
/* 表头行是 sticky：站点顶栏（sticky 档，高于榜单孤岛）占了 --topbar-h，表头要贴在顶栏下沿，不能再 top:0 钻到顶栏底下 */
/* 手机端榜单自带纵向滚动容器，表头在容器内吸顶（top:0），不受顶栏影响 */
/* ---------- 手机端 ---------- */
@media (max-width:767.98px){
  .csg-rank-ui .rg--inline{grid-template-columns:auto auto auto;row-gap:1px}
  .csg-rank-ui .rg--inline .tz{grid-column:3;grid-row:1/3;align-self:center}
  .csg-rank-ui .rg--inline .rg__k+.rg__v{margin-right:0}
  /* 横滑时钉在左边的“队伍类型图标 + 校名 + 队名”块：
   * ojweb 核心把它的宽度写成 calc(100vw - 2*pad - 8px)，默认假设滚动容器几乎等于视口宽。
   * 本系统外壳左右各有页边距，滚动容器更窄；钉住块比容器还宽，滑到最右时块被包含块右缘顶回，
   * 左侧（队伍类型图标所在处）被裁掉，表现为图标消失。这里按本系统实际页边距收窄。 */
  /* 题格：手机上格子只有 40px 宽，上下两行——上“次数”、下“时间”；次数 ≥ 2 的才带小底，1 次的淡成数字 */
  .csg-rank-ui .contest-rank-page-shell .rank-system:not(.fullscreen):not([data-rank-mode="roll"]):not([data-rank-layout="plain"]) .problem-item .problem-content{
    display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:0}
  .csg-rank-ui .contest-rank-page-shell .rank-system:not(.fullscreen):not([data-rank-mode="roll"]):not([data-rank-layout="plain"]) .problem-item .pro-submit-cnt{
    font-size:10px;min-width:1.5em;height:1.4em;line-height:1}
  .csg-rank-ui .contest-rank-page-shell .rank-system:not(.fullscreen):not([data-rank-mode="roll"]):not([data-rank-layout="plain"]) .problem-item .time-brief,
  .csg-rank-ui .contest-rank-page-shell .rank-system:not(.fullscreen):not([data-rank-mode="roll"]):not([data-rank-layout="plain"]) .problem-item .time-brief.time-brief-long{
    font-size:10.5px;font-weight:700;letter-spacing:-.02em;text-align:center;line-height:1}
  .csg-rank-ui .contest-rank-page-shell .rank-system:not(.fullscreen):not([data-rank-mode="roll"]):not([data-rank-layout="plain"]) .problem-item.pro-none .pro-submit-cnt{font-size:12px}
  .csg-rank-ui .rank-system:not(.fullscreen):not([data-rank-mode="roll"]):not([data-rank-layout="plain"]) .team-info-section{
    width:calc(100vw - var(--or-rank-gutter, 24px) - 2 * var(--rank-m-pad) - 4px);
    max-width:calc(100vw - var(--or-rank-gutter, 24px) - 2 * var(--rank-m-pad) - 4px)}
}
/* ---------- 榜单内的弹层、下拉与筛选面板（默认皮肤；用嵌套选择器，作用域同上） ---------- */
.csg-rank-ui .contest-rank-page-shell{
  & .modal-overlay{z-index:var(--csg-z-modal);background:rgba(10,13,20,.45)}
  & .modal-content{background:var(--ru-surface);color:var(--ru-ink);border:1px solid var(--ru-rule-2);border-radius:var(--ru-r-lg);box-shadow:var(--ru-shadow-modal);animation:none}
  & .modal-header{padding:10px 12px 10px 18px;background:var(--ru-surface);border-bottom:1px solid var(--ru-rule);border-radius:var(--ru-r-lg) var(--ru-r-lg) 0 0}
  & .modal-header h3{margin:0;display:flex;align-items:baseline;gap:8px;font-size:14px;font-weight:650;color:var(--ru-ink)}
  & .modal-header h3 en-text{font-size:11px;font-weight:400;color:var(--ru-ink-4)}
  & .modal-body{padding:14px 18px}
  & .close-btn{width:26px;height:26px;font-size:18px;line-height:1;color:var(--ru-ink-3);border-radius:var(--ru-r)}
  & .close-btn:hover{background:var(--ru-sunken);color:var(--ru-ink)}
  & .summary-table{font-family:var(--ru-font-mono);font-size:12px;border-collapse:collapse}
  & .summary-table th{background:var(--ru-surface-2);color:var(--ru-ink-3);font:500 11px/1.2 var(--ru-font-sans);border:0;border-bottom:1px solid var(--ru-rule)}
  & .summary-table td{border:0;border-bottom:1px solid var(--ru-rule);color:var(--ru-ink)}
  & .summary-table tr:nth-child(even){background:transparent}
  & .summary-table tr:hover{background:var(--ru-surface-2)}
  & .summary-table .bilingual-header .header-cn{color:var(--ru-ink);font-weight:600}
  & .summary-table .bilingual-header .header-en{color:var(--ru-ink-4);font-weight:400}

  /* 下拉：排名模式 / 皮肤 */
  & .custom-select-dropdown{background:var(--ru-surface);border:1px solid var(--ru-rule-2);border-radius:var(--ru-r-lg);box-shadow:var(--ru-shadow-pop);padding:4px;color:var(--ru-ink)}
  & .custom-select-option{border-radius:var(--ru-r);color:var(--ru-ink-2);font-size:12.5px;padding:6px 9px;gap:8px}
  & .custom-select-option:hover{background:var(--ru-sunken);color:var(--ru-ink)}
  & .custom-select-option.selected{background:var(--ru-accent-wash);color:var(--ru-accent);font-weight:550}
  & .custom-select-option en-text{color:var(--ru-ink-4);font-size:10.5px}
  & .rank-skin-density-label,& .rank-skin-density-label-cn{color:var(--ru-ink-3);font-size:11.5px}
  & .rank-skin-density-btn,& .rank-skin-density-shortcut-btn{background:var(--ru-surface);color:var(--ru-ink-2);border:1px solid var(--ru-rule-2);border-radius:var(--ru-r);box-shadow:none}
  & .rank-skin-density-btn:hover,& .rank-skin-density-shortcut-btn:hover{background:var(--ru-sunken);color:var(--ru-ink)}
  & .rank-skin-density-level{font-family:var(--ru-font-mono);color:var(--ru-ink)}
  & .rank-skin-vr-switch{background:var(--ru-rule-2);border:0;border-radius:8px}
  & .rank-skin-vr-switch.is-on{background:var(--ru-ok)}

  /* 筛选面板 */
  & .filter-card{background:var(--ru-surface-2);border:1px solid var(--ru-rule);border-radius:var(--ru-r-lg);box-shadow:none}
  & .filter-card-title{color:var(--ru-ink);font-size:12px;font-weight:600}
  & .filter-card-title en-text,& .filter-column-title-text{color:var(--ru-ink-2)}
  & .rank-radio-btn{background:var(--ru-surface);color:var(--ru-ink-2);border:1px solid var(--ru-rule-2);border-radius:var(--ru-r);box-shadow:none}
  & .rank-radio-btn:hover{background:var(--ru-sunken);color:var(--ru-ink)}
  & .rank-radio-btn.active{background:var(--ru-ink);color:var(--ru-surface);border-color:var(--ru-ink)}
  & .filter-title-count{background:var(--ru-sunken);color:var(--ru-ink-2);font:600 11px/1 var(--ru-font-mono);border-radius:3px}
  & .filter-title-clear{color:var(--ru-ink-3);border-radius:var(--ru-r)}
  & .filter-title-clear:hover{background:var(--ru-sunken);color:var(--ru-danger)}
  & .filter-search-input,& .form-control,& .form-select,& .csg-ms-search{background:var(--ru-surface);color:var(--ru-ink);border:1px solid var(--ru-rule-2);border-radius:var(--ru-r);height:30px;padding:0 10px;font:400 12.5px var(--ru-font-sans);outline:none;box-shadow:none}
  & .filter-search-input:focus,& .form-control:focus,& .csg-ms-search:focus{border-color:var(--ru-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--ru-accent) 18%,transparent)}
  & .filter-candidates-dropdown{background:var(--ru-surface);border:1px solid var(--ru-rule-2);border-radius:0 0 var(--ru-r) var(--ru-r);box-shadow:var(--ru-shadow-pop)}
  & .filter-candidate-item{color:var(--ru-ink);border-bottom:1px solid var(--ru-rule)}
  & .filter-candidate-item:hover,& .filter-candidate-item.active{background:var(--ru-surface-2)}
  & .filter-tag{background:var(--ru-sunken);color:var(--ru-ink);border:1px solid var(--ru-rule);border-radius:var(--ru-r)}
  & .filter-tag-meta{color:var(--ru-ink-3)}
  & .filter-tag-remove{color:var(--ru-ink-3)}
  & .filter-tag-remove:hover{color:var(--ru-danger)}
  & .csg-ms-toggle{background:var(--ru-surface);color:var(--ru-ink);border:1px solid var(--ru-rule-2);border-radius:var(--ru-r);min-height:30px}
  & .csg-ms-chip{background:var(--ru-sunken);color:var(--ru-ink);border-radius:3px;padding:1px 6px;font-size:11.5px}
  & .csg-ms-count{color:var(--ru-ink-3);font-size:11.5px}
  & .csg-ms-menu{display:none;position:absolute;z-index:var(--csg-z-over-modal);left:0;top:calc(100% + 4px);background:var(--ru-surface);border:1px solid var(--ru-rule-2);border-radius:var(--ru-r-lg);box-shadow:var(--ru-shadow-pop)}
  & .csg-ms-menu.show{display:block}
  & .csg-ms-search-wrap{background:var(--ru-surface)}
  & .csg-ms-option{color:var(--ru-ink);border-radius:var(--ru-r)}
  & .csg-ms-option:hover{background:var(--ru-surface-2)}
}
/* ojweb 在 #rank-container/.rank-header 上把外框线色写死为浅色，这里改回本系统主题令牌（深色主题否则出现亮白边框） */
.csg-rank-ui .contest-rank-page-shell #rank-container[data-rank-skin="default"],.csg-rank-ui .contest-rank-page-shell .rank-header[data-rank-skin="default"]{--rank-frame-line:var(--ru-rule-2)}
/* ---------- 滚榜颁奖全屏界面：入场/退场分层动效 ----------
   核心脚本只在显示时加 csg-roa--in、隐藏时加 csg-roa--out，整体淡入淡出的时长/缓动来自核心样式（720ms，缓动起步极陡，观感像“猛然出现”）。
   这里覆盖成：整体 560ms“慢起—匀速—缓收”的对称缓动淡入；背景模糊随之渐增；内容分层：奖牌 → 详情卡 → 学校/队名/队员逐项 → 底部三项数据，
   各自 opacity + 轻微上移，按 --d 错峰，约 1 秒内全部到位；退场 320ms 整体淡出（核心的隐藏定时器是 540ms，不会提前移除）。
   只用独立属性 translate/scale/opacity，不碰核心脚本用的 transform。只作用在这一个浮层的十几个元素上，不涉及榜单行。
   “减少动态效果”系统设置下：components.css 只保留 opacity/颜色类过渡，位移/缩放/模糊去掉，所以仍是渐显渐隐，不会瞬间出现。 */
.csg-rank-ui #csg-roll-award-overlay.csg-roa{--roa-in:560ms;--roa-out:320ms;--roa-ease:cubic-bezier(.45,0,.2,1);transition:opacity var(--roa-in) var(--roa-ease)}
.csg-rank-ui #csg-roll-award-overlay.csg-roa.csg-roa--out{transition:opacity var(--roa-out) var(--roa-ease)}
.csg-rank-ui #csg-roll-award-overlay.csg-roa .csg-roa__veil{backdrop-filter:blur(0);-webkit-backdrop-filter:blur(0);transition:backdrop-filter calc(var(--roa-in) + 200ms) var(--roa-ease),-webkit-backdrop-filter calc(var(--roa-in) + 200ms) var(--roa-ease)}
.csg-rank-ui #csg-roll-award-overlay.csg-roa.csg-roa--in .csg-roa__veil{backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.csg-rank-ui #csg-roll-award-overlay.csg-roa :is(.award-photo-column,.award-details-card,.award-roa-block,.award-stats-container){opacity:0;translate:0 12px;transition:opacity var(--roa-out) var(--roa-ease),translate var(--roa-out) var(--roa-ease)}
.csg-rank-ui #csg-roll-award-overlay.csg-roa .award-photo-column{scale:.95;transition:opacity var(--roa-out) var(--roa-ease),translate var(--roa-out) var(--roa-ease),scale var(--roa-out) var(--roa-ease)}
.csg-rank-ui #csg-roll-award-overlay.csg-roa.csg-roa--in :is(.award-photo-column,.award-details-card,.award-roa-block,.award-stats-container){opacity:1;translate:none;transition:opacity 520ms var(--ru-ease-out) var(--d,0ms),translate 520ms var(--ru-ease-out) var(--d,0ms),scale 520ms var(--ru-ease-out) var(--d,0ms)}
.csg-rank-ui #csg-roll-award-overlay.csg-roa.csg-roa--in .award-photo-column{scale:1;--d:120ms}
.csg-rank-ui #csg-roll-award-overlay.csg-roa.csg-roa--in .award-details-card{--d:190ms}
.csg-rank-ui #csg-roll-award-overlay.csg-roa.csg-roa--in .award-roa-block:nth-child(1){--d:240ms}
.csg-rank-ui #csg-roll-award-overlay.csg-roa.csg-roa--in .award-roa-block:nth-child(2){--d:280ms}
.csg-rank-ui #csg-roll-award-overlay.csg-roa.csg-roa--in .award-roa-block:nth-child(3){--d:320ms}
.csg-rank-ui #csg-roll-award-overlay.csg-roa.csg-roa--in .award-roa-block:nth-child(4){--d:360ms}
.csg-rank-ui #csg-roll-award-overlay.csg-roa.csg-roa--in .award-roa-block:nth-child(5){--d:400ms}
.csg-rank-ui #csg-roll-award-overlay.csg-roa.csg-roa--in .award-stats-container{--d:460ms}
/* 滚榜行的校徽占位：核心默认引用 /static/image/logos/ccpc.webp（独立部署不带该图 → 每行一次 404，且是一块白底空框）。
   无校徽时只留一个与主题一致的浅色底框，不再请求图片；有校徽（.has-background）时核心规则仍生效。 */
.csg-rank-ui .rank-system[data-rank-mode="roll"] .rank-row-roll .school-logo{background-color:var(--ru-surface-2)}
.csg-rank-ui .rank-system[data-rank-mode="roll"] .rank-row-roll .school-logo:not(.has-background){background-image:none}
.csg-rank-ui .rank-system[data-rank-mode="roll"] .rank-row-roll .school-logo.has-background{background-image:var(--rank-school-logo-bg)}
/* ---------- 大屏字号令牌 ----------
   普通网页浏览保持紧凑高密度（上面各规则的小字号）；滚榜页与全屏模式面向投屏，字号取 ojweb 原榜单的实测值（1920×1080 计算值），
   长校名靠列宽与折行容纳，不靠缩小字号。滚榜页加载时就用全屏这一档：启动滚榜进全屏时令牌不变，整张榜不换字号、不重排。
   更大的屏幕（如 2560×1440）与 ojweb 一致，由页面自带的“显示建议”引导按需放大浏览器页面，不在这里再叠加缩放。 */
.csg-rank-ui .contest-rank-page-shell .rank-system[data-rank-mode="roll"],
.csg-rank-ui .contest-rank-page-shell .rank-system.fullscreen{
  --rk-fs-hd:19px;--rk-fs-hd-en:14px;--rk-fs-title:19px;--rk-fs-stat:14px;--rk-fs-school:32px;--rk-fs-team:24px;--rk-fs-team-en:14px;--rk-fs-person:14px;--rk-fs-solve:19px;--rk-fs-cell:1em}
.csg-rank-ui .contest-rank-page-shell{
  & .rank-system:is(.fullscreen,[data-rank-mode="roll"]){
    & .rank-header-row .rank-col .header-cell,& .problem-header-content{font-size:var(--rk-fs-hd)}
    & .rank-header-row .rank-col .header-cell en-text{font-size:var(--rk-fs-hd-en)}
    & .problem-header-title{font-size:var(--rk-fs-title)}
    & .problem-header-stats{font-size:var(--rk-fs-stat)}
    & .school-name{font-size:var(--rk-fs-school)}
    & .team-name-cn{font-size:var(--rk-fs-team)}
    & .team-name-en{font-size:var(--rk-fs-team-en)}
    & .coach-info,& .player-info,& .coach-name,& .player-name{font-size:var(--rk-fs-person)}
    & .rank-item,& .solve-item,& .penalty-item{font-size:var(--rk-fs-solve)}
    & .problem-item .pro-submit-cnt{font-size:var(--rk-fs-cell)}
    & .problem-item .time-brief,& .problem-item .time-brief.time-brief-long{font-size:var(--rk-fs-cell)}
  }
}
/* ---------- 队名中英双语行距令牌（t125） ----------
   大屏字号放大后，中文主名与英文副名的行高、两行间距、英文行与下方题块行的间距统一由令牌决定（仅滚榜页/全屏；普通网页保持紧凑）。
   版面高度 = max(主名行高 + 行距 + 英文行高, 校名行高)，题块行整体下移“版面高度 + 留白”，所以每一行高度一致，
   滚榜动画按行实际高度计算，不受影响。字号令牌（--rk-fs-team / --rk-fs-team-en）不变，英文字号仍不小于 ojweb 原榜单。
   灰度层级：校名 > 中文主名 > 英文副名（--ink-3，略缩小字距）；英文副名不再用斜体。 */
.csg-rank-ui .contest-rank-page-shell{
  & .rank-system:is(.fullscreen,[data-rank-mode="roll"]){
    /* 英文副名 descender（g/y/p）与下方题块需要明确留白；行高勿再用 1 */
    --rk-team-lh:1.2;--rk-team-en-lh:1.3;--rk-team-gap:4px;--rk-names-pad:8px;
    --rk-names-h:calc(var(--rk-fs-team) * var(--rk-team-lh) + var(--rk-team-gap) + var(--rk-fs-team-en) * var(--rk-team-en-lh));
    --rk-block-h:max(var(--rk-names-h),calc(var(--rk-fs-school) * 1.5));
    & .team-name-cn{line-height:var(--rk-team-lh);min-height:0}
    & .team-name-en{line-height:var(--rk-team-en-lh);margin-top:var(--rk-team-gap);min-height:0;letter-spacing:.01em}
  }
  & .rank-system.fullscreen:not([data-rank-mode="roll"]) .stats-section{margin-top:calc(var(--rk-block-h) + var(--rk-names-pad))}
  & .rank-system[data-rank-mode="roll"]{
    /* 第一行高度含 names-pad，行距加大，避免英文贴题块 */
    --rank-roll-grid-rows:max(calc(var(--rk-names-h) + var(--rk-names-pad)),var(--rank-roll-row-h)) var(--rank-roll-row-h);
    --rank-roll-row-gap:8px;
  }
  & .rank-system[data-rank-mode="roll"] .rank-row-roll .team-info-section{
    padding-bottom:2px;
  }
}
/* ---------- 功能栏与榜单同宽 ----------
   榜单页的工具条（.controls-time-container）本来就与表格同宽；滚榜页的按钮区（.roll-controls-toolbar）被核心样式限成 1180px，比下面的表格窄一截。
   这里让它撑满壳体宽度，与榜单左右边缘一致：同一套边框、圆角、底色，与榜单之间留同样的间距。 */
.csg-rank-ui .contest-rank-page-shell .roll-controls-toolbar{width:100%;max-width:none;box-sizing:border-box;padding:6px 10px;gap:10px;background:var(--ru-surface);border:1px solid var(--ru-rule);border-radius:var(--ru-r-lg);box-shadow:none}
.csg-rank-ui .contest-rank-page-shell .roll-controls-section{padding:0 0 8px}
.csg-rank-ui .contest-rank-page-shell .roll-controls-section.roll-controls-section-aligned{padding-top:0;padding-bottom:8px}
/* ───────── 题头颜色：色条（t119 定稿方案 A） ─────────
   原来只有角上 7px 小圆点，投大屏看不清。改为字母上方一条题目色色条（仅 ICPC 气球色存在时出现，CCPC 模式不设 --rank-problem-color 故不显示），字母/统计字色按颜色明度自动取黑或白（相对颜色语法）；
   浅色（白/银）统一加发丝描边，避免与底色融在一起；题目字母始终在，颜色只是冗余提示（色盲/LED 低色域也不丢信息）。 */
.csg-rank-ui .problem-header-color-bg{ display: none !important; }
.csg-rank-ui .rank-col-problem[style*='--rank-problem-color']{
  --hd-ink: oklch(from var(--rank-problem-color) calc((0.66 - l) * 1000) 0 0);
  --hd-ring: color-mix(in srgb, #000 24%, transparent);
  position: relative;
}
.csg-rank-ui.csg-rank-ui--dark .rank-col-problem[style*='--rank-problem-color']{ --hd-ring: color-mix(in srgb, #fff 34%, transparent); }
/* 色条：字母上方一条圆角色条（宽度随列宽，厚度随大屏字号令牌） */
.csg-rank-ui .rank-col-problem[style*='--rank-problem-color']::before{
  content: ''; position: absolute; left: 12%; right: 12%; top: 3px; height: calc(var(--rk-fs-hd, 13px) * .42);
  min-height: 5px; border-radius: 99px; background: var(--rank-problem-color); box-shadow: 0 0 0 1px var(--hd-ring);
}
.csg-rank-ui .rank-col-problem[style*='--rank-problem-color'] .problem-header-content{ padding-top: calc(var(--rk-fs-hd, 13px) * .5); }
/* ───────── 队伍类型图标：徽章（t125 定稿方案 C） ─────────
   队伍类型取值（榜单数据 tkind，库内实测 0=29732 / 1=1300 / 2=2700 个队）：0 正式队 Regular；1 女队 Girl；2 打星队 Star（不占正式名次，随“打星模式”处理）。
   不使用 ojweb 的旗帜/爱心/星标字形，也不用 emoji：独立绘制的 SVG（24 栅格），用 mask 着色，颜色随明暗主题令牌：圆角六边形底 + 镂空符号。 */
.csg-rank-ui{--ti-regular:#3f6fb5;--ti-girl:#d6457f;--ti-star:#d99a06;--ti-on:#fff}
.csg-rank-ui.csg-rank-ui--dark{--ti-regular:#8fb0e0;--ti-girl:#f27aa9;--ti-star:#f2c14e;--ti-on:#0d1320}
.csg-rank-ui .team-type-icon > i,.csg-rank-ui .team-type-icon > .bi{display:none}
.csg-rank-ui .team-type-icon::before,.csg-rank-ui .team-type-icon::after{content:'';display:block;width:1.08em;height:1.08em;flex:none;-webkit-mask:var(--ti-m) center/contain no-repeat;mask:var(--ti-m) center/contain no-repeat}
.csg-rank-ui .team-type-icon::after{display:none}
.csg-rank-ui .team-type-icon.regular::before{background:var(--ti-regular)}
.csg-rank-ui .team-type-icon.girl::before{background:var(--ti-girl)}
.csg-rank-ui .team-type-icon.star::before{background:var(--ti-star)}
.csg-rank-ui .team-type-icon{position:relative}
.csg-rank-ui .team-type-icon::before{--ti-m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M12 2.6l8.2 4.7v9.4L12 21.4l-8.2-4.7V7.3z' fill='%23000' stroke='%23000' stroke-width='2' stroke-linejoin='round'/%3E%3C/svg%3E");width:1.2em;height:1.2em}
.csg-rank-ui .team-type-icon::after{display:block;position:absolute;left:50%;top:50%;translate:-50% -50%;width:1.5em;height:1.5em;background:var(--ti-on)}
.csg-rank-ui .team-type-icon.regular::after{--ti-m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Ccircle cx='12' cy='12' r='3' fill='%23000'/%3E%3C/svg%3E")}
.csg-rank-ui .team-type-icon.girl::after{--ti-m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Ccircle cx='12' cy='10.4' r='3.1' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12 13.5v4.4M9.8 15.9h4.4' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
.csg-rank-ui .team-type-icon.star::after{--ti-m:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M12 6.4l1.45 3 3.3.45-2.4 2.3.6 3.3L12 13.9l-2.95 1.55.6-3.3-2.4-2.3 3.3-.45z' fill='%23000' stroke='%23000' stroke-width='1' stroke-linejoin='round'/%3E%3C/svg%3E")}
/* ───────── 文字符号换独立 SVG（t125-e） ─────────
   用户可见的 ★ 原先是字体字符，不同系统字体绘制粗细/大小不一，还可能变成彩色表情。统一换成自绘 SVG（mask，颜色随主题令牌 --rk-star）。
   ojweb 核心里的 ★（全场首答角标、素表首答标记）只在外榜侧覆盖，核心不改。 */
.csg-rank-ui .problem-item.pro-first-blood-global::after{content:'';width:1em;height:1em;background:var(--rk-star,#f5b301);-webkit-mask:var(--or-star) center/contain no-repeat;mask:var(--or-star) center/contain no-repeat;text-shadow:none}
.csg-rank-ui .rank-system[data-rank-layout="plain"] td.problem-item .pro-fb{font-size:0!important;width:10px;height:10px;display:inline-block;background:var(--rk-star,#f5b301);-webkit-mask:var(--or-star) center/contain no-repeat;mask:var(--or-star) center/contain no-repeat}
/* ───────── “显示建议”弹窗的 OK 按钮并入 ui-kit 按钮样式 ─────────
   核心样式把这个按钮写死成 Bootstrap 蓝（#0d6efd）+ 悬浮上移；外榜统一为 ui-kit 主按钮（墨色底、令牌圆角、无投影），明暗主题随令牌。 */
.csg-rank-ui .csg-roll-viewport-zoom-hint-modal__footer .csg-roll-viewport-zoom-hint-modal__ok.btn{
  background-color:var(--ru-ink);color:var(--ru-surface);border:1px solid var(--ru-ink);border-radius:var(--ru-r);box-shadow:none;transform:none;
  min-width:7.5rem;padding:.5rem 1.25rem;transition:background-color .15s,border-color .15s}
.csg-rank-ui .csg-roll-viewport-zoom-hint-modal__footer .csg-roll-viewport-zoom-hint-modal__ok.btn:hover{
  background-color:color-mix(in srgb,var(--ru-ink) 82%,var(--ru-accent));border-color:transparent;color:var(--ru-surface);box-shadow:none;transform:none}
.csg-rank-ui .csg-roll-viewport-zoom-hint-modal__footer .csg-roll-viewport-zoom-hint-modal__ok.btn:active{background-color:var(--ru-ink);transform:none;box-shadow:none}
.csg-rank-ui .csg-roll-viewport-zoom-hint-modal__footer .csg-roll-viewport-zoom-hint-modal__ok.btn:focus-visible{outline:none;box-shadow:var(--ru-ring)}
.csg-rank-ui .csg-roll-viewport-zoom-hint-modal__footer .csg-roll-viewport-zoom-hint-modal__ok .roll-button-text-en{color:inherit;opacity:.72}
/* 同一弹窗的深色适配：核心把小标签/页脚写死成浅色主题值，深色主题下页脚是白条、标签几乎看不见 */
.csg-rank-ui #csg-roll-viewport-zoom-hint-modal .csg-roll-viewport-hint__method-label{color:var(--ru-ink)}
.csg-rank-ui #csg-roll-viewport-zoom-hint-modal .csg-roll-viewport-hint__kbd{color:var(--ru-ink);background:var(--ru-surface-2);border:1px solid var(--ru-rule-2);box-shadow:none}
.csg-rank-ui #csg-roll-viewport-zoom-hint-modal .csg-roll-viewport-zoom-hint-modal__footer{background:var(--ru-surface);border-top:1px solid var(--ru-rule)}

/* 筛选面板：列高随内容（不硬撑空高）；弹层贴内容，仅内容超视口时 body 单层滚动；已选队伍为单行紧凑条，全名/学校点击查看 */
html.csg-rank-ui .rank-filter-modal-content{
  & .filter-columns{min-height:0;height:auto}
  & .filter-column{min-height:0}
  & .filter-tags{flex:0 1 auto;min-height:0;max-height:none;overflow:visible;gap:4px;align-content:flex-start}
  & .filter-tag{padding:2px 6px 2px 8px;line-height:1.3}
  & .filter-tag.filter-tag-team{align-items:center;flex:1 1 100%;min-width:0}
  & .filter-tag-team .filter-tag-text-col{flex-direction:row;align-items:baseline;gap:8px;min-width:0;flex:1;overflow:hidden;white-space:nowrap;cursor:pointer;border-radius:2px}
  & .filter-tag-team .filter-tag-text-col:focus-visible{outline:2px solid var(--ru-focus,currentColor);outline-offset:1px}
  & .filter-tag-team .filter-tag-primary{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;word-break:normal}
  & .filter-tag-team .filter-tag-meta{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;word-break:normal}
}
@media (max-width:640px){html.csg-rank-ui .rank-filter-modal-content .filter-columns{height:auto}html.csg-rank-ui .rank-filter-modal-content .filter-tags{max-height:40dvh}}


/* 消息条（核心 RankToolShowToast）：右上角单条，新提示替换旧提示；快捷键显示为键帽 */
.csg-rank-ui .csg-rank-toast{position:fixed;top:20px;right:20px;z-index:var(--csg-z-toast,10000);display:flex;align-items:center;gap:12px;max-width:min(420px,calc(100vw - 40px));padding:9px 12px 9px 14px;background:var(--ru-ink);color:var(--ru-surface);border-radius:var(--ru-r-lg);box-shadow:var(--ru-shadow-pop);font:500 14px/1.35 var(--ru-font-sans);opacity:0;transform:translateY(-4px);transition:opacity .18s ease,transform .18s ease;pointer-events:none}
.csg-rank-ui .csg-rank-toast.is-on{opacity:1;transform:none}
.csg-rank-ui .csg-rank-toast__en{font-size:12px;font-weight:400;opacity:.72}
.csg-rank-ui .csg-rank-toast__key{flex:none;min-width:24px;padding:2px 7px;border:1px solid color-mix(in srgb,var(--ru-surface) 35%,transparent);border-radius:var(--ru-r-sm);font:600 12px/1.2 var(--ru-font-mono);text-align:center;background:none;color:inherit}
.csg-rank-ui .rank-legend-text{display:flex;flex-direction:column;min-width:0}
.csg-rank-ui .rank-legend-en{font-size:.85em;color:var(--ru-ink-3)}
@media (prefers-reduced-motion:reduce){.csg-rank-ui .csg-rank-toast{transition:none}}
/* 弹层根（挂在 body 下）：取当前皮肤令牌；宿主脚本同步 data-rank-skin（C4） */
html.csg-rank-ui #csg-hover-popover-layer{--csg-pop-bg:var(--ru-surface);--csg-pop-fg:var(--ru-ink);--csg-pop-border:var(--ru-rule-2);--csg-pop-radius:var(--ru-r-lg);box-shadow:var(--ru-shadow-pop)}
/* 会跳转的队伍链接：指针 + 小外链图标，悬停 300ms 出“点击打开队伍页”提示，避免误跳 */
.csg-rank-ui .rank-system a[data-rank-nav-link]{cursor:pointer;text-decoration:none}
.csg-rank-ui .rank-system a.rank-team-id-tag[data-rank-nav-link]::after,
.csg-rank-ui .rank-system a.account-display[data-rank-nav-link]::after{content:"";display:inline-block;width:.78em;height:.78em;margin-left:.3em;vertical-align:-.04em;background:currentColor;opacity:.55;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 3h4v4M13 3 7.5 8.5M12 9.5V13H3V4h3.5'/%3E%3C/svg%3E") center/contain no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 3h4v4M13 3 7.5 8.5M12 9.5V13H3V4h3.5'/%3E%3C/svg%3E") center/contain no-repeat}
.csg-rank-ui .rank-system a[data-rank-nav-link]:hover::after{opacity:.9}
/* 表头底色：核心 rank.css 舞台布局表头读 --rank-header-bg（原为写死浅色，外榜夜间会在表头格间露出白缝） */
.csg-rank-ui .contest-rank-page-shell{--rank-header-bg:var(--ru-surface-2)}
.csg-hover-popover-layer--passive{pointer-events:none}
/* 队伍详情弹层只在文字上触发：容器不接收指针（会跳转的队号/账号链接 [data-rank-nav-link] 必须恢复，否则点不了、也没有跳转提示），学校名/队名/教练队员/类型徽章/旗帜收缩到文字宽度（右侧空白不触发） */
html.csg-rank-ui .top-section :is(.team-info-section,.team-info,.team-names,.coach-player-section,.coach-info,.player-info),
html.csg-rank-ui td.rank-plain-team,html.csg-rank-ui td.rank-plain-team :is(.rank-plain-id-line,.rank-plain-school-line,.team-names){pointer-events:none}
html.csg-rank-ui :is(.top-section,td.rank-plain-team) :is(.school-name,.team-name-cn,.team-name-en,.coach-name,.player-name,.coach-icon,.player-icon,.team-type-icon,.flag-icon,.rank-team-id-tag,.rank-plain-school-line>*,[data-rank-nav-link]){pointer-events:auto}
html.csg-rank-ui :is(.top-section,td.rank-plain-team) :is(.team-name-cn,.team-name-en,.coach-name,.player-name,.school-name){width:fit-content;max-width:100%}
/* 全屏榜面（rank.css 按题数定宽）：版心外用页面底色衬底，榜面用表面色加 1px 描边，两侧留白对称 */
.csg-rank-ui .contest-rank-page-shell .rank-system.fullscreen[data-rank-pn]:not([data-rank-mode="roll"]):not([data-rank-layout="plain"]){background:var(--ru-paper)}
.csg-rank-ui .contest-rank-page-shell .rank-system.fullscreen[data-rank-pn]:not([data-rank-mode="roll"]):not([data-rank-layout="plain"]) .rank-content-wrapper{background:var(--ru-surface);box-shadow:0 0 0 1px var(--ru-rule)}

/* ───────── 榜单筛选：简单 / 高级分页签与高级规则（docs/future_design/27） ─────────
   规则卡片：细边框，错误标红、字段缺失标琥珀，停用整体变淡；字段勾选为药丸，选中为墨色实底。手机（≤640px）整个筛选弹层改为底部抽屉，规则默认折叠为一行。 */
.csg-rank-ui{--rf-warn:#9a5b00}
.csg-rank-ui.csg-rank-ui--dark{--rf-warn:#e6a23c}
html.csg-rank-ui .rank-filter-modal-content{
  & .modal-header{display:flex;align-items:center;gap:12px}
  & .rf-hit{margin-left:auto;font:500 12px/1.2 var(--ru-font-sans);color:var(--ru-ink-3);font-variant-numeric:tabular-nums;white-space:nowrap}
  & .rf-hit b{color:var(--ru-ink);font-weight:650}
  & .rf-hit.is-zero b{color:var(--ru-danger)}
  & .rf-hit{text-align:right;line-height:1.25}
  & .rf-hit en-text{display:block;font-size:10.5px;color:var(--ru-ink-4)}
  /* 短标签中英同行（全站 en-text 默认另起一行，会把分段按钮与药丸撑高） */
  & :is(.rf-tab,.rf-adv-label,.rf-seg-btn,.rf-fields-label,.rf-check,.rf-add,.rf-count) en-text{display:inline}
  & .rf-tabs{display:flex;gap:2px;margin:2px 0 12px;border-bottom:1px solid var(--ru-rule)}
  & .rf-tab{position:relative;display:inline-flex;align-items:baseline;gap:6px;padding:8px 12px 9px;border:0;background:none;color:var(--ru-ink-3);font:600 13px/1 var(--ru-font-sans);cursor:pointer;border-radius:var(--ru-r) var(--ru-r) 0 0}
  & .rf-tab en-text{font-size:11px;font-weight:450;color:var(--ru-ink-4)}
  & .rf-tab:hover,& .rf-tab.is-active{color:var(--ru-ink)}
  & .rf-tab.is-active::after{content:'';position:absolute;left:10px;right:10px;bottom:-1px;height:2px;border-radius:2px;background:var(--ru-ink)}
  & .rf-tab:focus-visible{outline:none;box-shadow:var(--ru-ring)}
  & .rf-tab-badge{align-self:center;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--ru-accent);color:var(--ru-surface);font:600 10.5px/16px var(--ru-font-mono);text-align:center}
  & .rf-tab-badge.is-broken{background:var(--ru-danger)}
  & .rf-tab-badge.is-broken:empty{min-width:8px;width:8px;height:8px;padding:0}
  & [data-rf-pane="advanced"]{display:flex;flex-direction:column;gap:10px;min-height:0;flex:1 1 auto}
  & [data-rf-pane][hidden]{display:none}
  & .rf-adv-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px}
  & .rf-adv-combine{display:flex;align-items:center;gap:10px}
  & .rf-adv-label{font:600 12px/1.2 var(--ru-font-sans);color:var(--ru-ink-2)}
  & .rf-adv-label en-text{margin-left:4px;font-weight:400;font-size:10.5px;color:var(--ru-ink-4)}
  & .rf-seg{display:inline-flex;padding:2px;background:var(--ru-sunken);border:1px solid var(--ru-rule);border-radius:var(--ru-r)}
  & .rf-seg-btn{padding:6px 10px;border:0;border-radius:calc(var(--ru-r) - 1px);background:none;color:var(--ru-ink-3);font:600 12px/1 var(--ru-font-sans);cursor:pointer}
  & .rf-seg-btn en-text{margin-left:4px;font-weight:450;font-size:10.5px;opacity:.8}
  & .rf-seg-btn:hover{color:var(--ru-ink)}
  & .rf-seg-btn.is-on{background:var(--ru-surface);color:var(--ru-ink);box-shadow:0 1px 2px rgba(15,21,32,.14)}
  & .rf-seg-btn:focus-visible{outline:none;box-shadow:var(--ru-ring)}
  & .rf-adv-tools{display:flex;gap:2px}
  & .rf-icon-btn{display:inline-flex;align-items:center;justify-content:center;flex:none;width:28px;height:28px;padding:0;border:0;border-radius:var(--ru-r);background:none;color:var(--ru-ink-3);font-size:14px;cursor:pointer}
  & .rf-icon-btn:hover{background:var(--ru-sunken);color:var(--ru-ink)}
  & .rf-icon-btn-danger:hover{color:var(--ru-danger)}
  & .rf-icon-btn:focus-visible{outline:none;box-shadow:var(--ru-ring)}
  & .rf-help{cursor:help}
  & .rf-adv-notice{padding:8px 10px;border:1px solid color-mix(in srgb,var(--rf-warn) 40%,var(--ru-rule));border-radius:var(--ru-r);color:var(--rf-warn);font-size:12px;line-height:1.45}
  & .rf-adv-notice en-text{display:block;font-size:11px;opacity:.85}
  & .rf-paste{display:flex;flex-direction:column;gap:8px;padding:10px;border:1px dashed var(--ru-rule-2);border-radius:var(--ru-r-lg);background:var(--ru-surface-2)}
  & .rf-paste[hidden]{display:none}
  & .rf-paste-input{width:100%;min-height:76px;padding:8px 10px;resize:vertical;border:1px solid var(--ru-rule-2);border-radius:var(--ru-r);background:var(--ru-surface);color:var(--ru-ink);font:12px/1.5 var(--ru-font-mono);outline:none;box-sizing:border-box}
  & .rf-paste-input:focus{border-color:var(--ru-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--ru-accent) 18%,transparent)}
  & .rf-paste-msg{font-size:12px;line-height:1.5}
  & .rf-paste-msg.is-error{color:var(--ru-danger)}
  & .rf-paste-msg en-text{display:block;font-size:11px;opacity:.85}
  & .rf-paste-acts{display:flex;justify-content:flex-end;gap:8px}
  & .rf-rules{display:flex;flex-direction:column;gap:8px}
  & .rf-adv-empty{padding:28px 14px;border:1px dashed var(--ru-rule-2);border-radius:var(--ru-r-lg);color:var(--ru-ink-3);font-size:12.5px;line-height:1.5;text-align:center}
  & .rf-adv-empty en-text{display:block;margin-top:2px;font-size:11px;color:var(--ru-ink-4)}
  & .rf-rule{padding:8px 8px 10px 10px;border:1px solid var(--ru-rule-2);border-radius:var(--ru-r-lg);background:var(--ru-surface);transition:border-color .15s,opacity .15s}
  & .rf-rule:focus-within{border-color:color-mix(in srgb,var(--ru-accent) 45%,var(--ru-rule-2))}
  & .rf-rule.is-error{border-color:color-mix(in srgb,var(--ru-danger) 55%,var(--ru-rule-2))}
  & .rf-rule.is-warn{border-color:color-mix(in srgb,var(--rf-warn) 50%,var(--ru-rule-2))}
  & .rf-rule.is-off{opacity:.58}
  & .rf-rule-head{display:flex;align-items:center;gap:8px}
  & .rf-rule-no{flex:none;width:16px;text-align:right;font:600 11.5px/1 var(--ru-font-mono);color:var(--ru-ink-4)}
  & .rf-switch{position:relative;display:inline-flex;flex:none;cursor:pointer}
  & .rf-switch input{position:absolute;inset:0;margin:0;opacity:0;cursor:pointer}
  & .rf-switch-track{position:relative;width:28px;height:16px;border-radius:8px;background:var(--ru-rule-2);transition:background .15s}
  & .rf-switch-track::after{content:'';position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.25);transition:translate .15s var(--ru-ease-out)}
  & .rf-switch input:checked + .rf-switch-track{background:var(--ru-ok)}
  & .rf-switch input:checked + .rf-switch-track::after{translate:12px 0}
  & .rf-switch input:focus-visible + .rf-switch-track{box-shadow:var(--ru-ring)}
  & .rf-pattern{flex:1 1 auto;min-width:0;height:32px;padding:0 10px;border:1px solid var(--ru-rule-2);border-radius:var(--ru-r);background:var(--ru-surface-2);color:var(--ru-ink);font:500 13px/1 var(--ru-font-mono);outline:none}
  & .rf-pattern::placeholder{color:var(--ru-ink-4);font-family:var(--ru-font-sans);font-weight:400}
  & .rf-pattern:focus{background:var(--ru-surface);border-color:var(--ru-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--ru-accent) 18%,transparent)}
  & .rf-pattern.is-invalid{border-color:var(--ru-danger)}
  & .rf-pattern.is-invalid:focus{box-shadow:0 0 0 3px color-mix(in srgb,var(--ru-danger) 18%,transparent)}
  & .rf-count{flex:none;min-width:56px;text-align:right;color:var(--ru-ink-4);font:600 12.5px/1 var(--ru-font-mono);font-variant-numeric:tabular-nums}
  & .rf-count.is-num{color:var(--ru-ink)}
  & .rf-count en-text{margin-left:3px;font:400 10.5px var(--ru-font-sans);color:var(--ru-ink-4)}
  & .rf-rule.is-pending .rf-count{color:var(--ru-ink-4)}
  & .rf-rule-acts{display:flex}
  & .rf-rule-toggle{display:none}
  & .rf-rule-toggle i{transition:rotate .18s var(--ru-ease-out)}
  & .rf-rule:not(.is-collapsed) .rf-rule-toggle i{rotate:180deg}
  & .rf-rule-msg{display:flex;align-items:flex-start;gap:6px;margin:6px 0 0 24px;font-size:12px;line-height:1.45;word-break:break-word}
  & .rf-rule-msg[hidden]{display:none}
  & .rf-rule-msg i{margin-top:1px}
  & .rf-rule-msg.is-error{color:var(--ru-danger)}
  & .rf-rule-msg.is-warn{color:var(--rf-warn)}
  & .rf-rule-msg en-text{display:block;font-size:11px;opacity:.82}
  & .rf-rule-body{display:flex;flex-direction:column;gap:8px;margin:8px 0 0 24px}
  & .rf-fields{display:flex;flex-wrap:wrap;align-items:center;gap:4px}
  & .rf-fields-label{margin-right:4px;color:var(--ru-ink-3);font:600 11.5px/1 var(--ru-font-sans)}
  & .rf-fields-label en-text{margin-left:3px;font-weight:400;font-size:10.5px;color:var(--ru-ink-4)}
  & .rf-field{display:inline-flex;align-items:baseline;gap:4px;height:24px;padding:0 9px;border:1px solid var(--ru-rule-2);border-radius:12px;background:var(--ru-surface);color:var(--ru-ink-2);font:500 12px/22px var(--ru-font-sans);cursor:pointer;transition:background .12s,border-color .12s,color .12s}
  & .rf-field-en{font-size:10.5px;color:var(--ru-ink-4)}
  & .rf-field:hover{border-color:var(--ru-ink-3);color:var(--ru-ink)}
  & .rf-field.is-on{background:var(--ru-ink);border-color:var(--ru-ink);color:var(--ru-surface)}
  & .rf-field.is-on .rf-field-en{color:color-mix(in srgb,var(--ru-surface) 62%,transparent)}
  & .rf-field.is-missing{border-style:dashed;background:var(--ru-sunken);border-color:var(--ru-rule-2);color:var(--ru-ink-4);text-decoration:line-through}
  & .rf-field.is-missing .rf-field-en{color:var(--ru-ink-4)}
  & .rf-field:focus-visible{outline:none;box-shadow:var(--ru-ring)}
  & .rf-opts{display:flex;flex-wrap:wrap;gap:6px 18px}
  & .rf-check{display:inline-flex;align-items:center;gap:6px;color:var(--ru-ink-2);font-size:12px;cursor:pointer}
  & .rf-check input{width:14px;height:14px;margin:0;accent-color:var(--ru-ink)}
  & .rf-check en-text{margin-left:4px;font-size:10.5px;color:var(--ru-ink-4)}
  & .rf-add{align-self:flex-start;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border:1px dashed var(--ru-rule-2);border-radius:var(--ru-r);background:none;color:var(--ru-ink-2);font:600 12.5px/1 var(--ru-font-sans);cursor:pointer}
  & .rf-add en-text{margin-left:2px;font-weight:400;font-size:10.5px;color:var(--ru-ink-4)}
  & .rf-add:hover:not(:disabled){border-color:var(--ru-ink-3);background:var(--ru-surface-2);color:var(--ru-ink)}
  & .rf-add:disabled{opacity:.5;cursor:not-allowed}
  & .rf-add-n{margin-left:4px;color:var(--ru-ink-4);font:500 11px/1 var(--ru-font-mono)}
  & .rank-filter-modal-footer{justify-content:flex-end;background:var(--ru-surface);border-top:1px solid var(--ru-rule)}
  & .rank-filter-modal-footer-left:empty{display:none}
}
/* 按钮与空状态：弹层与榜单区（置顶区的“没有符合条件的队伍”）共用 */
html.csg-rank-ui .rf-btn{display:inline-flex;align-items:baseline;gap:4px;height:32px;padding:0 14px;border:1px solid var(--ru-rule-2);border-radius:var(--ru-r);background:var(--ru-surface);color:var(--ru-ink-2);font:600 12.5px/30px var(--ru-font-sans);cursor:pointer;white-space:nowrap}
html.csg-rank-ui .rf-btn en-text{display:inline;font-weight:400;font-size:10.5px;opacity:.75}
html.csg-rank-ui .rf-btn:hover{background:var(--ru-sunken);color:var(--ru-ink)}
html.csg-rank-ui .rf-btn-primary{background:var(--ru-ink);border-color:var(--ru-ink);color:var(--ru-surface)}
html.csg-rank-ui .rf-btn-primary:hover{background:color-mix(in srgb,var(--ru-ink) 84%,var(--ru-accent));color:var(--ru-surface)}
html.csg-rank-ui .rf-btn:focus-visible{outline:none;box-shadow:var(--ru-ring)}
/* 榜单比屏幕宽时（手机横向滚动）：贴着可视区左缘、按可视宽度居中，不随整张榜单宽度跑出屏幕 */
html.csg-rank-ui .rf-empty{position:sticky;left:0;box-sizing:border-box;width:min(100%,calc(100vw - 40px));display:flex;flex-direction:column;align-items:center;gap:10px;padding:40px 16px;color:var(--ru-ink-3);text-align:center}
html.csg-rank-ui .rf-empty > .bi{font-size:22px;color:var(--ru-ink-4)}
html.csg-rank-ui .rf-empty-text{font:600 13.5px/1.4 var(--ru-font-sans);color:var(--ru-ink-2)}
html.csg-rank-ui .rf-empty-text en-text{display:block;font-weight:400;font-size:11.5px;color:var(--ru-ink-4)}
html.csg-rank-ui .rf-empty-row > td{border:0 !important;background:transparent !important}
/* 工具条悬停明细里的高级规则；按钮左上角红点 = 有规则写法错误 / 超时，不生效 */
html.csg-rank-ui .filter-popover .rf-pop-rule{display:inline-flex;align-items:baseline;gap:6px;background:var(--ru-sunken);border:1px solid var(--ru-rule);color:var(--ru-ink)}
html.csg-rank-ui .filter-popover .rf-pop-rule code{font:12px/1.4 var(--ru-font-mono);color:inherit;background:none;padding:0}
html.csg-rank-ui .filter-popover .rf-pop-rule-n{font:600 11px var(--ru-font-mono);color:var(--ru-ink-3)}
html.csg-rank-ui .filter-btn.rf-btn-has-broken{position:relative}
html.csg-rank-ui .filter-btn.rf-btn-has-broken::before{content:'';position:absolute;top:3px;left:3px;width:7px;height:7px;border-radius:50%;background:var(--ru-danger);box-shadow:0 0 0 2px var(--ru-surface)}
/* 手机：底部抽屉；标题与页脚固定，中间滚动；规则折叠为一行（编号、开关、正则、命中数、展开） */
@media (max-width:640px){
  html.csg-rank-ui .rank-filter-modal-overlay{align-items:flex-end !important;padding:0 !important;overflow:hidden}
  html.csg-rank-ui .rank-filter-modal-content{
    width:100%;max-width:100%;max-height:88dvh;margin:0;display:flex;flex-direction:column;border-bottom:0;border-radius:14px 14px 0 0;animation:rf-sheet-in .24s var(--ru-ease-out);
    & .modal-header{position:relative;flex:none;padding-top:16px}
    & .modal-header::before{content:'';position:absolute;top:6px;left:50%;width:36px;height:4px;margin-left:-18px;border-radius:2px;background:var(--ru-rule-2)}
    & .rank-filter-modal-body{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:12px 14px !important}
    & .rank-filter-modal-footer{flex:none;padding:10px 14px max(10px,env(safe-area-inset-bottom)) !important;border-radius:0}
    & .rank-filter-modal-footer-actions{width:100%}
    & .rank-filter-modal-footer-actions .rf-btn{flex:1;justify-content:center}
    & .rf-hit en-text,& .rf-seg-btn en-text,& .rf-field-en,& .rf-count en-text,& .rf-adv-label en-text{display:none}
    & [data-rf-pane="advanced"]{min-height:0}
    & .rf-rule{padding:8px}
    & .rf-rule-head{gap:6px}
    & .rf-pattern{height:36px;font-size:16px}
    & .rf-count{min-width:34px}
    & .rf-rule-toggle{display:inline-flex}
    & .rf-rule.is-collapsed .rf-rule-body,& .rf-rule.is-collapsed .rf-rule-acts{display:none}
    & .rf-rule-msg,& .rf-rule-body{margin-left:0}
    & .rf-field{height:30px;padding:0 11px;line-height:28px}
    & .rf-adv-bar{align-items:flex-start}
  }
}
@keyframes rf-sheet-in{from{transform:translateY(28px);opacity:.5}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){html.csg-rank-ui .rank-filter-modal-content{animation:none}}

