/* 秋招账本 v1.10 样式。
   结构:① token(颜色/字号/圆角/动效,深浅两套只在这里分叉)② 基础与登录 ③ 顶栏 ④ 工作栏 ⑤ 列表 ⑥ 抽屉 ⑦ 今天面板
   ⑧ 阶段时间线 ⑨ 适配度 ⑩ 时间轴页 ⑪ 对话框/提示条/保存提示 ⑫ 过渡 ⑬ 窄屏。
   v1.10 的改动都能追到审查编号(VIS-/MOT-/IXD-/A11Y-),见 qz.js 同名注释。 */

/* ---------- ① token ---------- */
:root {
  color-scheme: light dark;
  --bg: #f6f5f3; --surface: #fdfcfa; --surface-2: #edebe7; --raise: #ffffff;
  --text: #1a1a18; --muted: #5f5c56; --faint: #8a877f; --border: #e0ddd8; --border-strong: #cbc7c0;
  --accent: #c2410c; --accent-ink: #fdf8f4; --accent-soft: rgba(194, 65, 12, .10);
  --ok: #166534; --ok-soft: rgba(22, 163, 74, .14);
  --warn: #854d0e; --warn-soft: rgba(202, 138, 4, .16);
  --info: #1d4ed8; --info-soft: rgba(37, 99, 235, .12);
  --danger: #b42318; --chip: rgba(127, 127, 127, .12); --hover: rgba(127, 127, 127, .07);
  /* 事件/阶段色:面试青、结果绿分开(以前两者同一种绿,图例形同虚设,审查 VIS-5) */
  --ev-deadline: #c2410c; --ev-apply: #64748b; --ev-assess: #7c3aed; --ev-test: #2563eb;
  --ev-interview: #0f766e; --ev-result: #2f7d4f; --ev-result-no: #6b6862;
  --st-todo: var(--faint); --st-apply: var(--ev-apply); --st-assess: var(--ev-assess); --st-test: var(--ev-test);
  --st-interview: var(--ev-interview); --st-offer: var(--ev-result); --st-no: var(--faint); --st-deadline: var(--ev-deadline);
  --ev-ink: #fff;
  /* 字号六档:中文最小 12,11 只给等宽数字(审查 VIS-20) */
  --fs-xs: 11px; --fs-s: 12px; --fs-m: 13px; --fs-b: 14px; --fs-l: 16px; --fs-xl: 20px;
  --mono: ui-monospace, "SF Mono", Menlo, monospace;
  --radius: 6px; --r-sm: 4px; --r-lg: 10px;
  --ease: cubic-bezier(.16, 1, .3, 1); --ease-out: cubic-bezier(.2, 0, 0, 1);
  --shadow-pop: 0 1px 2px rgba(0, 0, 0, .06), 0 12px 32px -12px rgba(0, 0, 0, .28);
}
@media (prefers-color-scheme: dark) {
  :root {
    color-scheme: dark;
    --bg: #171614; --surface: #1f1e1b; --surface-2: #26241f; --raise: #2a2824;
    --text: #e8e6e1; --muted: #a3a09a; --faint: #7d7a73; --border: #35322c; --border-strong: #4a463f;
    --accent: #fb923c; --accent-ink: #1a1a18; --accent-soft: rgba(251, 146, 60, .12);
    --ok: #6fd39a; --ok-soft: rgba(22, 163, 74, .18);
    --warn: #e3b341; --warn-soft: rgba(202, 138, 4, .18);
    --info: #7fb0ff; --info-soft: rgba(37, 99, 235, .18);
    --danger: #f87171; --chip: rgba(160, 160, 160, .14); --hover: rgba(160, 160, 160, .07);
    --ev-deadline: #fb923c; --ev-apply: #94a3b8; --ev-assess: #a78bfa; --ev-test: #60a5fa;
    --ev-interview: #2dd4bf; --ev-result: #5fbf82; --ev-result-no: #8a877f;
    --ev-ink: #1a1a18;   /* 深色下浅色底配深字(白字只有 2.5:1) */
    --shadow-pop: 0 1px 2px rgba(0, 0, 0, .3), 0 16px 40px -12px rgba(0, 0, 0, .6);
  }
}

/* ---------- ② 基础与登录 ---------- */
* { box-sizing: border-box; margin: 0; }
body {
  background: var(--bg); color: var(--text);
  font-family: -apple-system, "SF Pro Text", "Helvetica Neue", "PingFang SC", sans-serif;
  -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
  min-height: 100svh; padding: 48px 20px 80px;
}
.wrap { max-width: 860px; margin: 0 auto; position: relative; transition: opacity .45s var(--ease); }
body.qz-breath .wrap { opacity: .55; }   /* 屏息:系统验证面板出现前,页面把声音放低 */
h1 { font-size: 22px; font-weight: 600; letter-spacing: .04em; text-wrap: balance; }
/* 钉死 id:.sub 这个类名账本列表行也在用 */
#subLine { margin-top: 6px; font-size: 12.5px; color: var(--muted); letter-spacing: .06em; font-family: var(--mono); }
.rule { border: 0; border-top: 1px solid var(--border); margin: 22px 0; }
button, input, select, textarea { font: inherit; color: inherit; }
.mono, .cnt, .when, .fit-rank, .dl-t, .tl-at { font-variant-numeric: tabular-nums; }
.mono { font-family: var(--mono); }
/* 焦点环一套:以前行和格子是橙色 2px,按钮是浏览器默认蓝框,两个输入框干脆不画(审查 VIS-13 / A11Y) */
:where(button, a, [tabindex], summary):focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
:where(input, textarea, select):focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 12px 22px; border: 1px solid var(--border); border-radius: var(--radius);
  background: var(--surface); cursor: pointer; font-size: 14.5px;
  transition: border-color .2s var(--ease), background-color .2s var(--ease), transform .12s var(--ease-out);
}
.btn:hover { border-color: var(--muted); }
.btn:active { transform: scale(.98); }
.btn-primary { background: var(--accent); border-color: var(--accent); color: var(--accent-ink); font-weight: 600; }
.btn-primary:hover { border-color: var(--accent); filter: brightness(1.05); }
.hint { margin-top: 14px; font-size: 12.5px; color: var(--muted); }
.err { color: var(--danger); }
#setupBox { margin-top: 34px; }
#setupBox summary { font-size: 12.5px; color: var(--muted); cursor: pointer; letter-spacing: .04em; }
#setupBox input {
  margin-top: 12px; width: 100%; max-width: 340px;
  padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--r-sm);
  background: var(--surface); letter-spacing: .04em; font-size: 16px;
}
#setupBox .btn { margin-top: 10px; }
.svgdefs { position: absolute; width: 0; height: 0; }   /* 以前是内联 style,CSP 下要走样式表 */
.foot { margin-top: 32px; padding-top: 18px; border-top: 1px solid var(--border); display: flex; gap: 18px; align-items: center; flex-wrap: wrap; }
.foot a, .foot button { color: var(--muted); font-size: 12.5px; text-decoration: none; letter-spacing: .04em; background: none; border: 0; padding: 4px 0; cursor: pointer; }
.foot a:hover, .foot button:hover { color: var(--text); }
.foot .sp { flex: 1; }

/* 门禁视图保持 860 的窄栏;进了账本放宽,并收起大标题(工作栏已有「秋招账本」,标题区以前每次进页面占四分之一屏,审查 VIS-21) */
body.qz-wide .wrap { max-width: 1180px; }
body.qz-wide .wrap > h1, body.qz-wide #subLine, body.qz-wide .wrap > .rule { display: none; }
body.qz-wide { padding-top: 22px; }

/* ---------- ③ 顶栏 ---------- */
#bar { display: flex; flex-direction: column; gap: 10px; margin: 0 0 14px; }
.bar-row { display: flex; flex-wrap: wrap; gap: 8px 10px; align-items: center; }
.bar-top .grow { flex: 1; }
/* 统计行独占一行,筛选键在它右边:点「只看 ≥60」后顶栏不再重排(以前刚点的按钮会横跳 713px,审查 VIS-11) */
.bar-sub { justify-content: space-between; row-gap: 8px; }
#stat { color: var(--muted); font-size: var(--fs-m); font-variant-numeric: tabular-nums; display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; min-height: 26px; }
#stat .st-total { font-family: var(--mono); font-size: var(--fs-s); }
#stat .st-offer { color: var(--ok); font-weight: 600; }
#stat .st-f { font: inherit; font-size: var(--fs-m); color: var(--text); background: var(--surface); border: 1px solid var(--border);
  border-radius: 999px; padding: 3px 11px; cursor: pointer; font-variant-numeric: tabular-nums;
  transition: border-color .15s var(--ease-out), background-color .15s var(--ease-out); }
#stat .st-f:hover { border-color: var(--border-strong); background: var(--hover); }
#stat .st-week, #stat .st-need { color: var(--accent); border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); }
#stat .st-todo { color: var(--info); border-color: color-mix(in srgb, var(--info) 40%, var(--border)); }
#stat .st-fit, #stat .st-hits { font-size: var(--fs-s); font-family: var(--mono); }
#stat .st-now { color: var(--text); font-weight: 600; }
#filters { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
#filters button { font: inherit; font-size: var(--fs-s); padding: 4px 11px; border: 1px solid var(--border);
  background: transparent; color: var(--muted); border-radius: 999px; cursor: pointer;
  transition: color .15s var(--ease-out), border-color .15s var(--ease-out), background-color .15s var(--ease-out); }
#filters button:hover { color: var(--text); background: var(--hover); }
#filters button[aria-pressed="true"] { border-color: var(--text); color: var(--text); }
#filters #sortFit[aria-pressed="true"], #filters #onlyFit[aria-pressed="true"] { border-color: var(--accent); color: var(--accent); background: var(--accent-soft); }
#filters .sep { width: 1px; height: 16px; background: var(--border); margin: 0 3px; }
#search, #memoIn { font: inherit; font-size: var(--fs-m); padding: 6px 12px; border: 1px solid var(--border);
  border-radius: 999px; background: var(--surface); color: var(--text); width: 220px; max-width: 100%;
  transition: border-color .15s var(--ease-out), background-color .15s var(--ease-out); }
#search::placeholder, #memoIn::placeholder { color: var(--muted); }
#search:focus, #memoIn:focus { border-color: var(--border-strong); }
#memoIn { border-style: dashed; min-width: 120px; }
#memoIn:focus { border-style: solid; }
#btnAdd { padding: 6px 14px; font-size: var(--fs-m); border-radius: 999px; }
#toolSlot:empty { display: none; }
#toolSlot button { font: inherit; font-size: var(--fs-s); padding: 4px 11px; border-radius: 999px; border: 1px dashed var(--border-strong); background: none; color: var(--muted); cursor: pointer; }
#toolSlot button:hover { color: var(--text); border-style: solid; }
#bar .statlink { border: 0; background: none; padding: 0; font: inherit; font-size: var(--fs-s); color: var(--accent); cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
#bar .statlink:hover { opacity: .8; }
#navToggle { font: inherit; font-size: 14px; line-height: 1; padding: 6px 9px; border: 1px solid var(--border); border-radius: var(--r-sm);
  background: none; color: var(--muted); cursor: pointer; }
#navToggle:hover { color: var(--text); border-color: var(--muted); }

/* ---------- ④ 工作栏 ---------- */
.app { display: grid; grid-template-columns: minmax(0, 1fr) clamp(340px, 34%, 440px); gap: 22px; align-items: start; }
.app.nav-hidden #nav { display: none; }
#nav { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
#nav .navbrand { display: none; }
#nav .navpin { display: none; margin-top: auto; padding-top: 10px; }
#nav button { font: inherit; font-size: var(--fs-m); text-align: left; padding: 8px 10px; border: 1px solid transparent; border-radius: var(--radius);
  background: none; color: var(--muted); cursor: pointer; display: flex; justify-content: space-between; align-items: baseline; gap: 8px;
  transition: color .15s var(--ease-out), background-color .15s var(--ease-out); }
