:root{--ink:#1c1220;--paper:#2a1a2c;--paper-2:#3a2438;--text:#f6eee8;--muted:#b0949c;--line:#4a3048;--coral:#e07080;--coral-dim:#e0708029;--blush:#f0a8b0;--today:#f0b070;--today-dim:#f0b07029;--week:#d4a0e0;--week-dim:#d4a0e029;--later:#8aa8c4;--later-dim:#8aa8c424;--danger:#e07070;--ok:#7cba86;--ok-dim:#7cba8624;--focus-ring:#e0708061;color:var(--text);background:var(--ink);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-family:Iowan Old Style,Palatino,Georgia,serif;line-height:1.5}*{box-sizing:border-box}body{background:radial-gradient(780px 360px at 92% -8%, #e0708029, transparent 54%), radial-gradient(600px 300px at 8% 0%, #d4a0e01a, transparent 50%), var(--ink);min-width:320px;min-height:100vh;margin:0}#root{min-height:100vh}button,input,select,textarea{font-family:inherit}button{cursor:pointer;font-family:Segoe UI,Avenir Next,system-ui,sans-serif}input,select,textarea{color:var(--text)}.app{width:min(640px,100% - 28px);margin:0 auto;padding:26px 0 72px}.top{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.brand{align-items:center;gap:12px;display:flex}.mark{flex:none;width:48px;height:48px}h1{letter-spacing:-.03em;margin:0;font-size:1.85rem;font-weight:750}.tag{color:var(--coral);margin:2px 0 0;font-family:Segoe UI,Avenir Next,system-ui,sans-serif;font-size:.98rem;font-weight:650}.tools{z-index:20;flex-wrap:wrap;gap:8px;display:flex;position:relative}.ghost,.tiny,.solid{color:var(--text);border:1px solid var(--line);background:0 0;border-radius:999px;padding:7px 14px;font-size:.86rem}.ghost:hover,.tiny:hover{background:var(--paper)}.ghost.danger,.tiny.danger{color:var(--danger)}.ghost.warn,.tiny.warn{color:var(--danger);background:#e070701f;border-color:#e0707073}.ghost:disabled,.tiny:disabled,.solid:disabled{opacity:.4;cursor:not-allowed}.solid{background:var(--coral);border-color:var(--coral);color:#1a0c10;font-weight:700}.solid:hover:not(:disabled){filter:brightness(1.05)}.solid.wide{width:100%;min-height:48px;font-size:1.02rem}.tiny{padding:4px 10px;font-size:.74rem}.tiny.keep{color:var(--ok);border-color:#7cba8666}.tiny.open{color:var(--today);border-color:#f0b07066}.blurb{color:var(--muted);margin:14px 0 0;font-size:.92rem}.empty{color:var(--muted);margin:0;font-size:.92rem}.notice{background:var(--coral-dim);color:var(--blush);border:1px solid #e0708066;border-radius:12px;margin:14px 0 0;padding:10px 14px;font-size:.92rem}.notice.ok{background:var(--ok-dim);color:var(--ok);border-color:#7cba8659}button.notice{text-align:left;cursor:pointer;width:100%;display:block}.kicker{text-transform:uppercase;letter-spacing:.14em;color:var(--coral);margin:0 0 10px;font-family:Segoe UI,Avenir Next,system-ui,sans-serif;font-size:.72rem}.counts{flex-wrap:wrap;gap:8px;margin:16px 0 0;padding:0;list-style:none;display:flex}.counts li{border:1px solid var(--line);background:var(--paper);color:var(--muted);border-radius:999px;padding:6px 12px;font-family:Segoe UI,Avenir Next,system-ui,sans-serif;font-size:.82rem}.counts strong{font-variant-numeric:tabular-nums;color:var(--text);margin-right:4px}.counts .open{color:var(--blush);border-color:#e0708073}.counts .due{color:var(--today);border-color:#f0b07073}.counts .kept{color:var(--ok);border-color:#7cba8666}.resurface{background:var(--today-dim);border:1px solid #f0b07066;border-radius:14px;margin-top:16px;padding:12px 14px}.resurface p{color:var(--today);margin:0;font-size:.86rem}.resurface ul{color:var(--text);margin:8px 0 0;padding:0 0 0 18px}.composer{background:var(--paper);border:1px solid var(--line);border-radius:16px;margin-top:22px;padding:16px}.hint{color:var(--muted);margin:0;font-size:.8rem}.hint.tight{margin:-4px 0 10px}.gate-form{gap:10px;display:grid}.gate-form label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);gap:4px;font-family:Segoe UI,Avenir Next,system-ui,sans-serif;font-size:.72rem;display:grid}input[type=text],textarea{background:var(--paper-2);border:1px solid var(--line);width:100%;min-width:0;color:var(--text);resize:vertical;border-radius:12px;padding:9px 12px;font-size:1rem}.chips{flex-wrap:wrap;gap:8px;display:flex}.chip{background:var(--paper-2);color:var(--text);border:1px solid var(--line);border-radius:999px;padding:6px 12px;font-size:.84rem}.chip.on{font-weight:700}.chip.today.on{color:var(--today);background:var(--today-dim);border-color:#f0b0708c}.chip.week.on{color:var(--week);background:var(--week-dim);border-color:#d4a0e08c}.chip.later.on{color:var(--later);background:var(--later-dim);border-color:#8aa8c48c}.section{margin-top:28px}.section-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px;margin-bottom:12px;display:flex}.section-head .kicker{margin:0}.list{gap:10px;margin:0;padding:0;list-style:none;display:grid}.card{border:1px solid var(--line);background:var(--paper);border-radius:14px;grid-template-columns:1fr auto;align-items:center;gap:12px;padding:12px 14px;display:grid}.card.kept{opacity:.82}.card h2{margin:0;font-size:1.12rem;font-weight:700}.card.kept h2{color:var(--muted);text-decoration:line-through}.meta{flex-wrap:wrap;align-items:center;gap:8px;margin:4px 0 0;display:flex}.who{color:var(--blush);margin:0;font-size:.86rem}.badge{border:1px solid var(--line);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);border-radius:999px;width:fit-content;margin:0;padding:2px 8px;font-family:Segoe UI,Avenir Next,system-ui,sans-serif;font-size:.68rem;display:inline-block}.badge.today{color:var(--today);border-color:#f0b07073}.badge.week{color:var(--week);border-color:#d4a0e073}.badge.later{color:var(--later);border-color:#8aa8c473}.badge.kept{color:var(--ok);border-color:#7cba8666}.badge.open{color:var(--blush);border-color:#e0708066}.row-actions{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.empty-bar{width:100%;min-height:72px;color:var(--danger);cursor:pointer;z-index:50;background:#e0707029;border:1px solid #e0707073;border-radius:12px;margin:14px 0 0;font-size:1.05rem;font-weight:650;display:block;position:relative}.foot{color:var(--muted);margin-top:22px;font-size:.8rem}button:focus,input:focus,textarea:focus{border-color:var(--coral);box-shadow:0 0 0 3px var(--focus-ring);outline:none}
