:root{--bg:#f4f5f8;--card:#fff;--ink:#17181c;--ink-2:#6b7078;--ink-3:#a5aab3;--brand:#5a5fe0;--brand-2:#8b5cf6;--brand-grad:linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);--brand-soft:#eef0ff;--danger:#ef4444;--ok:#10b981;--amber:#f59e0b;--hairline:#17181c0f;--shadow-card:0 1px 2px #1018280a, 0 10px 28px -14px #10182824;--shadow-brand:0 8px 20px -8px #6366f18c;--radius:18px;--nav-h:62px;--sk-a:#f0f1f5;--sk-b:#e8e9ee;--ease-out:cubic-bezier(.22, 1, .36, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--dur-fast:.18s;--dur:.35s;--dur-slow:.6s}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;margin:0;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,HarmonyOS Sans SC,MiSans,Microsoft YaHei,Segoe UI,sans-serif;font-size:15px;line-height:1.55}#root{min-height:100vh}.page{max-width:520px;padding:10px 18px calc(var(--nav-h) + 28px + env(safe-area-inset-bottom));margin:0 auto}.page-center{min-height:100vh;color:var(--ink-3);justify-content:center;align-items:center;padding:24px;display:flex}.muted{color:var(--ink-2)}.center{text-align:center}.sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.page-head{justify-content:space-between;align-items:center;gap:12px;padding:8px 0 14px;animation:.35s both fadeUp;display:flex}.page-head h1{letter-spacing:.5px;margin:0;font-size:24px;font-weight:800}.page-sub{color:var(--ink-3);margin:2px 0 0;font-size:12px}.head-right{align-items:center;gap:8px;display:flex}.topbar{align-items:center;gap:8px;padding:8px 0 12px;animation:.35s both fadeUp;display:flex}.topbar h1{flex:1;margin:0;font-size:18px;font-weight:800}.avatar{color:#fff;-webkit-user-select:none;user-select:none;border-radius:50%;flex:none;justify-content:center;align-items:center;font-weight:700;display:inline-flex}.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-card);margin-bottom:12px;padding:16px;animation:.35s both fadeUp}.section-title{color:var(--ink-3);letter-spacing:1.5px;align-items:center;gap:10px;margin:16px 4px 8px;font-size:12px;font-weight:700;display:flex}.section-count{letter-spacing:0;color:var(--ink-3);background:var(--card);border:1px solid var(--hairline);border-radius:999px;padding:2px 8px;font-size:11px;font-weight:600}.form label{color:var(--ink-2);margin-bottom:12px;font-size:13px;font-weight:600;display:block}.form input,.form textarea{width:100%;color:var(--ink);background:#f2f3f7;border:1.5px solid #0000;border-radius:13px;margin-top:6px;padding:11px 13px;font-family:inherit;font-size:16px;transition:border-color .18s,background .18s,box-shadow .18s;display:block}.form input:focus,.form textarea:focus{border-color:var(--brand);background:#fff;outline:none;box-shadow:0 0 0 4px #6366f124}.form textarea{resize:vertical;min-height:74px}.input-mono{letter-spacing:3px;text-transform:uppercase;font-family:SF Mono,ui-monospace,Menlo,Consolas,monospace}.label-hint{color:var(--ink-3);margin-top:2px;font-size:12px;font-weight:400;display:block}.form-error{color:var(--danger);margin:6px 0 10px;font-size:13px;font-weight:600}.form-hint{color:var(--ink-3);text-align:center;margin:12px 0 0;font-size:13px}.form-hint a{color:var(--brand);font-weight:600;text-decoration:none}.form-title{margin:0 0 14px;font-size:17px;font-weight:700}.role-choice{border:none;margin:0 0 14px;padding:0}.role-choice legend{color:var(--ink-2);margin-bottom:8px;padding:0;font-size:13px;font-weight:600}.role-option{border:1.5px solid var(--hairline);border-radius:13px;align-items:center;gap:10px;margin-bottom:8px;padding:12px 14px;transition:border-color .18s;color:var(--ink)!important;font-size:14px!important;font-weight:500!important;display:flex!important}.role-option:has(input:checked){border-color:var(--brand);background:var(--brand-soft)}.role-option input{width:auto;accent-color:var(--brand);margin:0}.duration-row{color:var(--ink-2);align-items:center;gap:8px;margin-bottom:14px;font-size:13px;font-weight:600;display:flex}.duration-row span{flex:1}.duration-row input{width:74px;margin-top:0;display:inline-block}.timer-box{align-items:center;gap:10px;margin:2px 0 14px;display:flex}.timer-face{font-variant-numeric:tabular-nums;min-width:64px;color:var(--brand);font-size:22px;font-weight:700}.btn{cursor:pointer;border:none;border-radius:14px;justify-content:center;align-items:center;gap:7px;padding:12px 16px;font-family:inherit;font-size:15px;font-weight:700;text-decoration:none;transition:transform .15s,opacity .15s,box-shadow .15s;display:inline-flex}.btn:active:not(:disabled){transform:scale(.97)}.btn:disabled{opacity:.45;cursor:default}.btn-primary{background:var(--brand-grad);color:#fff;width:100%;box-shadow:var(--shadow-brand)}.btn-big{padding:15px;font-size:17px}.btn-slim{width:auto;padding:9px 14px;font-size:13px}.btn-ghost{color:var(--ink);box-shadow:none;background:#eef0f4;padding:8px 12px;font-size:13px}.btn-danger{color:var(--danger)}.btn-check{background:var(--ok);color:#fff;padding:10px 14px;font-size:13px;box-shadow:0 6px 16px -6px #10b98199}.btn-copy{width:100%;color:var(--brand);background:var(--brand-soft)}.icon-btn{width:36px;height:36px;color:var(--ink-2);cursor:pointer;background:#eef0f4;border:none;border-radius:12px;justify-content:center;align-items:center;transition:transform .15s;display:inline-flex}.icon-btn:active{transform:scale(.92)}.icon-btn.accent{background:var(--brand-grad);color:#fff}.icon-btn.danger{color:var(--danger)}.badge{color:var(--ink-2);white-space:nowrap;background:#f0f1f5;border-radius:999px;padding:3px 9px;font-size:11px;font-weight:700}.badge-ok{color:var(--ok);background:#e5f8ef}.badge-new{background:var(--brand-soft);color:var(--brand)}.badge-used{color:var(--ink-3);background:#f0f1f5}.streak-pill{color:var(--ink-2);letter-spacing:0;background:#fff4e0;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:700}.photo-picker{flex-wrap:wrap;gap:9px;margin-top:8px;display:flex}.photo-thumb{cursor:pointer;background:#f0f1f5;border:0;border-radius:12px;width:86px;height:86px;padding:0;position:relative;overflow:hidden}.photo-thumb img{object-fit:cover;border-radius:12px;width:100%;height:100%;display:block}.photo-thumb-ph{width:100%;height:100%;color:var(--ink-3);background:#f0f1f5;border-radius:12px;justify-content:center;align-items:center;font-size:11px;display:flex}.photo-remove{color:#fff;cursor:pointer;background:#17181cb8;border:2px solid #fff;border-radius:50%;width:23px;height:23px;font-size:13px;line-height:1;position:absolute;top:-7px;right:-7px}.photo-add{width:86px;height:86px;color:var(--ink-3);cursor:pointer;background:#fafbfc;border:1.5px dashed #cdd1da;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:2px;margin-top:8px;font-size:11px;font-weight:600;display:flex}.photo-add span{font-size:22px;line-height:1}.photo-add input{display:none}.photo-grid{flex-wrap:wrap;gap:9px;margin:10px 0 2px;display:flex}.photo-grid img{object-fit:cover;background:#f0f1f5;border-radius:12px;width:86px;height:86px;display:block}.checkin-card.unchecked{border-left:3px solid var(--brand)}.checkin-head{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.checkin-author{align-items:center;gap:7px;font-size:13px;display:inline-flex}.checkin-author b{font-weight:700}.checkin-time{color:var(--ink-3);font-variant-numeric:tabular-nums;font-size:12px}.head-actions{gap:4px;margin-left:auto;display:flex}.checkin-note{white-space:pre-wrap;margin:8px 0 4px;font-size:14px}.checkin-field{color:var(--ink-2);white-space:pre-wrap;background:#f7f8fa;border-radius:10px;margin:6px 0 0;padding:7px 10px;font-size:13px}.checkin-field-label{color:var(--brand);background:var(--brand-soft);vertical-align:1px;border-radius:6px;margin-right:6px;padding:1px 6px;font-size:11px;font-weight:700;display:inline-block}.checkin-message{color:var(--ink-2);background:#f7f8fa;border-radius:10px;margin:10px 0 0;padding:8px 11px;font-size:13px}.comment-list{border-top:1px solid var(--hairline);margin-top:12px;padding-top:10px}.comment{margin:5px 0;font-size:14px}.comment b{color:var(--brand);font-weight:700}.checkin-footer{border-top:1px solid var(--hairline);margin-top:12px;padding-top:12px}.comment-input-row{align-items:center;gap:8px;display:flex}.comment-input{flex:1;align-items:center;gap:6px;display:flex}.comment-input input{background:#f2f3f7;border:1.5px solid #0000;border-radius:12px;flex:1;min-width:0;padding:10px 12px;font-family:inherit;font-size:14px;transition:all .18s}.comment-input input:focus{border-color:var(--brand);background:#fff;outline:none}.bottom-nav{width:100%;height:calc(var(--nav-h) + env(safe-area-inset-bottom));padding-bottom:calc(env(safe-area-inset-bottom) + 2px);-webkit-backdrop-filter:blur(18px);border-top:1px solid var(--hairline);z-index:50;background:#fffffff0;display:flex;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -6px 20px -10px #1018281f}.nav-item{color:var(--ink-3);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:3px;font-size:11px;font-weight:600;text-decoration:none;transition:color .18s;display:flex}.nav-item.active{color:var(--brand)}.banner{background:var(--brand-grad);border-radius:var(--radius);color:#fff;box-shadow:var(--shadow-brand);margin-bottom:14px;padding:16px 18px;animation:.35s both fadeUp}.banner-title{margin:0;font-size:16px;font-weight:800}.banner-sub{opacity:.92;margin:3px 0 0;font-size:13px}.banner-soft{background:var(--brand-soft);color:var(--ink-2);box-shadow:none;padding:12px 16px}.banner-soft .banner-sub{opacity:1;margin:0}.hero-card{color:#fff;background:radial-gradient(120px 90px at 88% -10%,#8b5cf68c,#0000 70%),radial-gradient(140px 100px at -8% 110%,#6366f166,#0000 70%),linear-gradient(160deg,#1d2040 0%,#14162b 100%);border-radius:20px;padding:16px 16px 12px;animation:.35s both fadeUp;position:relative;overflow:hidden;box-shadow:0 14px 34px -16px #1d2040b3}.hero-row{align-items:stretch;margin-bottom:12px;display:flex}.hero-stat{flex-direction:column;flex:1;align-items:center;gap:2px;display:flex}.hero-divider{background:#ffffff24;width:1px;margin:4px 0}.hero-num{font-variant-numeric:tabular-nums;letter-spacing:.5px;font-size:24px;font-weight:800}.hero-label{color:#ffffffa6;font-size:11px;font-weight:600}.hero-greet{color:#ffffffd9;margin:0 0 12px;font-size:13px;font-weight:600}.line-chart{width:100%}.line-chart svg{display:block}.line-chart .line-tick{fill:var(--ink-3);font-family:inherit;font-size:9px}.line-chart .line-tip{fill:#fff;font-family:inherit;font-size:10px;font-weight:600}.chart-sub{border-top:1px solid var(--hairline);margin-top:10px;padding-top:10px}.trend-line-card{flex-direction:column;gap:8px;display:flex}.trend-line-head{justify-content:space-between;align-items:center;font-size:13px;display:flex}.range-toggle{background:var(--brand-soft);border-radius:999px;gap:4px;padding:3px;display:flex}.range-toggle button{color:var(--ink-2);cursor:pointer;transition:background var(--dur-fast), color var(--dur-fast);background:0 0;border:none;border-radius:999px;padding:3px 10px;font-family:inherit;font-size:12px}.range-toggle button.on{color:var(--brand);background:#fff;font-weight:600;box-shadow:0 1px 3px #10182814}.trend-line-note{color:var(--ink-2);font-size:12px}.trend-line-note b{color:var(--brand)}.donut-wrap{flex-direction:column;align-items:center;gap:14px;display:flex}.donut-box{position:relative}.donut-wrap svg .donut-num{fill:var(--ink);font-family:inherit;font-size:11px;font-weight:700}.donut-wrap svg .donut-sub{fill:var(--ink-2);font-family:inherit;font-size:8.5px}.donut-legend{flex-direction:column;gap:4px;width:100%;margin:0;padding:0;list-style:none;display:flex}.donut-legend li{cursor:pointer;transition:background var(--dur-fast);border-radius:10px;align-items:center;gap:8px;padding:6px 10px;font-size:13px;display:flex}.donut-legend li.on,.donut-legend li:hover{background:var(--brand-soft)}.donut-legend li i{border-radius:3px;flex-shrink:0;width:10px;height:10px}.donut-legend li .donut-leg-name{color:var(--ink);flex:1;font-weight:500}.donut-legend li b{color:var(--ink);text-align:right;min-width:64px;font-weight:600}.donut-legend li em{color:var(--ink-2);text-align:right;min-width:34px;font-size:12px;font-style:normal}.subject-sub{margin-top:12px}.member-bars{flex-direction:column;gap:10px;display:flex}.member-bar{grid-template-columns:72px 1fr 64px;align-items:center;gap:8px;font-size:13px;display:grid}.member-bar.me{background:var(--brand-soft);border-radius:10px;margin:-6px -8px;padding:6px 8px}.member-bar-name{white-space:nowrap;text-overflow:ellipsis;font-weight:500;overflow:hidden}.member-bar-name em{color:var(--brand);font-size:11px;font-style:normal}.member-bar-track{background:#f0f1f5;border-radius:999px;height:10px;overflow:hidden}.member-bar-fill{background:var(--brand-grad);height:100%;transition:width .5s var(--ease-out);border-radius:999px;min-width:4px}.member-bar.me .member-bar-fill{background:linear-gradient(90deg,#4f46e5,#7c3aed)}.member-bar-val{text-align:right;color:var(--ink-2);font-size:12px}.member-bar.me .member-bar-val{color:var(--brand);font-weight:600}.hour-heat{flex-direction:column;gap:8px;display:flex}.hour-heat-bars{align-items:flex-end;gap:2px;height:64px;padding:4px 0;display:flex}.hour-heat-col{background:#f0f1f5;border-radius:3px;flex:1;align-items:flex-end;height:100%;display:flex;overflow:hidden}.hour-heat-fill{width:100%;transition:height .4s var(--ease-out);background:linear-gradient(#a5b4fc,#c7d2fe);min-height:2px}.hour-heat-fill.peak{background:var(--brand-grad)}.hour-heat-scale{color:var(--ink-3);justify-content:space-between;font-size:10px;display:flex}.hour-heat-note{color:var(--ink-2);font-size:12px}.hour-heat-note b{color:var(--brand);font-weight:600}.milestones{flex-direction:column;gap:12px;display:flex}.milestones-track{justify-content:space-between;align-items:flex-start;padding:0 4px;display:flex;position:relative}.milestones-track:before{content:"";z-index:0;background:#e5e7eb;height:2px;position:absolute;top:13px;left:4px;right:4px}.milestone{z-index:1;flex-direction:column;flex:1;align-items:center;gap:4px;display:flex;position:relative}.milestone-dot{color:#fff;background:#fff;border:2px solid #e5e7eb;border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-size:13px;font-weight:700;transition:all .3s;display:flex}.milestone-dot.on{background:var(--brand-grad);box-shadow:var(--shadow-brand);border-color:#0000}.milestone-num{color:var(--ink-3);font-size:11px;font-weight:600}.milestone-unit{color:var(--ink-3);font-size:10px}.milestones-sub{color:var(--ink-2);text-align:center;font-size:12px}.badge-backfill{color:#92400e;background:#fef3c7}.lightbox{z-index:9999;animation:lb-in var(--dur-fast) var(--ease-out);background:#0a0c14eb;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.lightbox.closing{animation:lb-out var(--dur-fast) var(--ease-out) forwards}@keyframes lb-in{0%{opacity:0}to{opacity:1}}@keyframes lb-out{0%{opacity:1}to{opacity:0}}.lightbox img{max-width:92vw;max-height:78vh;animation:lb-zoom var(--dur-fast) var(--ease-out);border-radius:14px;box-shadow:0 24px 80px #00000080}@keyframes lb-zoom{0%{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}.lightbox-nav{color:#fff;cursor:pointer;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#ffffff1f;border:none;border-radius:50%;justify-content:center;align-items:center;width:44px;height:44px;font-size:22px;transition:background .15s;display:flex;position:absolute;top:50%;transform:translateY(-50%)}.lightbox-nav:hover{background:#ffffff40}.lightbox-nav.prev{left:14px}.lightbox-nav.next{right:14px}.lightbox-close{color:#fff;cursor:pointer;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#ffffff1f;border:none;border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;font-size:18px;display:flex;position:absolute;top:16px;right:16px}.lightbox-count{color:#ffffffa6;letter-spacing:.5px;font-size:13px;font-weight:500;position:absolute;bottom:18px;left:50%;transform:translate(-50%)}.skeleton{flex-direction:column;gap:14px;padding:8px 0;display:flex}.sk-card{border-radius:var(--radius);box-shadow:var(--shadow-card);background:#fff;flex-direction:column;gap:12px;padding:16px;display:flex}.sk-line{background:linear-gradient(90deg, var(--sk-a) 25%, var(--sk-b) 50%, var(--sk-a) 75%);background-size:200% 100%;border-radius:6px;height:12px;animation:1.2s infinite sk-shimmer}.sk-line.short{width:60%}.sk-line.long{width:90%}.sk-line.w-40{width:40%}.sk-line.w-60{width:60%}.sk-line.w-90{width:90%}.sk-line.w-full{width:100%}.sk-square{background:linear-gradient(90deg, var(--sk-a) 25%, var(--sk-b) 50%, var(--sk-a) 75%);background-size:200% 100%;border-radius:12px;width:88px;height:88px;animation:1.2s infinite sk-shimmer}.sk-head{align-items:center;gap:12px;display:flex}@keyframes sk-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.avatar-pick-card{flex-direction:column;gap:14px;display:flex}.avatar-pick-sub{color:var(--ink-2);margin:0;font-size:12px}.preset-grid{grid-template-columns:repeat(6,1fr);gap:8px;display:grid}.preset-cell{aspect-ratio:1;cursor:pointer;transition:all .15s var(--ease-out);border:2px solid #0000;border-radius:12px;justify-content:center;align-items:center;font-size:22px;display:flex;position:relative;overflow:hidden}.preset-cell:hover{transform:translateY(-2px);box-shadow:0 4px 12px #6366f140}.preset-cell.on{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.preset-cell.on:after{content:"✓";color:#fff;font-size:11px;font-weight:700;position:absolute;bottom:2px;right:4px}.preset-cell .preset-glyph{filter:drop-shadow(0 1px 2px #00000026);font-size:24px}.emoji-cell{aspect-ratio:1;background:var(--bg);cursor:pointer;border:2px solid #0000;border-radius:10px;justify-content:center;align-items:center;font-size:20px;transition:all .15s;display:flex}.emoji-cell:hover{background:var(--brand-soft);transform:scale(1.08)}.emoji-cell.on{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft);background:#fff}.avatar-upload-row{align-items:center;gap:10px;display:flex}.avatar-upload-btn{border:1px solid var(--hairline);cursor:pointer;color:var(--ink);background:#fff;border-radius:10px;align-items:center;gap:6px;padding:8px 14px;font-family:inherit;font-size:13px;transition:all .15s;display:flex}.avatar-upload-btn:hover{border-color:var(--brand);color:var(--brand)}.avatar-upload-hint{color:var(--ink-3);font-size:11px}.avatar-upload-overlay{color:#fff;opacity:0;pointer-events:none;background:linear-gradient(#0000,#0000008c);border-radius:0 0 14px 14px;justify-content:center;align-items:center;padding:4px 0 6px;font-size:11px;transition:opacity .15s;display:flex;position:absolute;bottom:0;left:0;right:0}.avatar-hero:hover .avatar-upload-overlay,.avatar-hero:focus-within .avatar-upload-overlay{opacity:1;pointer-events:auto}.avatar-upload-overlay .overlay-btn{color:#fff;cursor:pointer;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#fff3;border:none;border-radius:999px;padding:3px 10px;font-family:inherit;font-size:11px}.confirm-backdrop{z-index:9000;background:#0a0c148c;justify-content:center;align-items:center;padding:24px;animation:.15s lb-in;display:flex;position:fixed;inset:0}.confirm-card{width:100%;max-width:320px;animation:confirm-in .22s var(--ease-spring);background:#fff;border-radius:20px;flex-direction:column;gap:12px;padding:24px;display:flex;box-shadow:0 24px 80px #0000002e}@keyframes confirm-in{0%{opacity:0;transform:scale(.9)translateY(8px)}to{opacity:1;transform:scale(1)translateY(0)}}.confirm-title{color:var(--ink);margin:0;font-size:16px;font-weight:700}.confirm-body{color:var(--ink-2);margin:0;font-size:14px;line-height:1.6}.confirm-actions{gap:10px;margin-top:4px;display:flex}.confirm-actions button{cursor:pointer;border:none;border-radius:12px;flex:1;padding:10px;font-family:inherit;font-size:14px;font-weight:600;transition:all .15s}.confirm-cancel{background:var(--bg);color:var(--ink)}.confirm-cancel:hover{background:#e8e9ee}.confirm-danger{background:var(--danger);color:#fff}.confirm-danger:hover{background:#dc2626}.confirm-ok{background:var(--brand-grad);color:#fff}.record-filters{flex-direction:column;gap:10px;margin-bottom:14px;display:flex}.range-chips{flex-wrap:wrap;gap:6px;display:flex}.date-range-row{color:var(--ink-2);align-items:center;gap:8px;font-size:13px;display:flex}.date-range-row input{border:1px solid var(--hairline);color:var(--ink);background:#fff;border-radius:10px;padding:6px 10px;font-family:inherit;font-size:13px}.record-search{border:1px solid var(--hairline);color:var(--ink);background:#fff;border-radius:10px;padding:9px 12px;font-family:inherit;font-size:13px}.record-search::placeholder{color:var(--ink-3)}.subject-chips{flex-wrap:wrap;gap:6px;display:flex}body[data-theme=brutal] .record-search{border:2px solid var(--b-ink);background:var(--b-white);box-shadow:var(--b-shadow-sm);border-radius:0}.timer-hint{color:var(--amber);font-size:11px}.timer-box{align-items:center;gap:10px;display:flex}body.booting .page>*{animation:fade-up .3s var(--ease-out) both}body.booting .page>:nth-child(2){animation-delay:40ms}body.booting .page>:nth-child(3){animation-delay:80ms}body.booting .page>:nth-child(4){animation-delay:.12s}body.booting .page>:nth-child(5){animation-delay:.16s}body.booting .page>:nth-child(6){animation-delay:.2s}body.booting .page>:nth-child(7){animation-delay:.24s}body.booting .page>:nth-child(8){animation-delay:.28s}body.booting .page>:nth-child(9){animation-delay:.32s}body.booting .page>:nth-child(n+10){animation-delay:.36s}@keyframes fade-up{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.page>*,.sk-line,.sk-square,.lightbox img,.confirm-card{animation:none!important}}.avatar-link{cursor:pointer;background:0 0;border:none;padding:2px;display:inline-flex}body[data-theme=brutal] .avatar-link .avatar{box-shadow:var(--b-shadow-sm)}.toast{left:50%;bottom:calc(var(--nav-h) + 22px + env(safe-area-inset-bottom));color:#fff;z-index:60;white-space:nowrap;animation:toastIn .32s var(--ease-spring) both;background:#17181c;border-radius:999px;padding:11px 20px;font-size:14px;font-weight:600;position:fixed;transform:translate(-50%);box-shadow:0 10px 30px -10px #10182880}.toast-success{background:linear-gradient(135deg,#1d2040,#14162b);flex-direction:column;align-items:center;gap:3px;padding:13px 26px;display:flex;box-shadow:0 16px 40px -14px #1d204099}.toast-title{font-size:15px;font-weight:700}.toast-sub{color:#ffffffb8;font-size:12px;font-weight:500}.confetti{pointer-events:none;z-index:55;position:fixed;inset:0;overflow:hidden}.confetti i{animation-name:confettiFall;animation-timing-function:var(--ease-out);will-change:transform, opacity;animation-fill-mode:forwards;display:block;position:absolute}@keyframes toastIn{0%{opacity:0;transform:translate(-50%,10px)scale(.94)}to{opacity:1;transform:translate(-50%)scale(1)}}@keyframes confettiFall{0%{opacity:1;transform:translate(0)rotate(0)}to{transform:translate(var(--dx), var(--dy)) rotate(var(--rot));opacity:0}}.chart{align-items:flex-end;gap:8px;height:108px;display:flex}.chart-col{flex-direction:column;flex:1;align-items:center;height:100%;display:flex}.chart-val{color:#ffffffbf;font-variant-numeric:tabular-nums;height:14px;font-size:10px;font-weight:700}.chart-track{flex:1;align-items:flex-end;width:100%;display:flex}.chart-bar{background:#ffffff38;border-radius:7px 7px 3px 3px;width:100%;min-height:3px;transition:height .4s}.chart-bar.today{background:linear-gradient(#a5b4fc,#8b5cf6);box-shadow:0 0 14px #8b5cf68c}.chart-label{color:#ffffff8c;margin-top:6px;font-size:11px;font-weight:600}.chart-label.today{color:#fff}.rank-card{padding:8px 14px}.rank-row{border-bottom:1px solid var(--hairline);align-items:center;gap:11px;padding:11px 2px;display:flex}.rank-row:last-child{border-bottom:none}.rank-row.me{background:linear-gradient(90deg, var(--brand-soft), transparent);border-radius:12px;margin:0 -6px;padding-left:8px;padding-right:8px}.rank-no{width:26px;height:26px;color:var(--ink-2);font-variant-numeric:tabular-nums;background:#f0f1f5;border-radius:9px;flex:none;justify-content:center;align-items:center;font-size:12px;font-weight:800;display:inline-flex}.rank-no.no-1{color:#fff;background:linear-gradient(135deg,#ffd666,#f5a623)}.rank-no.no-2{color:#fff;background:linear-gradient(135deg,#dfe3ea,#b9bfcc)}.rank-no.no-3{color:#fff;background:linear-gradient(135deg,#edc3a0,#d99058)}.rank-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:14.5px;font-weight:700;overflow:hidden}.rank-name em{color:var(--brand);margin-left:3px;font-size:12px;font-style:normal}.rank-sub{color:var(--ink-3);font-size:11.5px;font-style:normal;font-weight:500;display:block}.rank-nums{text-align:right;flex-direction:column;gap:1px;display:flex}.rank-nums b{font-variant-numeric:tabular-nums;font-size:14px}.rank-nums i{color:var(--ink-3);font-size:11.5px;font-style:normal}.invite-code{letter-spacing:4px;color:var(--ink);font-family:SF Mono,ui-monospace,Menlo,Consolas,monospace;font-size:19px;font-weight:700}.invite-top{justify-content:space-between;align-items:center;gap:10px;display:flex}.btn-copy{margin-top:12px}.empty{text-align:center;padding:42px 20px;animation:.35s both fadeUp}.empty-emoji{width:68px;height:68px;box-shadow:var(--shadow-card);background:#fff;border-radius:50%;justify-content:center;align-items:center;margin-bottom:14px;font-size:30px;display:inline-flex}.empty-title{margin:0;font-size:15px;font-weight:700}.empty-hint{color:var(--ink-3);margin:4px 0 0;font-size:13px}.auth-page{max-width:520px;margin:0 auto;padding:7vh 20px 40px;animation:.4s both fadeUp}.brand-mark{background:var(--brand-grad);color:#fff;width:68px;height:68px;box-shadow:var(--shadow-brand);border-radius:22px;justify-content:center;align-items:center;margin:0 auto 14px;font-size:32px;font-weight:800;display:flex}.app-title{text-align:center;letter-spacing:1px;margin:0 0 4px;font-size:24px;font-weight:800}.app-subtitle{color:var(--ink-3);text-align:center;margin:0 0 22px;font-size:13px}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.form-field{margin-bottom:14px}.field-label{color:var(--ink-2);margin-bottom:8px;font-size:13px;font-weight:600;display:block}.chip-row{flex-wrap:wrap;gap:8px;display:flex}.chip{color:var(--ink-2);cursor:pointer;touch-action:manipulation;background:#fafbfd;border:1.5px solid #e3e5ec;border-radius:999px;padding:8px 14px;font-size:13px;font-weight:600;transition:background .15s,border-color .15s,color .15s}.chip-emoji{padding:6px 12px;font-size:18px}.chip:active{transform:scale(.96)}.chip-on{background:var(--brand-soft);border-color:var(--brand);color:var(--brand)}.checkin-meta{flex-wrap:wrap;gap:6px;margin:2px 0 8px;display:flex}.badge-subject{background:var(--brand-soft);color:var(--brand)}.achieve-grid{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.achieve{color:var(--ink-3);text-align:center;transition:transform .18s var(--ease-out), background .18s var(--ease-out);background:#f2f3f7;border-radius:14px;flex-direction:column;align-items:center;gap:5px;padding:14px 8px;display:flex}.achieve.on{color:var(--ink);background:linear-gradient(135deg,#eef0ff,#f6f0ff);box-shadow:inset 0 0 0 1px #6366f124}.achieve.on:active{transform:scale(.97)}.achieve-icon{filter:grayscale();opacity:.4;font-size:24px;line-height:1;transition:filter .2s,opacity .2s}.achieve.on .achieve-icon{filter:none;opacity:1}.achieve-title{font-size:11.5px;font-weight:600}.achieve-bar{background:#eef0f4;border-radius:999px;height:6px;margin:14px 0 8px;overflow:hidden}.achieve-bar i{background:var(--brand-grad);height:100%;transition:width .6s var(--ease-out);border-radius:999px;display:block}.achieve-progress{color:var(--ink-3);text-align:center;margin:0;font-size:12px}.overview-card{background:var(--brand-grad);border-radius:var(--radius);color:#fff;box-shadow:var(--shadow-brand);margin-bottom:14px;padding:16px 18px;animation:.35s both fadeUp}.overview-main{align-items:baseline;gap:8px;display:flex}.overview-num{font-variant-numeric:tabular-nums;font-size:30px;font-weight:800;line-height:1}.overview-total{opacity:.9;font-size:14px;font-weight:600}.overview-sub{opacity:.92;margin:8px 0 0;font-size:13px}.rank-name-line{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.badge-todo{color:#e5484d;background:#fff0f0}.quick-replies{flex-wrap:wrap;gap:6px;margin-bottom:9px;display:flex}.chip-quick{border-radius:999px;padding:5px 11px;font-size:12px}.heatmap{gap:4px;display:flex;overflow-x:auto}.heat-col{flex-direction:column;gap:4px;display:flex}.heat-cell{background:#edf0f4;border-radius:3.5px;flex:none;width:13px;height:13px}.heat-cell.lv-1{background:#dbe3ff}.heat-cell.lv-2{background:#a5b4fc}.heat-cell.lv-3{background:#7c8bf5}.heat-cell.lv-4{background:#5a5fe0}.heat-legend{color:var(--ink-3);margin:12px 0 0;font-size:12px}.trend-row{border-bottom:1px solid var(--hairline);justify-content:space-between;align-items:center;gap:10px;padding:12px 2px;display:flex}.trend-row:last-child{border-bottom:none}.trend-head{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.trend-label{font-size:14px;font-weight:700}.trend-delta{border-radius:999px;padding:2px 8px;font-size:12px;font-weight:700}.trend-delta.up{color:var(--ok);background:#e5f8ef}.trend-delta.down{color:#e5484d;background:#fff0f0}.trend-delta:not(.up):not(.down){color:var(--ink-3);background:#f0f1f5}.trend-nums{flex-direction:column;align-items:flex-end;gap:1px;display:flex}.trend-nums b{font-variant-numeric:tabular-nums;font-size:15px}.trend-nums i{color:var(--ink-3);font-size:11.5px;font-style:normal}.rank-row-link{cursor:pointer;transition:background .15s var(--ease-out)}.rank-row-link:active{background:#f5f6f9}.btn-white{color:var(--brand);background:#fffffff2;margin-top:10px}.fab{bottom:calc(var(--nav-h) + 22px + env(safe-area-inset-bottom));z-index:45;background:var(--brand-grad);color:#fff;cursor:pointer;transition:transform .18s var(--ease-out), box-shadow .18s var(--ease-out);border:none;border-radius:999px;align-items:center;gap:8px;padding:15px 22px;font-family:inherit;font-size:16px;font-weight:800;display:inline-flex;position:fixed;right:max(20px,50vw - 240px);box-shadow:0 12px 28px -8px #6366f1a6}.fab:active{transform:scale(.95)}.sheet-backdrop{-webkit-backdrop-filter:blur(2px);z-index:100;background:#10121c73;animation:.22s both fadeIn;position:fixed;inset:0}.sheet-wrap{z-index:101;pointer-events:none;justify-content:center;display:flex;position:fixed;bottom:0;left:0;right:0}.sheet{pointer-events:auto;background:var(--card);width:100%;max-width:520px;max-height:90vh;animation:sheetUp .34s var(--ease-out) both;border-radius:22px 22px 0 0;flex-direction:column;display:flex;box-shadow:0 -18px 50px -18px #10182866}.sheet-handle{background:#d8dbe2;border-radius:999px;flex:none;width:40px;height:4px;margin:10px auto 0}.sheet-head{flex:none;justify-content:space-between;align-items:center;gap:10px;padding:10px 18px 6px;display:flex}.sheet-head h2{margin:0;font-size:17px;font-weight:800}.sheet-body{-webkit-overflow-scrolling:touch;flex:1;padding:10px 18px 4px;overflow-y:auto}.sheet-footer{padding:10px 18px calc(18px + env(safe-area-inset-bottom));background:var(--card);border-top:1px solid var(--hairline);flex:none}@keyframes sheetUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.banner-tap{text-align:left;cursor:pointer;border:none;flex-direction:column;align-items:flex-start;width:100%;font-family:inherit;display:flex}.banner-tap .banner-title{display:block}.timer-card{flex-direction:column;padding:14px 18px;display:flex}.timer-card-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.timer-card-title{font-size:15px;font-weight:800}.timer-card-hint{color:var(--ink-3);font-size:12px}.timer-card .timer-box{margin:6px 0 0}.timer-filled-hint{background:var(--brand-soft);color:var(--brand);border:1px solid color-mix(in srgb, var(--brand) 22%, transparent);border-radius:12px;align-items:center;gap:8px;margin-bottom:12px;padding:10px 12px;font-size:13px;font-weight:600;line-height:1.4;display:flex}.timer-filled-hint svg{flex-shrink:0}.timer-filled-hint span{flex:1}.timer-filled-hint button{color:var(--brand);cursor:pointer;background:0 0;border:0;flex-shrink:0;padding:2px;font-size:13px;line-height:1}body[data-theme=brutal] .timer-filled-hint{border:2px solid var(--b-ink);box-shadow:var(--b-shadow-sm);background:var(--b-yellow);color:var(--b-ink);border-radius:0}.sheet-more{width:100%;color:var(--brand);cursor:pointer;background:#fafbfd;border:1.5px dashed #d6d9e2;border-radius:13px;justify-content:center;align-items:center;gap:6px;margin:2px 0 14px;padding:11px;font-family:inherit;font-size:14px;font-weight:700;display:flex}.sheet-more:active{transform:scale(.99)}.sheet-extra{animation:.3s both fadeUp}.mcal-head{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.mcal-nav{width:30px;height:30px;color:var(--ink-2);cursor:pointer;background:#eef0f4;border:none;border-radius:9px;justify-content:center;align-items:center;font-size:20px;line-height:1;display:inline-flex}.mcal-nav:disabled{opacity:.3;cursor:default}.mcal-title{font-size:14px;font-weight:700}.mcal-weekdays,.mcal-grid{text-align:center;grid-template-columns:repeat(7,1fr);gap:6px;display:grid}.mcal-weekdays span{color:var(--ink-3);padding:2px 0;font-size:11px;font-weight:600}.mcal-cell{aspect-ratio:1;color:var(--ink-2);font-variant-numeric:tabular-nums;background:#eef1f6;border-radius:9px;justify-content:center;align-items:center;font-size:13px;display:flex}.mcal-cell.mcal-empty{background:0 0}.mcal-cell.lv-1{color:var(--ink);background:#dbe3ff}.mcal-cell.lv-2{color:var(--ink);background:#a5b4fc}.mcal-cell.lv-3{color:#fff;background:#7c8bf5}.mcal-cell.lv-4{color:#fff;background:#5a5fe0;box-shadow:0 0 10px #5a5fe066}.mcal-cell.today{outline:1.5px solid var(--brand)}.mcal-hint{color:var(--ink-3);text-align:center;margin:10px 0 0;font-size:12px}.report-line{color:var(--ink-2);margin:0;font-size:14px;line-height:1.7}.report-line b{color:var(--ink)}.report-tags{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.report-tag{background:var(--brand-soft);color:var(--brand-2);border-radius:999px;padding:7px 12px;font-size:13px;font-weight:700}img.avatar{object-fit:cover;border-radius:50%;flex:none}.avatar-emoji{background:linear-gradient(135deg,#eef0ff,#f6f0ff);font-weight:400;line-height:1}.like-btn{border:1px solid var(--hairline);color:var(--ink-2);cursor:pointer;background:#f6f7f9;border-radius:999px;align-items:center;gap:4px;padding:5px 11px;font-family:inherit;font-size:12px;font-weight:700;line-height:1;transition:transform .15s,background .15s,color .15s,border-color .15s;display:inline-flex}.like-btn.liked{color:#e0486b;background:#fdeef1;border-color:#f7cdd6}.like-btn:active{transform:scale(.94)}.like-heart{font-size:13px}.comment-thread{margin:8px 0}.comment-reply{color:var(--brand);cursor:pointer;background:0 0;border:none;padding:0 0 0 8px;font-family:inherit;font-size:12px;font-weight:700}.comment-child{border-left:2px solid var(--hairline);color:var(--ink-2);margin-left:14px;padding-left:10px}.comment-thread .comment-input{margin:8px 0 2px}.goal-card{align-items:center;gap:16px;display:flex}.goal-ring{flex:none;width:76px;height:76px;position:relative}.goal-ring svg{display:block}.goal-ring-center{flex-direction:column;justify-content:center;align-items:center;line-height:1.15;display:flex;position:absolute;inset:0}.goal-ring-center b{font-variant-numeric:tabular-nums;font-size:17px;font-weight:800}.goal-ring-center span{color:var(--ink-3);font-size:11px}.goal-info{flex:1;min-width:0}.goal-title{font-size:15px;font-weight:800}.goal-sub{color:var(--ink-2);margin:2px 0 10px;font-size:13px}.goal-presets{flex-wrap:wrap;gap:6px;display:flex}.goal-presets .chip{padding:5px 11px;font-size:12px}.toast-milestone{bottom:calc(var(--nav-h) + 96px + env(safe-area-inset-bottom));white-space:normal;background:linear-gradient(135deg,#1d2040,#14162b);flex-direction:column;align-items:center;gap:6px;padding:14px 24px;display:flex;box-shadow:0 16px 40px -14px #1d204099}.milestone-list{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.milestone-item{color:#fff;background:#ffffff1f;border-radius:999px;padding:4px 10px;font-size:13px;font-weight:700}.profile-hero{color:#fff;background:linear-gradient(160deg,#1d2040 0%,#14162b 100%);border-radius:20px;flex-direction:column;align-items:center;gap:10px;margin-bottom:14px;padding:22px 18px 18px;animation:.35s both fadeUp;display:flex;box-shadow:0 14px 34px -16px #1d2040b3}.profile-hero-info{align-items:center;gap:8px;display:flex}.profile-hero-name{font-size:20px;font-weight:800}.profile-hero-user{color:#fff9;margin:0;font-size:12px}.emoji-grid{grid-template-columns:repeat(auto-fill,minmax(42px,1fr));gap:8px;display:grid}.emoji-cell{cursor:pointer;background:#f2f3f7;border:1.5px solid #0000;border-radius:12px;justify-content:center;align-items:center;height:40px;font-size:22px;transition:border-color .15s,background .15s;display:flex}.emoji-cell.on{border-color:var(--brand);background:var(--brand-soft)}.btn-logout{width:100%;margin-top:8px}.ok-text{color:var(--ok)}.badge-attention{color:var(--amber);background:#fff4e0;font-weight:700}.check-line{color:var(--ink-2);align-items:center;gap:9px;margin-top:4px;font-size:13px!important;font-weight:500!important;display:flex!important}.check-line input{width:17px;height:17px;accent-color:var(--brand);flex:none;margin:0!important}.report-hero{flex-direction:column;gap:10px;padding:18px;display:flex}.report-line1{color:#ffffffa6;justify-content:space-between;align-items:baseline;font-size:13px;display:flex}.report-line1 b{color:#fff;font-variant-numeric:tabular-nums;font-size:19px;font-weight:800}.report-star{margin-bottom:16px}.report-member{border-bottom:1px solid var(--hairline);padding:12px 0}.report-member:last-child{border-bottom:none}.report-praise{color:var(--ink-2);margin:8px 0 0 56px;font-size:13px}.report-note{margin:4px 0 0 56px;font-size:12px;font-weight:600}.report-note.warn{color:var(--amber)}.report-note.ok,.report-line1 .delta-up,.report-wow .delta-up{color:var(--ok)}.report-line1 .delta-down,.report-wow .delta-down{color:var(--danger)}.report-line1 .delta-flat,.report-wow .delta-flat{color:var(--ink-3)}.report-wow{color:var(--ink-3);margin:2px 0 0 56px;font-size:12px}.mini-bars{align-items:flex-end;gap:5px;height:44px;margin:10px 0 0 56px;display:flex}.mini-col{flex:1;align-items:flex-end;height:100%;display:flex}.mini-bar{background:#e3e5ea;border-radius:4px 4px 2px 2px;width:100%}.mini-bar.today{background:var(--brand-grad)}.push-card .switch-row{justify-content:space-between;align-items:center;padding:10px 0;display:flex}.switch-row .field-label{color:var(--ink);font-size:14px;font-weight:600}.switch-row .field-sub{color:var(--ink-3);margin-top:2px;font-size:12px;font-weight:400;display:block}.switch{cursor:pointer;background:#d8dae0;border:none;border-radius:999px;flex:none;width:46px;height:27px;transition:background .2s;position:relative}.switch:after{content:"";background:#fff;border-radius:50%;width:21px;height:21px;transition:transform .2s;position:absolute;top:3px;left:3px;box-shadow:0 1px 3px #00000040}.switch.on{background:var(--brand-grad)}.switch.on:after{transform:translate(19px)}.push-times{flex-wrap:wrap;gap:8px;padding:4px 0 10px;display:flex}.push-time-note{color:var(--ink-3);margin:8px 0 0;font-size:11.5px;line-height:1.5}.week-goal-card{flex-direction:column;gap:12px;display:flex}.week-goal-head{justify-content:space-between;align-items:center;display:flex}.week-goal-title{color:var(--ink-2);letter-spacing:.5px;font-size:13px;font-weight:700}.week-goal-body{align-items:center;gap:12px;display:flex}.week-goal-ring{background:#f0f1f5;border-radius:999px;flex:1;height:10px;overflow:hidden}.week-goal-ring-fill{background:var(--brand-grad);height:100%;transition:width .5s var(--ease-out);border-radius:999px}.week-goal-sub{color:var(--ink-2);white-space:nowrap;flex:none;margin:0;font-size:12px}.banner-note{background:var(--brand-soft);border-left:3px solid var(--brand);color:var(--ink);padding:12px 16px}.banner-note .banner-title{color:var(--brand);font-size:14px}.banner-note .banner-sub{color:var(--ink-2);opacity:1;margin-top:4px;font-size:13px}.note-card{padding:14px 16px}.note-card-head{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.note-card-label{color:var(--ink-2);font-size:12px;font-weight:600}.note-input{border:1.5px solid var(--hairline);resize:vertical;background:#f7f8fa;border-radius:10px;width:100%;padding:10px 12px;font-family:inherit;font-size:14px;transition:all .18s}.note-input:focus{border-color:var(--brand);background:#fff;outline:none;box-shadow:0 0 0 3px #6366f11f}.today-overview{padding:14px 16px}.today-overview-head{justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:10px;display:flex}.today-overview-label{color:var(--ink-2);font-size:12px;font-weight:700}.today-overview-head b{font-size:15px}.today-overview-list{flex-direction:column;gap:8px;display:flex}.today-overview-row{background:#fafbfc;border-radius:12px;align-items:center;gap:10px;padding:8px 10px;display:flex}.today-overview-row.ok{background:var(--brand-soft)}.today-overview-name{flex:1;font-size:14px;font-weight:600}.today-overview-state{color:var(--ok);font-size:12px;font-weight:600}.today-nudge{color:var(--brand)}body[data-theme=brutal] .today-overview-row{border:2px solid var(--b-ink);border-radius:0}body[data-theme=brutal] .today-overview-row.ok{background:var(--b-yellow)}@media (hover:hover){.card{transition:transform .2s var(--ease-out), box-shadow .2s var(--ease-out)}.card:hover{transform:translateY(-2px);box-shadow:0 1px 2px #1018280d,0 16px 36px -14px #1018282e}}.badge-attention{animation:pulse-attention 2s var(--ease-out) infinite}@keyframes pulse-attention{0%,to{box-shadow:0 0 #f59e0b66}50%{box-shadow:0 0 0 6px #f59e0b00}}.empty-emoji{position:relative}.empty-emoji:before{content:"";z-index:-1;animation:glow-breathe 2.6s var(--ease-out) infinite alternate;background:radial-gradient(circle,#6366f12e 0%,#0000 70%);border-radius:50%;position:absolute;inset:-10px}@keyframes glow-breathe{0%{opacity:.5;transform:scale(.94)}to{opacity:1;transform:scale(1.06)}}.hero-card .hero-row{gap:4px}.hero-card .hero-num{font-size:22px}@media (width>=600px){.page{max-width:880px;padding-left:24px;padding-right:24px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}.grid-2 .card{margin-bottom:0}.checkin-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}.checkin-grid .checkin-card{margin-bottom:0}.hero-card .hero-num{font-size:28px}.bottom-nav{height:calc(var(--nav-h) + 8px + env(safe-area-inset-bottom))}.form .row-2{grid-template-columns:1fr 1fr;gap:14px;display:grid}.rank-card{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.rank-card .rank-row{background:#fafbfc;border-bottom:none;border-radius:12px;padding:10px 8px}.chart{height:128px}}@media (width>=900px){.page{max-width:1080px}.checkin-grid,.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.today-top{grid-template-columns:1fr 1fr;align-items:stretch;gap:14px;display:grid}.today-top>*{margin-bottom:0}.today-top .hero-card,.today-top .banner{grid-column:1/-1}}@media (width>=1280px){.page{max-width:1240px}.today-top{grid-template-columns:1.15fr 1fr}}@media (orientation:landscape) and (width<=820px){.bottom-nav{display:none}.page{padding-bottom:24px}.top-nav-landscape{-webkit-backdrop-filter:blur(12px);z-index:40;border-bottom:1px solid var(--hairline);background:#ffffffeb;justify-content:center;gap:6px;padding:8px 14px;position:sticky;top:0;display:flex!important}}.top-nav-landscape{display:none}.lnav-item{color:var(--ink-2);transition:all .15s var(--ease-out);border-radius:999px;align-items:center;gap:5px;padding:6px 12px;font-size:12px;font-weight:600;text-decoration:none;display:flex}.lnav-item.active{background:var(--brand-soft);color:var(--brand)}.insight-card{background:linear-gradient(135deg,#eef0ff 0%,#f5f3ff 100%);border-radius:14px;flex-direction:column;gap:12px;padding:14px;display:flex}.insight-head{align-items:center;gap:10px;display:flex}.insight-icon{background:#fff;border-radius:10px;justify-content:center;align-items:center;width:38px;height:38px;font-size:18px;display:flex;box-shadow:0 2px 8px #6366f12e}.insight-title{color:var(--ink);margin:0;font-size:14px;font-weight:700}.insight-sub{color:var(--ink-2);margin:2px 0 0;font-size:12px}.insight-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.insight-list li{color:var(--ink);padding-left:16px;font-size:13px;position:relative}.insight-list li:before{content:"·";color:var(--brand);font-weight:700;position:absolute;left:4px}.insight-tip{color:var(--ink-2);border-left:3px solid var(--brand);background:#fff;border-radius:10px;padding:10px 12px;font-size:12px;line-height:1.6}.insight-empty{color:var(--ink-2);margin:0;font-size:13px}.insight-divider{background:var(--hairline);height:1px;margin:4px 0}.weekday-bars{flex-direction:column;gap:10px;display:flex}.weekday-bars-row{align-items:flex-end;gap:8px;height:72px;display:flex}.weekday-col{flex-direction:column;flex:1;align-items:center;gap:4px;display:flex}.weekday-col-fill-wrap{background:#f0f1f5;border-radius:6px;align-items:flex-end;width:100%;height:56px;display:flex;overflow:hidden}.weekday-fill{width:100%;transition:height .4s var(--ease-out);background:linear-gradient(#a5b4fc,#c7d2fe)}.weekday-fill.best{background:var(--brand-grad)}.weekday-label{color:var(--ink-2);font-size:11px;font-weight:500}.weekday-note{color:var(--ink-2);font-size:12px;line-height:1.6}.weekday-note b{color:var(--brand)}.record-toolbar{justify-content:flex-end;margin-bottom:12px;display:flex}.export-btn{border:1px solid var(--hairline);color:var(--ink-2);cursor:pointer;background:#fff;border-radius:10px;align-items:center;gap:6px;padding:8px 14px;font-family:inherit;font-size:13px;transition:all .15s;display:inline-flex}.export-btn:hover{color:var(--brand);border-color:var(--brand);background:var(--brand-soft)}.template-row{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.template-chip{border:1px solid var(--hairline);background:var(--bg);color:var(--ink-2);cursor:pointer;border-radius:999px;padding:5px 10px;font-family:inherit;font-size:12px;line-height:1.4;transition:all .15s}.template-chip:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}.photo-thumb.err{color:var(--ink-3);background:#f0f1f5;justify-content:center;align-items:center;font-size:11px;display:flex}.photo-thumb.err img{display:none}.error-boundary{text-align:center;min-height:60vh;color:var(--ink-2);justify-content:center;align-items:center;padding:24px;display:flex}.error-boundary .eb-card{border-radius:var(--radius);box-shadow:var(--shadow-card);background:#fff;max-width:320px;padding:28px 24px}.error-boundary h3{color:var(--ink);margin:0 0 8px;font-size:17px}.error-boundary p{margin:0 0 16px;font-size:14px}.photo-thumb .err-text{color:var(--ink-3);white-space:nowrap;font-size:11px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.chip.chip-dup{border-color:var(--amber);color:#92400e;background:#fef3c7;position:relative}.chip-dup .dup-badge{background:var(--amber);color:#fff;border-radius:999px;margin-left:4px;padding:0 5px;font-size:10px;font-style:normal;font-weight:700}.dup-hint{color:#92400e;background:#fef3c7;border-radius:8px;margin:8px 0 0;padding:8px 10px;font-size:12px;line-height:1.5}.theme-grid{grid-template-columns:repeat(2,1fr);gap:10px;display:grid}.theme-cell{border:2px solid var(--hairline);background:var(--card);cursor:pointer;text-align:left;border-radius:14px;flex-direction:column;gap:4px;padding:10px 12px;font-family:inherit;transition:all .15s;display:flex}.theme-cell:hover{border-color:var(--brand);transform:translateY(-1px)}.theme-cell.on{border-color:var(--brand);background:var(--brand-soft);box-shadow:var(--shadow-brand)}.theme-swatch{border:1px solid var(--hairline);border-radius:8px;width:100%;height:34px;margin-bottom:4px}.theme-name{color:var(--ink);font-size:13px;font-weight:700}.theme-desc{color:var(--ink-3);font-size:11px;line-height:1.4}.theme-reset{width:100%;margin-top:12px}.btn-export{align-items:center;gap:6px;display:inline-flex}.member-sort{flex-wrap:wrap;gap:6px;margin:12px 0;display:flex}.streak-cal{flex-direction:column;gap:8px;display:flex}.streak-cal-head{color:var(--ink-3);font-size:10px;font-family:var(--b-font,monospace);grid-template-columns:28px repeat(7,1fr);gap:4px;display:grid}.streak-cal-head span{text-align:center}.streak-cal-grid{grid-template-columns:repeat(7,1fr);gap:4px;display:grid}.streak-cell{aspect-ratio:1;background:#eef0f4;border:1px solid #0000000a;border-radius:4px;position:relative}.streak-cell.lv1{background:#c7d2fe}.streak-cell.lv2{background:#a5b4fc}.streak-cell.lv3{background:#6366f1}body[data-theme=forest] .streak-cell.lv1{background:#bfe3c8}body[data-theme=forest] .streak-cell.lv2{background:#86c99a}body[data-theme=forest] .streak-cell.lv3{background:#2f9e5f}body[data-theme=sunset] .streak-cell.lv1{background:#ffd6c2}body[data-theme=sunset] .streak-cell.lv2{background:#ff9d6f}body[data-theme=sunset] .streak-cell.lv3{background:#ff7a4d}body[data-theme=minimal] .streak-cell.lv1{background:#d4d4d8}body[data-theme=minimal] .streak-cell.lv2{background:#a1a1aa}body[data-theme=minimal] .streak-cell.lv3{background:#18181b}body[data-theme=brutal] .streak-cell{border:2px solid var(--b-ink);border-radius:0}body[data-theme=brutal] .streak-cell.lv1{background:var(--b-yellow)}body[data-theme=brutal] .streak-cell.lv2{background:var(--b-blue)}body[data-theme=brutal] .streak-cell.lv3{background:var(--b-pink)}.streak-cell.today{outline:2px solid var(--brand);outline-offset:1px}.streak-cell-mark{color:#fff;font-size:8px;font-weight:700;font-family:var(--b-font,monospace);position:absolute;bottom:1px;right:2px}.streak-cal-scale{color:var(--ink-3);align-items:center;gap:4px;font-size:10px;display:flex}.streak-cal-scale .sc-lv0,.streak-cal-scale .sc-lv1,.streak-cal-scale .sc-lv2,.streak-cal-scale .sc-lv3{border-radius:3px;width:14px;height:14px}.streak-cal-scale .sc-lv0{background:#eef0f4}.streak-cal-scale .sc-lv1{background:#c7d2fe}.streak-cal-scale .sc-lv2{background:#a5b4fc}.streak-cal-scale .sc-lv3{background:#6366f1}.review-card{flex-direction:column;gap:10px;display:flex}.review-head{align-items:center;gap:10px;display:flex}.review-icon{background:var(--brand-soft);border-radius:10px;justify-content:center;align-items:center;width:36px;height:36px;font-size:17px;display:flex}body[data-theme=brutal] .review-icon{background:var(--b-yellow);border:var(--b-border);box-shadow:var(--b-shadow-sm);border-radius:0}.review-title{color:var(--ink);margin:0;font-size:14px;font-weight:700}.review-sub{color:var(--ink-2);margin:2px 0 0;font-size:12px}.review-sub em{color:var(--brand);font-style:normal;font-weight:600}.review-line{color:var(--ink);margin:0;font-size:13px;line-height:1.6}.review-tip{color:var(--ink-2);background:var(--bg);border-left:3px solid var(--brand);border-radius:8px;margin:0;padding:10px 12px;font-size:13px;line-height:1.6}.review-goal-bar{background:#eef0f5;border-radius:999px;height:10px;overflow:hidden}.review-goal-fill{background:var(--brand-grad);height:100%;transition:width .5s var(--ease-out);border-radius:999px}.note-card-actions{flex-shrink:0;align-items:center;gap:6px;display:flex}.note-card-actions .btn-slim{white-space:nowrap;flex-shrink:0}.note-msg{color:var(--ok);margin:6px 0 0;font-size:12px}.note-msg.err{color:var(--danger)}.offline-badge{z-index:200;background:var(--danger);color:#fff;border-radius:0 0 10px 10px;align-items:center;gap:8px;padding:8px 16px;font-size:12px;font-weight:600;animation:.25s offline-in;display:flex;position:fixed;top:0;left:50%;transform:translate(-50%);box-shadow:0 4px 12px #ef444466}.offline-badge .offline-dot{background:#fff;border-radius:50%;width:8px;height:8px;animation:1.2s infinite blink}@keyframes offline-in{0%{opacity:0;transform:translate(-50%,-100%)}to{opacity:1;transform:translate(-50%)}}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}body[data-theme=brutal]{--b-ink:#000;--b-paper:#f2f0e8;--b-white:#fff;--b-yellow:#ffd51a;--b-green:#8ed63a;--b-pink:#ff2d9e;--b-blue:#22c5ff;--b-orange:#ff7a18;--b-purple:#a34df7;--b-red:#ff3b3b;--b-navy:#ffd51a;--b-border:3px solid var(--b-ink);--b-shadow:7px 7px 0 0 var(--b-ink);--b-shadow-sm:4px 4px 0 0 var(--b-ink);background-color:var(--b-paper);color:var(--b-ink);background-image:radial-gradient(circle,#d7d3c4 1.3px,#0000 1.4px);background-size:22px 22px;font-family:Courier New,SF Mono,ui-monospace,Menlo,Consolas,monospace}body[data-theme=brutal] .card,body[data-theme=brutal] .hero-card,body[data-theme=brutal] .invite-card,body[data-theme=brutal] .checkin-card,body[data-theme=brutal] .note-card,body[data-theme=brutal] .goal-card,body[data-theme=brutal] .timer-card,body[data-theme=brutal] .week-goal-card{background:var(--b-white);border:var(--b-border);box-shadow:var(--b-shadow);border-radius:0;animation:none}body[data-theme=brutal] .hero-card{background:var(--b-yellow);color:#000;padding:16px}body[data-theme=brutal] .hero-row{gap:14px}body[data-theme=brutal] .hero-stat{min-width:0}body[data-theme=brutal] .hero-num{color:#000;overflow-wrap:break-word;font-size:22px;font-weight:800}body[data-theme=brutal] .hero-label{color:#000000b8;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap;font-size:10px}body[data-theme=brutal] .hero-greet{color:#000;text-transform:uppercase;letter-spacing:1px;font-weight:800}body[data-theme=brutal] .hero-divider{background:#00000059}body[data-theme=brutal] .section-title,body[data-theme=brutal] .field-label,body[data-theme=brutal] .note-card-label,body[data-theme=brutal] .label-hint,body[data-theme=brutal] .rank-sub,body[data-theme=brutal] .checkin-time,body[data-theme=brutal] .page-sub{text-transform:uppercase;letter-spacing:1px;color:var(--b-ink);font-weight:700}body[data-theme=brutal] .section-title{border-bottom:var(--b-border);margin:20px 4px 10px;padding-bottom:6px}body[data-theme=brutal] .btn{text-transform:uppercase;letter-spacing:.5px;border:var(--b-border);box-shadow:var(--b-shadow-sm);border-radius:0;font-weight:700;transition:transform 60ms,box-shadow 60ms}body[data-theme=brutal] .btn:active{box-shadow:0 0 0 0 var(--b-ink);transform:translate(3px,3px)}body[data-theme=brutal] .btn-primary{background:var(--b-pink);color:var(--b-ink)}body[data-theme=brutal] .btn-ghost{background:var(--b-white);color:var(--b-ink)}body[data-theme=brutal] .btn-danger{background:var(--b-red);color:#fff}body[data-theme=brutal] .btn-check{background:var(--b-green);color:var(--b-ink)}body[data-theme=brutal] .btn:disabled{opacity:.5}body[data-theme=brutal] .chip{text-transform:uppercase;letter-spacing:.5px;border:2px solid var(--b-ink);background:var(--b-white);color:var(--b-ink);border-radius:0;font-weight:700}body[data-theme=brutal] .chip.chip-on{background:var(--b-blue);color:var(--b-ink);box-shadow:var(--b-shadow-sm)}body[data-theme=brutal] .chip.chip-dup{background:var(--b-orange)}body[data-theme=brutal] .chip-quick{background:var(--b-purple)}body[data-theme=brutal] .badge{text-transform:uppercase;letter-spacing:.5px;border:2px solid var(--b-ink);background:var(--b-white);border-radius:0;font-size:11px;font-weight:700}body[data-theme=brutal] .badge-ok{background:var(--b-green)}body[data-theme=brutal] .badge-new{background:var(--b-yellow)}body[data-theme=brutal] .badge-subject{background:var(--b-blue)}body[data-theme=brutal] .badge-attention{background:var(--b-pink)}body[data-theme=brutal] .badge-backfill{background:var(--b-orange)}body[data-theme=brutal] .badge-used{color:var(--b-ink);background:#d8d8d8}body[data-theme=brutal] .avatar{border:var(--b-border);box-shadow:var(--b-shadow-sm);border-radius:0}body[data-theme=brutal] .form input,body[data-theme=brutal] .form textarea{border:var(--b-border);background:var(--b-white);box-shadow:var(--b-shadow-sm);border-radius:0}body[data-theme=brutal] .form input:focus,body[data-theme=brutal] .form textarea:focus{background:var(--b-yellow);box-shadow:var(--b-shadow-sm)}body[data-theme=brutal] .bottom-nav{background:var(--b-white);border-top:var(--b-border);box-shadow:none}body[data-theme=brutal] .nav-item{text-transform:uppercase;letter-spacing:.5px;color:var(--b-ink);font-weight:700}body[data-theme=brutal] .nav-item.active{color:var(--b-pink)}body[data-theme=brutal] .top-nav-landscape{background:var(--b-white);border-bottom:var(--b-border)}body[data-theme=brutal] .lnav-item{text-transform:uppercase;letter-spacing:.5px;border:2px solid var(--b-ink);border-radius:0;font-weight:700}body[data-theme=brutal] .lnav-item.active{background:var(--b-blue);box-shadow:var(--b-shadow-sm)}body[data-theme=brutal] .banner{background:var(--b-purple);border:var(--b-border);box-shadow:var(--b-shadow);border-radius:0}body[data-theme=brutal] .banner-title{text-transform:uppercase;letter-spacing:1px;font-weight:700}body[data-theme=brutal] .fab{border:var(--b-border);background:var(--b-yellow);color:#000;box-shadow:var(--b-shadow);border-radius:0;transition:transform 60ms,box-shadow 60ms}body[data-theme=brutal] .fab:active{box-shadow:0 0 0 0 var(--b-ink);transform:translate(4px,4px)}body[data-theme=brutal] .checkin-card.unchecked{border-left:6px solid var(--b-pink)}body[data-theme=brutal] .checkin-field{border:2px solid var(--b-ink);background:#f7f8fa;border-radius:0}body[data-theme=brutal] .skeleton{border:var(--b-border);background:var(--b-white);box-shadow:var(--b-shadow);border-radius:0}body[data-theme=brutal] .sk-card,body[data-theme=brutal] .sk-line,body[data-theme=brutal] .sk-square{background:#e9e9e2;border:2px solid #d5d5dc;border-radius:0;box-shadow:2px 2px #d5d5dc}body[data-theme=brutal] *,body[data-theme=brutal] :before,body[data-theme=brutal] :after{animation:none!important}.theme-toggle{border:2px solid var(--ink);border-radius:10px;gap:0;width:100%;display:flex;overflow:hidden}body[data-theme=brutal] .theme-toggle{box-shadow:var(--b-shadow-sm);border-radius:0}.theme-toggle button{color:var(--ink-2);cursor:pointer;background:#fff;border:none;flex:1;padding:11px 8px;font-family:inherit;font-size:13px;font-weight:700;transition:all .15s}.theme-toggle button+button{border-left:2px solid var(--hairline)}body[data-theme=brutal] .theme-toggle button+button{border-left:3px solid var(--b-ink)}.theme-toggle button.on{background:var(--brand);color:#fff}body[data-theme=brutal] .theme-toggle button.on{background:var(--b-pink);color:var(--b-ink)}body[data-theme=brutal] .theme-toggle button:not(.on){background:var(--b-white);color:var(--b-ink)}.theme-toggle-sub{color:var(--ink-3);text-align:center;margin:6px 0 0;font-size:11px}body[data-theme=brutal] .theme-toggle-sub{color:var(--b-ink);text-transform:uppercase;letter-spacing:1px}body[data-theme=forest]{--bg:#eef3ec;--card:#fff;--ink:#1f2a1d;--ink-2:#5e6b58;--ink-3:#9aa893;--brand:#2f9e5f;--brand-2:#7bc478;--brand-grad:linear-gradient(135deg, #34a06a 0%, #7bc478 100%);--brand-soft:#e3f3e9;--danger:#e05c4a;--ok:#2f9e5f;--amber:#d99a2b;--hairline:#1f2a1d12;--shadow-card:0 1px 2px #1f2a1d0d, 0 12px 30px -14px #1f2a1d29;--shadow-brand:0 8px 20px -8px #2f9e5f80;--radius:14px;background:var(--bg);color:var(--ink)}body[data-theme=forest] .hero-card{background:radial-gradient(120px 90px at 88% -10%,#7bc47880,#0000 70%),radial-gradient(140px 100px at -8% 110%,#2f9e5f66,#0000 70%),linear-gradient(160deg,#1f3a2a 0%,#16281d 100%)}body[data-theme=forest] .checkin-card.unchecked{border-left:3px solid var(--brand)}body[data-theme=forest] .sk-card,body[data-theme=forest] .sk-line,body[data-theme=forest] .sk-square{box-shadow:none;background:#e7ede4;border:none}body[data-theme=forest] .milestone-dot.on{background:var(--brand-grad);box-shadow:var(--shadow-brand)}body[data-theme=sunset]{--bg:#fbf3ec;--card:#fff;--ink:#3a2a2a;--ink-2:#8a6f6a;--ink-3:#c4aca5;--brand:#ff7a4d;--brand-2:#ff4d8d;--brand-grad:linear-gradient(135deg, #ff8c42 0%, #ff4d8d 100%);--brand-soft:#fdeadd;--danger:#e04646;--ok:#2f9e5f;--amber:#ff8a3d;--hairline:#3a2a2a12;--shadow-card:0 1px 2px #3a2a2a0d, 0 12px 30px -14px #3a2a2a26;--shadow-brand:0 8px 20px -8px #ff7a4d80;--radius:20px;background:var(--bg);color:var(--ink)}body[data-theme=sunset] .hero-card{background:radial-gradient(120px 90px at 88% -10%,#ff8c428c,#0000 70%),radial-gradient(140px 100px at -8% 110%,#ff4d8d66,#0000 70%),linear-gradient(160deg,#4a2438 0%,#2e1626 100%)}body[data-theme=sunset] .checkin-card.unchecked{border-left:3px solid var(--brand)}body[data-theme=sunset] .sk-card,body[data-theme=sunset] .sk-line,body[data-theme=sunset] .sk-square{box-shadow:none;background:#f5e8dd;border:none}body[data-theme=sunset] .milestone-dot.on{background:var(--brand-grad);box-shadow:var(--shadow-brand)}body[data-theme=minimal]{--bg:#f5f5f4;--card:#fff;--ink:#18181b;--ink-2:#52525b;--ink-3:#a1a1aa;--brand:#18181b;--brand-2:#3f3f46;--brand-grad:linear-gradient(135deg, #18181b 0%, #3f3f46 100%);--brand-soft:#ecebe9;--danger:#dc2626;--ok:#16a34a;--amber:#d97706;--hairline:#18181b14;--shadow-card:0 1px 2px #18181b0a, 0 10px 28px -14px #18181b1f;--shadow-brand:0 8px 20px -8px #18181b66;--radius:12px;background:var(--bg);color:var(--ink)}body[data-theme=minimal] .hero-card{color:#fff;background:#18181b}body[data-theme=minimal] .hero-num{color:#fff}body[data-theme=minimal] .hero-label{color:#fff9}body[data-theme=minimal] .hero-greet{color:#fff}body[data-theme=minimal] .checkin-card.unchecked{border-left:3px solid var(--brand)}body[data-theme=minimal] .skeleton{background:var(--card);border:1px solid var(--hairline)}body[data-theme=minimal] .sk-card,body[data-theme=minimal] .sk-line,body[data-theme=minimal] .sk-square{background:#ecece8;border:1px solid #d8d8d5}body[data-theme=minimal] .milestone-dot.on{background:var(--brand-grad);box-shadow:var(--shadow-brand)}
