/* ============================================================
   全局体验统一（2026-10-22 · C2.35）：字号 / 行高 / 间距 / 对齐
   加载在最后，只覆盖不改原文件；要撤就删这一行 link。
   ============================================================ */

/* ---------- 1) 字号与行高：全局 base 提一档，读久了不累 ---------- */
body{font-size:15px;line-height:1.55}
code,.mono{font-size:12.5px}
.hint,.fine,.sub{font-size:12.5px;line-height:1.5}
.tag{font-size:12px}
.empty{font-size:13.5px}

/* 侧栏导航与身份区 */
.navi{font-size:14px}
.top h1{font-size:22px}
.top p{font-size:13px}

/* ---------- 2) 卡片与区块：统一内边距与标题层级 ---------- */
.card .ch h3{font-size:15px;font-weight:650;letter-spacing:.1px}
.card .ch .hint{font-size:12.5px}
.tbl-meta{font-size:12.5px}

/* 表格：正字 13.5，表头 12 */
.tbl{font-size:13.5px}
.tbl th{font-size:12px}
.tbl .sub{font-size:12.5px}
/* C2.105 贴内容宽度的列（发放时间、日期这类短列）：auto 布局下 width:1% 会被压到
   刚好装下内容，省下的宽度让给文字列，免得短列被撑开一大片空白 */
.tbl .fit{width:1%;white-space:nowrap}

/* 按钮与输入：和正文同档 */
.btn{font-size:13.5px}
.btn.sm{font-size:12.5px;height:30px}
.tab{font-size:13.5px}
.sel-mini{font-size:12.5px}
.linkbtn{font-size:13px}

/* ---------- 2) 卡片与区块：统一内边距与标题层级 ---------- */
.card .ch h3{font-size:14px;font-weight:650;letter-spacing:.1px}
.card .ch .hint{font-size:12px}
.tbl-meta{font-size:12px}

/* ---------- 3) 统计卡：数字是主角，标签退后 ---------- */
.stat{padding:13px 15px}
.stat i{font-size:12.5px;margin-bottom:6px;letter-spacing:.2px}
.stat b{font-size:23px;line-height:1.25}
.stat b .unit{font-size:12.5px}
.stat-acts .linkbtn,.stat-acts .sub{font-size:12.5px}

/* ---------- 4) 顶部摘要条（hero）：大数字 + 一句话 ---------- */
.act-hero{padding:14px 18px;gap:16px}
.act-hero .n{font-size:28px;font-weight:700;line-height:1}
.act-hero .t{font-size:15px;font-weight:650}
.act-hero .s{font-size:12.5px;margin-top:3px}

/* ---------- 5) 矩阵：行高统一 + 文字放大 + 提示语单行 ---------- */
/* 格子：放大一格字号，行高给足 */
.mxcell{padding:10px 12px;min-height:66px}
.mxcell b{font-size:13.6px;line-height:1.4}
.mxcell span{font-size:11.6px;line-height:1.45}

