:root{
  --paper:#F4F1EA; --paper2:#ECE7DC; --card:#FCFAF5; --ink:#2B2721; --ink2:#6E675C;
  --line:#DED8CA;
  --health:#7D8F6E; --work:#74889B; --life:#C08A67; --rest:#9C8DA9;
  --healthD:#5F7051; --workD:#54687C; --lifeD:#96664A; --restD:#756583;
  --barfg:#FFFFFF; --barsoft:rgba(255,255,255,.2); --navbg:#FBF9F3;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{scrollbar-gutter:stable}
html,body{margin:0;padding:0}
body{background:var(--paper);color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;}
#app{max-width:440px;margin:0 auto;min-height:100vh;padding:18px 16px 132px;}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,select,textarea{font-family:inherit;font-size:16px;color:var(--ink)}

/* ---------- header ---------- */
.top{display:flex;justify-content:space-between;align-items:flex-end;padding:6px 4px 14px}
.wordmark{font-size:27px;font-weight:800;letter-spacing:-.6px}
.datesub{color:var(--ink2);font-size:13px;font-weight:600;margin-top:2px}
.gear{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;color:var(--ink2)}
.gear:hover{background:var(--paper2)}

/* ---------- toolbar ---------- */
.filters{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 10px;scrollbar-width:none}
.filters::-webkit-scrollbar{display:none}
.chip{flex:0 0 auto;height:38px;padding:0 14px;border-radius:999px;background:var(--paper2);
  color:var(--ink2);font-size:14px;font-weight:700;display:flex;align-items:center;gap:7px}
.chip.on{background:var(--ink);color:var(--paper)}
.chip .dot{width:9px;height:9px;border-radius:50%}
.toolbar{display:flex;gap:8px;align-items:center;padding:0 2px 10px}
.sortsel{flex:1;height:40px;border:1.5px solid var(--line);border-radius:12px;background:var(--card);
  padding:0 10px;font-size:14px;font-weight:600}
.dirbtn{width:70px;height:40px;border:1.5px solid var(--line);border-radius:12px;background:var(--card);
  font-size:13px;font-weight:800;color:var(--ink2)}
.seg{display:flex;background:var(--paper2);border-radius:12px;padding:3px}
.seg button{height:34px;padding:0 12px;border-radius:9px;font-size:13px;font-weight:700;color:var(--ink2)}
.seg button.on{background:var(--card);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.08)}

/* ---------- habit bars ---------- */
.bar{position:relative;overflow:hidden;border-radius:16px;padding:14px 14px 20px;margin-bottom:12px;
  color:var(--barfg);display:flex;align-items:center;gap:12px;min-height:78px;text-align:left;width:100%}
.bar.dim{opacity:.5}
.bar-icon{flex:0 0 auto;width:48px;height:48px;border-radius:13px;background:var(--barsoft);
  display:grid;place-items:center;font-size:25px}
