:root{--bg: #0d0d0d;--bg-raised: #141414;--bg-inset: #101010;--text: #e8e3dc;--text-dim: #8f8a82;--text-faint: #5c5852;--accent: #e85d2f;--accent-dim: #b8431f;--border: #262321;--border-light: #322e2b;--win: #5fb87a;--blocker: #e85d2f;--note: #6c8ebf;--mono: ui-monospace, "SF Mono", "JetBrains Mono", "Cascadia Code", Menlo, Consolas, monospace;--serif: Georgia, "Iowan Old Style", "Times New Roman", serif;--sans: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:var(--sans);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%}.app{min-height:100vh;min-height:100dvh}.container{max-width:760px;margin:0 auto;padding:0 16px calc(48px + env(safe-area-inset-bottom))}a{color:var(--accent)}.tabbar{position:sticky;top:0;z-index:20;display:flex;gap:4px;background:var(--bg);border-bottom:1px solid var(--border);padding:8px 0 0;margin-bottom:4px}.tab{flex:0 0 auto;min-height:44px;padding:8px 20px;background:transparent;border:1px solid transparent;border-bottom:none;color:var(--text-dim);font-family:var(--mono);font-size:.82rem;letter-spacing:.06em;text-transform:uppercase;cursor:pointer;border-radius:2px 2px 0 0}.tab.active{color:var(--text);border-color:var(--border);background:var(--bg-raised);border-bottom:1px solid var(--bg-raised);margin-bottom:-1px}.section{border:1px solid var(--border);background:var(--bg-raised);padding:16px;margin-top:16px}.section-title{font-family:var(--mono);font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--text-dim);margin-bottom:12px}.hint{font-size:.78rem;color:var(--text-faint);margin:8px 0 0}.loading,.error-banner{font-family:var(--mono);font-size:.85rem;padding:16px;margin-top:16px;border:1px solid var(--border)}.error-banner{border-color:var(--accent-dim);color:var(--accent)}.header{margin-top:12px;padding:16px 0 14px;border-bottom:1px solid var(--border)}.header-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.brand{font-family:var(--mono);font-weight:700;font-size:1.15rem;letter-spacing:.14em}.streak{font-family:var(--mono);font-size:1rem;white-space:nowrap}.streak-unit{color:var(--text-dim);font-size:.8rem}.level-row{margin-top:10px;align-items:center;justify-content:flex-start;gap:14px}.level-badge{font-family:var(--mono);font-size:.78rem;letter-spacing:.1em;color:var(--bg);background:var(--accent);padding:3px 8px;font-weight:700}.xp-text{font-family:var(--mono);font-size:.95rem}.xp-next{font-family:var(--mono);font-size:.75rem;color:var(--text-faint);margin-left:auto}.xp-bar{margin-top:8px;height:6px;background:var(--bg-inset);border:1px solid var(--border);overflow:hidden}.xp-bar-fill{height:100%;background:linear-gradient(90deg,var(--accent-dim),var(--accent));transition:width .4s ease}.focus{position:relative;border-color:var(--border-light);border-left:3px solid var(--accent);overflow:hidden}.focus.pop{animation:focus-flash .6s ease}@keyframes focus-flash{0%{box-shadow:inset 0 0 #e85d2f00}30%{box-shadow:inset 0 0 60px #e85d2f38}to{box-shadow:inset 0 0 #e85d2f00}}.focus-phase{font-family:var(--mono);font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);margin-bottom:6px}.focus-title{font-family:var(--serif);font-size:1.7rem;line-height:1.18;margin:0 0 8px;font-weight:600}.focus-desc{color:var(--text-dim);margin:0 0 12px;font-size:.95rem}.focus-meta{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}.est{font-family:var(--mono);font-size:.78rem;color:var(--text-dim)}.est.sm{font-size:.72rem}.focus-actions{display:flex;flex-wrap:wrap;gap:10px}.focus-empty-text{color:var(--text-dim);margin:0 0 12px}.focus-msg{margin-top:10px;font-family:var(--mono);font-size:.85rem;color:var(--accent)}.change-focus{display:inline-block;margin-top:12px}.pop-burst{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:5rem;color:var(--accent);pointer-events:none;animation:burst .9s ease forwards}@keyframes burst{0%{opacity:0;transform:scale(.4)}35%{opacity:1;transform:scale(1.1)}60%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.4)}}.milestone-badge{font-family:var(--mono);font-size:.66rem;letter-spacing:.08em;color:var(--accent);border:1px solid var(--accent-dim);padding:2px 6px;white-space:nowrap}.milestone-badge.sm{font-size:.62rem;padding:1px 4px;border:none;color:var(--accent)}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 18px;font-family:var(--mono);font-size:.85rem;letter-spacing:.04em;border:1px solid var(--border-light);background:var(--bg-inset);color:var(--text);cursor:pointer;text-decoration:none;transition:background .15s ease,border-color .15s ease,transform .05s ease}.btn:hover{border-color:var(--accent-dim)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:default}.btn-accent{background:var(--accent);border-color:var(--accent);color:#1a1a1a;font-weight:700}.btn-accent:hover{background:#ff6f3d;border-color:#ff6f3d}.btn-resource{background:transparent}.mark-done{background:var(--accent);border-color:var(--accent);color:#1a1a1a;font-weight:700;flex:1 1 auto;min-width:150px}.mark-done:hover{background:#ff6f3d;border-color:#ff6f3d}.mark-done.is-done{background:transparent;color:var(--win);border-color:var(--win)}.btn-sm{min-height:36px;padding:0 12px;font-size:.76rem}.link{background:none;border:none;color:var(--text-dim);font-family:var(--mono);font-size:.78rem;text-decoration:underline;text-underline-offset:3px;cursor:pointer;padding:6px 0}.link:hover{color:var(--accent)}.stats-row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:16px}.stat{border:1px solid var(--border);background:var(--bg-raised);padding:16px 8px;text-align:center}.stat-value{font-family:var(--mono);font-size:1.8rem;font-weight:700;color:var(--accent);line-height:1}.stat-sub{font-size:1rem;color:var(--text-dim)}.stat-label{font-family:var(--mono);font-size:.68rem;letter-spacing:.16em;color:var(--text-dim);margin-top:8px}.phase{border-top:1px solid var(--border);padding:12px 0 6px}.phase:first-of-type{border-top:none}.phase-future{opacity:.55}.phase-header{display:flex;align-items:center;gap:10px;width:100%;background:none;border:none;color:var(--text);cursor:pointer;text-align:left;padding:6px 0;min-height:44px}.phase-caret{color:var(--text-dim);font-size:.8rem;width:14px;flex:0 0 14px}.phase-name{font-family:var(--serif);font-size:1.05rem;flex:1 1 auto}.phase-complete .phase-name{color:var(--text-dim)}.phase-count{font-family:var(--mono);font-size:.8rem;color:var(--text-dim);white-space:nowrap}.phase-bar{height:4px;background:var(--bg-inset);overflow:hidden;margin:4px 0 0}.phase-bar-fill{height:100%;background:var(--accent);transition:width .4s ease}.phase-desc{font-size:.82rem;color:var(--text-faint);margin:10px 0 4px}.phase-tasks{list-style:none;margin:8px 0 0;padding:0}.task{border-top:1px solid var(--border)}.task-main{display:flex;align-items:center;gap:10px;width:100%;background:none;border:none;color:var(--text);text-align:left;cursor:pointer;padding:11px 2px;min-height:44px;font-size:.92rem}.task-check{font-family:var(--mono);color:var(--text-faint);flex:0 0 auto}.task.done .task-check{color:var(--win)}.task.done .task-title{color:var(--text-dim);text-decoration:line-through;text-decoration-color:var(--text-faint)}.task-title{flex:1 1 auto}.task-detail{padding:4px 2px 14px 24px}.task-desc{font-size:.85rem;color:var(--text-dim);margin:0 0 10px}.task-detail-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.kanban{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.kan-col{background:var(--bg-inset);border:1px solid var(--border);padding:10px;min-height:80px}.kan-col-title{font-family:var(--mono);font-size:.66rem;letter-spacing:.1em;color:var(--text-dim);margin-bottom:10px}.kan-count{color:var(--text-faint)}.kan-cards{display:flex;flex-direction:column;gap:8px}.kan-empty{color:var(--text-faint);font-family:var(--mono);font-size:.85rem;text-align:center;padding:6px 0}.card{display:block;width:100%;text-align:left;background:var(--bg-raised);border:1px solid var(--border-light);border-left:3px solid var(--text-faint);color:var(--text);padding:10px;font-size:.84rem;cursor:pointer;min-height:44px}.card:hover{border-color:var(--accent-dim)}.card-in_progress{border-left-color:var(--note)}.card-done{border-left-color:var(--win)}.card-done .card-title{color:var(--text-dim)}.log-form{margin-bottom:14px}.log-input{width:100%;background:var(--bg-inset);border:1px solid var(--border-light);color:var(--text);padding:12px;font-family:var(--sans);font-size:.95rem;min-height:44px}.log-input:focus{outline:none;border-color:var(--accent-dim)}.log-form-row{display:flex;gap:8px;margin-top:8px}.log-cat{flex:0 0 auto;background:var(--bg-inset);border:1px solid var(--border-light);color:var(--text);padding:0 12px;min-height:44px;font-family:var(--mono);font-size:.82rem;text-transform:capitalize}.log-form-row .btn{flex:1 1 auto}.log-feed{list-style:none;margin:0;padding:0}.log-entry{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:baseline;padding:10px 0;border-top:1px solid var(--border);font-size:.9rem}.log-empty{color:var(--text-faint);padding:10px 0;font-size:.9rem}.log-cat-badge{font-family:var(--mono);font-size:.62rem;letter-spacing:.06em;text-transform:uppercase;padding:2px 6px;border:1px solid var(--border-light);white-space:nowrap}.cat-win .log-cat-badge{color:var(--win);border-color:var(--win)}.cat-blocker .log-cat-badge{color:var(--blocker);border-color:var(--accent-dim)}.cat-note .log-cat-badge{color:var(--note);border-color:var(--note)}.log-content{word-break:break-word}.log-date{font-family:var(--mono);font-size:.7rem;color:var(--text-faint);white-space:nowrap}.snapshot-pre{background:var(--bg-inset);border:1px solid var(--border);padding:14px;font-family:var(--mono);font-size:.76rem;line-height:1.55;color:var(--text);white-space:pre-wrap;word-break:break-word;max-height:420px;overflow:auto;margin:10px 0 12px}.snapshot-actions{display:flex;align-items:center;gap:14px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:flex-end;justify-content:center;z-index:50;padding:0}.modal{background:var(--bg-raised);border:1px solid var(--border-light);width:100%;max-width:640px;max-height:86vh;display:flex;flex-direction:column}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--bg-raised)}.modal-head .section-title{margin:0}.modal-close{background:none;border:none;color:var(--text-dim);font-size:1.1rem;cursor:pointer;min-height:36px;min-width:36px}.modal-body{overflow-y:auto;padding:8px 16px 24px}.modal-phase{margin-top:14px}.modal-phase-name{font-family:var(--mono);font-size:.72rem;letter-spacing:.08em;color:var(--accent);text-transform:uppercase;margin-bottom:4px}.modal-task{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:none;border:none;border-top:1px solid var(--border);color:var(--text);padding:12px 2px;cursor:pointer;min-height:44px;font-size:.9rem}.modal-task:hover{color:var(--accent)}.modal-task.done .modal-task-title{color:var(--text-dim);text-decoration:line-through}.modal-task-title{flex:1 1 auto}.coming-soon{text-align:center;padding:80px 16px;color:var(--text-dim)}.coming-soon-emoji{font-size:3rem}.coming-soon h2{font-family:var(--serif);margin:12px 0 4px}.footer{text-align:center;font-family:var(--mono);font-size:.7rem;color:var(--text-faint);letter-spacing:.08em;padding:32px 0 8px}@media(max-width:640px){.focus-title{font-size:1.45rem}.kanban{grid-template-columns:1fr}.kan-col{min-height:0}.stat-value{font-size:1.5rem}.modal{max-height:92vh}}@media(min-width:641px){.modal-overlay{align-items:center;padding:24px}}
