*,*:before,*:after{box-sizing:border-box}body{margin:0;font-family:system-ui,sans-serif;background:#f5f5f5;color:#222}.app{max-width:600px;margin:48px auto;padding:0 16px}h1{font-size:2rem;margin-bottom:24px}.todo-form{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}.input-description{flex:1 1 200px;padding:10px 12px;font-size:1rem;border:1px solid #ccc;border-radius:6px}.input-due-date{padding:10px 12px;font-size:.9rem;border:1px solid #ccc;border-radius:6px}button[type=submit]{padding:10px 20px;font-size:1rem;background:#4a90d9;color:#fff;border:none;border-radius:6px;cursor:pointer}button[type=submit]:disabled{opacity:.5;cursor:not-allowed}button[type=submit]:hover:not(:disabled){background:#357abd}.todo-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.todo-item{display:flex;align-items:center;gap:12px;background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:12px 16px;cursor:pointer;transition:background .15s,opacity .15s}.todo-item:hover:not(.completed){background:#f0f7ff}.todo-item.completed{opacity:.5;cursor:default;text-decoration:line-through}.todo-check{font-size:1.2rem;color:#4a90d9;flex-shrink:0}.todo-description{flex:1;font-size:1rem}.todo-due{font-size:.8rem;color:#888;flex-shrink:0}.error{color:#c0392b;margin-bottom:16px}.empty,.loading{color:#888;text-align:center;margin-top:32px}