#nav button:hover { color: var(--text); background: var(--hover); }
#nav button[aria-pressed="true"] { color: var(--text); background: var(--surface-2); border-color: var(--border); font-weight: 600; }
#nav button .cnt { font-family: var(--mono); font-size: var(--fs-xs); color: var(--muted); }
#nav button.nav-all { margin-top: 8px; }
#nav button.nav-all + button.nav-all { margin-top: 0; }
#nav #navPin { font-size: var(--fs-s); color: var(--muted); justify-content: flex-start; gap: 6px; }
#nav #navPin .pin-ico::before { content: '○'; }
#nav #navPin[aria-pressed="true"] { color: var(--accent); background: var(--accent-soft); border-color: transparent; font-weight: 500; }
#nav #navPin[aria-pressed="true"] .pin-ico::before { content: '●'; }
@media (pointer: fine) and (min-width: 960px) {
  #navToggle { display: none; }
  body:not(.qz-wide) > #nav { display: none; }   /* 桌面态面板挂在 body 下,登录前不能露出来 */
  /* v1.10 自动收起的侧栏浮在内容上方,只有「固定」才把内容推开:以前收放时整块内容被推着横移(CLS 0.59–0.81),
     用户什么都没操作、指针下的目标就换了位置(审查 MOT-3) */
  body.qz-wide { padding-left: 30px; }
  body.qz-wide.nav-pinned { padding-left: 220px; transition: padding-left .24s var(--ease-out); }
  #nav { position: fixed; left: 0; top: 0; bottom: 0; width: 200px; padding: 22px 12px 16px; z-index: 30;
    background: var(--surface); border-right: 1px solid var(--border); overflow-y: auto;
    transition: transform .28s cubic-bezier(.23, 1, .32, 1), box-shadow .28s var(--ease-out); }
  body.nav-auto #nav { box-shadow: 8px 0 24px -16px rgba(0, 0, 0, .35); }
  body.qz-wide:not(.nav-pinned):not(.nav-auto) #nav { box-shadow: 12px 0 32px -18px rgba(0, 0, 0, .45); }
  #nav .navbrand { display: block; font-family: var(--mono); font-size: var(--fs-xs); letter-spacing: .12em; color: var(--muted); padding: 0 10px 14px; text-transform: uppercase; }
  #nav .navpin { display: block; }
  /* 收起态左缘留的那条:以前 10px 近乎看不见(审查 VIS / 截图 d-nav-collapsed),现在是一条带把手的细边 */
  body.nav-auto #nav::after { content: ''; position: absolute; right: 3px; top: 50%; width: 3px; height: 40px; margin-top: -20px; border-radius: 3px; background: var(--border-strong); }
}
body.qz-entering, body.qz-entering #nav { transition: none !important; }

/* ---------- ⑤ 列表 ---------- */
#list { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--border); }
#list .none { padding: 46px 6px; color: var(--muted); font-size: var(--fs-m); border-bottom: 1px solid var(--border); text-align: center; }
/* 列:阶段点 | 主体 | 适配度 | 地点 | 截止/日期(「更新 9.25」那列删了,审查 VIS-3) */
.row, .grp { display: grid; grid-template-columns: 14px minmax(0, 1fr) 86px 88px 104px; gap: 0 12px; align-items: center; }
.row { padding: 11px 8px; border-bottom: 1px solid var(--border); cursor: pointer; transition: background-color .12s var(--ease-out); }
.row:hover { background: var(--hover); }
.row[aria-selected="true"] { background: var(--surface); box-shadow: inset 3px 0 0 var(--accent); }
.row:focus-visible, .grp:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.row .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--st-todo); justify-self: center; box-shadow: 0 0 0 3px color-mix(in srgb, currentColor 0%, transparent); }
.row[data-cat="apply"] .dot { background: var(--st-apply); }
.row[data-cat="assess"] .dot { background: var(--st-assess); }
.row[data-cat="test"] .dot { background: var(--st-test); }
.row[data-cat="interview"] .dot { background: var(--st-interview); }
.row[data-cat="offer"] .dot { background: var(--st-offer); }
.row[data-cat="no"] .dot { background: transparent; box-shadow: inset 0 0 0 1.5px var(--faint); }
.row .main { min-width: 0; }
.row .line { display: flex; gap: 8px; align-items: baseline; min-width: 0; }
/* 公司是认这一行的第一眼信息:宽度不够时先让岗位让位 */
.row .c { font-weight: 600; flex: 0 0 auto; max-width: 62%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.row .p { color: var(--text); font-size: var(--fs-l); flex: 1 1 auto; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.row .pph { color: var(--muted); font-size: var(--fs-m); }
.row .p:empty { display: none; }
.row .star { color: var(--warn); font-size: var(--fs-s); letter-spacing: -1px; flex: none; }
.row .sub { margin-top: 4px; display: flex; gap: 6px 8px; flex-wrap: wrap; align-items: center; font-size: var(--fs-s); letter-spacing: normal; font-family: inherit; color: var(--muted); }
.row .stg { font-weight: 600; color: var(--st-todo); }
.row .stg.st-apply { color: var(--muted); }   /* 「投递」字色 --ev-apply 在浅色底只有 4.4:1;色点仍用 --st-apply */ .row .stg.st-assess { color: var(--st-assess); } .row .stg.st-test { color: var(--st-test); }
.row .stg.st-interview { color: var(--st-interview); } .row .stg.st-offer { color: var(--st-offer); } .row .stg.st-no { color: var(--faint); }
.row .kind { color: var(--muted); }
.chip { font-size: var(--fs-s); line-height: 18px; padding: 0 7px; border-radius: 999px; background: var(--chip); color: var(--muted); white-space: nowrap; }
.row .fitc { display: flex; flex-direction: column; align-items: flex-start; gap: 3px; min-width: 0; }
.row .loc { font-size: var(--fs-s); color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.row .when, .grp .when { font-family: var(--mono); font-size: var(--fs-xs); color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: right; }
.row .when.due-soon, .grp .when.due-soon { color: var(--accent); font-weight: 600; }
.row .when.due-past, .grp .when.due-past { text-decoration: line-through; color: var(--muted); }   /* 不再叠 opacity(3.2:1),只划线 + 次要色 */
.row .when.due-far { color: var(--warn); }
.row .when.due-far::after { content: ' ?'; }
/* 已结束:不再整行 .55 透明(按钮和胶囊一起掉到 3:1 以下,审查 VIS-7),只把标题降一级 */
.row.dead .p, .row.shelved .p, .row.expired .p { color: var(--muted); }
.row.dead .p { text-decoration: line-through; text-decoration-color: var(--faint); }
/* 幽灵行:刚改了阶段、已不属于当前视图,留在原位说明去向 */
.row.moved { background: repeating-linear-gradient(-45deg, transparent 0 8px, var(--hover) 8px 16px); }
.row.moved[aria-selected="true"] { box-shadow: inset 3px 0 0 var(--faint); }
.row .moved-to { font: inherit; font-size: var(--fs-s); color: var(--accent); background: var(--accent-soft); border: 0; border-radius: 999px; padding: 1px 9px; cursor: pointer; }
.row .moved-to:hover { text-decoration: underline; }

/* 状态胶囊 */
.chip-stall { background: var(--accent-soft); color: var(--accent); }
.chip-next { background: var(--info-soft); color: var(--info); }
.chip-expired { background: transparent; box-shadow: inset 0 0 0 1px var(--border-strong); color: var(--accent); }
.chip-need { background: var(--accent-soft); color: var(--accent); font-weight: 600; }
.chip-done { background: var(--ok-soft); color: var(--ok); }
/* 备忘胶囊:以前只写了 border-style,边框宽度落到默认 3px,变成粗虚线还撑高了行(审查 VIS-10) */
.chip.chip-memo { background: transparent; box-shadow: inset 0 0 0 1px var(--muted); color: var(--muted); }
/* 行内小动作:「标记完成」是中性按钮,和「✓ 已完成」状态胶囊一眼分得开(审查 IXD-11) */
.row .done, .row .undone, .row .restore { position: relative; font: inherit; font-size: var(--fs-s); line-height: 18px; padding: 0 9px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--border-strong); background: var(--surface); color: var(--muted);
  transition: color .15s var(--ease-out), border-color .15s var(--ease-out), background-color .15s var(--ease-out); }
.row .done::before, .row .undone::before, .row .restore::before, .row .moved-to::before { content: ''; position: absolute; inset: -8px -3px; }
.row .done:hover { color: var(--ok); border-color: var(--ok); background: var(--ok-soft); }
.row .undone:hover, .row .restore:hover { color: var(--text); border-color: var(--muted); }
.row .moved-to { position: relative; }

/* 公司组头 */
.grp { padding: 9px 8px; border-bottom: 1px solid var(--border); cursor: pointer; background: color-mix(in srgb, var(--surface-2) 45%, transparent); transition: background-color .12s var(--ease-out); }
.grp:hover { background: var(--surface-2); }
.grp .chev { font-size: var(--fs-xs); color: var(--muted); justify-self: center; transition: transform .16s var(--ease-out); }
.grp .main { min-width: 0; grid-column: 2 / 5; }   /* 公司名跨进地点那一格(以前那格恒空,审查 VIS-14) */
.grp .line { display: flex; gap: 10px; align-items: center; min-width: 0; }
.grp .gc { font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.grp .gn { font-family: var(--mono); font-size: var(--fs-xs); color: var(--muted); flex: none; }
.grp .gact { display: inline-flex; gap: 6px; align-items: center; margin-left: 2px; flex: none; }
.grp .gact button { position: relative; font: inherit; font-size: var(--fs-s); line-height: 20px; padding: 0 10px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--border-strong); background: var(--surface); color: var(--muted);
  transition: color .15s var(--ease-out), border-color .15s var(--ease-out), background-color .15s var(--ease-out); }
/* 组头「投递」只有 42×20,又嵌在一整行「点了会折叠」的组头里:命中区扩到 40 高(审查 VIS-17) */
.grp .gact button::before { content: ''; position: absolute; inset: -10px -3px; }
.grp .gact button:hover { color: var(--text); border-color: var(--muted); }
.grp .gact .gapply { color: var(--accent); border-color: color-mix(in srgb, var(--accent) 50%, var(--border)); }
.grp .gact .gapply:hover { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }
.grp .gact .gconfirm { border-color: var(--accent); color: var(--accent); }
.grp .gact .gconfirm:hover:not(:disabled) { background: var(--accent); color: var(--accent-ink); }
.grp .gact .gconfirm:disabled { opacity: .5; cursor: not-allowed; border-color: var(--border); color: var(--muted); }
.grp .gact .gquota { border-style: dashed; }
.grp .gpicked { font-family: var(--mono); font-size: var(--fs-xs); color: var(--accent); }
.row input.pick { width: 16px; height: 16px; margin: 0; justify-self: center; accent-color: var(--accent); cursor: pointer; }
/* 二级岗位行:缩进 + 不再显示公司名(一级行已经写了) */
.row.sub { padding-left: 34px; }
.row.sub .c { display: none; }
.row.sub.own-c .c { display: inline; }   /* 多条未命名草稿并存时,正在敲的那条临时露出公司名 */
/* v1.11 母行组里的子公司岗位:露出自己的机构名(小一号、次要色),不然看不出是苏州金租还是苏州银行 */
.row.sub.inst .c { display: inline; font-weight: 500; font-size: var(--fs-m); color: var(--muted); margin-right: 6px; }

/* ---------- ⑥ 抽屉 ---------- */
#drawer { position: sticky; top: 16px; max-height: calc(100vh - 32px); overflow: auto;
  overscroll-behavior: contain; overflow-wrap: anywhere;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-lg); padding: 20px 22px;
  transition: transform .16s var(--ease), opacity .16s var(--ease); }
#drawerBody.swap { animation: qzFadeIn .14s var(--ease-out); }
@keyframes qzFadeIn { from { opacity: .35; } to { opacity: 1; } }
#saveSlot { min-height: 0; }
#drawer .co { font-size: var(--fs-s); letter-spacing: .08em; color: var(--muted); }
#drawer h2 { font-size: var(--fs-xl); font-weight: 600; margin: 4px 0 10px; line-height: 1.3; text-wrap: balance; }
#drawer h2:focus { outline: none; }
#whenTitle:focus, #stageTitle:focus { outline: none; }   /* 触屏打开定时间框时焦点放在标题上(不直接弹日期选择器),不画焦点环 */   /* 窄屏打开抽屉时焦点落在 h2(程序移焦),不画焦点环 */
#drawer .chips { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 10px; }
#drawer .links { display: flex; gap: 14px; align-items: baseline; flex-wrap: wrap; font-size: var(--fs-s); }
#drawer .links a { color: var(--accent); text-decoration: none; }
#drawer .links a:hover { text-decoration: underline; }
#drawer .links .how { color: var(--muted); font-size: var(--fs-xs); letter-spacing: .06em; font-family: var(--mono); }
#drawer .back-tl { font: inherit; font-size: var(--fs-s); color: var(--accent); background: var(--accent-soft); border: 0; border-radius: 999px; padding: 3px 11px; margin-bottom: 12px; cursor: pointer; }
#drawer .dupe { font: inherit; font-size: var(--fs-s); color: var(--warn); background: var(--warn-soft); border: 0; border-radius: 999px; padding: 1px 9px; cursor: pointer; }
/* 点击即编辑:显示态是一枚无框按钮,编辑态就地换成输入控件 */
.plain { display: block; width: 100%; text-align: left; font: inherit; color: inherit;
  background: none; border: 0; padding: 0; cursor: text; border-radius: 3px;
  text-decoration: underline dotted transparent; text-underline-offset: 3px; transition: text-decoration-color .15s var(--ease-out); }
