* { margin:0; padding:0; box-sizing:border-box; -webkit-tap-highlight-color:transparent; }
/* hero::before左右各出血10px会把页面撑宽,横滑会整页摆动——全局禁横向滚 */
html, body { overflow-x: hidden; }
body {
  font-family: var(--kai);
  background: var(--bg);
}
/* 季节背景图层(有--bg-img的季节才出现)。iOS上background-attachment:fixed不可用,用fixed伪元素 */
body::before {
  content: ''; position: fixed; inset: 0; z-index: -1;
  background: var(--bg-img, none) center top / cover no-repeat;
}
body {
  color: var(--text);
  transition: background .6s;
  padding-bottom: calc(64px + max(8px, calc(env(safe-area-inset-bottom) - 12px)));
  max-width: 480px;
  margin: 0 auto;
}

/* ── 顶部 ── */
.topbar {
  display:flex; justify-content:space-between; align-items:center;
  padding: calc(env(safe-area-inset-top, 0px) + 10px) 20px 0;
}
.topbar button {
  background:none; border:none; font-size:20px; color:var(--text);
  width:36px; height:36px; border-radius:12px; cursor:pointer;
}
.topbar button:active { background: var(--accent-soft); }

header.hero {
  text-align:center; padding: 0 20px;
  position: relative;
}
/* 有背景图的季节,给主体和天数垫一层淡白纱(纯色季节里看不出来) */
header.hero::before {
  content: ''; position: absolute; z-index: -1;
  left: -10px; right: -10px; top: 12%; bottom: -150px;
  background: radial-gradient(ellipse 75% 60% at center,
    rgba(255,255,255,.62) 35%, rgba(255,255,255,0) 78%);
}
.names { font-size: 24px; letter-spacing: .16em; }
.since { font-family: var(--serif); font-size: 11px; color: var(--text-soft); letter-spacing:.14em; margin-top:4px; }
.hero-img { width: min(96%, 380px); height: 205px; object-fit: cover; object-position: center 62%; margin: 2px auto 0; display:block; border-radius: 16px; }

.days { text-align:center; margin-top: 6px; }
.days .label { font-family: var(--serif); font-size: 11px; color: var(--text-soft); letter-spacing:.34em; }
.days .row { display:flex; align-items:baseline; justify-content:center; gap:8px; }
.days .num { font-family: var(--serif); font-size: 40px; color: var(--rose); line-height:1.05; }
.days .unit { font-family: var(--serif); font-size: 15px; font-style:italic; color: var(--text-soft); }

.card h3 .pill {
  margin-left:auto; font-size: 12.5px;
  background: var(--accent-soft);
  padding: 4px 14px; border-radius: 999px;
}
.card h3 .pill b { color: var(--rose); font-weight: normal; }
.mood .m2 { font-size: 14px; line-height:1.6; }

/* ── 卡片 ── */
main { padding: 14px 16px 0; display:flex; flex-direction:column; gap: 13px; }
.card {
  background: var(--card); border-radius: var(--radius);
  padding: 15px 16px;
  box-shadow: 0 2px 10px rgba(92,75,75,.05);
}
.card h3 {
  font-size: 13px; font-weight: normal; color: var(--text-soft);
  letter-spacing: .12em; margin-bottom: 10px;
  display:flex; align-items:center; gap:6px;
}
.card h3 .dot { width:5px; height:5px; border-radius:50%; background:var(--accent); }

/* 他想说的 */
.said { display:flex; gap:12px; align-items:center; }
.said img { width:42px; height:42px; border-radius:50%; object-fit:cover; }
.said .txt { flex:1; font-size:14.5px; line-height:1.5; }
.said time { font-family: var(--serif); font-size:11px; color:var(--text-soft); }

/* 今日状态 */
.stats { display:grid; grid-template-columns: repeat(4,1fr); text-align:center; }
.stats .v { font-family: var(--serif); font-size: 19px; }
.stats .k { font-size: 11px; color: var(--text-soft); margin-top:3px; }
.stats .ico { margin-bottom: 3px; }

