:root{--bg-primary:#0d0d12;--bg-secondary:#13131a;--bg-tertiary:#1a1a24;--bg-elevated:#1e1e2a;--bg-hover:#24243a;--glass-bg:#ffffff08;--glass-border:#ffffff0f;--glass-bg-hover:#ffffff0f;--text-primary:#f0f0f5;--text-secondary:#8b8b9e;--text-tertiary:#5a5a6e;--text-inverse:#0d0d12;--accent:#6c5ce7;--accent-light:#a78bfa;--accent-dark:#5241b5;--accent-glow:#6c5ce726;--accent-gradient:linear-gradient(135deg, #6c5ce7, #a78bfa);--success:#10b981;--success-bg:#10b9811f;--warning:#f59e0b;--warning-bg:#f59e0b1f;--danger:#ef4444;--danger-bg:#ef44441f;--info:#3b82f6;--info-bg:#3b82f61f;--priority-low:#6b7280;--priority-medium:#3b82f6;--priority-high:#f59e0b;--priority-urgent:#ef4444;--font-family:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--fs-xs:.6875rem;--fs-sm:.75rem;--fs-base:.875rem;--fs-md:1rem;--fs-lg:1.125rem;--fs-xl:1.375rem;--fs-2xl:1.75rem;--fs-3xl:2rem;--fw-light:300;--fw-regular:400;--fw-medium:500;--fw-semibold:600;--fw-bold:700;--fw-extrabold:800;--lh-tight:1.2;--lh-normal:1.5;--sp-1:.25rem;--sp-2:.5rem;--sp-3:.75rem;--sp-4:1rem;--sp-5:1.25rem;--sp-6:1.5rem;--sp-8:2rem;--sp-10:2.5rem;--sp-12:3rem;--sp-16:4rem;--radius-sm:8px;--radius-md:12px;--radius-lg:16px;--radius-xl:20px;--radius-pill:100px;--radius-full:50%;--shadow-sm:0 2px 8px #0003;--shadow-md:0 4px 16px #00000040;--shadow-lg:0 8px 32px #00000059;--shadow-glow:0 0 20px var(--accent-glow);--ease-default:cubic-bezier(.4, 0, .2, 1);--duration-fast:.15s;--duration-normal:.2s;--duration-slow:.3s;--nav-height:64px;--sidebar-width:240px;--content-max-width:640px;--safe-bottom:env(safe-area-inset-bottom,0px)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px}body{font-family:var(--font-family);font-size:var(--fs-base);font-weight:var(--fw-regular);line-height:var(--lh-normal);color:var(--text-primary);background-color:var(--bg-primary);min-height:100dvh;overflow-x:hidden}a{color:var(--accent-light);text-decoration:none}a:hover{text-decoration:underline}img,svg{max-width:100%;display:block}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit;background:0 0;border:none;outline:none}button{cursor:pointer}ul,ol{list-style:none}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--bg-hover);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary)}::selection{background:var(--accent);color:var(--text-primary)}#app{min-height:100dvh;display:flex}.page-content{min-height:100dvh;padding:var(--sp-5) var(--sp-4) calc(var(--nav-height) + var(--safe-bottom) + var(--sp-5));max-width:var(--content-max-width);flex:1;width:100%;margin:0 auto}.sidebar{display:none}@media (width>=768px){.sidebar{width:var(--sidebar-width);background:var(--bg-secondary);border-right:1px solid var(--glass-border);min-height:100dvh;padding:var(--sp-6) var(--sp-4);z-index:50;flex-direction:column;display:flex;position:fixed;top:0;left:0}.page-content{margin-left:var(--sidebar-width);padding-bottom:var(--sp-8);max-width:calc(var(--content-max-width) + var(--sp-8))}.bottom-nav{display:none!important}}.bottom-nav{height:calc(var(--nav-height) + var(--safe-bottom));padding-bottom:var(--safe-bottom);-webkit-backdrop-filter:blur(20px);border-top:1px solid var(--glass-border);z-index:100;background:#0d0d12eb;justify-content:space-around;align-items:center;display:flex;position:fixed;bottom:0;left:0;right:0}@media (width>=768px){.bottom-nav{display:none}}.text-xs{font-size:var(--fs-xs)}.text-sm{font-size:var(--fs-sm)}.text-base{font-size:var(--fs-base)}.text-md{font-size:var(--fs-md)}.text-lg{font-size:var(--fs-lg)}.text-xl{font-size:var(--fs-xl)}.text-2xl{font-size:var(--fs-2xl)}.text-3xl{font-size:var(--fs-3xl)}.text-light{font-weight:var(--fw-light)}.text-regular{font-weight:var(--fw-regular)}.text-medium{font-weight:var(--fw-medium)}.text-semibold{font-weight:var(--fw-semibold)}.text-bold{font-weight:var(--fw-bold)}.text-secondary{color:var(--text-secondary)}.text-tertiary{color:var(--text-tertiary)}.text-accent{color:var(--accent-light)}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.text-danger{color:var(--danger)}.card{background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:var(--radius-lg);padding:var(--sp-4);transition:background var(--duration-normal) var(--ease-default)}.card:hover{background:var(--glass-bg-hover)}.card-solid{background:var(--bg-secondary);border:1px solid var(--glass-border);border-radius:var(--radius-lg);padding:var(--sp-4)}.section-header{margin-bottom:var(--sp-3);justify-content:space-between;align-items:center;display:flex}.section-title{font-size:var(--fs-sm);font-weight:var(--fw-semibold);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes popIn{0%{transform:scale(0)}70%{transform:scale(1.1)}to{transform:scale(1)}}@keyframes checkmark{0%{stroke-dashoffset:24px}to{stroke-dashoffset:0}}.animate-fade-in{animation:fadeIn var(--duration-normal) var(--ease-default)}.animate-slide-up{animation:slideUp var(--duration-slow) var(--ease-default)}.animate-scale-in{animation:scaleIn var(--duration-normal) var(--ease-default)}.stagger-children>*{animation:slideUp var(--duration-slow) var(--ease-default) both}.stagger-children>:first-child{animation-delay:0s}.stagger-children>:nth-child(2){animation-delay:40ms}.stagger-children>:nth-child(3){animation-delay:80ms}.stagger-children>:nth-child(4){animation-delay:.12s}.stagger-children>:nth-child(5){animation-delay:.16s}.stagger-children>:nth-child(6){animation-delay:.2s}.stagger-children>:nth-child(7){animation-delay:.24s}.stagger-children>:nth-child(8){animation-delay:.28s}.stagger-children>:nth-child(9){animation-delay:.32s}.stagger-children>:nth-child(10){animation-delay:.36s}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:var(--sp-1)}.gap-2{gap:var(--sp-2)}.gap-3{gap:var(--sp-3)}.gap-4{gap:var(--sp-4)}.gap-6{gap:var(--sp-6)}.w-full{width:100%}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.hidden{display:none!important}.page-loading{justify-content:center;align-items:center;min-height:40vh;display:flex}.page-spinner{border:3px solid var(--glass-border);border-top-color:var(--accent);border-radius:50%;width:32px;height:32px;animation:.6s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.line-through{text-decoration:line-through}.nav-item{padding:var(--sp-2) var(--sp-3);color:var(--text-tertiary);font-size:var(--fs-xs);font-weight:var(--fw-medium);border-radius:var(--radius-md);transition:color var(--duration-normal) var(--ease-default);cursor:pointer;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;flex-direction:column;align-items:center;gap:2px;text-decoration:none;display:flex}.nav-item svg{stroke-width:1.8px;width:22px;height:22px}.nav-item.active{color:var(--accent-light)}.nav-item:hover{color:var(--text-secondary);text-decoration:none}.nav-item.active:hover{color:var(--accent-light)}.sidebar .nav-item{gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);font-size:var(--fs-base);border-radius:var(--radius-md);flex-direction:row;width:100%}.sidebar .nav-item.active{background:var(--accent-glow);color:var(--accent-light)}.sidebar-logo{font-size:var(--fs-xl);font-weight:var(--fw-extrabold);background:var(--accent-gradient);-webkit-text-fill-color:transparent;padding:var(--sp-2) var(--sp-4);margin-bottom:var(--sp-8);letter-spacing:-.02em;-webkit-background-clip:text;background-clip:text}.btn{justify-content:center;align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-5);border-radius:var(--radius-md);font-size:var(--fs-base);font-weight:var(--fw-semibold);transition:all var(--duration-normal) var(--ease-default);cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;display:inline-flex}.btn:active{transform:scale(.97)}.btn-primary{background:var(--accent-gradient);color:#fff;box-shadow:0 2px 12px var(--accent-glow)}.btn-primary:hover{box-shadow:0 4px 20px #6c5ce74d}.btn-secondary{background:var(--glass-bg);border:1px solid var(--glass-border);color:var(--text-primary)}.btn-secondary:hover{background:var(--glass-bg-hover)}.btn-ghost{color:var(--text-secondary);padding:var(--sp-2)}.btn-ghost:hover{color:var(--text-primary);background:var(--glass-bg)}.btn-danger{background:var(--danger-bg);color:var(--danger)}.btn-danger:hover{background:#ef444433}.btn-sm{padding:var(--sp-2) var(--sp-3);font-size:var(--fs-sm);border-radius:var(--radius-sm)}.btn-icon{border-radius:var(--radius-full);width:40px;height:40px;padding:0}.btn-icon svg{width:20px;height:20px}.fab{bottom:calc(var(--nav-height) + var(--safe-bottom) + var(--sp-4));right:var(--sp-4);border-radius:var(--radius-full);background:var(--accent-gradient);color:#fff;cursor:pointer;z-index:90;width:56px;height:56px;transition:all var(--duration-normal) var(--ease-default);-webkit-tap-highlight-color:transparent;border:none;justify-content:center;align-items:center;display:flex;position:fixed;box-shadow:0 4px 24px #6c5ce766}.fab:hover{transform:scale(1.05);box-shadow:0 6px 32px #6c5ce780}.fab:active{transform:scale(.95)}.fab svg{width:24px;height:24px}@media (width>=768px){.fab{bottom:var(--sp-6);right:var(--sp-6)}}.form-group{gap:var(--sp-2);flex-direction:column;display:flex}.form-label{font-size:var(--fs-sm);font-weight:var(--fw-medium);color:var(--text-secondary)}.form-input,.form-select,.form-textarea{width:100%;padding:var(--sp-3) var(--sp-4);background:var(--bg-tertiary);border:1px solid var(--glass-border);border-radius:var(--radius-md);color:var(--text-primary);font-size:var(--fs-base);transition:border-color var(--duration-normal) var(--ease-default)}.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}.form-input::placeholder,.form-textarea::placeholder{color:var(--text-tertiary)}.form-select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%238B8B9E' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right var(--sp-3) center;padding-right:var(--sp-10)}.form-textarea{resize:vertical;min-height:80px}.form-row{gap:var(--sp-3);grid-template-columns:1fr 1fr;display:grid}.color-options{gap:var(--sp-2);flex-wrap:wrap;display:flex}.color-option{border-radius:var(--radius-full);cursor:pointer;width:28px;height:28px;transition:all var(--duration-fast) var(--ease-default);border:2px solid #0000}.color-option:hover{transform:scale(1.15)}.color-option.selected{border-color:var(--text-primary);box-shadow:0 0 0 2px var(--bg-primary)}.modal-overlay{-webkit-backdrop-filter:blur(4px);z-index:200;animation:fadeIn var(--duration-fast) var(--ease-default);background:#0009;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}@media (width>=768px){.modal-overlay{align-items:center}}.modal-container{background:var(--bg-secondary);border:1px solid var(--glass-border);border-radius:var(--radius-xl) var(--radius-xl) 0 0;width:100%;max-width:480px;max-height:90dvh;animation:slideUp var(--duration-slow) var(--ease-default);overflow-y:auto}@media (width>=768px){.modal-container{border-radius:var(--radius-xl)}}.modal-header{padding:var(--sp-5) var(--sp-5) var(--sp-3);background:var(--bg-secondary);z-index:1;justify-content:space-between;align-items:center;display:flex;position:sticky;top:0}.modal-title{font-size:var(--fs-lg);font-weight:var(--fw-bold)}.modal-close{border-radius:var(--radius-full);width:32px;height:32px;color:var(--text-secondary);cursor:pointer;transition:all var(--duration-fast) var(--ease-default);justify-content:center;align-items:center;display:flex}.modal-close:hover{background:var(--glass-bg);color:var(--text-primary)}.modal-body{padding:var(--sp-3) var(--sp-5) var(--sp-5);gap:var(--sp-4);flex-direction:column;display:flex}.modal-footer{padding:var(--sp-3) var(--sp-5) var(--sp-5);gap:var(--sp-3);justify-content:flex-end;display:flex}.modal-footer .btn{flex:1}#toast-root{top:var(--sp-4);right:var(--sp-4);left:var(--sp-4);z-index:300;gap:var(--sp-2);pointer-events:none;flex-direction:column;align-items:center;display:flex;position:fixed}.toast{background:var(--bg-elevated);border:1px solid var(--glass-border);border-radius:var(--radius-md);padding:var(--sp-3) var(--sp-4);font-size:var(--fs-sm);font-weight:var(--fw-medium);color:var(--text-primary);box-shadow:var(--shadow-lg);animation:slideDown var(--duration-slow) var(--ease-default);pointer-events:auto;align-items:center;gap:var(--sp-2);width:100%;max-width:360px;display:flex}.toast-success{border-left:3px solid var(--success)}.toast-error{border-left:3px solid var(--danger)}.toast-info{border-left:3px solid var(--info)}.checkbox-wrapper{flex-shrink:0;width:24px;height:24px;position:relative}.checkbox-wrapper input{opacity:0;cursor:pointer;z-index:1;width:100%;height:100%;margin:0;position:absolute}.checkbox-visual{border:2px solid var(--text-tertiary);width:24px;height:24px;transition:all var(--duration-normal) var(--ease-default);pointer-events:none;border-radius:6px;justify-content:center;align-items:center;display:flex}.checkbox-wrapper input:checked+.checkbox-visual{background:var(--accent-gradient);border-color:var(--accent)}.checkbox-visual svg{stroke:#fff;stroke-width:3px;fill:none;opacity:0;width:14px;height:14px;transition:all var(--duration-normal) var(--ease-default);transform:scale(0)}.checkbox-wrapper input:checked+.checkbox-visual svg{opacity:1;transform:scale(1)}.tabs{background:var(--bg-tertiary);border-radius:var(--radius-md);gap:2px;padding:3px;display:flex}.tab{padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-sm);font-size:var(--fs-sm);font-weight:var(--fw-medium);color:var(--text-secondary);text-align:center;cursor:pointer;transition:all var(--duration-normal) var(--ease-default);-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;flex:1}.tab.active{background:var(--bg-elevated);color:var(--text-primary);box-shadow:var(--shadow-sm)}.tab:hover:not(.active){color:var(--text-primary)}.empty-state{padding:var(--sp-12) var(--sp-6);text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex}.empty-state svg{width:48px;height:48px;color:var(--text-tertiary);margin-bottom:var(--sp-4)}.empty-state-title{font-size:var(--fs-md);font-weight:var(--fw-semibold);color:var(--text-secondary);margin-bottom:var(--sp-2)}.empty-state-text{font-size:var(--fs-sm);color:var(--text-tertiary);max-width:240px}.progress-ring{transform:rotate(-90deg)}.progress-ring-bg{stroke:var(--bg-tertiary)}.progress-ring-fill{transition:stroke-dashoffset .6s var(--ease-default)}.badge{padding:2px var(--sp-2);border-radius:var(--radius-pill);font-size:var(--fs-xs);font-weight:var(--fw-semibold);align-items:center;line-height:1.4;display:inline-flex}.badge-accent{background:var(--accent-glow);color:var(--accent-light)}.badge-success{background:var(--success-bg);color:var(--success)}.badge-warning{background:var(--warning-bg);color:var(--warning)}.badge-danger{background:var(--danger-bg);color:var(--danger)}.metric-card{background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:var(--radius-lg);padding:var(--sp-4);gap:var(--sp-1);flex-direction:column;display:flex}.metric-value{font-size:var(--fs-2xl);font-weight:var(--fw-bold);line-height:var(--lh-tight)}.metric-label{font-size:var(--fs-xs);color:var(--text-secondary);font-weight:var(--fw-medium);text-transform:uppercase;letter-spacing:.06em}.metric-delta{font-size:var(--fs-xs);font-weight:var(--fw-semibold)}.metric-delta.positive{color:var(--success)}.metric-delta.negative{color:var(--danger)}.metrics-grid{gap:var(--sp-3);grid-template-columns:1fr 1fr;display:grid}@media (width>=768px){.metrics-grid-4{grid-template-columns:repeat(4,1fr)}}.page-header{margin-bottom:var(--sp-6)}.page-title{font-size:var(--fs-2xl);font-weight:var(--fw-bold);line-height:var(--lh-tight);margin-bottom:var(--sp-1)}.page-subtitle{font-size:var(--fs-sm);color:var(--text-secondary)}.dashboard{gap:var(--sp-5);flex-direction:column;display:flex}.dash-greeting-text{font-size:var(--fs-2xl);font-weight:var(--fw-bold);line-height:var(--lh-tight)}.dash-hero{gap:var(--sp-5);align-items:center;display:flex}.dash-ring-container{flex-shrink:0;width:128px;height:128px;position:relative}.dash-ring-label{flex-direction:column;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.dash-ring-pct{font-size:var(--fs-2xl);font-weight:var(--fw-extrabold);background:var(--accent-gradient);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;line-height:1}.dash-hero-stats{gap:var(--sp-2);flex:1;grid-template-columns:1fr 1fr;min-width:0;display:grid}.dash-hero-stats .metric-card{padding:var(--sp-3)}.dash-hero-stats .metric-value{font-size:var(--fs-xl)}.dash-week-bars{gap:var(--sp-2);height:80px;padding-top:var(--sp-2);align-items:flex-end;display:flex}.dash-week-day{align-items:center;gap:var(--sp-1);flex-direction:column;flex:1;display:flex}.dash-week-bar-track{border-radius:var(--radius-sm);background:var(--bg-tertiary);flex-direction:column;justify-content:flex-end;width:100%;height:56px;display:flex;overflow:hidden}.dash-week-bar-fill{background:var(--accent-gradient);border-radius:var(--radius-sm);width:100%;transition:height .4s var(--ease-default);min-height:0}.dash-week-label{font-size:var(--fs-xs);color:var(--text-tertiary);font-weight:var(--fw-medium);text-transform:capitalize}.dash-week-today .dash-week-label{color:var(--accent-light);font-weight:var(--fw-semibold)}.dash-week-today .dash-week-bar-track{border:1px solid var(--accent)}.dash-habits-list{gap:var(--sp-1);flex-direction:column;display:flex}.dash-habit-item{padding:var(--sp-2) 0;border-bottom:1px solid var(--glass-border);justify-content:space-between;align-items:center;display:flex}.dash-habit-item:last-child{border-bottom:none}.dash-habit-left{align-items:center;gap:var(--sp-3);min-width:0;display:flex}.dash-habit-color{border-radius:var(--radius-full);flex-shrink:0;width:8px;height:8px}.dash-habit-name{font-size:var(--fs-base);font-weight:var(--fw-medium);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.dash-habit-name.line-through{color:var(--text-tertiary);text-decoration:line-through}.dash-habit-check{width:32px;height:32px;color:var(--text-tertiary);cursor:pointer;border-radius:var(--radius-full);transition:all var(--duration-fast) var(--ease-default);-webkit-tap-highlight-color:transparent;background:0 0;border:none;justify-content:center;align-items:center;display:flex}.dash-habit-check:hover{background:var(--glass-bg)}.dash-habit-check.checked{color:var(--success)}.dash-habit-check svg{width:22px;height:22px}.dash-tasks-list{gap:var(--sp-1);flex-direction:column;display:flex}.dash-task-item{align-items:center;gap:var(--sp-3);padding:var(--sp-2) 0;border-bottom:1px solid var(--glass-border);display:flex}.dash-task-item:last-child{border-bottom:none}.dash-task-check{width:24px;height:24px;color:var(--text-tertiary);cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.dash-task-check svg{width:20px;height:20px}.dash-task-info{align-items:center;gap:var(--sp-2);flex:1;min-width:0;display:flex}.dash-task-title{font-size:var(--fs-base);font-weight:var(--fw-medium);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.dash-actions{gap:var(--sp-3);grid-template-columns:1fr 1fr;display:grid}.dash-actions .btn{justify-content:center;text-decoration:none}.dash-actions .btn svg{width:16px;height:16px}.habits-page{flex-direction:column;display:flex}.habits-progress-bar{background:var(--bg-tertiary);border-radius:var(--radius-pill);width:100%;height:6px;margin-bottom:var(--sp-1);overflow:hidden}.habits-progress-fill{background:var(--accent-gradient);border-radius:var(--radius-pill);height:100%;transition:width .4s var(--ease-default)}.habits-list{gap:var(--sp-3);flex-direction:column;display:flex}.habit-card{justify-content:space-between;align-items:center;gap:var(--sp-3);background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:var(--radius-lg);padding:var(--sp-3) var(--sp-4);transition:all var(--duration-normal) var(--ease-default);display:flex}.habit-card:hover{background:var(--glass-bg-hover)}.habit-card.habit-completed{opacity:.7}.habit-card-left{gap:var(--sp-2);border-left:3px solid var(--accent);min-width:0;padding-left:var(--sp-3);flex-direction:column;flex:1;display:flex}.habit-card-header{flex-direction:column;gap:1px;display:flex}.habit-card-name{font-size:var(--fs-base);font-weight:var(--fw-semibold);line-height:var(--lh-tight)}.habit-completed .habit-card-name{color:var(--text-tertiary);text-decoration:line-through}.habit-stepper{align-items:center;gap:var(--sp-2);display:flex}.habit-stepper-btn{border-radius:var(--radius-full);background:var(--bg-tertiary);border:1px solid var(--glass-border);width:28px;height:28px;color:var(--text-secondary);cursor:pointer;transition:all var(--duration-fast) var(--ease-default);-webkit-tap-highlight-color:transparent;justify-content:center;align-items:center;display:flex}.habit-stepper-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.habit-stepper-btn:active{transform:scale(.9)}.habit-stepper-value{font-size:var(--fs-base);font-weight:var(--fw-bold);text-align:center;min-width:40px;color:var(--accent-light)}.habit-check-btn{cursor:pointer;width:40px;height:40px;color:var(--text-tertiary);border-radius:var(--radius-full);transition:all var(--duration-normal) var(--ease-default);-webkit-tap-highlight-color:transparent;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.habit-check-btn:hover{background:var(--glass-bg)}.habit-check-btn.checked{color:var(--success)}.habit-check-btn:active{transform:scale(.85)}.habit-manage-card{gap:var(--sp-2);margin-bottom:var(--sp-2);flex-direction:column;display:flex}.habit-manage-top,.habit-manage-meta{align-items:center;gap:var(--sp-2);display:flex}.habit-manage-stats{gap:var(--sp-4);display:flex}.habit-manage-actions{gap:var(--sp-2);margin-top:var(--sp-1);display:flex}.habit-days-selector{gap:var(--sp-1);flex-wrap:wrap;display:flex}.habit-day-chip{padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-pill);background:var(--bg-tertiary);border:1px solid var(--glass-border);font-size:var(--fs-sm);font-weight:var(--fw-medium);color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--duration-fast) var(--ease-default);-webkit-tap-highlight-color:transparent}.habit-day-chip input{display:none}.habit-day-chip.selected{background:var(--accent-glow);border-color:var(--accent);color:var(--accent-light)}.habit-day-chip:has(input:checked){background:var(--accent-glow);border-color:var(--accent);color:var(--accent-light)}.date-navigator{justify-content:center;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-4);padding:var(--sp-2) 0;display:flex}.date-nav-btn{border-radius:var(--radius-full);background:var(--glass-bg);border:1px solid var(--glass-border);width:36px;height:36px;color:var(--text-secondary);cursor:pointer;transition:all var(--duration-fast) var(--ease-default);-webkit-tap-highlight-color:transparent;flex-shrink:0;justify-content:center;align-items:center;display:flex}.date-nav-btn:hover:not(.disabled){background:var(--glass-bg-hover);color:var(--text-primary)}.date-nav-btn:active:not(.disabled){transform:scale(.9)}.date-nav-btn.disabled{opacity:.3;cursor:not-allowed}.date-nav-center{align-items:center;gap:var(--sp-1);flex-direction:column;flex:1;min-width:0;display:flex;position:relative}.date-nav-label{justify-content:center;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-4);border:1px solid var(--glass-border);border-radius:var(--radius-md);cursor:pointer;color:var(--text-primary);font-size:var(--fs-base);font-weight:var(--fw-semibold);transition:all var(--duration-fast) var(--ease-default);-webkit-tap-highlight-color:transparent;background:0 0;width:100%;font-family:inherit;display:flex}.date-nav-label:hover{background:var(--glass-bg-hover)}.date-nav-label:active{transform:scale(.97)}.date-nav-label.date-nav-past{background:var(--accent-glow);border-color:var(--accent);color:var(--accent-light)}.date-picker-hidden{opacity:0;pointer-events:none;width:0;height:0;position:absolute}.date-nav-today-btn{padding:4px var(--sp-3);background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:var(--radius-pill);color:var(--accent-light);font-size:.65rem;font-weight:var(--fw-semibold);cursor:pointer;transition:all var(--duration-fast) var(--ease-default);-webkit-tap-highlight-color:transparent;text-transform:uppercase;letter-spacing:.04em;justify-content:center;align-items:center;gap:4px;font-family:inherit;display:flex}.date-nav-today-btn:hover{background:var(--accent-glow);border-color:var(--accent)}.date-nav-today-btn:active{transform:scale(.95)}.tasks-page{flex-direction:column;display:flex}.tasks-list{gap:var(--sp-2);flex-direction:column;display:flex}.task-card{align-items:center;gap:var(--sp-3);background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:var(--radius-lg);padding:var(--sp-3) var(--sp-4);transition:all var(--duration-normal) var(--ease-default);display:flex}.task-card:hover{background:var(--glass-bg-hover)}.task-card.task-done{opacity:.5}.task-card.task-overdue{border-left:3px solid var(--danger)}.task-check{cursor:pointer;width:28px;height:28px;color:var(--text-tertiary);transition:all var(--duration-fast) var(--ease-default);-webkit-tap-highlight-color:transparent;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.task-card.task-done .task-check{color:var(--success)}.task-check:active{transform:scale(.8)}.task-info{cursor:pointer;flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.task-title{font-size:var(--fs-base);font-weight:var(--fw-medium);line-height:var(--lh-tight)}.task-done .task-title{color:var(--text-tertiary);text-decoration:line-through}.task-meta{align-items:center;gap:var(--sp-2);flex-wrap:wrap;display:flex}.task-delete-btn{opacity:0;transition:opacity var(--duration-normal) var(--ease-default);color:var(--text-tertiary)}.task-card:hover .task-delete-btn{opacity:1}@media (width<=767px){.task-delete-btn{opacity:.5}}.task-card{align-items:flex-start}.task-check{margin-top:2px}.subtask-badge{font-size:.65rem;font-weight:var(--fw-semibold);color:var(--accent-light);background:var(--accent-glow);border-radius:var(--radius-pill);border:1px solid #6c5ce733;align-items:center;gap:3px;padding:1px 6px;display:inline-flex}.subtask-list{margin-top:var(--sp-2);flex-direction:column;gap:2px;padding-left:2px;display:flex}.subtask-item{align-items:center;gap:var(--sp-2);padding:2px 0;display:flex}.subtask-check{cursor:pointer;width:18px;height:18px;color:var(--text-tertiary);transition:all var(--duration-fast) var(--ease-default);-webkit-tap-highlight-color:transparent;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.subtask-item:not(.subtask-done) .subtask-check:hover{color:var(--accent-light)}.subtask-done .subtask-check{color:var(--success)}.subtask-check:active{transform:scale(.85)}.subtask-title{font-size:var(--fs-sm);color:var(--text-secondary);line-height:1.3}.subtask-done .subtask-title{color:var(--text-tertiary);text-decoration:line-through}.modal-subtasks-list{flex-direction:column;gap:2px;max-height:200px;display:flex;overflow-y:auto}.modal-subtask-item{justify-content:space-between;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:var(--bg-tertiary);border-radius:var(--radius-md);display:flex}.subtask-add-row{gap:var(--sp-2);margin-top:var(--sp-2);display:flex}.subtask-add-row .form-input{flex:1}.analytics-page{flex-direction:column;display:flex}.analytics-sections{gap:var(--sp-5);flex-direction:column;display:flex}.analytics-period-bar{gap:var(--sp-2);padding:var(--sp-1) 0;-webkit-overflow-scrolling:touch;scrollbar-width:none;display:flex;overflow-x:auto}.analytics-period-bar::-webkit-scrollbar{display:none}.period-chip{padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-pill);background:var(--glass-bg);border:1px solid var(--glass-border);color:var(--text-secondary);font-size:var(--fs-sm);font-weight:var(--fw-medium);cursor:pointer;white-space:nowrap;transition:all var(--duration-fast) var(--ease-default);-webkit-tap-highlight-color:transparent;flex-shrink:0;font-family:inherit}.period-chip:hover{background:var(--glass-bg-hover);color:var(--text-primary)}.period-chip.active{background:var(--accent-glow);border-color:var(--accent);color:var(--accent-light);font-weight:var(--fw-semibold)}.custom-range{align-items:flex-end;gap:var(--sp-3);padding:var(--sp-3);background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:var(--radius-lg);margin-top:var(--sp-2);display:flex}.custom-range-field{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.form-input-sm{padding:var(--sp-2) var(--sp-3);font-size:var(--fs-sm)}.chart-container{width:100%;height:220px;position:relative}.chart-container-sm{height:180px}.heatmap{gap:var(--sp-2);padding:var(--sp-2) 0;display:flex;overflow-x:auto}.heatmap-days{flex-direction:column;flex-shrink:0;gap:3px;padding-top:0;display:flex}.heatmap-day-label{height:14px;color:var(--text-tertiary);width:24px;font-size:.6rem;line-height:14px}.heatmap-grid{flex:1;gap:3px;display:flex}.heatmap-week{flex-direction:column;gap:3px;display:flex}.heatmap-cell{width:14px;height:14px;transition:all var(--duration-fast) var(--ease-default);cursor:default;border-radius:3px}.heatmap-cell-empty{background:0 0}.heatmap-level-0{background:var(--bg-tertiary)}.heatmap-level-1{background:#6c5ce733}.heatmap-level-2{background:#6c5ce766}.heatmap-level-3{background:#6c5ce799}.heatmap-level-4{background:#6c5ce7d9}.heatmap-today{outline:2px solid var(--accent-light);outline-offset:1px}.heatmap-cell:hover{transform:scale(1.3)}.heatmap-legend{align-items:center;gap:var(--sp-1);padding-top:var(--sp-2);justify-content:flex-end;display:flex}.habit-ranking{gap:var(--sp-3);flex-direction:column;display:flex}.habit-rank-item{align-items:center;gap:var(--sp-3);display:flex}.habit-rank-info{align-items:center;gap:var(--sp-2);flex-shrink:0;width:30%;min-width:100px;display:flex}.habit-rank-bar-container{background:var(--bg-tertiary);border-radius:var(--radius-pill);flex:1;height:8px;overflow:hidden}.habit-rank-bar{border-radius:var(--radius-pill);height:100%;transition:width .6s var(--ease-default);min-width:2px}.settings-page{gap:var(--sp-5);flex-direction:column;display:flex}.settings-stats{gap:var(--sp-3);flex-direction:column;display:flex}.settings-stat{align-items:center;gap:var(--sp-3);font-size:var(--fs-base);color:var(--text-secondary);display:flex}.settings-tags{gap:var(--sp-2);flex-wrap:wrap;display:flex}.settings-tag{align-items:center;gap:var(--sp-1);padding:var(--sp-1) var(--sp-3);background:var(--bg-tertiary);border:1px solid var(--glass-border);border-radius:var(--radius-pill);font-size:var(--fs-sm);color:var(--text-secondary);display:inline-flex}.settings-tag-remove{width:18px;height:18px;color:var(--text-tertiary);cursor:pointer;border-radius:var(--radius-full);transition:all var(--duration-fast) var(--ease-default);background:0 0;border:none;justify-content:center;align-items:center;font-size:14px;line-height:1;display:flex}.settings-tag-remove:hover{background:var(--danger-bg);color:var(--danger)}.settings-actions{gap:var(--sp-3);flex-direction:column;display:flex}.settings-about{text-align:center;padding:var(--sp-2)}.login-page{min-height:100vh;padding:var(--sp-4);background:var(--bg-primary);background-image:radial-gradient(at 20%,#6c5ce714 0%,#0000 60%),radial-gradient(at 80% 20%,#a78bfa0f 0%,#0000 50%);justify-content:center;align-items:center;display:flex}.login-card{background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:var(--radius-xl);width:100%;max-width:400px;padding:var(--sp-8);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);animation:fade-in-up var(--duration-normal) var(--ease-default)}.login-header{text-align:center;margin-bottom:var(--sp-6)}.login-logo{font-size:2.5rem;font-weight:var(--fw-bold);background:var(--accent-gradient);-webkit-text-fill-color:transparent;letter-spacing:-.03em;margin-bottom:var(--sp-1);-webkit-background-clip:text;background-clip:text}.login-subtitle{color:var(--text-secondary);font-size:var(--fs-sm)}.login-tabs{gap:var(--sp-1);background:var(--bg-secondary);border-radius:var(--radius-md);margin-bottom:var(--sp-5);padding:3px;display:flex}.login-tab{padding:var(--sp-2) 0;color:var(--text-secondary);font-size:var(--fs-sm);font-weight:var(--fw-medium);cursor:pointer;border-radius:var(--radius-sm);transition:all var(--duration-fast) var(--ease-default);-webkit-tap-highlight-color:transparent;background:0 0;border:none;flex:1;font-family:inherit}.login-tab.active{background:var(--accent-glow);color:var(--accent-light);font-weight:var(--fw-semibold)}.login-tab:hover:not(.active){color:var(--text-primary)}.login-form{gap:var(--sp-4);flex-direction:column;display:flex}.login-btn{width:100%;padding:var(--sp-3);font-size:var(--fs-base);font-weight:var(--fw-semibold);margin-top:var(--sp-2);justify-content:center;align-items:center;gap:var(--sp-2);min-height:48px;display:flex}.login-btn:disabled{opacity:.7;cursor:not-allowed}.login-error{padding:var(--sp-3);border-radius:var(--radius-md);color:var(--danger);font-size:var(--fs-sm);text-align:center;background:#ef44441a;border:1px solid #ef44444d}.login-error.login-success{color:var(--success);background:#22c55e1a;border-color:#22c55e4d}.login-spinner{border:2px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:20px;height:20px;animation:.6s linear infinite spin}
