:root{--ink: #1d2433;--muted: #667085;--paper: #f6f7f9;--card: #ffffff;--line: #d9dde5;--brand: #1f5eff;--danger: #c0352b;--todo: #8a94a6;--in_progress: #e0a100;--done: #1f9d62;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--ink)}*{box-sizing:border-box}body{margin:0;background:var(--paper)}.page{max-width:760px;margin:0 auto;padding:40px 20px 80px}h1{margin:0;font-size:2rem;letter-spacing:-.02em}.sub,.muted{color:var(--muted)}.add{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;margin:24px 0 16px}input,select,button{font:inherit;padding:9px 12px;border:1px solid var(--line);border-radius:6px;background:var(--card);color:inherit}button{cursor:pointer}button:hover{border-color:var(--ink)}:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.primary{background:var(--brand);border-color:var(--brand);color:#fff}.primary:hover{border-color:var(--brand);filter:brightness(1.08)}.danger{color:var(--danger)}.filters{display:flex;gap:6px;margin-bottom:16px;flex-wrap:wrap}.chip{border-radius:999px;padding:5px 14px;font-size:.9rem}.chip.active{background:var(--ink);color:#fff;border-color:var(--ink)}.error{background:#fdecea;color:var(--danger);border:1px solid #f5c2be;padding:10px 12px;border-radius:6px;margin-bottom:12px}.list{list-style:none;padding:0;margin:0;display:grid;gap:8px}.task{display:flex;justify-content:space-between;align-items:center;gap:12px;background:var(--card);border:1px solid var(--line);border-left:4px solid var(--todo);border-radius:6px;padding:12px 14px}.task.in_progress{border-left-color:var(--in_progress)}.task.done{border-left-color:var(--done)}.task.done strong{text-decoration:line-through;color:var(--muted)}.body{display:flex;flex-direction:column;gap:2px;min-width:0}.desc{color:var(--muted);font-size:.9rem}.actions{display:flex;gap:6px;flex-shrink:0}.edit{display:grid;gap:8px;width:100%}@media (max-width: 640px){.add{grid-template-columns:1fr}.task{flex-direction:column;align-items:stretch}.actions{flex-wrap:wrap}}@media (prefers-reduced-motion: no-preference){button{transition:border-color .15s,filter .15s}}
