:root{color-scheme:light dark;--brand: #2e7d9c;--brand-dark: #1f5a72;--brand-text: #24708e;--accent-ink: #1f5a72;--streak: #b45309;--bg: #f6f8f9;--card: #ffffff;--ink: #1c2b33;--muted: #5b6f7b;--green: #27835b;--teal: #447f6e;--red: #d95d55;--amber: #e0a53f;--chip-bg: #e8eef1;--input-bg: #fbfdfe;--line: #d5dee3;--soft: #eef2f4;--tint: #eef5f8;--quote-bg: #fbf6ec;--commit-bg: #f2f7f4;--rest-bg: #d9e4ec;--rest-ink: #3a5368;--banner-praise-bg: #e7f5ee;--banner-upgrade-bg: #fdf3e0;--banner-upgrade-ink: #8a6414;--banner-grad-bg: #eef0fb;--banner-grad-ink: #3f4c9c;--primary-disabled: #b9ccd5;--quad-grad: linear-gradient(135deg, #f2f6f8, #e8f2ee);--shadow-card: 0 1px 2px rgba(28, 43, 51, .05), 0 5px 14px rgba(28, 43, 51, .07);--radius: 14px}@media(prefers-color-scheme:dark){:root{--brand-text: #6fb5d2;--accent-ink: #8ec7dd;--streak: #fbbf24;--bg: #0d161c;--card: #15222b;--ink: #e8eef2;--muted: #9ab0bc;--green: #4cc38a;--teal: #58a58f;--red: #e57b74;--amber: #d9a83f;--chip-bg: #22343f;--input-bg: #101b22;--line: #2d434f;--soft: #1c2c35;--tint: #1a2e39;--quote-bg: #2c2517;--commit-bg: #182920;--rest-bg: #2b3d4b;--rest-ink: #b4c9d8;--banner-praise-bg: #16322a;--banner-upgrade-bg: #33290f;--banner-upgrade-ink: #e3c06b;--banner-grad-bg: #232a4a;--banner-grad-ink: #aab4ee;--primary-disabled: #33505f;--quad-grad: linear-gradient(135deg, #17262f, #16302a);--shadow-card: 0 1px 2px rgba(0, 0, 0, .5), 0 6px 16px rgba(0, 0, 0, .35)}}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:-apple-system,PingFang TC,Noto Sans TC,sans-serif;background:var(--bg);color:var(--ink);line-height:1.6}button{font-family:inherit;font-size:16px;border:none;border-radius:10px;padding:10px 16px;min-height:44px;cursor:pointer;background:var(--chip-bg);color:var(--ink);touch-action:manipulation;transition:transform .15s ease,opacity .2s ease,background-color .2s ease}button:active{transform:scale(.97)}:focus-visible{outline:2px solid var(--brand-text);outline-offset:2px}@media(prefers-reduced-motion:reduce){button:active{transform:none}}.app,.screen{max-width:480px;margin:0 auto;padding:16px 16px 80px}.app .screen{padding:0 0 calc(88px + env(safe-area-inset-bottom))}.brand{text-align:center;padding:8px 0 4px}.brand h1{margin:0;color:var(--brand-text);letter-spacing:.2em}.tagline{color:var(--muted);margin:4px 0 0;font-size:14px}.card{background:var(--card);border-radius:var(--radius);padding:20px;margin:14px 0;box-shadow:var(--shadow-card)}.card h2{margin-top:0}.card.suggestion{border-left:4px solid var(--teal)}.card.suggestion p{margin:0 0 12px}.exercise-row{justify-content:space-between;margin:10px 0}.exercise-row .chip,.exercise-row button.primary{flex:0 0 auto;margin:0;width:auto;padding:8px 14px}.exercise-name{font-weight:600}.momentum{display:flex;gap:8px;justify-content:center;margin:10px 0}.m-dot{width:14px;height:14px;border-radius:50%;background:var(--soft)}.m-dot.done{background:var(--brand)}.m-dot.two_min{background:var(--teal)}.m-dot.rest{background:var(--rest-bg);box-shadow:inset 0 0 0 1.5px var(--rest-ink)}.m-dot.missed{background:var(--red);opacity:.55}.m-dot.future,.m-dot.before{background:var(--soft);opacity:.4}.ns-block{text-align:center;background:var(--tint);border-radius:var(--radius);padding:14px;margin:8px 0 14px}.ns-value{font-size:40px;font-weight:800;color:var(--accent-ink);margin:2px 0;line-height:1}.ns-empty{color:var(--accent-ink);font-weight:600;margin:6px 0}.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.stat{background:var(--bg);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:2px}.stat-num{font-size:22px;font-weight:800;color:var(--accent-ink)}.stat-label{font-weight:600;font-size:14px}.trend{display:flex;gap:8px;align-items:flex-end;height:80px;margin-top:6px}.trend-bar{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%}.trend-fill{width:70%;min-height:4px;background:var(--teal);border-radius:4px 4px 0 0}.trend-score{font-size:12px;color:var(--muted);margin-top:4px}.exercise-done{color:var(--green);font-weight:600;font-size:13px}.streak-num,.cal-day,.ns-value,.stat-num,.celebrate-streak,.trend-score{font-variant-numeric:tabular-nums}label{display:block;margin:12px 0;font-weight:600;font-size:15px}input,textarea{display:block;width:100%;margin-top:6px;padding:10px 12px;font-size:16px;font-family:inherit;border:1px solid var(--line);border-radius:10px;background:var(--input-bg);color:var(--ink)}input:focus,textarea:focus{outline:2px solid var(--brand-text);border-color:transparent}button.primary{background:var(--brand);color:#fff;font-weight:700}button.primary:disabled{background:var(--primary-disabled);cursor:default}button.secondary{background:#447f6e;color:#fff;font-weight:700}button.ghost{background:transparent;color:var(--muted);text-decoration:underline}button.big{display:block;width:100%;margin:10px 0;padding:14px}.chip{display:inline-block;margin:4px 6px 4px 0;padding:10px 16px;border-radius:999px;background:var(--chip-bg);font-size:15px}.chip.selected{background:var(--brand);color:#fff}.row{display:flex;gap:8px;align-items:center}.row.wrap{flex-wrap:wrap}.nav-row{margin-top:18px;justify-content:flex-end}.hint{color:var(--muted);font-size:14px}.hint.center{text-align:center}.rest-warn{background:var(--banner-upgrade-bg);color:var(--banner-upgrade-ink);border-radius:10px;padding:10px 12px;font-size:14px;margin:0 0 10px}.intention{background:var(--tint);border-left:4px solid var(--brand);padding:10px 12px;border-radius:6px;font-weight:600}.votes{color:var(--accent-ink);font-weight:600}.done-msg{color:var(--green);font-weight:700;text-align:center;margin:16px 0 4px}.steps{display:flex;gap:4px;justify-content:center;margin:10px 0;flex-wrap:wrap}.step{font-size:13px;color:var(--muted);padding:3px 8px;border-radius:999px}.step.active{background:var(--brand);color:#fff}.step.done{color:var(--brand-text)}.commit{background:var(--commit-bg);border-radius:10px;padding:12px 16px;margin-top:14px}.commit h3{margin:0 0 6px}.banner{border-radius:var(--radius);padding:12px 16px;margin:14px 0}.banner.praise{background:var(--banner-praise-bg);color:var(--green)}.banner.upgrade{background:var(--banner-upgrade-bg);color:var(--banner-upgrade-ink)}.banner.graduate{background:var(--banner-grad-bg);color:var(--banner-grad-ink)}.banner p{margin:0 0 6px;font-weight:600}.recovery .card{border-top:5px solid var(--amber)}blockquote{margin:8px 0;padding:10px 14px;background:var(--quote-bg);border-left:4px solid var(--amber);border-radius:6px;font-style:italic}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin:12px 0}.cal-head{text-align:center;color:var(--muted);font-size:13px}.cal-day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:14px;background:var(--soft)}.cal-day.done{background:var(--green);color:#fff;font-weight:700}.cal-day.two_min{background:var(--teal);color:#fff;font-weight:700}.cal-day.missed{background:var(--red);color:#fff}.cal-day.rest{background:var(--rest-bg);color:var(--rest-ink)}.cal-day.future,.cal-day.before{opacity:.45}.legend{display:flex;gap:10px;align-items:center;flex-wrap:wrap;font-size:13px;color:var(--muted)}.legend-item{white-space:nowrap}.dot{width:12px;height:12px;border-radius:50%;display:inline-block;margin-right:4px}.dot.done{background:var(--green)}.dot.two_min{background:var(--teal)}.dot.missed{background:var(--red)}.dot.rest{background:var(--rest-bg);box-shadow:inset 0 0 0 1.5px var(--rest-ink)}.check-row{display:flex;gap:10px;align-items:center;font-weight:400;margin:8px 0}.check-row input{width:20px;height:20px;margin:0}.quadrant{position:relative;width:100%;aspect-ratio:1;background:linear-gradient(to right,transparent 49.7%,var(--line) 49.7%,var(--line) 50.3%,transparent 50.3%),linear-gradient(to bottom,transparent 49.7%,var(--line) 49.7%,var(--line) 50.3%,transparent 50.3%),var(--quad-grad);border-radius:10px;margin:10px 0;overflow:hidden}.q-label{position:absolute;font-size:12px;color:var(--muted)}.q-tl{top:8px;left:10px}.q-tr{top:8px;right:10px;color:var(--accent-ink);font-weight:700}.q-bl{bottom:8px;left:10px}.q-br{bottom:8px;right:10px}.q-dot{position:absolute;width:14px;height:14px;border-radius:50%;background:var(--brand);transform:translate(-50%,50%)}.flow-entry{border-top:1px solid var(--soft);padding:10px 0}.flow-entry p{margin:4px 0}.cue-block{margin:10px 0}.hide-plan{margin:6px 0 0 14px;font-weight:400;font-size:14px;color:var(--muted)}.splash{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:flex;flex-direction:column;align-items:center;justify-content:center;background:linear-gradient(160deg,var(--brand),var(--brand-dark));color:#fff;cursor:pointer;transition:opacity .2s ease-out}.splash.leaving{opacity:0}.sp-name{margin:14px 0 0;letter-spacing:.35em;font-size:30px;text-indent:.35em}.sp-tag{margin:6px 0 0;font-size:14px;opacity:.85}.sp-build{position:absolute;bottom:max(14px,env(safe-area-inset-bottom));font-size:11px;opacity:.5}.sp-wave{stroke-dasharray:90;stroke-dashoffset:90;animation:sp-draw .55s ease-out forwards}.sp-wave.w2{animation-delay:.12s}.sp-wave.w3{animation-delay:.24s}@keyframes sp-draw{to{stroke-dashoffset:0}}@media(prefers-reduced-motion:reduce){.sp-wave{animation:none;stroke-dashoffset:0}}.intro-screen{display:flex;flex-direction:column;justify-content:center;min-height:92dvh}.intro-card{text-align:center;padding:28px 22px;animation:intro-in .35s ease-out}.intro-card h2{margin:14px 0 8px;font-size:24px}.intro-card p{margin:0;color:var(--muted);font-size:16px;line-height:1.8}@keyframes intro-in{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.intro-dots{display:flex;gap:8px;justify-content:center;margin:4px 0 12px}.i-dot{width:8px;height:8px;border-radius:50%;background:var(--line)}.i-dot.on{background:var(--brand)}@media(prefers-reduced-motion:reduce){.intro-card{animation:none}}.splash.first .sp-wave{animation-duration:1.2s}.splash.first .sp-wave.w2{animation-delay:.35s}.splash.first .sp-wave.w3{animation-delay:.7s}.splash.first svg{animation:sp-breathe 2.2s ease-in-out 1.9s infinite}.splash.first .sp-name{opacity:0;animation:sp-rise .6s ease-out 1.1s forwards}.splash.first .sp-tag{opacity:0;animation:sp-rise .6s ease-out 1.7s forwards}@keyframes sp-rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes sp-breathe{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}@media(prefers-reduced-motion:reduce){.splash.first .sp-name,.splash.first .sp-tag{animation:none;opacity:1}.splash.first svg{animation:none}}.celebrate-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 42%,#2e7d9cf5,#1f5a72f7);color:#fff;text-align:center;overflow:hidden;animation:cel-fade-in .25s ease-out}@keyframes cel-fade-in{0%{opacity:0}to{opacity:1}}.celebrate-core{position:relative;z-index:2;padding:0 32px}.celebrate-core h2{margin:6px 0;font-size:24px}.celebrate-core p{margin:8px 0 0;font-size:17px;opacity:.94;line-height:1.7}.celebrate-streak{font-size:92px;font-weight:800;line-height:1;animation:cel-pop .55s cubic-bezier(.2,1.6,.4,1);text-shadow:0 4px 24px rgba(0,0,0,.25)}.celebrate-unit{font-size:26px;font-weight:600;margin-left:6px}@keyframes cel-pop{0%{transform:scale(.3);opacity:0}60%{transform:scale(1.15);opacity:1}to{transform:scale(1)}}.celebrate-cta{margin-top:22px;background:#fff;color:var(--brand-dark);font-weight:700;padding:12px 32px;border-radius:999px}.ripple{position:absolute;left:50%;top:42%;width:120px;height:120px;margin:-60px 0 0 -60px;border:2px solid rgba(255,255,255,.55);border-radius:50%;animation:cel-ripple 1.6s ease-out infinite}.ripple.r2{animation-delay:.4s}.ripple.r3{animation-delay:.8s}@keyframes cel-ripple{0%{transform:scale(.6);opacity:.8}to{transform:scale(4.2);opacity:0}}.confetti{position:absolute;top:-18px;width:10px;height:16px;border-radius:2px;animation:cel-fall 2s ease-in infinite}.confetti.cf0{left:8%;background:#ffd166;animation-delay:0s}.confetti.cf1{left:22%;background:#8fd6bd;animation-delay:.25s}.confetti.cf2{left:36%;background:#ffb4a2;animation-delay:.5s}.confetti.cf3{left:50%;background:#f2f6f8;animation-delay:.15s}.confetti.cf4{left:64%;background:#ffd166;animation-delay:.4s}.confetti.cf5{left:78%;background:#8fd6bd;animation-delay:.65s}.confetti.cf6{left:90%;background:#ffb4a2;animation-delay:.3s}@keyframes cel-fall{0%{transform:translateY(0) rotate(0);opacity:1}to{transform:translateY(105vh) rotate(540deg);opacity:.7}}@media(prefers-reduced-motion:reduce){.celebrate-streak,.ripple,.confetti,.celebrate-overlay{animation:none}.ripple,.confetti{display:none}}.streak-hero{display:flex;align-items:baseline;gap:6px;margin:8px 0 2px}.streak-num{font-size:56px;font-weight:800;color:var(--streak);line-height:1}.streak-unit-label{font-size:16px;color:var(--muted);font-weight:600}.tabbar{position:fixed;bottom:0;left:0;right:0;display:flex;justify-content:space-around;background:var(--card);border-top:1px solid var(--line);padding:8px 0 max(8px,env(safe-area-inset-bottom));max-width:480px;margin:0 auto}.tabbar button{background:transparent;color:var(--muted);font-weight:600}.tabbar button.active{color:var(--brand-text)}dialog.sheet{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;max-width:none;max-height:none;margin:0;padding:0;border:0;background:#00000080;color:var(--ink);animation:sheet-scrim-in .2s ease-out}dialog.sheet[open]{display:flex;align-items:flex-end;justify-content:center}dialog.sheet::backdrop{background:transparent}.sheet-panel{width:100%;max-width:480px;max-height:88dvh;overflow-y:auto;overscroll-behavior:contain;background:var(--card);border-top:1px solid var(--line);border-radius:var(--radius) var(--radius) 0 0;padding:0 16px calc(16px + env(safe-area-inset-bottom));animation:sheet-up .26s cubic-bezier(.22,1,.36,1)}.sheet-panel:focus{outline:none}.sheet-handle{width:100%;padding:10px 0 14px;touch-action:none;cursor:grab}.sheet-handle:before{content:"";display:block;width:40px;height:4px;margin:0 auto;border-radius:2px;background:var(--line)}.sheet-panel .screen{padding:0 0 8px;max-width:none}.sheet-panel .card{background:var(--bg);box-shadow:none}dialog.sheet.closing{animation:sheet-scrim-out .2s ease-in forwards}dialog.sheet.closing .sheet-panel{animation:sheet-down .2s ease-in forwards}@keyframes sheet-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes sheet-down{0%{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes sheet-scrim-in{0%{background:#0000}to{background:#00000080}}@keyframes sheet-scrim-out{0%{background:#00000080}to{background:#0000}}@media(prefers-reduced-motion:reduce){dialog.sheet,.sheet-panel,dialog.sheet.closing,dialog.sheet.closing .sheet-panel{animation:none}}.streak-num,.celebrate-streak,.votes{font-variant-numeric:tabular-nums}.hero-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.depth{display:flex;flex-direction:column;align-items:center;gap:2px;flex:0 0 auto}.depth-ring{position:relative}.depth-arc{transition:stroke-dashoffset .6s ease-out}.depth-num{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:17px;font-weight:800;color:var(--accent-ink);font-variant-numeric:tabular-nums}.depth-pct{font-size:11px;font-weight:700;margin-left:1px}.depth-label{font-size:12px;color:var(--muted);font-weight:600}.depth-hint{margin:2px 0 8px}.depth-line{margin:-4px 0 8px}@media(prefers-reduced-motion:reduce){.depth-arc{transition:none}}#toast-layer{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:0;padding:0;border:0;background:transparent;color:inherit;overflow:visible;pointer-events:none}#toast-layer [data-sonner-toaster]{--normal-bg: var(--card);--normal-border: var(--line);--normal-text: var(--ink);--border-radius: var(--radius);font-family:inherit}#toast-layer [data-sonner-toast][data-visible=true]{pointer-events:auto}#toast-layer [data-sonner-toast]{font-size:15px;box-shadow:var(--shadow-card)}#toast-layer [data-sonner-toast] [data-button]{background:var(--brand);color:#fff;font-size:14px;font-weight:700;min-height:36px;height:36px;padding:0 14px;border-radius:999px}.driver-popover.chuanliu-tour{background:var(--card);color:var(--ink);border-radius:var(--radius);font-family:inherit;padding:18px;max-width:min(320px,calc(100vw - 32px));box-shadow:var(--shadow-card),0 0 0 1px var(--line)}.driver-popover.chuanliu-tour .driver-popover-title{font-family:inherit;font-size:17px;font-weight:800;color:var(--ink)}.driver-popover.chuanliu-tour .driver-popover-description{font-family:inherit;font-size:15px;line-height:1.7;color:var(--muted)}.driver-popover.chuanliu-tour .driver-popover-progress-text{font-size:13px;color:var(--muted)}.driver-popover.chuanliu-tour .driver-popover-footer{gap:8px;align-items:center}.driver-popover.chuanliu-tour .driver-popover-footer button{font-family:inherit;font-size:15px;font-weight:700;min-height:40px;padding:0 14px;border-radius:999px;border:0;text-shadow:none;background:var(--chip-bg);color:var(--ink)}.driver-popover.chuanliu-tour .driver-popover-footer button.driver-popover-next-btn{background:var(--brand);color:#fff}.driver-popover.chuanliu-tour .driver-popover-footer button.driver-popover-btn-disabled{opacity:.45}.driver-popover.chuanliu-tour .driver-popover-footer button.chuanliu-tour-skip{background:transparent;color:var(--muted);text-decoration:underline;margin-right:auto;padding:0 6px}.driver-popover.chuanliu-tour .driver-popover-arrow-side-top.driver-popover-arrow{border-top-color:var(--card)}.driver-popover.chuanliu-tour .driver-popover-arrow-side-bottom.driver-popover-arrow{border-bottom-color:var(--card)}.driver-popover.chuanliu-tour .driver-popover-arrow-side-left.driver-popover-arrow{border-left-color:var(--card)}.driver-popover.chuanliu-tour .driver-popover-arrow-side-right.driver-popover-arrow{border-right-color:var(--card)}.card.week1{border-left:4px solid var(--teal)}.week1-list{margin:8px 0 10px;padding-left:18px;font-size:14px;line-height:1.5}.week1-list li{margin-bottom:2px}.today-line{margin:4px 0 12px;text-align:center;font-weight:600;color:var(--accent-ink)}.storage-banner{position:sticky;top:0;z-index:2000;display:flex;align-items:center;gap:10px;padding:10px 14px;box-sizing:border-box;width:100%;background:var(--banner-upgrade-bg);color:var(--banner-upgrade-ink);border-bottom:1px solid var(--line);font-size:14px;line-height:1.5}.storage-banner-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;overflow-wrap:anywhere}.storage-banner-close{flex:none;min-height:44px;min-width:44px;padding:0 12px;background:transparent;color:inherit;font-size:14px;font-weight:600;border:1px solid currentColor;border-radius:10px;cursor:pointer}
