
/* ============================================================
   1. 设计令牌（v1.1，本版不改）
   ============================================================ */
:root{
  --blue:#0F5C9E; --blue-ink:#0F3D63; --blue-bg:#EAF1F8; --blue-wash:#F5F9FD;
  --red:#C42B1C; --red-ink:#A32118; --red-bg:#FDECEA;
  --ink-1:#16212B; --ink-2:#4A5866; --ink-3:#616E7C; --ink-4:#98A2AE;
  --bg:#FFFFFF; --bg-sub:#FAFCFE; --line:#E8EEF5; --line-strong:#D7E3EF; --border:#C9D6E2;
  --mute-fg:#56636F; --mute-bg:#EFF3F7;
  --r-xs:2px; --r-sm:4px; --r-md:6px;
  --row-h:40px; --row-h-m:64px; --head-h:56px; --max-w:1200px;
  --p1-fg:#3D4A57; --p1-bg:#EEF3F8;
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC",
         "Hiragino Sans GB","Microsoft YaHei","Source Han Sans SC",
         "Noto Sans CJK SC","WenQuanYi Micro Hei",sans-serif;
  --font-num:-apple-system,"SF Pro Text","Segoe UI","Helvetica Neue",Arial,
             "PingFang SC","Microsoft YaHei",sans-serif;
}

/* ============================================================
   2. 基础
   ============================================================ */
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--bg);color:var(--ink-1);font:400 13px/20px var(--font);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
body.locked{overflow:hidden}
button{font-family:inherit}
::selection{background:var(--blue-bg)}
.num,.cell-time,.cell-due,.tag,.sec-n,.wk-n,.adj-cnt{
  font-family:var(--font-num);font-variant-numeric:tabular-nums;
  font-feature-settings:"tnum" 1;letter-spacing:.01em}
.ico{display:block;flex:none}

/* ============================================================
   3. 顶部条（v3.0 起由 .topbar 取代，此节保留给旧样式）
   ============================================================ */
.topwrap{position:sticky;top:0;z-index:30;background:#fff;border-bottom:1px solid var(--line)}
.switchbar{height:36px;display:flex;align-items:center;
  max-width:var(--max-w);margin:0 auto;padding:0 32px}
.switchbar .stab{height:36px;padding:0 14px;border:0;background:none;cursor:pointer;
  font:400 12px/36px var(--font);color:var(--ink-2);
  border-bottom:2px solid transparent;white-space:nowrap}
.switchbar .stab:hover{color:var(--ink-1)}
.switchbar .stab.on{color:var(--blue);font-weight:500;border-bottom-color:var(--blue)}
.switch-note{margin-left:auto;font:400 11px/16px var(--font);color:var(--ink-3);white-space:nowrap}

/* ============================================================
   4. 页头
   ============================================================ */
.head{height:var(--head-h);display:flex;align-items:center;justify-content:space-between;
  max-width:var(--max-w);margin:0 auto;padding:0 32px}
.view>.head,.pg>.head{position:sticky;top:36px;z-index:20;background:var(--bg)}
.head-date{font:600 20px/28px var(--font);color:var(--ink-1);letter-spacing:.01em}
.head-date--sm{font:600 15px/22px var(--font)}
.head-right{display:flex;align-items:center;gap:14px}
.brand{font:400 12px/18px var(--font);color:var(--ink-3)}
.avatar{width:28px;height:28px;border-radius:50%;background:var(--blue-bg);color:var(--blue-ink);
  font:500 13px/28px var(--font);text-align:center;flex:none;user-select:none}
.head-link{background:none;border:0;padding:0;cursor:pointer;
  font:400 13px/20px var(--font);color:var(--ink-2)}
.head-link:hover{color:var(--blue);text-decoration:underline;text-underline-offset:3px}

/* ============================================================
   5. 容器与页面
   ============================================================ */
.page{max-width:var(--max-w);margin:0 auto;padding:0 32px 96px}
.view{display:none}
.view.on{display:block}
.pg{display:none}
.pg.on{display:block}
.sec{display:flex;align-items:center;gap:8px;margin:32px 0 8px}
.sec::before{content:"";width:3px;height:14px;background:var(--blue);border-radius:1px}
.sec-t{font:600 15px/22px var(--font);color:var(--ink-1)}
.sec-n{font:500 11px/16px var(--font-num);color:var(--ink-3)}
.sec-hint{font:400 11px/16px var(--font);color:var(--ink-3);margin-left:4px}

/* 返回 */
.back{display:inline-flex;align-items:center;gap:6px;background:none;border:0;padding:0;
  margin:16px 0 0;cursor:pointer;font:400 13px/20px var(--font);color:var(--ink-2)}
.back:hover{color:var(--blue)}
.back .ico{color:var(--ink-3)}

/* ============================================================
   6. 今日核心（可编辑）
   ============================================================ */
.core{border:1px solid var(--line-strong);border-radius:var(--r-md);
  background:var(--bg);padding:10px 12px;margin:16px 0 0}
.core-l{font:500 11px/16px var(--font);color:var(--blue-ink);letter-spacing:.02em}
.core-row{display:flex;align-items:flex-start;gap:12px;margin-top:2px}
.core-b{font:500 13px/20px var(--font);color:var(--ink-1);flex:1;min-width:0}
.core-b em{font-style:normal;color:var(--red-ink)}
.core-hint{font:400 11px/16px var(--font);color:var(--ink-3);margin-top:4px}
.core-box{display:none;margin-top:6px}
.core.editing .core-b,.core.editing #coreEditBtn{display:none}
.core.editing .core-box{display:block}
.core-box textarea{width:100%;min-height:64px;padding:8px 10px;border:1px solid var(--border);
  border-radius:var(--r-sm);font:400 13px/20px var(--font);color:var(--ink-1);resize:vertical}
.core-box textarea:focus{outline:2px solid rgba(15,92,158,.14);outline-offset:0;border-color:var(--blue)}
.core-acts{display:flex;gap:8px;margin-top:8px}

/* ============================================================
   7. 事行 TimeRow（原子组件，规范不变）
   ============================================================ */
.grid6{display:grid;grid-template-columns:108px minmax(180px,1.1fr) minmax(300px,1.9fr) 56px 84px 132px;align-items:center}
.grid6o{display:grid;grid-template-columns:112px minmax(140px,1fr) minmax(240px,1.6fr) 100px 84px 150px;align-items:center}

.thead{min-height:32px;background:var(--blue-bg);border-bottom:1px solid var(--line-strong);
  position:relative;padding-left:24px}
.thead>div{padding:0 12px;font:500 11px/16px var(--font);color:var(--blue-ink);
  letter-spacing:.02em;white-space:nowrap}

.tr{position:relative;display:grid;align-items:center;min-height:var(--row-h);
  border-bottom:1px solid var(--line);padding-left:24px;cursor:pointer;transition:background .1s linear}
.tr--s1{grid-template-columns:108px minmax(180px,1.1fr) minmax(300px,1.9fr) 56px 84px 132px}
.tr--owe{grid-template-columns:112px minmax(140px,1fr) minmax(240px,1.6fr) 100px 84px 150px}
.tr::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:transparent}
.tr:hover{background:var(--blue-wash)}
.tr>div{padding:0 12px;min-width:0}
.tr--meeting::before{background:var(--blue)}
.tr--done{opacity:.6}
.tr--done .cell-todo,.tr--done .cell-who{text-decoration:line-through}