/* 列头：与正文同高，站名一行、提示一行 */
.mxcell.mx-head{min-height:58px;padding:10px 12px;justify-content:center}
.mx-head b{font-size:14px}
.mx-head span{font-size:11.8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 行头：任务名完整显示，不截断（下面两行各占一行）。
   C2.103：任务名带 emoji 后缀，单行 ellipsis 会把「Hidden Gems: Small Town USA 🏡」
   截成「Hidden Gems: Small Town...」，末尾符号直接消失——这跟「卡片上带符号、
   列表里不带」是同一类问题，都必须按原始数据原样显示。
   不用 -webkit-box 做行数封顶：那样 <b> 变成块级容器，行首的等级徽标会被挤到单独一行。 */
.mx-acc b{font-family:inherit;font-size:14px;font-weight:650;line-height:1.4;
  white-space:normal;overflow-wrap:anywhere;display:block}
.mx-acc span{font-size:11.8px;line-height:1.5;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.mx-acc .mxreq-stage{font-weight:600;font-style:normal}
/* 第三行（账号 · 剪辑师 · 要求）允许折行：要求里有分段注记这种长文案，
   单行 ellipsis 会把「共6条」吞掉 —— 宁可多一行，也不许截断原始信息 */
.mx-acc .mx-meta{white-space:normal;overflow-wrap:anywhere;text-overflow:clip;overflow:visible}
/* C2.120 任务持续区间：独占一行（行头三行结构：任务名 / 起~止 / 其余），
   永远渲染。密度模式下也强制 100% 换行，否则会被挤到 meta 那一行里。
   不许省略号：区间被截掉尾巴就等于又变回「只有一个时间点」，宁可折行。 */
.mx-acc .mx-valid{color:var(--txt2);font-variant-numeric:tabular-nums;
  white-space:normal;overflow-wrap:anywhere;text-overflow:clip;overflow:visible}
/* 含兜底的一端（录入时刻 / 至今）：略压一档，跟「看板明确设过」的区间区分开，
   但仍要比第三行的账号/要求更实 —— 这是行头里唯一的「时间」信息 */
.mx-acc .mx-valid-open{color:var(--txt2);opacity:.82}
/* 起止倒置这类脏数据：标黄提示，但不偷偷对调两端 */
.mx-acc .mx-valid-bad{color:var(--amber);font-weight:600}
.mx-dense .mx-acc .mx-valid,.mx-ultra .mx-acc .mx-valid{flex:0 0 100%;white-space:nowrap}

/* 条目：提示语单行截断，格子高度统一 */
.mxent{padding:9px 11px;min-height:56px}
.mxent b{font-size:13.6px;line-height:1.4}
.mxent span{font-size:11.6px;line-height:1.45;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mxseg{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:11.4px}

/* 条目占满格子（C2.38）：去掉外壳的内边距与底色，条目通栏、高度随行撑满 */
.mxcell.mx-multi{padding:0;gap:4px;background:transparent;border-color:transparent;box-shadow:none}
.mxcell.mx-multi .mxent{flex:1}

/* 「还有 N 条」：比条目矮一档，不抢主信息 */
.mxent.mx-more{min-height:34px;font-size:11.5px}

/* ---------- 6) 表单与弹窗：标签与输入框层级 ---------- */
.field span{font-size:12.5px;font-weight:600}
.field input,.field select,.field textarea{font-size:14px}

/* ---------- 7) 侧栏：导航字号提一档 ---------- */
.side nav a{font-size:14px}

/* ---------- 8) 概况页周期卡：数字更大、行更松（C2.89 改结构后同步） ---------- */
.ov-card{padding:14px 16px 15px}
.ov-card-h i{font-size:13.5px}
.ov-card-h .ov-num{font-size:23px}
.ov-card-h .ov-unit{font-size:12px}
.ov-kv b{font-size:14.5px}
.ov-foot{font-size:12.5px}
.ov-foot b{font-size:14.5px}

/* ---------- 10) 左下角用户区（C2.43）：去头像，按优先级竖排 ---------- */
.side-foot{padding-top:8px;border-top:1px solid var(--line)}
/* C2.100：这一段 .who 系列已移到 polish-2.css 第 25 节整体重写，勿在此再定义 */

/* ---------- 9) 我的账号卡片（C2.41）：账号名是主角，设备/主页带标签各占一行 ---------- */
.tk-card.simple .tk-name{font-size:14.5px;font-weight:650;color:var(--txt);font-family:var(--mono)}
.tk-card-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.tk-rows{margin-top:8px;display:flex;flex-direction:column;gap:5px;
  border-top:1px dashed var(--line);padding-top:8px}
.tk-row{display:flex;align-items:baseline;gap:8px;font-size:12.5px;color:var(--txt2)}
.tk-row i{font-style:normal;flex:0 0 34px;font-size:11.5px;color:var(--txt3)}
.tk-row a{text-decoration:none}
.tk-row a:hover{text-decoration:underline}
.tk-card.is-void{opacity:.72}
.tk-void-note{margin-top:8px;font-size:11.5px;color:var(--red)}

/* ---------- 12) 矩阵紧凑模式（C2.44）：压缩卡片高度，一屏看更多任务 ---------- */
/* 熟练用户视角：信息行都在，但间距/字号收紧；行头 meta 与要求注记合并为一行 */
.mx-dense .mxgrid{gap:3px}
.mx-dense .mxcell{padding:4px 8px;min-height:32px;gap:0}
.mx-dense .mxcell.mx-head{min-height:34px;padding:4px 8px}
.mx-dense .mx-head b{font-size:12.2px}
.mx-dense .mx-head span{display:none}
.mx-dense .mx-head .mxcol-n{font-size:10.4px}
/* 行头三行并两行：meta 与要求注记同一行 */
.mx-dense .mx-acc b{font-size:12.4px;line-height:1.3}
.mx-dense .mx-acc span{display:inline;font-size:10.4px;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mx-dense .mx-acc .mx-req{margin-left:6px;vertical-align:1px}
.mx-dense .mxent{padding:3px 7px;min-height:30px;gap:0}
.mx-dense .mxent b{font-size:11.8px;line-height:1.3}
.mx-dense .mxent span{font-size:10.2px;line-height:1.3}
.mx-dense .mxseg{font-size:10.2px}
.mx-dense .mx-more{padding:1px 7px;font-size:10.2px;min-height:22px}
.mx-dense .mx-multi{gap:3px}

/* ---------- 13) 明细弹层底部状态条（C2.45）：关键状态必须带框 ---------- */
/* 不可操作：灰框说明；可操作：整条就是主按钮，一眼知道点它 */
/* C2.52：状态条改细条——单行、普通按钮高度，不再是大色块（参考「判失败」条样式） */
.detail-verdict{display:flex;align-items:center;justify-content:center;gap:8px;text-align:center;
  width:100%;box-sizing:border-box;margin-top:12px;padding:8px 14px;border-radius:9px;
  border:1px solid var(--line);background:var(--soft);
  font-size:13px;line-height:1.4;color:var(--txt2)}
/* 可操作：品牌色填充但压扁成单行细条——是主按钮，但只占一行 */
.detail-verdict.act{cursor:pointer;font:inherit;color:#fff;background:var(--brand);border-color:var(--brand);
  transition:filter .14s}
.detail-verdict.act:hover{filter:brightness(1.06)}
.detail-verdict.act b{font-size:13.5px;font-weight:650}
.detail-verdict.act span{font-size:12px;opacity:.85}

/* ---------- 14) 投放矩阵 hero 提示条（C2.47）：待投流/烧钱要高亮 ---------- */
.hero-alert{display:inline-flex;align-items:center;gap:4px;margin-right:8px;
  padding:2px 10px;border-radius:999px;font-size:12.5px;font-weight:600;line-height:1.6}
.hero-alert.warn{color:var(--amber);background:color-mix(in srgb, var(--amber) 12%, transparent);
  border:1px solid color-mix(in srgb, var(--amber) 35%, transparent)}
.hero-alert.danger{color:var(--red);background:color-mix(in srgb, var(--red) 10%, transparent);
  border:1px solid color-mix(in srgb, var(--red) 32%, transparent)}
/* 蓝 = 要动手（与矩阵动作格同色系的配色纪律），别用品牌绿，会跟底色糊在一起 */
.hero-alert.act{color:var(--blue);background:var(--blue-d);border:1px solid var(--line-blue)}
.hero-alert.ok{color:var(--green);background:color-mix(in srgb, var(--green) 10%, transparent);
  border:1px solid color-mix(in srgb, var(--green) 32%, transparent)}

/* ---------- 15) 矩阵超紧凑模式（C2.51）：比紧凑再压一档，行高 ~36px ---------- */
/* 行头只留两行（任务名 + meta/要求并一行），格子提示语仍保留单行 */
.mx-ultra .mxgrid{gap:2px}
.mx-ultra .mxcell{padding:3px 6px;min-height:26px;gap:0;border-radius:8px}
.mx-ultra .mxcell.mx-head{min-height:28px;padding:3px 6px}
.mx-ultra .mx-head b{font-size:11.6px}
.mx-ultra .mx-head span{display:none}
.mx-ultra .mx-head .mxcol-n{font-size:10px}
.mx-ultra .mx-acc b{font-size:11.8px;line-height:1.25}
.mx-ultra .mx-acc span{display:inline;font-size:10px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mx-ultra .mxent{padding:2px 6px;min-height:26px;gap:0;border-radius:7px}
.mx-ultra .mxent b{font-size:11.2px;line-height:1.25}
.mx-ultra .mxent span{font-size:9.8px;line-height:1.25}
.mx-ultra .mxseg{font-size:9.8px}
.mx-ultra .mx-more{padding:0 6px;font-size:9.8px;min-height:18px}
.mx-ultra .mx-multi{gap:2px}
/* 紧凑/超紧凑下：行头 meta + 要求注记必须一行，长了就截断（悬停行头有全名） */
.mx-dense .mx-acc,.mx-ultra .mx-acc{white-space:nowrap;overflow:hidden}
/* 行头改两行布局：任务名独占一行，meta 与要求注记同一行（flex 换行，不占三行） */
/* C2.113：.mxcell 原本是 flex-column + justify-content:center（纵向居中）；
   这里切成横向后，center 会变成「水平居中」，导致 meta 那一行比有效期缩进十几像素。
   必须显式改回 flex-start，三行（任务名 / 有效期 / 其余）才是同一条左基线。 */
.mx-dense .mx-acc,.mx-ultra .mx-acc{flex-direction:row;flex-wrap:wrap;align-items:baseline;column-gap:6px;row-gap:1px;
  justify-content:flex-start}
.mx-dense .mx-acc b,.mx-ultra .mx-acc b{flex:0 0 100%}

/* ---------- 16) 任务看板（C2.53）：等级分组卡片 ---------- */
.bd-group{margin-top:14px}
.bd-group-h{display:flex;align-items:baseline;gap:10px;margin-bottom:8px}
.bd-lv{font-size:13px;font-weight:700;padding:2px 10px;border-radius:999px;border:1px solid var(--line)}
.lv-sss .bd-lv{color:var(--red);border-color:color-mix(in srgb,var(--red) 40%,transparent);background:color-mix(in srgb,var(--red) 8%,transparent)}
.lv-ss .bd-lv{color:var(--amber);border-color:color-mix(in srgb,var(--amber) 45%,transparent);background:color-mix(in srgb,var(--amber) 10%,transparent)}
.lv-s .bd-lv{color:var(--purple);border-color:color-mix(in srgb,var(--purple) 40%,transparent);background:color-mix(in srgb,var(--purple) 8%,transparent)}
.lv-a .bd-lv{color:var(--blue);border-color:var(--line-blue);background:var(--blue-d)}
.lv-b .bd-lv{color:var(--txt3);border-color:var(--line);background:var(--soft)}
.lv-closed{opacity:.6}
.lv-closed .bd-lv{color:var(--txt3)}
.bd-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:12px}
.bd-card{border:1px solid var(--line);border-radius:10px;background:var(--panel);padding:11px 13px;
  display:flex;flex-direction:column;gap:6px}
.bd-card.is-closed{opacity:.55}
.bd-card-h{display:flex;align-items:baseline;gap:8px;min-width:0}
.bd-title{font-size:13.5px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* C2.107 任务 ID 挪到时间字段下方独占一行：它挂在标题后面时既会挤窄标题（标题本来就是
   nowrap + 省略号），又不是标题的一部分；放到最后一行、与时间左对齐，层级才顺 */
.bd-ref{font-size:11px;color:var(--txt3);display:block;line-height:1.4}
.bd-req{font-size:12.5px;color:var(--txt2);font-weight:600}
.bd-meta{display:flex;gap:10px;flex-wrap:wrap;font-size:11.5px;color:var(--txt3)}
.bd-run{color:var(--blue);font-weight:600}
.bd-done{color:var(--green)}
.bd-note{font-size:11.5px;color:var(--txt2);background:var(--soft);border-radius:6px;padding:4px 8px}
.bd-ops{display:flex;gap:6px;justify-content:flex-end}
.bd-ocr{display:flex;align-items:center;gap:10px;margin-bottom:10px;padding:9px 11px;
  border:1px dashed var(--line);border-radius:9px;background:var(--soft)}

/* ---------- 17) 看板游戏卡（C2.54）：稀有度卡面——等级印记 + 金色奖励 + 流光 ---------- */
/* 卡面比系统底色深一档（深浅主题都成立），稀有度靠左侧印记与描边光 */
/* 浅色主题：卡面走品牌浅绿暖底（贴合主色调），稀有度靠印记与描边 */
.bd-card.gx{position:relative;flex-direction:row;align-items:center;gap:14px;overflow:hidden;
  padding:14px 16px;border-radius:14px;border:1px solid var(--line);
  background:linear-gradient(160deg, #ffffff, #f4f8ea);
  color:var(--txt);transition:transform .16s, box-shadow .16s}
.bd-card.gx:hover{transform:translateY(-2px)}
.gx .bd-title{color:var(--txt)}
.gx .bd-req{color:var(--txt2)}
.gx .bd-meta{color:var(--txt3)}
.gx .bd-ref{color:var(--txt3)}
/* C2.70：备注不再铺一条底色横带（撑满整行像残留遮罩），改成一行淡字，弱于正文、不再抢视线 */
.gx .bd-note{background:transparent;padding:0;color:var(--txt3);font-size:12px;line-height:1.5;align-self:flex-start}
.gx .bd-run{color:var(--blue)}
.gx .bd-done{color:var(--green)}
/* 深色主题：卡面回到深色机卡（深底浅字） */
html[data-theme="dark"] .bd-card.gx{background:linear-gradient(160deg, #1c2130, #12151f);color:#e8eaf2}
html[data-theme="dark"] .gx .bd-title{color:#f2f3f8}
html[data-theme="dark"] .gx .bd-req{color:#c8ccda}
html[data-theme="dark"] .gx .bd-meta{color:#8b90a3}
html[data-theme="dark"] .gx .bd-ref{color:#7d8296}
html[data-theme="dark"] .gx .bd-note{background:transparent;padding:0;color:#8b90a3}
html[data-theme="dark"] .gx .bd-run{color:#8fb7ff}
html[data-theme="dark"] .gx .bd-done{color:#7fdca0}
html[data-theme="dark"] .gx .bd-ops .btn.ghost{color:#c8ccda;border-color:rgba(255,255,255,.25);background:rgba(255,255,255,.04)}
.gx-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}
/* 左侧巨型等级印记：抽卡稀有度的感觉 */
.gx-emblem{flex-shrink:0;font-size:30px;font-weight:800;letter-spacing:.5px;line-height:1;
  padding:10px 12px;border-radius:10px;min-width:64px;text-align:center}
/* 右侧奖励：金色大数字 */
.gx-reward{flex-shrink:0;text-align:right;display:flex;flex-direction:column;gap:1px}
.gx-reward i{font-size:10.5px;color:#9a7a2c;font-style:normal;letter-spacing:1px;font-weight:600}
.gx-reward b{font-size:21px;font-weight:800;color:#a97b12;font-variant-numeric:tabular-nums}
html[data-theme="dark"] .gx-reward i{color:#b8a06a}
html[data-theme="dark"] .gx-reward b{color:#ffd479;text-shadow:0 0 14px rgba(255,197,92,.35)}
/* 管理按钮：放在右列奖励下方（竖排），不再绝对定位压住数字（C2.54.1） */
.gx .bd-ops{display:flex;gap:6px;justify-content:flex-end;margin-top:2px}
/* 浅色卡面用深字 + 实线框（C2.61：原来这里留着深色主题那套浅灰字，浅底上几乎看不见） */
.gx .bd-ops .btn.ghost{color:var(--txt2);font-weight:600;background:rgba(255,255,255,.8);border-color:var(--line2)}
.gx .bd-ops .btn.ghost:hover{color:var(--txt);background:var(--hover);border-color:var(--brand)}
.gx .bd-ops .btn.ghost[data-act="close"]:hover,
.gx .bd-ops .btn.ghost[data-act="reopen"]:hover{color:var(--red);border-color:var(--line-red);background:var(--red-d)}
html[data-theme="dark"] .gx .bd-ops .btn.ghost:hover{color:#f2f3f8;background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.45)}
/* 稀有度配色：印记底 + 卡缘光 */
.lv-sss .gx-emblem{color:#fff;background:linear-gradient(135deg,#ff4d4d,#a11212);box-shadow:0 0 18px rgba(255,60,60,.5)}
.gx.lv-sss{border-color:rgba(255,80,80,.55);box-shadow:0 0 0 1px rgba(255,80,80,.25), 0 6px 24px rgba(255,60,60,.18)}
.lv-ss .gx-emblem{color:#fff;background:linear-gradient(135deg,#ffab3d,#b35c00);box-shadow:0 0 16px rgba(255,160,50,.45)}
.gx.lv-ss{border-color:rgba(255,170,60,.5);box-shadow:0 0 0 1px rgba(255,170,60,.22), 0 6px 20px rgba(255,160,50,.14)}
.lv-s .gx-emblem{color:#fff;background:linear-gradient(135deg,#b17cff,#5b2bb3);box-shadow:0 0 14px rgba(150,100,255,.4)}
.gx.lv-s{border-color:rgba(160,110,255,.45);box-shadow:0 0 0 1px rgba(160,110,255,.2)}
.lv-a .gx-emblem{color:#fff;background:linear-gradient(135deg,#5b93ff,#2346a8)}
.gx.lv-a{border-color:rgba(100,140,240,.4)}
.lv-b .gx-emblem{color:#cfd3de;background:linear-gradient(135deg,#4a4f5e,#262a35)}
.gx.lv-closed{filter:saturate(.4);opacity:.5}
/* SSS/SS 流光扫过（减弱动效模式下关闭） */
.gx.lv-sss::after,.gx.lv-ss::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(115deg,transparent 30%,rgba(116,182,46,.10) 46%,rgba(116,182,46,.20) 50%,rgba(116,182,46,.10) 54%,transparent 70%);
  background-size:250% 100%;animation:gx-shine 3.6s ease-in-out infinite}
@keyframes gx-shine{0%{background-position:120% 0}60%,100%{background-position:-60% 0}}
@media (prefers-reduced-motion:reduce){.gx.lv-sss::after,.gx.lv-ss::after{animation:none}}
/* 右列：奖励在上、管理按钮在下（竖排右对齐，互不压） */
.gx-side{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:6px}
/* 看板卡标题三行封顶（C2.54.1：单行截太短读不出任务名；C2.103：任务名带 emoji 后缀，
   两行会在末尾把符号挤进省略号里，看上去像「符号丢了」） */
.gx .bd-title{white-space:normal;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;
  overflow:hidden;line-height:1.35}

/* ---------- 18) 看板卡加大 + 拖拽识别区（C2.55） ---------- */
/* 卡更大、信息更全：主填 SSS/SS/S，卡面要给足 */
.bd-cards{grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:14px}
.bd-card.gx{padding:18px 20px;gap:16px}
.gx-emblem{font-size:34px;min-width:76px;padding:13px 14px}
.gx .bd-title{font-size:15px}
.gx .bd-req{font-size:13px}
.gx .bd-meta{font-size:12px}
.gx .bd-ref{font-size:11.5px}
.gx-reward b{font-size:24px}
.gx-reward i{font-size:11px}
/* 拖拽识别区：整块可点可拖，悬停/拖入高亮 */
.bd-drop{display:flex;flex-direction:column;align-items:center;gap:5px;text-align:center;
  margin-bottom:12px;padding:18px 14px;cursor:pointer;
  border:2px dashed var(--line);border-radius:10px;background:var(--soft);
  transition:border-color .14s, background .14s}
.bd-drop b{font-size:13px}
.bd-drop:hover{border-color:var(--brand)}
.bd-drop.over{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 8%,transparent)}
