:root{--bg:#0f1115;--card:#1a1d24;--card2:#232733;--text:#e8eaed;--muted:#9aa0aa;--accent:#4f8cff;--good:#36c08a;--bad:#e2574c;--warn:#e0a83b}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}body,html{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:15px}.app{padding:calc(16px + env(safe-area-inset-top)) 14px 120px;max-width:640px;margin:0 auto}h1{font-size:20px;margin:4px 0 14px}h2{font-size:16px;margin:18px 0 8px;color:var(--text)}.card{background:var(--card);border-radius:14px;padding:14px;margin-bottom:12px}.row{display:flex;justify-content:space-between;align-items:center;padding:7px 0}.row+.row{border-top:1px solid hsla(0,0%,100%,.05)}.muted{color:var(--muted)}.big{font-size:30px;font-weight:700}.indices{display:flex;gap:10px}.idx{flex:1 1;background:var(--card2);border-radius:12px;padding:12px;text-align:center}.idx .val{font-size:24px;font-weight:700}.idx .lbl{margin-top:2px}.idx .lbl,.pill{font-size:12px;color:var(--muted)}.pill{display:inline-block;padding:3px 10px;border-radius:999px;background:var(--card2)}.pill.good{background:rgba(54,192,138,.16);color:var(--good)}.pill.bad{background:rgba(226,87,76,.16);color:var(--bad)}.tabs{position:fixed;left:8px;right:8px;bottom:calc(8px + env(safe-area-inset-bottom));display:flex;gap:2px;background:#1b1f27;border:1px solid hsla(0,0%,100%,.08);border-radius:18px;padding:6px 4px;box-shadow:0 8px 28px rgba(0,0,0,.45);max-width:620px;margin:0 auto}.tab{flex:1 1;min-width:0;text-align:center;padding:8px 1px;font-size:10px;color:var(--muted);background:none;border:none;cursor:pointer;border-radius:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tab.active{background:rgba(79,140,255,.12);color:var(--accent)}.tab .ic{font-size:18px;display:block;margin-bottom:2px}input,select{background:var(--card2);border:1px solid hsla(0,0%,100%,.08);color:var(--text);border-radius:10px;padding:9px 11px;font-size:15px;width:100%}button.primary{background:var(--accent);color:#fff;border:none;border-radius:10px;padding:10px 14px;font-size:15px;cursor:pointer;width:100%;margin-top:8px}.grid2{display:grid;grid-template-columns:1fr 1fr;grid-gap:10px;gap:10px}.bar{height:8px;background:var(--card2);border-radius:4px;overflow:hidden;margin-top:4px}.bar>i{display:block;height:100%;background:var(--accent)}.loading{color:var(--muted);padding:40px 0}.err,.loading{text-align:center}.err{color:var(--bad);padding:30px 0}.note{text-align:center;padding:8px;border-radius:10px;margin:10px 0;font-size:13px;background:var(--card2);color:var(--muted)}.note.ok{background:rgba(54,192,138,.16);color:var(--good)}.card.pad0{padding:4px 6px}.hrow{width:100%;display:flex;justify-content:space-between;align-items:center;background:none;border:none;color:var(--text);padding:10px 8px;font-size:15px;cursor:pointer;text-align:left}.hrow+.hrow{border-top:1px solid hsla(0,0%,100%,.05)}.hrow-t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:8px}.hrow-v{color:var(--muted);font-weight:600}.hrow-v.ok{color:var(--good)}.hrow-v.fail{color:var(--bad)}.good-t{color:var(--good)}.bad-t{color:var(--bad)}.goal-meta{margin-top:8px}.chips,.goal-meta{display:flex;flex-wrap:wrap;gap:6px}.chips{margin-bottom:12px}.chip{background:var(--card2);border:1px solid hsla(0,0%,100%,.06);color:var(--muted);border-radius:999px;padding:6px 12px;font-size:13px;cursor:pointer}.chip.active{background:rgba(79,140,255,.16);color:var(--accent);border-color:rgba(79,140,255,.4)}.d{font-size:12px;font-weight:600}.d.up{color:var(--good)}.d.down{color:var(--bad)}.d.flat,.legend{color:var(--muted)}.legend{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:8px;font-size:12px}.legend span{display:inline-flex;align-items:center;gap:5px}.sw{width:12px;height:12px;border-radius:3px;display:inline-block}.sw.ok{background:var(--good)}.sw.part{background:var(--accent)}.sw.fail{background:var(--bad)}.sw.none{background:var(--card2)}.grid-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:12px}.grid{border-collapse:separate;border-spacing:3px}.grid td,.grid th{padding:0}.gh-name{position:-webkit-sticky;position:sticky;left:0;z-index:2;background:var(--bg);text-align:left;font-weight:500;font-size:12px;color:var(--text);max-width:124px;min-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:6px}.gh-day{font-size:11px;color:var(--muted);width:26px;text-align:center}.gh-day.prot{color:var(--accent)}.gh-mode{font-size:10px;height:12px}.gcell{width:26px;height:26px;border-radius:6px;background:var(--card2);cursor:pointer;text-align:center;font-size:11px;color:#fff;vertical-align:middle}.gcell.ok{background:var(--good)}.gcell.fail{background:var(--bad)}.gcell.part{background:var(--accent)}.gcell.none{background:var(--card2)}.sheet-bg{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:50;display:flex;align-items:flex-end}.sheet{width:100%;max-width:640px;margin:0 auto;background:var(--card);border-radius:18px 18px 0 0;padding:18px 16px calc(20px + env(safe-area-inset-bottom));box-shadow:0 -8px 28px rgba(0,0,0,.5)}.sheet-h{font-size:17px;font-weight:700;margin-bottom:2px}.ed-row{display:flex;gap:8px;flex-wrap:wrap}.ed-row>button{flex:1 1}.ed-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:8px;gap:8px}button.ghost{background:var(--card2);color:var(--text);border:1px solid hsla(0,0%,100%,.08);border-radius:10px;padding:12px;font-size:15px;cursor:pointer}.ed-foot{display:flex;justify-content:space-between;margin-top:14px}button.link{background:none;border:none;color:var(--muted);font-size:14px;cursor:pointer;padding:6px}.sheet.tall{max-height:88vh;overflow-y:auto;-webkit-overflow-scrolling:touch}.ed-row>button.primary{margin-top:0}button.danger{background:rgba(226,87,76,.16);color:var(--bad);border:1px solid rgba(226,87,76,.4);border-radius:10px;padding:12px;font-size:15px;cursor:pointer}.form{gap:10px;margin-top:12px}.form,.form label{display:flex;flex-direction:column}.form label{gap:4px;font-size:12px;color:var(--muted)}.form label input,.form label select{margin-top:0}.form-2{display:grid;grid-template-columns:1fr 1fr;grid-gap:10px;gap:10px}.form-3{display:grid;grid-template-columns:1fr 1fr 1fr;grid-gap:8px;gap:8px}.form details{background:var(--card2);border-radius:10px;padding:10px 12px}.form details summary{cursor:pointer;font-size:13px}.range{display:flex;gap:10px;margin-bottom:12px}.range label{flex:1 1;display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}.card.goal{cursor:pointer;position:relative}.card.goal.overdue{border:1px solid rgba(226,87,76,.35)}.card.goal.completed{opacity:.82}.bar.completed>i{background:var(--good)}.bar.overdue>i{background:var(--bad)}.bar.paused>i{background:var(--warn)}.edit-hint{font-size:11px;text-align:right;margin-top:6px;opacity:.55}