.plain:hover { text-decoration-color: var(--border-strong); }
.plain.ph, .body .ph { color: var(--muted); }
/* 就地编辑的显示态也是可点目标:至少 24px 高(以前 16–19px,点偏就落到别处,审查 A11Y-9) */
#drawer .plain { min-height: 24px; padding: 2px 0; }
#drawer .ghost-f .plain { min-height: 24px; }
.sec .ed { padding: 4px 6px; margin: -4px 0; min-height: 24px; }
#drawer .links a { display: inline-block; padding: 4px 0; }
#drawer .meta { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 18px; margin: 14px 0; padding: 14px 0; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
#drawer .meta dt { font-size: var(--fs-s); color: var(--muted); letter-spacing: .04em; }
#drawer .meta dd { margin: 3px 0 0; font-size: var(--fs-b); min-height: 20px; cursor: text; }
#drawer .meta [data-f="loc"] .plain { white-space: pre-wrap; overflow-wrap: anywhere; }
#drawer .meta textarea { min-height: 3.4em; resize: vertical; }
#drawer .meta .wide { grid-column: 1 / -1; }
/* 没填的字段收成一排「+ 部门」小胶囊(以前 9 格里平均 5.6 格是灰色「点击填写」,审查 IXD-12 / VIS-9) */
#drawer .meta-add { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 6px; }
#drawer .meta-add:only-child { margin: -2px 0; }
#drawer .ghost-f .plain { width: auto; display: inline-block; font-size: var(--fs-s); color: var(--muted); padding: 2px 9px; border-radius: 999px; border: 1px dashed var(--border-strong); cursor: pointer; }
#drawer .ghost-f .plain:hover { color: var(--text); border-style: solid; }
#drawer .ghost-f:has(input, select, textarea) { flex-basis: 100%; }
#drawer .meta input, #drawer .meta select, #drawer .sec textarea,
#drawer .co input, #drawer h2 input { width: 100%; box-sizing: border-box; font: inherit;
  border: 1px solid var(--border); border-radius: var(--r-sm); padding: 5px 8px; background: var(--bg); color: inherit; }
#drawer input:focus, #drawer select:focus, #drawer textarea:focus { border-color: var(--accent); }
/* 日期编辑器下方的「清空」:原生日期控件在桌面 Chrome 上没有清除按钮 */
#drawer .date-clear { display: inline-flex; align-items: center; min-height: 24px; margin-top: 2px; padding: 0 6px; margin-left: -6px;
  font: inherit; font-size: var(--fs-xs); color: var(--muted); background: none; border: 0; border-radius: var(--r-sm); cursor: pointer;
  transition: color .12s var(--ease-out); }
#drawer .date-clear:hover { color: var(--danger); }
/* 阶段条:四组,已走过的带 ✓(审查 VIS-22 / IXD-12) */
.stages { display: flex; flex-wrap: wrap; gap: 8px 14px; padding: 4px 0 14px; }
.stg-grp { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; }
.stg-gl { font-size: var(--fs-xs); color: var(--muted); margin-right: 1px; }
.stages button { position: relative; flex: none; font: inherit; font-size: var(--fs-s); padding: 3px 10px;
  border: 1px solid var(--border); background: transparent; color: var(--muted); border-radius: 999px; cursor: pointer;
  transition: color .12s var(--ease-out), border-color .12s var(--ease-out), background-color .12s var(--ease-out); }
.stages button:hover { color: var(--text); border-color: var(--border-strong); }
.stages button.past { color: var(--text); border-color: var(--border-strong); }
.stages button.past::after { content: ' ✓'; color: var(--ok); }
.stages button[aria-pressed="true"] { background: var(--text); color: var(--bg); border-color: var(--text); }
.stages button.dead-st:hover { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 50%, var(--border)); }
.sec { margin: 16px 0; }
.sec .sh { display: flex; align-items: baseline; gap: 8px; margin: 0 0 6px; }
.sec h3 { font-size: var(--fs-s); letter-spacing: .1em; color: var(--muted); font-weight: 500; margin: 0; }
.sec .ed { font: inherit; font-size: var(--fs-s); color: var(--muted); background: none; border: 0; padding: 0; cursor: pointer; opacity: 0; transition: opacity .15s var(--ease-out); }
.sec:hover .ed, .sec .ed:focus-visible { opacity: 1; color: var(--accent); }
.sec .body { font-size: var(--fs-b); line-height: 1.7; cursor: text; text-wrap: pretty; }
.sec ol { margin: 0; padding-left: 1.6em; }
.sec li { margin: 0 0 2px; }
.sec p { margin: 0 0 4px; }
.sec textarea { min-height: 120px; line-height: 1.6; }
/* 空的分节收成「+ 加分项」小胶囊 */
.secs-empty { display: flex; flex-wrap: wrap; gap: 6px; margin: 14px 0; }
.secs-empty .sec.empty { margin: 0; }
.secs-empty .sec.empty:not(.editing) { cursor: pointer; }
.secs-empty .sec.empty:not(.editing) .sh { margin: 0; padding: 2px 9px; border-radius: 999px; border: 1px dashed var(--border-strong); }
.secs-empty .sec.empty:not(.editing) .sh:hover { border-style: solid; }
.secs-empty .sec.empty:not(.editing) h3 { letter-spacing: 0; }
.secs-empty .sec.empty:not(.editing) h3::before { content: '+ '; }
.secs-empty .sec.empty:not(.editing) .ed, .secs-empty .sec.empty:not(.editing) .body { display: none; }
.secs-empty .sec.editing { flex-basis: 100%; }
.tail { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 24px; padding-top: 14px; border-top: 1px solid var(--border); }
#btnDel { font: inherit; font-size: var(--fs-s); color: var(--muted); background: none; border: 1px solid var(--border); border-radius: var(--r-sm); padding: 5px 10px; cursor: pointer;
  transition: color .15s var(--ease-out), border-color .15s var(--ease-out); }
#btnDel:hover { color: var(--danger); border-color: var(--danger); }
.tail .ver { font-size: var(--fs-xs); color: var(--muted); letter-spacing: .04em; }
#drawerClose { font: inherit; font-size: var(--fs-m); color: var(--muted); background: none; border: 0; padding: 8px 0; cursor: pointer; }
.only-sm { display: none; }

/* ---------- ⑦ 今天面板(抽屉空态) ---------- */
#drawer.empty { padding: 20px 20px 16px; }
#drawer .ag-title { font-size: var(--fs-l); margin: 0; }
#drawer .ag-date { color: var(--muted); font-size: var(--fs-xs); margin: 2px 0 10px; }
#drawer .ag-sec { margin: 12px 0 0; }
#drawer .ag-sec h3 { font-size: var(--fs-s); color: var(--muted); font-weight: 500; letter-spacing: .06em; margin: 0 0 2px; }
#drawer .ag-item { grid-template-columns: 58px 8px minmax(0, 1fr) auto; padding: 7px 4px; border-radius: var(--r-sm); }
#drawer .ag-more { margin: 6px 4px 0; font: inherit; font-size: var(--fs-s); color: var(--accent); background: none; border: 0; padding: 2px 0; cursor: pointer; }
#drawer .ag-more:hover { text-decoration: underline; }
#drawer .ag-empty { color: var(--muted); font-size: var(--fs-m); margin: 14px 0; }
#drawer .kbd { margin-top: 16px; font-size: var(--fs-xs); color: var(--muted); font-family: var(--mono); letter-spacing: .02em; }
#drawer .funnel { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--border); font-size: var(--fs-s); color: var(--muted); }
#drawer .funnel b { color: var(--text); font-family: var(--mono); font-weight: 600; }

/* ---------- ⑧ 阶段时间线(抽屉里) ---------- */
.tl { list-style: none; margin: 0 0 16px; padding: 0 0 0 2px; border-left: 2px solid var(--border); }
.tl-ev { position: relative; padding: 4px 0 6px 14px; display: flex; flex-wrap: wrap; gap: 3px 10px; align-items: baseline; font-size: var(--fs-m); }
.tl-ev::before { content: ''; position: absolute; left: -7px; top: 9px; width: 8px; height: 8px; border-radius: 50%; background: var(--border-strong); }
.tl-last::before { background: var(--accent); }
.tl-at { color: var(--muted); font-size: var(--fs-xs); }
.tl-st { font-weight: 600; }
.tl-when, .tl-src { color: var(--muted); font-size: var(--fs-s); }
.tl-src::before { content: '·'; margin-right: 6px; }
.tl-memo { color: var(--text); flex-basis: 100%; }
.tl-ev .evbox { flex: 1 1 150px; min-width: 0; }
.tl-ev .evbox .plain { font-size: var(--fs-m); }
.tl-ev .evbox input { font: inherit; font-size: var(--fs-m); width: 100%; box-sizing: border-box; padding: 3px 6px;
  border: 1px solid var(--border); border-radius: var(--r-sm); background: var(--surface); color: var(--text); }
.tl-ev .plain.need { color: var(--accent); font-weight: 600; }
.tl-back, .tl-nodate, .tl-undone, .tl-ics { font: inherit; font-size: var(--fs-s); color: var(--muted); background: none; border: 1px solid var(--border);
  border-radius: 999px; padding: 0 9px; line-height: 20px; cursor: pointer; }
.tl-back:hover, .tl-nodate:hover, .tl-undone:hover, .tl-ics:hover { color: var(--text); border-color: var(--muted); }
.tl-done { font: inherit; font-size: var(--fs-s); line-height: 20px; border-radius: 999px; padding: 0 9px; cursor: pointer; border: 1px solid var(--border-strong); background: none; color: var(--muted); }
.tl-done:hover { color: var(--ok); border-color: var(--ok); background: var(--ok-soft); }
.tl-done-at { font-size: var(--fs-s); color: var(--ok); }

/* ---------- ⑨ 适配度 ---------- */
.chip-fit { font-family: var(--mono); font-weight: 600; font-size: var(--fs-xs); }
.chip-fit.fit-top { background: var(--ok-soft); color: var(--ok); }
.chip-fit.fit-ok { background: var(--warn-soft); color: var(--warn); }
.chip-fit.fit-low { background: var(--chip); color: var(--muted); font-weight: 400; }
.chip-fit.fit-split { outline: 1px dashed var(--accent); outline-offset: 1px; }
/* 2026-10-08 还没打分(手机上没有插件):虚线框淡色,一眼看得出不是分数 */
.chip.chip-pending { background: transparent; box-shadow: inset 0 0 0 1px var(--border-strong); color: var(--muted); }
.row .fit-rank { font-size: var(--fs-xs); color: var(--muted); white-space: nowrap; }
.fitbox { margin: 12px 0 6px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg); }
.fitbox.split { border-color: var(--accent); }
.fitbox .fh { display: flex; align-items: center; gap: 12px; }
/* 分数不许折行(侧栏把抽屉挤窄时「51」被折成「5/1」,审查 MOT-16) */
.fitbox .fscore { flex: none; white-space: nowrap; font: 600 24px/1 var(--mono); padding: 6px 10px; border-radius: 6px; }
.fitbox .fscore.fit-top { background: var(--ok-soft); color: var(--ok); }
.fitbox .fscore.fit-ok { background: var(--warn-soft); color: var(--warn); }
.fitbox .fscore.fit-low { background: var(--surface-2); color: var(--muted); }
.fitbox .fmeta { min-width: 0; }
.fitbox .ft { font-size: var(--fs-m); font-weight: 600; }
.fitbox .fs { font-size: var(--fs-s); color: var(--muted); margin-top: 2px; }
.fitbox .fwhy { margin: 10px 0 0; font-size: var(--fs-m); color: var(--text); }
.fitbox .fparts { list-style: none; margin: 12px 0 0; padding: 0; display: grid; gap: 6px; }
.fitbox .fparts li { display: grid; grid-template-columns: 58px 1fr 46px; gap: 8px; align-items: center; font-size: var(--fs-s); }
.fitbox .fl { color: var(--muted); }
.fitbox .fbar { height: 6px; border-radius: 999px; background: var(--surface-2); overflow: hidden; }
/* 分解条按档着色(以前一律 accent 橙,和「截止/紧急」撞语义,审查 VIS-22) */
.fitbox .ffill { display: block; height: 100%; background: currentColor; opacity: .65; }
.fitbox[data-band="top"] .fbar { color: var(--ok); } .fitbox[data-band="ok"] .fbar { color: var(--warn); } .fitbox[data-band="low"] .fbar { color: var(--faint); }
.fitbox .fn { color: var(--muted); text-align: right; font-family: var(--mono); font-size: var(--fs-xs); }
.fitbox .fw { grid-column: 2 / -1; color: var(--muted); font-size: var(--fs-s); }
.fitbox .fchecks { margin-top: 12px; }
.fitbox .fchecks summary { font-size: var(--fs-s); color: var(--muted); cursor: pointer; }
.fitbox .fchecks ul { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 5px; }
.fitbox .fchecks li { font-size: var(--fs-s); display: grid; gap: 2px; }
.fitbox .fchecks li.no .cq { color: var(--muted); }
.fitbox .fchecks .ce { color: var(--muted); font-size: var(--fs-s); padding-left: 14px; overflow-wrap: anywhere; }
.fitfold { margin: 8px 0; }
.fitfold > summary { font-size: var(--fs-s); color: var(--muted); cursor: pointer; padding: 4px 0; }

