@font-face{font-family:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/assets/space-grotesk-vietnamese-wght-normal-D0rl6rjA.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/assets/space-grotesk-latin-ext-wght-normal-D9tNdqV9.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/assets/space-grotesk-latin-wght-normal-BhU9QXUp.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg: #fbfbfa;--surface: #ffffff;--surface-2: #f1f1ef;--text: #1a1a1a;--text-dim: #76766f;--border: #e8e8e4;--accent: #002fa7;--good: #2fa36b;--shadow: 0 1px 2px rgba(0, 0, 0, .04), 0 4px 14px rgba(0, 0, 0, .05);--radius: 16px;--tap: rgba(0, 0, 0, .04)}:root[data-theme=dark]{--bg: #0f1115;--surface: #181b21;--surface-2: #21252e;--text: #eceef2;--text-dim: #8b909c;--border: #272c36;--accent: #3d70ff;--good: #43c98a;--shadow: none;--tap: rgba(255, 255, 255, .06)}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:Space Grotesk Variable,Space Grotesk,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;line-height:1.4;-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit;border:none;background:none;cursor:pointer}input,textarea,select{font:inherit;color:inherit}.app{max-width:560px;margin:0 auto;min-height:100%;display:flex;flex-direction:column;padding:env(safe-area-inset-top) env(safe-area-inset-right) 0 env(safe-area-inset-left)}.content{flex:1;padding:22px 18px 120px}.header{display:flex;align-items:center;justify-content:space-between;padding:18px 18px 6px}.header h1{font-size:1.5rem;font-weight:700;margin:0;letter-spacing:-.02em}.header .sub{color:var(--text-dim);font-size:.85rem}.datestrip{display:flex;align-items:center;gap:10px;padding:6px 0 14px;color:var(--text-dim);font-size:.9rem}.datestrip button{width:34px;height:34px;border-radius:10px;background:var(--surface-2);display:grid;place-items:center;font-size:1.1rem}.datestrip .label{flex:1;text-align:center;color:var(--text);font-weight:600}.habit{display:flex;align-items:center;gap:14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;margin-bottom:10px;box-shadow:var(--shadow)}.dot{width:14px;height:14px;border-radius:50%;flex-shrink:0}.habit .dot{margin:0 4px}.habit .meta{flex:1;min-width:0}.habit .name{font-weight:600;display:flex;align-items:center;gap:8px}.habit .name.done{color:var(--text-dim)}.habit .streak{font-size:.8rem;color:var(--text-dim);margin-top:2px}.habit .streak .fire{color:var(--accent);font-weight:600}.check{width:40px;height:40px;border-radius:50%;border:2px solid var(--border);display:grid;place-items:center;font-size:1.2rem;color:transparent;transition:background .15s ease,border-color .15s ease,transform .1s ease}.check.done{background:var(--good);border-color:var(--good);color:#fff}.check:active{transform:scale(.9)}.counter{display:flex;align-items:center;gap:6px}.counter button{width:34px;height:34px;border-radius:10px;background:var(--surface-2);font-size:1.2rem;display:grid;place-items:center}.counter .val{min-width:46px;text-align:center;font-variant-numeric:tabular-nums;font-weight:600}.counter .val small{color:var(--text-dim);font-weight:400}.ring{flex-shrink:0}.empty{text-align:center;color:var(--text-dim);padding:60px 20px}.empty .big{font-size:2.4rem;margin-bottom:8px}.mood-box{margin-top:18px}.mood-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;font-size:.85rem;color:var(--text-dim);margin-bottom:10px}.mood-current{font-weight:700;white-space:nowrap}.mood-meter{display:flex;gap:4px}.mood-seg{flex:1;min-width:0;height:44px;border-radius:9px;background:var(--surface-2);color:var(--text-dim);font-size:.8rem;font-weight:600;font-variant-numeric:tabular-nums;display:grid;place-items:center;transition:transform .1s ease,filter .12s ease}.mood-seg.on{color:#fff}.mood-seg.sel{transform:scaleY(1.16);box-shadow:0 0 0 2px var(--bg),0 0 0 4px currentColor}.mood-seg:active{transform:scale(.9)}.mood-done{margin-top:18px;width:100%;display:flex;align-items:center;gap:8px;padding:13px 15px;background:var(--surface);border:1px solid var(--border);border-radius:14px;color:var(--text-dim);font-size:.9rem;box-shadow:var(--shadow)}.mood-done b{color:var(--text)}.mood-done-dot{width:11px;height:11px;border-radius:50%;flex-shrink:0}.mood-done-edit{margin-left:auto;color:var(--accent);font-size:.82rem;font-weight:600}.mood-chart{display:flex;align-items:flex-end;gap:5px;height:92px}.mood-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;height:100%}.mood-bar-track{flex:1;width:100%;background:var(--surface-2);border-radius:5px;display:flex;flex-direction:column-reverse;overflow:hidden}.mood-bar-fill{width:100%;background:var(--accent);border-radius:5px;transition:height .3s ease}.mood-day{font-size:.62rem;color:var(--text-dim)}.mood-avg{font-weight:700}.mood-avg small{color:var(--text-dim);font-weight:400}.overview .stat-row{margin-bottom:0}.overview .stat{flex:1;align-items:center;text-align:center}.cat-group{margin-bottom:22px}.cat-group-head{display:flex;align-items:center;gap:8px;font-size:.78rem;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;margin:0 0 10px 2px}.cat-group-head .dot{width:10px;height:10px}.period-nav{display:flex;align-items:center;gap:10px;margin-bottom:16px}.period-nav button{width:36px;height:36px;border-radius:11px;background:var(--surface-2);display:grid;place-items:center;font-size:1.2rem;color:var(--text)}.period-label{flex:1;text-align:center;font-weight:600}.pg-weekdays{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;font-size:.62rem;color:var(--text-dim)}.pg-grid{display:grid;grid-template-columns:repeat(7,1fr)}.pg-cell{display:grid;place-items:center;font-variant-numeric:tabular-nums;font-weight:600;line-height:1}.cat-rates{margin-top:14px;display:flex;flex-direction:column;gap:10px}.cat-rate{display:flex;align-items:center;gap:9px;font-size:.85rem}.cat-rate .dot{width:11px;height:11px}.cat-rate-name{flex:0 0 32%;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cat-rate-bar{flex:1;height:7px;border-radius:99px;background:var(--surface-2);overflow:hidden}.cat-rate-bar>span{display:block;height:100%;border-radius:99px;transition:width .3s ease}.cat-rate-val{flex:0 0 auto;min-width:36px;text-align:right;font-variant-numeric:tabular-nums;color:var(--text-dim)}.sync-code{margin-top:8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;word-break:break-all;background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:10px 12px;color:var(--text-dim);line-height:1.45}.chip.cat{display:inline-flex;align-items:center;gap:7px}.chip.cat .dot{width:11px;height:11px}.chip.add{border:1px dashed var(--border);color:var(--text-dim)}.cat-create{margin-top:12px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:12px}.cat-create input{width:100%;background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:10px 12px;outline:none}.cat-row{padding:12px 0;border-bottom:1px solid var(--border)}.cat-row:last-of-type{border-bottom:none}.cat-row-main{display:flex;align-items:center;gap:10px}.cat-swatch{width:26px;height:26px;border-radius:50%;flex-shrink:0}.cat-name{flex:1;min-width:0;background:transparent;border:none;outline:none;font-weight:500;padding:4px 0}.cat-del{color:#e5484d;font-size:.82rem;flex-shrink:0}.cat-add-btn{width:100%;padding:12px 0;color:var(--accent);font-weight:600;text-align:center}.nav{position:fixed;left:0;right:0;bottom:calc(14px + env(safe-area-inset-bottom));display:flex;justify-content:center;padding:0 18px;z-index:30;pointer-events:none}.nav .inner{pointer-events:auto;display:flex;gap:4px;width:100%;max-width:420px;background:var(--surface-2);border:1px solid var(--border);border-radius:16px;padding:4px;box-shadow:0 6px 20px #00000024}.nav button{flex:1;padding:11px 8px;border-radius:12px;color:var(--text-dim);font-size:.9rem;font-weight:500;text-align:center}.nav button.active{background:var(--surface);color:var(--accent);font-weight:600;box-shadow:var(--shadow)}.fab{position:fixed;right:18px;bottom:calc(78px + env(safe-area-inset-bottom));width:56px;height:56px;border-radius:50%;background:var(--accent);color:#fff;font-size:1.8rem;display:grid;place-items:center;box-shadow:0 6px 20px #00000040;z-index:20}.sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:50;display:flex;align-items:flex-end;justify-content:center}.sheet{background:var(--bg);width:100%;max-width:560px;border-radius:22px 22px 0 0;padding:20px 18px calc(24px + env(safe-area-inset-bottom));max-height:92vh;overflow-y:auto;animation:slideUp .22s ease}@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.sheet h2{margin:0 0 16px;font-size:1.2rem}.field{margin-bottom:16px}.field>label{display:block;font-size:.82rem;color:var(--text-dim);margin-bottom:7px}.field input[type=text],.field input[type=time],.field input[type=number],.field input[type=url]{width:100%;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px 14px;outline:none}.field input:focus{border-color:var(--accent)}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{padding:8px 14px;border-radius:999px;background:var(--surface-2);border:1px solid transparent;font-size:.9rem}.chip.sel{background:color-mix(in srgb,var(--accent) 16%,var(--surface-2));border-color:var(--accent);color:var(--accent);font-weight:600}.emoji-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:6px}.emoji-grid button{aspect-ratio:1;font-size:1.3rem;border-radius:10px;background:var(--surface-2)}.emoji-grid button.sel{outline:2px solid var(--accent)}.btn{width:100%;padding:14px;border-radius:14px;background:var(--accent);color:#fff;font-weight:600;text-align:center}.btn.secondary{background:var(--surface-2);color:var(--text)}.btn.danger{background:transparent;color:#e5484d}.btn-row{display:flex;gap:10px;margin-top:8px}.btn-row .btn{flex:1}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:12px;box-shadow:var(--shadow)}.stat-card .top{display:flex;align-items:center;gap:10px;margin-bottom:12px}.stat-card .top .emoji{font-size:1.4rem}.stat-card .top .name{font-weight:600;flex:1}.stat-row{display:flex;gap:18px;margin-bottom:14px}.stat{display:flex;flex-direction:column}.stat .num{font-size:1.5rem;font-weight:700;font-variant-numeric:tabular-nums}.stat .lbl{font-size:.72rem;color:var(--text-dim)}.heatmap{display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,1fr);gap:3px;overflow-x:auto}.heatmap .cell{width:13px;height:13px;border-radius:3px;background:var(--surface-2)}.settings-section{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:4px 16px;margin-bottom:16px;box-shadow:var(--shadow)}.setting{display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--border)}.setting:last-child{border-bottom:none}.setting .info{min-width:0}.setting .info .t{font-weight:500}.setting .info .d{font-size:.78rem;color:var(--text-dim)}.banner{background:color-mix(in srgb,var(--accent) 12%,var(--surface));border:1px solid color-mix(in srgb,var(--accent) 30%,var(--border));border-radius:12px;padding:12px 14px;font-size:.85rem;margin-bottom:14px}.toggle{width:50px;height:30px;border-radius:999px;background:var(--surface-2);position:relative;transition:background .15s ease;flex-shrink:0}.toggle.on{background:var(--good)}.toggle:after{content:"";position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#fff;transition:transform .15s ease}.toggle.on:after{transform:translate(20px)}.seg{display:flex;background:var(--surface-2);border-radius:12px;padding:3px}.seg button{flex:1;padding:8px;border-radius:9px;font-size:.85rem;color:var(--text-dim)}.seg button.sel{background:var(--surface);color:var(--text);font-weight:600;box-shadow:var(--shadow)}
