:root {
  --paper: #efede6;
  --paper-deep: #e4e0d5;
  --paper-light: #f8f6f0;
  --ink: #20231f;
  --ink-soft: #565950;
  --muted: #8a8a80;
  --rule: rgba(32, 35, 31, .17);
  --rule-dark: rgba(248, 246, 240, .19);
  --vermilion: #a04432;
  --vermilion-soft: #c67a65;
  --moss: #59634f;
  --ochre: #b38a4f;
  --white: #fbfaf6;
  --shadow: 0 22px 55px rgba(39, 37, 31, .11);
  --serif: "Songti SC", "STSong", "Noto Serif CJK SC", "Source Han Serif SC", Georgia, serif;
  --sans: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, sans-serif;
  /* 语义扩展：纸面浮层 + 次级灰文本（暗色模式会覆盖） */
  --surface: rgba(255, 255, 255, .5);
  --surface-strong: rgba(255, 255, 255, .75);
  --ink-faint: #9aa091;
  --ink-dim: #6b705f;
}

/* 暗色模式：跟随系统 / 手动切换（app.js 用 data-theme 属性控制） */
:root[data-theme="dark"] {
  --paper: #191b17;
  --paper-deep: #12140f;
  --paper-light: #232620;
  --ink: #e9e7de;
  --ink-soft: #b9b7ad;
  --muted: #878a80;
  --rule: rgba(233, 231, 222, .16);
  --rule-dark: rgba(233, 231, 222, .2);
  --vermilion: #c4654f;
  --vermilion-soft: #d08370;
  --moss: #8aa07a;
  --ochre: #c9a05f;
  --white: #232620;
  --shadow: 0 22px 55px rgba(0, 0, 0, .55);
  --surface: rgba(255, 255, 255, .05);
  --surface-strong: rgba(255, 255, 255, .09);
  --ink-faint: #8b8e84;
  --ink-dim: #6f7269;
  color-scheme: dark;
}

* { box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
  margin: 0;
  min-width: 1080px;
  color: var(--ink);
  background: var(--paper);
  font-family: var(--sans);
  -webkit-font-smoothing: antialiased;
}

button, input, textarea, select { font: inherit; }
button { color: inherit; }

.grain {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 100;
  opacity: .18;
  mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.11'/%3E%3C/svg%3E");
}

.app-shell { min-height: 100vh; }

.sidebar {
  position: fixed;
  inset: 0 auto 0 0;
  width: 248px;
  z-index: 20;
  display: flex;
  flex-direction: column;
  padding: 36px 28px 26px;
  color: var(--paper-light);
  background: #22251f;
  border-right: 1px solid rgba(255,255,255,.08);
  overflow: hidden;
  touch-action: pan-y;
  overscroll-behavior: contain;
}

.sidebar::after {
  content: "";
  position: absolute;
  right: 14px;
  top: 0;
  bottom: 0;
  width: 1px;
  background: rgba(255,255,255,.07);
}