/* ---------- ⑩ 时间轴页 ---------- */
#timeline { grid-column: 1 / -1; min-width: 0; display: grid; gap: 22px; }
#timeline[hidden] { display: none; }   /* 作者样式的 display:grid 会盖掉 UA 的 [hidden] */
.mini-btn { font: inherit; font-size: var(--fs-s); padding: 3px 11px; border-radius: 999px; border: 1px solid var(--border); background: var(--surface); color: var(--muted); cursor: pointer; }
.mini-btn:hover { color: var(--text); border-color: var(--muted); }
.cal-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.cal-head h2, .axis-head h2 { font-size: 15px; font-weight: 600; margin: 0 4px; letter-spacing: .04em; font-variant-numeric: tabular-nums; }
.cal-nav { position: relative; font: inherit; font-size: 16px; line-height: 1; width: 30px; height: 30px; border-radius: 50%; border: 1px solid var(--border); background: none; color: var(--muted); cursor: pointer; }
.cal-nav::before { content: ''; position: absolute; inset: -5px; }
.cal-nav:hover { color: var(--text); border-color: var(--muted); }
.legend { margin-left: auto; display: flex; gap: 10px; flex-wrap: wrap; }
.lg { font-size: var(--fs-s); color: var(--muted); display: inline-flex; align-items: center; gap: 4px; }
.lg::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--c); }
.lg-deadline { --c: var(--ev-deadline); } .lg-apply { --c: var(--ev-apply); } .lg-assess { --c: var(--ev-assess); }
.lg-test { --c: var(--ev-test); } .lg-interview { --c: var(--ev-interview); } .lg-result { --c: var(--ev-result); } .lg-no { --c: var(--ev-result-no); }
.cal-week { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); font-size: var(--fs-s); color: var(--muted); text-align: center; letter-spacing: .06em; padding: 0 0 4px; }
.cal-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 3px; }
.cal-day { min-height: 84px; text-align: left; font: inherit; padding: 5px 6px; border: 1px solid var(--border); border-radius: var(--r-sm); background: var(--surface); color: var(--text); cursor: pointer;
  display: flex; flex-direction: column; gap: 2px; min-width: 0; transition: border-color .15s var(--ease-out), background-color .15s var(--ease-out); }
.cal-day:hover { border-color: var(--muted); }
.cal-day.blank { background: none; border-color: transparent; cursor: default; }
.cal-day.past:not(.today) { background: color-mix(in srgb, var(--surface) 55%, transparent); }
.cal-day.today .dn { color: var(--accent); font-weight: 700; }
.cal-day.selected { border-color: var(--accent); box-shadow: inset 0 0 0 1px var(--accent); }
.cal-day:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.cal-day .dn { font-family: var(--mono); font-size: var(--fs-xs); color: var(--muted); }
.ev { font-size: var(--fs-s); line-height: 16px; padding: 0 5px; border-radius: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--ev-ink); background: var(--c); }
.ev-deadline { --c: var(--ev-deadline); } .ev-apply { --c: var(--ev-apply); } .ev-assess { --c: var(--ev-assess); }
.ev-test { --c: var(--ev-test); } .ev-interview { --c: var(--ev-interview); } .ev-result { --c: var(--ev-result); } .ev-result.no { --c: var(--ev-result-no); }
/* 投递记录是「已经发生的事」,描边淡出,把实心留给要赴的约(审查 IXD-21) */
.ev.ev-apply { background: transparent; color: var(--muted); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ev-apply) 60%, transparent); }
/* 已完成:以前半透明 + 删除线,深色 2.59:1、浅色 2.27:1 几乎看不清(审查 VIS-6) */
.ev.done { background: transparent; color: var(--muted); box-shadow: inset 0 0 0 1px var(--c); }
.ev-more { font-size: var(--fs-xs); color: var(--muted); font-family: var(--mono); }
.daylist { margin-top: 10px; border-top: 1px solid var(--border); }
.daylist .dl-h { font-size: var(--fs-s); color: var(--muted); padding: 8px 2px 4px; letter-spacing: .04em; }
.dl-item { display: grid; grid-template-columns: 52px 10px minmax(0, 1fr) auto; gap: 10px; align-items: center; width: 100%; text-align: left; font: inherit; font-size: var(--fs-m);
  padding: 7px 4px; border: 0; border-bottom: 1px solid var(--border); background: none; color: var(--text); cursor: pointer; transition: background-color .12s var(--ease-out); }
.dl-item:hover { background: var(--hover); }
.dl-item .dl-t { font-family: var(--mono); font-size: var(--fs-xs); color: var(--muted); }
.dl-item .dl-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--c); }
.dl-item .dl-main { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dl-item .dl-main b { font-weight: 600; margin-right: 6px; }
.dl-item .dl-type { font-size: var(--fs-s); color: var(--muted); }
.daylist .dl-empty { font-size: var(--fs-m); color: var(--muted); padding: 10px 2px; }
.axis-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.axis-head .hint { margin: 0 0 0 auto; font-size: var(--fs-s); color: var(--muted); }
.axis-view { position: relative; height: 250px; overflow: hidden; border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface); cursor: grab; user-select: none; touch-action: pan-y; }
.axis-view.dragging { cursor: grabbing; }
.axis-view:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.axis-track { position: absolute; left: 0; top: 0; height: 100%; will-change: transform; }
/* 轨道在 180px:上方给三层标签留足高度(层距 = 标签高 + 间隙,以前层距 36 < 标签高 44,相邻标签互相压,审查 BUG-6 / VIS-4) */
.axis-track .ax-rail { position: absolute; left: 0; right: 0; top: 180px; height: 2px; background: var(--border); }
.axis-track .ax-ticks { position: absolute; left: 0; right: 0; top: 176px; height: 10px; background: repeating-linear-gradient(to right, var(--border) 0 1px, transparent 1px var(--pxday)); opacity: .55; }
.ax-month { position: absolute; top: 8px; font-size: var(--fs-s); color: var(--muted); letter-spacing: .04em; padding-left: 6px; border-left: 1px solid var(--border); height: 236px; pointer-events: none; }
.ax-today { position: absolute; top: 0; bottom: 0; width: 2px; background: var(--accent); opacity: .8; pointer-events: none; }
/* 「今天」挪到轨道下方(以前在上方被当天的事件条完全挡住) */
.ax-today::after { content: '今天'; position: absolute; bottom: 10px; left: 6px; font-size: var(--fs-s); color: var(--accent); white-space: nowrap; background: var(--surface); padding: 0 4px; border-radius: 4px; }
.ax-node { position: absolute; top: 180px; transform: translate(-50%, -50%); display: flex; flex-direction: column; align-items: center; cursor: pointer; }
.ax-node .ax-lbl { position: absolute; bottom: 16px; display: flex; flex-direction: row; gap: 3px; align-items: center; white-space: nowrap; }
.ax-node.lane-1 .ax-lbl { bottom: 52px; } .ax-node.lane-2 .ax-lbl { bottom: 88px; } .ax-node.lane-3 .ax-lbl { bottom: 124px; }
.ax-node .ax-lbl::after { content: ''; position: absolute; top: 100%; left: 50%; width: 1px; background: var(--border); }
.ax-node.lane-0 .ax-lbl::after { height: 9px; } .ax-node.lane-1 .ax-lbl::after { height: 45px; } .ax-node.lane-2 .ax-lbl::after { height: 81px; } .ax-node.lane-3 .ax-lbl::after { height: 117px; }
.ax-node.lane-none .ax-lbl { display: none; }
.ax-node .ax-lbl .ev { max-width: 132px; }
.ax-node .ax-dot { width: 14px; height: 14px; border-radius: 50%; background: var(--surface); border: 2px solid var(--muted); box-sizing: border-box; transition: transform .18s cubic-bezier(.23, 1, .32, 1), border-color .18s var(--ease-out), background-color .18s var(--ease-out); }
/* 计数放在圆点正下方,不再压着圆圈(以前 top:9px 与 14px 圆点重叠 5px) */
.ax-node .ax-n { position: absolute; top: 20px; font-family: var(--mono); font-size: var(--fs-xs); color: var(--muted); }
.ax-node:hover .ax-dot, .ax-node:focus-visible .ax-dot { transform: scale(1.35); border-color: var(--accent); }
.ax-node.selected .ax-dot { border-color: var(--accent); background: var(--accent); }
.ax-node.selected .ax-n { color: var(--accent); font-weight: 600; }
.ax-node.future .ax-dot { border-color: var(--text); }
.ax-node:focus-visible { outline: none; }
.ax-node:hover, .ax-node:focus-visible { z-index: 6; }   /* 鼠标点过的节点不再钉住卡片(:focus-within 会,复核 RB-2) */
.ax-card { position: absolute; top: auto; bottom: calc(100% + 12px); left: 50%; transform: translate(-50%, -4px); min-width: 210px; max-width: 280px; padding: 8px 10px; border-radius: 8px; border: 1px solid var(--border); background: var(--raise); box-shadow: var(--shadow-pop);
  opacity: 0; pointer-events: none; transition: opacity .16s var(--ease-out), transform .16s var(--ease-out); z-index: 5; text-align: left; }
/* 选中的卡片不再常驻(它挡住左右 15 个标签,当天列表里已经有同样的内容,审查 MOT-12) */
.ax-node:hover .ax-card, .ax-node:focus-visible .ax-card { opacity: 1; transform: translate(-50%, 0); pointer-events: auto; }
.ax-card .ax-ci { cursor: pointer; border-radius: 3px; padding: 2px 3px; font-size: var(--fs-s); display: flex; gap: 6px; align-items: baseline; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ax-card .ax-ci:hover, .ax-card .ax-ci:focus-visible { background: var(--hover); outline: none; }
.ax-card .ax-cd { font-family: var(--mono); font-size: var(--fs-xs); color: var(--muted); margin-bottom: 4px; }
.ax-card .ax-ci .dl-dot { flex: none; width: 7px; height: 7px; border-radius: 50%; background: var(--c); }
.axis-scrub { position: relative; height: 14px; margin-top: 8px; border-radius: 999px; background: var(--chip); cursor: pointer; touch-action: none; }
.axis-win { position: absolute; top: 3px; height: 8px; border-radius: 999px; background: var(--muted); opacity: .6; cursor: grab; }

/* ---------- ⑪ 对话框 / 提示条 / 保存提示 ---------- */
#quotaDlg, #whenDlg, #authDlg { margin: auto; border: 1px solid var(--border); border-radius: var(--r-lg); padding: 22px 24px; max-width: 420px; width: calc(100vw - 40px); background: var(--surface); color: var(--text);   /* margin:auto 必须写:全局 *{margin:0} 会把 UA 的居中冲掉 */
  box-shadow: 0 24px 60px -24px rgba(0, 0, 0, .45); }
#quotaDlg::backdrop, #whenDlg::backdrop, #authDlg::backdrop, #stageDlg::backdrop { background: rgba(0, 0, 0, .32); backdrop-filter: blur(2px); }
#stageDlg { margin: auto; border: 1px solid var(--border); border-radius: var(--r-lg); padding: 22px 24px; max-width: 420px; width: calc(100vw - 40px); background: var(--surface); color: var(--text);
  box-shadow: 0 24px 60px -24px rgba(0, 0, 0, .45); }
