/* 受法条约束：L-8(只许引用 --g-*，不许在此定义 token) · 法典/01_宪法_六条铁律.md
   实现 法典/04_UI风格规范.md 的 U-1 卡片基类 / U-2 列表 / U-3 间距 / U-6 田字格 */

* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }

body {
  margin: 0;
  font-family: var(--g-font-family);
  font-size: var(--g-font-size);
  color: var(--g-text);
  /* U-10：上暖下冷渐变，冷端不许丢（法典/04）；min-height 保证短页面也铺满 */
  background: var(--g-screen-bg);
  min-height: 100vh;
  -webkit-font-smoothing: antialiased;
}

/* ── U-1 卡片基类（唯一基类，禁各页自造） ── */
.card {
  background: var(--g-card);
  border: 1px solid var(--g-card-border);
  border-radius: var(--g-radius);
  box-shadow: var(--g-shadow);
  padding: var(--g-pad);
}
.card--active { border-color: var(--g-accent); border-width: 2px; }
.card--warn   { border-color: var(--g-warn);   border-width: 2px; }
.card--dashed { border-style: dashed; }
/* 玻璃面（底回浅后浅玻璃配方：半透明白 + 细描边 + 浅阴影；原沉浸深色 v1
   「深玻璃+浅字」已随 t4 覆盖段回滚退役；村口/登录就地深玻璃各自文件内维护） */
.card--glass  { background: linear-gradient(168deg, var(--g-glass-bg), var(--g-glass-bg-deep));
                border: 1px solid var(--g-glass-border);
                box-shadow: var(--g-shadow), inset 0 1px 0 var(--g-glass-highlight);
                backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px); }

/* ── U-2 列表条目 ── */
.list-row {
  display: flex;
  align-items: center;
  gap: var(--g-gap);
  padding: var(--g-pad-sm) 0;
  border-bottom: 1px solid var(--g-sep);
  font-size: var(--g-font-size-sm);
}
.list-row:last-child { border-bottom: none; }

/* ── U-3 间距工具（只用 token，禁写死像素） ── */
.stack    { display: flex; flex-direction: column; gap: var(--g-gap-lg); }
.stack-sm { display: flex; flex-direction: column; gap: var(--g-gap); }
.row      { display: flex; align-items: center; gap: var(--g-gap); }

/* ── U-6 全貌页 2x2 田字格 ── */
.mgmt-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--g-gap); }

/* ── 文字层级（S-3：一律 rem） ── */
.title    { font-size: var(--g-font-size-lg); font-weight: 700; }
.subtitle { font-size: var(--g-font-size);    font-weight: 600; }
.text-sub { color: var(--g-text-sub); font-size: var(--g-font-size-sm); }
.text-dim { color: var(--g-text-dim); font-size: var(--g-font-size-xs); }

/* ── 应用骨架 ── */
#app     { max-width: 480px; margin: 0 auto; padding: var(--g-pad); min-height: 100vh; }
#overlay-root { position: fixed; inset: 0; pointer-events: none; z-index: 900; }
#overlay-root > * { pointer-events: auto; }

/* ── 错误条：L-4 要求中文 message 原样显示，不许静默 ── */
.error-bar {
  background: var(--g-red-bg);
  border: 1px solid var(--g-red);
  border-radius: var(--g-radius-sm);
  color: var(--g-red);
  padding: var(--g-pad-sm);
  font-size: var(--g-font-size-sm);
}

/* ── 陈旧角标：L-6 要求用快照的界面必须打这个 ── */
.stale-badge {
  background: var(--g-warn-bg);
  border: 1px solid var(--g-warn-light);
  border-radius: var(--g-radius-sm);
  color: var(--g-warn);
  padding: var(--g-pad-xs) var(--g-pad-sm);
  font-size: var(--g-font-size-xs);
}

/* ══ 工作台 A 顶栏 ══ 源：旧仓 css/main.css:138-149 + index.html:113-125
   拆线头：原本 style="..." 内联的一律搬进这里；颜色间距值一个数字都没改 */

/* A0 吸顶磨砂条：顶栏 + 电池栏的 sticky 外壳 */
.wb-top { position: sticky; top: 0; z-index: 20; }
.wb-top > .wb-topbar { position: static; }
.wb-topbar {
  position: sticky; top: 0; z-index: 20;
  display: flex; align-items: center; gap: var(--g-gap-lg);
  padding: var(--g-pad-sm) var(--g-pad);
  padding-top: max(var(--g-pad-sm), env(safe-area-inset-top, 0px));
  background: var(--g-topbar-bg);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--g-card-border);
}

/* A5 头像：描边色按角色，色值查 DICT.ROLE_RING（L-5） */
.wb-avatar {
  width: 40px; height: 40px; border-radius: 50%; overflow: hidden;
  border: var(--g-avatar-ring) solid var(--g-accent);
  background: var(--g-avatar-bg); flex-shrink: 0; cursor: pointer;
}
.wb-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.wb-avatar--warn  { border-color: var(--g-warn); }
.wb-avatar--green { border-color: var(--g-green); }
.wb-avatar--blue  { border-color: var(--g-blue); }
.wb-avatar--dim   { border-color: var(--g-text-dim); }

.wb-id { flex: 1; min-width: 0; line-height: 1.4; }

/* A1 用户名 + A2 豆子余额（同一行） */
.wb-id-row1 { display: flex; align-items: center; gap: var(--g-pad-xs); line-height: 1.6; }
.wb-name { font-weight: 700; font-size: var(--g-font-size); }

/* 列表新卡入场（2026-09-27 砚仁）：淡入＋自下而上轻微到位（走 --g-trans token）。
   list-diff 只在「首屏铺开之后新到的卡」打这个类，所以进页不会满屏乱动。 */
@keyframes uCardIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.u-card-in { animation: uCardIn var(--g-trans); }
@media (prefers-reduced-motion: reduce) { .u-card-in { animation: none; } }

/* A2 豆子按钮：点它展开 B 电池栏 */
.wb-purse {
  margin-left: auto; display: flex; align-items: center; gap: 2px;
  font-weight: 700; font-size: var(--g-font-size); color: var(--g-accent);
  white-space: nowrap; background: none; border: none; padding: 2px 0;
  cursor: pointer; font-family: inherit;
}
.wb-purse img { width: 18px; height: 18px; vertical-align: middle; }
.wb-purse-caret { font-size: var(--g-font-size-xs); color: var(--g-text-sub); }

/* A3 称号行：四种信息各自成块、各自带色，不再拼成一条灰字符串
   违规史：旧仓 core.js:1274 把称号+勋章+信誉+注册日期拼成一个 textContent，
   且被 main.css:148 的 color 全部刷成灰色 —— 设计好的颜色被 CSS 吃掉 */
.wb-id-row2 { display: flex; align-items: center; flex-wrap: wrap; gap: var(--g-pad-xs); font-size: var(--g-font-size-xs); } /* t48：tiny 档退役并入 xs（7→6 档） */
.wb-chip { display: inline-flex; align-items: center; gap: 2px; white-space: nowrap; }
.wb-chip--dim    { color: var(--g-text-dim); }
.wb-chip--green  { color: var(--g-green); }
.wb-chip--accent { color: var(--g-accent); }
.wb-chip--warn   { color: var(--g-warn); }
.wb-chip--warn2  { color: var(--g-warn); }   /* 原 --gold，橄榄黄退役（U-9） */
.wb-chip--red    { color: var(--g-red); }

/* A4 营队行 */
.wb-id-row3 { font-size: var(--g-font-size-xs); color: var(--g-text-sub); }

/* A6 收件箱 + 红角标（数字来自 notify.summary，不许写死在 HTML） */
.wb-inbox { position: relative; background: none; border: none; padding: 0; cursor: pointer; line-height: 1; }
.wb-inbox-ico { font-size: var(--g-font-size-lg); }
.wb-inbox-badge {
  position: absolute; top: -4px; right: -6px;
  background: var(--g-red); color: #fff;
  font-size: var(--g-font-size-micro);
  min-width: 16px; height: 16px; line-height: 16px; text-align: center;
  border-radius: 999px; padding: 0 4px;
}

/* 工作台页容器：顶栏吸顶＋底栏吸底，所以本页 flex 纵向拉满视口，padding 负值吃满宽 */
.wb-page { margin: calc(var(--g-pad) * -1); min-height: 100vh; display: flex; flex-direction: column; }
.wb-body { padding: var(--g-pad); flex: 1 1 auto; }
/* A7 信号格：贴头像右下角，外套顶栏同色描边圈使其浮在头像上（微信/Slack 同做法）
   CSS 画三竖条而非字符——字符宽窄跨设备会跳且无法逐格上色。见 法典/10_元件编号表.md 的「工作台 my.js（U-1）」 */
/* 右侧多 3px：信号格往右探出 3px，补回来两侧间距才对称 */
.wb-avatar-wrap { position: relative; flex-shrink: 0; margin-right: 3px; margin-left: 4px; }
.wb-sig {
  position: absolute; right: -3px; bottom: -2px;
  display: flex; align-items: flex-end; gap: 1.5px;
  padding: 2px; border-radius: 4px;
  background: var(--g-topbar-bg);
  box-shadow: 0 0 0 1.5px var(--g-topbar-bg);
}
.wb-sig i { display: block; width: 2.5px; border-radius: 1px; background: var(--g-text-muted); }
.wb-sig i:nth-child(1) { height: 4px; }
.wb-sig i:nth-child(2) { height: 7px; }
.wb-sig i:nth-child(3) { height: 10px; }
.wb-sig--on  i:nth-child(-n+3) { background: var(--g-accent); }
.wb-sig--mid i:nth-child(-n+2) { background: var(--g-warn); }
.wb-sig--off i:nth-child(1)    { background: var(--g-red); }

/* A8 网络状态条：正常不出现。仪表盘（A7）常驻，喇叭（A8）只在该响时响 */
.wb-netbar {
  border-radius: var(--g-radius-sm);
  padding: var(--g-pad-xs) var(--g-pad-sm);
  font-size: var(--g-font-size-sm);
  line-height: 1.5;
}
.wb-netbar--mid { background: var(--g-warn-bg); border: 1px solid var(--g-warn-light); color: var(--g-warn); }
.wb-netbar--off { background: var(--g-red-bg);  border: 1px solid var(--g-red);        color: var(--g-red); }
/* ══ B 钱包电池栏 ══ 见 法典/10_元件编号表.md 的「工作台 my.js（U-1）」
   默认收起，点 A2 豆子才展开。格数由 api.me.capabilities() 的 pools 决定，CSS 不管几格都自适应 */