.brand { display: flex; align-items: center; gap: 13px; padding-bottom: 40px; flex-shrink: 0; }
.brand-mark {
  width: 44px;
  height: 44px;
  display: grid;
  place-items: center;
  color: var(--paper-light);
  border: 1px solid rgba(255,255,255,.55);
  font: 24px/1 var(--serif);
  transform: rotate(-2deg);
}
.brand-name { font: 22px/1.1 var(--serif); letter-spacing: .13em; }
.brand-en { margin-top: 6px; color: #9b9f94; font-size: 9px; letter-spacing: .26em; }

.nav { display: grid; gap: 4px; overflow-y: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; min-height: 0; }
.nav-item {
  position: relative;
  width: 100%;
  display: flex;
  align-items: baseline;
  gap: 16px;
  padding: 13px 5px;
  color: #999d92;
  text-align: left;
  background: transparent;
  border: 0;
  cursor: pointer;
  transition: color .2s ease, transform .2s ease;
}
.nav-item::after {
  content: "";
  position: absolute;
  right: -28px;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: transparent;
}
.nav-item:hover { color: var(--paper-light); transform: translateX(2px); }
.nav-item.active { color: var(--paper-light); }
.nav-item.active::after { background: var(--vermilion-soft); }
.nav-index { font: 10px/1 var(--serif); color: #666b61; letter-spacing: .05em; }
.nav-item.active .nav-index { color: var(--vermilion-soft); }

.sidebar-note { margin-top: auto; padding: 20px 0 22px; border-top: 1px solid rgba(255,255,255,.12); flex-shrink: 0; }
.sidebar-note blockquote { margin: 12px 0 14px; color: #d7d5cb; font: 15px/1.85 var(--serif); }
.sidebar-footer { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding-top: 16px; border-top: 1px solid rgba(255,255,255,.1); flex-shrink: 0; }
.local-indicator { color: var(--ink-dim); font-size: 10px; white-space: nowrap; }
.local-indicator i { display: inline-block; width: 5px; height: 5px; margin-right: 5px; border-radius: 50%; background: var(--moss); }

.main { margin-left: 248px; min-height: 100vh; }
.topbar {
  height: 86px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 48px;
  border-bottom: 1px solid var(--rule);
}
.date-line { font: 15px/1.2 var(--serif); letter-spacing: .04em; }
.weather-line { margin-top: 6px; color: var(--muted); font-size: 11px; letter-spacing: .05em; }
.top-actions { display: flex; align-items: center; gap: 12px; }
.mobile-menu { display: none; }

.primary-button, .quiet-button, .inverse-button, .text-button, .icon-text-button, .tool-button, .control-button, .circle-button {
  border: 0;
  cursor: pointer;
}
.primary-button {
  padding: 12px 21px;
  color: var(--paper-light);
  background: var(--vermilion);
  border: 1px solid var(--vermilion);
  transition: transform .18s ease, background .18s ease;
}
.primary-button:hover { transform: translateY(-1px); background: #8f3828; }
.quiet-button {
  padding: 11px 17px;
  color: var(--ink);
  background: transparent;
  border: 1px solid var(--rule);
}
.quiet-button:hover { background: rgba(255,255,255,.35); }
.text-button, .icon-text-button { padding: 2px; background: transparent; color: var(--ink-soft); font-size: 11px; letter-spacing: .05em; }
.text-button:hover, .icon-text-button:hover { color: var(--vermilion); }
.sidebar .text-button, .sidebar .icon-text-button { color: #858a80; }
.sidebar .text-button:hover, .sidebar .icon-text-button:hover { color: var(--paper-light); }
.circle-button { width: 32px; height: 32px; border-radius: 50%; background: var(--ink); color: var(--paper); font-size: 18px; }

.view { display: none; padding: 52px 48px 70px; animation: reveal .35s ease; }
.view.active { display: block; }
@keyframes reveal { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } }

.eyebrow { color: var(--vermilion); font-size: 9px; font-weight: 650; letter-spacing: .23em; text-transform: uppercase; }
.ink-panel .eyebrow { color: #c6816e; }

.hero-row { display: flex; justify-content: space-between; align-items: flex-end; min-height: 210px; padding: 5px 0 39px; }
.hero-row h1, .page-intro h1 {
  margin: 18px 0 0;
  font: 400 45px/1.28 var(--serif);
  letter-spacing: .025em;
}
.hero-row h1 em { color: var(--vermilion); font-style: normal; }
.hero-aside { min-width: 225px; padding: 22px 0 5px 28px; border-left: 1px solid var(--rule); }
.issue-number { color: var(--vermilion); font: 12px/1 var(--serif); letter-spacing: .18em; }
.hero-aside p { margin: 15px 0 0; color: var(--ink-soft); font: 13px/1.85 var(--serif); }

.rule-heading { display: flex; align-items: center; justify-content: space-between; padding: 11px 0; border-top: 1px solid var(--ink); border-bottom: 1px solid var(--rule); }
.rule-heading span:first-child { font: 15px/1 var(--serif); letter-spacing: .08em; }
.rule-heading span:last-child { color: var(--muted); font-size: 8px; letter-spacing: .22em; }

.goal-grid { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 1px; margin: 22px 0 46px; background: var(--rule); border: 1px solid var(--rule); }
.goal-card { position: relative; min-height: 178px; padding: 26px 28px 24px; background: var(--paper); overflow: hidden; }
.goal-top { display: flex; justify-content: space-between; align-items: baseline; }
.goal-name { font: 17px/1 var(--serif); }
.goal-tag { color: var(--muted); font-size: 9px; letter-spacing: .13em; }
.goal-number { margin-top: 24px; font: 36px/1 var(--serif); }
.goal-number small { color: var(--muted); font: 13px/1 var(--sans); }
.goal-progress { position: absolute; left: 28px; right: 28px; bottom: 23px; height: 2px; background: rgba(32,35,31,.12); }
.goal-progress i { display: block; height: 100%; background: var(--vermilion); }
.goal-status { position: absolute; right: 27px; bottom: 32px; color: var(--muted); font-size: 9px; }
.goal-card:nth-child(2) .goal-progress i { background: var(--moss); }
.goal-card-actions { position: absolute; right: 27px; top: 64px; display: flex; gap: 7px; }
.goal-card-actions button { min-height: 28px; padding: 6px 9px; color: var(--muted); background: transparent; border: 1px solid var(--rule); font-size: 8px; letter-spacing: .06em; cursor: pointer; }
.goal-card-actions button:first-child { color: var(--vermilion); border-color: rgba(160,68,50,.25); }
.goal-card-actions button:hover { color: var(--vermilion); border-color: var(--vermilion); }

.dashboard-grid { display: grid; grid-template-columns: minmax(0, 1.62fr) minmax(315px, .85fr); gap: 18px; }
.paper-panel { background: rgba(249,247,240,.7); border: 1px solid var(--rule); box-shadow: 0 12px 30px rgba(55,51,43,.035); }
.ink-panel { color: var(--paper-light); background: #252821; }
.schedule-panel, .today-panel { min-height: 400px; padding: 30px; }
.panel-heading { display: flex; justify-content: space-between; align-items: flex-start; }
.panel-heading h2 { margin: 9px 0 0; font: 25px/1 var(--serif); font-weight: 400; }
.panel-heading.inverse h2 { color: var(--paper-light); }
.handwritten { color: #777d70; font: italic 15px/1 var(--serif); transform: rotate(-6deg); }

.week-strip { display: grid; grid-template-columns: repeat(7,1fr); margin: 30px 0 20px; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); }
.week-day { position: relative; padding: 12px 4px 13px; text-align: center; color: var(--muted); font-size: 9px; }
.week-day strong { display: block; margin-top: 7px; color: var(--ink); font: 17px/1 var(--serif); font-weight: 400; }
.week-day.today { color: var(--vermilion); }
.week-day.today strong { width: 29px; height: 29px; display: grid; place-items: center; margin: 3px auto -5px; color: var(--paper-light); background: var(--vermilion); border-radius: 50%; }

.mini-timeline { display: grid; gap: 16px; }
.mini-row { display: grid; grid-template-columns: 135px minmax(0,1fr); gap: 16px; align-items: center; }
.mini-project-name { min-width: 0; }
.mini-project-name small { display: block; margin-bottom: 4px; color: var(--vermilion); font-size: 8px; letter-spacing: .15em; }
.mini-project-name strong { display: block; overflow: hidden; font: 12px/1.3 var(--serif); font-weight: 400; text-overflow: ellipsis; white-space: nowrap; }
.mini-track { position: relative; height: 26px; display: grid; grid-template-columns: repeat(7,1fr); background-image: linear-gradient(to right, var(--rule) 1px, transparent 1px); background-size: calc(100% / 7) 100%; border-bottom: 1px solid var(--rule); }
.mini-bar { align-self: center; height: 8px; min-width: 5px; background: var(--vermilion); }
.mini-row.podcast .mini-project-name small { color: var(--moss); }
.mini-row.podcast .mini-bar { background: var(--moss); }

.task-list { margin: 27px 0 22px; }
.task-item { display: grid; grid-template-columns: 25px 1fr auto; gap: 11px; align-items: start; padding: 15px 0; border-bottom: 1px solid var(--rule-dark); }
.task-check { width: 16px; height: 16px; display: grid; place-items: center; margin-top: 1px; padding: 0; color: transparent; background: transparent; border: 1px solid #73786e; border-radius: 50%; cursor: pointer; }
.task-item.done .task-check { color: var(--ink); background: #b8b9ad; border-color: #b8b9ad; }
.task-item.done .task-copy { color: #6f746a; text-decoration: line-through; }
.task-copy { color: #e4e1d7; font: 13px/1.5 var(--serif); }
.task-copy small { display: block; margin-top: 5px; color: #7d8277; font: 9px/1 var(--sans); letter-spacing: .08em; }
.task-stage { padding-top: 2px; color: #8e9388; font-size: 9px; }
.inverse-button { width: 100%; padding: 12px; color: #aaa99f; background: transparent; border: 1px solid var(--rule-dark); }
.inverse-button:hover { color: var(--paper-light); border-color: rgba(255,255,255,.35); }

.status-section { margin-top: 54px; }
.project-ledger { border-bottom: 1px solid var(--rule); }
.empty-action { width: 100%; min-height: 112px; display: flex; align-items: center; justify-content: space-between; padding: 0 24px; color: var(--ink); background: transparent; border: 0; border-bottom: 1px solid var(--rule); cursor: pointer; }
.empty-action strong { font: 16px/1.4 var(--serif); font-weight: 400; }
.empty-action span { color: var(--vermilion); font-size: 9px; }
.empty-action:hover { background: rgba(255,255,255,.32); }
.ledger-row { display: grid; grid-template-columns: 48px 1.6fr .9fr 1fr 42px; align-items: center; min-height: 86px; border-bottom: 1px solid var(--rule); cursor: pointer; transition: padding .2s ease, background .2s ease; }
.ledger-row:last-child { border-bottom: 0; }
.ledger-row:hover { padding: 0 12px; background: rgba(255,255,255,.32); }
.ledger-index { color: var(--muted); font: 10px/1 var(--serif); }
.ledger-title small { display: block; margin-bottom: 7px; color: var(--vermilion); font-size: 8px; letter-spacing: .17em; }
.ledger-row.podcast .ledger-title small { color: var(--moss); }
.ledger-title strong { font: 16px/1.3 var(--serif); font-weight: 400; }
.ledger-stage { color: var(--ink-soft); font-size: 11px; }
.ledger-progress-wrap { padding-right: 25px; }
.ledger-progress-copy { display: flex; justify-content: space-between; margin-bottom: 7px; color: var(--muted); font-size: 8px; }
.ledger-progress { height: 2px; background: var(--rule); }
.ledger-progress i { display: block; height: 100%; background: var(--vermilion); }
.ledger-row.podcast .ledger-progress i { background: var(--moss); }
.ledger-arrow { font-size: 17px; color: var(--muted); }

.insight-strip { display: grid; grid-template-columns: 40px 1fr auto; align-items: center; gap: 20px; margin-top: 46px; padding: 22px 26px; color: var(--paper-light); background: var(--vermilion); }
.insight-symbol { font: 27px/1 var(--serif); }
.insight-strip .eyebrow { color: #e6b7aa; }
.insight-strip p { margin: 6px 0 0; font: 13px/1.5 var(--serif); }
.text-button.light { color: #f2d4cb; }
.text-button.light:hover { color: white; }

.page-intro { display: flex; justify-content: space-between; align-items: flex-end; padding: 14px 0 39px; border-bottom: 1px solid var(--ink); }
.page-intro h1 { font-size: 42px; }
.page-intro p { margin: 13px 0 0; color: var(--ink-soft); font: 13px/1.7 var(--serif); }
.segmented { display: inline-flex; padding: 3px; border: 1px solid var(--rule); }
.segmented button { padding: 8px 14px; color: var(--muted); background: transparent; border: 0; font-size: 10px; cursor: pointer; }
.segmented button.active { color: var(--paper-light); background: var(--ink); }
.timeline-legend { display: flex; gap: 24px; margin: 20px 0 17px; color: var(--muted); font-size: 9px; letter-spacing: .1em; }
.dot { display: inline-block; width: 6px; height: 6px; margin-right: 7px; border-radius: 50%; }
.dot.article { background: var(--vermilion); }
.dot.podcast { background: var(--moss); }
.today-line-key { display: inline-block; width: 1px; height: 10px; margin: 0 7px -2px 0; background: var(--vermilion); }
.full-timeline { position: relative; min-height: 490px; padding: 0 0 30px; overflow-x: auto; }
.timeline-canvas { min-width: 780px; }
.timeline-header-row, .timeline-project-row { display: grid; grid-template-columns: 210px minmax(600px,1fr); }
.timeline-header-row { position: sticky; top: 0; z-index: 3; background: var(--paper-light); border-bottom: 1px solid var(--rule); }
.timeline-side-head { padding: 17px 20px; color: var(--muted); font-size: 9px; letter-spacing: .15em; }
.timeline-days { position: relative; display: grid; border-left: 1px solid var(--rule); }
.timeline-day { padding: 12px 3px; color: var(--muted); text-align: center; border-right: 1px solid var(--rule); font-size: 8px; }
.timeline-day strong { display: block; margin-top: 5px; color: var(--ink); font: 12px/1 var(--serif); font-weight: 400; }
.timeline-day.today { color: var(--vermilion); background: rgba(160,68,50,.05); }
.timeline-project-row { min-height: 104px; border-bottom: 1px solid var(--rule); }
.timeline-project-copy { padding: 23px 20px; }
.timeline-project-copy small { display: block; margin-bottom: 7px; color: var(--vermilion); font-size: 8px; letter-spacing: .14em; }
.timeline-project-row.podcast .timeline-project-copy small { color: var(--moss); }
.timeline-project-copy strong { display: block; overflow: hidden; font: 14px/1.35 var(--serif); font-weight: 400; text-overflow: ellipsis; white-space: nowrap; }
.timeline-project-copy span { display: block; margin-top: 8px; color: var(--muted); font-size: 9px; }
.timeline-lanes { position: relative; display: grid; border-left: 1px solid var(--rule); background-image: linear-gradient(to right, var(--rule) 1px, transparent 1px); }
.phase-bar { position: relative; align-self: center; height: 31px; min-width: 4px; display: flex; align-items: center; justify-content: center; overflow: hidden; color: rgba(255,255,255,.92); background: var(--vermilion); border-right: 1px solid rgba(255,255,255,.25); font-size: 8px; white-space: nowrap; }
.phase-bar.complete { background: #615a50; }
.phase-bar.upcoming { opacity: .33; }
.timeline-project-row.podcast .phase-bar { background: var(--moss); }
.timeline-project-row.podcast .phase-bar.complete { background: #5d5b54; }
.today-marker { position: absolute; top: 0; bottom: 0; width: 1px; z-index: 2; pointer-events: none; background: var(--vermilion); }
.today-marker::before { content: ""; position: absolute; top: -3px; left: -3px; width: 7px; height: 7px; border-radius: 50%; background: var(--vermilion); }
.timeline-footnote { margin-top: 12px; color: var(--muted); font-size: 9px; }

.project-tools { display: flex; align-items: center; gap: 14px; }
.projects-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 16px; padding-top: 28px; }
.project-card { position: relative; min-height: 310px; display: flex; flex-direction: column; padding: 27px; background: rgba(249,247,240,.78); border: 1px solid var(--rule); cursor: pointer; transition: transform .22s ease, box-shadow .22s ease; }
.project-card:hover { transform: translateY(-3px); box-shadow: var(--shadow); }
.project-card-del { position: absolute; top: 14px; right: 14px; z-index: 2; width: 26px; height: 26px; display: grid; place-items: center; border: 0; border-radius: 50%; background: rgba(32,35,31,.05); color: var(--muted); font-size: 15px; line-height: 1; cursor: pointer; opacity: 0; transition: opacity .18s, background .18s, color .18s; }
.project-card:hover .project-card-del { opacity: 1; }
.project-card-del:hover { background: rgba(179,58,38,.1); color: var(--vermilion); }
@media (hover: none) { .project-card-del { opacity: .55; } }
.project-card::before { content: ""; position: absolute; left: -1px; top: 27px; width: 3px; height: 37px; background: var(--vermilion); }
.project-card.podcast::before { background: var(--moss); }
.card-meta { display: flex; justify-content: space-between; color: var(--muted); font-size: 8px; letter-spacing: .15em; }
.project-card h3 { margin: 33px 0 11px; font: 21px/1.5 var(--serif); font-weight: 400; }
.project-card .current-stage { color: var(--vermilion); font-size: 10px; }
.project-card.podcast .current-stage { color: var(--moss); }
.phase-dots { display: flex; gap: 5px; margin-top: auto; }
.phase-dots i { flex: 1; height: 3px; background: var(--rule); }
.phase-dots i.complete, .phase-dots i.current { background: var(--vermilion); }
.project-card.podcast .phase-dots i.complete, .project-card.podcast .phase-dots i.current { background: var(--moss); }
.phase-dots i.current { animation: pulse 1.8s ease-in-out infinite; }
@keyframes pulse { 50% { opacity: .38; } }
.card-footer { display: flex; justify-content: space-between; align-items: end; margin-top: 19px; color: var(--muted); font-size: 9px; }
.card-footer strong { color: var(--ink); font: 24px/1 var(--serif); font-weight: 400; }
.empty-project-card { min-height: 310px; display: grid; place-items: center; color: var(--muted); border: 1px dashed var(--rule); cursor: pointer; }

.archive-stats { display: grid; grid-template-columns: repeat(3,1fr); margin: 28px 0 4px; border-top: 1px solid var(--ink); border-bottom: 1px solid var(--rule); }
.archive-stats div { min-height: 90px; display: flex; flex-direction: column; justify-content: center; padding: 0 22px; border-right: 1px solid var(--rule); }
.archive-stats div:last-child { border-right: 0; }
.archive-stats strong { font: 28px/1 var(--serif); font-weight: 400; }
.archive-stats span { margin-top: 8px; color: var(--muted); font-size: 8px; letter-spacing: .12em; }
.archive-list { border-bottom: 1px solid var(--rule); }
.archive-row { position: relative; display: grid; grid-template-columns: 52px minmax(240px,1.4fr) minmax(210px,.8fr) 100px; gap: 18px; align-items: center; min-height: 104px; border-bottom: 1px solid var(--rule); }
.archive-row::before { content: ""; position: absolute; left: 0; top: 32px; width: 2px; height: 40px; background: var(--vermilion); }
.archive-row.podcast::before { background: var(--moss); }
.archive-index { padding-left: 14px; color: var(--muted); font: 10px/1 var(--serif); }
.archive-title small { display: block; margin-bottom: 7px; color: var(--vermilion); font-size: 8px; letter-spacing: .13em; }
.archive-row.podcast .archive-title small { color: var(--moss); }
.archive-title strong { font: 16px/1.45 var(--serif); font-weight: 400; }
.archive-meta span { display: block; color: var(--ink-soft); font-size: 10px; }
.archive-meta small { display: block; margin-top: 7px; color: var(--muted); font-size: 8px; }
.archive-row .quiet-button { padding: 9px 10px; font-size: 8px; }
.archive-empty { min-height: 330px; display: grid; place-items: center; align-content: center; gap: 12px; text-align: center; border-bottom: 1px solid var(--rule); }
.archive-empty > span { color: var(--vermilion); font: 30px/1 var(--serif); }
.archive-empty strong { font: 20px/1.3 var(--serif); font-weight: 400; }
.archive-empty p { max-width: 340px; margin: 0; color: var(--muted); font: 11px/1.8 var(--serif); }

.writing-layout { min-height: calc(100vh - 190px); display: grid; grid-template-columns: 230px minmax(0,1fr); gap: 24px; }
.document-rail { padding-right: 20px; border-right: 1px solid var(--rule); }
.rail-heading { display: flex; align-items: end; justify-content: space-between; padding: 4px 0 19px; border-bottom: 1px solid var(--ink); }
.rail-heading h2 { margin: 8px 0 0; font: 24px/1 var(--serif); font-weight: 400; }
.document-list { display: grid; }
.document-item { padding: 17px 4px; border-bottom: 1px solid var(--rule); cursor: pointer; }
.document-item.active { padding-left: 12px; border-left: 2px solid var(--vermilion); }
.document-item small { color: var(--muted); font-size: 8px; letter-spacing: .11em; }
.document-item strong { display: block; margin-top: 8px; overflow: hidden; font: 13px/1.45 var(--serif); font-weight: 400; text-overflow: ellipsis; white-space: nowrap; }
.document-item span { display: block; margin-top: 8px; color: var(--muted); font-size: 9px; }
.editor-sheet { min-height: 690px; max-width: 860px; margin: 0 auto; padding: 34px 58px 26px; background: var(--paper-light); border: 1px solid rgba(32,35,31,.13); box-shadow: 0 18px 50px rgba(50,46,38,.08); }
.editor-toolbar { display: flex; justify-content: space-between; align-items: center; padding-bottom: 14px; color: var(--muted); border-bottom: 1px solid var(--rule); font-size: 9px; }
.tool-button { padding: 5px 8px; color: var(--ink-soft); background: transparent; }
.tool-button:hover { color: var(--vermilion); }
.title-input { width: 100%; margin-top: 43px; color: var(--ink); background: transparent; border: 0; outline: 0; font: 36px/1.35 var(--serif); }
.manuscript-meta { display: flex; gap: 8px; margin-top: 14px; padding-bottom: 25px; color: var(--muted); border-bottom: 1px solid var(--rule); font-size: 9px; }
#manuscript-body { width: 100%; min-height: 450px; padding: 31px 0; resize: vertical; color: #30332d; background: transparent; border: 0; outline: 0; font: 16px/2.05 var(--serif); }
#manuscript-body::placeholder, .recording-notes textarea::placeholder { color: #aaa99f; }
.editor-footer { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding-top: 16px; border-top: 1px solid var(--rule); }
.notion-link-field { flex: 1; display: flex; align-items: center; gap: 12px; }
.notion-link-field span { color: var(--muted); font-size: 8px; letter-spacing: .18em; }
.notion-link-field input { flex: 1; padding: 8px 0; background: transparent; border: 0; outline: 0; color: var(--ink-soft); font-size: 10px; }

.recording-intro { align-items: center; }
.recording-status { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 10px; }
.recording-status i { width: 7px; height: 7px; border-radius: 50%; background: #8d9287; }
.recording-status.live i { background: #c0523d; box-shadow: 0 0 0 5px rgba(192,82,61,.12); animation: pulse 1.2s infinite; }
.recording-grid { display: grid; grid-template-columns: 1.5fr .75fr; gap: 18px; margin-top: 28px; }
.recorder-console { min-height: 410px; padding: 30px 36px; }
.recorder-topline { display: flex; justify-content: space-between; color: var(--ink-dim); font-size: 9px; }
.recorder-topline select { min-width: 210px; padding: 8px 10px; color: #d7d5cb; background: #30332c; border: 1px solid var(--rule-dark); outline: 0; }
.waveform { height: 115px; display: flex; align-items: center; justify-content: center; gap: 4px; margin: 30px 0 5px; overflow: hidden; }
.waveform i { width: 2px; height: var(--h); min-height: 3px; background: #73786d; transition: height .15s ease, background .2s ease; }
.waveform.live i { background: #b95f4b; animation: wave var(--speed) ease-in-out infinite alternate; }
@keyframes wave { to { height: calc(var(--h) * .35); } }
.recording-time { text-align: center; font: 43px/1 var(--serif); letter-spacing: .08em; }
.recorder-controls { display: flex; align-items: center; justify-content: center; gap: 13px; margin-top: 29px; }
.record-button { width: 57px; height: 57px; display: grid; place-items: center; padding: 0; background: transparent; border: 1px solid #777b72; border-radius: 50%; cursor: pointer; }
.record-button i { width: 27px; height: 27px; display: block; background: var(--vermilion-soft); border-radius: 50%; }
.record-button.live i { width: 20px; height: 20px; border-radius: 2px; }
.control-button { padding: 9px 13px; color: #aaa99f; background: transparent; border: 1px solid var(--rule-dark); font-size: 10px; }
.control-button:disabled { opacity: .3; cursor: not-allowed; }
.marker-line { min-height: 18px; margin-top: 20px; color: #73786e; text-align: center; font-size: 9px; }
.recording-notes { min-height: 410px; padding: 29px; }
.recording-notes h2 { margin: 12px 0 19px; font: 22px/1.3 var(--serif); font-weight: 400; }
.recording-notes textarea { width: 100%; min-height: 245px; padding: 15px 0; resize: none; color: var(--ink); background: transparent; border: 0; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); outline: 0; font: 13px/1.9 var(--serif); }
.privacy-note { margin-top: 14px; color: var(--muted); font-size: 9px; line-height: 1.6; }
.recordings-heading { margin-top: 42px; }
.recordings-list { display: grid; }
.recording-item { display: grid; grid-template-columns: 45px 1.2fr .8fr 120px auto; gap: 16px; align-items: center; min-height: 84px; border-bottom: 1px solid var(--rule); }
.recording-icon { width: 32px; height: 32px; display: grid; place-items: center; border: 1px solid var(--rule); border-radius: 50%; color: var(--vermilion); }
.recording-copy strong { display: block; font: 14px/1.3 var(--serif); font-weight: 400; }
.recording-copy small, .recording-note-preview { display: block; margin-top: 7px; color: var(--muted); font-size: 9px; }
.recording-note-preview { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.recording-item audio { width: 120px; height: 28px; }
.recording-actions { display: flex; gap: 7px; }
.recording-actions a, .recording-actions button { color: var(--ink-soft); background: transparent; border: 0; font-size: 9px; text-decoration: none; cursor: pointer; }
.empty-state { padding: 45px 10px; color: var(--muted); text-align: center; font: 13px/1.8 var(--serif); border-bottom: 1px solid var(--rule); }

.modal-backdrop { position: fixed; inset: 0; z-index: 70; display: none; place-items: center; padding: 30px; background: rgba(25,27,23,.68); backdrop-filter: blur(6px); }
.modal-backdrop.open { display: grid; }
.modal-card { position: relative; width: min(680px,92vw); max-height: calc(100vh - 44px); padding: 41px 44px 36px; overflow-y: auto; background: var(--paper-light); box-shadow: var(--shadow); }
.modal-card h2 { margin: 12px 0 9px; font: 30px/1.3 var(--serif); font-weight: 400; }
.modal-card > p { margin: 0 0 26px; color: var(--muted); font: 12px/1.7 var(--serif); }
.modal-close { position: absolute; right: 19px; top: 16px; width: 30px; height: 30px; color: var(--muted); background: transparent; border: 0; font: 25px/1 var(--serif); cursor: pointer; }
.modal-card form { display: grid; gap: 17px; }
.modal-card label { color: var(--ink-soft); font-size: 10px; letter-spacing: .05em; }
.modal-card label input, .modal-card label select { width: 100%; margin-top: 8px; padding: 12px 13px; color: var(--ink); background: transparent; border: 1px solid var(--rule); outline: 0; }
.modal-card label input:focus, .modal-card label select:focus { border-color: var(--vermilion); }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 13px; }
.modal-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 10px; }
.detail-card { width: min(900px,92vw); }
.compact-card { width: min(520px,90vw); }
.compact-card textarea { width: 100%; min-height: 140px; margin-top: 18px; padding: 15px; resize: vertical; color: var(--ink); background: transparent; border: 1px solid var(--rule); outline: 0; font: 14px/1.8 var(--serif); }
.detail-header { padding-bottom: 24px; border-bottom: 1px solid var(--ink); }
.detail-type { color: var(--vermilion); font-size: 9px; letter-spacing: .18em; }
.detail-card.podcast .detail-type { color: var(--moss); }
.detail-header h2 { margin-right: 50px; }
.detail-title-input { width: calc(100% - 48px); margin: 12px 0 3px; padding: 0; color: var(--ink); background: transparent; border: 0; border-bottom: 1px solid transparent; outline: 0; font: 30px/1.35 var(--serif); }
.detail-title-input:focus { border-bottom-color: var(--rule); }
.detail-meta { display: flex; gap: 24px; margin-top: 14px; color: var(--muted); font-size: 10px; }
.detail-phases { margin-top: 26px; }
.detail-phase { display: grid; grid-template-columns: 24px 1fr auto; gap: 14px; align-items: center; padding: 12px 0; border-bottom: 1px solid var(--rule); }
.detail-phase i { width: 14px; height: 14px; display: grid; place-items: center; border: 1px solid var(--rule); border-radius: 50%; color: transparent; font-style: normal; font-size: 8px; }
.detail-phase.complete i { color: white; background: var(--vermilion); border-color: var(--vermilion); }
.detail-card.podcast .detail-phase.complete i { background: var(--moss); border-color: var(--moss); }
.detail-phase.current { color: var(--vermilion); }
.detail-card.podcast .detail-phase.current { color: var(--moss); }
.detail-phase span { font: 13px/1.4 var(--serif); }
.detail-phase time { color: var(--muted); font-size: 9px; }
.detail-actions { display: flex; align-items: center; justify-content: space-between; margin-top: 25px; }
.danger-link { color: #9e6a5f; background: transparent; border: 0; font-size: 9px; cursor: pointer; }
.detail-main-actions { display: flex; gap: 9px; }
.detail-complete-note { display: flex; justify-content: space-between; gap: 20px; margin-top: 24px; padding: 15px 17px; background: rgba(89,105,86,.06); border: 1px solid rgba(89,105,86,.18); }
.detail-complete-note strong { font: 11px/1.5 var(--serif); font-weight: 400; }
.detail-complete-note span { color: var(--muted); font-size: 8px; line-height: 1.6; text-align: right; }

.phase-builder { display: grid; gap: 12px; margin-top: 2px; padding-top: 18px; border-top: 1px solid var(--ink); }
.phase-builder-head, .detail-phase-heading { display: flex; align-items: end; justify-content: space-between; gap: 18px; }
.phase-builder-head strong, .detail-phase-heading strong { display: block; font: 15px/1.2 var(--serif); font-weight: 400; }
.phase-builder-head small, .detail-phase-heading small { display: block; margin-top: 6px; color: var(--muted); font-size: 8px; letter-spacing: .08em; }
.detail-phase-heading { margin: 27px 0 12px; }
.phase-editor { display: grid; border-top: 1px solid var(--rule); }
.phase-edit-row { display: grid; grid-template-columns: 31px minmax(170px,1fr) 92px 112px 76px; gap: 10px; align-items: end; min-height: 68px; padding: 9px 0; border-bottom: 1px solid var(--rule); }
.phase-order { align-self: center; color: var(--muted); font: 11px/1 var(--serif); }
.phase-edit-row label > span:first-child { display: block; margin-bottom: 5px; color: var(--muted); font-size: 8px; letter-spacing: .08em; }
.phase-edit-row label input { width: 100%; margin: 0; padding: 8px 9px; background: rgba(255,255,255,.25); border: 1px solid var(--rule); }
.days-input { display: flex !important; align-items: center; gap: 6px; color: var(--muted); font-size: 9px; }
.days-input input { width: 58px !important; }
.phase-edit-row time { align-self: center; color: var(--muted); font-size: 8px; white-space: nowrap; }
.phase-row-actions { align-self: center; display: flex; justify-content: flex-end; gap: 3px; }
.phase-row-actions button { width: 22px; height: 25px; padding: 0; color: var(--muted); background: transparent; border: 1px solid var(--rule); cursor: pointer; }
.phase-row-actions button:hover:not(:disabled) { color: var(--vermilion); border-color: var(--vermilion); }
.phase-row-actions button:disabled { opacity: .25; cursor: default; }
.phase-add-button { width: 100%; padding: 10px; color: var(--muted); background: rgba(255,255,255,.18); border: 1px dashed var(--rule); cursor: pointer; }
.phase-add-button:hover { color: var(--vermilion); border-color: var(--vermilion); }

.radar-head-actions { display: flex; align-items: center; gap: 14px; }
.source-status { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 9px; letter-spacing: .08em; }
.source-status i { width: 7px; height: 7px; border-radius: 50%; background: var(--ochre); box-shadow: 0 0 0 5px rgba(179,138,79,.11); }
.source-status.active i { background: var(--moss); box-shadow: 0 0 0 5px rgba(89,105,86,.12); }
.radar-lead { min-height: 250px; display: grid; grid-template-columns: 70px 1fr 190px; align-items: center; gap: 27px; margin-top: 28px; padding: 38px 40px; }
.radar-lead-number { align-self: start; color: #72776d; font: 40px/1 var(--serif); }
.radar-lead h2 { max-width: 760px; margin: 14px 0 13px; color: #f1eee5; font: 25px/1.65 var(--serif); font-weight: 400; }
.radar-lead p { max-width: 670px; margin: 0; color: #92978c; font: 12px/1.8 var(--serif); }
.radar-convert { align-self: end; color: #d1cfc6; }
.radar-columns { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; margin-top: 18px; }
.radar-column { padding: 28px 30px 10px; }
.radar-column-head { display: flex; justify-content: space-between; align-items: flex-start; padding-bottom: 21px; border-bottom: 1px solid var(--ink); }
.radar-column-head h2 { margin: 9px 0 0; font: 23px/1 var(--serif); font-weight: 400; }
.radar-column-head > span { color: var(--muted); font-size: 8px; letter-spacing: .15em; }
.trend-item { position: relative; display: grid; grid-template-columns: 45px 1fr auto; gap: 15px; min-height: 115px; align-items: center; border-bottom: 1px solid var(--rule); }
.trend-rank { color: var(--muted); font: 18px/1 var(--serif); }
.trend-copy strong { display: block; font: 15px/1.5 var(--serif); font-weight: 400; }
.trend-copy p { margin: 7px 0 0; color: var(--muted); font-size: 9px; line-height: 1.65; }
.trend-action { display: grid; gap: 8px; justify-items: end; }
.trend-heat { color: var(--vermilion); font: 18px/1 var(--serif); }
.trend-heat small { color: var(--muted); font: 8px/1 var(--sans); }
.trend-add { color: var(--muted); background: transparent; border: 0; font-size: 9px; cursor: pointer; }
.trend-add:hover { color: var(--vermilion); }
.radar-empty { min-height: 160px; display: grid; place-items: center; align-content: center; gap: 9px; color: var(--muted); text-align: center; border-bottom: 1px solid var(--rule); }
.radar-empty span { color: var(--ink-soft); font: 14px/1.4 var(--serif); }
.radar-empty p { margin: 0; font-size: 9px; }
.source-ledger { margin-top: 18px; padding: 30px; }
.source-ledger-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 25px; padding-bottom: 23px; border-bottom: 1px solid var(--ink); }
.source-ledger-head h2 { margin: 9px 0 8px; font: 23px/1 var(--serif); font-weight: 400; }
.source-ledger-head p { max-width: 570px; margin: 0; color: var(--muted); font: 10px/1.7 var(--serif); }
.source-metrics { display: grid; grid-template-columns: repeat(4,1fr); border-bottom: 1px solid var(--rule); }
.source-metrics div { min-height: 86px; display: flex; flex-direction: column; justify-content: center; padding: 0 18px; border-right: 1px solid var(--rule); }
.source-metrics div:last-child { border-right: 0; }
.source-metrics strong { font: 25px/1 var(--serif); font-weight: 400; }
.source-metrics span { margin-top: 8px; color: var(--muted); font-size: 8px; letter-spacing: .1em; }
.source-row { display: grid; grid-template-columns: 90px minmax(180px,1fr) minmax(190px,1fr) auto; gap: 18px; align-items: center; min-height: 76px; border-bottom: 1px solid var(--rule); }
.source-row:last-child { border-bottom: 0; }
.source-state { display: inline-flex; align-items: center; gap: 7px; color: var(--muted); font-size: 8px; white-space: nowrap; }
.source-state i { width: 6px; height: 6px; border-radius: 50%; background: var(--ochre); }
.source-state.active i { background: var(--moss); }
.source-state.error i { background: var(--vermilion); }
.source-copy strong, .source-manager-row strong { display: block; font: 13px/1.4 var(--serif); font-weight: 400; }
.source-copy span, .source-manager-row small { display: block; margin-top: 5px; color: var(--muted); font-size: 8px; }
.source-cadence span { display: block; color: var(--ink-soft); font-size: 9px; }
.source-cadence small { display: block; margin-top: 5px; color: var(--muted); font-size: 8px; }
.source-manager-list { display: grid; margin: 23px 0; border-top: 1px solid var(--ink); }
.source-manager-row { display: grid; grid-template-columns: 74px 1fr 34px; gap: 15px; align-items: center; min-height: 66px; border-bottom: 1px solid var(--rule); }
.source-manager-row button { color: var(--muted); background: transparent; border: 0; font-size: 18px; cursor: pointer; }
.source-locked { color: var(--muted); font-size: 8px; }
.source-modal-card form { padding-top: 22px; border-top: 1px solid var(--ink); }
.keyword-watch { display: grid; grid-template-columns: 230px 1fr 230px; gap: 35px; align-items: center; margin-top: 42px; padding: 28px 0; border-top: 1px solid var(--ink); border-bottom: 1px solid var(--rule); }
.keyword-watch h2 { margin: 9px 0 7px; font: 21px/1 var(--serif); font-weight: 400; }
.keyword-watch p { margin: 0; color: var(--muted); font-size: 9px; line-height: 1.6; }
.keyword-tags { display: flex; flex-wrap: wrap; gap: 8px; }
.keyword-tag { display: inline-flex; align-items: center; gap: 9px; padding: 9px 12px; color: var(--ink-soft); border: 1px solid var(--rule); font: 11px/1 var(--serif); }
.keyword-tag button { padding: 0; color: #aaa99f; background: transparent; border: 0; cursor: pointer; }
.keyword-add { display: flex; align-items: center; gap: 8px; }
.keyword-add input { min-width: 0; flex: 1; padding: 11px 10px; color: var(--ink); background: transparent; border: 1px solid var(--rule); outline: 0; font-size: 10px; }
.keyword-add input:focus { border-color: var(--vermilion); }
.goal-form-row { display: grid; grid-template-columns: 80px 1fr 1fr; align-items: end; gap: 12px; padding: 17px 0; border-bottom: 1px solid var(--rule); }
.goal-form-row strong { align-self: center; font: 15px/1 var(--serif); font-weight: 400; }
.goal-form-row label { color: var(--muted); font-size: 9px; }
.goal-form-row label input { margin-top: 7px; }
.goal-form-row label small { display: block; margin-top: 6px; color: var(--muted); font-size: 8px; }
.goal-form-row label b { color: var(--ink-soft); font-weight: 500; }
.detail-schedule-edit { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 21px; padding: 17px; background: rgba(32,35,31,.035); border: 1px solid var(--rule); }
.detail-schedule-edit label { color: var(--muted); font-size: 9px; }
.detail-schedule-edit input, .detail-schedule-edit select { width: 100%; margin-top: 7px; padding: 9px 10px; color: var(--ink); background: transparent; border: 1px solid var(--rule); outline: 0; }

.todo-intro { align-items: center; }
.apple-link-status { min-width: 330px; display: grid; grid-template-columns: 10px 1fr auto; gap: 12px; align-items: center; padding: 13px 14px; border: 1px solid var(--rule); }
.apple-link-status > i { width: 7px; height: 7px; border-radius: 50%; background: var(--ochre); box-shadow: 0 0 0 5px rgba(179,138,79,.11); }
.apple-link-status.available > i { background: var(--moss); box-shadow: 0 0 0 5px rgba(89,105,86,.12); }
.apple-link-status.unavailable > i { background: var(--vermilion); box-shadow: 0 0 0 5px rgba(160,68,50,.1); }
.apple-link-status strong { display: block; font: 11px/1.3 var(--serif); font-weight: 400; }
.apple-link-status span { display: block; margin-top: 4px; color: var(--muted); font-size: 8px; }
.apple-link-status .quiet-button { padding: 8px 10px; font-size: 8px; }
.todo-compose-grid { display: grid; grid-template-columns: minmax(0,1.55fr) minmax(280px,.7fr); gap: 18px; margin-top: 28px; }
.todo-compose-panel { padding: 29px 31px; }
.todo-compose-panel .panel-heading { padding-bottom: 22px; border-bottom: 1px solid var(--ink); }
.todo-compose-note { color: var(--muted); font-size: 8px; letter-spacing: .12em; }
.todo-compose-panel form { display: grid; gap: 15px; margin-top: 22px; }
.todo-compose-panel label { color: var(--muted); font-size: 9px; letter-spacing: .05em; }
.todo-compose-panel label input, .todo-compose-panel label select { width: 100%; margin-top: 7px; padding: 11px 12px; color: var(--ink); background: rgba(255,255,255,.2); border: 1px solid var(--rule); outline: 0; }
.todo-compose-panel label input:focus, .todo-compose-panel label select:focus { border-color: var(--vermilion); }
.todo-title-field input { font: 14px/1.4 var(--serif); }
.apple-sync-options { display: flex; gap: 24px; padding: 14px 0; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); }
.apple-sync-options label { display: flex; align-items: center; gap: 9px; color: var(--ink-soft); cursor: pointer; }
.apple-sync-options label input { width: 14px; height: 14px; margin: 0; accent-color: var(--vermilion); }
.todo-form-actions { display: flex; align-items: center; justify-content: space-between; gap: 20px; }
.todo-form-actions > span { color: var(--muted); font: 9px/1.5 var(--serif); }
.todo-pulse-panel { min-height: 405px; padding: 31px; }
.todo-pulse-panel h2 { margin: 11px 0 0; color: var(--paper-light); font: 25px/1.3 var(--serif); font-weight: 400; }
.todo-pulse-number { display: flex; align-items: end; gap: 11px; margin-top: 53px; }
.todo-pulse-number strong { color: #efece2; font: 74px/.8 var(--serif); font-weight: 400; }
.todo-pulse-number span { color: #858a80; font-size: 9px; letter-spacing: .12em; }
.todo-pulse-panel p { margin: 30px 0 0; color: #a3a69d; font: 13px/1.8 var(--serif); }
.todo-pulse-rule { height: 1px; margin: 35px 0 17px; background: var(--rule-dark); }
.todo-pulse-panel small { color: #747970; font-size: 8px; line-height: 1.7; }
.todo-book { margin-top: 45px; }
.todo-book-head { display: flex; align-items: end; justify-content: space-between; gap: 20px; padding-bottom: 17px; border-bottom: 1px solid var(--ink); }
.todo-book-head h2 { margin: 9px 0 0; font: 24px/1 var(--serif); font-weight: 400; }
.todo-list { border-bottom: 1px solid var(--rule); }
.todo-row { position: relative; display: grid; grid-template-columns: 28px 36px minmax(230px,1.4fr) minmax(150px,.7fr) 190px 24px; gap: 14px; align-items: center; min-height: 92px; border-bottom: 1px solid var(--rule); }
.todo-row:last-child { border-bottom: 0; }
.todo-row::before { content: ""; position: absolute; left: 0; top: 29px; width: 2px; height: 34px; background: transparent; }
.todo-row.high::before { background: var(--vermilion); }
.todo-check { width: 18px; height: 18px; display: grid; place-items: center; padding: 0; color: transparent; background: transparent; border: 1px solid #8e8f88; border-radius: 50%; cursor: pointer; }
.todo-row.done .todo-check { color: white; background: var(--moss); border-color: var(--moss); }
.todo-row.done .todo-copy strong { color: var(--muted); text-decoration: line-through; }
.todo-index { color: var(--muted); font: 10px/1 var(--serif); }
.todo-copy strong { display: block; font: 15px/1.45 var(--serif); font-weight: 400; }
.todo-copy p { margin: 6px 0 0; color: var(--muted); font-size: 8px; line-height: 1.5; }
.todo-date span { display: block; color: var(--ink-soft); font-size: 9px; }
.todo-date small { display: block; margin-top: 6px; color: var(--muted); font-size: 8px; }
.todo-apple-actions { display: flex; gap: 6px; justify-content: flex-end; }
.todo-apple-actions button { padding: 8px 9px; color: var(--muted); background: transparent; border: 1px solid var(--rule); font-size: 8px; cursor: pointer; }
.todo-apple-actions button:hover:not(:disabled) { color: var(--vermilion); border-color: var(--vermilion); }
.todo-apple-actions button.synced { color: var(--moss); background: rgba(89,105,86,.06); }
.todo-apple-actions button:disabled:not(.synced) { opacity: .32; cursor: default; }
.todo-delete { color: #aaa99f; background: transparent; border: 0; font-size: 17px; cursor: pointer; }
.todo-delete:hover { color: var(--vermilion); }
.todo-empty { border: 0; }

.toast { position: fixed; left: 50%; bottom: 26px; z-index: 150; transform: translate(-50%,30px); display: flex; align-items: center; gap: 18px; padding: 11px 18px; color: var(--paper-light); background: var(--ink); box-shadow: var(--shadow); font-size: 10px; opacity: 0; pointer-events: none; transition: .25s ease; }
.toast.show { transform: translate(-50%,0); opacity: 1; }
.toast button { padding: 0; color: #e0a899; background: transparent; border: 0; font-size: 9px; cursor: pointer; pointer-events: auto; }

@media (max-width: 1250px) {
  .projects-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .dashboard-grid { grid-template-columns: 1.45fr .85fr; }
  .view { padding-left: 35px; padding-right: 35px; }
  .topbar { padding-left: 35px; padding-right: 35px; }
}

@media (max-width: 900px) {
  body { min-width: 0; }
  .sidebar { transform: translateX(-100%); transition: transform .25s ease; }
  .sidebar.open { transform: translateX(0); }
  .main { margin-left: 0; }
  .mobile-menu { display: block; border: 0; background: transparent; font-size: 20px; }
  .topbar { padding: 0 20px; }
  .view { padding: 35px 20px 60px; }
  .hero-row { align-items: flex-start; flex-direction: column; gap: 24px; }
  .hero-aside { border-left: 0; border-top: 1px solid var(--rule); padding: 18px 0 0; }
  .dashboard-grid, .recording-grid { grid-template-columns: 1fr; }
  .projects-grid { grid-template-columns: 1fr; }
  .writing-layout { grid-template-columns: 1fr; }
  .document-rail { border-right: 0; padding-right: 0; }
  .document-list { grid-template-columns: repeat(2,1fr); gap: 8px; }
  .editor-sheet { padding: 30px; }
  .page-intro { align-items: flex-start; flex-direction: column; gap: 22px; }
  .radar-columns { grid-template-columns: 1fr; }
  .radar-lead { grid-template-columns: 45px 1fr; }
  .radar-lead .radar-convert { grid-column: 2; width: auto; }
  .source-metrics { grid-template-columns: repeat(2,1fr); }
  .source-row { grid-template-columns: 80px 1fr auto; }
  .source-cadence { display: none; }
  .phase-edit-row { grid-template-columns: 27px minmax(150px,1fr) 82px 68px; }
  .phase-edit-row time { display: none; }
  .keyword-watch { grid-template-columns: 1fr; gap: 18px; }
  .apple-link-status { width: 100%; min-width: 0; }
  .todo-compose-grid { grid-template-columns: 1fr; }
  .todo-row { grid-template-columns: 26px 28px 1fr auto 24px; padding: 14px 0; }
  .todo-date { grid-column: 3; }
  .todo-apple-actions { grid-column: 4; grid-row: 1 / span 2; flex-direction: column; }
  .todo-delete { grid-column: 5; grid-row: 1 / span 2; }
  .todo-book-head { align-items: flex-start; flex-direction: column; }
  .goal-card-actions { position: static; margin-top: 16px; }
  .archive-row { grid-template-columns: 38px 1fr auto; padding: 17px 0; }
  .archive-meta { grid-column: 2; }
  .archive-row .quiet-button { grid-column: 3; grid-row: 1 / span 2; }
  .detail-actions { align-items: flex-start; flex-direction: column; gap: 17px; }
  .detail-main-actions { width: 100%; flex-wrap: wrap; }
  .detail-complete-note { flex-direction: column; }
  .detail-complete-note span { text-align: left; }
}

/* ———————— v0.5 云端同步 · 登录 · 备份恢复 ———————— */

.sync-badge {
  display: flex; align-items: flex-start; gap: 8px; width: 100%;
  margin-top: 10px; padding: 0; border: 0; background: none;
  text-align: left; cursor: default; font-family: inherit;
}
.sync-badge i { display: inline-block; width: 6px; height: 6px; margin-top: 4px; border-radius: 50%; background: var(--moss); flex: none; }
.sync-badge div { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.sync-badge strong { color: var(--ink-dim); font-size: 10px; font-weight: 600; letter-spacing: .04em; }
.sync-badge span { color: var(--ink-faint); font-size: 9px; line-height: 1.4; }
.sync-badge[data-status="saving"] i,
.sync-badge[data-status="connecting"] i { background: #c9a24b; animation: sync-pulse 1s ease-in-out infinite; }
.sync-badge[data-status="synced"] i { background: var(--moss); }
.sync-badge[data-status="offline"] i,
.sync-badge[data-status="locked"] i { background: #b0533c; }
.sync-badge[data-status="conflict"] i { background: #b0533c; animation: sync-pulse 1s ease-in-out infinite; }
.sync-badge[data-status="offline"], .sync-badge[data-status="conflict"], .sync-badge[data-status="locked"] { cursor: pointer; }
@keyframes sync-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }

.login-backdrop { z-index: 60; }
.login-card { max-width: 420px; }
.login-brand { margin-bottom: 18px; }
.login-error { min-height: 16px; margin-top: 6px; color: #b0533c; font-size: 11px; letter-spacing: .03em; }
.login-actions { justify-content: space-between; }

.conflict-actions { flex-wrap: wrap; gap: 10px 16px; align-items: center; }
.conflict-actions .text-button { margin-right: auto; }

.restore-summary {
  margin: 14px 0 4px; padding: 12px 14px;
  border: 1px solid var(--rule, #ddd6c8); border-radius: 6px;
  background: rgba(255, 255, 255, .45);
  color: var(--ink-dim); font-size: 12px; line-height: 1.8;
}
.restore-summary b { color: #3f4438; }

@media (max-width: 720px) {
  .conflict-actions { flex-direction: column; align-items: stretch; }
  .conflict-actions .text-button { margin-right: 0; }
}

/* ———————— v0.6 选题雷达真实信号 · 数据看板 ———————— */

.signal-item { grid-template-columns: 1fr auto; align-items: start; min-height: 0; padding: 14px 0; }
.signal-item .trend-copy strong { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.signal-item .trend-copy p { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.signal-item .trend-copy strong a { color: inherit; text-decoration: none; border-bottom: 1px solid var(--rule, #ddd6c8); }
.signal-item .trend-copy strong a:hover { border-bottom-color: currentColor; }
.signal-meta { display: flex; flex-wrap: wrap; gap: 6px 10px; margin-top: 6px; font-size: 10px; color: var(--ink-faint); letter-spacing: .03em; }
.signal-meta em { font-style: normal; padding: 1px 6px; border: 1px solid var(--rule, #ddd6c8); border-radius: 999px; color: var(--ink-dim); }

.stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin-bottom: 32px; }
.stats-card { padding: 22px; display: flex; flex-direction: column; gap: 14px; }
.stats-card-head { display: flex; justify-content: space-between; align-items: flex-start; }
.stats-card-head h2 { margin: 2px 0 0; }
.stats-status { font-size: 10px; color: var(--ink-faint); letter-spacing: .03em; }
.stats-number { display: flex; align-items: baseline; gap: 8px; }
.stats-number strong { font: 500 34px/1 var(--serif, serif); letter-spacing: .01em; }
.stats-number span { color: var(--ink-dim); font-size: 11px; }
.stats-number em { font-style: normal; font-size: 10px; }
.stats-number em.up { color: #b0533c; }
.stats-number em.down { color: #5f7052; }
.stats-chart { width: 100%; height: 72px; color: var(--moss); }
.stats-chart .chart-empty, .stats-chart .chart-max { font-size: 9px; fill: var(--ink-faint); }
.manual-stat-form { display: flex; gap: 8px; }
.manual-stat-form input[type="number"] { flex: 1; min-width: 0; }
.manual-stat-form input[type="date"] { width: 126px; }
.stats-note { font-size: 10px; color: var(--ink-faint); line-height: 1.6; }
.works-head { font-size: 11px; font-weight: 500; color: var(--ink-dim); letter-spacing: .05em; margin-bottom: 6px; }
.work-row { display: flex; flex-direction: column; gap: 2px; padding: 8px 0; border-top: 1px solid var(--rule, #ddd6c8); text-decoration: none; color: inherit; }
.work-row strong { font-size: 12px; font-weight: 500; line-height: 1.5; }
.work-row span { font-size: 10px; color: var(--ink-faint); }
.works-empty { font-size: 11px; color: var(--ink-faint); padding: 8px 0; }

@media (max-width: 960px) {
  .stats-grid { grid-template-columns: 1fr; }
}

/* ———————— v0.7 雷达折叠分组 · AI 解读 ———————— */

.radar-lead-body { min-width: 0; }
.radar-lead-actions { display: flex; flex-direction: column; gap: 10px; align-items: flex-end; flex: none; }
.summary-content { margin-top: 10px; }
.summary-content p { margin: 0 0 8px; font-size: 12px; line-height: 1.8; opacity: .92; }
.summary-hint { margin-top: 8px; font-size: 10px; opacity: .6; }

.signal-groups { display: flex; flex-direction: column; gap: 14px; margin-bottom: 32px; }
.signal-group { border: 1px solid var(--rule, #ddd6c8); border-radius: 10px; background: var(--surface); overflow: hidden; }
.signal-group-head { display: flex; align-items: center; gap: 12px; width: 100%; padding: 14px 18px; border: 0; background: none; cursor: pointer; font-family: inherit; text-align: left; }
.signal-group-title { font: 500 15px/1.2 var(--serif, serif); letter-spacing: .02em; }
.signal-group-count { margin-left: auto; font-size: 10px; color: var(--ink-faint); }
.signal-group-arrow { color: var(--ink-faint); transition: transform .2s ease; font-size: 14px; }
.signal-group.open .signal-group-arrow { transform: rotate(90deg); }
.signal-group-body { display: none; padding: 0 18px; }
.signal-group.open .signal-group-body { display: block; }
.signal-region { padding: 1px 6px; border-radius: 999px; background: rgba(130,145,113,.12); color: var(--ink-dim); }
.config-divider { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--rule, #ddd6c8); }

/* ———————— v0.7.1 移动端可用性：更大字号 · 更宽间距 · 触控目标 ≥44px ———————— */

@media (max-width: 900px) {
  body { font-size: 15px; }

  /* 触控目标 */
  .nav-item { min-height: 48px; font-size: 15px; }
  .nav-index { font-size: 10px; }
  .mobile-menu { width: 44px; height: 44px; font-size: 20px; }
  .primary-button, .quiet-button, .inverse-button { min-height: 44px; padding: 10px 18px; font-size: 14px; }
  .text-button { min-height: 36px; font-size: 13px; }
  .icon-text-button { min-height: 40px; font-size: 13px; }

  /* 顶栏与布局留白 */
  .topbar { height: auto; min-height: 72px; padding: 12px 20px; gap: 12px; }
  .topbar .quiet-button, .topbar .primary-button { min-height: 40px; font-size: 13px; padding: 8px 12px; }
  .date-line { font-size: 16px; }
  .weather-line { font-size: 12px; margin-top: 4px; }
  .view { padding: 20px 20px 48px; }
  .page-intro { flex-direction: column; align-items: flex-start; gap: 14px; margin-bottom: 22px; }
  .page-intro h1 { font-size: 26px; }
  .page-intro p { font-size: 13px; line-height: 1.7; }

  /* 面板与卡片 */
  .paper-panel, .ink-panel { padding: 20px; border-radius: 12px; }
  .panel-heading h2, .page-intro h1 { line-height: 1.35; }
  .hero-row h1 { font-size: 30px; }
  .hero-aside p { font-size: 13px; line-height: 1.8; }
  .eyebrow { font-size: 10px; letter-spacing: .12em; }
  .rule-heading { font-size: 14px; }

  /* 目标与仪表盘 */
  .goal-grid { gap: 14px; }
  .goal-card { padding: 18px; }
  .goal-card strong, .stats-number strong { font-size: 30px; }
  .goal-card span, .goal-card small { font-size: 12px; }
  .dashboard-grid { gap: 16px; }
  .week-strip { gap: 8px; }
  .day-cell { min-height: 56px; font-size: 11px; }
  .day-cell b { font-size: 15px; }

  /* 任务与待办 */
  .task-item, .todo-row { min-height: 52px; padding: 12px 0; gap: 12px; }
  .task-item strong, .todo-row strong { font-size: 15px; line-height: 1.5; }
  .task-item small, .todo-row small, .todo-meta { font-size: 11px; }
  .todo-check { width: 24px; height: 24px; }
  .task-list, .todo-list { gap: 4px; }
  .todo-compose-panel form label { font-size: 13px; }
  .todo-compose-note, .todo-form-actions span { font-size: 12px; }
  .apple-sync-options label { font-size: 13px; min-height: 36px; display: flex; align-items: center; gap: 8px; }
  .todo-pulse-number strong { font-size: 36px; }
  .todo-pulse-panel p, .todo-pulse-panel small { font-size: 13px; line-height: 1.8; }
  .segmented button { min-height: 38px; padding: 6px 14px; font-size: 13px; }

  /* 表单（16px 防 iOS 自动缩放） */
  input, select, textarea { font-size: 16px; }
  form label { font-size: 13px; }
  form label small { font-size: 11px; }
  .modal-card { padding: 22px; max-height: 88vh; overflow-y: auto; }
  .modal-card h2 { font-size: 20px; }
  .modal-card p { font-size: 13px; line-height: 1.7; }
  .phase-editor .phase-row input { font-size: 15px; }

  /* 项目与时间轴 */
  .project-ledger article, .projects-grid article { padding: 18px; }
  .project-ledger strong, .projects-grid strong { font-size: 16px; }
  .project-ledger small, .projects-grid small, .project-meta { font-size: 12px; }
  .timeline-legend { font-size: 12px; gap: 14px; }
  .timeline-footnote { font-size: 12px; }
  .full-timeline { overflow-x: auto; }

  /* 档案 */
  .archive-row { padding: 14px 0; gap: 12px; }
  .archive-row strong { font-size: 15px; }
  .archive-row small, .archive-meta span { font-size: 12px; }
  .archive-stats div strong { font-size: 24px; }
  .archive-stats div span { font-size: 12px; }

  /* 雷达 · 折叠组 */
  .signal-group-head { padding: 16px 18px; min-height: 52px; }
  .signal-group-title { font-size: 16px; }
  .signal-group-count { font-size: 12px; }
  .signal-item { padding: 16px 0; gap: 12px; }
  .signal-item .trend-copy strong { font-size: 15px; line-height: 1.6; }
  .signal-item .trend-copy p { font-size: 12px; line-height: 1.7; }
  .signal-meta { font-size: 11px; gap: 6px 8px; }
  .signal-meta em { font-size: 10px; padding: 2px 8px; }
  .trend-add { font-size: 12px; min-height: 36px; }
  .summary-content p { font-size: 13px; line-height: 1.9; }
  .summary-hint { font-size: 11px; }
  .radar-lead-number { font-size: 30px; }
  .radar-lead h2 { font-size: 20px; }
  .radar-lead-actions { align-items: stretch; width: 100%; }
  .source-row { padding: 12px 0; gap: 10px; }
  .source-row strong { font-size: 14px; }
  .source-row span, .source-row small { font-size: 11px; }
  .source-metrics div strong { font-size: 20px; }
  .source-metrics div span { font-size: 11px; }
  .keyword-tag { font-size: 13px; padding: 6px 12px; min-height: 36px; display: inline-flex; align-items: center; gap: 6px; }
  .keyword-add input { min-height: 44px; }
  .keyword-add .quiet-button { min-height: 44px; }

  /* 数据看板 */
  .stats-card { padding: 20px; gap: 16px; }
  .stats-card-head h2 { font-size: 18px; }
  .stats-status { font-size: 11px; }
  .stats-number strong { font-size: 34px; }
  .stats-number span { font-size: 13px; }
  .stats-chart { height: 80px; }
  .manual-stat-form { flex-wrap: wrap; }
  .manual-stat-form input[type="number"], .manual-stat-form input[type="date"] { min-height: 44px; flex: 1 1 45%; }
  .manual-stat-form .quiet-button { flex: 1 1 100%; }
  .stats-note { font-size: 12px; }
  .work-row { padding: 12px 0; }
  .work-row strong { font-size: 14px; line-height: 1.6; }
  .work-row span { font-size: 11px; }
  .works-head { font-size: 13px; }

  /* 侧栏（抽屉） */
  .sidebar { width: min(84vw, 320px); max-height: 100vh; height: 100vh; box-sizing: border-box; }
  .sidebar-footer { gap: 6px; }
  .sidebar-note blockquote { font-size: 14px; line-height: 1.8; }
  .sync-badge strong { font-size: 12px; }
  .sync-badge span { font-size: 10px; }

  /* toast 与登录 */
  .toast { font-size: 14px; padding: 14px 18px; }
  .toast button { font-size: 13px; min-height: 32px; }
  .login-card p { font-size: 13px; line-height: 1.8; }
  .login-card input { min-height: 48px; }
  .login-actions .primary-button, .login-actions .quiet-button { min-height: 46px; }
  .conflict-actions .primary-button, .conflict-actions .quiet-button { min-height: 46px; }
}

/* ———————— v0.7.2 同步强提醒横幅 ———————— */

.sync-banner {
  display: none;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  margin: 14px 48px 0;
  padding: 12px 18px;
  border: 1px solid #b0533c;
  border-radius: 10px;
  background: #f9efec;
  color: #8a3d2b;
  font-size: 13px;
  line-height: 1.6;
}
.sync-banner.show { display: flex; }
.sync-banner button {
  flex: none;
  min-height: 34px;
  padding: 6px 14px;
  border: 1px solid #b0533c;
  border-radius: 6px;
  background: #b0533c;
  color: #fff;
  font-size: 12px;
  cursor: pointer;
}
@media (max-width: 900px) {
  .sync-banner { margin: 12px 20px 0; font-size: 13px; flex-wrap: wrap; }
  .sync-banner button { min-height: 40px; font-size: 13px; }
}

/* ———————— v0.7.4 更宽松的移动端 · 动画 · 手势 · 刷新按钮 ———————— */

/* 菜单遮罩 */
.sidebar-scrim { display: none; }
@media (max-width: 900px) {
  .sidebar { z-index: 55; }
  .sidebar-scrim {
    display: block; position: fixed; inset: 0; z-index: 54;
    background: rgba(44, 44, 42, .32);
    opacity: 0; pointer-events: none; transition: opacity .25s ease;
  }
  .sidebar.open + .sidebar-scrim { opacity: 1; pointer-events: auto; }
}

/* 刷新按钮旋转 */
#sync-refresh-btn.spinning { animation: spin .6s ease; }
@keyframes spin { from { transform: rotate(0); } to { transform: rotate(360deg); } }

/* 动画（尊重减弱动效设置） */
@media (prefers-reduced-motion: no-preference) {
  .app-shell { animation: page-in .35s ease; }
  @keyframes page-in { from { opacity: 0; } to { opacity: 1; } }
  .view.active { animation: view-in .28s ease; }
  @keyframes view-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
  .modal-backdrop.open { animation: fade-in .2s ease; }
  @keyframes fade-in { from { opacity: 0; } }
  .modal-backdrop.open .modal-card { animation: card-in .26s cubic-bezier(.2,.8,.3,1); }
  @keyframes card-in { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }
  .toast.show { animation: toast-in .25s cubic-bezier(.2,.8,.3,1); }
  @keyframes toast-in { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
  .sync-banner.show { animation: view-in .25s ease; }
  .signal-group.open .signal-group-body { animation: fade-in .22s ease; }
}

/* 移动端再放宽 */
@media (max-width: 900px) {
  .view { padding: 24px 22px 64px; }
  .paper-panel, .ink-panel { padding: 24px; }
  .goal-card { padding: 22px; }
  .stats-card { padding: 24px; gap: 18px; }
  .signal-item { padding: 20px 0; }
  .signal-group-head { padding: 18px 20px; }
  .task-item, .todo-row { padding: 16px 0; }
  .archive-row { padding: 18px 0; }
  .work-row { padding: 14px 0; }
  .source-row { padding: 14px 0; }
  .stats-grid { gap: 24px; }
  .signal-groups { gap: 18px; }
  .dashboard-grid { gap: 20px; }
  .todo-compose-grid { gap: 20px; }
  .modal-card { padding: 26px; }
  .top-actions { gap: 10px; }
  .topbar .quiet-button { padding: 8px 10px; }
}

/* ———————— v0.7.5 桌面字号上调 · 手机回调到中间值 ———————— */

/* 桌面：8-9px 小字全部提到 10.5-11px，按钮导航 12px */
.rule-heading span:last-child, .goal-tag, .goal-status, .week-day,
.mini-project-name small, .task-copy small, .task-stage, .empty-action span,
.ledger-title small, .ledger-progress-copy, .timeline-legend, .timeline-side-head,
.timeline-day, .timeline-project-copy small, .timeline-project-copy span,
.timeline-footnote, .card-meta, .card-footer, .archive-stats span,
.archive-title small, .archive-meta small, .document-item small, .document-item span,
.editor-toolbar, .manuscript-meta, .notion-link-field span, .recorder-topline,
.marker-line, .privacy-note, .recording-copy small, .recording-note-preview,
.recording-actions a, .recording-actions button, .detail-type, .detail-phase time,
.danger-link, .detail-complete-note span, .phase-builder-head small,
.detail-phase-heading small, .phase-edit-row label > span:first-child,
.days-input, .phase-edit-row time, .goal-card-actions button,
.archive-row .quiet-button, .local-indicator, .sidebar-note .eyebrow {
  font-size: 10.5px;
}
.eyebrow { font-size: 10px; }
.brand-en { font-size: 10px; }
.phase-bar { font-size: 9.5px; }
.text-button, .quiet-button, .inverse-button, .icon-text-button,
.segmented button, .trend-add, .nav-item { font-size: 12.5px; }
.weather-line { font-size: 12px; }
.sidebar-note blockquote { font-size: 14px; line-height: 1.8; }
.sync-badge strong { font-size: 11px; }
.sync-badge span { font-size: 10px; }

/* 手机：回调到中间值（保留触控尺寸，收紧字与距） */
@media (max-width: 900px) {
  body { font-size: 14px; }
  .nav-item { min-height: 46px; font-size: 14px; }
  .primary-button, .quiet-button, .inverse-button { min-height: 42px; padding: 9px 16px; font-size: 13px; }
  .text-button { font-size: 12.5px; }
  .icon-text-button { font-size: 12.5px; }
  .date-line { font-size: 15px; }
  .weather-line { font-size: 11px; }
  .page-intro h1 { font-size: 24px; }
  .page-intro p { font-size: 12.5px; }
  .hero-row h1 { font-size: 26px; }
  .hero-aside p { font-size: 12.5px; }
  .eyebrow { font-size: 9.5px; }
  .rule-heading { font-size: 13px; }
  .view { padding: 20px 18px 56px; }
  .paper-panel, .ink-panel { padding: 20px; }
  .goal-card { padding: 18px; }
  .stats-card { padding: 20px; gap: 14px; }
  .stats-number strong { font-size: 30px; }
  .stats-card-head h2 { font-size: 16px; }
  .signal-group-head { padding: 15px 18px; min-height: 50px; }
  .signal-group-title { font-size: 15px; }
  .signal-item { padding: 15px 0; }
  .signal-item .trend-copy strong { font-size: 14px; }
  .signal-item .trend-copy p { font-size: 11.5px; }
  .signal-meta { font-size: 10.5px; }
  .trend-add { font-size: 11px; }
  .summary-content p { font-size: 12.5px; line-height: 1.85; }
  .task-item strong, .todo-row strong { font-size: 14px; }
  .task-item, .todo-row { padding: 13px 0; min-height: 48px; }
  .archive-row strong { font-size: 14px; }
  .archive-row { padding: 14px 0; }
  .project-ledger strong, .projects-grid strong { font-size: 15px; }
  .modal-card { padding: 22px; }
  .modal-card h2 { font-size: 19px; }
  .modal-card p { font-size: 12.5px; }
  input, select, textarea { font-size: 15px; }
  form label { font-size: 12.5px; }
  .keyword-tag { font-size: 12px; min-height: 34px; }
  .work-row strong { font-size: 13px; }
  .source-row strong { font-size: 13px; }
  .manual-stat-form input[type="number"], .manual-stat-form input[type="date"] { min-height: 42px; }
  .todo-pulse-panel p, .todo-pulse-panel small { font-size: 12px; }
  .segmented button { font-size: 12px; min-height: 36px; }
  .stats-grid { gap: 18px; }
  .signal-groups { gap: 14px; }
  .dashboard-grid { gap: 16px; }
  .sidebar-note blockquote { font-size: 13px; }
}

/* ———————— v0.7.6 截图反馈修复：AI 解读对比度 · 顶栏按钮 · 年度卡片 · 项目行 · 提醒条 ———————— */

/* 图1：AI 解读面板（深色）——提亮文字、拉开行距段距 */
.radar-lead .summary-content p { color: rgba(255,255,255,.92); font-size: 13px; line-height: 2.05; letter-spacing: .02em; margin-bottom: 12px; }
.radar-lead .summary-cat { color: #e6b7aa; font-weight: 500; letter-spacing: .06em; margin-top: 20px; margin-bottom: 8px; }
.radar-lead .summary-hint { color: rgba(255,255,255,.55); }
.radar-lead-number { color: rgba(255,255,255,.28); }
.radar-lead .eyebrow { color: #e6b7aa; }
@media (max-width: 900px) {
  .radar-lead { padding: 24px; gap: 8px; }
  .radar-lead .summary-content p { font-size: 13.5px; }
}

/* 图2a：顶栏按钮不折行 */
.top-actions { display: flex; flex-wrap: nowrap; gap: 8px; flex: none; }
.top-actions .quiet-button, .top-actions .primary-button { white-space: nowrap; }
@media (max-width: 900px) {
  .topbar { gap: 8px; }
  .topbar > div { min-width: 0; }
  .top-actions { gap: 6px; }
  .top-actions .quiet-button, .top-actions .primary-button { font-size: 12px; padding: 8px 9px; min-height: 38px; }
  .weather-line { display: none; }
}

/* 图2b：年度卡片——状态文字与按钮不再重叠 */
@media (max-width: 900px) {
  .goal-card { min-height: 0; }
  .goal-status { position: static; display: block; margin-top: 10px; font-size: 11px; }
  .goal-card-actions { position: static; margin-top: 12px; flex-wrap: wrap; gap: 8px; }
  .goal-card-actions button { white-space: nowrap; font-size: 11px; padding: 8px 10px; min-height: 36px; }
}

/* 图3a：正在创作——日期与进度不再压标题 */
@media (max-width: 900px) {
  .ledger-row { grid-template-columns: 26px 1fr 24px; grid-template-areas: "idx title arrow" "idx stage arrow" "idx progress progress"; row-gap: 8px; min-height: 0; padding: 16px 0; align-items: start; }
  .ledger-index { grid-area: idx; padding-top: 2px; }
  .ledger-title { grid-area: title; min-width: 0; }
  .ledger-title strong { font-size: 15px; line-height: 1.55; }
  .ledger-title small { font-size: 10px; margin-bottom: 5px; }
  .ledger-stage { grid-area: stage; font-size: 11px; color: var(--muted); }
  .ledger-progress-wrap { grid-area: progress; padding-right: 0; margin-top: 4px; }
  .ledger-progress-copy { font-size: 10px; margin-bottom: 5px; }
  .ledger-arrow { grid-area: arrow; }
}

/* 图3b：节奏提醒——拉开字距行距，按钮换行 */
@media (max-width: 900px) {
  .insight-strip { grid-template-columns: 28px 1fr; gap: 12px; padding: 22px; margin-top: 26px; }
  .insight-strip .text-button { grid-column: 2; justify-self: start; }
  .insight-strip p { font-size: 13px; line-height: 2; letter-spacing: .03em; }
  .insight-symbol { font-size: 22px; }
}
.insight-strip p { letter-spacing: .015em; line-height: 1.9; }

/* ———————— v0.8 移动端设计协调：统一节奏 · 统一卡片 · 顶栏融合 ———————— */

@media (max-width: 900px) {
  /* —— 设计令牌：8pt 间距节奏 —— */
  .view { padding: 20px 18px calc(56px + env(safe-area-inset-bottom)); }

  /* —— 顶栏：吸顶 + 毛玻璃，和页面融为一体 —— */
  .topbar {
    position: sticky; top: 0; z-index: 40;
    margin: 0 -18px; padding: 10px 18px calc(10px + env(safe-area-inset-top));
    background: rgba(239, 237, 230, .88);
    -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
    border-bottom: .5px solid var(--rule);
  }

  /* —— 卡片语言统一：14px 圆角 + 发丝描边 + 一致内距 —— */
  .paper-panel, .goal-card, .stats-card, .signal-group,
  .todo-compose-panel, .todo-book, .week-strip, .mini-timeline,
  .full-timeline, .keyword-watch, .source-ledger, .insight-strip,
  .modal-card, .restore-summary {
    border-radius: 14px;
  }
  .paper-panel, .goal-card, .stats-card, .todo-compose-panel,
  .source-ledger, .keyword-watch {
    border: .5px solid var(--rule);
    padding: 22px;
  }
  .signal-group { border: .5px solid var(--rule); }

  /* —— 区块节奏：每个大区块之间统一 28px —— */
  .goal-grid, .dashboard-grid, .status-section, .insight-strip,
  .signal-groups, .source-ledger, .keyword-watch, .radar-lead,
  .todo-compose-grid, .todo-book, .stats-grid { margin-top: 28px; }
  .page-intro { margin-bottom: 4px; }
  .page-intro + * { margin-top: 0; }
  .rule-heading { margin-top: 28px; }

  /* —— 标题层级统一 —— */
  .page-intro h1 { font-size: 24px; letter-spacing: .01em; }
  .panel-heading h2, .keyword-watch h2, .source-ledger h2 { font-size: 17px; }
  .eyebrow { font-size: 9.5px; letter-spacing: .18em; font-weight: 500; }

  /* —— 按钮统一：8px 圆角 + 一致高度 —— */
  .primary-button, .quiet-button, .inverse-button {
    border-radius: 9px; min-height: 42px;
  }
  .text-button { border-radius: 6px; }
  .segmented { border-radius: 9px; overflow: hidden; }
  .segmented button { border-radius: 0; }

  /* —— 抽屉导航：更清晰的分组与选中态 —— */
  .sidebar { border-right: .5px solid var(--rule); }
  .nav-item { border-radius: 9px; margin: 0 12px; padding: 0 12px; }
  .nav-item.active {
    background: rgba(160, 68, 50, .09);
    color: var(--vermilion);
  }
  .sidebar-note { margin: 18px 12px 0; padding: 16px; border-radius: 12px; border: .5px solid var(--rule); }
  .sidebar-footer { padding: 14px 12px calc(14px + env(safe-area-inset-bottom)); }

  /* —— 列表行统一节奏 —— */
  .task-item, .todo-row, .ledger-row, .archive-row, .work-row, .source-row {
    border-bottom: .5px solid var(--rule);
  }
  .task-item:last-child, .todo-row:last-child, .ledger-row:last-child,
  .archive-row:last-child, .work-row:last-child, .source-row:last-child { border-bottom: 0; }

  /* —— 表单统一 —— */
  input, select, textarea {
    border-radius: 9px;
    border: .5px solid var(--rule);
    background: var(--surface);
    padding: 10px 12px;
  }
  input:focus, select:focus, textarea:focus {
    outline: 1.5px solid rgba(160, 68, 50, .4);
    outline-offset: 0;
    border-color: var(--vermilion);
  }

  /* —— 深色面板统一圆角与内距 —— */
  .ink-panel { border-radius: 14px; padding: 22px; }

  /* —— 空状态统一 —— */
  .radar-empty, .archive-empty { border-bottom: 0; padding: 28px 0; }

  /* —— 周视图可横向滑动，带吸附 —— */
  .week-strip { overflow-x: auto; scroll-snap-type: x proximity; -webkit-overflow-scrolling: touch; }
  .day-cell { scroll-snap-align: start; }
}

/* ———————— v0.8.1 时间轴：阶段彩色 · 移动端加宽 · 可拖拽 ———————— */

/* 阶段配色（纸张色系，低饱和） */
.timeline-lanes .phase-bar.stage-0 { background: #a04432; }
.timeline-lanes .phase-bar.stage-1 { background: #59634f; }
.timeline-lanes .phase-bar.stage-2 { background: #8a6d3b; }
.timeline-lanes .phase-bar.stage-3 { background: #4f6272; }
.timeline-lanes .phase-bar.stage-4 { background: #7a5b73; }
.timeline-lanes .phase-bar.stage-5 { background: #b0834f; }
.timeline-lanes .phase-bar.stage-6 { background: #3c403a; }
.timeline-lanes .phase-bar.complete { background: #b5ad9d; color: rgba(255,255,255,.75); }
.timeline-lanes .phase-bar.upcoming { opacity: .45; }
.timeline-lanes .phase-bar.current { box-shadow: inset 0 0 0 2px rgba(32,35,31,.25); }

/* 拖拽手感 */
.full-timeline { cursor: grab; -webkit-overflow-scrolling: touch; }
.full-timeline.dragging { cursor: grabbing; user-select: none; }

/* 移动端：侧栏收窄、格子放大 */
@media (max-width: 900px) {
  .timeline-header-row, .timeline-project-row { grid-template-columns: 140px 1fr; }
  .timeline-side-head { padding: 14px 14px; font-size: 9.5px; }
  .timeline-project-copy { padding: 16px 14px; }
  .timeline-project-copy strong { font-size: 13px; white-space: normal; line-height: 1.45; }
  .timeline-project-copy span { font-size: 10px; }
  .timeline-day { font-size: 9px; padding: 10px 2px; }
  .timeline-day strong { font-size: 11px; }
  .phase-bar { height: 36px; font-size: 10px; }
  .full-timeline { min-height: 420px; }
}

/* ———————— v0.8.2 时间轴方块加大 ———————— */

.phase-bar { height: 38px; min-width: 38px; font-size: 10px; border-radius: 5px; margin: 0 1px; }
.timeline-project-row { min-height: 116px; }

@media (max-width: 900px) {
  .phase-bar { height: 46px; min-width: 46px; font-size: 11px; border-radius: 6px; }
  .timeline-project-row { min-height: 128px; }
  .timeline-lanes { align-items: center; }
}

/* ———————— v0.8.3 弹窗改底部抽屉（手机上滑动画）+ 详情页防溢出 ———————— */

@media (max-width: 900px) {
  /* 所有弹窗统一为底部抽屉，从下方滑入 */
  .modal-backdrop { padding: 0; place-items: end center; }
  .modal-card {
    width: 100%; max-width: 100%; margin: 0;
    max-height: 88vh;
    border-radius: 16px 16px 0 0;
    padding: 24px 20px calc(24px + env(safe-area-inset-bottom));
    box-sizing: border-box;
  }
  .modal-backdrop.open .modal-card { animation: sheet-in .3s cubic-bezier(.2,.8,.3,1); }
  @keyframes sheet-in { from { opacity: 0; transform: translateY(48px); } to { opacity: 1; transform: none; } }
  .compact-card, .detail-card, .source-modal-card { width: 100%; }

  /* 详情页内容防溢出 */
  .detail-header h2 { font-size: 21px; line-height: 1.45; margin-right: 36px; word-break: break-all; }
  .detail-meta { flex-wrap: wrap; gap: 6px 16px; font-size: 11px; }
  .detail-schedule-edit { grid-template-columns: 1fr; gap: 14px; padding: 16px; }
  .detail-schedule-edit label { font-size: 11px; }
  .detail-schedule-edit input, .detail-schedule-edit select { min-height: 44px; }

  /* 步骤编辑行：四列收紧，按钮不再被切 */
  .phase-edit-row { grid-template-columns: 20px minmax(0,1fr) 66px 78px; gap: 8px; min-height: 58px; padding: 12px 0; }
  .phase-edit-row label { min-width: 0; }
  .phase-edit-row label > span:first-child { display: none; }
  .phase-edit-row label input { padding: 10px; min-width: 0; }
  .days-input { font-size: 11px; gap: 4px; }
  .days-input input { width: 100% !important; min-width: 0; }
  .phase-row-actions { gap: 2px; }
  .phase-row-actions button { width: 24px; height: 28px; flex: none; }
  .phase-builder-head { flex-wrap: wrap; gap: 8px; }
  .detail-phase-heading { font-size: 17px; }
}

/* ———————— v0.8.4 修复页面横向溢出（顶栏负边距用错位置）——————— */

@media (max-width: 900px) {
  html, body { overflow-x: hidden; overscroll-behavior-x: none; width: 100%; max-width: 100%; }
  body { min-width: 0; }
  .app-shell { overflow-x: hidden; }
  .topbar { margin: 0; width: 100%; box-sizing: border-box; padding: 10px 18px calc(10px + env(safe-area-inset-top)); }
  .view { overflow-x: clip; max-width: 100%; }
}

/* ———————— v0.8.5 手机去年份 · 两侧留白加大 ———————— */

@media (max-width: 900px) {
  .date-year { display: none; }
  .topbar { padding: 10px 24px calc(10px + env(safe-area-inset-top)); }
  .view { padding: 20px 26px calc(56px + env(safe-area-inset-bottom)); }
  .modal-card { padding: 24px 26px calc(24px + env(safe-area-inset-bottom)); }
  .sidebar { width: min(82vw, 320px); }
}
@media (max-width: 380px) {
  .view { padding: 20px 22px calc(56px + env(safe-area-inset-bottom)); }
}

/* ———————— v0.8.6 全站统一得意黑（Smiley Sans）——————— */

@font-face {
  font-family: "Smiley Sans";
  src: url("fonts/SmileySans-Oblique.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
:root {
  --serif: "Smiley Sans", "Songti SC", "STSong", "Noto Serif CJK SC", Georgia, serif;
  --sans: "Smiley Sans", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, sans-serif;
}

/* ———————— v0.9.1 截图修复：表单重叠 · 目标进度条 · 首页大字 ———————— */

@media (max-width: 900px) {
  /* 弹窗双列表单改单列，消除重叠 */
  .modal-card .form-row { grid-template-columns: 1fr; gap: 14px; }

  /* 目标卡片：进度条加粗上移，文字不再压线 */
  .goal-card { padding-bottom: 34px; }
  .goal-progress { position: static; height: 4px; margin-top: 12px; border-radius: 2px; }
  .goal-status { margin-top: 10px; }
  .goal-card strong { font-size: 34px; }
  .goal-card .goal-tag { font-size: 11px; }

  /* 首页主标题与导语放大 */
  .hero-row h1 { font-size: 30px; line-height: 1.5; }
  .hero-aside p { font-size: 14px; line-height: 1.9; }
  .hero-aside .issue-number { font-size: 12px; }
  .dashboard-summary, #dashboard-summary { font-size: 14px; line-height: 1.9; }
  .date-line { font-size: 16px; }
}

/* ———————— v0.9.2 目标卡片去灰框、手机改整行排列 ———————— */

@media (max-width: 900px) {
  .goal-grid { grid-template-columns: 1fr; gap: 14px; background: none; border: 0; margin: 22px 0 0; }
  .goal-card { display: grid; grid-template-columns: 1fr auto; grid-template-areas: "head head" "num num" "actions actions" "status status" "bar bar"; }
}

/* ———————— v0.9.3 目标卡：边框更明显 · 文字放大 ———————— */

@media (max-width: 900px) {
  .goal-card { border: 1px solid rgba(32,35,31,.38); padding: 24px; }
  .goal-card .goal-tag { font-size: 15px; letter-spacing: .04em; color: var(--ink); }
  .goal-card .goal-tag + span, .goal-card > span { font-size: 12px; }
  .goal-card strong { font-size: 46px; }
  .goal-card strong + span, .goal-card .goal-num { font-size: 16px; }
  .goal-card-actions button { font-size: 14px; padding: 12px 16px; min-height: 46px; border-width: 1px; }
  .goal-status { font-size: 14px; color: var(--ink-soft); }
  .goal-progress { height: 5px; }
}

/* ———————— v0.9.5 桌面端字号整体上调 ———————— */

@media (min-width: 901px) {
  body { font-size: 15px; }
  .rule-heading span:last-child, .goal-tag, .goal-status, .week-day,
  .mini-project-name small, .task-copy small, .task-stage, .empty-action span,
  .ledger-title small, .ledger-progress-copy, .timeline-legend, .timeline-side-head,
  .timeline-day, .timeline-project-copy small, .timeline-project-copy span,
  .timeline-footnote, .card-meta, .card-footer, .archive-stats span,
  .archive-title small, .archive-meta small, .document-item small, .document-item span,
  .editor-toolbar, .manuscript-meta, .notion-link-field span, .recorder-topline,
  .marker-line, .privacy-note, .recording-copy small, .recording-note-preview,
  .recording-actions a, .recording-actions button, .detail-type, .detail-phase time,
  .danger-link, .detail-complete-note span, .phase-builder-head small,
  .detail-phase-heading small, .phase-edit-row label > span:first-child,
  .days-input, .phase-edit-row time, .goal-card-actions button,
  .archive-row .quiet-button, .local-indicator, .sidebar-note .eyebrow {
    font-size: 11.5px;
  }
  .eyebrow { font-size: 11px; }
  .brand-en { font-size: 11px; }
  .phase-bar { font-size: 10.5px; }
  .text-button, .quiet-button, .inverse-button, .icon-text-button,
  .segmented button, .trend-add { font-size: 13.5px; }
  .nav-item { font-size: 14.5px; }
  .weather-line { font-size: 13px; }
  .date-line { font-size: 17px; }
  .page-intro p { font-size: 14px; }
  .panel-heading h2, .keyword-watch h2, .source-ledger h2 { font-size: 20px; }
  .task-item strong, .todo-row strong { font-size: 15.5px; }
  .ledger-title strong { font-size: 17px; }
  .projects-grid strong { font-size: 16.5px; }
  .archive-row strong { font-size: 16px; }
  .summary-content p { font-size: 14px; }
  .signal-item .trend-copy strong { font-size: 16px; }
  .signal-item .trend-copy p { font-size: 12px; }
  .signal-meta { font-size: 11.5px; }
  .keyword-tag { font-size: 13.5px; }
  .modal-card p, form label { font-size: 13.5px; }
  input, select, textarea { font-size: 14.5px; }
  .todo-meta, .task-item small, .todo-row small { font-size: 12px; }
  .sidebar-note blockquote { font-size: 15px; }
  .goal-card span, .goal-card small { font-size: 12.5px; }
  .stats-number span { font-size: 13px; }
  .stats-status, .work-row span, .works-head { font-size: 12px; }
  .work-row strong { font-size: 14.5px; }
  .source-row strong { font-size: 14.5px; }
  .source-row span, .source-row small, .source-cadence { font-size: 12px; }
}

/* ———————— v0.9.5 子待办 · 首页待办加大 ———————— */

.subtask-row { display: flex; align-items: center; gap: 10px; padding: 8px 0 8px 46px; border-bottom: .5px solid var(--rule); font-size: 13px; color: var(--ink-soft); }
.subtask-row.done span { text-decoration: line-through; opacity: .5; }
.subtask-row .todo-check.small { width: 20px; height: 20px; font-size: 11px; flex: none; }
.subtask-add { padding: 6px 0 6px 46px; font-size: 11px; color: var(--muted); cursor: pointer; }
.subtask-add:hover { color: var(--vermilion); }
.subtask-input { margin: 4px 0 4px 46px; width: calc(100% - 46px); font-size: 13px; }

@media (max-width: 900px) {
  .subtask-row { font-size: 14px; padding: 10px 0 10px 40px; }
  .subtask-add { padding-left: 40px; }
  .subtask-input { margin-left: 40px; width: calc(100% - 40px); }

  /* 首页今日三件事加大占比 */
  .today-panel { min-height: 380px; padding: 28px 24px; }
  .today-panel h2 { font-size: 26px; }
  .today-panel .eyebrow { font-size: 11px; }
  .task-item { padding: 18px 0; min-height: 60px; }
  .task-item .task-copy { font-size: 16px; line-height: 1.55; }
  .task-item .task-copy small { font-size: 12px; margin-top: 6px; }
  .task-check { width: 28px; height: 28px; }
  .task-stage { font-size: 12px; }
  .today-panel .empty-action, .today-panel .empty-state { font-size: 14px; padding: 20px 0; }
}

/* 日历多源列表 */
.calendar-feed-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 0; border-bottom: .5px solid var(--rule); font-size: 13px; }
.calendar-feed-row:last-child { border-bottom: 0; }
.calendar-feed-row .quiet-button { min-height: 34px; font-size: 12px; padding: 6px 12px; flex: none; }
.calendar-steps p { font-size: 12px; line-height: 1.7; margin: 6px 0; }
.calendar-url { max-height: 220px; overflow-y: auto; }

/* ———————— v1.0 Things 风格待办 ———————— */

.things-layout { display: grid; grid-template-columns: 210px minmax(0,1fr); gap: 24px; align-items: start; margin-top: 28px; }
.todo-head-actions { display: flex; gap: 8px; flex: none; }

/* 侧栏 */
.things-sidebar { position: sticky; top: 96px; display: flex; flex-direction: column; gap: 14px; }
.things-views { display: flex; flex-direction: column; gap: 2px; }
.things-views button { display: flex; align-items: center; gap: 11px; padding: 10px 12px; font-size: 13.5px; background: none; border: 0; border-radius: 9px; cursor: pointer; color: var(--ink); text-align: left; transition: background .15s; }
.things-views button svg { width: 16px; height: 16px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.things-views button span { flex: 1; }
.things-views button:hover { background: rgba(32,35,31,.05); }
.things-views button.active { background: rgba(160,68,50,.09); color: var(--vermilion); }
.things-cats-head { display: flex; justify-content: space-between; align-items: center; font-size: 11px; color: var(--muted); letter-spacing: .1em; padding: 12px 4px 0; border-top: .5px solid var(--rule); }
.things-cats-head button { border: 0; background: none; cursor: pointer; color: var(--muted); font-size: 13px; }
.things-cats { display: flex; flex-direction: column; gap: 2px; }
.things-cat { display: flex; align-items: center; gap: 9px; padding: 8px 10px; border: 0; background: none; border-radius: 8px; cursor: pointer; font-size: 13px; color: var(--ink); text-align: left; }
.things-cat i { width: 8px; height: 8px; border-radius: 50%; flex: none; }
.things-cat em { margin-left: auto; font-style: normal; font-size: 11px; color: var(--muted); }
.things-cat.active { background: rgba(32,35,31,.06); }
.things-add-cat { padding: 8px 10px; border: 0; background: none; color: var(--muted); font-size: 12px; cursor: pointer; text-align: left; }
.things-add-cat:hover { color: var(--vermilion); }
.things-stats { border-top: .5px solid var(--rule); padding-top: 14px; color: var(--moss); }
.th-stats-nums { display: flex; gap: 18px; margin-bottom: 8px; }
.th-stats-nums strong { font: 500 20px/1 var(--serif); display: block; }
.th-stats-nums span { font-size: 10px; color: var(--muted); }
.th-spark { width: 100%; height: 28px; }

/* 主列表 */
.things-toolbar { margin-bottom: 14px; }
.things-toolbar input { width: 100%; box-sizing: border-box; }
.th-group { margin-bottom: 20px; }
.th-group-head { display: flex; align-items: center; gap: 8px; width: 100%; padding: 8px 4px; border: 0; background: none; cursor: pointer; font: 500 14px/1.2 var(--serif); color: var(--ink); text-align: left; }
.th-group-head i { width: 8px; height: 8px; border-radius: 50%; }
.th-group-head span { color: var(--muted); font-size: 11px; }
.th-group-head b { margin-left: auto; color: var(--muted); font-weight: 400; }

.th-task { display: flex; align-items: flex-start; gap: 12px; padding: 12px 4px; border-bottom: .5px solid var(--rule); }
.th-task:last-child { border-bottom: 0; }
.th-task.overdue .th-title { color: var(--vermilion); }
.th-task.soon .th-meta { color: #b0834f; }
.th-check { flex: none; width: 20px; height: 20px; margin-top: 2px; border: 1.2px solid var(--ink-soft); border-radius: 50%; background: none; cursor: pointer; display: grid; place-items: center; }
.th-check i { width: 10px; height: 10px; border-radius: 50%; background: transparent; }
.th-task.done .th-check i, .th-sub.done > .th-check i, .th-step.done > .th-check i { background: var(--moss); }
.th-check.small { width: 16px; height: 16px; }
.th-check.tiny { width: 14px; height: 14px; }
.th-body { flex: 1; min-width: 0; }
.th-title { font-size: 14.5px; line-height: 1.55; cursor: pointer; }
.th-title:hover { color: var(--vermilion); }
.th-task.done .th-title { text-decoration: line-through; opacity: .5; }
.th-meta { display: flex; flex-wrap: wrap; gap: 4px 12px; margin-top: 4px; font-size: 11px; color: var(--muted); }
.th-pri { font-weight: 500; }
.th-over { color: var(--vermilion); font-weight: 500; }
.th-tag { font-style: normal; font-size: 10px; padding: 1px 7px; margin-left: 6px; border: .5px solid var(--rule); border-radius: 999px; color: var(--moss); }
.th-expand { flex: none; border: 0; background: none; color: var(--muted); font-size: 11px; cursor: pointer; padding: 4px 6px; }
.th-expand.open { color: var(--vermilion); }
.th-del { flex: none; border: 0; background: none; color: var(--muted); font-size: 14px; cursor: pointer; padding: 2px 6px; opacity: 0; transition: opacity .15s, color .15s; border-radius: 6px; }
.th-task:hover .th-del { opacity: 1; }
.th-del:hover { color: var(--vermilion); background: rgba(179,58,38,.08); }
@media (hover: none) { .th-del { opacity: .55; } }

/* 快速添加条（草稿确认制） */
.todo-quick-add { display: flex; flex-direction: column; gap: 10px; margin: 0 0 14px; padding: 14px 16px; border: 1px solid var(--ink); border-radius: 12px; background: var(--paper, #f8f6f0); }
.todo-quick-input { width: 100%; box-sizing: border-box; font: inherit; font-size: 15px; padding: 10px 12px; border: 0; border-bottom: 1px solid var(--rule); background: transparent; color: inherit; outline: none; }
.todo-quick-actions { display: flex; justify-content: flex-end; gap: 10px; }

/* Things 风格新建弹窗 */
.todo-modal-card { width: min(560px, 94vw); padding: 30px 32px 26px; }
.todo-modal-title-row { display: flex; align-items: center; gap: 12px; }
.todo-modal-check { pointer-events: none; }
.todo-modal-title-row input { flex: 1; min-width: 0; border: 0; border-bottom: 1px solid var(--rule); background: none; outline: none; font-size: 17px; color: var(--ink); padding: 6px 0; }
.todo-modal-title-row input:focus { border-bottom-color: var(--ink); }
#tqa-note { display: block; width: calc(100% - 32px); margin-left: 32px; box-sizing: border-box; border: 0; border-bottom: 1px solid var(--rule); background: none; outline: none; resize: none; font-size: 14px; line-height: 1.7; color: var(--ink-soft); padding: 8px 0; }
.todo-modal-fields { display: flex; flex-wrap: wrap; gap: 12px; margin: 16px 0 0 32px; }
.tm-field { flex: 1; min-width: 118px; display: flex; flex-direction: column; gap: 6px; font-size: 11px; color: var(--muted); }
.tm-field input, .tm-field select { font-size: 13.5px; padding: 9px 10px; border: .5px solid var(--rule); border-radius: 8px; background: var(--paper-light, #fffdf8); color: var(--ink); }
.todo-modal-footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 20px 0 0 32px; }
.todo-dest { font-size: 12.5px; color: var(--muted); }
.th-someday-row { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--ink-soft); cursor: pointer; }
.th-someday-row input { accent-color: var(--moss); }

.th-subs { margin-top: 8px; }
.th-sub { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; padding: 7px 0 7px 4px; border-bottom: .5px dashed var(--rule); font-size: 13px; }
.th-sub.done > .th-sub-title { text-decoration: line-through; opacity: .5; }
.th-sub-title { cursor: text; flex: 1; min-width: 100px; }
.th-step { display: flex; align-items: center; gap: 8px; width: 100%; padding: 5px 0 5px 26px; font-size: 12px; color: var(--ink-soft); }
.th-step.done span { text-decoration: line-through; opacity: .5; }
.th-mini { flex: none; border: 0; background: none; color: var(--muted); cursor: pointer; font-size: 12px; padding: 2px 5px; }
.th-mini:hover { color: var(--vermilion); }
.th-add-sub { border: 0; background: none; color: var(--muted); font-size: 12px; cursor: pointer; padding: 8px 0 2px 4px; }
.th-add-sub:hover { color: var(--vermilion); }
.th-inline-input { flex: 1; font-size: 13px; padding: 4px 8px; }

/* 详情面板 */
.things-detail { position: fixed; top: 0; right: 0; bottom: 0; z-index: 60; width: min(400px, 92vw); padding: 28px 24px; background: var(--paper-light); border-left: .5px solid var(--rule); box-shadow: -12px 0 40px rgba(32,35,31,.1); overflow-y: auto; transform: translateX(105%); transition: transform .28s cubic-bezier(.2,.8,.3,1); }
.things-detail.open { transform: none; }
.th-detail-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 18px; }
.th-detail-head strong { font: 500 17px/1.2 var(--serif); }
.th-field { display: block; margin-bottom: 14px; font-size: 12px; color: var(--muted); }
.th-field input, .th-field textarea, .th-field select { width: 100%; margin-top: 6px; box-sizing: border-box; }
.th-field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.th-field-label { display: block; margin-bottom: 6px; }
.th-tags-edit { display: flex; flex-wrap: wrap; gap: 6px; }
.th-tag-btn { padding: 5px 12px; border: .5px solid var(--rule); border-radius: 999px; background: none; font-size: 12px; cursor: pointer; color: var(--ink-soft); }
.th-tag-btn.on { background: rgba(89,99,79,.14); border-color: var(--moss); color: var(--moss); }

@media (max-width: 900px) {
  .things-layout { grid-template-columns: 1fr; }
  .things-sidebar { position: static; gap: 10px; }
  .things-cats { flex-direction: row; flex-wrap: wrap; }
  .things-detail { width: 100vw; padding: 24px 22px calc(24px + env(safe-area-inset-bottom)); }
  .todo-head-actions .quiet-button { display: none; }
  /* 手机端六视图改横向 chips：对齐 Things 手机版交互，不再整屏竖排 */
  .things-views { flex-direction: row; flex-wrap: wrap; gap: 6px; }
  .things-views button { padding: 8px 13px; font-size: 13px; gap: 7px; border: .5px solid var(--rule); border-radius: 999px; background: var(--paper-light, #fffdf8); }
  .things-views button svg { width: 14px; height: 14px; }
  .things-views button.active { border-color: rgba(160,68,50,.45); }
  .things-cats-head { padding-top: 8px; }
  .apple-link-status { display: none; }
  .todo-modal-card { padding: 24px 22px calc(24px + env(safe-area-inset-bottom)); }
  .todo-modal-fields, .todo-modal-footer, #tqa-note { margin-left: 0; }
  #tqa-note { width: 100%; }
  /* 手机端「新任务」按钮底部悬浮，单手可触达 */
  .things-toolbar { display: flex; align-items: center; gap: 10px; }
  .things-toolbar input { flex: 1; min-width: 0; }
  .things-toolbar #todo-export-btn { display: none; }
  .things-toolbar #things-add-btn { position: fixed; right: 16px; bottom: calc(18px + env(safe-area-inset-bottom)); z-index: 40; padding: 14px 20px; border-radius: 999px; box-shadow: 0 10px 28px rgba(0,0,0,.18); }
  /* 触控目标加大，避免误触 */
  .th-check { width: 28px; height: 28px; }
  .th-del { padding: 8px 10px; font-size: 16px; }
  .th-expand { padding: 8px 10px; }
  .th-task { padding: 14px 4px; }
}

/* ———————— v1.0.1 目标卡按钮收小 ———————— */

@media (max-width: 900px) {
  .goal-card-actions button { font-size: 12px; padding: 8px 12px; min-height: 38px; }
}

/* ———————— v1.0.1 手机字号再上调 ———————— */

@media (max-width: 900px) {
  body { font-size: 15px; }
  .page-intro p, .hero-aside p { font-size: 13.5px; }
  .th-title { font-size: 15.5px; }
  .th-meta { font-size: 11.5px; }
  .things-cat span { font-size: 14px; }
  .things-view span { font-size: 13.5px; }
  .things-detail-grid label, .things-detail-grid input, .things-detail-grid textarea { font-size: 13.5px; }
  .things-detail-grid textarea { font-size: 14px; }
  .signal-item .trend-copy strong { font-size: 15px; }
  .signal-item .trend-copy p { font-size: 12px; }
  .signal-group-title { font-size: 16px; }
  .summary-content p { font-size: 13.5px; }
  .task-item strong, .todo-row strong { font-size: 15px; }
  .ledger-title strong { font-size: 16px; }
  .ledger-stage { font-size: 12px; }
  .goal-status { font-size: 14.5px; }
  .stats-number span { font-size: 14px; }
  .stats-note { font-size: 12.5px; }
  .work-row strong { font-size: 14px; }
  .source-row strong { font-size: 14px; }
  .source-row span, .source-row small { font-size: 12px; }
  .archive-row strong { font-size: 15px; }
  .archive-row small { font-size: 12.5px; }
  .keyword-tag { font-size: 13px; }
  form label { font-size: 13px; }
  .todo-form-actions span { font-size: 12.5px; }
}

/* ———————— v1.1 视图重组 · 速记 · 读书 · 拖拽 ———————— */

.nav-group-label { padding: 18px 24px 6px; color: var(--muted); font-size: 9.5px; letter-spacing: .2em; }
.nav-group-label:first-child { padding-top: 6px; }

.create-panels { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 28px; }
.quicknote-form { display: flex; gap: 8px; margin-bottom: 8px; }
.quicknote-form input { flex: 1; }
.quicknote-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 10px 0; border-top: .5px solid var(--rule); }
.quicknote-row span { font-size: 13px; line-height: 1.6; }
.quicknote-actions { display: flex; gap: 6px; flex: none; }
.quicknote-actions button { border: .5px solid var(--rule); background: none; border-radius: 6px; padding: 4px 8px; font-size: 11px; cursor: pointer; color: var(--muted); }
.quicknote-actions button:hover { color: var(--vermilion); border-color: var(--vermilion); }

.book-add-form { display: grid; grid-template-columns: 1fr 90px; gap: 8px; margin-bottom: 10px; }
.book-add-form select, .book-add-form button { grid-column: span 1; }
.book-row { padding: 14px 0; border-top: .5px solid var(--rule); }
.book-head { display: flex; justify-content: space-between; align-items: baseline; }
.book-head strong { font-size: 14.5px; }
.book-head span { font-size: 13px; color: var(--vermilion); }
.book-row.done .book-head span { color: var(--moss); }
.book-bar { height: 5px; margin-top: 8px; background: rgba(32,35,31,.1); border-radius: 3px; overflow: hidden; }
.book-bar i { display: block; height: 100%; background: #4f6272; border-radius: 3px; transition: width .3s ease; }
.book-progress-form { display: flex; gap: 8px; margin-top: 10px; }
.book-progress-form input { flex: 1; max-width: 160px; }
.book-progress-form button { border: .5px solid var(--rule); background: none; border-radius: 8px; padding: 8px 14px; font-size: 12px; cursor: pointer; }
.book-progress-form button:hover { color: var(--vermilion); border-color: var(--vermilion); }
.book-meta { display: flex; justify-content: space-between; margin-top: 8px; font-size: 11px; color: var(--muted); }
.book-delete { border: 0; background: none; color: var(--muted); font-size: 11px; cursor: pointer; }
.book-delete:hover { color: var(--vermilion); }

.th-task.dragging { opacity: .4; }
.th-task.drag-over { box-shadow: 0 2px 0 var(--vermilion); }
.th-task[draggable="true"] { cursor: grab; }

.timeline-tools { display: flex; align-items: center; justify-content: space-between; margin: 28px 0 12px; }

@media (max-width: 900px) {
  .create-panels { grid-template-columns: 1fr; }
  .quicknote-row span { font-size: 14px; }
  .book-head strong { font-size: 15px; }
  .book-progress-form input { max-width: none; }
}

/* ———————— v1.1.1 速记/读书面板细化 ———————— */

.create-panels { align-items: start; }
.quicknote-form input { min-height: 42px; }
.quicknote-form .primary-button { min-height: 42px; padding: 8px 22px; align-self: center; }
.quicknote-list .works-empty { padding: 18px 0 6px; }

.book-add-form { grid-template-columns: 1fr 120px; align-items: center; }
.book-add-form input, .book-add-form select { min-height: 42px; }
.book-add-form .primary-button { min-height: 42px; padding: 8px 0; }
.book-progress-form input { min-height: 38px; }
.book-progress-form button { padding: 6px 14px; }

@media (max-width: 900px) {
  .quicknote-form input { min-height: 46px; }
  .quicknote-form .primary-button { min-height: 46px; }
  .book-add-form { grid-template-columns: 1fr 100px; }
  .book-add-form input, .book-add-form select, .book-add-form .primary-button { min-height: 46px; }
}

/* ———————— v1.1.2 全局设计统一：圆角 · 内距 · 呼吸感 ———————— */

/* 卡片统一 14px 圆角（桌面+移动一致） */
.paper-panel, .ink-panel, .goal-card, .stats-card, .signal-group,
.todo-book, .week-strip, .mini-timeline, .full-timeline,
.keyword-watch, .source-ledger, .modal-card, .restore-summary,
.things-sidebar, .things-main, .things-detail, .project-card {
  border-radius: 14px;
}

/* 控件统一 9px 圆角 */
.primary-button, .quiet-button, .inverse-button,
input, select, textarea {
  border-radius: 9px;
}
.text-button, .trend-add { border-radius: 6px; }

/* 面板内距与行间呼吸 */
.paper-panel, .ink-panel { padding: 28px; }
.panel-heading { margin-bottom: 20px; }
.create-panels { gap: 22px; }
.quicknote-form { gap: 10px; margin-bottom: 12px; }
.book-add-form { gap: 10px; margin-bottom: 12px; }
.quicknote-row { padding: 13px 0; }
.book-row { padding: 16px 0; }
.book-progress-form { margin-top: 12px; gap: 10px; }
.book-meta { margin-top: 10px; }

/* 输入框内距 */
input, select { padding: 10px 14px; }
textarea { padding: 12px 14px; }

@media (max-width: 900px) {
  .paper-panel, .ink-panel { padding: 22px; }
}

/* ———————— v1.2 习惯追踪 · 番茄钟 ———————— */

.habit-add-form { display: grid; grid-template-columns: 1fr auto auto; gap: 10px; align-items: center; padding: 16px; border: .5px solid var(--rule); border-radius: 12px; margin-bottom: 20px; background: var(--surface); }
.habit-colors { display: flex; gap: 6px; }
.habit-color { width: 26px; height: 26px; border-radius: 50%; border: 2px solid transparent; cursor: pointer; }
.habit-color.active { border-color: var(--ink); }
.habit-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 16px; margin-top: 24px; }
.habit-card { padding: 20px; border: .5px solid var(--rule); border-radius: 14px; cursor: pointer; transition: transform .15s ease, border-color .15s ease; background: var(--surface); position: relative; }
.habit-card:hover { transform: translateY(-2px); border-color: var(--habit-color); }
.habit-card.done { border-color: var(--habit-color); background: var(--surface-strong); }
.habit-card.done::before { content: ""; position: absolute; left: 0; top: 14px; bottom: 14px; width: 3px; border-radius: 2px; background: var(--habit-color); }
.habit-top { display: flex; justify-content: space-between; align-items: start; }
.habit-top strong { font-size: 15.5px; line-height: 1.4; }
.habit-delete { border: 0; background: none; color: var(--muted); cursor: pointer; font-size: 14px; }
.habit-delete:hover { color: var(--vermilion); }
.habit-streak { display: flex; justify-content: space-between; align-items: baseline; margin-top: 10px; font-size: 13px; color: var(--habit-color); }
.habit-streak span { color: var(--muted); font-size: 11px; }
.habit-week { display: flex; gap: 5px; margin-top: 12px; }
.habit-week i { flex: 1; height: 18px; border-radius: 4px; background: rgba(32,35,31,.08); }
.habit-week i.on { background: var(--habit-color); }
.habit-week i.today { outline: 1.5px solid var(--ink); outline-offset: 1px; }
.habit-archive { margin-top: 10px; border: 0; background: none; color: var(--muted); font-size: 10.5px; cursor: pointer; padding: 0; }
.habit-archive:hover { color: var(--vermilion); }
.dashboard-habits { margin-left: 10px; font-size: 11px; color: var(--vermilion); letter-spacing: .03em; }

.focus-layout { display: grid; grid-template-columns: 1.1fr .9fr; gap: 20px; margin-top: 24px; }
.focus-panel { display: flex; flex-direction: column; align-items: center; gap: 22px; }
.focus-ring-wrap { position: relative; width: 240px; height: 240px; }
.focus-ring { width: 100%; height: 100%; transform: rotate(-90deg); }
.focus-ring-bg { fill: none; stroke: rgba(32,35,31,.1); stroke-width: 8; }
.focus-ring-fg { fill: none; stroke: var(--vermilion); stroke-width: 8; stroke-linecap: round; stroke-dasharray: 653.45; stroke-dashoffset: 0; transition: stroke-dashoffset .9s linear; }
.focus-center { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; }
.focus-center strong { font: 46px/1 var(--serif); letter-spacing: .02em; }
.focus-center span { font-size: 12px; color: var(--muted); max-width: 150px; text-align: center; }
.focus-controls { display: flex; flex-direction: column; gap: 12px; width: 100%; max-width: 320px; }
.focus-presets { display: flex; gap: 6px; justify-content: center; }
.focus-presets button { flex: 1; padding: 9px 4px; border: .5px solid var(--rule); background: none; border-radius: 8px; font-size: 12px; cursor: pointer; }
.focus-presets button.active { border-color: var(--vermilion); color: var(--vermilion); }
.focus-running-controls { display: flex; gap: 10px; }
.focus-today { display: flex; align-items: baseline; gap: 8px; margin-bottom: 10px; }
.focus-today strong { font: 34px/1 var(--serif); }
.focus-today span { font-size: 12px; color: var(--muted); }
.focus-chart { width: 100%; height: 72px; color: var(--vermilion); margin-bottom: 10px; }
.focus-log-row { display: flex; justify-content: space-between; padding: 9px 0; border-top: .5px solid var(--rule); font-size: 12.5px; }
.focus-log-row em { font-style: normal; color: var(--muted); font-size: 11px; }

@media (max-width: 900px) {
  .focus-layout { grid-template-columns: 1fr; }
  .habit-grid { grid-template-columns: 1fr 1fr; gap: 12px; }
  .habit-card { padding: 16px; }
  .habit-add-form { grid-template-columns: 1fr; }
}
@media (max-width: 420px) {
  .habit-grid { grid-template-columns: 1fr; }
}

/* ———————— v1.3 习惯页 iBetter 风格 ———————— */

.habit-add-form { display: flex; flex-direction: column; gap: 10px; padding: 18px; border: .5px solid var(--rule); border-radius: 14px; margin-bottom: 20px; background: var(--surface); }
.habit-form-row { display: flex; gap: 10px; align-items: center; }
.habit-form-row input:not(.habit-emoji-input) { flex: 1; }
.habit-emoji-input { width: 56px; text-align: center; font-size: 20px; }

.habit-calendar-panel { margin-top: 24px; }
.habit-cal-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 12px; }
.habit-cal-head strong { font: 20px/1 var(--serif); }
.habit-cal-head span { font-size: 10.5px; color: var(--muted); }
.habit-cal-week { display: grid; grid-template-columns: repeat(7, 1fr); text-align: center; color: var(--muted); font-size: 11px; margin-bottom: 6px; }
.habit-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; }
.habit-cal-cell { aspect-ratio: 1; display: grid; place-items: center; border: 1px solid transparent; border-radius: 8px; background: var(--surface-strong); color: var(--ink-soft); font-size: 13px; cursor: pointer; }
.habit-cal-cell.empty, .habit-cal-cell.future { background: none; color: var(--muted); opacity: .4; cursor: default; }
.habit-cal-cell.partial { border-color: #6f8f6a; color: #4f6b4b; }
.habit-cal-cell.full { background: #6f8f6a; color: #fff; }
.habit-cal-cell.today { border-color: #4f6272; box-shadow: 0 0 0 1px #4f6272; }
.habit-cal-cell.selected { outline: 2px solid var(--vermilion); outline-offset: 1px; }
.habit-day-detail { margin-top: 14px; font-size: 12.5px; line-height: 2; color: var(--ink-soft); }
.habit-day-detail .ok { color: #4f6b4b; margin-right: 12px; }
.habit-day-detail .no { color: var(--muted); margin-right: 12px; }

.habit-card { display: flex; align-items: center; gap: 16px; }
.habit-card-main { display: flex; align-items: center; gap: 14px; flex: 1; min-width: 0; }
.habit-emoji { font-size: 26px; flex: none; }
.habit-text { min-width: 0; }
.habit-text strong { display: block; font-size: 15.5px; line-height: 1.4; }
.habit-text em { display: block; font-style: normal; font-size: 12px; color: var(--ink-soft); margin-top: 3px; }
.habit-streak-line { display: flex; align-items: center; gap: 4px; margin-top: 8px; font-size: 11px; color: var(--muted); }
.habit-streak-line i { width: 14px; height: 14px; border-radius: 3px; background: rgba(32,35,31,.08); }
.habit-streak-line i.on { background: var(--habit-color); }
.habit-bigcheck { flex: none; width: 44px; height: 44px; border-radius: 50%; border: 2px solid var(--habit-color); background: transparent; color: #fff; font-size: 18px; cursor: pointer; transition: background .15s ease; }
.habit-bigcheck.on { background: var(--habit-color); }
.habit-card-foot { position: absolute; right: 16px; bottom: 8px; display: flex; gap: 10px; }
.habit-card-foot button { border: 0; background: none; color: var(--muted); font-size: 10px; cursor: pointer; padding: 0; }
.habit-card-foot button:hover { color: var(--vermilion); }

.habit-stats-panel { margin-top: 24px; }
.habit-month-rate { display: flex; align-items: baseline; gap: 10px; margin-bottom: 16px; }
.habit-month-rate strong { font: 34px/1 var(--serif); color: #4f6b4b; }
.habit-month-rate span { font-size: 12px; color: var(--muted); }
.habit-heatmap { display: flex; gap: 3px; overflow-x: auto; padding-bottom: 4px; }
.heat-col { display: grid; grid-template-rows: repeat(7, 1fr); gap: 3px; }
.habit-heatmap i { width: 12px; height: 12px; border-radius: 3px; background: rgba(32,35,31,.07); }
.habit-heatmap i.lv-1 { background: #b8c9b2; }
.habit-heatmap i.lv-2 { background: #84a37c; }
.habit-heatmap i.lv-3 { background: #4f6b4b; }
.habit-heatmap i.lv-future { background: none; }
.habit-heatmap-scale { display: flex; align-items: center; gap: 3px; margin-top: 8px; font-size: 10px; color: var(--muted); }
.habit-heatmap-scale i { width: 10px; height: 10px; border-radius: 2px; }
.habit-heatmap-scale i:nth-child(2) { background: rgba(32,35,31,.07); }
.habit-heatmap-scale i:nth-child(3) { background: #b8c9b2; }
.habit-heatmap-scale i:nth-child(4) { background: #84a37c; }
.habit-heatmap-scale i:nth-child(5) { background: #4f6b4b; }

@media (max-width: 900px) {
  .habit-cal-cell { font-size: 14px; }
  .habit-bigcheck { width: 48px; height: 48px; }
  .habit-card { padding: 18px 16px 30px; }
}

/* ———————— v1.3.2 新建习惯表单重排 ———————— */

.habit-add-form {
  display: flex; flex-direction: column; gap: 12px;
  max-width: 560px; margin: 0 0 20px;
  padding: 20px; background: var(--paper-light);
  border: .5px solid var(--rule); border-radius: 14px;
}
.habit-form-row { display: flex; gap: 10px; align-items: center; }
.habit-form-row input[type="text"], .habit-form-row input:not([type]) { flex: 1; min-width: 0; height: 44px; }
.habit-add-form > input { width: 100%; height: 44px; box-sizing: border-box; }
.habit-emoji-input { width: 52px !important; flex: none !important; text-align: center; font-size: 20px; }
.habit-form-row input[type="time"] { width: 110px; flex: none; height: 44px; }
.habit-colors { flex: 1; display: flex; gap: 8px; flex-wrap: wrap; }
.habit-form-row .primary-button { flex: none; min-height: 44px; }

@media (max-width: 900px) {
  .habit-add-form { max-width: none; }
  .habit-form-row { flex-wrap: wrap; }
  .habit-form-row .primary-button { width: 100%; }
}

/* ———————— v1.3.1 看板作品数据行（简洁 chips） ———————— */
.work-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.work-chip { font-size: 11px; color: var(--ink-soft); padding: 2px 8px; border: .5px solid var(--rule); border-radius: 999px; }
.work-chip em { font-style: normal; color: var(--muted); margin-right: 3px; }
.work-chip.work-date { border: 0; color: var(--muted); padding-left: 0; }
.work-row { gap: 4px; }

/* ———————— v1.3.2 手机端：AI 解读面板改单列，修复整页横向溢出 ———————— */
@media (max-width: 900px) {
  .radar-lead { grid-template-columns: 1fr; gap: 14px; min-height: 0; }
  .radar-lead-number { display: none; }
  .radar-lead-actions { flex-direction: row; align-items: center; }
  .create-panels > *, .quicknote-form input, .book-add-form input, .book-add-form select,
  .book-progress-form input, .habit-add-form input { min-width: 0; }
}

/* ———————— v1.3.3 读书面板：收纳输入框 · 书脊色彩 ———————— */

.book-add-form {
  background: rgba(32,35,31,.04);
  border: .5px solid var(--rule);
  border-radius: 12px;
  padding: 16px;
  margin-bottom: 14px;
}
.book-head strong { display: flex; align-items: center; gap: 8px; }
.book-spine { width: 4px; height: 16px; border-radius: 2px; background: var(--spine, #4f6272); flex: none; }
.book-pct { font-size: 15px; font-weight: 500; color: var(--vermilion); }
.book-row.done .book-pct { color: var(--moss); }
.book-ops { display: flex; gap: 12px; }
.book-update-open, .book-delete { border: 0; background: none; font-size: 11.5px; cursor: pointer; color: var(--muted); padding: 0; }
.book-update-open { color: var(--vermilion); }
.book-update-open:hover { text-decoration: underline; }
.book-progress-form { margin-top: 10px; }
.book-progress-form input { flex: 1; }

/* ———————— v1.3 选题卡 · 今日一句 ———————— */

.topic-card { margin: 4px 0 12px; padding: 18px 20px; background: var(--surface-strong); border: .5px solid var(--rule); border-left: 3px solid var(--vermilion); border-radius: 10px; }
.topic-card-loading { color: var(--muted); font-size: 12px; padding: 6px 0; }
.topic-card-body p { margin: 0 0 7px; font-size: 13px; line-height: 1.8; color: var(--ink); }
.topic-card-body .summary-cat { color: var(--vermilion); font-weight: 500; letter-spacing: .05em; margin-top: 12px; }
.topic-card-actions { display: flex; gap: 10px; margin-top: 12px; }
.trend-expand { color: var(--muted); background: transparent; border: 0; font-size: 9px; cursor: pointer; }
.trend-expand:hover { color: var(--vermilion); }

.journal-panel { margin-top: 28px; }
.journal-today { display: flex; gap: 10px; }
.journal-today input { flex: 1; background: rgba(248,246,240,.08); border-color: var(--rule-dark); color: var(--paper-light); }
.journal-today input::placeholder { color: rgba(248,246,240,.35); }
.journal-today .inverse-button { flex: none; }
.journal-list { margin-top: 16px; }
.journal-row { display: grid; grid-template-columns: 86px 1fr; gap: 14px; padding: 9px 0; border-top: .5px solid var(--rule-dark); align-items: baseline; }
.journal-row span { color: rgba(248,246,240,.45); font-size: 11px; }
.journal-row p { margin: 0; font-size: 13px; line-height: 1.7; color: rgba(248,246,240,.9); }
.journal-row.last-year { border: 1px solid rgba(230,183,170,.35); border-radius: 10px; padding: 10px 14px; margin-bottom: 8px; }
.journal-row.last-year span { color: #e6b7aa; }

@media (max-width: 900px) {
  .journal-row { grid-template-columns: 70px 1fr; }
  .journal-row p { font-size: 14px; }
  .topic-card-body p { font-size: 14px; }
}

/* 速记原文链接 */
.quicknote-src { color: var(--vermilion); font-size: 11px; text-decoration: none; white-space: nowrap; }
.quicknote-src:hover { text-decoration: underline; }

/* ———————— v1.4 已完成项目区 ———————— */
.projects-done { margin-bottom: 40px; }
.done-row { display: flex; align-items: center; gap: 16px; padding: 16px 22px; border: .5px solid var(--rule); border-radius: 12px; margin-top: 10px; background: rgba(89,105,79,.05); }
.done-check { width: 26px; height: 26px; flex: none; display: grid; place-items: center; border-radius: 50%; background: var(--moss); color: #fff; font-size: 13px; }
.done-copy { flex: 1; min-width: 0; }
.done-copy strong { display: block; font-size: 15px; }
.done-copy small { color: var(--muted); font-size: 11.5px; }
.done-actions { display: flex; gap: 4px; flex: none; }
@media (max-width: 900px) {
  .done-row { padding: 14px 16px; gap: 12px; }
  .done-copy strong { font-size: 14.5px; }
}

/* ———————— v1.5 学习 · 公众号信息收集 ———————— */
.campus-accounts { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 28px; }
.campus-account { display: flex; align-items: center; gap: 10px; padding: 10px 16px 10px 12px; border: .5px solid var(--rule); border-radius: 12px; background: var(--paper, #f8f6f0); }
.campus-account i { width: 8px; height: 8px; flex: none; border-radius: 50%; background: var(--moss); box-shadow: 0 0 0 3px rgba(89,105,79,.15); }
.campus-account.off i { background: #b8b2a2; box-shadow: 0 0 0 3px rgba(0,0,0,.06); }
.campus-account strong { display: block; font-size: 13px; line-height: 1.3; }
.campus-account span { display: block; font-size: 10.5px; color: var(--muted); margin-top: 1px; }

.campus-important { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin-bottom: 8px; }
.campus-alert { display: flex; gap: 14px; padding: 18px 20px; border: 1px solid rgba(179,58,38,.35); border-left: 3px solid var(--vermilion); border-radius: 14px; background: rgba(179,58,38,.04); }
.campus-alert-tag { flex: none; align-self: flex-start; padding: 3px 9px; border-radius: 999px; background: var(--vermilion); color: #fff; font-size: 10px; letter-spacing: .08em; }
.campus-alert-body { min-width: 0; }
.campus-alert-body strong { display: block; font-size: 14.5px; line-height: 1.5; }
.campus-alert-body p { margin: 6px 0 0; font-size: 12.5px; line-height: 1.75; color: var(--ink-soft, #4a4f44); }

.campus-feed-panel { padding: 6px 24px 10px; margin-bottom: 14px; }
.campus-row { display: flex; gap: 14px; padding: 16px 0; border-top: .5px solid var(--rule); }
.campus-row:first-child { border-top: 0; }
.campus-row-main { min-width: 0; }
.campus-row-main strong { display: block; font-size: 15px; line-height: 1.55; }
.campus-row-main p { margin: 6px 0 0; font-size: 12.5px; line-height: 1.8; color: var(--muted); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.campus-row.hot .campus-row-main strong { color: var(--vermilion); }
.campus-row .hot-tag { border-color: rgba(179,58,38,.4) !important; color: var(--vermilion) !important; }
.campus-empty { padding: 18px 4px; color: var(--muted); font-size: 13px; }

@media (max-width: 900px) {
  .campus-important { grid-template-columns: 1fr; }
  .campus-account { padding: 9px 14px 9px 11px; }
  .campus-account strong { font-size: 12.5px; }
  .campus-alert { padding: 16px; gap: 12px; }
  .campus-alert-body strong { font-size: 14px; }
  .campus-alert-body p { font-size: 13px; }
  .campus-feed-panel { padding: 4px 18px 8px; }
  .campus-row { padding: 15px 0; }
  .campus-row-main strong { font-size: 14.5px; }
  .campus-row-main p { font-size: 13px; -webkit-line-clamp: 3; }
}

/* 公众号卡片可点击 + 选中态 */
.campus-account { cursor: pointer; font: inherit; color: inherit; text-align: left; transition: border-color .15s, background .15s, transform .15s; }
.campus-account:hover { border-color: rgba(32,35,31,.4); transform: translateY(-1px); }
.campus-account.on { border-color: var(--ink); background: rgba(32,35,31,.06); }
.campus-account.on strong::after { content: " · 筛选中"; font-size: 10px; color: var(--vermilion); font-weight: 400; }

/* 文章流标题链接 */
.campus-row-main strong a, .campus-alert-body strong a { color: inherit; text-decoration: none; border-bottom: 1px solid var(--rule, #ddd6c8); cursor: pointer; }
.campus-row-main strong a:hover, .campus-alert-body strong a:hover { border-bottom-color: currentColor; }
.campus-row-main .signal-meta { display: flex; align-items: center; }
.campus-row .quicknote-src, .campus-alert .quicknote-src { cursor: pointer; }

/* 比赛类标签（最高优先级，金色系区分普通重要） */
.campus-alert.comp { border-color: rgba(180,142,42,.5); border-left-color: #b48e2a; background: rgba(180,142,42,.05); }
.campus-alert.comp .campus-alert-tag { background: #b48e2a; }
.campus-row .comp-tag { border-color: rgba(180,142,42,.5) !important; color: #b48e2a !important; font-weight: 500; }

/* 内容大类筛选条 */
.campus-cat-bar { display: flex; flex-wrap: wrap; gap: 8px; margin: -14px 0 26px; }
.campus-cat { display: inline-flex; align-items: center; gap: 7px; padding: 7px 14px; border: .5px solid var(--rule); border-radius: 999px; background: transparent; font: inherit; font-size: 12.5px; color: var(--ink-soft, #4a4f44); cursor: pointer; transition: all .15s; }
.campus-cat span { font-size: 10px; color: var(--muted); }
.campus-cat:hover { border-color: rgba(32,35,31,.4); }
.campus-cat.on { background: var(--ink); border-color: var(--ink); color: #fff; }
.campus-cat.on span { color: rgba(255,255,255,.6); }
.campus-row .cat-tag { border-color: rgba(32,35,31,.18) !important; color: var(--muted) !important; }

@media (max-width: 900px) {
  .campus-cat-bar { gap: 7px; margin: -10px 0 20px; }
  .campus-cat { padding: 6px 12px; font-size: 12px; }
}

/* ———— v1.6 校园页重组：今日重要 + 文章库（搜索 / 折叠分组 / 彩色分类） ———— */
.campus-today-panel, .campus-lib-panel { padding: 6px 24px 10px; margin-bottom: 14px; }
.campus-search { width: 100%; box-sizing: border-box; margin: 10px 0 6px; padding: 11px 18px; font: inherit; font-size: 13.5px; color: inherit; border: .5px solid var(--rule); border-radius: 999px; background: var(--paper, #f8f6f0); outline: none; }
.campus-search:focus { border-color: rgba(32,35,31,.5); }

/* 分类 / 限时 小标签（颜色由 JS 内联给出） */
.campus-tag { display: inline-block; font-style: normal; font-size: 10.5px; line-height: 1.5; padding: 2px 8px; border-radius: 999px; border: 0 !important; }

/* 折叠分组 */
.campus-grp { border-top: .5px solid var(--rule); }
.campus-grp-head { display: flex; align-items: center; gap: 9px; width: 100%; padding: 13px 2px; border: 0; background: none; font: inherit; font-size: 13.5px; color: inherit; cursor: pointer; text-align: left; }
.campus-grp-head strong { font-weight: 500; }
.campus-grp-chev { font-size: 10px; color: var(--muted); transition: transform .15s; }
.campus-grp.open .campus-grp-chev { transform: rotate(90deg); }
.campus-grp-dot { width: 7px; height: 7px; flex: none; border-radius: 50%; background: var(--vermilion); }
.campus-grp-new { font-size: 11px; color: var(--vermilion); }
.campus-grp-cnt { margin-left: auto; font-size: 11px; color: var(--muted); }
.campus-grp-accs { display: none; flex-wrap: wrap; gap: 8px; padding: 2px 0 14px 22px; }
.campus-grp.open .campus-grp-accs { display: flex; }
.campus-acc { padding: 5px 12px; border: .5px solid var(--rule); border-radius: 999px; background: var(--paper, #f8f6f0); font: inherit; font-size: 12px; color: inherit; cursor: pointer; }
.campus-acc span { margin-left: 5px; font-size: 10px; color: var(--muted); }
.campus-acc.on { background: var(--ink); border-color: var(--ink); color: #fff; }
.campus-acc.on span { color: rgba(255,255,255,.65); }

/* 彩色大类筛选条（覆盖旧 .campus-cat-bar 外边距） */
.campus-lib-panel .campus-cat-bar { margin: 0; padding: 10px 0 12px; }
.campus-cat2 { display: inline-flex; align-items: center; gap: 6px; padding: 5px 12px; border: 0; border-radius: 999px; font: inherit; font-size: 12px; cursor: pointer; }
.campus-cat2 span { font-size: 10px; opacity: .7; }
.campus-cat2.on { outline: 1.5px solid currentColor; outline-offset: 1px; }

.campus-lib-status { padding: 12px 2px 0; font-size: 11.5px; color: var(--muted); }

/* 云端数据提示条（未登录/拉取失败时显示在页面顶部） */
.campus-cloud-notice { display: flex; align-items: center; gap: 14px; margin-bottom: 20px; padding: 13px 18px; border: 1px solid rgba(180,142,42,.4); border-left: 3px solid #b48e2a; border-radius: 12px; background: rgba(180,142,42,.06); font-size: 13px; line-height: 1.6; color: var(--ink-soft, #4a4f44); }
.campus-cloud-notice span { flex: 1; }
.campus-notice-btn { flex: none; padding: 6px 16px; border: 0; border-radius: 999px; background: var(--ink); color: #fff; font: inherit; font-size: 12.5px; cursor: pointer; }

/* 今日发布：折叠条 */
.campus-published-panel { padding: 10px 24px 12px; margin-bottom: 14px; }
.campus-published-head { display: flex; align-items: center; gap: 10px; width: 100%; padding: 4px 0; border: 0; background: none; font: inherit; font-size: 13.5px; color: inherit; cursor: pointer; text-align: left; }
.campus-published-head strong { font-weight: 500; }
.campus-published-head .campus-grp-chev { font-size: 10px; color: var(--muted); }
.campus-published-sub { font-size: 11.5px; color: var(--muted); }
.campus-published-cue { margin-left: auto; font-size: 11px; color: var(--muted); }
.campus-published-list { margin-top: 6px; }

/* 文章库：整体折叠入口 */
.campus-lib-toggle { display: flex; align-items: center; gap: 10px; width: 100%; padding: 12px 0; border: 0; background: none; font: inherit; font-size: 13.5px; color: inherit; cursor: pointer; text-align: left; }
.campus-lib-toggle .campus-grp-chev { font-size: 10px; color: var(--muted); }
.campus-lib-toggle-hint { margin-left: auto; font-size: 11px; color: var(--muted); }
.campus-lib-body { margin-top: 4px; }

@media (max-width: 900px) {
  .campus-today-panel, .campus-lib-panel, .campus-published-panel { padding: 4px 18px 8px; }
  .campus-search { font-size: 13px; padding: 10px 16px; }
  .campus-grp-head { font-size: 13px; padding: 12px 2px; }
  .campus-published-head { font-size: 13px; }
  .campus-lib-toggle { font-size: 13px; }
}