.bar-mid{flex:1;min-width:0}
.bar-name{font-size:18px;font-weight:750;letter-spacing:-.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar-sub{font-size:12px;font-weight:600;opacity:.88;margin-top:3px;display:flex;align-items:center;gap:5px;flex-wrap:nowrap;height:19px;overflow:hidden;white-space:nowrap}
.bar-sub .bchip{height:19px;padding:0 9px;display:inline-flex;align-items:center;flex:0 0 auto}
.bchip{background:var(--barsoft);border-radius:999px;padding:3px 9px;font-size:11.5px;font-weight:700}
.strip{position:absolute;left:0;bottom:0;height:6px;width:100%;background:var(--barsoft)}
.strip i{display:block;height:100%;background:var(--barfg);border-radius:0 3px 3px 0}
.check{flex:0 0 auto;width:50px;height:50px;border-radius:50%;border:2.5px solid var(--barfg);
  background:var(--barsoft);display:grid;place-items:center;font-size:22px;color:transparent}
.check.done{background:var(--barfg);color:var(--ink);border-color:var(--barfg)}
.stepper{flex:0 0 auto;display:flex;align-items:center;gap:9px}
.stepper button{width:38px;height:38px;border-radius:50%;background:var(--barsoft);
  color:var(--barfg);font-size:19px;font-weight:800;display:grid;place-items:center}
.stepper button:disabled{opacity:.35}
.stepper .n{min-width:44px;text-align:center;font-size:16px;font-weight:800}
.restchip{flex:0 0 auto;background:var(--barsoft);border-radius:999px;padding:8px 13px;
  font-size:12px;font-weight:700}

/* ---------- amp rows ---------- */
.bar.task{background:var(--card);border:1.5px solid var(--line);border-left:8px solid var(--ink2);
  color:var(--ink);padding-bottom:14px}
.bar.task .bar-name{white-space:normal;line-height:1.3}
.bar.task .bar-sub{color:var(--ink2);opacity:.8}
.bar.task .strip{display:none}
.tbox{flex:0 0 auto;width:38px;height:38px;border-radius:11px;border:2.5px solid var(--line);
  background:#fff;display:grid;place-items:center;font-size:16px;color:transparent}
.tbox.done{color:#fff}

/* ---------- section headers (routine view) ---------- */
.grouph{font-size:13px;font-weight:800;color:var(--ink2);text-transform:uppercase;letter-spacing:.8px;
  margin:20px 4px 10px;display:flex;align-items:center;gap:8px}
.grouph:after{content:"";flex:1;height:1.5px;background:var(--line);border-radius:1px}

/* ---------- empty state ---------- */
.empty{border:2.5px dashed var(--line);border-radius:20px;padding:44px 24px;text-align:center;margin-top:24px}
.empty .eicon{font-size:38px;margin-bottom:10px}
.empty .etitle{font-size:19px;font-weight:800;margin-bottom:6px}
.empty .esub{color:var(--ink2);font-size:14.5px;line-height:1.5}

/* ---------- cards ---------- */
.card{background:var(--card);border:1.5px solid var(--line);border-radius:18px;padding:16px;margin-bottom:14px}
.card h3{margin:0 0 12px;font-size:14px;font-weight:800;letter-spacing:-.1px}
.card h3 .sub{font-weight:600;color:var(--ink2);font-size:12px;margin-left:6px}

/* ---------- balance ---------- */
.radarwrap{display:grid;place-items:center;padding:4px 0 2px}
.qrow{display:flex;align-items:center;gap:10px;padding:10px 2px;border-top:1.5px solid var(--paper2)}
.qrow:first-of-type{border-top:none}
.qdot{width:12px;height:12px;border-radius:4px;flex:0 0 auto}
.qname{font-weight:700;font-size:15px;flex:1}
.qpct{font-weight:800;font-size:15px;font-variant-numeric:tabular-nums}
.qbar{flex:0 0 90px;height:8px;border-radius:4px;background:var(--paper2);overflow:hidden}
.qbar i{display:block;height:100%;border-radius:4px}
.bigstats{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
.stat{background:var(--card);border:1.5px solid var(--line);border-radius:14px;padding:12px 12px 10px;text-align:center}
.stat .v{font-size:23px;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:-.5px}
.stat .l{font-size:11.5px;font-weight:700;color:var(--ink2);margin-top:2px}
.note{font-size:13px;color:var(--ink2);line-height:1.55;padding:2px 4px}

/* ---------- detail ---------- */
.backrow{display:flex;align-items:center;gap:6px;margin-bottom:12px}
.backbtn{width:42px;height:42px;border-radius:12px;background:var(--paper2);display:grid;place-items:center;font-size:18px;font-weight:800}
.dhead{border-radius:20px;padding:20px;color:var(--barfg);margin-bottom:14px}
.dhead .di{width:58px;height:58px;border-radius:15px;background:var(--barsoft);display:grid;place-items:center;font-size:30px;margin-bottom:12px}
.dhead .dn{font-size:23px;font-weight:800;letter-spacing:-.3px;margin-bottom:10px}
.dchips{display:flex;gap:6px;flex-wrap:wrap}
.dchip{background:var(--barsoft);border-radius:999px;padding:5px 11px;font-size:12.5px;font-weight:700}
.actrow{display:flex;gap:8px;margin-bottom:14px}
.actbtn{flex:1;height:44px;border-radius:12px;background:var(--paper2);font-size:13.5px;font-weight:700;color:var(--ink)}
.actbtn.danger{color:#A34A3A}
.gradnum{font-size:40px;font-weight:800;letter-spacing:-1px}
.gradnum small{font-size:18px;color:var(--ink2);font-weight:700}
.gbar{height:12px;border-radius:6px;background:var(--paper2);overflow:hidden;margin:10px 0 8px}
.gbar i{display:block;height:100%;border-radius:6px}
.gradcap{font-size:13px;color:var(--ink2);font-weight:600}
.gradbtn{width:100%;height:52px;border-radius:14px;background:var(--ink);color:var(--paper);
  font-size:16px;font-weight:800;margin-top:12px}

/* heatmap */
.hm{display:grid;grid-template-columns:20px repeat(31,1fr);gap:2.5px;align-items:center}
.hm .mlab{font-size:9.5px;font-weight:700;color:var(--ink2)}
.hm .d{aspect-ratio:1;border-radius:50%;background:var(--paper2)}
.hm .d.na{background:transparent}
.legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:12px}
.legend span{display:flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;color:var(--ink2)}
.legend .d{width:10px;height:10px;border-radius:50%}

/* weekly chart */
.wchart{display:flex;align-items:flex-end;gap:6px;height:110px;padding-top:6px}
.wbar{flex:1;border-radius:5px 5px 2px 2px;min-height:4px;position:relative}
.wlabels{display:flex;justify-content:space-between;font-size:11px;color:var(--ink2);font-weight:600;margin-top:6px}

/* journal */
.jentry{padding:11px 2px;border-top:1.5px solid var(--paper2)}
.jentry:first-of-type{border-top:none}
.jdate{font-size:11.5px;font-weight:800;color:var(--ink2);text-transform:uppercase;letter-spacing:.5px;margin-bottom:3px}
.jtext{font-size:14.5px;line-height:1.55}
textarea.jin{width:100%;min-height:74px;border:1.5px solid var(--line);border-radius:12px;background:#fff;padding:11px 13px;font-size:15px;resize:vertical}
.cap{font-size:12px;color:var(--ink2);font-weight:600;margin-top:8px}

/* ---------- legacy ---------- */
.legacyhead{padding:4px 4px 16px}
.legacyhead .t{font-size:22px;font-weight:800;letter-spacing:-.3px}
.legacyhead .s{color:var(--ink2);font-size:14px;margin-top:3px;line-height:1.5}
.lcard{background:var(--card);border:1.5px solid var(--line);border-radius:18px;padding:15px;margin-bottom:12px;display:flex;gap:13px;align-items:flex-start}
.licon{width:48px;height:48px;border-radius:13px;display:grid;place-items:center;font-size:24px;color:#fff;flex:0 0 auto}
.lname{font-size:17px;font-weight:750}
.lmeta{font-size:12.5px;color:var(--ink2);font-weight:600;margin-top:3px}
.review{margin-top:10px;background:var(--paper2);border-radius:12px;padding:11px 12px}
.review .rq{font-size:13.5px;font-weight:700;margin-bottom:8px}
.review .rbtns{display:flex;gap:8px}
.review button{flex:1;height:40px;border-radius:10px;font-size:13px;font-weight:700;background:var(--card);border:1.5px solid var(--line)}
.review button.primary{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.dotbadge{position:absolute;top:6px;right:14px;width:8px;height:8px;border-radius:50%;background:#C08A67}

/* ---------- bottom nav + fab ---------- */
.nav{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:min(440px,100%);
  background:var(--navbg);border-top:1.5px solid var(--line);display:flex;z-index:40;
  padding:7px 8px calc(9px + env(safe-area-inset-bottom))}
.nav button{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;color:var(--ink2);
  font-size:11px;font-weight:700;padding:4px 0;position:relative}
.nav button.on{color:var(--ink)}
.nav svg{width:23px;height:23px}
.fab{position:fixed;bottom:calc(84px + env(safe-area-inset-bottom));right:max(16px,calc(50vw - 204px));
  width:58px;height:58px;border-radius:50%;background:var(--ink);color:var(--paper);font-size:30px;font-weight:300;
  display:grid;place-items:center;z-index:41;box-shadow:0 3px 10px rgba(43,39,33,.25)}

/* ---------- modal ---------- */
.overlay{position:fixed;inset:0;background:rgba(34,30,24,.5);z-index:60;display:flex;align-items:flex-end;justify-content:center}
.sheet{width:min(440px,100%);max-height:90vh;overflow-y:auto;background:var(--paper);
  border-radius:22px 22px 0 0;padding:20px 18px calc(26px + env(safe-area-inset-bottom))}
.sheet.center{align-self:center;border-radius:22px;margin:0 18px;width:auto;max-width:404px;text-align:center}
.sh-title{font-size:20px;font-weight:800;letter-spacing:-.3px;margin-bottom:14px}
.flabel{display:block;font-size:12.5px;font-weight:800;color:var(--ink2);text-transform:uppercase;letter-spacing:.6px;margin:16px 0 8px}
.fin{width:100%;height:50px;border:1.5px solid var(--line);border-radius:13px;background:#fff;padding:0 14px}
.icongrid{display:grid;grid-template-columns:repeat(8,1fr);gap:6px}
.icongrid button{aspect-ratio:1;border-radius:11px;background:var(--card);border:1.5px solid var(--line);font-size:20px;display:grid;place-items:center}
.icongrid button.on{border-color:var(--ink);border-width:2.5px;background:#fff}
.quadgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.quadgrid button{height:52px;border-radius:13px;color:#fff;font-size:15px;font-weight:750;border:3px solid transparent}
.quadgrid button.on{border-color:var(--ink)}
.dayrow{display:flex;gap:6px}
.dayrow button{flex:1;height:42px;border-radius:11px;background:var(--card);border:1.5px solid var(--line);font-size:13px;font-weight:700;color:var(--ink2)}
.dayrow button.on{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.stepin{display:flex;align-items:center;gap:14px}
.stepin button{width:46px;height:46px;border-radius:13px;background:var(--paper2);font-size:21px;font-weight:800}
.stepin .v{font-size:19px;font-weight:800;min-width:60px;text-align:center}
.savebtn{width:100%;height:54px;border-radius:15px;background:var(--ink);color:var(--paper);font-size:16.5px;font-weight:800;margin-top:22px}
.ferr{color:#A34A3A;font-size:13.5px;font-weight:600;margin-top:10px;min-height:18px}
.ghostbtn{width:100%;height:48px;border-radius:13px;background:var(--paper2);font-size:15px;font-weight:700;margin-top:10px}
.confirmbody{font-size:15px;line-height:1.55;color:var(--ink2);margin-bottom:18px}
.confirmbtns{display:flex;gap:10px}
.confirmbtns button{flex:1;height:50px;border-radius:13px;font-size:15px;font-weight:750;background:var(--paper2)}
.confirmbtns button.primary{background:var(--ink);color:var(--paper)}
.confirmbtns button.danger{background:#A34A3A;color:#fff}

/* graduation celebration */
.gradring{width:110px;height:110px;border-radius:50%;margin:8px auto 16px;display:grid;place-items:center;
  font-size:46px;color:#fff;animation:pop .5s ease}
@keyframes pop{0%{transform:scale(.6);opacity:0}100%{transform:scale(1);opacity:1}}
.gradtitle{font-size:23px;font-weight:800;letter-spacing:-.4px;margin-bottom:8px}
.gradbody{font-size:14.5px;color:var(--ink2);line-height:1.6;margin-bottom:6px}

/* settings + dev */
.setbtn{width:100%;min-height:52px;border-radius:13px;background:var(--card);border:1.5px solid var(--line);
  font-size:15px;font-weight:700;margin-bottom:10px;display:flex;align-items:center;padding:10px 16px;gap:10px;text-align:left}
.setbtn.danger{color:#A34A3A}

/* toast */
.toast{position:fixed;bottom:calc(150px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);
  background:var(--ink);color:var(--paper);padding:12px 18px;border-radius:12px;font-size:14px;font-weight:600;
  z-index:70;max-width:min(400px,90vw);text-align:center;animation:tin .25s ease}
@keyframes tin{from{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%,0)}}

/* ---------- onboarding + hints ---------- */
.coachwrap{position:fixed;inset:0;z-index:80}
.coachhole{position:fixed;border-radius:14px;box-shadow:0 0 0 9999px rgba(30,26,20,.55);pointer-events:none}
.coachtip{position:fixed;left:50%;transform:translateX(-50%);width:min(396px,calc(100vw - 32px));background:var(--paper);border-radius:16px;padding:16px;z-index:81;border:1.5px solid var(--line)}
.ct-t{font-weight:800;font-size:15px;margin-bottom:4px}
.ct-b{font-size:14px;color:var(--ink2);line-height:1.5}
.coachbtns{display:flex;gap:8px;margin-top:14px;justify-content:flex-end}
.coachbtns .savebtn{width:auto;margin:0;height:44px;padding:0 22px;font-size:15px}
.coachbtns .ghostbtn{width:auto;margin:0;height:44px;padding:0 16px;font-size:14px}
.hint{display:flex;gap:10px;align-items:flex-start;background:var(--card);border:1.5px solid var(--line);border-radius:14px;padding:12px;margin-bottom:14px}
.hint .ht{flex:1;font-size:13.5px;line-height:1.5;color:var(--ink2)}
.hint .ht b{color:var(--ink)}
.hint button{flex:0 0 auto;width:30px;height:30px;border-radius:9px;background:var(--paper2);font-size:14px;color:var(--ink2)}
.oblocks{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:14px 0}
.oblocks div{border-radius:13px;color:var(--barfg);padding:14px;font-weight:750;font-size:15px;text-align:center}

@media (prefers-reduced-motion: reduce){*{animation:none!important;transition:none!important}}

/* Coach overlay must never swallow clicks — only its own buttons are interactive */
#coach{ pointer-events:none; }
#coach button{ pointer-events:auto; }

/* last-7-days strip (habit detail) */
.week7{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.d7{border:1.5px solid var(--line);border-radius:10px;padding:8px 2px 6px;text-align:center;cursor:pointer;background:var(--card)}
.d7:active{transform:scale(.95)}
.d7 .dl{font-size:10px;font-weight:700;color:var(--ink2);text-transform:uppercase}
.d7 .dn{font-size:14px;font-weight:800;margin-top:1px}
.d7 .ds{margin:6px 4px 0;height:7px;border-radius:4px;background:transparent;border:1.5px dashed var(--line)}
.d7.done .ds,.d7.part .ds{border:none}
.d7.nosched{opacity:.4;cursor:default}
.d7.nosched .ds{border:none}
.d7 .dqty{font-size:10px;font-weight:700;color:var(--ink2);margin-top:4px;min-height:12px}