#stageDlg h3 { font-size: var(--fs-l); font-weight: 600; margin: 0 0 12px; }
#stageDlg .stages { padding: 0 0 8px; }
#stageDlg .q-actions { display: flex; flex-direction: column; }
#stageDlg .q-cancel { font: inherit; font-size: 12.5px; color: var(--muted); background: none; border: 0; cursor: pointer; padding: 6px; }
#quotaDlg h3, #whenDlg h3, #authDlg h3 { font-size: var(--fs-l); font-weight: 600; margin: 0 0 8px; }
#quotaDlg .hint, #whenDlg .hint, #authDlg .hint { margin: 0 0 16px; }
#quotaDlg .q-actions, #whenDlg .q-actions, #authDlg .q-actions { display: flex; flex-direction: column; gap: 8px; }
#quotaDlg .q-actions .btn, #whenDlg .q-actions .btn, #authDlg .q-actions .btn { width: 100%; text-align: center; }
#quotaDlg .q-cancel, #whenDlg .q-cancel { font: inherit; font-size: 12.5px; color: var(--muted); background: none; border: 0; cursor: pointer; padding: 6px; }
#quotaDlg .q-cancel:hover, #whenDlg .q-cancel:hover { color: var(--text); }
/* 破坏性的「没有了 · 其余归已结束」不再是橙色主按钮(审查 IXD-4) */
#quotaDlg .q-no:hover { border-color: var(--danger); color: var(--danger); }
#whenDlg .w-field { display: flex; align-items: center; gap: 10px; margin: 0 0 14px; font-size: var(--fs-m); color: var(--muted); }
#whenDlg .w-field input, #whenDlg .w-field select { flex: 1; font: inherit; font-size: 16px; padding: 6px 8px; border: 1px solid var(--border); border-radius: var(--r-sm); background: var(--bg); color: var(--text); min-width: 0; }
#whenDlg .w-ok:disabled { opacity: .45; cursor: not-allowed; }
/* v1.11 「从现在算」快捷键 + 同一场的岗位勾选 */
#whenDlg .w-quick { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: -4px 0 14px; font-size: var(--fs-s); color: var(--muted); }
#whenDlg .w-quick span { margin-right: 2px; }
#whenDlg .w-quick button { font: inherit; font-size: var(--fs-s); min-height: 28px; padding: 3px 10px; border: 1px solid var(--border); border-radius: 999px; background: transparent; color: var(--text); cursor: pointer;
  transition: border-color .12s var(--ease-out), background-color .12s var(--ease-out), color .12s var(--ease-out); }
#whenDlg .w-quick button:hover { border-color: var(--border-strong); }
#whenDlg .w-quick button[aria-pressed="true"] { border-color: var(--accent); color: var(--accent); background: var(--accent-soft); }
#whenDlg .w-mates { border: 1px solid var(--border); border-radius: var(--r-sm); padding: 8px 10px 6px; margin: 0 0 14px; max-height: 210px; overflow: auto; }
#whenDlg .w-mates legend { font-size: var(--fs-s); color: var(--muted); padding: 0 4px; }
#whenDlg .w-mate { display: flex; align-items: center; gap: 8px; min-height: 30px; font-size: var(--fs-m); cursor: pointer; }
#whenDlg .w-mate input { width: 16px; height: 16px; margin: 0; accent-color: var(--accent); flex: none; }
#whenDlg .w-mate-p { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#whenDlg .w-mate-st { flex: none; font-size: var(--fs-xs); color: var(--muted); }
#authDlg #authHint { margin: 12px 0 0; min-height: 1em; }
/* 保存提示:淡入淡出(审查 MOT-14);选中行时固定在视口右上角,空态回顶栏 */
#save { font-size: var(--fs-s); color: var(--muted); letter-spacing: .02em; opacity: 0; transition: opacity .15s var(--ease-out); }
#save.show { opacity: 1; }
#save.warn { color: var(--accent); }
#save:empty { border: 0; padding: 0; background: none; }   /* 不 display:none:保住 aria-live 区域 */
#saveSlot #save { position: fixed; top: 10px; right: 14px; z-index: 21; max-width: calc(100vw - 120px);
  white-space: normal; text-align: right; background: var(--raise); border: 1px solid var(--border); border-radius: 999px; padding: 4px 11px; box-shadow: var(--shadow-pop); }
#saveSlot #save:empty { border: 0; padding: 0; background: none; box-shadow: none; }
/* 可撤销的提示条(删除 / 一键投递 / 行被移走) */
#toast { position: fixed; left: 50%; bottom: calc(18px + env(safe-area-inset-bottom, 0px)); z-index: 40; max-width: min(560px, calc(100vw - 32px));
  display: flex; align-items: center; gap: 10px; padding: 8px 8px 8px 14px; border-radius: 999px; font-size: var(--fs-m);
  background: var(--text); color: var(--bg); box-shadow: var(--shadow-pop);
  opacity: 0; transform: translate(-50%, 8px); pointer-events: none;
  transition: opacity .16s var(--ease-out), transform .16s var(--ease-out); }