.wb-wallet {
  display: flex; gap: var(--g-pad-xs);
  padding: var(--g-gap) var(--g-pad);
  border-bottom: 1px solid var(--g-card-border);
  background: var(--g-topbar-bg);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
}

/* B1/B2/B3 电池格：一格 = 图标 + 电池条。格内居中（并排方格的例外，顶栏才左对齐） */
.wb-bat-cell {
  flex: 1 1 0; min-width: 0;
  background: var(--g-card);
  border: 1px solid var(--g-card-border);
  border-radius: var(--g-radius-sm);
  padding: var(--g-pad-xs) 4px;
  text-align: center;
  font-family: inherit;
  cursor: pointer;
}
.wb-bat-ico { font-size: var(--g-font-size-lg); line-height: 1.1; }
/* 头行：图标+池名横排居中（方案A） */
.wb-bat-head { display: flex; align-items: center; justify-content: center; gap: 3px; min-height: 16px; }
.wb-bat-head .wb-bat-ico { font-size: var(--g-font-size); }
.wb-bat-label { font-size: var(--g-font-size-xs); color: var(--g-text-sub); line-height: 1.1; white-space: nowrap; }

.wb-bat {
  position: relative;
  margin-top: 4px; height: 14px;
  border: 1px solid; border-radius: 4px;
  overflow: hidden;
}
.wb-bat-fill { position: absolute; left: 0; top: 0; bottom: 0; }
.wb-bat-num {
  position: relative;
  font-size: var(--g-font-size-xs); font-weight: 700;
  line-height: 14px; white-space: nowrap;
}

/* 池色五种，取自 DICT.POOLS 的 tone。颜色只来自 token（L-8） */
.wb-bat-cell--warn2        .wb-bat { border-color: var(--g-warn); }
.wb-bat-cell--warn2        .wb-bat-fill { background: var(--g-warn-bg); }
.wb-bat-cell--warn2        .wb-bat-num  { color: var(--g-warn); }
.wb-bat-cell--accent       .wb-bat { border-color: var(--g-accent); }
.wb-bat-cell--accent       .wb-bat-fill { background: var(--g-accent-bg); }
.wb-bat-cell--accent       .wb-bat-num  { color: var(--g-accent); }
.wb-bat-cell--accent-light .wb-bat { border-color: var(--g-accent-light); }
.wb-bat-cell--accent-light .wb-bat-fill { background: var(--g-accent-bg); }
.wb-bat-cell--accent-light .wb-bat-num  { color: var(--g-accent-light); }
.wb-bat-cell--warn         .wb-bat { border-color: var(--g-warn); }
.wb-bat-cell--warn         .wb-bat-fill { background: var(--g-warn-bg); }
.wb-bat-cell--warn         .wb-bat-num  { color: var(--g-warn); }
.wb-bat-cell--blue         .wb-bat { border-color: var(--g-blue); }
.wb-bat-cell--blue         .wb-bat-fill { background: var(--g-blue-bg); }
.wb-bat-cell--blue         .wb-bat-num  { color: var(--g-blue); }
/* ══ C 状态条 ══ 见 法典/10_元件编号表.md 的「工作台 my.js（U-1）」
   C0 整条：全零时页面根本不画它（见 my.js），所以这里不用写隐藏规则 —— 不存在比 display:none 更省 */
.wb-stat {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: var(--g-pad-xs);
  padding: var(--g-gap) var(--g-pad);
  border-bottom: 1px solid var(--g-card-border);
}

/* C1 一枚 chip：主体可点跳去处，右侧可选一枚动作键 */
.wb-chip-stat {
  display: inline-flex; align-items: stretch;
  height: 22px;
  border-radius: 999px;
  overflow: hidden;
}
.wb-chip-stat-main {
  display: inline-flex; align-items: center; gap: 3px;
  padding: 0 9px;   /* ★ 不许改大：C1/C2 一排 chip 挤在一行，每边 +1px 就换行（U-15 实测） */
  border: 0; background: transparent;
  font-family: inherit; font-size: var(--g-font-size-xs); font-weight: 700;
  line-height: 1; cursor: pointer;
}
.wb-chip-stat-ico  { font-size: var(--g-font-size-xs); }
.wb-chip-stat-num  { font-variant-numeric: tabular-nums; }
.wb-chip-stat-name { white-space: nowrap; }

/* C2 结算键：贴在 settle 那枚右侧，与 chip 同高不另起一行 */
.wb-stat-act {
  border: 0; padding: 0 9px;   /* ★ 同上，不许改大 */
  background: var(--g-accent); color: #fff;
  font-family: inherit; font-size: var(--g-font-size-micro); font-weight: 700;
  line-height: 1; cursor: pointer;
}

/* 项色四种，取自 DICT.STAT_CHIPS 的 tone。颜色只来自 token（L-8） */
.wb-chip-stat--red   { background: var(--g-red-bg); }
.wb-chip-stat--red   .wb-chip-stat-main { color: var(--g-red); }
.wb-chip-stat--green { background: var(--g-green-bg); }
.wb-chip-stat--green .wb-chip-stat-main { color: var(--g-green); }
.wb-chip-stat--warn  { background: var(--g-warn-bg); }
.wb-chip-stat--warn  .wb-chip-stat-main { color: var(--g-warn); }
.wb-chip-stat--dim   { background: var(--g-card-hover); }
.wb-chip-stat--dim   .wb-chip-stat-main { color: var(--g-text-sub); }
/* ══ E 任务卡列表 ══ 见 法典/10_元件编号表.md 的 E0/E1，字段见 法典/03_数据字典.md 的 D-17
   尺寸搬自旧仓 css/main.css:193-211（卡高 66、图标 42、名字截断 180），颜色全换 token（L-8） */
.wb-quests { padding: var(--g-gap) var(--g-pad); }
.wb-archive-link { padding: 12px var(--g-pad); color: var(--g-accent); font-size: var(--g-font-size-xs); cursor: pointer; text-align: center; border-top: 1px solid var(--g-card-border); }

/* E1 卡：左侧 3px 竖带＝归属色，底色＝急迫程度 */
.q-card {
  display: flex; align-items: center; gap: var(--g-pad-sm);
  background: var(--g-card);
  border: 1px solid var(--g-card-border);
  border-left: 3px solid var(--g-text-dim);
  border-radius: var(--g-radius-sm);
  padding: var(--g-gap) var(--g-pad-sm);
  margin-bottom: var(--g-pad-xs);
  /* U-18 刀1：= 顶栏实高 + 呼吸，顶栏改高度时须同步 */
  scroll-margin-top: calc(env(safe-area-inset-top, 0px) + 68px);
}
.q-card:active { transform: scale(.98); }
/* U-9 第2条：底色淡到「几乎是白的」（味 2%），禁再用 8% 透明色铺满。
   竖带才是那个抢眼的地方 —— 面积小才可以饱和 */
.q-card--warn { background: var(--g-tint-warn); border-left-color: var(--g-warn); }
.q-card--red  { background: var(--g-tint-red);  border-left-color: var(--g-red);  }
/* 我发的任务：左边 3px 竖线用 accent 色，底色跟普通卡一样（白底不铺色，避免跟背景融在一起） */
.q-card--posted { border-left-color: var(--g-accent); }

/* 左侧图标块 42×42（旧仓 .task-left 原尺寸） */
.q-left {
  width: 42px; height: 42px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  border-radius: var(--g-radius-sm);
  font-size: var(--g-font-size-lg);
}
/* U-9 第3条：七种归属靠图标区分，底色统一墨绿 —— 不再一归属一色 */
.q-left--accent { background: var(--g-accent-bg); }
.q-left--dim    { background: var(--g-card-hover); }

.q-body { flex: 1; min-width: 0; }

