:root{
  --bg:#0f1216; --panel:#171c22; --panel2:#1e252d; --line:#2a333d;
  --fg:#e7edf3; --muted:#8b98a6; --accent:#4da3ff; --accent2:#2b7fd4;
  --ok:#3fbf7f; --warn:#ffb020; --bad:#ff5c5c; --radius:14px;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{
  background:radial-gradient(1200px 700px at 70% -10%,#1a2430 0%,var(--bg) 55%) fixed;
  color:var(--fg); font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Ubuntu,sans-serif;
  -webkit-font-smoothing:antialiased;
}
.boot{padding:40px;color:var(--muted)}
a{color:var(--accent)}
button{
  font:inherit; cursor:pointer; border:1px solid var(--line); background:var(--panel2);
  color:var(--fg); padding:9px 14px; border-radius:10px; transition:.15s;
}
button:hover{background:#26303a;border-color:#37424e}
button.primary{background:var(--accent2); border-color:var(--accent2); color:#fff}
button.primary:hover{background:var(--accent)}
button.ghost{background:transparent}
button.small{padding:5px 9px;font-size:13px;border-radius:8px}
button.danger{color:var(--bad);border-color:#3a2626}
input,textarea,select{
  font:inherit; color:var(--fg); background:var(--panel2); border:1px solid var(--line);
  border-radius:10px; padding:9px 11px; width:100%;
}
textarea{resize:vertical;min-height:70px}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent)}

/* ---- auth ---- */
.auth{max-width:380px;margin:9vh auto;padding:28px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius)}
.auth h1{margin:0 0 4px;font-size:24px}
.auth p{color:var(--muted);margin:0 0 20px}
.auth label{display:block;font-size:13px;color:var(--muted);margin:12px 0 6px}
.auth button{width:100%;margin-top:18px}
.err{color:var(--bad);font-size:13px;margin-top:12px;min-height:18px}

/* ---- layout ---- */
.wrap{max-width:920px;margin:0 auto;padding:18px 16px 90px}
header.top{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px}
header.top .title{font-size:20px;font-weight:700}
header.top .spacer{flex:1}
.clock{color:var(--muted);font-size:13px}
.tabs{display:flex;gap:6px;margin-bottom:16px;background:var(--panel);padding:5px;border-radius:12px;border:1px solid var(--line)}
.tabs button{flex:1;border:none;background:transparent}
.tabs button.active{background:var(--accent2);color:#fff}

.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px;margin-bottom:14px}
.card h2{margin:0 0 12px;font-size:16px}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.muted{color:var(--muted)}
.small{font-size:13px}

.datebar{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.datebar .lbl{font-weight:600}
.badge{font-size:12px;padding:2px 8px;border-radius:999px;background:var(--panel2);border:1px solid var(--line);color:var(--muted)}

.banner{padding:11px 14px;border-radius:12px;margin-bottom:14px;font-size:14px;border:1px solid}
.banner.ok{background:#12261c;border-color:#1f4a34;color:#a8e6c4}
.banner.bad{background:#2a1717;border-color:#4a2626;color:#ffb3b3}

.item{display:flex;gap:12px;align-items:flex-start;padding:10px 0;border-bottom:1px solid var(--line)}
.item:last-child{border-bottom:none}
.item .t{min-width:52px;font-variant-numeric:tabular-nums;color:var(--accent);font-weight:600;font-size:14px;padding-top:2px}
.item .body{flex:1}
.item .ttl{font-size:15px}
.item.done .ttl{text-decoration:line-through;color:var(--muted)}
.item .kind{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.chk{width:22px;height:22px;border-radius:7px;border:1px solid var(--line);background:var(--panel2);display:flex;align-items:center;justify-content:center;cursor:pointer;flex:0 0 auto;margin-top:1px}
.chk.on{background:var(--ok);border-color:var(--ok);color:#06210f}
.item .acts{display:flex;gap:6px}
.item .acts button{opacity:.5}
.item:hover .acts button{opacity:1}

.routine{display:flex;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px dashed var(--line);font-size:14px}
.routine:last-child{border-bottom:none}
.routine .d{color:var(--muted);font-size:13px;text-align:right;max-width:55%}

.proj{margin-bottom:16px}
.proj h3{margin:0 0 8px;font-size:15px;display:flex;gap:8px;align-items:center}
.task{display:flex;gap:10px;align-items:center;padding:6px 0}
.task .ttl{flex:1}
.task .ttl.strike{text-decoration:line-through;color:var(--muted)}
.hard{color:var(--warn);font-weight:700}
.dl{font-size:12px;color:var(--muted)}
.addrow{display:flex;gap:6px;margin-top:8px}
.addrow input{flex:1}

pre.out{white-space:pre-wrap;word-break:break-word;background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:14px;font:13px/1.55 ui-monospace,Menlo,Consolas,monospace;max-height:60vh;overflow:auto}
.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:#26303a;border:1px solid var(--line);padding:10px 16px;border-radius:10px;opacity:0;transition:.2s;pointer-events:none;z-index:50}
.toast.show{opacity:1}
.spin{display:inline-block;width:14px;height:14px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:sp .7s linear infinite;vertical-align:-2px}
@keyframes sp{to{transform:rotate(360deg)}}
@media(max-width:520px){.routine .d{max-width:48%}}