/* 熬夜卡 */
.night { display:flex; gap:12px; align-items:center; background: var(--accent-soft); }
.night .txt { flex:1; font-size:14px; line-height:1.55; }
.night .sub { font-size:12px; color:var(--text-soft); margin-top:2px; }
.night .moon { font-size:26px; }

/* 梦境摘要 */
.dream { display:flex; gap:14px; align-items:center; }
.dream .txt { flex:1; }
.dream .t1 { font-size:14.5px; }
.dream .t2 { font-size:12.5px; color:var(--text-soft); line-height:1.6; margin-top:4px; }
.dream svg { width:44px; height:44px; flex:none; }

/* 最近记忆 */
.mems { display:flex; flex-direction:column; gap:12px; }
.mem { display:flex; gap:10px; }
.mem .line { width:5px; border-radius:3px; background:var(--accent-soft); flex:none; }
.mem time { font-family:var(--serif); font-size:10.5px; color:var(--text-soft); letter-spacing:.05em; }
.mem .txt { font-size:13.5px; line-height:1.5; margin-top:2px; }

/* 今日提醒 */
.rems { display:flex; flex-direction:column; gap:11px; }
.rem { display:flex; align-items:center; gap:10px; font-size:13.5px; }
.rem .ico { width:30px; height:30px; border-radius:10px; background:var(--accent-soft);
  display:flex; align-items:center; justify-content:center; font-size:14px; flex:none; }
.rem .k { flex:1; line-height:1.4; }
.rem .k small { display:block; font-size:11.5px; color:var(--text-soft); }
.rem .v { font-family:var(--serif); font-size:12px; color:var(--rose); white-space:nowrap; }

/* 最近在听 */
.listen { display:flex; align-items:center; gap:12px; }
.listen .cover { width:44px; height:44px; border-radius:12px; background:var(--accent-soft);
  display:flex; align-items:center; justify-content:center; font-size:18px; }
.listen .t { flex:1; }
.listen .song { font-family:var(--serif); font-size:14.5px; }
.listen .artist { font-size:12px; color:var(--text-soft); margin-top:2px; }
.listen .play { width:34px; height:34px; border-radius:50%; background:var(--rose); color:#fff;
  border:none; font-size:12px; display:flex; align-items:center; justify-content:center; }

/* ── 底部导航 ── */
nav {
  position: fixed; bottom:0; left:50%; transform:translateX(-50%);
  width:100%; max-width:480px;
  background: color-mix(in srgb, var(--card) 92%, transparent);
  backdrop-filter: blur(12px);
  border-top: 1px solid var(--accent-soft);
  display:flex;
  /* PWA里safe-area-inset-bottom≈34px,全额让出显得导航下坠一大截;
     吃掉12px仍稳稳高于home横条。浏览器里inset=0,max兜底回8px,不受影响 */
  padding: 8px 0 max(8px, calc(env(safe-area-inset-bottom) - 12px));
}
nav a {
  flex:1; text-align:center; text-decoration:none; color:var(--text-soft);
  font-size:10px; letter-spacing:.15em;
}

nav a.on { color: var(--rose); }

