/* ── Reset ──────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html{height:100%;font-size:16px}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  background:#0f172a;color:#f1f5f9;min-height:100vh;overscroll-behavior:none}
button{cursor:pointer;font-family:inherit;border:none;background:none;color:inherit}
input,select,textarea{font-family:inherit;font-size:1rem;color:inherit}
details>summary{list-style:none}
details>summary::-webkit-details-marker{display:none}

/* ── Shell ──────────────────────────────────────────── */
.app{max-width:520px;margin:0 auto;min-height:100vh;position:relative}

/* ── App bar ────────────────────────────────────────── */
.app-bar{
  background:linear-gradient(160deg,#1e1b4b 0%,#1e293b 100%);
  position:sticky;top:0;z-index:50;padding:14px 14px 0;
  border-bottom:1px solid #334155;
}
.bar-top{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.app-name{
  font-size:1.4rem;font-weight:800;letter-spacing:-.5px;
  background:linear-gradient(135deg,#818cf8,#c084fc);
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}
.bar-date{font-size:.75rem;color:#64748b;flex:1}
.bar-btn{width:38px;height:38px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:1rem;transition:background .15s}
.bar-btn:hover{background:#334155}
.view-title{font-size:1.1rem;font-weight:700;color:#c084fc;padding:0 2px 12px}

/* ── Search ─────────────────────────────────────────── */
.search-wrap{
  display:flex;align-items:center;gap:8px;
  background:#0f172a;border:1.5px solid #334155;border-radius:12px;
  padding:9px 12px;margin-bottom:8px;
  transition:border-color .15s;
}
.search-wrap:focus-within{border-color:#6366f1}
.search-icon{font-size:.95rem;flex-shrink:0;opacity:.5}
.search-input{flex:1;background:none;border:none;outline:none;font-size:.9rem;color:#f1f5f9}
.search-input::placeholder{color:#475569}
.search-clear{color:#475569;font-size:.85rem;padding:2px 6px;border-radius:6px}
.search-clear:hover{background:#334155;color:#f1f5f9}

/* NL preview in header */
.nl-preview{
  font-size:.78rem;background:#1e1b4b;border:1px solid #4338ca;
  border-radius:8px;padding:6px 10px;margin-bottom:8px;color:#a5b4fc;
}

/* ── Stats ──────────────────────────────────────────── */
.stats-row{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px;min-height:22px}
.chip{font-size:.72rem;font-weight:600;padding:3px 10px;border-radius:20px;
  background:#1e293b;border:1px solid #334155;color:#94a3b8}
.chip.danger{background:#450a0a;border-color:#991b1b;color:#fca5a5}
.chip.today-chip{background:#0c2340;border-color:#1d4ed8;color:#93c5fd}

/* ── Filter tabs ─────────────────────────────────────── */
.filter-tabs{display:flex;gap:4px;overflow-x:auto;padding-bottom:12px;scrollbar-width:none}
.filter-tabs::-webkit-scrollbar{display:none}
.ftab{flex-shrink:0;padding:6px 14px;border-radius:20px;font-size:.82rem;font-weight:500;
  background:none;border:1px solid #334155;color:#64748b;transition:all .15s}
.ftab.active{background:#6366f1;border-color:#6366f1;color:#fff}
.ftab:hover:not(.active){background:#1e293b;color:#f1f5f9}

/* ── Views ──────────────────────────────────────────── */
.view{padding-bottom:90px}
.list-area{padding:10px 12px 0}

/* ── Section labels ─────────────────────────────────── */
.section-label{
  font-size:.7rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.08em;color:#475569;padding:12px 4px 5px;
}
.sec-overdue .section-label{color:#f87171}
.sec-today   .section-label{color:#60a5fa}

/* ── Item card ──────────────────────────────────────── */
.card{
  display:flex;align-items:stretch;background:#1e293b;
  border-radius:14px;margin-bottom:8px;overflow:hidden;
  border:1px solid #1e293b;transition:transform .1s,opacity .4s;
  animation:fadeUp .22s ease;
}
@keyframes fadeUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.card:active{transform:scale(.98)}
.card.completing{opacity:0;transform:translateX(70px) scale(.9);transition:all .35s ease}
.card-stripe{width:4px;flex-shrink:0}
.card-body{flex:1;padding:11px 8px 11px 12px;min-width:0;cursor:pointer}
.card-title-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.type-emoji{font-size:.95rem;flex-shrink:0}
.card-title{font-size:.93rem;font-weight:600;color:#f1f5f9;word-break:break-word;flex:1}
.priority-badge{font-size:.72rem;font-weight:800;color:#f97316;background:#431407;border-radius:4px;padding:1px 5px;flex-shrink:0}
.pin-icon{font-size:.72rem;flex-shrink:0}

.card-meta{display:flex;gap:8px;align-items:center;margin-top:4px;flex-wrap:wrap}
.due-date{font-size:.76rem;color:#94a3b8}
.due-date.overdue{color:#f87171;font-weight:600}
.recur-badge{font-size:.7rem;color:#818cf8;background:#1e1b4b;border-radius:8px;padding:2px 7px}
.card-note{font-size:.78rem;color:#64748b;margin-top:5px;line-height:1.5;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.reminder-badge{font-size:.7rem;color:#fbbf24;background:#422006;border-radius:8px;padding:2px 7px}

/* Subtask progress on card */
.card-subtask-bar{margin-top:6px;display:flex;align-items:center;gap:6px}
.sbar-track{flex:1;height:3px;background:#334155;border-radius:2px;overflow:hidden}
.sbar-fill{height:100%;background:#4ade80;border-radius:2px;transition:width .3s}
.sbar-label{font-size:.7rem;color:#64748b}

/* Subtask expand */
.card-subtasks{padding:8px 0 4px;display:none}
.card.expanded .card-subtasks{display:block}
.stask-row{display:flex;align-items:center;gap:8px;padding:4px 0}
.stask-check{width:16px;height:16px;accent-color:#4ade80;cursor:pointer;flex-shrink:0}
.stask-title{font-size:.82rem;color:#94a3b8;flex:1}
.stask-title.done{text-decoration:line-through;color:#475569}

/* Card actions */
.card-actions{display:flex;flex-direction:column;justify-content:center;gap:2px;padding:8px 8px 8px 0;flex-shrink:0}
.act{width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:.95rem;transition:background .15s,transform .1s}
.act:active{transform:scale(.85)}
.act-done{color:#4ade80}.act-done:hover{background:#052e16}
.act-edit{color:#818cf8}.act-edit:hover{background:#1e1b4b}
.act-del{color:#f87171}.act-del:hover{background:#450a0a}

/* ── Empty ──────────────────────────────────────────── */
.empty{text-align:center;padding:56px 20px 40px;animation:fadeUp .3s ease}
.empty-icon{font-size:3.2rem;margin-bottom:14px}
.empty p{color:#475569;font-size:.9rem;line-height:1.7}

/* ── Completed section ───────────────────────────────── */
.done-section{margin:18px 0}
.done-section summary{font-size:.78rem;color:#475569;cursor:pointer;padding:6px 4px;user-select:none;display:flex;align-items:center;gap:6px}
.done-section summary::before{content:'▶';font-size:.55rem;transition:transform .2s}
.done-section[open] summary::before{transform:rotate(90deg)}
.done-card{display:flex;align-items:center;gap:8px;padding:7px 10px;background:#111827;border-radius:9px;margin-bottom:4px;opacity:.5}
.done-title{font-size:.82rem;text-decoration:line-through;color:#64748b;flex:1}
.done-meta{font-size:.68rem;color:#374151}
.done-restore{font-size:.75rem;color:#475569;padding:3px 7px;border-radius:6px}
.done-restore:hover{background:#1e293b;color:#818cf8}

/* ── Habits ─────────────────────────────────────────── */
.habit-card{
  background:#1e293b;border-radius:14px;margin-bottom:10px;
  border:1px solid #1e293b;overflow:hidden;animation:fadeUp .22s ease;
}
.habit-head{display:flex;align-items:center;gap:10px;padding:13px 14px}
.habit-emoji{font-size:1.6rem;flex-shrink:0}
.habit-info{flex:1;min-width:0}
.habit-name{font-size:.95rem;font-weight:600;color:#f1f5f9}
.habit-freq{font-size:.73rem;color:#64748b;margin-top:2px}
.habit-streak{display:flex;align-items:center;gap:4px;flex-shrink:0}
.streak-num{font-size:1rem;font-weight:700;color:#fbbf24}
.streak-label{font-size:.65rem;color:#64748b}

/* Completion dots */
.habit-dots{display:flex;gap:5px;padding:0 14px 10px;align-items:center;flex-wrap:wrap}
.dot{
  width:30px;height:30px;border-radius:50%;
  border:2px solid var(--hc,#6366f1);
  display:flex;align-items:center;justify-content:center;
  cursor:pointer;transition:all .15s;font-size:.8rem;flex-shrink:0;
}
.dot.filled{background:var(--hc,#6366f1);border-color:var(--hc,#6366f1)}
.dot:active{transform:scale(.85)}

/* Heatmap */
.habit-heatmap{padding:0 14px 12px}
.heatmap-label{font-size:.65rem;color:#475569;margin-bottom:4px}
.heatmap-grid{display:flex;gap:2px;flex-wrap:wrap}
.hm-cell{
  width:10px;height:10px;border-radius:2px;
  background:#1e293b;border:1px solid #334155;
  transition:background .2s;
}
.hm-cell.done-1{background:color-mix(in srgb,var(--hc,#6366f1) 40%,transparent)}
.hm-cell.done-2{background:color-mix(in srgb,var(--hc,#6366f1) 70%,transparent)}
.hm-cell.done-full{background:var(--hc,#6366f1)}

/* Habit actions */
.habit-actions{display:flex;gap:6px;padding:0 14px 12px}
.habit-edit-btn{font-size:.75rem;color:#475569;padding:4px 10px;border-radius:8px;border:1px solid #334155}
.habit-edit-btn:hover{background:#334155;color:#f1f5f9}
.habit-del-btn{font-size:.75rem;color:#f87171;padding:4px 10px;border-radius:8px;border:1px solid #334155}
.habit-del-btn:hover{background:#450a0a;border-color:#991b1b}

/* Habit empty */
.habits-empty{text-align:center;padding:60px 20px;color:#475569}
.habits-empty .big{font-size:2.8rem;margin-bottom:12px}

/* ── Bottom nav ─────────────────────────────────────── */
.bottom-nav{
  position:fixed;bottom:0;left:50%;transform:translateX(-50%);
  width:100%;max-width:520px;
  background:#1e293b;border-top:1px solid #334155;
  display:flex;z-index:60;
}
.nav-btn{
  flex:1;padding:10px 0 14px;display:flex;flex-direction:column;
  align-items:center;gap:2px;color:#64748b;transition:color .15s;
}
.nav-btn.active{color:#818cf8}
.nav-btn:active{opacity:.7}
.nav-icon{font-size:1.3rem}
.nav-label{font-size:.68rem;font-weight:500}

/* ── FABs ───────────────────────────────────────────── */
#fabs{position:fixed;right:18px;bottom:70px;display:flex;flex-direction:column;gap:10px;z-index:65}
.fab{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  color:#fff;box-shadow:0 4px 18px rgba(0,0,0,.5);transition:transform .15s,filter .15s}
.fab:active{transform:scale(.9)}
.fab-add{font-size:1.7rem;font-weight:300;background:linear-gradient(135deg,#6366f1,#8b5cf6);
  box-shadow:0 4px 20px rgba(99,102,241,.5)}
.fab-voice{font-size:1.1rem;background:linear-gradient(135deg,#7c3aed,#a21caf);
  box-shadow:0 4px 18px rgba(124,58,237,.4)}

/* ── Modal ──────────────────────────────────────────── */
.modal-overlay{
  position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:100;
  display:flex;align-items:flex-end;opacity:0;pointer-events:none;transition:opacity .2s;
}
.modal-overlay.open{opacity:1;pointer-events:all}
.modal{
  background:#1e293b;border-radius:22px 22px 0 0;width:100%;
  max-height:92vh;overflow-y:auto;padding:20px 18px 40px;
  transform:translateY(100%);transition:transform .28s cubic-bezier(.32,.72,0,1);
  border-top:1px solid #334155;
}
.modal-overlay.open .modal{transform:none}
.modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.modal-heading{font-size:1.05rem;font-weight:700}
.modal-close{width:30px;height:30px;border-radius:50%;background:#334155;color:#94a3b8;font-size:.95rem;display:flex;align-items:center;justify-content:center}

/* Type selector */
.type-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:16px}
.type-btn{padding:8px 4px;border-radius:11px;border:2px solid #334155;font-size:.78rem;font-weight:600;
  color:#64748b;display:flex;flex-direction:column;align-items:center;gap:3px;transition:all .15s}
.type-btn .tb-e{font-size:1.25rem}
.type-btn.active{border-color:var(--tc,#6366f1);background:color-mix(in srgb,var(--tc) 18%,transparent);color:#f1f5f9}
.type-btn[data-type=task]{--tc:#60a5fa}
.type-btn[data-type=appointment]{--tc:#f472b6}
.type-btn[data-type=chore]{--tc:#4ade80}
.type-btn[data-type=note]{--tc:#c084fc}

/* Emoji grid */
.emoji-grid{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:2px}
.emoji-btn{width:38px;height:38px;border-radius:10px;border:2px solid #334155;font-size:1.2rem;
  display:flex;align-items:center;justify-content:center;transition:all .12s}
.emoji-btn.active{border-color:#6366f1;background:#1e1b4b}

/* Color picker */
.color-row{display:flex;gap:8px}
.color-dot{width:28px;height:28px;border-radius:50%;cursor:pointer;border:3px solid transparent;transition:all .12s;flex-shrink:0}
.color-dot.active{border-color:#fff;transform:scale(1.15)}

/* Form */
.fgroup{margin-bottom:14px}
.fgroup label{display:block;font-size:.76rem;color:#64748b;margin-bottom:5px;font-weight:500}
.finput{
  width:100%;background:#0f172a;border:1.5px solid #334155;border-radius:10px;
  padding:10px 12px;color:#f1f5f9;font-size:.9rem;transition:border-color .15s;
  -webkit-appearance:none;appearance:none;
}
.finput:focus{outline:none;border-color:#6366f1}
textarea.finput{resize:vertical;min-height:68px}
.frow{display:grid;grid-template-columns:1fr 1fr;gap:10px}

/* NL chip */
.nl-chip{
  margin-top:6px;padding:6px 10px;border-radius:8px;
  background:#1e1b4b;border:1px solid #4338ca;color:#a5b4fc;font-size:.78rem;
  display:flex;align-items:center;gap:6px;
}
.nl-chip-clear{margin-left:auto;color:#475569;cursor:pointer;font-size:.8rem}

/* Priority */
.prio-row{display:flex;gap:6px}
.prio-btn{flex:1;padding:8px;border-radius:10px;border:1.5px solid #334155;font-size:.8rem;font-weight:600;color:#64748b;transition:all .15s}
.prio-btn.active{border-color:var(--pc,#6366f1);background:color-mix(in srgb,var(--pc) 15%,transparent);color:#f1f5f9}
.prio-btn[data-prio="0"]{--pc:#64748b}
.prio-btn[data-prio="1"]{--pc:#6366f1}
.prio-btn[data-prio="2"]{--pc:#f97316}

/* Nag */
.nag-group{}
.fcheck-label{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:.85rem;color:#94a3b8;margin-bottom:4px}
.fcheck-label input[type=checkbox]{width:18px;height:18px;accent-color:#6366f1;cursor:pointer}
.nag-opts{display:flex;gap:8px;margin-top:8px}
.nag-opts .finput{flex:1}
.pin-label{margin-bottom:16px}

/* Subtasks in modal */
.subtasks-edit{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}
.st-row{display:flex;align-items:center;gap:8px}
.st-cb{width:16px;height:16px;accent-color:#4ade80;flex-shrink:0;cursor:pointer}
.st-inp{flex:1;background:#0f172a;border:1.5px solid #334155;border-radius:8px;padding:7px 10px;font-size:.85rem;color:#f1f5f9}
.st-inp:focus{outline:none;border-color:#4ade80}
.st-del{width:28px;height:28px;border-radius:8px;color:#f87171;font-size:1.1rem;flex-shrink:0}
.st-del:hover{background:#450a0a}
.add-subtask-btn{font-size:.82rem;color:#818cf8;padding:5px 0;border-radius:8px;transition:color .15s}
.add-subtask-btn:hover{color:#a5b4fc}

/* Modal actions */
.modal-actions{display:flex;gap:8px;margin-top:6px}
.btn-cancel{flex:1;padding:12px;border-radius:12px;background:#334155;color:#94a3b8;font-size:.9rem;font-weight:600}
.btn-cancel:hover{background:#3f4f66}
.btn-save{flex:2;padding:12px;border-radius:12px;background:linear-gradient(135deg,#6366f1,#8b5cf6);
  color:#fff;font-size:.9rem;font-weight:700;box-shadow:0 2px 12px rgba(99,102,241,.35)}
.btn-save:hover{filter:brightness(1.1)}
.btn-save:active{filter:brightness(.95)}

/* ── Voice overlay ───────────────────────────────────── */
.voice-overlay{
  position:fixed;inset:0;background:rgba(0,0,0,.93);z-index:200;
  display:flex;align-items:center;justify-content:center;
  opacity:0;pointer-events:none;transition:opacity .2s;
}
.voice-overlay.open{opacity:1;pointer-events:all}
.voice-box{text-align:center;padding:40px 28px;max-width:320px}
.voice-mic{
  width:90px;height:90px;border-radius:50%;margin:0 auto 22px;
  background:linear-gradient(135deg,#7c3aed,#a21caf);
  display:flex;align-items:center;justify-content:center;font-size:2.4rem;
  animation:pulse 1.6s infinite;
}
@keyframes pulse{
  0%  {box-shadow:0 0 0 0 rgba(124,58,237,.7)}
  70% {box-shadow:0 0 0 26px rgba(124,58,237,0)}
  100%{box-shadow:0 0 0 0 rgba(124,58,237,0)}
}
.voice-transcript{font-size:.95rem;color:#e2e8f0;min-height:56px;line-height:1.6;margin-bottom:20px;font-style:italic}
.voice-hint{font-size:.75rem;color:#475569;margin-bottom:22px}
.voice-stop{padding:11px 30px;border-radius:22px;background:#334155;color:#f1f5f9;font-size:.88rem;font-weight:600}
.voice-stop:hover{background:#475569}

/* ── Toast ──────────────────────────────────────────── */
.toast{
  position:fixed;bottom:80px;left:50%;transform:translateX(-50%) translateY(16px);
  background:#1e293b;border:1px solid #334155;color:#f1f5f9;
  padding:9px 20px;border-radius:22px;font-size:.85rem;font-weight:500;
  opacity:0;transition:all .22s;pointer-events:none;z-index:300;
  white-space:nowrap;box-shadow:0 4px 16px rgba(0,0,0,.5);
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ── Scrollbar ──────────────────────────────────────── */
::-webkit-scrollbar{width:3px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#334155;border-radius:3px}