.cell-time{font:500 13px/20px var(--font-num);color:var(--blue-ink);white-space:nowrap}
.cell-time--none{color:var(--ink-4);font-weight:400}
.cell-time .d-word{display:none}
.cell-todo,.cell-who{font:500 13px/20px var(--font);color:var(--ink-1);
  display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.cell-done{font:400 13px/20px var(--font);color:var(--ink-2);
  display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.cell-due{font:400 12px/18px var(--font-num);color:var(--ink-2)}
.due-none{font:400 12px/18px var(--font);color:var(--ink-3)}
.cell-src{font:400 12px/18px var(--font);color:var(--ink-3);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:100%}
.cell-src--link{cursor:pointer}
.cell-src--link:hover{text-decoration:underline;text-underline-offset:2px}
.cell-src--none{color:var(--ink-4)}

.chk{position:absolute;left:4px;top:50%;margin:0;transform:translateY(-50%);
  width:14px;height:14px;accent-color:var(--blue);opacity:0;
  transition:opacity .12s linear;cursor:pointer;z-index:2}
.tr:hover .chk,.tr:focus-within .chk,.tr--done .chk{opacity:1}
.m-sub{display:none}

.bp{display:inline-flex;align-items:center;justify-content:center;
  height:18px;padding:0 5px;border-radius:var(--r-xs);
  font:500 11px/1 var(--font);letter-spacing:.04em;
  font-variant-numeric:tabular-nums;white-space:nowrap}
.bp0{background:var(--red-bg);color:var(--red-ink)}
.bp1{background:var(--p1-bg);color:var(--p1-fg)}
.bp2{background:transparent;color:var(--ink-3);padding:0}
.pri-none{font:400 13px/20px var(--font-num);color:var(--ink-4)}

.tag{font:500 12px/16px var(--font-num);font-variant-numeric:tabular-nums;white-space:nowrap}
.tag--over{color:var(--red-ink);font-weight:600}
.tag--left{color:var(--ink-2);font-weight:500}
.tag--today{color:var(--blue);font-weight:600}
.tag--since{color:var(--ink-3);font-weight:400}
.tag--note{color:var(--ink-2);font-weight:500}

.tag-miss{display:inline-block;padding:1px 6px;border-radius:var(--r-sm);
  background:var(--mute-bg);color:var(--mute-fg);font:400 12px/18px var(--font)}

.who-self{display:block;font:600 13px/20px var(--font);color:var(--ink-1);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ============================================================
   8. 本周 / 本月 折叠块
   ============================================================ */
.wk{border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-sub);
  margin-top:12px}
.wk-head{display:flex;align-items:center;gap:8px;width:100%;background:none;border:0;
  padding:10px 12px 2px;cursor:pointer;text-align:left}
.wk-head::before{content:"";width:3px;height:14px;background:var(--blue);border-radius:1px;flex:none}
.wk-t{font:600 15px/22px var(--font);color:var(--ink-1)}
.wk-n{font:500 11px/16px var(--font-num);color:var(--ink-3)}
.wk-act{margin-left:auto;display:inline-flex;align-items:center;gap:6px;
  font:400 12px/18px var(--font);color:var(--blue)}
.wk-act .chev{transition:transform .14s ease;color:var(--blue)}
.wk.open .wk-act .chev{transform:rotate(90deg)}
.wk-goal{display:flex;align-items:baseline;gap:8px;padding:0 12px 0 23px;margin-top:2px}
.wk-goal-t{font:400 13px/20px var(--font);color:var(--ink-1)}
.wk-goal-t b{font-weight:600}
.wk-owner{font:400 11px/16px var(--font);color:var(--ink-3);flex:none;margin-left:auto}
.wk-goal-btn{flex:none;align-self:center;height:24px;padding:0 6px;font-size:12px}
.wk-goal-edit{display:none;align-items:center;gap:8px;padding:4px 12px 8px 23px}
.wk-goal-edit.on{display:flex}
.wk-goal-edit .input{height:32px;flex:1;min-width:0}
.wk-themes{padding:2px 12px 10px 23px;font:400 12px/18px var(--font);color:var(--ink-2)}
.wk-body{display:none;padding:0 12px 8px}
.wk.open .wk-body{display:block}
.wk.open .wk-themes{display:none}
.wk-sep{height:1px;background:var(--line-strong);margin:6px 0 4px}
.wk-row{display:grid;grid-template-columns:56px 1fr 84px 20px;align-items:center;
  min-height:36px;border-bottom:1px solid var(--line);cursor:pointer;padding:0 2px}
.wk-row:last-child{border-bottom:0}
.wk-row:hover{background:var(--blue-wash)}
.wk-row>div{padding-right:10px;min-width:0}
.wk-title{font:500 13px/20px var(--font);color:var(--ink-1);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.wk-due{font:400 12px/18px var(--font-num);color:var(--ink-2);white-space:nowrap}
.wk-arrow{color:var(--ink-4);justify-self:end}

/* ============================================================
   9. 今天结束
   ============================================================ */
.endline{display:flex;align-items:center;gap:12px;margin-top:28px;padding:12px;
  border:1px solid var(--line);border-radius:var(--r-md);background:#fff;
  cursor:pointer;text-align:left;width:100%}
.endline:hover{background:var(--blue-wash);border-color:var(--line-strong)}
.end-t{font:500 13px/20px var(--font);color:var(--ink-1);flex:none}
.end-d{font:400 12px/18px var(--font-num);color:var(--ink-2)}
.end-act{margin-left:auto;font:400 13px/20px var(--font);color:var(--blue);flex:none}

/* ============================================================
   10. 日报页
   ============================================================ */
.dwrap{max-width:860px}
.dtitle{font:600 20px/28px var(--font);color:var(--ink-1);margin:16px 0 0}
.dtitle span{font:600 20px/28px var(--font);color:var(--ink-2)}
.auto{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
  padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--bg-sub);margin-top:16px}
.auto-t{font:400 13px/20px var(--font);color:var(--ink-1)}
.auto-more{background:none;border:0;padding:0;cursor:pointer;
  font:400 12px/18px var(--font);color:var(--blue);margin-left:auto}
.auto-hint{flex:0 0 100%;font:400 11px/16px var(--font);color:var(--ink-3);margin-top:2px}
.auto-list{display:none;border:1px solid var(--line);border-top:0;
  border-radius:0 0 var(--r-md) var(--r-md);background:#fff;padding:4px 12px}
.auto-list.on{display:block}
.auto-row{display:flex;align-items:center;gap:8px;min-height:32px;border-bottom:1px solid var(--line)}
.auto-row:last-child{border-bottom:0}
.auto-row .dfg{color:var(--blue);flex:none}
.auto-row .dtx{font:400 13px/20px var(--font);color:var(--ink-1)}

.sum-box{border:1px solid var(--border);border-radius:var(--r-md);background:#fff;
  padding:12px;cursor:text;position:relative}
.sum-box:hover{border-color:var(--blue)}
.sum-t{font:400 13px/22px var(--font);color:var(--ink-1);white-space:pre-wrap;min-height:22px;padding-right:52px}
.sum-t.empty{color:var(--ink-3)}
.sum-box textarea{display:none;width:100%;min-height:88px;border:0;padding:0;
  font:400 13px/22px var(--font);color:var(--ink-1);resize:vertical;background:none}
.sum-box textarea:focus{outline:none}
.sum-box.editing{border-color:var(--blue);outline:2px solid rgba(15,92,158,.14)}
.sum-box.editing .sum-t{display:none}
.sum-box.editing textarea{display:block}
.sum-edit{position:absolute;right:10px;top:10px}
.sum-box.editing .sum-edit{display:none}
.hint{font:400 11px/16px var(--font);color:var(--ink-3);margin-top:6px}

.list-box{border:1px solid var(--line);border-radius:var(--r-md);padding:2px 12px;background:#fff}
.li{display:flex;align-items:flex-start;gap:8px;min-height:36px;padding:6px 0;
  border-bottom:1px solid var(--line)}
.li:last-child{border-bottom:0}
.li::before{content:"·";color:var(--ink-4);flex:none;font:400 13px/20px var(--font)}
.li-t{flex:1;min-width:0;font:400 13px/20px var(--font);color:var(--ink-1);
  padding:0 2px;border-radius:var(--r-xs);outline:none;word-break:break-word}
.li-t:focus{background:var(--blue-wash);box-shadow:none;outline:1px solid var(--blue)}
.li-del{background:none;border:0;padding:0 2px;cursor:pointer;flex:none;
  font:400 12px/20px var(--font);color:var(--ink-3)}
.li-del:hover{color:var(--ink-1);text-decoration:underline}
.list-add{padding:6px 0 8px}
.dfoot{display:flex;align-items:center;gap:12px;margin:24px 0 0}
.dfoot-hint{font:400 11px/16px var(--font);color:var(--ink-3)}

/* 归档列表 */
.arc{border-top:1px solid var(--line-strong);margin-top:8px}
.arc-row{display:grid;grid-template-columns:150px 1fr 20px;align-items:center;
  min-height:48px;border-bottom:1px solid var(--line);cursor:pointer;padding:0 2px}
.arc-row:hover{background:var(--blue-wash)}
.arc-row>div{padding-right:12px;min-width:0}
.arc-d{font:500 13px/20px var(--font-num);color:var(--ink-1);white-space:nowrap}
.arc-s{font:400 13px/20px var(--font);color:var(--ink-2);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.arc-s--none{color:var(--ink-3)}
.arc-arrow{color:var(--ink-4);justify-self:end}
.arc-row--wk{grid-template-columns:1fr 96px 20px}
.arc-main{display:flex;align-items:baseline;gap:14px;min-width:0}
.arc-goal{font:400 13px/20px var(--font);color:var(--ink-2);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.arc-cnt{font:400 12px/18px var(--font-num);color:var(--ink-2);text-align:right}

/* ============================================================
   11. 程宁工作台
   ============================================================ */
.goalbar{border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-sub);
  padding:10px 12px;margin-top:16px}
.goalbar-row{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.goalbar-row+.goalbar-row{margin-top:6px}
.goalbar-l{font:500 11px/16px var(--font);color:var(--ink-3);letter-spacing:.02em}
.goalbar-t{font:500 13px/20px var(--font);color:var(--ink-1)}
.goalbar-o{font:400 11px/16px var(--font);color:var(--ink-3);margin-left:auto}

.note-block{border:1px solid var(--line-strong);border-radius:var(--r-md);padding:12px;margin-top:12px}
.note-row{display:flex;align-items:center;gap:8px}
.note-row .input{height:40px;flex:1}
.note-hint{margin-top:6px;font:400 11px/16px var(--font);color:var(--ink-3)}
.note-tip{margin-top:8px;font:400 11px/16px var(--font);color:var(--ink-2);
  background:var(--mute-bg);border-radius:var(--r-sm);padding:6px 8px;display:none}
.note-tip.on{display:block}
.note-list{margin-top:12px;border-top:1px solid var(--line)}
.note-item{display:flex;align-items:center;gap:10px;min-height:36px;padding:6px 0;
  border-bottom:1px solid var(--line)}
.note-item:last-child{border-bottom:0}
.note-item .nt{font:400 13px/20px var(--font);color:var(--ink-1);flex:1;min-width:0;word-break:break-word}
.note-item .ns{font:400 11px/16px var(--font-num);color:var(--ink-3);flex:none}
.note-act{background:none;border:0;padding:0;cursor:pointer;flex:none;
  font:400 12px/20px var(--font);color:var(--blue)}
.note-act:hover{text-decoration:underline;text-underline-offset:2px}
.note-item.conv .nt{color:var(--ink-3);text-decoration:line-through}
.note-item.conv .note-act{color:var(--ink-3);pointer-events:none;text-decoration:none}
.note-flag{flex:none;padding:0 5px;border-radius:var(--r-xs);background:var(--mute-bg);
  color:var(--mute-fg);font:500 11px/16px var(--font)}

.mods{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.mod{display:flex;align-items:center;gap:12px;min-height:64px;padding:10px 12px;
  border:1px solid var(--line);border-radius:var(--r-md);background:#fff;text-align:left;
  cursor:pointer;transition:border-color .1s linear,background .1s linear;width:100%}
.mod:hover{border-color:var(--line-strong);background:var(--blue-wash)}
.mod-main{flex:1;min-width:0}
.mod-t{font:500 13px/20px var(--font);color:var(--ink-1);display:flex;align-items:center;gap:8px}
.mod-d{font:400 11px/16px var(--font);color:var(--ink-3);margin-top:2px}
.mod-n{display:inline-flex;align-items:center;height:18px;padding:0 5px;border-radius:var(--r-xs);
  background:var(--mute-bg);color:var(--mute-fg);font:500 11px/1 var(--font-num)}
.mod .chev{color:var(--ink-4)}

.sched{display:none;margin-top:12px}
.sched.on{display:block}
.sched-row{display:grid;grid-template-columns:112px minmax(120px,1fr) 128px 128px;
  gap:8px;align-items:center;margin-bottom:8px}
.sched-cap{font:400 11px/16px var(--font);color:var(--ink-3);margin-bottom:8px}

/* ============================================================
   12. 调整今日要事
   ============================================================ */
.adj-head{display:flex;align-items:center;gap:12px;margin:16px 0 8px}
.adj-title{font:600 15px/22px var(--font);color:var(--ink-1)}
.adj-cnt{font:500 13px/20px var(--font-num);color:var(--ink-2)}
.adj-cnt.over{color:var(--red-ink);font-weight:600}
.adj-sub{font:400 11px/16px var(--font);color:var(--ink-3);margin-left:auto}
.adj-list{border-top:1px solid var(--line-strong)}
.tr--adj{padding-left:0;grid-template-columns:24px 56px minmax(120px,1fr) 92px auto;cursor:default}
.tr--adj:hover{background:transparent}
.tr--adj .handle{color:var(--ink-4);cursor:grab;display:flex;align-items:center;
  justify-content:center;height:100%}
.tr--adj .handle:active{cursor:grabbing}
.tr--adj.dragging{background:var(--blue-bg)}
.tr--adj>div{padding:0 8px}
.adj-acts{display:flex;align-items:center;gap:2px;padding-right:2px}
.fold-box{margin-top:24px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-sub)}
.fold-head{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line)}
.fold-t{font:500 13px/20px var(--font);color:var(--ink-1)}
.fold-h{margin-left:auto;font:400 11px/16px var(--font);color:var(--ink-3)}
.fold-body{padding:0 12px 4px}
.fold-empty{font:400 12px/18px var(--font);color:var(--ink-3);padding:12px 0}

/* ============================================================
   13. 按钮 / 输入 / 提示
   ============================================================ */
.btn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;
  border:1px solid transparent;border-radius:var(--r-sm);background:none;cursor:pointer;
  font:500 13px/1 var(--font);color:var(--ink-1);white-space:nowrap;
  transition:background .1s linear,color .1s linear,border-color .1s linear}
.btn-primary{background:var(--blue);color:#fff}
.btn-primary:hover{background:var(--blue-ink)}
.btn-primary[disabled]{background:var(--mute-bg);color:var(--ink-3);cursor:default}
.btn-primary[disabled]:hover{background:var(--mute-bg)}
.btn-sec{background:#fff;border-color:var(--border);color:var(--ink-1)}
.btn-sec:hover{border-color:var(--blue);color:var(--blue-ink)}
.btn-ghost{color:var(--ink-2);padding:0 8px}
.btn-ghost:hover{background:var(--blue-wash);color:var(--ink-1)}
.btn-sm{height:26px;padding:0 8px;font-size:12px}
.btn:focus-visible{outline:2px solid rgba(15,92,158,.35);outline-offset:1px}

.input,textarea.input{width:100%;height:36px;padding:0 10px;border:1px solid var(--border);
  border-radius:var(--r-sm);background:#fff;color:var(--ink-1);font:400 13px/20px var(--font)}
textarea.input{height:auto;min-height:76px;padding:8px 10px;resize:vertical}
.input::placeholder{color:var(--ink-3)}
.input:focus{outline:2px solid rgba(15,92,158,.14);outline-offset:0;border-color:var(--blue)}
select.input{appearance:none;-webkit-appearance:none;cursor:pointer}

.fab{position:fixed;right:24px;bottom:24px;z-index:40;height:32px;padding:0 14px;
  border:0;border-radius:var(--r-sm);background:var(--blue);color:#fff;cursor:pointer;
  font:500 13px/1 var(--font);display:inline-flex;align-items:center;gap:6px}
.fab:hover{background:var(--blue-ink)}

/* ============================================================
   14. 抽屉
   ============================================================ */
.ovl{position:fixed;inset:0;background:rgba(16,32,48,.16);z-index:70;display:none}
.ovl.on{display:block}
.drawer{position:fixed;top:0;right:0;width:480px;max-width:100%;height:100vh;
  background:#fff;border-left:1px solid var(--line-strong);z-index:71;
  display:flex;flex-direction:column;transform:translateX(101%);transition:transform .18s ease}
.drawer.on{transform:translateX(0)}
.dw-head{flex:none;min-height:56px;display:flex;align-items:flex-start;gap:8px;
  padding:16px 16px 12px 20px;border-bottom:1px solid var(--line)}
.dw-title{font:600 14px/20px var(--font);color:var(--ink-1);flex:1;min-width:0}
.dw-body{flex:1;overflow:auto;padding:16px 20px 40px}
.dw-cap{font:500 11px/16px var(--font);color:var(--ink-3);letter-spacing:.02em;margin:0 0 6px}
.dw-quote{font:400 13px/22px var(--font);color:var(--ink-1);
  border-left:3px solid var(--line-strong);padding:2px 0 2px 12px;margin:0 0 16px}
.dw-miss{background:var(--mute-bg);border:1px solid var(--line);border-radius:var(--r-sm);
  padding:10px 12px;margin:0 0 16px;font:400 12px/18px var(--font);color:var(--mute-fg)}
.dw-miss .tag-miss{background:#fff}
.dw-miss p{margin:6px 0 0}
.dw-miss p:first-child{margin-top:0}
.dw-grid{display:grid;grid-template-columns:80px 1fr;gap:12px 12px;margin:0}
.dw-k{font:500 11px/20px var(--font);color:var(--ink-3)}
.dw-v{font:400 13px/20px var(--font);color:var(--ink-1);min-width:0;word-break:break-word}
.dw-v--src{color:var(--blue);cursor:pointer;text-decoration:underline;
  text-underline-offset:2px;text-decoration-thickness:1px}
.dw-v--none{color:var(--ink-3)}
.dw-tip{margin-top:12px;background:var(--mute-bg);border:1px solid var(--line);
  border-radius:var(--r-sm);padding:10px 12px;font:400 12px/18px var(--font);color:var(--mute-fg)}
.dw-foot{flex:none;display:flex;gap:8px;padding:12px 20px;border-top:1px solid var(--line)}
.dw-edit .fld{margin-bottom:12px}

/* ============================================================
   15. 弹层
   ============================================================ */
.modal{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);
  width:560px;max-width:calc(100% - 32px);max-height:calc(100vh - 64px);
  background:#fff;border:1px solid var(--line-strong);border-radius:var(--r-md);
  z-index:81;display:none;flex-direction:column}
.modal.on{display:flex}
.md-head{flex:none;display:flex;align-items:center;gap:12px;padding:14px 16px 12px 20px;
  border-bottom:1px solid var(--line)}
.md-title{font:600 14px/20px var(--font);flex:1}
.md-body{flex:1;overflow:auto;padding:16px 20px}
.md-foot{flex:none;display:flex;align-items:center;gap:8px;padding:12px 20px;
  border-top:1px solid var(--line)}
.md-note{margin:0 0 12px;padding:6px 8px;border-radius:var(--r-sm);background:var(--mute-bg);
  font:400 11px/16px var(--font);color:var(--mute-fg);display:none}
.md-note.on{display:block}
.fld{margin-bottom:12px}
.fld-l{display:block;font:500 11px/16px var(--font);color:var(--ink-3);margin-bottom:4px}
.fld-2{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}
.more-toggle{display:inline-flex;align-items:center;gap:6px;background:none;border:0;
  padding:4px 0;cursor:pointer;font:500 12px/18px var(--font);color:var(--ink-2)}
.more-toggle .chev{transition:transform .14s ease}
.more-toggle.on .chev{transform:rotate(90deg)}
.more-body{display:none;padding-top:8px;border-top:1px solid var(--line);margin-top:8px}
.more-body.on{display:block}
.fld-hint{margin-top:4px;font:400 11px/16px var(--font);color:var(--ink-3)}
.fld-warn{margin-top:4px;font:400 11px/16px var(--font);color:var(--ink-2);
  background:var(--mute-bg);border-radius:var(--r-sm);padding:6px 8px;display:none}
.fld-warn.on{display:block}
.vis-group{border:0;margin:0;padding:0}
.vis-opt{display:flex;gap:8px;align-items:flex-start;padding:8px 0;cursor:pointer;
  border-top:1px solid var(--line)}
.vis-opt:first-of-type{border-top:0}
.vis-opt input{margin:3px 0 0;accent-color:var(--blue);flex:none}
.vis-t{display:block;font:500 13px/20px var(--font);color:var(--ink-1)}
.vis-d{display:block;font:400 11px/16px var(--font);color:var(--ink-3);margin-top:2px}

.toast{position:fixed;left:50%;bottom:32px;transform:translateX(-50%) translateY(8px);
  background:var(--ink-1);color:#fff;font:400 13px/20px var(--font);
  padding:8px 14px;border-radius:var(--r-sm);z-index:95;opacity:0;pointer-events:none;
  transition:opacity .16s ease,transform .16s ease;max-width:calc(100% - 32px);text-align:center}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}

/* ============================================================
   16. 响应式
   ============================================================ */
@media (max-width:1279px){
  .page,.head,.switchbar{padding-left:24px;padding-right:24px}
  .grid6,.grid6o{grid-template-columns:1fr;display:block}
  .thead{display:none}
  .tr{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;
    min-height:56px;padding:8px 0 10px 24px}
  .tr>div{padding:0}
  .tr>.c1{order:1}
  .tr>.c2{order:2;flex:1 1 0;min-width:0;overflow:hidden}
  .tr>.c4{order:3;margin-left:auto;flex:none}
  .tr>.c3,.tr>.c5,.tr>.c6{display:none}
  .tr>.c4--none{display:none}
  .tr--owe>.c4{display:none}
  .tr--owe>.c5{display:block;order:3;margin-left:auto;flex:none}
  .m-sub{display:block;order:4;flex:0 0 100%;padding-left:0;
    font:400 11px/16px var(--font);color:var(--ink-3);
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cell-time{font-size:12px}
  .cell-time--none{color:var(--ink-3)}
  .cell-time .d-dash{display:none}
  .cell-time .d-word{display:inline}
  .tr:not(.tr--owe) .c1 .cell-time::after{content:" ·";color:var(--ink-4)}
  .m-sub .sep{color:var(--ink-4)}
  .tr--meeting::before{top:8px;bottom:10px}
  .sched-row{grid-template-columns:1fr 1fr;gap:8px}
  .mods{grid-template-columns:1fr}
  .drawer{width:100%}
  .switch-note{display:none}
  .wk-row{grid-template-columns:40px 1fr 16px;grid-template-areas:"p t a" "p d a";
    min-height:44px;padding:6px 0;row-gap:0}
  .wk-row>.wk-p{grid-area:p}
  .wk-row>.wk-title{grid-area:t}
  .wk-row>.wk-due{grid-area:d;font-size:11px;line-height:16px;color:var(--ink-3)}
  .wk-row>.wk-arrow{grid-area:a}
  .arc-row{grid-template-columns:120px 1fr 20px}
  .arc-main{flex-direction:column;gap:2px;align-items:flex-start}
  .tr--adj{padding-left:0;display:flex;flex-wrap:nowrap;align-items:center;gap:0}
  .tr--adj>.handle{order:1;flex:none;width:24px}
  .tr--adj>.c4{order:2;flex:none;margin-left:0}
  .tr--adj>.c2{order:3;flex:1 1 0;min-width:0;overflow:hidden;padding-right:8px}
  .tr--adj>.c5{order:4;display:block;flex:none;margin-left:0}
  .tr--adj>.adj-acts{order:5;flex:none}
  .tr--adj .m-sub{display:none}
}
@media (max-width:767px){
  .page,.head,.switchbar{padding-left:16px;padding-right:16px}
  .head{height:52px}
  .head-date{font:600 18px/26px var(--font)}
  .dtitle{font:600 18px/26px var(--font)}
  .brand{display:none}
  .sec{margin:24px 0 8px}
  .tr{min-height:var(--row-h-m)}
  .chk{opacity:1}
  .fld-2{grid-template-columns:1fr}
  .modal{width:100%;max-width:100%;max-height:calc(100vh - 32px);top:auto;bottom:0;left:0;transform:none}
  .dw-grid{grid-template-columns:72px 1fr}
  .adj-sub{display:none}
  .fab{right:16px;bottom:16px}
  .tr::before{top:8px;bottom:10px}
  .core-row{flex-direction:column;gap:6px}
  .endline{flex-wrap:wrap;gap:6px}
  .end-act{margin-left:0;width:100%}
  .wk-goal{flex-wrap:wrap}
  .wk-owner{margin-left:0}
  .head-right{gap:10px}
  .tr--adj{flex-wrap:wrap;min-height:auto;padding:8px 0}
  .tr--adj>.handle{width:22px}
  .tr--adj>.c2{flex:1 1 auto;order:3;min-width:0}
  .tr--adj>.c5{order:4;flex:0 0 auto;margin-left:22px}
  .tr--adj>.adj-acts{order:5;margin-left:auto}
  .head-date--sm{font:600 14px/20px var(--font)}
  .arc-row{grid-template-columns:104px 1fr 16px}
}

/* ============================================================
   17. v2.0 新增：需批示 / 状态五档 / 风险 / 时间线 / 催办 / 排期 / 设置
   ============================================================ */

/* 需批示块 —— 有内容才显示，位于第一屏最上 */
.pend{border:1px solid #E8C9A6;border-radius:var(--r-md);background:#FDF7F0;
  padding:10px 12px;margin:18px 0 4px}
.pend-h{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}
.pend-t{font:600 13px/20px var(--font);color:#8A5A18}
.pend-n{font:500 11px/16px var(--font-num);color:#A67C3D;
  background:#F6E7D3;padding:1px 6px;border-radius:var(--r-xs)}
.pend-row{display:flex;align-items:center;gap:10px;min-height:34px;
  padding:4px 0;border-top:1px solid #F0E1CD;cursor:pointer}
.pend-row:first-of-type{border-top:0}
.pend-row:hover{background:#FBF1E4}
.pend-title{font:500 13px/20px var(--font);color:var(--ink-1);flex:1;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pend-src{font:400 11px/16px var(--font);color:var(--ink-3);flex:none}
.pend-act{font:400 12px/18px var(--font);color:#8A5A18;flex:none}

/* 状态徽标 · 五档 */
.st{display:inline-flex;align-items:center;height:18px;padding:0 5px;border-radius:var(--r-xs);
  font:500 11px/1 var(--font-num);white-space:nowrap}
.st--none{background:var(--mute-bg);color:var(--mute-fg)}
.st--doing{background:var(--blue-bg);color:var(--blue-ink)}
.st--wait{background:#FDF3E3;color:#8A5A18}
.st--done{background:#EAF4EC;color:#2F6B3C}
.st--hold{background:#F2F0F6;color:#5B5470}

/* 风险标签 · 灰底，绝不用红 */
.rk{display:inline-flex;align-items:center;height:18px;padding:0 5px;border-radius:var(--r-xs);
  font:500 11px/1 var(--font-num);background:var(--mute-bg);color:var(--mute-fg);white-space:nowrap}
.rk--risk{background:#EDEAE4;color:#6B5B3E}
.rk--stuck{background:#E6E3DE;color:#4A4238}

/* 进展时间线 */
.tl{margin:0;padding:0;list-style:none;border-left:2px solid var(--line);margin-left:3px}
.tl-i{position:relative;padding:0 0 12px 16px}
.tl-i:last-child{padding-bottom:0}
.tl-i::before{content:"";position:absolute;left:-4px;top:6px;width:6px;height:6px;
  border-radius:50%;background:var(--line-strong)}
.tl-t{font:400 11px/16px var(--font-num);color:var(--ink-3)}
.tl-x{font:400 13px/20px var(--font);color:var(--ink-1);margin-top:1px}
.tl-add{margin-top:8px;display:flex;gap:6px}
.tl-add .input{height:32px;flex:1}

/* 催办记录 */
.chase-tb{width:100%;border-collapse:collapse;margin-top:4px}
.chase-tb th{font:500 11px/16px var(--font);color:var(--ink-3);text-align:left;
  padding:6px 8px 6px 0;border-bottom:1px solid var(--line);font-weight:500}
.chase-tb td{font:400 12px/18px var(--font);color:var(--ink-1);
  padding:7px 8px 7px 0;border-bottom:1px solid var(--line)}
.chase-tb tr:last-child td{border-bottom:0}
.chase-late{color:var(--red-ink);font-weight:500}

/* 排期双栏 */
.sch2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}
.sch2-col{border:1px solid var(--line);border-radius:var(--r-md);background:#fff;overflow:hidden}
.sch2-h{display:flex;align-items:center;gap:8px;padding:10px 12px;
  border-bottom:1px solid var(--line);background:var(--bg-sub)}
.sch2-t{font:500 13px/20px var(--font);color:var(--ink-1)}
.sch2-n{font:500 11px/16px var(--font-num);color:var(--ink-3);margin-left:auto}
.sch2-b{padding:4px 0;min-height:280px;max-height:460px;overflow:auto}
.sch2-g{font:500 11px/16px var(--font);color:var(--ink-3);padding:8px 12px 4px;
  letter-spacing:.02em}
.sch2-i{display:flex;align-items:center;gap:8px;min-height:34px;padding:5px 12px;cursor:pointer}
.sch2-i:hover{background:var(--blue-wash)}
.sch2-i .t{font:400 13px/20px var(--font);color:var(--ink-1);flex:1;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sch2-mv{background:none;border:0;padding:0 4px;cursor:pointer;flex:none;
  font:400 12px/18px var(--font);color:var(--blue)}
.sch2-mv:hover{text-decoration:underline}

/* 设置页 */
.set-sec{border:1px solid var(--line);border-radius:var(--r-md);padding:14px 16px;
  margin-top:16px;background:#fff}
.set-h{font:600 13px/20px var(--font);color:var(--ink-1);margin:0 0 12px}
.set-row{display:flex;align-items:center;gap:12px;min-height:40px;
  border-top:1px solid var(--line);padding:8px 0}
.set-row:first-of-type{border-top:0}
.set-l{font:400 12px/18px var(--font);color:var(--ink-3);width:88px;flex:none}
.set-v{font:400 13px/20px var(--font);color:var(--ink-1);flex:1;min-width:0}
.set-r{flex:none;display:flex;gap:6px}

/* 主题分组小标题（周报 / 排期共用） */
.th-h{display:flex;align-items:baseline;gap:10px;margin:22px 0 6px}
.th-t{font:600 13px/20px var(--font);color:var(--ink-1)}
.th-n{font:500 11px/16px var(--font-num);color:var(--ink-3)}
.th-b{font:400 13px/22px var(--font);color:var(--ink-1);margin:0 0 4px}

/* AI 按钮统一标识 */
.ai-btn{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 8px;
  border:1px solid var(--line-strong);border-radius:var(--r-sm);background:#fff;cursor:pointer;
  font:500 12px/1 var(--font);color:var(--ink-2)}
.ai-btn:hover{border-color:var(--blue);color:var(--blue-ink);background:var(--blue-wash)}
.ai-tag{display:inline-flex;align-items:center;height:16px;padding:0 4px;border-radius:2px;
  background:var(--mute-bg);color:var(--mute-fg);font:500 10px/1 var(--font-num)}

/* 排期页顶部日期切换 */
.daysw{display:flex;gap:6px;margin-top:14px}
.daysw-b{height:30px;padding:0 12px;border:1px solid var(--border);border-radius:var(--r-sm);
  background:#fff;cursor:pointer;font:500 12px/1 var(--font-num);color:var(--ink-2)}
.daysw-b.on{background:var(--blue);border-color:var(--blue);color:#fff}
.daysw-b:hover:not(.on){border-color:var(--blue);color:var(--blue-ink)}

@media (max-width:1279px){
  .sch2{grid-template-columns:1fr}
  .sch2-b{max-height:320px}
}
@media (max-width:767px){
  .pend-row{flex-wrap:wrap;gap:4px 8px}
  .pend-title{flex:0 0 100%;white-space:normal}
  .set-row{flex-wrap:wrap}
  .set-l{width:100%}
  .chase-tb th:nth-child(2),.chase-tb td:nth-child(2){display:none}
}

/* v2.0 子页面显隐（新增类，必须显式声明） */
.pg2{display:none}
.pg2.on{display:block}
/* 程宁侧列表行：用独立的类，不要覆盖 Harry 侧的 .tr--owe */
.tr--m,.tr--c{display:grid;align-items:center}

/* ============================================================
   v3.0：登录页 / 顶栏 / 新列表 / 卡点块
   ============================================================ */

/* ---------- 登录 ---------- */
#login{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  background:#F4F7FB}
.login-card{width:360px;max-width:calc(100% - 32px);background:#fff;
  border:1px solid var(--line-strong);border-radius:var(--r-md);
  padding:28px 28px 22px;box-shadow:0 2px 16px rgba(22,33,43,.06)}
.login-brand{display:flex;align-items:center;gap:9px}
.login-logo{width:26px;height:26px;border-radius:5px;background:var(--blue);color:#fff;
  display:inline-flex;align-items:center;justify-content:center;font:600 14px/1 var(--font-num)}
.login-name{font:600 15px/22px var(--font);color:var(--ink-1)}
.login-sub{font:400 12px/18px var(--font);color:var(--ink-3);margin:8px 0 22px}
.login-fld{margin-bottom:14px}
.login-fld label{display:block;font:500 11px/16px var(--font);color:var(--ink-3);margin-bottom:5px}
.login-fld .input{height:38px}
.login-err{font:400 12px/18px var(--font);color:var(--red-ink);min-height:18px;margin-bottom:6px}
.login-btn{width:100%;height:38px;justify-content:center;font-size:13px}
.login-hint{margin-top:18px;padding-top:14px;border-top:1px solid var(--line);
  font:400 11px/17px var(--font);color:var(--ink-3)}
.login-hint b{font-family:var(--font-num);color:var(--ink-2);font-weight:500}
.login-switch{display:flex;gap:14px;margin-top:9px}
.login-switch a{color:var(--blue);cursor:pointer;font-size:11px}
.login-switch a:hover{text-decoration:underline}

/* ---------- 顶栏 ---------- */
.topbar{position:sticky;top:0;z-index:30;background:#fff;border-bottom:1px solid var(--line)}
.topbar-in{max-width:var(--max-w);margin:0 auto;padding:0 32px;height:52px;
  display:flex;align-items:center;gap:10px}
.brand{width:22px;height:22px;border-radius:4px;background:var(--blue);color:#fff;
  display:inline-flex;align-items:center;justify-content:center;font:600 12px/1 var(--font-num);flex:none}
.brand-t{font:600 14px/20px var(--font);color:var(--ink-1);flex:none;margin-right:14px}
.topnav{display:flex;gap:2px;flex:1;min-width:0}
.topnav-a{font:400 13px/20px var(--font);color:var(--ink-2);padding:5px 10px;
  border-radius:var(--r-sm);cursor:pointer;white-space:nowrap}
.topnav-a:hover{background:var(--blue-wash);color:var(--blue-ink)}
.topbar-r{display:flex;align-items:center;gap:8px;flex:none}
.who{font:500 12px/18px var(--font);color:var(--ink-2)}

/* ---------- 卡点块（日报四格） ---------- */
.blocks{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.blk{border:1px solid var(--line);border-radius:var(--r-sm);padding:10px 12px;background:#fff}
.blk-k{font:500 11px/16px var(--font);color:var(--ink-3);margin-bottom:4px}
.blk-v{font:400 13px/20px var(--font);color:var(--ink-1)}

/* ---------- 程宁侧列表行 ---------- */
.tr--m{display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;
  align-items:center;min-height:40px;padding:5px 0 5px 0;border-bottom:1px solid var(--line);
  cursor:pointer;gap:0 10px}
.tr--m:hover{background:var(--blue-wash)}
.tr--m>div{padding:0}
.tr--m .c2{min-width:0}
.tr--m .cell-todo{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.tr--c{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1.2fr) auto auto;
  align-items:center;min-height:40px;padding:5px 0;border-bottom:1px solid var(--line);
  cursor:pointer;gap:0 10px}
.tr--c:hover{background:var(--blue-wash)}
.tr--c>div{padding:0}
.tr--c .c2{min-width:0}
.tr--c .cell-todo{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tr--c .c3{min-width:0}
.tr--c .cell-done{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font:400 12px/18px var(--font);color:var(--ink-2)}

/* 排期行里的截止时间 */
.sch2-d{font:400 11px/16px var(--font-num);color:var(--ink-3);flex:none;margin-right:6px}

/* 页头说明 */
.head-note{font:400 12px/18px var(--font);color:var(--ink-3)}

/* 顶部导航在小屏折叠 */
@media (max-width:767px){
  .topbar-in{padding:0 16px;gap:6px}
  .brand-t{display:none}
  .topnav-a{padding:5px 7px;font-size:12px}
  .who{display:none}
  .blocks{grid-template-columns:1fr}
  .login-card{padding:22px 20px 18px}
}