/* 第1行：名字截断，赏金不缩 */
.q-row1 { display: flex; justify-content: space-between; align-items: baseline; gap: var(--g-pad-xs); }
.q-title {
  font-weight: 700; font-size: var(--g-font-size);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.q-nt { flex-shrink: 0; font-weight: 700; font-size: var(--g-font-size); color: var(--g-accent); }
/* 2026-10-01 砚仁拍板：状态戳挪第一行贴 NT 左边——右组容器：NT 保持全卡最右对齐成一列 */
.q-row1-right { display: inline-flex; align-items: baseline; gap: var(--g-pad-xs); flex-shrink: 0; }

/* 第2行 E4：nowrap 铁规 —— 换行就会长高，卡高必须恒定（D-17）
   2026-10-01 问题五终版：丢弃由 js/ui-fit.js 的 data-fit 优先级整枚藏负责（hall-widgets 标号），
   本行不再用 flex-shrink 压碎——压碎实测会把「待我审」挤成「待」半个字。全员 shrink:0，
   溢出触发 fit 藏槽：展示日期(40)＞发布人(30)＞名额(20)＞我发的(10)＞待我审(5)；类型标/截止永不丢 */
.q-row2 {
  display: flex; align-items: center; gap: var(--g-pad-xs);
  margin-top: 3px;
  font-size: var(--g-font-size-xs); color: var(--g-text-sub); /* t48：tiny→xs */
  white-space: nowrap; overflow: hidden;
}
.q-meta { overflow: hidden; text-overflow: ellipsis; }
.q-drop2 { flex-shrink: 0; }   /* 名额：整枚让位，fit 藏 */
.q-drop4 { flex-shrink: 0; }   /* 展示日期：最先让位，fit 藏 */
/* 发布者名：限宽 5em，超长截断但 hover 可见全名；窄到不够 5em 时整枚由 fit 藏，不压成图标 */
.q-poster {
  max-width: 5em; flex-shrink: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* E2 归属标：营队显主线/支线/身份/隐藏，其余显社区/个人/在地（D-17） */
.q-tag {
  flex-shrink: 0;
  padding: 1px var(--g-pad-xs); border-radius: 4px;
  font-weight: 600;
}
.q-tag--accent { color: var(--g-accent); background: var(--g-accent-bg); }
.q-tag--dim    { color: var(--g-text-sub); background: var(--g-card-hover); }

/* E5 截止：flex-shrink 缺省为 0，故永不被挤掉。越急颜色越重 */
.q-due { flex-shrink: 0; font-weight: 600; }
.q-due--dim  { color: var(--g-text-dim); font-weight: 400; }

.q-due--warn { color: var(--g-warn); }
.q-due--red  { color: var(--g-red);  }

/* E6 快捷键：后端发了 quick_action 才画（C-11）。字号与展开态 .q-act 统一 */
.q-quick {
  flex-shrink: 0; margin-left: auto;
  border: 0; padding: 3px 9px; border-radius: var(--g-radius-sm);   /* ★ 不许改大：与卡内文字挤一行 */
  background: var(--g-accent); color: var(--g-text-on-dark);
  font-family: inherit; font-size: var(--g-font-size-sm); font-weight: 700;
  line-height: 1.2; cursor: pointer;
}
/* ══ E0 段头 ══ 见 法典/03_数据字典.md 的 D-20。搬自旧仓 .section-head（core.js:1513） */
.q-sec {
  display: flex; justify-content: space-between; align-items: center;
  width: 100%; box-sizing: border-box;
  margin: var(--g-gap) 0 var(--g-pad-xs);
  padding: var(--g-pad-xs) 2px;
  border: 0; border-top: 1px solid var(--g-sep);
  background: transparent;
  font-family: inherit; font-size: var(--g-font-size-sm); font-weight: 700;
  cursor: pointer;
  /* U-18 刀1：段头滚到顶栏下方可见（同 q-card 值） */
  scroll-margin-top: calc(env(safe-area-inset-top, 0px) + 68px);
}
.q-sec-fold { font-size: var(--g-font-size-micro); font-weight: 400; color: var(--g-text-dim); }
/* 段色只此三种（U-9 第1条：红=出事 橙=快到 灰=无所谓） */
.q-sec--red  { color: var(--g-red);   }
.q-sec--warn { color: var(--g-warn);  }
.q-sec--dim  { color: var(--g-text-sub); }

/* t81 工作台段快捷筛选：合一排紧凑胶囊（FA 图标+名+计数横排，点谁谁 is-on；tail 段收「更多」）
   形态参照 Material 3 filter chips：一排可横滑小胶囊，选中填色——状态计数+筛选一把抓 */
.wb-secf { display: flex; gap: var(--g-gap); margin-bottom: var(--g-pad-sm); overflow-x: auto; }
.wb-secf-cell, .wb-secf-more {
  flex: 0 0 auto; display: inline-flex; align-items: center; gap: 4px;
  height: 24px; padding: 0 var(--g-pad-xs);
  border: 0; border-radius: 999px;
  background: var(--g-card-hover); color: var(--g-text-sub); cursor: pointer;
  font-family: inherit; font-size: var(--g-font-size-xs); line-height: 1; white-space: nowrap; }
.wb-secf-cell.is-on { background: var(--g-accent-bg); color: var(--g-accent); box-shadow: inset 0 0 0 2px var(--g-accent); }
.wb-secf-ico { font-size: var(--g-font-size-xs); line-height: 1; }
.wb-secf-val { font-weight: 700; font-variant-numeric: tabular-nums; }
.wb-secf-cell.is-on .wb-secf-val { color: var(--g-accent); }
.wb-secf-more { border: 1px dashed var(--g-card-border); background: transparent; color: var(--g-text-dim); }

/* t82 内联下拉（UI.selectField）：点框→选项从框正下方展开→选完收起；全站选择器统一形态 */
.ui-select { position: relative; }
.ui-select-head {
  width: 100%; display: flex; align-items: center; justify-content: space-between; gap: var(--g-gap);
  padding: var(--g-pad-sm); border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-card); color: var(--g-text); font-family: inherit; font-size: var(--g-font-size-sm);
  cursor: pointer; text-align: left; }
.ui-select-txt { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ui-select-caret { color: var(--g-text-dim); font-size: var(--g-font-size-xs); line-height: 1; }
.ui-select-list {
  position: absolute; left: 0; right: 0; top: 100%; z-index: 30;
  background: var(--g-card); border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  box-shadow: 0 8px 24px rgba(0, 0, 0, .35); max-height: 240px; overflow-y: auto; }
.ui-select-item {
  display: block; width: 100%; padding: var(--g-pad-sm); border: 0; background: transparent;
  color: var(--g-text); font-family: inherit; font-size: var(--g-font-size-sm);
  text-align: left; cursor: pointer; }
.ui-select-item.is-on { background: var(--g-accent-bg); color: var(--g-accent); }

/* t82 流水配对：被冲正行划掉置灰；子行（退回/冲正新行）贴源行缩进 */
.ld-entry--void { text-decoration: line-through; opacity: .6; }
.ld-entry--sub { border-left: 2px solid var(--g-card-border); padding-left: var(--g-pad-sm); margin-left: 4px; }

/* t82 周期设置三合一（频率/每周几/次数，全走内联下拉） */
.hall-recur-box { display: flex; flex-direction: column; gap: var(--g-gap); }
.hall-recur-row { display: flex; flex-direction: column; gap: 4px; }
.hall-recur-lb { font-size: var(--g-font-size-xs); color: var(--g-text-dim); }
.wb-sec { scroll-margin-top: calc(env(safe-area-inset-top, 0px) + 68px); }  /* 段锚点：C 栏 chip 跳转滚到顶栏下方 */

/* ══ 卡右侧 ✓✕ 直批 ══ 旧仓 .task-review（main.css:208-211），44×44 触控区照搬 */
.q-rv { display: flex; gap: 4px; flex-shrink: 0; }
.q-rv-btn {
  width: 34px; height: 34px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 0; border-radius: var(--g-radius-sm);
  font-family: inherit; font-size: var(--g-font-size); font-weight: 700;
  cursor: pointer;
}
.q-rv-btn--ok { background: var(--g-accent-bg); color: var(--g-accent); }
.q-rv-btn--no { background: var(--g-red-bg);    color: var(--g-red);    }

/* ══ E2 任务展开态 QuestDetail（U-1 块4b · 法典/03 的 D-22）══
   底色一律近白不含黄（S-9）；黄只准出现在小标签。折叠态已显示的不在这里重复。
   底部不留间距：详情卡必须紧贴紧随其后的任意元素（提交卡/审核栏/下一张卡），
   由后续元素自行决定距离。唯当详情卡直接挨着下一张 QuestCard 时，由 .q-card 的
   margin-top 补回段间距（见下方 .q-exp + .q-card 规则）。 */
.q-exp {
  background: var(--g-card);
  border: 1px solid var(--g-card-border);
  border-radius: var(--g-radius-sm);
  border-left: 3px solid var(--g-accent);
  margin: -4px 0 0 0;
  padding: var(--g-pad-sm) var(--g-pad);
  font-size: var(--g-font-size-sm);
  color: var(--g-text);
}
/* 详情卡后直接跟下一张任务卡（无提交卡插入时）：补回 12px 段间距 */
.q-exp + .q-card { margin-top: var(--g-gap-lg); }

/* ① 说明 */
.q-exp-note {
  background: var(--g-card-hover);
  border-radius: var(--g-radius-sm);
  padding: 7px var(--g-pad-sm); line-height: 1.55;
  margin-bottom: var(--g-pad-xs);
  /* D-23：行内只给 3 行，超出截断；全文进第③层，不在窄条里读长文 */
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3;
  overflow: hidden;
}
/* 「📄 看详情（还有 N 字）· 📷3 📎2」——通往第③层的唯一入口 */
.q-exp-more {
  display: block; width: 100%; text-align: left;
  border: 0; background: none; padding: 3px 0 6px;
  font-family: inherit; font-size: var(--g-font-size-xs); font-weight: 600;
  color: var(--g-accent); cursor: pointer;
}

/* ①.⑤ 图片缩略图条：行内最多 3 张预览，点开看大图；更多进第③层 */
.q-exp-imgs { display: flex; align-items: center; gap: var(--g-pad-xs); margin-bottom: var(--g-pad-xs); }
.q-exp-img {
  position: relative; width: 56px; height: 56px; flex: none;
  border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-card-hover); padding: 0; overflow: hidden; cursor: pointer;
}
.q-exp-img-thumb { width: 100%; height: 100%; object-fit: cover; display: block; }
.q-exp-img-more { flex: none; font-size: var(--g-font-size-xs); color: var(--g-text-dim); font-weight: 600; }

/* ② 新手任务 + 倒计时 */
.q-exp-newbie {
  display: flex; align-items: center; gap: var(--g-gap);
  background: var(--g-accent-bg);
  border-radius: var(--g-radius-sm);
  padding: 5px var(--g-pad-sm); margin-bottom: var(--g-gap);
}
.q-exp-newbie-tag  { font-size: var(--g-font-size-xs); font-weight: 700; color: var(--g-accent); }
.q-exp-newbie-left { font-size: var(--g-font-size-xs); color: var(--g-text-dim); }

/* ①.⑤ 提交要求标签行：一行放平，颜色走 token */
.q-exp-deliv { display: flex; align-items: center; gap: var(--g-gap); margin-bottom: var(--g-gap); font-size: var(--g-font-size-xs); }
.q-exp-deliv-title { color: var(--g-text-sub); font-weight: 700; white-space: nowrap; }
.q-exp-deliv-list { display: flex; flex-wrap: wrap; gap: 4px; }
.q-exp-deliv-tag { padding: 1px var(--g-pad-xs); border-radius: 999px; background: var(--g-accent-bg); color: var(--g-accent); font-size: var(--g-font-size-xs); }

/* ③ 时间线：竖向串珠（Flowbite 式左轴）——竖线+圆点，日期列定宽 42px 永不被挤（D-22） */
.q-tl      { margin-bottom: var(--g-gap); }
.q-tl-head { font-size: var(--g-font-size-xs); color: var(--g-text-sub); margin-bottom: 3px; }
.q-tl-rows { display: flex; flex-direction: column; position: relative; }
/* 左侧竖线：贯穿所有节点（伪元素，不占 DOM） */
.q-tl-rows::before {
  content: ''; position: absolute; left: 3px; top: 8px; bottom: 8px;
  width: 2px; background: var(--g-card-border); border-radius: 1px;
}
.q-tl-row  {
  display: flex; align-items: baseline; gap: var(--g-pad-xs);
  /* t57 叠字修复：行高自适应。降级规则写明——日期+正文合计超宽时正文落到第二行（flex-wrap），
     圆点/竖线保持在首行（baseline 对齐），任何长度的时间串都不与正文叠在一起 */
  flex-wrap: wrap;
  min-height: 20px; padding: 2px 0; font-size: var(--g-font-size-xs); color: var(--g-text-sub);
  position: relative;
}
.q-tl-row.is-now { font-weight: 700; color: var(--g-accent); }
/* 圆点：盖在竖线上（背景同色遮线），当前节点大点+描边高亮 */
.q-tl-dot  {
  width: 8px; height: 8px; flex: none; margin: 0;
  border-radius: 50%; background: var(--g-text-muted);
  font-size: 0; line-height: 1; position: relative; z-index: 1;
}
.q-tl-row.is-now .q-tl-dot {
  width: 10px; height: 10px; margin-left: -1px;
  background: var(--g-accent);
  box-shadow: 0 0 0 2px var(--g-card);
}
.q-tl-row--muted .q-tl-dot { background: transparent; border: 1px dashed var(--g-text-muted); }
.q-tl-date { flex: none; min-width: 42px; white-space: nowrap; }  /* t57：定宽 42px 改最小宽——长时间串（如 09-22 14:30）不再溢出叠到正文上 */
.q-tl-text { flex: 1 1 12em; min-width: 0; white-space: normal; overflow-wrap: break-word; }  /* t57：不再截断，允许换行读全 */
/* ㊱ StepperBox — 详情五步进度条（U-37 卡1，样式只走 token） */
.q-steps { display: flex; align-items: flex-start; margin-bottom: var(--g-gap); }
.q-step { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: center; gap: 1px;
  font-size: var(--g-font-size-micro); color: var(--g-text-muted); text-align: center; }
.q-step-dot { width: 20px; height: 20px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  background: var(--g-card-hover); color: var(--g-text-muted); font-size: var(--g-font-size-micro); flex: none; }
.q-step-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.q-step-sub { font-size: var(--g-font-size-micro); color: var(--g-text-dim); }
.q-step-link { width: 12px; height: 2px; background: var(--g-card-border); flex: none; margin-top: 9px; border-radius: 1px; }
.q-step-link--done { background: var(--g-text-dim); }
.q-step--done { color: var(--g-text-dim); }
.q-step--done .q-step-dot { background: var(--g-content); color: var(--g-text-dim); }
.q-step--now { color: var(--g-accent); font-weight: 700; }
.q-step--now .q-step-dot { background: var(--g-accent); color: var(--g-text-on-dark); box-shadow: 0 0 0 2px var(--g-accent-bg); }
.q-steps-terminal { display: inline-flex; align-items: center; gap: 6px; padding: 3px 12px; border-radius: var(--g-radius-sm);
  background: var(--g-card-hover); color: var(--g-text-dim); font-size: var(--g-font-size-xs); }
.q-steps-terminal--done { background: var(--g-accent-bg); color: var(--g-accent-dark); margin-top: 2px; }
.q-tl-row--muted { color: var(--g-text-muted); }
.q-tl-more {
  align-self: flex-start; margin-left: var(--g-pad);
  border: 0; background: none; padding: 1px 0;
  font-family: inherit; font-size: var(--g-font-size-xs);
  color: var(--g-text-dim); cursor: pointer;
}

/* ④⑥⑦ 单行信息 */
.q-exp-line { font-size: var(--g-font-size-xs); color: var(--g-text-sub); margin-bottom: var(--g-pad-xs); }
.q-exp-meta { font-size: var(--g-font-size-xs); color: var(--g-text-sub); margin-bottom: 3px; }
.q-exp-prog { font-size: var(--g-font-size-xs); color: var(--g-accent); font-weight: 600; margin-bottom: var(--g-pad-xs); }

/* ⑤ 退回意见：出事了才有，走 tint-red（U-9 第2条） */
.q-exp-reject {
  background: var(--g-tint-red);
  border: 1px solid var(--g-red);
  border-radius: var(--g-radius-sm);
  padding: var(--g-pad-xs) var(--g-pad-sm); margin-bottom: var(--g-pad-xs);
  font-size: var(--g-font-size-xs); color: var(--g-red); line-height: 1.5;
}

/* ⑤b 审核记录（2026-10-02）：提交/打回/重交留痕块，字小色淡不抢戏 */
.q-exp-hist { margin-bottom: var(--g-pad-xs); }
.q-exp-hist-head { font-size: var(--g-font-size-xs); color: var(--g-text-sub); font-weight: 600; margin-bottom: 2px; }
.q-exp-hist-row { line-height: 1.6; }

/* ⑧ 操作按钮：色调由后端 tone 决定，前端只映射类名（C-12） */
.q-exp-acts { display: flex; gap: var(--g-gap); margin: var(--g-gap) 0 5px; }
.q-act {
  flex: 1; min-height: 34px;
  border: 1px solid transparent; border-radius: var(--g-radius-sm);
  font-family: inherit; font-size: var(--g-font-size-sm); font-weight: 600;
  cursor: pointer;
}
.q-act--pri    { background: var(--g-accent);    color: #fff; }
.q-act--danger { background: var(--g-red-bg);    color: var(--g-red);    border-color: var(--g-red); }
.q-act--sec    { background: var(--g-card);      color: var(--g-text-sub); border-color: var(--g-card-border); }
.q-act--wait   { background: var(--g-card-hover); color: var(--g-text-dim); cursor: default; }

/* 提交卡：紧贴上方详情卡（.q-exp mb=0 + 本卡 mt=0 → 0px 无缝粘合） */
.q-sub {
  background: var(--g-card);
  border: 1px solid var(--g-card-border);
  border-left: 3px solid var(--g-accent);
  border-radius: var(--g-radius-sm);
  margin: 0; padding: var(--g-gap) var(--g-pad-sm);
}
.q-sub-head { font-size: var(--g-font-size-xs); font-weight: 700; margin-bottom: 3px; }
.q-sub-body { font-size: var(--g-font-size-sm); color: var(--g-text-sub); line-height: 1.55; }
.q-sub-miss { font-size: var(--g-font-size-xs); color: var(--g-red); padding: 1px 0; font-weight: 600; }
/* 提交卡后直接跟下一张任务卡（无审核栏时）：补回 12px，否则两张卡糊成一坨（U-15） */
.q-sub + .q-card { margin-top: var(--g-gap-lg); }
/* 逐人审核栏：紧贴 SubmissionCard（mt=0），下间距 20px 拉开与下一张卡 */
.q-sub-acts { display: flex; gap: var(--g-gap); margin: 0 0 var(--g-pad-lg); align-items: center; }
.q-sub-tag { font-size: var(--g-font-size-sm); padding: 2px var(--g-pad-xs); border-radius: 999px; font-weight: 700; }
.q-sub-tag--gold { background: var(--g-warn-bg); color: var(--g-warn); border: 1px solid var(--g-warn-light); }

/* ══ E3 第③层全屏详情 QuestSheet（U-1 块4g · 法典/03 的 D-23）══
   走 overlayStack（L-7）；长正文／网址／图片／附件都在这里，不挤进行内展开。 */
.q-sheet {
  position: fixed; inset: 0; z-index: 60;
  display: flex; flex-direction: column;
  background: var(--g-screen-bg);
}
.q-sheet-bar {
  flex: none; display: flex; align-items: center; gap: var(--g-gap);
  height: 48px; padding: 0 var(--g-pad);
  padding-top: env(safe-area-inset-top, 0px);
  background: var(--g-topbar-bg);
  border-bottom: 1px solid var(--g-sep);
}
.q-sheet-back {
  border: 0; background: none; padding: 4px 2px;
  font-family: inherit; font-size: var(--g-font-size); font-weight: 600;
  color: var(--g-accent); cursor: pointer;
}
.q-sheet-title {
  flex: 1; min-width: 0; font-weight: 700;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.q-sheet-body {
  flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch;
  padding: var(--g-pad) var(--g-pad) var(--g-pad-lg);
}
.q-sheet-sec { margin-bottom: var(--g-gap-lg); }
.q-sheet-p {
  margin: 0 0 var(--g-gap); line-height: 1.7;
  font-size: var(--g-font-size); color: var(--g-text);
}
.q-sheet-head {
  font-size: var(--g-font-size-sm); font-weight: 700; color: var(--g-text-sub);
  margin: var(--g-gap-lg) 0 var(--g-gap);
}

/* 网址：只画后端发的 label，不显示裸 URL（C-13） */
.q-sheet-links { display: flex; flex-direction: column; gap: 1px; }
.q-link {
  display: flex; align-items: center; min-height: 44px;
  padding: 0 var(--g-pad-sm);
  background: var(--g-card); border: 1px solid var(--g-card-border);
  border-radius: var(--g-radius-sm);
  text-decoration: none; color: var(--g-accent);
  font-size: var(--g-font-size-sm); font-weight: 600;
}
.q-link + .q-link { margin-top: var(--g-gap); }
.q-link-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.q-link-arrow { flex: none; color: var(--g-text-muted); font-size: var(--g-font-size-lg); }

/* 图片三宫格：104×104，点开看大图 */
.q-shots { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--g-gap); }
.q-shot {
  position: relative; aspect-ratio: 1 / 1;
  border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-card-hover); padding: 0; overflow: hidden; cursor: pointer;
}
.q-shot-img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* 附件：不预览，只列名＋图标＋大小（size_text 后端已算好） */
.q-files { display: flex; flex-direction: column; gap: var(--g-gap); }
.q-file {
  display: flex; align-items: center; gap: var(--g-gap); min-height: 44px;
  padding: 0 var(--g-pad-sm);
  background: var(--g-card); border: 1px solid var(--g-card-border);
  border-radius: var(--g-radius-sm);
  text-decoration: none; color: var(--g-text);
}
.q-file-ic   { flex: none; font-size: var(--g-font-size-lg); }
.q-file-name { flex: 1; min-width: 0; font-size: var(--g-font-size-sm); font-weight: 600;
               overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.q-file-size { flex: none; font-size: var(--g-font-size-xs); color: var(--g-text-dim); }

/* 看大图：栈再压一层；支持双指捏合/双击/滚轮缩放 + 拖动平移（缩放大修） */
.q-photo {
  position: fixed; inset: 0; z-index: 70;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: var(--g-gap); padding: var(--g-pad);
  background: var(--g-bg-glass);  /* t4：看大图遮罩改走 token（原 rgba(29,46,36,.94)） */
  overflow: hidden;               /* 放大后不许撑出滚动条 */
}
.q-photo-img {
  max-width: 100%; max-height: 82vh; object-fit: contain; border-radius: var(--g-radius-sm);
  touch-action: none;             /* 手势交给我们自己管，浏览器别抢（捏合/拖动的关键） */
  user-select: none; -webkit-user-select: none;
  will-change: transform;
}
.q-photo-cap { font-size: var(--g-font-size-sm); color: var(--g-text-on-dark); }
/* 关闭按钮：放大后点空白不关图（防误关），靠它或返回键退出 */
.q-photo-close {
  position: absolute; top: calc(var(--g-pad) + env(safe-area-inset-top, 0px)); right: var(--g-pad);
  width: 34px; height: 34px; border-radius: 50%;
  border: 1px solid var(--g-sep); background: var(--g-topbar-bg);
  color: var(--g-text); font-size: var(--g-font-size-lg);
  cursor: pointer; z-index: 1;
}
/* 保存键（卡A · 法典/10 元件 🄷）：看大图右下角贴底，与关闭键同层；颜色间距字号全走 --g-*（L-8） */
.q-photo-save {
  position: absolute; right: var(--g-pad);
  bottom: calc(var(--g-pad) + env(safe-area-inset-bottom, 0px));
  height: 44px; padding: 0 var(--g-pad); border-radius: var(--g-radius-sm);
  border: 1px solid var(--g-sep); background: var(--g-accent); color: var(--g-text-on-dark);
  font-size: var(--g-font-size-sm);
  cursor: pointer; z-index: 1;
}
.q-photo-save:disabled { opacity: .6; cursor: default; }

/* ══ F 底栏 TabBar（U-1 块5 · 法典/10 的 F0~F5）══
   吸底：一屏之内换页的手指落点固定在拇指区，不必上滑找入口。
   ★ 颜色全走 --g-*（L-8）；tab 个数由后端 capabilities.tabs 定，CSS 不假设有几个。 */
.wb-tabbar {
  position: sticky; bottom: 0; z-index: 30;
  display: flex; align-items: stretch;
  height: 64px;   /* t29 适老化：50→64，触达区 ≥48dp 行业底线再放宽（老人拇指容错） */
  padding-bottom: env(safe-area-inset-bottom, 0px);
  background: var(--g-topbar-bg);
  border-top: 1px solid var(--g-sep);
}
.wb-tab {
  flex: 1; min-width: 0;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px;
  border: 0; background: none; padding: 0;
  font-family: inherit; color: var(--g-text-dim); cursor: pointer;
  position: relative;
}
/* t29 适老化：图标 lg 档（原正文档偏小）、名字正文档（原 micro 0.55rem 老人看不清），只走 token（L-8） */
.wb-tab-ico  { font-size: var(--g-font-size-lg); line-height: 1.1; }
.wb-tab-name { font-size: var(--g-font-size); line-height: 1.1; }
.wb-tab.is-on { color: var(--g-accent); }
.wb-tab.is-on::after {
  content: ''; position: absolute; bottom: 2px; left: 50%; transform: translateX(-50%);
  width: 20px; height: 3px; border-radius: 2px; background: var(--g-accent);
}
.wb-tab.is-on .wb-tab-name { font-weight: 600; }
/* 筛选键与 tab 不是一类事（一个是翻这堆活，一个是换页），故右侧一道竖线分开 */
.wb-tab--search { flex: 0 0 58px; border-right: 1px solid var(--g-sep); }
/* 筛选生效时角标显数字：不显数字人就不知道自己筛了几条，以为活丢了 */
.wb-tab-dot {
  position: absolute; top: 4px; right: 10px;
  min-width: 14px; height: 14px; padding: 0 3px;
  border-radius: 999px; background: var(--g-accent); color: #fff;
  font-size: var(--g-font-size-micro); line-height: 14px; text-align: center;
}

/* 已筛选提示条：正在看筛过的结果这件事必须说出来 */
.wb-fs-tip {
  display: flex; align-items: center; gap: var(--g-gap);
  padding: var(--g-pad-xs) var(--g-pad-sm);
  border-radius: var(--g-radius-sm);
  background: var(--g-accent-bg);
  font-size: var(--g-font-size-xs); color: var(--g-accent-dark);
}
.wb-fs-tip > span { flex: 1; min-width: 0; }
.wb-fs-tip-x {
  flex: none; border: 0; background: none; padding: 2px 4px;
  font-family: inherit; font-size: var(--g-font-size-xs); font-weight: 600;
  color: var(--g-accent); cursor: pointer;
}

/* ══ 搜索面板 SearchSheet（U-1 块5b · 法典/03 的 D-27）══
   从底部升起，压 overlayStack（L-7）：返回键先关它。 */
.wb-fs { position: fixed; inset: 0; z-index: 65; pointer-events: auto; }
.wb-fs-mask { position: absolute; inset: 0; background: rgba(0,0,0,.28); }
.wb-fs-panel {
  position: absolute; left: 0; right: 0; bottom: 0;
  max-height: 72%;
  display: flex; flex-direction: column;
  padding: var(--g-pad-sm) var(--g-pad) var(--g-pad-sm);
  padding-bottom: calc(var(--g-pad-sm) + env(safe-area-inset-bottom, 0px));
  border-radius: var(--g-radius-lg) var(--g-radius-lg) 0 0;
  background: var(--g-card);
  box-shadow: var(--g-shadow-lg);
}
.wb-fs-bar { flex: none; display: flex; align-items: center; margin-bottom: var(--g-pad-xs); }
.wb-fs-title { flex: 1; font-size: var(--g-font-size); font-weight: 600; color: var(--g-text); }
.wb-fs-clear {
  border: 0; background: none; padding: 2px 4px;
  font-family: inherit; font-size: var(--g-font-size-xs); color: var(--g-text-dim); cursor: pointer;
}
/* 输入框＋搜键同一行：F8 chip 废止后不必再留整条底栏 */
.wb-fs-row {
  flex: none; display: flex; align-items: center; gap: var(--g-gap);
  margin-bottom: var(--g-pad-xs);
}
/* 搜索框：面板打开即聚焦，软键盘的搜索键直接生效 */
.wb-fs-input {
  flex: 1; min-width: 0; height: 32px;
  padding: 0 var(--g-pad-sm);
  border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-content); color: var(--g-text);
  font-family: inherit; font-size: var(--g-font-size-sm);
}
.wb-fs-input:focus { outline: none; border-color: var(--g-accent-light); }
/* 面板里的一行灰提示：告诉人按类别看去点段头，不在这儿找 */
.wb-fs-gh {
  margin: var(--g-pad-xs) 0 4px;
  font-size: var(--g-font-size-micro); color: var(--g-text-dim);
}
.wb-fs-go {
  flex: none; height: 32px; padding: 0 var(--g-pad);
  border: 0; border-radius: var(--g-radius-sm);
  background: var(--g-accent); color: #fff;
  font-family: inherit; font-size: var(--g-font-size); font-weight: 600; cursor: pointer;
}

/* ══ 抽屉柜 Dropdown + 居中面板（U-1 块9）══
   菜单项 hover、面板弹入动画。颜色只走 --g-*（L-8） */
.drw-menu-item:hover { background: var(--g-card-hover); }
@keyframes drwPopIn {
  from { opacity: 0; transform: scale(.95); }
  to   { opacity: 1; transform: scale(1); }
}

/* ══ 提交弹层 SubmitSheet（U-1 块7f · L-7 叠加栈）══
   居中弹窗（不固定在底部）。颜色只走 --g-*（L-8） */
.wb-ss { position: fixed; inset: 0; z-index: 66; pointer-events: auto; }
.wb-ss-mask { position: absolute; inset: 0; background: rgba(0,0,0,.28); }
.wb-ss-panel {
  position: absolute;
  left: 50%; top: 50%; transform: translate(-50%, -50%);
  width: 340px; max-width: 94vw; max-height: 80vh;
  display: flex; flex-direction: column;
  border-radius: var(--g-radius);
  background: var(--g-card); box-shadow: var(--g-shadow-lg);
  animation: wb-ss-open .18s ease-out;
}
/* 标题栏 */
.wb-ss-bar {
  flex: none; display: flex; align-items: center; gap: var(--g-gap);
  padding: var(--g-pad-sm) var(--g-pad);
  border-bottom: 1px solid var(--g-sep);
}
.wb-ss-title { font-size: var(--g-font-size); font-weight: 700; color: var(--g-text); }
.wb-ss-task  { flex: 1; min-width: 0; font-size: var(--g-font-size-xs); color: var(--g-text-dim);
               overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wb-ss-close {
  flex: none; width: 32px; height: 32px; border: 0; border-radius: 50%;
  background: var(--g-card-hover); font-size: var(--g-font-size-lg); line-height: 1;
  color: var(--g-text-dim); cursor: pointer;
}
/* 滚动内容区 */
.wb-ss-body {
  flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch;
  padding: var(--g-pad) var(--g-pad) var(--g-pad-xs);
}
.wb-ss-field { margin-bottom: var(--g-gap-lg); }
.wb-ss-label { font-size: var(--g-font-size-xs); font-weight: 700; color: var(--g-text-sub); margin-bottom: var(--g-pad-xs); }
/* textarea */
.wb-ss-note {
  width: 100%; box-sizing: border-box; min-height: 68px; resize: vertical;
  padding: var(--g-pad-xs) var(--g-pad-sm);
  border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-content); color: var(--g-text);
  font-family: inherit; font-size: var(--g-font-size-sm); line-height: 1.5;
}
.wb-ss-note:focus { outline: none; border-color: var(--g-accent-light); }
.wb-ss-note::placeholder { color: var(--g-text-muted); }
/* 签到型提示 */
.wb-ss-signin {
  padding: var(--g-pad); text-align: center; border-radius: var(--g-radius-sm);
  background: var(--g-accent-bg); font-size: var(--g-font-size); font-weight: 600; color: var(--g-accent);
}
/* 照片 */
.wb-ss-photo-row { display: flex; flex-wrap: wrap; gap: var(--g-gap); align-items: flex-start; }
.wb-ss-photo-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--g-gap); }
.wb-ss-photo-cell { position: relative; aspect-ratio: 1/1; border-radius: var(--g-radius-sm); overflow: hidden; }
.wb-ss-photo-img { width: 100%; height: 100%; object-fit: cover; display: block; }
.wb-ss-rm {
  position: absolute; top: 4px; right: 4px;
  width: 28px; height: 28px; border: 0; border-radius: 50%;
  background: rgba(0,0,0,.45); color: #fff;
  font-size: var(--g-font-size-sm); line-height: 1; cursor: pointer;
}
/* 添加按钮 */
.wb-ss-add {
  border: 1px dashed var(--g-card-border); border-radius: var(--g-radius-sm);
  background: none; padding: var(--g-pad-xs) var(--g-pad-sm);
  font-family: inherit; font-size: var(--g-font-size-xs); color: var(--g-text-dim); cursor: pointer;
  margin-bottom: var(--g-gap);
}
.wb-ss-add:active { background: var(--g-card-hover); }
/* 隐藏 file input */
.wb-ss-file-input { display: none; }
/* 附件/链接列表行 */
.wb-ss-file-list, .wb-ss-link-list { display: flex; flex-direction: column; gap: 4px; }
.wb-ss-file-row, .wb-ss-link-row {
  display: flex; align-items: center; gap: var(--g-gap);
  padding: 5px var(--g-pad-xs); border-radius: var(--g-radius-sm);
  background: var(--g-card-hover); font-size: var(--g-font-size-xs); color: var(--g-text-sub);
}
.wb-ss-link-input {
  width: 100%; box-sizing: border-box; height: 32px;
  padding: 0 var(--g-pad-sm);
  border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-content); color: var(--g-text);
  font-family: inherit; font-size: var(--g-font-size-sm);
  margin-bottom: var(--g-gap);
}
.wb-ss-link-input:focus { outline: none; border-color: var(--g-accent-light); }
.wb-ss-empty { font-size: var(--g-font-size-xs); color: var(--g-text-muted); padding: var(--g-pad-xs) 0; }
/* 底部按钮 */
.wb-ss-foot {
  flex: none; padding: var(--g-pad-sm) var(--g-pad);
  border-top: 1px solid var(--g-sep);
}
.wb-ss-go {
  width: 100%; height: 42px; border: 0; border-radius: var(--g-radius-sm);
  background: var(--g-accent); color: #fff;
  font-family: inherit; font-size: var(--g-font-size); font-weight: 700; cursor: pointer;
}
.wb-ss-go:disabled { opacity: .45; cursor: default; }

