/* Rhythm — editorial, ink on paper */
:root{
  --paper:#F5F1E8; --paper2:#EDE7DA; --card:#FBF8F1;
  --ink:#1C1A16; --ink2:#57534A; --ink3:#8A8478;
  --line:rgba(28,26,22,.14);
  --moss:#4A5B43; --moss-soft:rgba(74,91,67,.12);
  --ochre:#9A6B2F; --ochre-soft:rgba(154,107,47,.14);
  --ok:#3E6B4F;
  --serif:"Source Serif 4","Songti SC","Noto Serif SC",Georgia,serif;
  --display:"Fraunces","Source Serif 4",Georgia,serif;
  --mono:"JetBrains Mono","SF Mono",Menlo,monospace;
  --pad:20px;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{
  background:var(--paper); color:var(--ink);
  font-family:var(--serif); font-size:16px; line-height:1.55;
  -webkit-font-smoothing:antialiased;
  padding-top:env(safe-area-inset-top);
  background-image:radial-gradient(rgba(28,26,22,.028) 1px, transparent 1px);
  background-size:22px 22px;
}
#app{max-width:460px;margin:0 auto;padding:0 var(--pad) calc(28px + env(safe-area-inset-bottom))}

/* ── 顶栏 ─────────────────────────── */
.topbar{
  display:flex;align-items:baseline;justify-content:space-between;
  padding:22px 2px 14px;border-bottom:1px solid var(--ink);
}
.wordmark{display:flex;align-items:center;gap:8px;color:var(--ink)}
.wordmark svg{color:var(--moss)}
.wordmark-name{font-family:var(--display);font-weight:600;font-size:17px;letter-spacing:.02em}
.tabs{display:flex;gap:18px}
.tab{
  background:none;border:0;font-family:var(--serif);font-size:14.5px;
  color:var(--ink3);cursor:pointer;padding:4px 0;position:relative;letter-spacing:.04em;
}
.tab.is-active{color:var(--ink)}
.tab.is-active::after{
  content:"";position:absolute;left:0;right:0;bottom:-3px;height:2px;background:var(--ink);
}

/* ── 页 ─────────────────────────── */
.page{display:none}
.page.is-active{display:block}
.page-title{
  font-family:var(--display);font-weight:600;font-size:22px;
  margin:26px 0 4px;
}
.page-title::before{content:"§ ";color:var(--ink3);font-weight:400}

/* ── 今日 ─────────────────────────── */
.dateline{
  text-align:center;margin:30px 0 6px;
  font-size:13px;letter-spacing:.28em;color:var(--ink2);text-transform:uppercase;
}
.clockbox{text-align:center;margin-bottom:26px}
.clock{
  font-family:var(--mono);font-weight:500;font-size:56px;line-height:1.05;
  letter-spacing:.01em;font-variant-numeric:tabular-nums;
}
.clock-sub{margin-top:8px;font-size:12px;letter-spacing:.3em;color:var(--ink3)}

.sleepcard{
  background:var(--card);border:1px solid var(--line);
  padding:18px 20px;margin-bottom:18px;
  box-shadow:0 1px 0 rgba(28,26,22,.05);
}
.sleepcard-hint{font-size:13px;color:var(--ink2);letter-spacing:.06em;min-height:1.5em}
.sleepcard-val{font-family:var(--mono);font-size:24px;margin-top:6px;color:var(--ink);font-variant-numeric:tabular-nums}
.sleepcard-foot{margin-top:8px;font-size:12.5px;color:var(--ink3)}
.sleepcard-foot b{color:var(--moss);font-weight:600}

.actbtn{
  display:block;width:100%;
  background:var(--ink);color:var(--paper);
  border:0;border-radius:3px;
  font-family:var(--serif);font-size:20px;letter-spacing:.14em;
  padding:20px 0 18px;cursor:pointer;
  transition:transform .06s ease, background .25s ease;
  box-shadow:0 2px 0 rgba(28,26,22,.25);
}
.actbtn:active{transform:translateY(1px)}
.actbtn.state-sleep{background:var(--moss)}
.actbtn.state-awake{background:var(--ochre)}
.actbtn .sub{display:block;font-size:12px;letter-spacing:.22em;margin-top:6px;opacity:.65;font-family:var(--mono)}

.today-rows{margin-top:22px;border-top:1px solid var(--line)}
.trow{
  display:flex;align-items:baseline;gap:10px;
  padding:11px 2px;border-bottom:1px solid var(--line);
}
.trow .tdot{width:8px;height:8px;border-radius:50%;flex:none;transform:translateY(-1px)}
.tdot.dawn{background:var(--ochre)}
.tdot.dusk{background:var(--moss)}
.trow .tlabel{font-size:13px;color:var(--ink2);width:3.2em;flex:none}
.trow .ttime{font-family:var(--mono);font-size:15px;font-variant-numeric:tabular-nums}
.trow .tdur{margin-left:auto;font-size:12.5px;color:var(--ink3);font-family:var(--mono)}
.today-footnote{margin-top:20px;text-align:center;font-size:11.5px;color:var(--ink3);letter-spacing:.05em}

/* ── 统计 ─────────────────────────── */
.statgrid{
  display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:18px 0 24px;
}
.stat{
  background:var(--card);border:1px solid var(--line);padding:14px 16px;
}
.stat .k{font-size:11.5px;letter-spacing:.18em;color:var(--ink3)}
.stat .v{font-family:var(--mono);font-size:22px;margin-top:6px;font-variant-numeric:tabular-nums}
.stat .d{font-size:11px;color:var(--ink3);margin-top:4px;font-family:var(--mono)}

.chartbox,.logbox,.cardblock{
  background:var(--card);border:1px solid var(--line);padding:16px 18px;margin-bottom:16px;
}
.chart-title{font-family:var(--display);font-weight:600;font-size:15px;margin-bottom:10px}
#barsvg{width:100%;height:150px;display:block}
.chart-legend{display:flex;justify-content:space-between;font-size:10.5px;color:var(--ink3);font-family:var(--mono);margin-top:6px}
.chart-empty{font-size:13px;color:var(--ink3);padding:30px 0;text-align:center}

.logbox-head{display:flex;align-items:baseline;justify-content:space-between}
.minibtn{background:none;border:0;font-size:12px;color:var(--ink3);text-decoration:underline;cursor:pointer}
.minibtn:active{color:var(--ink)}
.logrows{max-height:280px;overflow-y:auto;margin-top:4px}
.lrow{
  display:flex;gap:10px;align-items:baseline;
  padding:9px 0;border-bottom:1px dashed var(--line);
}
.lrow .lbar{width:3px;align-self:stretch;background:var(--moss);flex:none;border-radius:1px;transform:translateY(2px)}
.lrow .lbar.miss{background:var(--ink3)}
.lrow .ldate{font-family:var(--mono);font-size:12.5px;color:var(--ink2);width:6.4em;flex:none;font-variant-numeric:tabular-nums}
.lrow .ltime{font-family:var(--mono);font-size:13.5px}
.lrow .ldur{margin-left:auto;font-family:var(--mono);font-size:12px;color:var(--ink3)}
.lrow .ldel{background:none;border:0;color:var(--ink3);font-size:14px;padding:0 4px;cursor:pointer;flex:none}
.lrow .ldel:active{color:var(--ink)}

/* ── 导出 ─────────────────────────── */
.cardnote{font-size:13.5px;color:var(--ink2);margin-bottom:12px}
.cardblock.danger{border-color:rgba(154,63,42,.35)}
.btnrow{display:flex;gap:10px}
.btn{
  flex:1;background:none;border:1px solid var(--ink);border-radius:3px;
  font-family:var(--serif);font-size:15px;padding:12px 0;cursor:pointer;color:var(--ink);
  letter-spacing:.08em;
}
.btn:active{background:var(--paper2)}
.btn-danger{border-color:#8A4030;color:#8A4030}
.btn-danger:active{background:rgba(138,64,48,.08)}
.importmsg{margin-top:10px;font-size:12.5px;color:var(--ok);min-height:1.2em;font-family:var(--mono)}
.foot{
  margin-top:34px;text-align:center;font-size:11px;color:var(--ink3);
  letter-spacing:.3em;border-top:1px solid var(--line);padding-top:16px;
}