#toast.show { opacity: 1; transform: translate(-50%, 0); pointer-events: auto; }
#toast .tmsg { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#toast .tact { font: inherit; font-size: var(--fs-m); font-weight: 600; color: #fb923c;   /* 提示条是反色底:浅色主题 #1a1a18 上 7.7:1(原 accent 3.4:1,复核 RB-4) */ background: none; border: 0; border-radius: 999px; padding: 4px 10px; cursor: pointer; flex: none; }
@media (prefers-color-scheme: dark) { #toast .tact { color: #9a3412; } }   /* 深色主题提示条底 #e8e6e1 上 5.9:1 */
#toast .tact:hover { background: color-mix(in srgb, var(--bg) 14%, transparent); }
#toast .tclose { font: inherit; font-size: 16px; line-height: 1; color: inherit; opacity: .6; background: none; border: 0; border-radius: 50%; width: 28px; height: 28px; cursor: pointer; flex: none; }
#toast .tclose:hover { opacity: 1; }

/* ---------- ⑫ 过渡 ---------- */
/* 对话框开合(以前瞬间盖满屏、瞬间消失,审查 MOT-13) */
#quotaDlg, #whenDlg, #authDlg { transition: opacity .16s var(--ease-out), transform .16s var(--ease-out), overlay .16s allow-discrete, display .16s allow-discrete; }
#quotaDlg:not([open]), #whenDlg:not([open]), #authDlg:not([open]) { opacity: 0; transform: translateY(4px); transition-duration: .12s; }
@starting-style { #quotaDlg[open], #whenDlg[open], #authDlg[open] { opacity: 0; transform: translateY(6px) scale(.98); } }
#quotaDlg::backdrop, #whenDlg::backdrop, #authDlg::backdrop { transition: opacity .16s var(--ease-out), overlay .16s allow-discrete, display .16s allow-discrete; }
@starting-style { #quotaDlg[open]::backdrop, #whenDlg[open]::backdrop, #authDlg[open]::backdrop { opacity: 0; } }
/* 切视图 / 折叠 / 筛选 / 翻月:140ms 淡变(View Transitions,只包在这几个用户发起的低频动作上,审查 MOT-15) */
::view-transition-group(root), ::view-transition-old(root), ::view-transition-new(root) { animation-duration: 140ms; animation-timing-function: var(--ease-out); }
/* 行被选中/保存回写时轻闪一下定位(只在它离开了视口又被带回来时用) */
.row.flash { animation: qzFlash .6s var(--ease-out); }
@keyframes qzFlash { from { background-color: var(--accent-soft); } to { background-color: transparent; } }
@media (prefers-reduced-motion: reduce) {
  /* 以前漏掉了 body.qz-wide 的横移(审查 MOT-4) */
  .wrap, body.qz-wide, body.qz-wide.nav-pinned, .app, #nav, #drawer, #drawer.open, .ax-node .ax-dot, .ax-card, .cal-day, #toast, #save,
  #quotaDlg, #whenDlg, #authDlg, #quotaDlg::backdrop, #whenDlg::backdrop, #authDlg::backdrop { transition: none !important; }
  #drawerBody.swap, .row.flash { animation: none; }
  ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; }
}

/* ---------- ⑬ 窄屏 ---------- */
/* 触屏宽屏(iPad 横屏、触屏笔记本):以前两头不靠——侧栏样式只给「鼠标 + ≥960」,分段条只给「≤959」,
   工作栏掉进列表网格的第一列,把列表挤到 340px、详情掉到下一行、页面横向溢出(复核实拍发现,v1.10 之前就有)。
   这里没有悬停,浮层侧栏的磁吸也用不了:工作栏横跨整行做分段条,列表与详情照旧两列 */
@media (min-width: 960px) and (pointer: coarse) {
  .app > #nav { grid-column: 1 / -1; position: sticky; top: env(safe-area-inset-top, 0px); z-index: 12; flex-direction: row; gap: 6px;
    padding: 6px 0; margin: 0; background: var(--bg); overflow-x: auto; scrollbar-width: none; }
  .app > #nav button { flex: 0 0 auto; gap: 10px; white-space: nowrap; padding: 8px 14px; border: 1px solid var(--border); min-height: 44px; }
  .app > #nav button.nav-all { margin: 0; }
  .app > #nav .navpin { display: none; }
  #search, #memoIn { width: 300px; }   /* 字号升到 16px 后,220px 装不下占位提示 */
}
/* 触屏(手机、iPad 横竖屏)上 16px 以下的输入框一聚焦 iOS 就放大整页。以前只在 ≤959px 生效,iPad 横屏照样放大(复核 RB-7) */
@media (max-width: 959px), (pointer: coarse) {
  #search, #memoIn, #drawer input, #drawer textarea, #drawer select, #whenInput,
  #drawer .meta input, #drawer .meta select, #drawer .sec textarea, #drawer .co input, #drawer h2 input { font-size: 16px; }   /* 后一行对齐 `font: inherit` 那条规则的特异度 */
}
@media (max-width: 959px) {
  .app, .app.nav-hidden { grid-template-columns: minmax(0, 1fr); }
  /* 窄屏:工作栏变成列表上方的等分分段条,贴顶(以前在五个输入框下面、还要横滑才看得到时间轴,审查 IXD-17) */
  #nav { position: sticky; top: env(safe-area-inset-top, 0px); z-index: 12; flex-direction: row; gap: 4px; padding: 6px 0; margin: 0 0 4px;
    background: var(--bg); overflow-x: auto; scrollbar-width: none; transform: none !important; }
  #nav button { flex: 1 0 auto; justify-content: center; flex-direction: column; align-items: center; gap: 1px; white-space: nowrap; padding: 6px 8px; border: 1px solid var(--border); border-radius: var(--radius); font-size: var(--fs-s); min-height: 44px; }
  #nav button.nav-all { margin: 0; }
  #nav button .cnt { font-size: 10px; }
  #nav .navpin { display: none; }
  .row, .grp { grid-template-columns: 14px minmax(0, 1fr) auto 84px; gap: 0 8px; }
  .row .loc { display: none; }
  .grp .main { grid-column: 2 / 4; }
  .row .fitc { align-items: flex-end; }
  #drawer { position: fixed; inset: 0; z-index: 20; border-radius: 0; border: 0;
    max-height: none; padding: 14px 18px 48px;
    transform: translateX(100%); opacity: 0; pointer-events: none;
    /* visibility 延到位移动画结束再切:只靠 opacity:0 的话,收起的抽屉仍在 Tab 序里 */
    visibility: hidden;
    transition: transform .12s var(--ease-out), opacity .12s var(--ease-out), visibility 0s .12s; }
  #drawer.open { transform: none; opacity: 1; pointer-events: auto; visibility: visible;
    transition: transform .16s var(--ease), opacity .16s var(--ease), visibility 0s 0s; }
  #drawer.empty { display: none; }
  .only-sm { display: inline-block; margin-bottom: 8px; }
  /* 窄屏抽屉盖住整屏,保存反馈必须浮在它上面 */
  #save { position: fixed; top: 8px; right: 14px; z-index: 21;
    max-width: calc(100vw - 120px); white-space: normal; text-align: right; background: var(--raise);
    border: 1px solid var(--border); border-radius: 999px; padding: 4px 10px; }
  .cal-day { min-height: 44px; padding: 3px 4px; }
  .cal-day .ev, .cal-day .ev-more { display: none; }
  .cal-day .dots { display: flex; gap: 2px; flex-wrap: wrap; align-items: center; }
  .cal-day .dots i { width: 6px; height: 6px; border-radius: 50%; background: var(--c); display: block; }
  .cal-day .dots .dmore { font-size: 9px; color: var(--muted); font-family: var(--mono); }
  .axis-view { height: 230px; }
  .axis-head .hint { display: none; }
  .bar-top { flex-wrap: wrap; gap: 8px; }
  .bar-top .grow { display: none; }
  #search { flex: 1 1 0; width: auto; min-width: 0; }
  #memoIn { order: 5; flex: 1 1 100%; width: 100%; }
  #btnAdd { padding: 6px 12px; }
  #toolSlot { order: 6; }
  #bar { gap: 8px; margin-bottom: 8px; }
  .bar-sub { flex-direction: column; align-items: stretch; gap: 6px; }
  #stat, #filters { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; }
  #stat > *, #filters > * { flex: none; }
  #filters .sep { display: none; }
  #toast { left: 16px; right: 16px; max-width: none; transform: translateY(8px); border-radius: 14px; }
  #toast.show { transform: none; }
}
@media (min-width: 960px) { .cal-day .dots { display: none; } }
@media (max-width: 640px) {
  body { padding-top: 12px; padding-left: 14px; padding-right: 14px; }
  .row { align-items: start; }
  .row .dot { margin-top: 7px; }
  .row .line { display: block; }
  .row .c { display: block; max-width: 100%; }
  .row .p { display: block; white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
  .row.sub { padding-left: 22px; }
  /* 公司名独占一行,「N 个岗位 · 投递」换到下一行(审查 VIS-14 / IXD-17) */
  .grp .line { flex-wrap: wrap; row-gap: 4px; }
  .grp .gc { flex: 1 1 100%; white-space: normal; }
  .grp .gact button { line-height: 28px; }
  .fitbox .fparts li { grid-template-columns: 52px 1fr 40px; }
}
@media (pointer: coarse) {
  #filters button, .mini-btn, .stages button, #stat .st-f { min-height: 36px; }
  .cal-nav { width: 40px; height: 40px; }
}

/* ---------- 无障碍补充(审查 A11Y-2/14/18) ---------- */
.skip { position: absolute; left: 12px; top: -40px; z-index: 50; padding: 6px 12px; border-radius: var(--r-sm); background: var(--text); color: var(--bg); font-size: var(--fs-m); text-decoration: none; }
.skip:focus { top: 10px; }
#list { scroll-margin-top: 16px; }
@media (max-width: 959px) {
  .ax-card { display: none; }   /* 手机上卡片会被视口顶端裁掉;当天完整列表在月历下方 */
}
@media (pointer: coarse) {
  .axis-head .hint { display: none; }
}
@media (prefers-contrast: more) {
  :root { --muted: #4f4c47; --faint: #6b6862; --border: #a8a49d; --border-strong: #8a867e; }
  .row.dead .p, .row.shelved .p, .row.expired .p { color: var(--text); }
}
@media (prefers-contrast: more) and (prefers-color-scheme: dark) {
  :root { --muted: #cfccc5; --faint: #b3afa7; --border: #6b6760; --border-strong: #8a867e; }
}
@media (forced-colors: active) {
  .row[aria-selected="true"] { outline: 2px solid Highlight; outline-offset: -2px; }
  #filters button[aria-pressed="true"], .stages button[aria-pressed="true"], #nav button[aria-pressed="true"], #stat .st-f { outline: 2px solid Highlight; }
  .ev, .dots i, .dl-dot, .lg::before, .row .dot { forced-color-adjust: none; }
}

/* ---------- 打印:只打当前抽屉里这一份 JD(以前按窄屏全屏布局打出 8 页重复的抽屉头,审查 GAP-12) ---------- */
@media print {
  :root { color-scheme: light; --bg: #fff; --surface: #fff; --surface-2: #f2f2f2; --text: #111; --muted: #444; --faint: #666; --border: #ccc; }
  body, body.qz-wide { padding: 0 !important; background: #fff; }
  #nav, #bar, .foot, #list, #timeline, .stages, .tail, #drawerClose, #drawerBar, #stageDlg, .today-card, #toast, #save, .skip, .secs-empty, .meta-add, .fitfold, .back-tl, .dupe, .sec .ed, .tl-back, .tl-nodate, .tl-done, .tl-undone, .tl-ics { display: none !important; }
  .app { display: block; }
  #drawer, #drawer.open { position: static !important; transform: none !important; opacity: 1 !important; visibility: visible !important; max-height: none; overflow: visible; border: 0; padding: 0; }
  #drawer.empty { display: none !important; }
  .sec { break-inside: avoid; }
}

/* ---------- ⑭ 手机端(2026-10-08 手机 UI/UX 审计) ----------
   判据(每条都有截图与量数):主操作放屏幕下半部、拇指够得着;可点目标 ≥44px、相邻 ≥8px;中文 ≥12px;
   触屏上不靠悬停、点过不留悬停色;iOS 刘海与 Home 条留安全区。
   布局类只在手机宽度(≤640)生效,触控尺寸在触屏(pointer:coarse,含 iPad)生效;桌面鼠标端不变。 */
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
.login-back, .hint-touch, .ax-d, .today-card, #drawerBar { display: none; }

/* 触屏通用:去掉默认点按灰块、禁双击缩放延迟;按下有反馈(iOS 要页面上有 touchstart 监听 :active 才生效,qz.js 里加了) */
@media (pointer: coarse) {
  :where(button, a, summary, label, input, select, textarea, [role="button"], .row, .grp) { -webkit-tap-highlight-color: transparent; touch-action: manipulation; }
  .grp { min-height: 44px; }
  .row:active, .grp:active, .dl-item:active, .cal-day:active, #nav button:active, .mini-btn:active, .cal-nav:active,
  #filters button:active, #stat .st-f:active, .today-card > summary:active { background: var(--hover); }
  /* 顶栏 */
  #search, #memoIn { min-height: 44px; }
  #stat, #filters { gap: 8px; padding-block: 2px; }
  #filters button, #stat .st-f { min-height: 40px; position: relative; }
  #filters button::after, #stat .st-f::after { content: ''; position: absolute; inset: -2px 0; }
  #bar .statlink { position: relative; display: inline-flex; align-items: center; min-height: 36px; padding: 0 10px; border-radius: 999px; background: var(--accent-soft); text-decoration: none; }
  #bar .statlink::before { content: ''; position: absolute; inset: -4px 0; }
  /* 列表行内的小动作:外观 30px 高,命中区 44px */
  .row .done, .row .undone, .row .restore, .row .moved-to { line-height: 30px; padding: 0 12px; }
  .row .done::before, .row .undone::before, .row .restore::before, .row .moved-to::before { inset: -7px -4px; }
  .grp .gact { gap: 10px; }
  .grp .gact button { line-height: 30px; padding: 0 12px; }
  .grp .gact button::before { inset: -7px -4px; }
  /* 页脚:锁定误点要重新验指纹,和备份拉开 */
  .foot { gap: 4px 8px; }
  .foot a, .foot button { min-height: 44px; display: inline-flex; align-items: center; padding: 0 10px; font-size: 14px; }
  #btnLock { margin-left: 16px; border: 1px solid var(--border); border-radius: 999px; }
  /* 抽屉 */
  .stages { gap: 12px 14px; }
  .stg-grp { gap: 8px; }
  .stages button { min-height: 40px; padding: 0 14px; font-size: 14px; }
  .stages button::before { content: ''; position: absolute; inset: -2px 0; }
  .tl-ev { gap: 8px 10px; }
  .tl-back, .tl-nodate, .tl-undone, .tl-ics, .tl-done { position: relative; min-height: 36px; line-height: 34px; padding: 0 12px; font-size: 13px; }
  .tl-back::before, .tl-nodate::before, .tl-undone::before, .tl-ics::before, .tl-done::before { content: ''; position: absolute; inset: -4px 0; }
  .tl-ev .tl-back { margin-left: auto; }   /* 有破坏性的「退回上一步」推到行尾,和「标记完成」拉开 */
  #drawer .plain { min-height: 44px; padding: 10px 0; }
  #drawer .meta-add, .secs-empty { gap: 10px; }
  #drawer .ghost-f .plain, .secs-empty .sec.empty:not(.editing) .sh { position: relative; min-height: 40px; display: inline-flex; align-items: center; padding: 0 12px; font-size: 13px; }
  #drawer .ghost-f .plain::before, .secs-empty .sec.empty:not(.editing) .sh::before { content: ''; position: absolute; inset: -2px 0; }   /* 外观 40、命中 44,行距 10 不相交 */
  #drawer .links a { display: inline-flex; align-items: center; min-height: 44px; padding: 0 14px 0 0; }
  #drawer .date-clear { min-height: 36px; }
  #btnDel { min-height: 44px; padding: 0 16px; }
  .sec .ed { position: relative; min-height: 32px; padding: 0 10px; margin: -6px 0; font-size: 14px; }
  .sec .ed::before { content: ''; position: absolute; inset: -6px -2px; }
  .fitfold > summary { min-height: 44px; display: flex; align-items: center; }
  /* 时间轴页 */
  .mini-btn { min-height: 44px; padding: 0 14px; }
  .cal-nav { width: 44px; height: 44px; }
  .cal-grid, .cal-day { touch-action: pan-y; }   /* 左右滑动翻月由 qz.js 处理,竖向照常滚页面 */
  .cal-day .dots i { width: 8px; height: 8px; }
  .ax-node::before { content: ''; position: absolute; inset: -14px -15px -24px; }   /* 圆点 14px → 命中区 44×52,主要往下扩(下面只有日期) */
  .ax-node .ax-dot { width: 18px; height: 18px; }
  .axis-scrub { height: 24px; margin-top: 10px; touch-action: pan-y; }   /* 以前 none:手指落在缩略条上整页竖着滚不动(审计 M48);横拖仍归它 */
  .axis-win { top: 4px; height: 16px; }
  .axis-head .hint-touch { display: inline; margin: 0 0 0 auto; font-size: 12px; color: var(--muted); }
  #btnLogin:disabled, #btnRegister:disabled, #btnReauth:disabled { opacity: .6; }
  /* 对话框 */
  #quotaDlg .q-cancel, #whenDlg .q-cancel, #stageDlg .q-cancel { min-height: 44px; font-size: 15px; width: 100%; }
  #quotaDlg .q-actions { gap: 12px; }
  #whenDlg .w-field input, #whenDlg .w-field select { min-height: 44px; }
  #whenDlg .w-quick { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin: 0 0 16px; }
  #whenDlg .w-quick span { grid-column: 1 / -1; font-size: 14px; }
  #whenDlg .w-quick button { min-height: 44px; font-size: 15px; padding: 0 4px; border-radius: 12px; }
  #whenDlg .w-mates { max-height: none; overflow: visible; }   /* 不再框里套一个滚动区:整个底部弹层一起滚 */
  #whenDlg .w-mate { min-height: 44px; font-size: 15px; }
  #whenDlg .w-mate + .w-mate { border-top: 1px solid var(--border); }
  #whenDlg .w-mate input { width: 22px; height: 22px; }
  #whenDlg .w-mate-st { font-size: 12px; }
  /* 「放弃这 N 条,刷新页面」不可恢复:降成红字链接、和「刷脸继续」拉开 20px,点一次只是「上膛」(qz.js 两步确认) */
  #authDlg #btnAuthDrop { margin-top: 20px; background: none; border-color: transparent; color: var(--danger); font-size: 15px; min-height: 44px; }
  /* 提示条 */
  #toast .tact { min-height: 44px; padding: 0 14px; font-size: 15px; }
  #toast .tclose { width: 44px; height: 44px; font-size: 20px; }
}

/* 触屏没有悬停:点过之后 :hover 会一直粘着。会误导的几处(红色「拒了」、填满的「投递」、放大描橙的时间轴节点……)改回原样 */
@media (hover: none) {
  .btn:not(.btn-primary):hover { border-color: var(--border); }
  .btn-primary:hover { filter: none; }
  .stages button:hover:not([aria-pressed="true"]):not(.past) { color: var(--muted); border-color: var(--border); }
  .stages button.past:hover:not([aria-pressed="true"]) { color: var(--text); border-color: var(--border-strong); }
  #btnDel:hover { color: var(--muted); border-color: var(--border); }
  .grp .gact button:not(.gapply):not(.gconfirm):hover { color: var(--muted); border-color: var(--border-strong); }
  .grp .gact .gapply:hover { background: var(--surface); color: var(--accent); border-color: color-mix(in srgb, var(--accent) 50%, var(--border)); }
  .grp .gact .gconfirm:hover:not(:disabled) { background: var(--surface); color: var(--accent); }
  #quotaDlg .q-no:hover { border-color: var(--border); color: inherit; }
  .row .done:hover { color: var(--muted); border-color: var(--border-strong); background: var(--surface); }
  .tl-done:hover { color: var(--muted); border-color: var(--border-strong); background: none; }
  .tl-back:hover, .tl-nodate:hover, .tl-undone:hover, .tl-ics:hover { color: var(--muted); border-color: var(--border); }
  .ax-node:hover:not(:focus-visible) .ax-dot { transform: none; border-color: var(--muted); }
  .ax-node.future:hover:not(:focus-visible) .ax-dot { border-color: var(--text); }
  .ax-node.selected:hover .ax-dot { border-color: var(--accent); }
  .cal-day:hover:not(.selected) { border-color: var(--border); }
  .cal-day.blank:hover { border-color: transparent; }
  #nav button:hover:not([aria-pressed="true"]) { color: var(--muted); background: none; }
  .row:hover:not([aria-selected="true"]):not(.moved) { background: transparent; }
  .grp:hover { background: color-mix(in srgb, var(--surface-2) 45%, transparent); }
  .dl-item:hover { background: none; }
  #filters button:hover:not([aria-pressed="true"]) { color: var(--muted); background: transparent; }
  .plain:hover { text-decoration-color: transparent; }
  /* 「编辑」以前只在悬停时出现,触屏上看不见:常显 */
  .sec .ed { opacity: 1; color: var(--accent); }
}

/* 窄屏(≤959):抽屉底部常驻拇指栏、背景锁滚动、时间轴日期标签 */
@media (max-width: 959px) {
  html:has(#drawer.open:not(.empty)), html:has(dialog[open]) { overflow: hidden; }
  #drawer:not(.empty):not([hidden]) { display: flex; flex-direction: column; padding-bottom: 0; }
  #drawer:not(.empty) > #drawerBody { flex: 1 0 auto; }
  /* 「← 返回列表」以前在左上角 69×34、一滚就没;现在是贴底的一条:返回 + 上一条 / 下一条 */
  #drawerBar { display: flex; position: sticky; bottom: 0; z-index: 3; gap: 8px; align-items: center;
    margin: 16px -18px 0; padding: 8px 18px calc(8px + env(safe-area-inset-bottom, 0px));
    background: color-mix(in srgb, var(--surface) 94%, transparent); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
    border-top: 1px solid var(--border); }
  #drawerBar #drawerClose { display: inline-flex; align-items: center; flex: 0 1 auto; min-width: 0; min-height: 44px; margin: 0; padding: 0 4px;
    font-size: 15px; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  #drawerBar .dbn { flex: none; width: 52px; min-height: 44px; font: inherit; font-size: 20px; line-height: 1; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); color: var(--text); cursor: pointer; }
  #drawerBar .dbn:disabled { opacity: .35; cursor: default; }
  #drawerBar #drawerPrev { margin-left: auto; }   /* 没有主按钮时 ‹ › 靠右(拇指位置) */
  #drawerBar .dbn-step { flex: 1 1 auto; min-height: 44px; padding: 0 14px; font: inherit; font-size: 15px; font-weight: 600; white-space: nowrap;
    border: 1px solid var(--accent); border-radius: 12px; background: var(--accent); color: var(--accent-ink); cursor: pointer; }
  #drawerBar .dbn-step[hidden] { display: none; }
  #drawerBar .dbn-step:active { filter: brightness(.95); }
  #drawer .back-tl { display: none; }   /* 回到时间轴的说法挪进底栏的返回键 */
  #drawer > #drawerBody { padding-bottom: var(--kb, 0px); }
  /* 抽屉开着时提示条抬到底栏上方(641–959 以前压住底栏的主按钮;≤640 本来就在 76px) */
  html:has(#drawer.open:not(.empty)) #toast { bottom: calc(76px + env(safe-area-inset-bottom, 0px) + var(--kb, 0px)); }   /* 键盘弹起时给正文底部留出键盘高度,最下面的输入框能滚到键盘上方 */
  #calTitle { flex: 0 0 7.4em; text-align: center; }   /* 9 月 → 10 月 标题变宽时「›」「今天」不再横跳 */
  #dayList { scroll-margin-top: 12px; }
  .ax-node .ax-n { display: none; }   /* 手机上原来圆点下面的「事件数」会被当成日期读 */
  .ax-node .ax-d { display: block; position: absolute; top: 22px; font: 12px/1 var(--mono); color: var(--muted); white-space: nowrap; background: var(--surface); padding: 1px 3px; border-radius: 3px; }
  .ax-node.selected .ax-d { color: var(--accent); font-weight: 600; }
}

/* 手机(≤640):拇指区布局 */
@media (max-width: 640px) {
  :root { --fs-xs: 12px; --fs-s: 13px; --fs-m: 14px; --fs-b: 15px; }

  /* 登录:「刷脸进入」以前在左上角(x14 y108,104×46),下面 72% 屏是空的 → 整组沉到屏幕底部、通栏大按钮 */
  body:not(.qz-wide) { display: flex; flex-direction: column; padding-bottom: calc(28px + env(safe-area-inset-bottom, 0px)); }
  body:not(.qz-wide) > .wrap { flex: 1 0 auto; width: 100%; display: flex; flex-direction: column; }
  #viewLogin:not([hidden]) { margin-top: auto; display: flex; flex-direction: column; }
  #loginHint { order: 1; margin: 0 0 12px; font-size: 14px; line-height: 1.5; }
  #btnLogin { order: 2; width: 100%; min-height: 56px; font-size: 17px; border-radius: 14px; }
  #setupBox { order: 3; margin-top: 14px; }
  #setupBox summary { padding-block: 13px; font-size: 14px; }
  #setupBox input { max-width: none; min-height: 48px; }
  #setupBox br { display: none; }
  #setupBox .btn { display: flex; width: 100%; min-height: 48px; }
  #regHint { font-size: 14px; }
  .login-back { order: 4; display: inline-flex; align-items: center; align-self: center; min-height: 44px; padding: 0 14px; margin-top: 6px; color: var(--muted); font-size: 13px; text-decoration: none; letter-spacing: .04em; }

  /* 账本:顶部只留输入,视图切换沉到底部 tab 栏,「+ 记一笔」变右下角圆钮 */
  body.qz-wide { padding-top: 8px; padding-bottom: calc(96px + env(safe-area-inset-bottom, 0px));
    padding-left: max(14px, env(safe-area-inset-left, 0px)); padding-right: max(14px, env(safe-area-inset-right, 0px)); }
  .app, .app.nav-hidden { row-gap: 6px; }
  #bar { gap: 6px; margin-bottom: 6px; }
  #navToggle { display: none; }                 /* 收起开关在手机上只会把唯一的视图入口藏掉(还记在本机) */
  .app.nav-hidden #nav { display: flex; }
  #nav { position: fixed; top: auto; left: 0; right: 0; bottom: 0; z-index: 15; margin: 0; gap: 4px;
    padding: 6px max(8px, env(safe-area-inset-right, 0px)) calc(6px + env(safe-area-inset-bottom, 0px)) max(8px, env(safe-area-inset-left, 0px));
    background: color-mix(in srgb, var(--bg) 92%, transparent); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
    border-top: 1px solid var(--border); box-shadow: 0 -8px 18px -14px rgba(0, 0, 0, .45); overflow: visible; }
  #nav button { flex: 1 1 0; min-width: 0; min-height: 52px; padding: 4px 2px; border-color: transparent; font-size: 13px; }
  #nav button[aria-pressed="true"] { background: var(--surface-2); border-color: var(--border); }
  #nav button .cnt { font-size: 12px; }
  #btnAdd { position: fixed; right: max(16px, env(safe-area-inset-right, 0px)); bottom: calc(76px + env(safe-area-inset-bottom, 0px)); z-index: 16;
    width: 56px; height: 56px; padding: 0; border-radius: 50%; font-size: 0; background: var(--accent); border-color: var(--accent); color: var(--accent-ink); box-shadow: var(--shadow-pop); }
  #btnAdd::before { content: '+'; font-size: 30px; line-height: 1; margin-top: -2px; }
  /* 打字时(键盘弹起)底栏和圆钮让开;提示条出来时圆钮让开 */
  html:has(#search:focus, #memoIn:focus) #nav, html:has(#search:focus, #memoIn:focus) #btnAdd { visibility: hidden; }
  html:has(#toast.show) #btnAdd { opacity: 0; pointer-events: none; }
  #search { flex: 1 1 100%; }
  body[data-view="timeline"] #memoIn { display: none; }   /* 时间轴页用不上随手记 */
  /* 两排横滑胶囊:铺满到屏幕边,右侧渐隐提示「还能往右滑」;适配度两个开关挪到最前(以前整个在屏幕外) */
  .bar-sub { flex-wrap: nowrap; }   /* 换行的 flex 容器按最宽的子项定行宽:下面两行的负外边距会把页面撑宽 15px */
  #stat, #filters { margin-inline: -14px; padding-inline: 14px; scroll-padding-inline: 14px;
    -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent); mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent); }
  #stat.at-end, #filters.at-end { -webkit-mask-image: none; mask-image: none; }
  #stat .st-total { order: 99; }
  #filters #sortFit, #filters #onlyFit { order: -2; }
  #filters .sep { display: block; order: -1; flex: none; height: 20px; }
  #filters:has(#sortFit[hidden]) .sep { display: none; }

  /* 列表:岗位名占整行,适配度与截止换到第二行(以前岗位名只剩 145px,截止被截成「27.09.0…」) */
  .row { grid-template-columns: 12px minmax(0, 1fr) auto; grid-template-areas: "dot main main" ". fit when"; column-gap: 8px; padding: 10px 6px; }
  .row.sub { padding-left: 10px; }
  .row > .dot, .row > input.pick { grid-area: dot; }
  .row > .main { grid-area: main; }
  .row > .fitc { grid-area: fit; flex-direction: row; flex-wrap: wrap; align-items: center; gap: 6px; }
  .row > .fitc:not(:empty), .row > .when:not(:empty) { margin-top: 6px; }
  .row > .loc { display: none; }
  .row > .when { grid-area: when; align-self: center; overflow: visible; text-overflow: clip; font-size: 12px; }
  .row .when.due-far::after { content: ' 年份?'; }
  .row input.pick { width: 22px; height: 22px; }
  .row, .grp { scroll-margin-bottom: calc(80px + env(safe-area-inset-bottom, 0px)); }
  /* 只有一个岗位的公司:组头不再写「1 个岗位」、公司名和「投递」并排,一家省一行 */
  .grp { grid-template-columns: 14px minmax(0, 1fr) auto; }
  .grp > .main { grid-column: 2 / 3; }
  .grp > .when { overflow: visible; text-overflow: clip; font-size: 12px; }   /* 以前 84px 一列,截成「截止 27.09.…」 */
  .grp.solo > .when { display: none; }   /* 只有一个岗位:下面那行已经写了截止 */
  .grp.solo .gn { display: none; }
  .grp.solo .gc { flex: 1 1 0; min-width: 0; white-space: nowrap; }
  .grp .chev { font-size: 14px; color: var(--text); }
  /* 勾选投递时组头吸顶:勾完下面的岗位不用滑回去点「确认」 */
  .grp.picking { position: sticky; top: 0; z-index: 6; background: var(--surface-2); box-shadow: 0 6px 12px -10px rgba(0, 0, 0, .45); }

  /* 「今天」卡片:接下来 7 天的截止/预约、过时没标完成的、没填日期的、备忘 —— 以前手机上整块看不到 */
  .today-card:not([hidden]) { display: block; }
  .today-card { margin: 0 0 8px; border: 1px solid var(--border); border-radius: var(--r-lg); background: var(--surface); }
  .today-card > summary { list-style: none; display: flex; align-items: center; gap: 8px; min-height: 48px; padding: 0 14px; font-size: 14px; cursor: pointer; border-radius: var(--r-lg); }
  .today-card > summary::-webkit-details-marker { display: none; }
  .today-card > summary b { font-weight: 600; }
  .today-card > summary .tc-n { color: var(--muted); font-variant-numeric: tabular-nums; }
  .today-card > summary .tc-n.hot { color: var(--accent); }
  .today-card > summary::after { content: '▾'; margin-left: auto; color: var(--muted); transition: transform .16s var(--ease-out); }
  .today-card:not([open]) > summary::after { transform: rotate(-90deg); }
  .today-card .tc-body { padding: 0 10px 10px; }
  .today-card .ag-title, .today-card .kbd { display: none; }
  .today-card .ag-date { color: var(--muted); font-size: 12px; margin: 0 4px 4px; }
  .today-card .ag-sec { margin: 8px 0 0; }
  .today-card .ag-sec h3 { font-size: 13px; color: var(--muted); font-weight: 500; letter-spacing: .04em; margin: 0 4px 2px; }
  .today-card .ag-item { grid-template-columns: 56px 8px minmax(0, 1fr) auto; min-height: 48px; padding: 8px 4px; }
  .today-card .ag-more { display: inline-flex; align-items: center; min-height: 44px; margin: 2px 4px; }
  .today-card .ag-empty { color: var(--muted); font-size: 14px; margin: 6px 4px; }
  .today-card .funnel { margin: 10px 4px 0; padding-top: 8px; border-top: 1px solid var(--border); font-size: 13px; color: var(--muted); }
  .today-card .funnel b { color: var(--text); font-family: var(--mono); font-weight: 600; }

  /* 保存提示:从右上角(压住搜索框和「+ 记一笔」、挡点击)挪到底栏上方左侧,给右下角圆钮让位 */
  #save, #saveSlot #save { top: auto; right: auto; left: 16px; bottom: calc(84px + env(safe-area-inset-bottom, 0px)); max-width: calc(100vw - 104px); text-align: left; }
  html:has(#toast.show) #save, html:has(#toast.show) #saveSlot #save { opacity: 0; }
  html:has(#toast.show) #drawer.open:not(.empty) > #drawerBody { padding-bottom: 96px; }

  /* 抽屉阅读字号 */
  .sec .body { font-size: 16px; line-height: 1.65; }
  #drawer .meta dd { font-size: 15px; }
  .tl-ev, .tl-ev .evbox .plain { font-size: 14px; }
  .fitbox .fwhy { font-size: 14px; }
  #drawer .co { font-size: 14px; letter-spacing: .02em; }

  /* 对话框:居中卡片 → 从底部弹出,主按钮落在拇指区 */
  #quotaDlg, #whenDlg, #authDlg, #stageDlg { margin: auto 0 0; width: 100%; max-width: none; max-height: calc(100dvh - 24px); border-width: 1px 0 0;
    border-radius: 18px 18px 0 0; padding: 20px 18px calc(16px + env(safe-area-inset-bottom, 0px)); overflow: auto; overscroll-behavior: contain; }
  #quotaDlg:not([open]), #whenDlg:not([open]), #authDlg:not([open]) { transform: translateY(24px); }
  @starting-style { #quotaDlg[open], #whenDlg[open], #authDlg[open] { opacity: 0; transform: translateY(40px); } }
  #quotaDlg h3, #whenDlg h3, #authDlg h3 { font-size: 18px; line-height: 1.35; }
  #quotaDlg .hint, #whenDlg .hint, #authDlg .hint { font-size: 14px; line-height: 1.55; }
  #whenDlg .w-field { font-size: 15px; }

  /* 提示条:以前一行截断(「…其余 3 个归已结束」被切掉);现在最多三行,按钮在下排右侧,在底栏上方、键盘弹起时跟着上移 */
  #toast { left: 12px; right: 12px; bottom: calc(76px + env(safe-area-inset-bottom, 0px) + var(--kb, 0px)); flex-wrap: wrap; row-gap: 2px; padding: 10px 50px 6px 14px; border-radius: 16px; }
  #toast .tmsg { flex: 1 1 100%; white-space: normal; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; font-size: 14px; line-height: 1.45; }
  #toast .tact:first-of-type { margin-left: auto; }
  #toast .tclose { position: absolute; top: 3px; right: 3px; }

  /* 时间轴页 */
  .cal-day .dn { font-size: 13px; }
  .cal-day.today .dn { align-self: flex-start; background: var(--accent); color: var(--accent-ink); border-radius: 999px; padding: 0 6px; font-weight: 700; }
  .cal-day .dots .dmore { font-size: 12px; }
  .legend { gap: 6px 10px; }
  .dl-item { min-height: 52px; padding: 10px 4px; font-size: 15px; grid-template-columns: 44px 10px minmax(0, 1fr) auto; }
  .dl-item .dl-t { font-size: 12px; }
  .dl-item .dl-main { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
  .axis-view { -webkit-mask-image: linear-gradient(to right, transparent 0, #000 14px, #000 calc(100% - 14px), transparent);
    mask-image: linear-gradient(to right, transparent 0, #000 14px, #000 calc(100% - 14px), transparent); }
}

/* 2026-10-08 手机横过来(844×390 这类):宽度落进平板那一档,竖向只剩 390px —— 以前顶部工具区占掉 270px,首屏连一条完整的岗位都看不到,
   定时间框比屏幕还高。横屏只做「压扁」:输入框并排、统计与筛选并排、视图栏单行、对话框可滚、避开刘海 */
@media (pointer: coarse) and (max-height: 500px) and (min-width: 641px) {
  body.qz-wide { padding-top: 6px; padding-bottom: calc(24px + env(safe-area-inset-bottom, 0px));
    padding-left: max(14px, env(safe-area-inset-left, 0px)); padding-right: max(14px, env(safe-area-inset-right, 0px)); }
  #bar { gap: 6px; margin-bottom: 4px; }
  .bar-top { flex-wrap: nowrap; }
  .bar-top #search, .bar-top #memoIn { order: 0; flex: 1 1 0; width: auto; min-width: 0; }
  .bar-sub { flex-direction: row; flex-wrap: nowrap; align-items: center; gap: 8px; }
  #stat, #filters { flex: 1 1 0; min-width: 0; }
  #nav { padding: 4px 0; }
  #nav button { min-height: 40px; flex-direction: row; justify-content: center; align-items: center; gap: 6px; padding: 4px 8px; }
  #quotaDlg, #whenDlg, #authDlg, #stageDlg { max-height: calc(100dvh - 16px); overflow: auto; overscroll-behavior: contain; }
  #drawer { padding-top: 8px; padding-left: max(18px, env(safe-area-inset-left, 0px)); padding-right: max(18px, env(safe-area-inset-right, 0px)); }
  #drawerBar { margin-left: calc(-1 * max(18px, env(safe-area-inset-left, 0px))); margin-right: calc(-1 * max(18px, env(safe-area-inset-right, 0px)));
    padding: 4px max(18px, env(safe-area-inset-right, 0px)) calc(4px + env(safe-area-inset-bottom, 0px)) max(18px, env(safe-area-inset-left, 0px)); }
  .axis-view { height: 190px; }
  .cal-day { min-height: 40px; }
}

/* 2026-10-08 在微信 / QQ / 飞书 / 钉钉这类 App 里打开:刷脸登录用不了,登录页给一条「去浏览器打开」的说明 */
.inapp { display: none; }
.inapp:not([hidden]) { display: block; margin: 0 0 14px; padding: 12px 14px; border: 1px solid color-mix(in srgb, var(--accent) 45%, var(--border)); border-radius: var(--r-lg);
  background: var(--accent-soft); font-size: 14px; line-height: 1.6; }
.inapp b { color: var(--accent); }
.inapp .inapp-copy { display: inline-flex; align-items: center; min-height: 40px; margin-top: 8px; padding: 0 14px; font: inherit; font-size: 14px;
  border: 1px solid var(--accent); border-radius: 999px; background: var(--surface); color: var(--accent); cursor: pointer; }
@media (max-width: 640px) { .inapp:not([hidden]) { order: 0; margin: 0 0 12px; } }
#btnLogin[aria-busy="true"] { cursor: progress; }
.browser-open { margin: 0 0 18px; max-width: 100%; padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--r-lg); font-size: 13px; line-height: 1.6; overflow-wrap: anywhere; }
.browser-open summary { min-height: 32px; cursor: pointer; color: var(--muted); }
.browser-open p { margin: 8px 0; }
.browser-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.browser-actions a, .browser-actions button { display: inline-flex; align-items: center; min-height: 44px; box-sizing: border-box; max-width: 100%; padding: 8px 12px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface); color: var(--text); font: inherit; text-decoration: none; white-space: normal; cursor: pointer; }
.browser-actions [hidden] { display: none; }
.browser-actions .browser-copy { border-color: var(--accent); font-weight: 600; }
.browser-actions .browser-preferred { border-color: var(--accent); font-weight: 700; }
.browser-open.is-choice summary { color: var(--text); font-size: 18px; font-weight: 600; cursor: default; list-style: none; }
.browser-open.is-choice summary::-webkit-details-marker { display: none; }
.browser-open.is-choice { padding: 16px; }
.browser-actions :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.head .browser-open { margin-top: 16px; }
.setup-label { display: block; margin: 16px 0 8px; font-size: 13px; color: var(--muted); }

/* 预约起止时间沿用同一套表单与移动端弹层。 */
#whenDlg .w-field[hidden] { display: none; }
#whenDlg .w-field > span { flex: 0 0 6em; }
#whenDlg .w-field select { width: 100%; }
#whenDlg .w-error { color: var(--danger); font-size: var(--fs-s); margin: 0 0 12px; }
#whenDlg .w-error:empty { display: none; }
#whenDlg :is(input, select):focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
@media (max-width: 640px) {
  #whenDlg .w-field { flex-direction: column; align-items: stretch; gap: 6px; }
  #whenDlg .w-field > span { flex: none; }
  #whenDlg .w-field :is(input, select) { min-height: 44px; width: 100%; box-sizing: border-box; }
}

.dl-item .dl-range { grid-column: 3 / -1; font-size: var(--fs-s); color: var(--muted); white-space: normal; overflow-wrap: anywhere; }
#qzMailDialog .qm-field[hidden] { display: none; }
/* 完整跨日起止文字在窄屏换行，避免撑出列表。 */
.chip-next { max-width: 100%; box-sizing: border-box; white-space: normal; overflow-wrap: anywhere; border-radius: var(--r-sm); }
/* Scheduling tools share the ledger's restrained paper layout. */
.plan-dialog { box-sizing:border-box; width:min(720px,calc(100% - 24px)); max-height:85dvh; overflow:auto; padding:24px; border:1px solid #bbb6ac; border-radius:12px; background:var(--surface,#faf9f6); color:var(--text,#1a1a18); }
.plan-dialog::backdrop { background:rgba(20,20,18,.38); }
.plan-dialog h2 { margin:0 0 12px; font-size:22px; }
.plan-form { display:flex; flex-wrap:wrap; gap:12px; align-items:end; margin:16px 0; }
.plan-form label { display:grid; gap:6px; flex:1 1 150px; font-size:14px; }
.plan-form input,.plan-dialog select { box-sizing:border-box; max-width:100%; min-width:0; width:100%; min-height:44px; padding:8px; border:1px solid #bdb8ae; border-radius:5px; background:transparent; color:inherit; font:inherit; }
.plan-form button { min-height:44px; }
.plan-notice { margin:12px 0; padding:12px; border:1px solid var(--border-strong,#c8c2b5); border-radius:6px; font-size:14px; line-height:1.6; overflow-wrap:anywhere; }
.plan-notice:empty { display:none; }
.plan-notice.has-conflict { border-color:var(--danger,#a33b15); background:var(--warn-soft,#fff1e9); color:var(--text,#8b3415); }
.plan-notice p { margin:4px 0; }
.plan-day { list-style:none; margin:0; padding:0; }
.plan-day li,.notification-item { border-bottom:1px solid #d6d1c8; padding:12px 0; overflow-wrap:anywhere; line-height:1.6; }
.plan-day button { text-align:left; color:inherit; background:transparent; border:0; text-decoration:underline; padding:8px 0; min-height:44px; font:inherit; cursor:pointer; }
.plan-day p,.notification-item p { margin:2px 0; }
.plan-day .is-conflict { border-left:3px solid #a33b15; padding-left:10px; }
.plan-day .is-done { opacity:.65; }
.plan-actions { display:flex; flex-wrap:wrap; gap:10px; margin:16px 0; }
.plan-actions button { min-height:44px; }
@media(max-width:640px) { .plan-dialog { padding:18px 14px; } #btnTimeQuery,#btnNotifications { min-height:44px; } .plan-form label { flex-basis:calc(50% - 12px); } .plan-form button { width:100%; } }
.calendar-helper { display:grid; gap:10px; width:100%; padding:14px; border:1px solid var(--border); border-radius:8px; }
.calendar-helper[hidden] { display:none; }
.calendar-duration { display:grid; gap:6px; width:100%; font-size:14px; }
.calendar-duration input { box-sizing:border-box; width:100%; min-height:44px; padding:8px; font:16px/1.4 system-ui; border:1px solid var(--border); background:var(--surface); color:var(--text); border-radius:6px; }
.apple-calendar { display:block; width:100%; box-sizing:border-box; min-height:48px; text-align:center; text-decoration:none; padding:12px; }
.action-success { display:grid; gap:6px; border:1px solid var(--ok); background:var(--ok-soft); padding:14px; border-radius:8px; font-size:14px; }
.action-success strong { color:var(--ok); font-size:18px; }
.action-success span,.action-success small { display:block; }
@media(max-width:640px){#mailActionDlg.plan-dialog { width:calc(100% - 16px); max-height:90dvh; } #mailActionBody .plan-actions { display:grid; grid-template-columns:1fr; } #mailActionBody .plan-actions .btn { min-height:48px; } }

.tl-links { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; }
.tl-links a { font-size: 13px; display: inline-flex; align-items: center; min-height: 44px; border: 1px solid var(--border); border-radius: 6px; padding: 8px 12px; color: var(--accent); overflow-wrap: anywhere; }

/* Desktop and mobile login retain the same explicit home exit. */
.login-back{display:inline-flex;align-items:center;min-height:44px;margin-top:18px;padding:8px 0;color:var(--muted);font-size:13px;text-decoration:underline;text-underline-offset:4px}.login-back:hover{color:var(--text)}