@keyframes wb-ss-open {
  from { opacity: 0; transform: translate(-50%, -50%) scale(.92); }
  to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}

/* ══ QuestDetail 认领人头像行（替代竖排列表，寸土寸金）══ */
.q-exp-claimants { margin-bottom: var(--g-gap); }
.q-exp-cl-head {
  font-size: var(--g-font-size-xs); font-weight: 700; color: var(--g-text-sub);
  margin-bottom: var(--g-pad-xs);
}
.q-exp-av-row { display: flex; flex-wrap: wrap; gap: var(--g-pad-sm); }
.q-exp-av-cell { display: flex; flex-direction: column; align-items: center; gap: 3px; }
.q-exp-av-label { font-size: var(--g-font-size-micro); color: var(--g-text-dim); max-width: 42px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 头像 6 种状态 + 通用角标（data-badge 属性驱动；角标符号=文本符号，规范 v1 §4：✓/✕/¥/!/数字）
   claimed(灰)→submitted(绿边!角标)→approved(绿底✓)→settled(金边¥ 钱货两讫)
              ↘ rejected(红边✕)→resubmitted(绿边+数字) */
.q-exp-av {
  width: 30px; height: 30px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  border: 2px solid transparent;
  font-size: var(--g-font-size-xs); font-weight: 700;
  cursor: default; position: relative;
}
/* 角标：右上角，白边框衬底，CSS 读 data-badge 属性画圆+图标 */
.q-exp-av[data-badge]::after {
  content: attr(data-badge); position: absolute; top: -3px; right: -3px;
  min-width: 13px; height: 13px; padding: 0 2px; border-radius: 999px;
  font-size: var(--g-font-size-micro); font-weight: 700; line-height: 13px; text-align: center; /* t32：8px→micro 档(≈8.8px) 可缩放 */
  border: 1.5px solid var(--g-card); box-sizing: border-box;
}
/* ① 领了没交：黑白头像 = 一眼看出没交 */
.q-exp-av--claimed {
  background: var(--g-card-hover); color: var(--g-text-dim);
  border-color: var(--g-text-muted);
  filter: grayscale(1);
}
/* ①b 到期未交：灰头像+·角标（2026-10-02 到期收尾，与「未交」同色但角标区分） */
.q-exp-av--expired {
  background: var(--g-card-hover); color: var(--g-text-muted);
  border-color: var(--g-text-muted); cursor: default;
  filter: grayscale(1); opacity: 0.7;
}
.q-exp-av--expired[data-badge]::after {
  background: var(--g-text-muted); color: #fff;
}
/* ② 交了等审：感叹号角标提醒「交了还没审」 */
.q-exp-av--submitted {
  background: var(--g-accent-bg); color: var(--g-accent);
  border-color: var(--g-green); cursor: pointer;
}
.q-exp-av--submitted[data-badge]::after {
  background: var(--g-accent); color: #fff;
}
/* ③ 审核通过：绿底+✓角标 */
.q-exp-av--approved {
  background: var(--g-green-bg); color: var(--g-green);
  border-color: var(--g-green); cursor: pointer;
}
.q-exp-av--approved[data-badge]::after {
  background: var(--g-green); color: #fff;
}
/* ④ 已结算：金边+¥角标（文本符号表钱货两讫，t8-f2 恢复） */
.q-exp-av--settled {
  background: var(--g-warn-bg); color: var(--g-warn);
  border-color: var(--g-warn); cursor: default;
}
.q-exp-av--settled[data-badge]::after {
  background: var(--g-warn); color: #fff;
}
/* ⑤ 已打回：红边+✕角标 */
.q-exp-av--rejected {
  background: var(--g-red-bg); color: var(--g-red);
  border-color: var(--g-red); cursor: pointer;
}
.q-exp-av--rejected[data-badge]::after {
  background: var(--g-red); color: #fff;
}
/* ⑥ 重新提交：绿边+数字角标（同 submitted 但带角标） */
.q-exp-av--resubmitted {
  background: var(--g-accent-bg); color: var(--g-accent);
  border-color: var(--g-green); cursor: pointer;
}
.q-exp-av--resubmitted[data-badge]::after {
  background: var(--g-green); color: #fff;
}

/* ══ U-16 展开态聚焦与防误触（砚仁 2026-08-09 裁定） ══
   展开的卡加 is-open（box-shadow 描 accent 色）；
   其余卡加 is-dimmed（磨砂玻璃效果 + pointer-events:none 防误触）；
   防误触逻辑在 JS（pointerdown/pointerup 位移 ≤10px），CSS 只管画。 */
.q-card.is-open {
  box-shadow: 0 0 0 2px var(--g-accent), 0 4px 16px rgba(0,0,0,.12);
  z-index: 1;
}
.q-loading {
  text-align: center;
  padding: 16px;
  color: var(--g-text-dim);
  font-size: var(--g-font-size-sm);
}

.q-card.is-dimmed {
  opacity: .35;
  filter: blur(1.5px);
  transition: opacity var(--g-trans), filter var(--g-trans);
  /* 原有 pointer-events:none 已撤（砚仁 2026-08-18：切到别的卡要点两下，第一下物理点不动）。
     防误触仍有一道：JS 端 pointerdown→pointerup 位移 >10px 不算点击（ui-primitives.js QuestCard 段）。 */
}

/* ══ 账目页（ledger.js）—— 资金池概览 → 流水详情 ══ */

/* 顶栏 */
.ld-head, .it-head {
  display: flex; align-items: center; gap: var(--g-pad-sm);
  padding: var(--g-pad);
  background: var(--g-topbar-bg);
  backdrop-filter: blur(18px);
  position: sticky; top: 0; z-index: 10;
}
.ld-back, .it-back {
  background: none; border: none; font-size: var(--g-font-size-lg); cursor: pointer;
  color: var(--g-text);
}
.ld-title, .it-title {
  font-size: var(--g-font-size-lg); font-weight: 700; color: var(--g-text);
}

/* 池子概览 */
.ld-pools-head {
  font-size: var(--g-font-size-xs); font-weight: 700;
  color: var(--g-text-sub); margin-bottom: var(--g-pad-xs);
}
.ld-pool {
  display: flex; align-items: center; gap: var(--g-pad-sm);
  background: var(--g-card);
  border: 1px solid var(--g-card-border);
  border-radius: var(--g-radius-sm);
  padding: var(--g-pad-sm) var(--g-pad);
  margin-bottom: var(--g-gap);
  cursor: pointer;
  transition: border-color var(--g-trans);
}
.ld-pool.is-on { border-color: var(--g-accent); border-width: 2px; background: rgba(61, 107, 82, 0.06); }
.ld-pool-ic { font-size: var(--g-font-size-lg); flex-shrink: 0; }
.ld-pool-mid { flex: 1; min-width: 0; }
.ld-pool-nm { font-size: var(--g-font-size-sm); font-weight: 600; color: var(--g-text); display: block; }
.ld-pool-bar {
  height: 4px; background: var(--g-card-hover); border-radius: 2px;
  margin-top: 4px; overflow: hidden;
}
.ld-pool-bar-fill { height: 100%; border-radius: 2px; transition: width .3s ease; }
.ld-pool-bar-fill--accent       { background: var(--g-accent); }
.ld-pool-bar-fill--warn         { background: var(--g-warn); }
.ld-pool-bar-fill--accent-light { background: var(--g-accent-light); }
.ld-pool-bar-fill--blue         { background: var(--g-blue); }
.ld-pool-bar-fill--dim          { background: var(--g-text-dim); }
.ld-pool-bal { font-size: var(--g-font-size-sm); font-weight: 700; color: var(--g-accent); white-space: nowrap; flex-shrink: 0; }
.ld-pool-bal--neg { color: var(--g-red); }

/* 流水汇总三格 */
.ld-dt-head {
  font-size: var(--g-font-size); font-weight: 700; color: var(--g-text);
  margin: var(--g-pad-lg) 0 var(--g-pad-sm);
}
.ld-sum { display: flex; gap: var(--g-gap); margin-bottom: var(--g-pad); }
.ld-sum-cell { flex: 1; text-align: center; border-radius: var(--g-radius-sm); padding: var(--g-pad-sm); cursor: pointer; }
/* t19：汇总卡即筛选器——选中高亮一圈（L-8 只走 token 色） */
.ld-sum-cell.is-on { box-shadow: inset 0 0 0 2px var(--g-accent); }
.ld-sum-cell--in  { background: var(--g-green-bg); }
.ld-sum-cell--out { background: var(--g-red-bg); }
.ld-sum-cell--ok  { background: var(--g-accent-bg); }
.ld-sum-cell--neg { background: var(--g-red-bg); }
.ld-sum-lb  { font-size: var(--g-font-size-micro); color: var(--g-text-dim); }
.ld-sum-val { font-size: var(--g-font-size-lg); font-weight: 700; }
.ld-sum-cell--in  .ld-sum-val { color: var(--g-green); }
.ld-sum-cell--out .ld-sum-val { color: var(--g-red); }
.ld-sum-cell--ok  .ld-sum-val { color: var(--g-accent); }
.ld-sum-cell--neg .ld-sum-val { color: var(--g-red); }

/* u- 注释行工具类：账目「全员余额合计」/流水来源等微弱小字注。
   t14：这三个类在 ledger.js/publish.js 被引用却从未定义，注释行继承正文 0.85rem 突兀（砚仁实测 P1）。
   归入 token 档：micro 字号 + dim 色，与相邻 .ld-sum-lb/.ld-entry-date 同一档（L-8 只走 tokens） */
.u-text-micro-muted,
.u-text-micro-muted-top,
.u-text-micro-muted-pad { font-size: var(--g-font-size-micro); color: var(--g-text-dim); }
.u-text-micro-muted-top { margin-top: var(--g-pad-xs); }
.u-text-micro-muted-pad { padding: var(--g-pad-xs) 0; }

/* 工具类补回（2026-09-25）：18aa668 写入本文件，df8bc95「合流远程+本地代码」时整段被删，
   而 js/ 仍按原名引用 → 元素无任何样式、按浏览器默认字号渲染
   （账目页流水展开块实测 font-size 13.6px，比正文还大，砚仁报「字体太大、像没渲染」）。
   与上方 t14 修复同一成因，故同址归入。原文逐字取自 git show 18aa668:css/base.css。 */
.u-flex-col { display: flex; flex-direction: column; gap: 10px; }
.u-flex-col-xs { display: flex; flex-direction: column; gap: 6px; }
.u-flex-row-sm { display: flex; gap: 8px; }
.u-flex-row-xs { display: flex; gap: 6px; align-items: center; }
.u-text-sm-sub { font-size: var(--g-font-size-sm); color: var(--g-text-sub); }
.u-text-xs-sub { font-size: var(--g-font-size-xs); color: var(--g-text-sub); }
.u-text-xs-muted { font-size: var(--g-font-size-xs); color: var(--g-text-muted); }
.u-error-text { font-size: var(--g-font-size-xs); color: var(--g-red); min-height: 16px; }
.u-link { color: var(--g-accent); text-decoration: none; font-weight: 600; cursor: pointer; }
.u-ml-md { margin-left: 10px; }
.u-ellipsis { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.u-detail-box {
  margin: 2px 0 6px; padding: 8px 10px; background: var(--g-content);
  border-radius: var(--g-radius-sm); font-size: var(--g-font-size-xs);
  color: var(--g-text-sub); line-height: 1.7;
}
/* 任务名＝主行下方的注解：回列表副信息档（xs/500/绿灰），强调权让给 700 的金额
   ——2026-09-26 impeccable 审核：原 12px/600/近黑是借了「区块标题」档位，注解比事实还重 */
.ld-entry-task {
  font-size: var(--g-font-size-xs); font-weight: 500; color: var(--g-text-sub);
  line-height: 1.45; padding: 2px 0 0 2px;
}
.u-detail-sub { font-size: var(--g-font-size-xs); color: var(--g-text-sub); line-height: 1.6; white-space: pre-line; }
.u-band-box {
  margin-bottom: 10px; padding: 10px 12px; background: var(--g-content);
  border-radius: var(--g-radius-sm);
}
.u-btn-secondary {
  flex: 1; padding: 8px;
  border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-card); color: var(--g-text);
  font-size: var(--g-font-size-sm); font-weight: 600; cursor: pointer;
}
.u-btn-danger {
  flex: 1; padding: 8px; border: none; border-radius: var(--g-radius-sm);
  background: var(--g-red); color: #fff;
  font-size: var(--g-font-size-sm); font-weight: 700; cursor: pointer;
}
.u-textarea {
  width: 100%; min-height: 80px; padding: 8px;
  border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  font-size: var(--g-font-size-sm); font-family: var(--g-font-family);
  background: var(--g-card); color: var(--g-text); resize: vertical;
}
.u-textarea-sm {
  width: 100%; min-height: 60px; padding: 8px;
  border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  font-size: var(--g-font-size-sm); font-family: var(--g-font-family);
  background: var(--g-card); color: var(--g-text); resize: vertical;
}

/* 分类汇总 + 流水明细 */
.ld-cat-head, .ld-entry-head {
  font-size: var(--g-font-size-xs); font-weight: 700;
  color: var(--g-text-sub); margin-bottom: var(--g-pad-xs);
}
.ld-cat-row, .ld-entry {
  display: flex; justify-content: space-between; align-items: center;
  padding: var(--g-pad-xs) 0;
  font-size: var(--g-font-size-xs);
}
.ld-cat-row { border-bottom: 1px solid var(--g-sep); }
/* 分隔线挂在整条外壳上（主行＋任务名＋展开块算一条）——2026-09-26 impeccable 审核：
   原挂在 .ld-entry 主行上，横线把任务名切给了下一条流水 */
.ld-entry-wrap { border-bottom: 1px solid var(--g-sep); }
.ld-cat-nm { color: var(--g-text); }
.ld-cat-amt { display: flex; gap: var(--g-pad-xs); flex-shrink: 0; }
.ld-cat-in  { color: var(--g-green); font-weight: 600; }
.ld-cat-out { color: var(--g-red); font-weight: 600; }
.ld-entry-left { display: flex; gap: var(--g-pad-xs); align-items: center; min-width: 0; }
/* 日组头（2026-10-20 层级重排，方案「账目层级与提现流程」A 项）：一行小灰字
   「MM-DD · 收入 +x · 支出 -y」，日期与当日合计同档灰，只占一行 */
.ld-day-head {
  font-size: var(--g-font-size-xs); font-weight: 600; color: var(--g-text-dim);
  letter-spacing: 1px; padding: var(--g-pad-sm) 0 var(--g-pad-xs);
}
/* 跨日配对子行的小日期签（正常行日期在日组头，行内不再重复） */
.ld-entry-daytag { font-size: var(--g-font-size-micro); color: var(--g-text-dim); flex-shrink: 0; }
/* 主标题＝明细内容（分类图标＋说明）：深色正字号，一眼读完「这是什么钱」——
   2026-10-20 层级重排：原灰色小胶囊退休（日期已迁日组头，不再与内容抢第一视觉） */
.ld-entry-note {
  color: var(--g-text); font-size: var(--g-font-size); font-weight: 600;
  min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* 社区池流水：当事人名字（谁的充值/赏金/提现一眼可见） */
.ld-entry-who { color: var(--g-accent); font-weight: 600; font-size: var(--g-font-size-xs); flex: 0 0 auto; }
/* 金额＝每行最重的视觉元素：右侧、最大字号、加粗（收入绿/支出红走既有 token） */
.ld-entry-amt { font-weight: 700; white-space: nowrap; flex-shrink: 0; font-size: var(--g-font-size-lg); }
.ld-entry-amt--in  { color: var(--g-green); }
.ld-entry-amt--out { color: var(--g-red); }
/* 状态行（冻结/解冻/退回）＝「钱在哪」的进行中状态，不是收支：金额降回正文档并整行画淡，
   与正常收支一眼可区分（锁图标/已退回章/划掉/已冲正章语义照旧，不发明新符号） */
.ld-entry-amt--state { color: var(--g-text-dim); font-size: var(--g-font-size); font-weight: 600; }
.ld-entry--state .ld-entry-note { color: var(--g-text-dim); font-weight: 400; }
.ld-entry--state .ld-entry-who  { color: var(--g-text-dim); }
.ld-empty { text-align: center; padding: var(--g-pad-lg); color: var(--g-text-dim); font-size: var(--g-font-size-xs); }

/* ══ 物品页（item.js）—— 分段横滑卡片 → 详情弹层 ══ */

.it-sections { margin-top: var(--g-pad-sm); }
.it-sec {
  display: flex; justify-content: space-between; align-items: center;
  width: 100%; background: none; border: none;
  padding: var(--g-pad-xs) 0;
  font-size: var(--g-font-size-sm); font-weight: 700; cursor: pointer;
}
.it-sec--dim    { color: var(--g-text-dim); }
.it-sec--accent { color: var(--g-accent); }
.it-sec--warn   { color: var(--g-warn); }
.it-sec--green  { color: var(--g-green); }
.it-sec-fold { font-size: var(--g-font-size-xs); }

.it-scroll {
  display: flex; gap: var(--g-gap);
  padding: var(--g-pad-xs) 0 var(--g-pad) 0;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.it-scroll-pad-l { width: 4px; flex-shrink: 0; }
.it-scroll-pad-r { width: var(--g-pad); flex-shrink: 0; }

.it-card {
  position: relative;
  width: 80px; flex-shrink: 0;
  background: var(--g-card);
  border: 1.5px solid var(--g-card-border);
  border-radius: var(--g-radius-sm);
  padding: var(--g-pad-xs);
  text-align: center;
  display: flex; flex-direction: column; align-items: center; gap: 4px;
}
.it-card-ic { font-size: var(--g-font-size-xl); line-height: 1; }
.it-card-nm {
  font-size: var(--g-font-size-micro); font-weight: 600;
  line-height: 1.2; max-width: 72px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.it-card-pr { font-size: var(--g-font-size-micro); color: var(--g-accent); font-weight: 600; }
.it-card-loc {
  font-size: var(--g-font-size-micro); color: var(--g-text-dim);
  max-width: 72px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.it-card-qty {
  font-size: var(--g-font-size-micro); color: var(--g-text-sub); font-weight: 600;
}

/* M8 物品卡片增强标记 */
.it-card-acc { position: absolute; top: 4px; right: 4px; font-size: var(--g-font-size-sm); line-height: 1; } /* t32：12px→sm 档(=12px) 可缩放 */
.it-card-exp { font-size: var(--g-font-size-micro); color: var(--g-text-dim); }
.it-card-exp--warn { color: var(--g-warn); font-weight: 700; }
.it-card-fix { position: absolute; top: 4px; left: 4px; font-size: var(--g-font-size-sm); line-height: 1; } /* t32：12px→sm 档(=12px) 可缩放 */

/* 物品添加按钮行（已废弃，改用 FAB） */

/* 物品视图切换 tab */
.it-view-tabs {
  display: flex; gap: 4px; padding: var(--g-pad-xs) 0;
  border-bottom: 1px solid var(--g-card-border); margin-bottom: var(--g-pad-xs);
}
.it-view-tab {
  flex: 1; padding: 8px; border: none; border-radius: var(--g-radius-sm);
  background: transparent; color: var(--g-text-dim);
  font-size: var(--g-font-size-sm); font-weight: 600; cursor: pointer;
  font-family: var(--g-font-family);
}
.it-view-tab--icon { flex: 0 0 40px; padding: 8px 0; font-size: var(--g-font-size-lg); }
.it-view-tab--on {
  background: var(--g-accent-bg); color: var(--g-accent);
}

/* 物品搜索条 */
.it-search-bar {
  display: flex; gap: 4px; padding: var(--g-pad-xs) 0;
  align-items: center;
}
.it-search-input {
  flex: 1; padding: 8px 12px;
  border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-card); color: var(--g-text);
  font-size: var(--g-font-size-sm); font-family: var(--g-font-family);
  outline: none;
}
.it-search-input:focus { border-color: var(--g-accent); }
.it-search-clear {
  flex: 0 0 32px; height: 32px;
  border: none; border-radius: 50%;
  background: var(--g-card-hover); color: var(--g-text-dim);
  font-size: var(--g-font-size-sm); cursor: pointer;
}

/* 物品浮动添加按钮（左下角拇指区） */
.it-fab {
  position: fixed; bottom: 68px; left: 16px; z-index: 40;  /* 左下角：右下是抽屉柜 tab，放右会挡住 —— 禁改回 right */
  width: 52px; height: 52px; border-radius: 50%; border: none;
  background: var(--g-accent); color: #fff;
  font-size: var(--g-font-size-xl); font-weight: 300; line-height: 1;
  box-shadow: var(--g-shadow-sm);  /* t4：禁纯黑投影（规范 v1 §1.1 tinted 阴影） */
  cursor: pointer; display: flex; align-items: center; justify-content: center;
}

/* 物品详情操作按钮行 */
.it-dt-acts {
  display: flex; flex-wrap: wrap; gap: 8px;
  margin-top: var(--g-gap); padding-top: var(--g-gap);
  border-top: 1px solid var(--g-card-border);
}
.it-dt-act {
  padding: 8px 14px; border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-card); font-size: var(--g-font-size-xs); font-weight: 600;
  cursor: pointer; font-family: var(--g-font-family);
}

/* ── 身份升级卡片 ─────────────────────────────────────── */
.wb-upgrade-card { background: var(--g-card); border: 1px solid var(--g-card-border); border-radius: var(--g-radius-md); padding: 12px 14px; margin-bottom: 10px; }
.wb-upgrade-head { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
.wb-upgrade-icon { font-size: var(--g-font-size-lg); } /* t32：18px→lg 档(≈17.6px) 可缩放 */
.wb-upgrade-title { font-size: var(--g-font-size-sm); font-weight: 600; color: var(--g-text); }
.wb-upgrade-desc { font-size: var(--g-font-size-sm); color: var(--g-text-muted); margin: 0 0 8px; } /* t32：12px→sm 档 */
.wb-upgrade-input-row { display: flex; gap: 8px; align-items: center; }
.wb-upgrade-input { flex: 1; padding: 6px 10px; border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm); background: var(--g-bg); color: var(--g-text); font-size: var(--g-font-size-sm); }
.wb-upgrade-btn { padding: 6px 14px; border: none; border-radius: var(--g-radius-sm); background: var(--g-accent); color: #fff; font-size: var(--g-font-size-sm); cursor: pointer; white-space: nowrap; }
.wb-upgrade-btn:disabled { opacity: 0.5; cursor: not-allowed; }
.wb-upgrade-ok { margin-top: 6px; font-size: var(--g-font-size-sm); color: var(--g-ok); } /* t32：12px→sm 档 */
.wb-upgrade-err { margin-top: 6px; font-size: var(--g-font-size-sm); color: var(--g-err); } /* t32：12px→sm 档 */

/* ── 身份升级卡片 ─────────────────────────────────────── */
.wb-upgrade-card { background: var(--g-card); border: 1px solid var(--g-card-border); border-radius: var(--g-radius-md); padding: 12px 14px; margin-bottom: 10px; }
.wb-upgrade-head { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }


/* ── 工作台关闭按钮 ──────────────────────────────────── */
.wb-close {
  flex-shrink: 0;
  width: 36px; height: 36px;   /* 稳定性收尾 P1-5：32→36，对齐项目图标按钮基准（pages-verify/pages-trade/pages-sushe 均 36px） */
  border: none; border-radius: var(--g-radius-sm);
  background: transparent;
  color: var(--g-text-muted);
  font-size: var(--g-font-size-lg); line-height: 1; /* t32：18px→lg 档 可缩放 */
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}
.wb-close:active { background: var(--g-card); }

/* ══ S-AGE 银龄模式布局适配套餐（t32 · 法典/04_UI风格规范.md 的「S-AGE 银龄模式」）══
   只在 html.senior（关怀/特大两档）下生效，档位倍率本身在 tokens.css 的 U-13 段。
   只动 token 与工具类层面：行高/段距/触控目标三件套，页面与组件零感知。 */
html.senior body { line-height: var(--g-line-senior); }      /* S-AGE-4：银龄档正文行高 ≥1.6 */
html.senior .card { padding: var(--g-pad-lg); }               /* 段距呼吸加大一档（14→20px） */
html.senior button { min-height: var(--g-touch-min); }        /* S-AGE-3：一切按钮命中区 ≥44px */
html.senior .list-row { min-height: var(--g-touch-min); }     /* 列表行同杠（U-2 条目可点即命中区） */

/* ═══ 骨架屏（加载顺序优化方案 §2-1/2-3）：白屏/转圈 → 灰条占位；间距圆角颜色全走 token（L-8） ═══ */
.sk-bar { height: 12px; border-radius: var(--g-radius-sm); background: var(--g-card-border); margin: var(--g-gap) 0; }
.sk-bar--title { height: 18px; width: 60%; }
.sk-bar--short { width: 40%; }
.sk-card { padding: var(--g-pad); border: 1px solid var(--g-card-border); border-radius: var(--g-radius); margin: var(--g-gap) 0; background: var(--g-card); }
.sk-list { width: 100%; }
.boot-skeleton { padding: calc(var(--g-pad-lg) * 2) var(--g-pad-lg); }

/* ═══ 卡1 自留地（法典/10_元件编号表.md 的 🄺）：卡片/日历切换条＋MonthAgenda 月历网格 ═══
   零引库 7 列 CSS grid（L-10）；字号颜色只取 --g-* token（L-8），触控格下限走 --g-touch-min（S-AGE-3） */
.pl-viewbar { display: flex; gap: var(--g-gap); margin-bottom: var(--g-gap); align-items: center; }
.pl-viewbar > :last-child:not(.pl-viewbtn) { margin-left: auto; }   /* 2026-10-01 右端附加件（便签钮）贴最右 */
.pl-viewbtn { flex: 1; min-height: 36px; border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-card); color: var(--g-text-sub); font-size: var(--g-font-size-sm); font-weight: 600; cursor: pointer; }
.pl-viewbtn.is-on { background: var(--g-accent-bg); color: var(--g-accent); border-color: var(--g-accent); }
.pl-cal { background: var(--g-card); border: 1px solid var(--g-card-border); border-radius: var(--g-radius); padding: var(--g-pad-sm); }
.pl-cal-head { display: flex; align-items: center; gap: var(--g-gap); margin-bottom: var(--g-pad-xs); }
.pl-cal-title { flex: 1; text-align: center; font-size: var(--g-font-size); font-weight: 700; color: var(--g-text); }
.pl-cal-nav { width: 36px; height: 36px; border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-card); color: var(--g-accent); font-size: var(--g-font-size-lg); cursor: pointer; }
.pl-cal-today { min-height: 36px; padding: 0 var(--g-pad-sm); border: 1px solid var(--g-card-border); border-radius: var(--g-radius-sm);
  background: var(--g-card); color: var(--g-accent); font-size: var(--g-font-size-xs); font-weight: 600; cursor: pointer; }
.pl-cal-wd { display: grid; grid-template-columns: repeat(7, 1fr); margin-bottom: 2px; }
.pl-cal-wd-cell { text-align: center; font-size: var(--g-font-size-micro); color: var(--g-text-dim); }
.pl-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.pl-cal-cell { min-height: var(--g-touch-min); border: 0; border-radius: var(--g-radius-sm); background: transparent;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; cursor: pointer;
  font-size: var(--g-font-size-xs); color: var(--g-text); padding: 2px 0; }
.pl-cal-cell--off { color: var(--g-text-muted); }
.pl-cal-cell--today { background: var(--g-accent-bg); font-weight: 700; color: var(--g-accent); }
.pl-cal-cell--sel { box-shadow: inset 0 0 0 1.5px var(--g-accent); }
.pl-cal-dots { display: flex; gap: 2px; }
.pl-cal-dot { width: 5px; height: 5px; border-radius: 50%; display: inline-block; }
.pl-cal-dot--due { background: var(--g-warn); }
.pl-cal-dot--todo { background: var(--g-accent); }
.pl-cal-dot--done { background: var(--g-green); }
.pl-cal-legend { display: flex; gap: var(--g-gap-lg); margin-top: var(--g-pad-xs); font-size: var(--g-font-size-micro); color: var(--g-text-dim); }
.pl-cal-legend-item { display: inline-flex; align-items: center; gap: 3px; }
.pl-daylist-head { margin: var(--g-pad-sm) 0 var(--g-pad-xs); font-size: var(--g-font-size-sm); font-weight: 700; color: var(--g-text); }
.pl-daylist-empty { font-size: var(--g-font-size-sm); color: var(--g-text-dim); padding: var(--g-pad-sm) 0; text-align: center; }
.pl-daylist { display: flex; flex-direction: column; gap: var(--g-gap); }