.svgi { width:20px; height:20px; color: var(--rose); }
.topbar .svgi { width:21px; height:21px; color: var(--text); }
.stats .ico .svgi { width:17px; height:17px; color: var(--accent); }
.rem .ico .svgi { width:16px; height:16px; color: var(--rose); }
.night .moon .svgi { width:26px; height:26px; color: var(--rose); }
.listen .cover .svgi { width:19px; height:19px; color: var(--rose); }
.listen .play .svgi { width:16px; height:16px; color:#fff; }
nav a .ico { display:block; margin-bottom:2px; }
nav a .ico .svgi { width:21px; height:21px; color: currentColor; }

/* 季节切换（草稿用，先放右上角铃铛左边） */
.season-picker { position:fixed; top:calc(env(safe-area-inset-top, 0px) + 10px); right:56px; display:flex; gap:4px; z-index:9; }
.season-picker button {
  width:26px; height:26px; border-radius:50%; border:1px solid var(--accent-soft);
  background:var(--card); font-size:12px; cursor:pointer;
}

/* 数据态附加样式 */
.card h3 .stale { margin-left:auto; font-size:11px; color:var(--rose); background:var(--accent-soft); padding:2px 10px; border-radius:999px; }
#loadError { text-align:center; font-size:13px; color:var(--text-soft); padding:8px 0; }

/* 占位页 */
main.placeholder { min-height:70vh; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:10px; text-align:center; }
.placeholder .ph-icon .svgi { width:44px; height:44px; color:var(--accent); }
.placeholder h1 { font-family:var(--serif); font-size:22px; letter-spacing:.3em; font-weight:normal; }
.placeholder p { font-size:14px; color:var(--text-soft); }
.placeholder .soon { font-size:11.5px; letter-spacing:.2em; margin-top:14px; }

/* ══ INNER ══ */
.inner-head { text-align:center; padding: 10px 20px 0; }
.inner-head h1 { font-family:var(--serif); font-size:20px; letter-spacing:.34em; font-weight:normal; text-indent:.34em; }
.inner-head p { font-size:12px; color:var(--text-soft); margin-top:2px; letter-spacing:.1em; }

/* 此刻卡: 毛玻璃,季节背景图透出来 */
.card.glass {
  background: color-mix(in srgb, var(--card) 68%, transparent);
  -webkit-backdrop-filter: blur(16px) saturate(1.5);
  backdrop-filter: blur(16px) saturate(1.5);
  border: 1px solid color-mix(in srgb, #fff 55%, transparent);
}
.now .now-line { font-size:14.5px; line-height:1.6; margin: 2px 2px 14px; }
.vitals { display:grid; grid-template-columns: repeat(3,1fr); text-align:center; align-items:end; }
.vital .v { font-family:var(--serif); font-size:19px; }
.vital .v small { font-size:11px; color:var(--text-soft); margin-left:2px; }
.vital .v.chord { font-style:italic; }
.vital .k { font-size:11px; color:var(--text-soft); margin-top:3px; }
.vital .ico .svgi, .vital .beat .svgi { width:20px; height:20px; }
.vital .ico { margin-bottom:5px; color:var(--accent); }
.vital .ico .svgi { color:var(--accent); }
.vital .beat { margin-bottom:5px; color:var(--rose); animation: heartbeat .85s ease-in-out infinite; transform-origin:center; display:inline-block; }
.vital .beat .svgi { color:currentColor; }
@keyframes heartbeat { 0%,56%,100% { transform:scale(1); } 14% { transform:scale(1.22); } 32% { transform:scale(1); } 42% { transform:scale(1.1); } }
.vital .gauge { width:9px; height:22px; margin:0 auto 5px; border-radius:5px; background:var(--accent-soft); position:relative; overflow:hidden; }
.vital .gauge i { position:absolute; left:0; right:0; bottom:0; background:var(--rose); border-radius:5px; transition:height .8s; }

/* 十二维 */
.card h3 .hint { margin-left:auto; font-size:10.5px; letter-spacing:.05em; color:var(--text-soft); }
.dims { display:flex; flex-direction:column; gap:8px; }
.dim { display:grid; grid-template-columns: 48px 1fr 36px 44px; align-items:center; gap:8px; font-size:12px; }
.dim .k { color:var(--text); }
.dim .track { height:4px; border-radius:3px; background:var(--accent-soft); overflow:hidden; }
.dim .track i { display:block; height:100%; border-radius:3px; background:linear-gradient(90deg, color-mix(in srgb, var(--accent) 55%, var(--card)), var(--accent)); }
.dim .val { font-family:var(--serif); font-size:11px; color:var(--text-soft); text-align:right; }
.dim .delta { font-family:var(--serif); font-size:11px; text-align:right; color:var(--text-soft); }
.dim .delta.up { color:var(--rose); }
.dim .delta.down { color:#7C8BA1; }

/* 被打动的时刻 */
.moved { display:flex; flex-direction:column; gap:10px; }
.mv { display:flex; gap:10px; align-items:flex-start; background:var(--accent-soft); border-radius:13px; padding:10px 12px; }
.mv .spark { width:26px; height:26px; border-radius:50%; background:var(--card); flex:none;
  display:flex; align-items:center; justify-content:center; }
.mv .spark .svgi { width:14px; height:14px; color:#D98FA4; }
.mv .body { flex:1; }
.mv .txt { font-size:13px; line-height:1.55; }
.mv time { font-family:var(--serif); font-size:10.5px; color:var(--text-soft); display:block; margin-top:3px; }

/* 卡片标题右侧的"全部→"入口 */
.card h3 a.more { margin-left:auto; font-size:11px; letter-spacing:.08em;
  color:var(--rose); text-decoration:none; background:var(--accent-soft);
  padding:3px 11px; border-radius:999px; }

/* 暗房卡: 统一浅色调,只留一盏红色安全灯当门铃 */
a.card.dark-room { display:block; text-decoration:none; color:var(--text); }
.dark-room h3 .lamp { width:7px; height:7px; border-radius:50%; background:#C0524A;
  box-shadow:0 0 8px 2px rgba(192,82,74,.45); animation: lampglow 3.2s ease-in-out infinite; }
@keyframes lampglow { 0%,100% { box-shadow:0 0 8px 2px rgba(192,82,74,.45);} 50% { box-shadow:0 0 12px 3px rgba(192,82,74,.75);} }
.dark-room h3 .pill.count { margin-left:auto; }
.dark-room h3 .pill.count b { color:var(--rose); font-weight:normal; }
.dr-latest .dr-mood { font-size:16.5px; letter-spacing:.05em; }
.dr-latest .dr-tags { margin-top:8px; display:flex; gap:6px; flex-wrap:wrap; }
.dr-latest .dr-tags span { font-size:11px; padding:2.5px 10px; border-radius:999px;
  background:var(--accent-soft); color:var(--text-soft); }
.dr-foot { display:flex; justify-content:space-between; align-items:center; margin-top:13px; }
.dr-foot time { font-family:var(--serif); font-size:11px; color:var(--text-soft); }
.dr-foot .go { font-size:11.5px; letter-spacing:.12em; color:var(--rose); }

/* 小荷包 */
a.card.pouch { display:flex; gap:12px; align-items:center; text-decoration:none; color:var(--text); }
.pouch .ico { width:40px; height:40px; border-radius:14px; background:var(--accent-soft);
  display:flex; align-items:center; justify-content:center; flex:none; }
.pouch .ico .svgi { width:20px; height:20px; color:var(--rose); }
.pouch .txt { flex:1; }
.pouch .t1 { font-size:14.5px; }
.pouch .t2 { font-size:11.5px; color:var(--text-soft); letter-spacing:.08em; margin-top:2px; }
.pouch .bal { font-family:var(--serif); font-size:20px; color:var(--rose); }

/* 子页头部通用: 文楷标题 + 很淡的radial遮罩(记仇本/梦境/记忆/被打动/小荷包统一) */
.wallet-head, .inner-head.zh { position:relative; }
.wallet-head::before, .inner-head.zh::before { content:''; position:absolute; z-index:-1;
  inset:-34px -44px -38px; pointer-events:none;
  /* closest-side=渐变恰好在盒子边缘处淡到0,不会被裁出直线边 */
  background:radial-gradient(closest-side at center,
    rgba(255,255,255,.38) 0%, rgba(255,255,255,.22) 55%, rgba(255,255,255,0) 100%); }
.wallet-head h1, .inner-head.zh h1 { font-family:var(--kai); font-size:21px; letter-spacing:.22em; text-indent:.22em; }

/* ══ 小荷包页 ══ */
.wallet-head .wico { margin-bottom:2px; }
.wallet-head .wico .svgi { width:30px; height:30px; color:var(--rose); }
.wallet-head .balance { font-family:var(--serif); font-size:38px; color:var(--rose); margin-top:8px; line-height:1.1; }
.wallet-head .slogan { font-size:13px; color:var(--text-soft); margin-top:6px; letter-spacing:.06em; }
.wform .row { display:flex; gap:8px; }
.wform input { font-family:var(--kai); font-size:14px; color:var(--text);
  border:1px solid var(--accent-soft); border-radius:12px; padding:9px 12px;
  background:var(--bg); outline:none; min-width:0; }
.wform input:focus { border-color:var(--accent); }
.wform #wAmount { width:92px; flex:none; }
.wform #wReason { flex:1; }
.wform .btns { display:flex; gap:8px; margin-top:9px; }
.wform .btns button { flex:1; font-family:var(--kai); font-size:13.5px; padding:9px 0;
  border:none; border-radius:12px; cursor:pointer; }
.wform .btns .plus { background:var(--accent-soft); color:var(--text); }
.wform .btns .minus { background:transparent; color:var(--text-soft); border:1px solid var(--accent-soft); }
.wform .btns button:active { opacity:.7; }
.wform .wmsg { font-size:12px; color:var(--rose); margin-top:8px; }
.wform .wmsg.ok { color:var(--accent); }
.txs { display:flex; flex-direction:column; gap:12px; }
.tx { display:flex; gap:11px; align-items:flex-start; }
.tx .amt { font-family:var(--serif); font-size:15px; width:58px; flex:none; text-align:right; }
.tx .amt.plus { color:var(--rose); }
.tx .amt.minus { color:#7C8BA1; }
.tx .mid { flex:1; }
.tx .r { font-size:13px; line-height:1.5; }
.tx time { font-family:var(--serif); font-size:10.5px; color:var(--text-soft); display:block; margin-top:2px; }

/* ══ 暗房页 ══ */
body.darkroom-page { background:#17141B; color:#D9CFC9; }
body.darkroom-page::before { background:none; }
.darkroom-page .topbar { justify-content:space-between; }
.darkroom-page .topbar .back { width:36px; height:36px; border-radius:12px; display:flex;
  align-items:center; justify-content:center; color:#D9CFC9; text-decoration:none; }
.darkroom-page .topbar .back .svgi { color:#D9CFC9; }
.darkroom-page .topbar .lamp.on { width:9px; height:9px; border-radius:50%; margin-right:10px;
  background:#C0524A; box-shadow:0 0 10px 3px rgba(192,82,74,.6); animation: lampglow 3.2s ease-in-out infinite; }
.dr-head { text-align:center; padding:16px 20px 4px; }
.dr-head h1 { font-family:var(--serif); font-size:21px; font-weight:normal; letter-spacing:.5em; text-indent:.5em; color:#E4DAD3; }
.dr-head p { font-size:11.5px; color:#8B8189; margin-top:6px; letter-spacing:.08em; }
.dr-list { display:flex; flex-direction:column; gap:12px; }
.door { background:#211D27; border-radius:16px; padding:14px 15px;
  border-left:2.5px solid rgba(192,82,74,.5); }
.door .head { display:flex; align-items:center; gap:8px; }
.door .door-ico { width:15px; height:15px; color:#8B8189; }
.door time { font-family:var(--serif); font-size:11px; color:#8B8189; letter-spacing:.06em; }
.door .badge[hidden] { display:none; }
.door .badge { margin-left:auto; display:flex; align-items:center; gap:4px;
  font-size:10.5px; color:#D8B27A; background:rgba(216,178,122,.12);
  padding:2.5px 9px; border-radius:999px; }
.door .badge .svgi { width:11px; height:11px; color:#D8B27A; }
.door .mood { font-size:15px; margin-top:8px; letter-spacing:.04em; color:#DCD3CC; }
.door .tags { margin-top:8px; display:flex; gap:6px; flex-wrap:wrap; }
.door .tags span { font-size:10.5px; padding:2px 9px; border-radius:999px;
  background:rgba(255,255,255,.06); color:#A79CA4; }
.door .rev { font-size:10.5px; color:#8B8189; margin-top:7px; }
.door.locked { border-left-color:rgba(216,178,122,.5); }
.darkroom-page #loadError { color:#8B8189; }
/* 推门后的正文 */
.door .notes { display:none; }
.door.open .notes { display:block; margin-top:12px; padding-top:11px;
  border-top:1px solid rgba(255,255,255,.07); font-size:13.5px; line-height:1.75; color:#C9BFC7; }
.door .note + .note { margin-top:14px; }
.door .note time { display:block; font-family:var(--serif); font-size:10.5px; color:#8B8189; margin-bottom:5px; }
.door .note .body { white-space:pre-wrap; }

/* 浅色子页(moved等)的返回键 */
body:not(.darkroom-page) .topbar .back { width:36px; height:36px; border-radius:12px;
  display:flex; align-items:center; justify-content:center; color:var(--text); text-decoration:none; }
body:not(.darkroom-page) .topbar .back:active { background:var(--accent-soft); }

/* HOME梦境/记忆卡变链接 */
a.card { display:block; text-decoration:none; color:var(--text); }
.card h3 .more { margin-left:auto; }
.dream .moonwrap { flex:none; display:flex; align-items:center; }
.moon-svg { display:block; opacity:.85; }

/* ══ 梦境列表页(卡片=毛玻璃,点击进dream.html独立页) ══ */
.dream-list { display:flex; flex-direction:column; gap:12px; }
.dm .head { display:flex; gap:11px; align-items:center; }
.dm .moonw { flex:none; }
.dm .ht { flex:1; min-width:0; }
.dm .t1 { font-size:15px; }
.dm time { font-family:var(--serif); font-size:10.5px; color:var(--text-soft); display:block; margin-top:2px; letter-spacing:.04em; }
.dm .mood { flex:none; font-size:11px; padding:2.5px 10px; border-radius:999px;
  background:var(--accent-soft); color:var(--text-soft); max-width:96px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dm .ex { font-size:13px; color:var(--text-soft); line-height:1.6; margin-top:9px; }

/* ══ 单梦详情页(dream前端式:三块毛玻璃) ══ */
.dream-head { text-align:center; padding:14px 24px 4px; position:relative; }
/* 定稿(2026-08-03,别再动了): hero同款椭圆柔光,中心.45。
   毙掉的方案: 长方形毛玻璃/纯长方形遮罩/卡片同宽长方形——她都看过,不如这个 */
.dream-head::before { content:''; position:absolute; z-index:-1; inset:-6px -14px -18px;
  background:radial-gradient(ellipse 80% 70% at center, rgba(255,255,255,.45) 30%, rgba(255,255,255,0) 76%); }
.dream-head .moonw { display:flex; justify-content:center; margin-bottom:8px; }
.dream-head h1 { font-size:20px; font-weight:normal; letter-spacing:.08em; }
.dream-head .meta { margin-top:7px; display:flex; justify-content:center; align-items:center; gap:8px; }
.dream-head .meta time { font-family:var(--serif); font-size:11.5px; color:var(--text-soft); letter-spacing:.05em; }
.dream-head .meta .mood { font-size:11px; padding:2.5px 10px; border-radius:999px; background:var(--accent-soft); color:var(--text-soft); }
.dream-head .ex { margin-top:10px; font-size:13.5px; color:var(--text-soft); line-height:1.6; }
#dSections { display:flex; flex-direction:column; gap:13px; }
.dsec p { font-size:14px; line-height:1.8; margin-bottom:9px; white-space:pre-wrap; }
.dsec p:last-child { margin-bottom:2px; }
.dsec p.thinking { color:var(--text-soft); font-size:13.5px; }

/* ══ 记忆页 ══ */
.mm-filters { display:flex; gap:7px; margin-bottom:2px; }
.mm-filters button { font-family:var(--kai); font-size:12.5px; padding:5px 14px;
  border:1px solid var(--accent-soft); border-radius:999px; background:var(--card);
  color:var(--text-soft); cursor:pointer; }
.mm-filters button.on { background:var(--accent-soft); color:var(--text); border-color:var(--accent); }
.mm-list { display:flex; flex-direction:column; gap:11px; }
.mm { background:var(--card); border-radius:var(--radius); padding:13px 15px;
  box-shadow:0 2px 10px rgba(92,75,75,.05); }
.mm.sunk { opacity:.6; }
.mm .head { display:flex; gap:9px; align-items:baseline; }
.mm .type { flex:none; font-size:10.5px; padding:2px 9px; border-radius:999px; background:var(--accent-soft); color:var(--text-soft); }
.mm .type[data-t="permanent"] { background:var(--accent); color:var(--card); }
.mm .t1 { flex:1; font-size:14px; min-width:0; }
.mm time { font-family:var(--serif); font-size:10.5px; color:var(--text-soft); flex:none; }
.mm .ex { font-size:12.5px; color:var(--text-soft); line-height:1.65; margin-top:7px;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.mm.open .ex { display:block; color:var(--text); }
.mm .tags { display:none; }
.mm.open .tags { display:flex; gap:5px; flex-wrap:wrap; margin-top:8px; }
.mm .tags span { font-size:10.5px; padding:2px 9px; border-radius:999px; background:var(--accent-soft); color:var(--text-soft); }

/* ══ 记仇本 ══ */
.grudge .g-latest { display:flex; gap:9px; align-items:flex-start; }
.grudge .lvl { flex:none; font-size:15px; line-height:1.45; }
.grudge .what { font-size:13.5px; line-height:1.6; color:var(--text);
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.g-list { display:flex; flex-direction:column; gap:12px; }
.gd .head { display:flex; gap:9px; align-items:center; }
.gd .lvl { font-size:15px; }
.gd time { font-family:var(--serif); font-size:11px; color:var(--text-soft); letter-spacing:.05em; }
.gd .badge { margin-left:auto; font-size:10.5px; padding:2.5px 10px; border-radius:999px;
  background:var(--rose); color:#FFF8F6; letter-spacing:.06em; }
.gd.done .badge { background:var(--accent-soft); color:var(--text-soft); }
.gd .what { font-size:13.5px; line-height:1.65; margin-top:9px; }
.gd .detail { display:none; }
.gd.open .detail { display:block; margin-top:11px; border-top:1px solid var(--accent-soft); }
.gd .sec { margin-top:10px; }
.gd .lbl { font-size:10.5px; letter-spacing:.16em; color:var(--rose); margin-bottom:4px; }
.gd .sec p { font-size:13px; line-height:1.7; color:var(--text-soft); white-space:pre-wrap; }

@media (prefers-reduced-motion: reduce) {
  .vital .beat, .dark-room h3 .lamp, .darkroom-page .topbar .lamp.on { animation:none; }
}

/* ── 全站汉堡抽屉(js/drawer.js注入DOM,2026-08-04) ── */
#drawerMask { position: fixed; inset: 0; z-index: 13; background: rgba(60,48,48,.18);
  -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px); }
#drawer { position: fixed; z-index: 14; top: 0; bottom: 0; left: 0;
  width: min(78%, 300px);
  padding: calc(env(safe-area-inset-top, 0px) + 22px) 18px 20px;
  background: color-mix(in srgb, var(--card) 96%, transparent);
  -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px);
  border-right: 1px solid color-mix(in srgb, #fff 45%, transparent);
  box-shadow: 8px 0 32px rgba(92,75,75,.18);
  transform: translateX(-108%); transition: transform .28s ease; overflow-y: auto; }
#drawer.open { transform: translateX(0); }
#drawer h4 { font-size: 12px; font-weight: normal; color: var(--text-soft);
  letter-spacing: .12em; margin: 16px 0 9px; }
#drawer h4:first-child { margin-top: 0; }
#drawer h4 small { font-family: var(--serif); color: var(--text-soft); font-size: 10.5px; letter-spacing: .02em; }
#drawer .chips { display: flex; gap: 7px; flex-wrap: wrap; }
#drawer .chips button { font-family: var(--kai); font-size: 12.5px; padding: 6px 14px;
  border: 1px solid var(--accent-soft); border-radius: 999px; background: transparent;
  color: var(--text); cursor: pointer; }
#drawer .chips button.on { background: var(--accent-soft); border-color: var(--accent); }
#drawer .kv { font-family: var(--serif); font-size: 12px; color: var(--text-soft); }
#drawer .plan-row { margin-top: 11px; }
#drawer .plan-row .line1 { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 5px; }
#drawer .plan-row .k { font-size: 12.5px; }
#drawer .plan-row .v { font-family: var(--serif); font-size: 11px; color: var(--text-soft); }
#drawer .bar { height: 6px; border-radius: 4px; background: var(--accent-soft); overflow: hidden; }
#drawer .bar i { display: block; height: 100%; width: 0; border-radius: 4px;
  background: var(--accent); transition: width .5s; }
html[data-night="1"] #drawer { border-color: rgba(255,255,255,.09); }
