/* ═══════════════════════════════════════════════
   工作台 · 视觉系统
   纸面 / 细线 / 衬线标题 / 克制配色
   ═══════════════════════════════════════════════ */

:root{
  --paper:#F2EEE6;         /* 底纸 */
  --sheet:#FBF9F5;         /* 内容纸 */
  --rail:#EDE8DE;
  --ink:#221F1A;
  --ink-2:#464037;
  --sub:#797265;
  --faint:#A49C8D;
  --line:#E0DACB;
  --line-2:#D3CBBA;

  --green:#3A5A4E;
  --clay:#A8622F;
  --rust:#A33B2A;
  --indigo:#46536E;
  --gold:#8A7328;
  --sage:#6E8B6A;

  --serif:"Songti SC","STSong","Noto Serif SC",Georgia,"Times New Roman",serif;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;

  --rail-w:238px;
  --ease:cubic-bezier(.22,.61,.36,1);
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:var(--sans);font-size:14px;line-height:1.65;
  -webkit-font-smoothing:antialiased;
  overflow:hidden;
}

/* 纸张颗粒 */
.grain{
  position:fixed;inset:0;pointer-events:none;z-index:9;opacity:.32;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E");
  mix-blend-mode:multiply;
}

h1,h2,h3,h4{font-family:var(--serif);font-weight:600;margin:0;letter-spacing:.01em}
button{font-family:inherit;cursor:pointer;border:0;background:none;color:inherit}
input,textarea,select{font-family:inherit;font-size:14px;color:var(--ink)}

/* ═══════ 骨架 ═══════ */
.app{display:flex;height:100vh;height:100dvh;position:relative}

.rail{
  width:var(--rail-w);flex:0 0 var(--rail-w);background:var(--rail);
  border-right:1px solid var(--line-2);
  display:flex;flex-direction:column;padding:26px 0 18px;
}
.rail-head{display:flex;gap:11px;align-items:center;padding:0 22px 22px;border-bottom:1px solid var(--line-2)}
.mark{
  width:34px;height:34px;flex:0 0 34px;border-radius:3px;background:var(--green);
  color:var(--paper);display:grid;place-items:center;font-family:var(--serif);
  font-size:19px;line-height:1;letter-spacing:-.02em;
}
.rail-title{font-family:var(--serif);font-size:15.5px;letter-spacing:.06em}
.rail-sub{font-size:10.5px;color:var(--faint);letter-spacing:.09em;margin-top:1px}

.nav{padding:16px 12px;display:flex;flex-direction:column;gap:1px;flex:1;overflow:auto}
.nav-i{
  display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:3px;
  font-size:13.5px;color:var(--ink-2);transition:background .16s,color .16s;position:relative;
}
.nav-i:hover{background:rgba(255,255,255,.5)}
.nav-i.is-on{background:var(--sheet);color:var(--ink);box-shadow:inset 2px 0 0 var(--green)}
.nav-ic{width:15px;text-align:center;font-size:13px;opacity:.75}
.nav-n{margin-left:auto;font-size:10.5px;color:var(--faint);font-style:normal;font-variant-numeric:tabular-nums}

.rail-foot{padding:14px 22px 0;border-top:1px solid var(--line-2)}
.sync{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--sub)}
.dot{width:6px;height:6px;border-radius:50%;background:var(--sage);box-shadow:0 0 0 3px rgba(110,139,106,.16)}
.dot.bad{background:var(--rust);box-shadow:0 0 0 3px rgba(163,59,42,.14)}
.rail-meta{font-size:10px;color:var(--faint);margin-top:6px;letter-spacing:.05em}

.main{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--sheet)}
.topbar{
  flex:0 0 auto;display:flex;align-items:flex-end;justify-content:space-between;gap:16px;
  padding:20px 34px 14px;border-bottom:1px solid var(--line);
}
.date-line{font-size:11px;letter-spacing:.16em;color:var(--faint);text-transform:uppercase}
.hello{font-family:var(--serif);font-size:22px;line-height:1.25;margin-top:3px;letter-spacing:.02em}
.tb-r{display:flex;gap:9px;align-items:center;padding-bottom:2px}

