*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{color:#111827;-webkit-font-smoothing:antialiased;background:#f3faf3;min-height:100vh;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}#root{width:100%}:root{--green:#16a34a;--green-dark:#15803d;--green-light:#f0fdf4;--green-border:#bbf7d0;--green-mid:#86efac;--white:#fff;--text:#111827;--text-muted:#6b7280;--border:#e5e7eb;--danger:#dc2626;--danger-light:#fef2f2;--danger-border:#fecaca;--shadow-sm:0 1px 3px #00000014, 0 1px 2px #0000000a;--shadow:0 4px 14px #00000014, 0 2px 4px #0000000a;--radius:12px}.header{background:linear-gradient(135deg,#16a34a 0%,#15803d 100%);padding:28px 24px;box-shadow:0 2px 12px #16a34a4d}.header-inner{align-items:center;gap:18px;max-width:740px;margin:0 auto;display:flex}.header-logo{color:#fff;background:#fff3;border:1.5px solid #ffffff4d;border-radius:14px;flex-shrink:0;justify-content:center;align-items:center;width:54px;height:54px;font-size:26px;font-weight:700;display:flex}.header-title{color:#fff;letter-spacing:-.4px;font-size:26px;font-weight:700;line-height:1.2}.header-sub{color:#ffffffb3;margin-top:3px;font-size:14px}.main{max-width:740px;margin:0 auto;padding:32px 20px 72px}.stats{color:var(--text-muted);align-items:center;gap:8px;margin-bottom:18px;font-size:13.5px;font-weight:500;display:flex}.stats-dot{color:var(--border);font-size:18px;line-height:1}.stats-done{color:var(--green)}.stats-todo{color:#b45309}.todo-form{background:var(--white);border:1.5px solid var(--green-border);border-radius:var(--radius);box-shadow:var(--shadow-sm);margin-bottom:28px;padding:24px}.todo-form-heading{color:var(--green-dark);align-items:center;gap:8px;margin-bottom:16px;font-size:15px;font-weight:700;display:flex}.form-error{color:var(--danger);margin-bottom:8px;font-size:13px}.form-fields{flex-direction:column;gap:10px;display:flex}.form-input{border:1.5px solid var(--border);width:100%;color:var(--text);background:#fff;border-radius:8px;outline:none;padding:11px 14px;font-family:inherit;font-size:15px;transition:border-color .15s,box-shadow .15s}.form-input:focus{border-color:var(--green);box-shadow:0 0 0 3px #16a34a1f}.form-input::placeholder{color:#9ca3af}.form-input:disabled{cursor:not-allowed;background:#f9fafb}.form-submit{background:var(--green);color:#fff;cursor:pointer;letter-spacing:.2px;border:none;border-radius:8px;width:100%;margin-top:2px;padding:12px;font-family:inherit;font-size:15px;font-weight:600;transition:background .15s,transform .1s,box-shadow .15s}.form-submit:hover:not(:disabled){background:var(--green-dark);box-shadow:0 2px 8px #16a34a4d}.form-submit:active:not(:disabled){transform:scale(.985)}.form-submit:disabled{opacity:.55;cursor:not-allowed}.spinner-wrap{flex-direction:column;align-items:center;gap:16px;padding:60px 0;display:flex}.spinner{border:4px solid var(--green-border);border-top-color:var(--green);border-radius:50%;width:46px;height:46px;animation:.75s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.spinner-label{color:var(--text-muted);font-size:14px}.error-banner{background:var(--danger-light);border:1px solid var(--danger-border);border-radius:var(--radius);color:var(--danger);justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px;padding:14px 18px;font-size:14px;display:flex}.retry-btn{background:var(--danger);color:#fff;cursor:pointer;white-space:nowrap;border:none;border-radius:6px;padding:7px 16px;font-family:inherit;font-size:13px;font-weight:600;transition:background .15s}.retry-btn:hover{background:#b91c1c}.empty-state{text-align:center;color:var(--text-muted);padding:64px 24px}.empty-icon{margin-bottom:14px;font-size:52px}.empty-text{font-size:16px;line-height:1.5}.empty-hint{color:#9ca3af;margin-top:6px;font-size:13px}.todo-list{flex-direction:column;gap:12px;list-style:none;display:flex}.todo-card{background:var(--white);border:1px solid var(--border);border-left:4px solid var(--green);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:18px 18px 14px;transition:box-shadow .15s,transform .15s}.todo-card:hover{box-shadow:var(--shadow);transform:translateY(-1px)}.todo-card.completed{background:var(--green-light);border-color:var(--green-border);border-left-color:var(--green-mid)}.todo-card-top{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:8px;display:flex}.todo-left{flex:1;align-items:flex-start;gap:12px;min-width:0;display:flex}.todo-checkbox{appearance:none;border:2px solid var(--border);cursor:pointer;background:#fff;border-radius:5px;flex-shrink:0;width:20px;height:20px;margin-top:2px;transition:border-color .15s,background .15s;position:relative}.todo-checkbox:hover:not(:disabled){border-color:var(--green)}.todo-checkbox:checked{background:var(--green);border-color:var(--green)}.todo-checkbox:checked:after{content:"";border:2.5px solid #fff;border-top:none;border-left:none;width:7px;height:11px;position:absolute;top:1px;left:4px;transform:rotate(45deg)}.todo-checkbox:disabled{cursor:not-allowed;opacity:.5}.todo-title{color:var(--text);word-break:break-word;padding-top:1px;font-size:15.5px;font-weight:600;line-height:1.45}.todo-title.done{color:var(--text-muted);font-weight:500;text-decoration:line-through}.delete-btn{border:1px solid var(--border);cursor:pointer;width:32px;height:32px;color:var(--text-muted);background:0 0;border-radius:7px;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;transition:background .15s,border-color .15s,color .15s;display:flex}.delete-btn:hover:not(:disabled){background:var(--danger-light);border-color:var(--danger-border);color:var(--danger)}.delete-btn:disabled{opacity:.4;cursor:not-allowed}.todo-desc{color:var(--text-muted);word-break:break-word;margin-bottom:12px;padding-left:32px;font-size:14px;line-height:1.55}.todo-footer{justify-content:space-between;align-items:center;padding-left:32px;display:flex}.todo-date{color:#9ca3af;font-size:12px}.todo-badge{letter-spacing:.5px;text-transform:uppercase;border-radius:20px;padding:3px 9px;font-size:11px;font-weight:700}.badge-done{color:#15803d;background:#dcfce7}.badge-pending{color:#92400e;background:#fef9c3}.header-inner{justify-content:flex-start}.header-text{flex:1}.logout-btn{color:#fff;cursor:pointer;white-space:nowrap;background:#ffffff2e;border:1.5px solid #fff6;border-radius:8px;flex-shrink:0;margin-left:auto;padding:8px 18px;font-family:inherit;font-size:14px;font-weight:600;transition:background .15s}.logout-btn:hover{background:#ffffff4d}.auth-page{background:linear-gradient(145deg,#f0fdf4 0%,#dcfce7 50%,#bbf7d0 100%);justify-content:center;align-items:center;min-height:100vh;padding:24px 16px;display:flex}.auth-card{border:1.5px solid var(--green-border);background:#fff;border-radius:18px;width:100%;max-width:420px;padding:40px 36px;box-shadow:0 8px 32px #16a34a21,0 2px 8px #0000000f}.auth-card--wide{max-width:460px}.auth-logo-badge{color:#fff;background:linear-gradient(135deg,#16a34a,#15803d);border-radius:16px;justify-content:center;align-items:center;width:60px;height:60px;margin:0 auto 20px;font-size:28px;font-weight:700;display:flex;box-shadow:0 4px 12px #16a34a59}.auth-title{text-align:center;color:var(--text);margin-bottom:6px;font-size:22px;font-weight:700;line-height:1.2}.auth-sub{text-align:center;color:var(--text-muted);margin-bottom:28px;font-size:14px}.auth-form{flex-direction:column;gap:16px;display:flex}.field-group{flex-direction:column;gap:5px;display:flex}.field-label{color:var(--text);font-size:13.5px;font-weight:600}.field-input{border:1.5px solid var(--border);width:100%;color:var(--text);box-sizing:border-box;background:#fff;border-radius:8px;outline:none;padding:11px 14px;font-family:inherit;font-size:15px;transition:border-color .15s,box-shadow .15s}.field-input:focus{border-color:var(--green);box-shadow:0 0 0 3px #16a34a1f}.field-input--err{border-color:var(--danger)}.field-input--err:focus{box-shadow:0 0 0 3px #dc26261a}.field-input:disabled{cursor:not-allowed;background:#f9fafb}.field-input::placeholder{color:#9ca3af}.field-error{color:var(--danger);align-items:center;gap:4px;margin-top:1px;font-size:12.5px;display:flex}.auth-api-error{background:var(--danger-light);border:1px solid var(--danger-border);color:var(--danger);border-radius:8px;margin-bottom:4px;padding:12px 14px;font-size:14px}.auth-btn{background:var(--green);color:#fff;cursor:pointer;letter-spacing:.2px;border:none;border-radius:8px;width:100%;margin-top:4px;padding:12px;font-family:inherit;font-size:15px;font-weight:600;transition:background .15s,transform .1s,box-shadow .15s}.auth-btn:hover:not(:disabled){background:var(--green-dark);box-shadow:0 2px 8px #16a34a4d}.auth-btn:active:not(:disabled){transform:scale(.985)}.auth-btn:disabled{opacity:.55;cursor:not-allowed}.auth-switch{text-align:center;color:var(--text-muted);margin-top:22px;font-size:14px}.auth-switch a{color:var(--green);font-weight:600;text-decoration:none}.auth-switch a:hover{text-decoration:underline}.strength-wrap{margin-top:8px}.strength-bar{background:var(--border);border-radius:4px;height:5px;margin-bottom:5px;overflow:hidden}.strength-fill{border-radius:4px;height:100%;transition:width .35s,background .35s}.strength--weak .strength-fill,.strength-fill.strength--weak{background:var(--danger)}.strength-fill.strength--medium{background:#f59e0b}.strength-fill.strength--strong{background:var(--green)}.strength-label{font-size:12px;font-weight:600}.strength-label.strength--weak{color:var(--danger)}.strength-label.strength--medium{color:#b45309}.strength-label.strength--strong{color:var(--green)}.rules-list{background:var(--green-light);border:1px solid var(--green-border);border-radius:8px;flex-direction:column;gap:3px;margin-top:8px;padding:10px 12px;list-style:none;display:flex}.rule{align-items:center;gap:7px;font-size:12.5px;line-height:1.5;transition:color .15s;display:flex}.rule--pass{color:var(--green-dark)}.rule--fail{color:var(--text-muted)}.rule-icon{text-align:center;flex-shrink:0;width:14px;font-size:13px;font-weight:700}.rule--pass .rule-icon{color:var(--green)}.rule--fail .rule-icon{color:#d1d5db}@media (width<=600px){.header{padding:20px 16px}.header-title{font-size:22px}.main{padding:20px 14px 60px}.todo-form{padding:18px}.auth-card{padding:28px 20px}}