.scroll{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;scroll-behavior:smooth}
.view{display:none;max-width:1120px;margin:0 auto;padding:0 34px 90px}
.view.is-on{display:block;animation:fade .32s var(--ease)}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ═══════ 区块 ═══════ */
.band{padding:26px 0 30px;border-bottom:1px solid var(--line)}
.band:last-child{border-bottom:0}
.band.two{display:grid;grid-template-columns:1fr 1fr;gap:38px}
.block{min-width:0}
.block-h{display:flex;align-items:baseline;gap:10px;margin-bottom:16px}
.block-h h3{font-size:14.5px;letter-spacing:.04em}
.hint{font-size:11px;color:var(--faint);letter-spacing:.03em}

.sech{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:20px}
.sech h2{font-size:25px;letter-spacing:.03em}
.sech-r{display:flex;gap:10px;align-items:center;flex-wrap:wrap}

/* ═══════ 控件 ═══════ */
.btn{
  font-size:12.5px;padding:7px 14px;border-radius:3px;border:1px solid var(--line-2);
  background:transparent;color:var(--ink-2);transition:all .16s var(--ease);white-space:nowrap;
}
.btn:hover{border-color:var(--ink-2);color:var(--ink)}
.btn-solid{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.btn-solid:hover{background:#000;color:#fff}
.btn-ghost{background:var(--sheet)}
.btn-danger{color:var(--rust);border-color:rgba(163,59,42,.35)}
.btn-danger:hover{background:var(--rust);color:#fff;border-color:var(--rust)}
.btn-sm{padding:3px 9px;font-size:11.5px}

.seg{display:inline-flex;border:1px solid var(--line-2);border-radius:3px;overflow:hidden;background:var(--sheet)}
.seg button{padding:6px 13px;font-size:12px;color:var(--sub);border-right:1px solid var(--line)}
.seg button:last-child{border-right:0}
.seg button.is-on{background:var(--ink);color:var(--paper)}

.inp-date{border:1px solid var(--line-2);border-radius:3px;padding:6px 10px;font-size:12.5px;background:var(--sheet);color:var(--ink-2)}

/* ═══════ 概览 · 数字 ═══════ */
.figs{display:grid;grid-template-columns:repeat(4,1fr);gap:0}
.fig{padding:2px 20px;border-left:1px solid var(--line);position:relative}
.fig:first-child{padding-left:0;border-left:0}
.fig .k{font-size:10.5px;letter-spacing:.14em;color:var(--faint);text-transform:uppercase}
.fig .v{font-family:var(--serif);font-size:38px;line-height:1.05;margin-top:8px;font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.fig .v small{font-size:15px;color:var(--faint);margin-left:2px;font-family:var(--sans)}
.fig .d{font-size:11.5px;color:var(--sub);margin-top:7px;display:flex;align-items:center;gap:6px}
.fig .bar{height:2px;background:var(--line);margin-top:12px;position:relative;overflow:hidden}
.fig .bar i{position:absolute;left:0;top:0;bottom:0;background:var(--ink-2);transition:width .6s var(--ease)}
.up{color:var(--green)}.down{color:var(--rust)}

/* ═══════ 目标 ═══════ */
.goalbars{display:flex;flex-direction:column;gap:15px}
.gb{display:grid;grid-template-columns:52px 1fr auto;gap:12px;align-items:center}
.gb .lb{font-size:11px;letter-spacing:.1em;color:var(--sub)}
.gb .tr{height:5px;background:var(--line);position:relative}
.gb .tr i{position:absolute;left:0;top:0;bottom:0;transition:width .7s var(--ease)}
.gb .pv{font-family:var(--serif);font-size:15px;font-variant-numeric:tabular-nums;min-width:44px;text-align:right}

.goals{display:flex;flex-direction:column;gap:0}
.goal{
  padding:20px 0;border-top:1px solid var(--line);position:relative;
  display:grid;grid-template-columns:84px 1fr auto;gap:22px;cursor:pointer;transition:background .16s;
}
.goal:hover{background:rgba(255,255,255,.55)}
.goal:first-child{border-top:0}
.goal.is-done{opacity:.6}
.goal:hover.is-done{opacity:.85}

/* 节点日期列 */
.gdate{padding-top:1px;border-right:1px solid var(--line);padding-right:16px}
.gdate b{display:block;font-family:var(--serif);font-size:19px;font-weight:400;line-height:1.15;letter-spacing:.01em}
.gdate span{display:block;font-size:10px;color:var(--faint);margin-top:4px;letter-spacing:.05em;white-space:nowrap}
.gdate em{display:block;font-style:normal;font-size:10.5px;margin-top:7px;color:var(--sub);letter-spacing:.03em}
.gdate em.over{color:var(--rust)}
.gdate em.soon{color:var(--clay)}
.gdate em.past{color:var(--green)}

.gh{display:flex;align-items:center;gap:9px;margin-bottom:7px;flex-wrap:wrap}
.tag{font-size:10px;letter-spacing:.1em;padding:2px 7px;border:1px solid var(--line-2);border-radius:2px;color:var(--sub)}
.tag.short{color:var(--clay);border-color:rgba(168,98,47,.4)}
.tag.mid{color:var(--indigo);border-color:rgba(70,83,110,.4)}
.tag.long{color:var(--green);border-color:rgba(58,90,78,.4)}
.tag.ns{color:var(--faint);border-color:var(--line-2)}
.tag.held{color:var(--gold);border-color:rgba(138,115,40,.42)}
.tag.done{color:var(--faint);text-decoration:line-through}
.goal h4{font-size:17px;letter-spacing:.02em;line-height:1.45}
.gcontent{margin:9px 0 0;padding:0;list-style:none}
.gcontent li{position:relative;padding-left:15px;font-size:12.5px;color:var(--ink-2);line-height:1.85}
.gcontent li::before{content:"";position:absolute;left:1px;top:.95em;width:6px;height:1px;background:var(--line-2)}
.gwhy{font-size:12.5px;color:var(--sub);margin-top:7px;line-height:1.72;white-space:pre-line}
.gmetric{
  display:flex;gap:9px;align-items:baseline;
  font-size:12px;color:var(--ink-2);margin-top:9px;padding:2px 0 2px 11px;border-left:2px solid var(--clay);
}
.gmetric .lb{flex:0 0 auto;font-size:10.5px;letter-spacing:.11em;color:var(--clay)}
.gdead{font-size:11px;color:var(--faint);margin-top:7px;font-variant-numeric:tabular-nums}
.gr{text-align:right;display:flex;flex-direction:column;align-items:flex-end;gap:9px;min-width:82px}
.gr .pnum{font-family:var(--serif);font-size:26px;font-variant-numeric:tabular-nums;line-height:1}
.gprog{width:88px;height:4px;background:var(--line);position:relative}
.gprog i{position:absolute;inset:0 auto 0 0;transition:width .6s var(--ease)}
.rowact{display:flex;gap:6px;opacity:0;transition:opacity .16s}
.goal:hover .rowact,.work:hover .rowact,.tc:hover .rowact,.pc:hover .rowact,.note:hover .rowact{opacity:1}
.rowact button{font-size:11px;color:var(--faint);padding:2px 5px;border-radius:2px}
.rowact button:hover{color:var(--ink);background:var(--line)}

/* ═══════ 工作项 ═══════ */
.works{display:flex;flex-direction:column}
.work{
  display:grid;grid-template-columns:auto 1fr auto;gap:13px;align-items:flex-start;
  padding:13px 0;border-top:1px solid var(--line);cursor:pointer;transition:background .16s;
}
.work:hover{background:rgba(255,255,255,.55)}
.work:first-child{border-top:0}
.wtick{width:14px;height:14px;border:1.5px solid var(--line-2);border-radius:50%;margin-top:4px;flex:0 0 14px;transition:all .18s}
.wtick:hover{border-color:var(--green)}
.work.done .wtick{background:var(--green);border-color:var(--green);position:relative}
.work.done .wtick::after{content:"";position:absolute;left:3.5px;top:1px;width:4px;height:7px;border:solid #fff;border-width:0 1.6px 1.6px 0;transform:rotate(42deg)}
.wt{font-size:14.5px;line-height:1.5}
.work.done .wt{color:var(--faint);text-decoration:line-through;text-decoration-color:var(--line-2)}
.wmeta{display:flex;gap:9px;align-items:center;margin-top:5px;flex-wrap:wrap;font-size:11px;color:var(--faint)}
.wnote{font-size:12px;color:var(--sub);margin-top:5px;line-height:1.6;white-space:pre-line}
.p0{color:var(--rust);font-weight:600}.p1{color:var(--clay)}.p2{color:var(--faint)}
.st-todo{color:var(--faint)}.st-doing{color:var(--clay)}.st-blocked{color:var(--rust)}.st-done{color:var(--green)}
.wr{display:flex;align-items:center;gap:9px}
.wdue{font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums;white-space:nowrap}
.wdue.over{color:var(--rust)}

/* ═══════ 团队 ═══════ */
.team{display:grid;grid-template-columns:repeat(auto-fill,minmax(258px,1fr));gap:1px;background:var(--line)}
.tc{background:var(--sheet);padding:16px 18px 14px;display:flex;flex-direction:column;transition:background .16s}
.tc:hover{background:#fff}
.tc-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.tc-n{display:flex;align-items:center;gap:7px;font-family:var(--serif);font-size:16px;letter-spacing:.02em}
.tc-r{font-size:11px;color:var(--faint);white-space:nowrap}
.tc-role{font-size:11.5px;color:var(--faint);margin-top:2px}
.tc-bd{flex:1;margin-top:11px}
.tc-f{display:flex;gap:8px;align-items:baseline;font-size:12.5px;color:var(--ink-2);line-height:1.65;margin-top:6px}
.tc-bd .tc-f:first-child{margin-top:0}
.tc-f b{flex:0 0 27px;font-weight:600;color:var(--sub);font-size:10.5px;letter-spacing:.06em}
.tc-f .na{color:var(--faint);font-size:11.5px}
.tc-l{display:flex;align-items:center;gap:9px;margin-top:13px}
.tc-l .tr{flex:1;height:4px;background:var(--line);position:relative}
.tc-l .tr i{position:absolute;inset:0 auto 0 0}
.tc-l .n{font-size:11px;color:var(--sub);font-variant-numeric:tabular-nums;min-width:30px;text-align:right}
.mood{width:6px;height:6px;border-radius:50%;flex:0 0 6px;display:inline-block}
.mood.good{background:var(--sage)}.mood.flat{background:var(--gold)}.mood.risk{background:var(--rust)}
.tc-act{margin-top:12px;padding-top:9px;border-top:1px solid var(--line)}

.loads{display:flex;flex-direction:column;gap:11px}
.ld{display:grid;grid-template-columns:64px 1fr 34px;gap:11px;align-items:center;font-size:12px}
.ld .tr{height:6px;background:var(--line);position:relative}
.ld .tr i{position:absolute;inset:0 auto 0 0;transition:width .6s var(--ease)}
.ld .n{text-align:right;color:var(--sub);font-variant-numeric:tabular-nums}

/* ═══════ 产品 ═══════ */
.stages{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:22px}
.stg{border-top:2px solid var(--line-2);padding-top:13px}
.stg-h{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:12px}
.stg-h .n{font-size:11px;letter-spacing:.13em;color:var(--sub)}
.stg-h .c{font-family:var(--serif);font-size:15px;color:var(--faint)}
.pc{padding:13px 0;border-bottom:1px solid var(--line);cursor:pointer;position:relative;transition:background .16s}
.pc:last-child{border-bottom:0}
.pc:hover{background:rgba(255,255,255,.6)}
.pc-n{font-size:14px;line-height:1.45;display:flex;align-items:center;gap:7px;padding-right:58px}
.pc-v{font-size:10.5px;color:var(--faint);font-variant-numeric:tabular-nums;margin-top:4px}
.pc-own{display:flex;gap:9px;flex-wrap:wrap;margin-top:7px}
.pc-own span{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ink-2)}
.pc-own i{font-style:normal;font-size:9px;letter-spacing:.09em;color:var(--faint);border:1px solid var(--line-2);border-radius:2px;padding:1px 4px;line-height:1.3}
.pc-k{font-size:11.5px;color:var(--sub);margin-top:6px;line-height:1.6}
.pc-m{font-size:11.5px;color:var(--ink-2);margin-top:6px}
.pc-m::before{content:"→ ";color:var(--faint)}
.h-dot{width:6px;height:6px;border-radius:50%;flex:0 0 6px}
.h-健康{background:var(--sage)}.h-关注{background:var(--gold)}.h-风险{background:var(--rust)}

/* ═══════ 要点 ═══════ */
.notes{display:flex;flex-direction:column}
.note{display:grid;grid-template-columns:92px 1fr auto;gap:16px;padding:15px 0;border-top:1px solid var(--line);cursor:pointer;transition:background .16s}
.note:hover{background:rgba(255,255,255,.55)}
.note:first-child{border-top:0}
.nd{font-size:11.5px;color:var(--faint);font-variant-numeric:tabular-nums;padding-top:2px}
.nd b{display:block;font-family:var(--serif);font-size:15px;color:var(--ink-2);font-weight:400}
.nc{font-size:13.5px;line-height:1.75;color:var(--ink-2);white-space:pre-line}
.ntag{font-size:10px;letter-spacing:.1em;color:var(--clay);border:1px solid rgba(168,98,47,.32);padding:1px 6px;border-radius:2px;margin-right:8px;vertical-align:1px}

/* ═══════ 动态流 ═══════ */
.feed{display:flex;flex-direction:column}
.fi{display:grid;grid-template-columns:78px 1fr;gap:16px;padding:9px 0;font-size:12.5px;color:var(--ink-2)}
.fi .t{font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums;padding-top:1px;white-space:nowrap}
.fi .a{color:var(--faint);font-size:11px}
.act-c{color:var(--green)}.act-u{color:var(--indigo)}.act-d{color:var(--rust)}.act-g{color:var(--clay)}
.empty{padding:26px 0;color:var(--faint);font-size:12.5px;text-align:center;font-family:var(--serif);letter-spacing:.04em}

/* ═══════ 周报 ═══════ */
.report-wrap{border:1px solid var(--line-2);background:#fff;border-radius:3px;overflow:hidden}
.report-head{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding:9px 16px;border-bottom:1px solid var(--line);background:var(--paper);
}
.report-meta{flex:1;min-width:0;display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--sub)}
.report-head .seg{margin-left:auto;flex:0 0 auto}
.report-box{
  width:100%;min-height:440px;border:0;padding:22px 24px;resize:vertical;outline:none;
  font-family:var(--serif);font-size:14px;line-height:1.95;color:var(--ink);background:#fff;
  display:block;
}
.report-bar{display:flex;gap:9px;align-items:center;padding:12px 16px;border-top:1px solid var(--line);background:var(--sheet);flex-wrap:wrap}
.spacer{flex:1}

/* ═══════ Markdown 预览 ═══════ */
[hidden]{display:none!important}
.report-md{
  padding:26px 30px;min-height:440px;background:#fff;
  font-family:var(--serif);font-size:14.5px;line-height:1.95;color:var(--ink);
}
.report-md h1,.report-md h2,.report-md h3,.report-md h4{line-height:1.4}
.report-md h1{
  font-size:23px;letter-spacing:.02em;margin:0 0 16px;padding-bottom:11px;border-bottom:1px solid var(--line-2);
}
.report-md h2{
  font-size:17px;letter-spacing:.04em;margin:26px 0 11px;padding-bottom:6px;border-bottom:1px solid var(--line);
}
.report-md h2:first-child{margin-top:0}
.report-md h3{font-size:15px;margin:19px 0 8px}
.report-md h4{font-size:14px;margin:16px 0 6px;color:var(--ink-2)}
.report-md p{margin:0 0 11px}
.report-md ul{margin:0 0 11px;padding:0;list-style:none}
.report-md li{position:relative;padding-left:19px;margin-bottom:4px}
.report-md ul>li::before{content:"—";position:absolute;left:2px;color:var(--faint)}
.report-md ul ul{margin:4px 0 2px}
.report-md ul ul>li::before{content:"·";left:4px}
.report-md ol{counter-reset:oli;margin:0 0 11px;padding:0;list-style:none}
.report-md ol>li{counter-increment:oli;padding-left:24px}
.report-md ol>li::before{
  content:counter(oli) ".";position:absolute;left:2px;color:var(--faint);
  font-family:var(--sans);font-size:12.5px;font-variant-numeric:tabular-nums;
}
.report-md blockquote{
  margin:0 0 15px;padding:1px 0 1px 14px;border-left:2px solid var(--clay);
  color:var(--sub);font-size:13px;line-height:1.8;
}
.report-md blockquote p{margin:0}
.report-md strong{font-weight:600}
.report-md em{font-style:italic}
.report-md del{color:var(--faint)}
.report-md code{
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;
  background:var(--paper);padding:1.5px 5px;border-radius:2px;
}
.report-md hr{border:0;border-top:1px solid var(--line);margin:20px 0}
.report-md .md-empty{color:var(--faint);font-family:var(--sans);font-size:13px}
.print-area{display:none}

/* ═══════ 抽屉 ═══════ */
.sheet-mask{position:fixed;inset:0;background:rgba(34,31,26,.28);opacity:0;pointer-events:none;transition:opacity .26s var(--ease);z-index:40;backdrop-filter:blur(1.5px)}
.sheet-mask.on{opacity:1;pointer-events:auto}
.sheet{
  position:fixed;top:0;right:0;bottom:0;width:430px;max-width:100vw;background:var(--sheet);
  border-left:1px solid var(--line-2);z-index:50;display:flex;flex-direction:column;
  transform:translateX(102%);transition:transform .3s var(--ease);box-shadow:-18px 0 44px rgba(34,31,26,.07);
}
.sheet.on{transform:none}
.sheet-h{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--line)}
.sheet-t{font-family:var(--serif);font-size:17px;letter-spacing:.04em}
.x{font-size:15px;color:var(--faint);padding:3px 6px;border-radius:3px}
.x:hover{background:var(--line);color:var(--ink)}
.sheet-b{flex:1;overflow-y:auto;padding:20px 22px;display:flex;flex-direction:column;gap:16px}
.sheet-f{display:flex;align-items:center;gap:9px;padding:14px 22px;border-top:1px solid var(--line);background:var(--paper)}

.fld{display:flex;flex-direction:column;gap:6px}
.fld label{font-size:10.5px;letter-spacing:.11em;color:var(--sub);text-transform:uppercase}
.fld input,.fld textarea,.fld select{
  border:1px solid var(--line-2);background:#fff;border-radius:3px;padding:9px 11px;outline:none;
  transition:border-color .16s;width:100%;font-size:13.5px;line-height:1.6;
}
.fld textarea{resize:vertical;min-height:74px;font-family:var(--sans)}
.fld input:focus,.fld textarea:focus,.fld select:focus{border-color:var(--ink-2)}
.fld .fh{font-size:11px;color:var(--faint)}
.fld-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.range{display:flex;align-items:center;gap:12px}
.range input[type=range]{flex:1;accent-color:var(--green);padding:0;border:0;background:none}
.range .rv{font-family:var(--serif);font-size:19px;min-width:46px;text-align:right;font-variant-numeric:tabular-nums}

/* ═══════ 未保存提示 ═══════ */
.ask-mask{position:fixed;inset:0;background:rgba(34,31,26,.26);z-index:60;opacity:0;pointer-events:none;transition:opacity .22s var(--ease)}
.ask-mask.on{opacity:1;pointer-events:auto}
.ask{
  position:fixed;left:50%;top:50%;z-index:70;width:376px;max-width:calc(100vw - 36px);
  background:var(--sheet);border:1px solid var(--line-2);border-radius:4px;padding:22px 22px 18px;
  box-shadow:0 26px 64px rgba(34,31,26,.16);
  opacity:0;pointer-events:none;transform:translate(-50%,-47%) scale(.985);transition:all .24s var(--ease);
}
.ask.on{opacity:1;pointer-events:auto;transform:translate(-50%,-50%) scale(1)}
.ask-t{font-family:var(--serif);font-size:17.5px;letter-spacing:.04em}
.ask-d{font-size:12.5px;color:var(--sub);margin-top:9px;line-height:1.78}
.ask-b{display:flex;gap:9px;align-items:center;margin-top:20px;flex-wrap:wrap}

/* ═══════ Toast ═══════ */
.toast{
  position:fixed;left:50%;bottom:34px;transform:translate(-50%,14px);z-index:80;
  background:var(--ink);color:var(--paper);font-size:12.5px;padding:9px 18px;border-radius:3px;
  opacity:0;pointer-events:none;transition:all .26s var(--ease);letter-spacing:.03em;max-width:80vw;text-align:center;
}
.toast.on{opacity:1;transform:translate(-50%,0)}

/* ═══════ 图表 ═══════ */
.chart{width:100%}
.chart svg{width:100%;height:auto;display:block;overflow:visible}
.legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:12px}
.legend span{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--sub)}
.legend i{width:8px;height:8px;border-radius:50%}

/* ═══════ 移动端 ═══════ */
.tabbar{display:none}
@media(max-width:900px){
  .rail{display:none}
  .app{flex-direction:column}
  .main{flex:1;min-height:0}
  .topbar{padding:14px 18px 12px;align-items:center}
  .hello{font-size:18px}
  .tb-r .btn{padding:6px 11px;font-size:12px}
  .view{padding:0 18px calc(78px + env(safe-area-inset-bottom))}
  .band.two{grid-template-columns:1fr;gap:30px}
  .figs{grid-template-columns:1fr 1fr;gap:0}
  .fig{padding:12px 0 12px 16px;border-left:1px solid var(--line)}
  .fig:nth-child(odd){padding-left:0;border-left:0}
  .fig:nth-child(n+3){border-top:1px solid var(--line)}
  .fig .v{font-size:30px}
  .sech h2{font-size:21px}
  .stages{grid-template-columns:1fr 1fr;gap:18px}
  .goal{grid-template-columns:64px 1fr;gap:14px;align-items:start}
  .gr{grid-column:2;flex-direction:row;align-items:center;justify-content:flex-start}
  .gr .pnum{font-size:20px}
  .gprog{width:120px}
  .gdate{border-right:0;padding-right:0}
  .gdate b{font-size:17px}
  .gdate em{margin-top:5px}
  .note{grid-template-columns:1fr;gap:7px}
  .nd b{display:inline;margin-right:7px}
  .rowact{opacity:1}
  .report-box{min-height:340px;padding:18px}
  .report-head{padding:9px 14px;gap:10px}
  .report-meta{flex:1 1 100%;gap:10px}   /* 手机上周期信息独占一行，切换落到下一行右侧 */

  .tabbar{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:30;
    background:rgba(251,249,245,.96);backdrop-filter:blur(10px);border-top:1px solid var(--line-2);
    padding-bottom:env(safe-area-inset-bottom);
  }
  .tab{flex:1;padding:8px 0 7px;display:flex;flex-direction:column;align-items:center;gap:3px;font-size:10px;color:var(--faint);transition:color .16s}
  .tab i{font-size:16px;line-height:1;font-style:normal}
  .tab.is-on{color:var(--ink)}
  .tab.is-on i{color:var(--green)}

  .sheet{width:100%;top:auto;height:88vh;border-left:0;border-top:1px solid var(--line-2);border-radius:14px 14px 0 0;transform:translateY(102%)}
  .sheet.on{transform:none}
  .sheet-mask{background:rgba(34,31,26,.4)}
  .sheet-f{padding-bottom:calc(14px + env(safe-area-inset-bottom))}
}
@media(max-width:420px){
  .stages{grid-template-columns:1fr}
  .figs{grid-template-columns:1fr 1fr}
}
@media print{
  .rail,.tabbar,.topbar,.grain,.report-bar,.report-head,.sheet,.sheet-mask,.toast,.ask,.ask-mask{display:none!important}
  body{overflow:visible;background:#fff}
  .app{display:block;height:auto}
  .scroll{overflow:visible}
  .view{display:none!important}
  .view.is-on{display:block!important;max-width:none;padding:0}
  #view-report .sech,#view-report .band:not(:first-child){display:none}
  .report-wrap{border:0}
  /* 只隐藏编辑框与预览框（用 id 精确命中，避免误伤 print-area 内的同类） */
  #reportBox,#reportMd{display:none!important}
  /* 打印始终输出渲染后的文档，避免 textarea 只打印可见区域 */
  .print-area{display:block;padding:0}
  .print-area .report-md{min-height:0;padding:0}
  .print-area h1{page-break-after:avoid}
  .print-area h2{page-break-after:avoid}
  .print-area li,.print-area blockquote{page-break-inside:avoid}
}
