:root{--bg:#0b0b10;--surface:#16161d;--surface-2:#1e1e27;--border:#2a2a35;--text:#f3f4fb;--text-dim:#8d8da8;--accent:#8b5cf6;--accent-2:#22d3ee;--accent-dim:#6d28d9;--danger:#fb5568;--success:#34e2a0;--warning:#fbbf5c;--radius:14px;--radius-sm:10px}:root[data-theme=light]{--bg:#f3f3f6;--surface:#fff;--surface-2:#ececf1;--border:#dddde3;--text:#16151f;--text-dim:#6b6b85;--accent:#7c3aed;--accent-2:#0891b2;--accent-dim:#5b21b6;--danger:#dc2626;--success:#0d9165;--warning:#c2680a}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--text);-webkit-tap-highlight-color:transparent;letter-spacing:-.01em;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}#root{min-height:100dvh;padding-bottom:env(safe-area-inset-bottom)}button{cursor:pointer;font-family:inherit}input,textarea,select{background:var(--surface-2);border:1px solid var(--border);color:var(--text);border-radius:var(--radius-sm);padding:11px 13px;font-family:inherit;font-size:16px}input:focus,textarea:focus,select:focus{border-color:var(--accent);outline:none}a{color:var(--accent)}.app-shell{max-width:480px;min-height:100dvh;padding:calc(16px + env(safe-area-inset-top)) 16px calc(90px + env(safe-area-inset-bottom));flex-direction:column;margin:0 auto;display:flex}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px}.btn{background:var(--accent);color:#fff;border-radius:var(--radius-sm);border:none;padding:13px 16px;font-size:15px;font-weight:600;transition:background .12s}.btn:active{background:var(--accent-dim)}.btn-secondary{background:var(--surface-2);color:var(--text);border:1px solid var(--border);border-radius:var(--radius-sm);padding:13px 16px;font-size:15px}.btn-secondary:active{background:var(--border)}.btn-danger{color:var(--danger);border:1px solid var(--danger);border-radius:var(--radius-sm);background:0 0;padding:10px 14px}.btn-block{width:100%}.tabbar{padding-bottom:env(safe-area-inset-bottom);background:var(--surface);border-top:1px solid var(--border);justify-content:center;display:flex;position:fixed;bottom:0;left:0;right:0}.tabbar-inner{width:100%;max-width:480px;display:flex}.tabbar-link{text-align:center;color:var(--text-dim);flex-direction:column;flex:1;align-items:center;gap:3px;padding:10px 0 8px;font-size:11px;text-decoration:none;display:flex}.tabbar-link.active{color:var(--accent)}.tabbar-icon{width:22px;height:22px}.page-title{letter-spacing:-.02em;margin:4px 0 16px;font-size:26px;font-weight:750}.muted{color:var(--text-dim);font-size:13px}.field{flex-direction:column;gap:6px;margin-bottom:14px;display:flex}.field label{color:var(--text-dim);font-size:13px}.error-text{color:var(--danger);font-size:13px}.modal-overlay{z-index:50;background:#0009;align-items:flex-end;display:flex;position:fixed;inset:0}.modal-sheet{background:var(--surface);border-radius:var(--radius) var(--radius) 0 0;padding:20px 16px calc(24px + env(safe-area-inset-bottom));border-top:1px solid var(--border);width:100%;max-height:90vh;overflow-y:auto}.chip-row{flex-wrap:wrap;gap:8px;display:flex}.chip{border-radius:var(--radius-sm);background:var(--surface-2);border:1px solid var(--border);color:var(--text-dim);padding:8px 13px;font-size:13px}.chip.active{background:var(--accent);color:#fff;border-color:var(--accent)}.hero{border-radius:var(--radius);background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);margin-bottom:16px;padding:16px}.xp-bar-track{border-radius:var(--radius-sm);background:var(--surface-2);width:100%;height:6px;overflow:hidden}.xp-bar-fill{background:var(--accent);height:100%;transition:width .5s}.badge{border-radius:var(--radius-sm);background:var(--surface-2);border:1px solid var(--border);color:var(--text-dim);align-items:center;gap:5px;padding:6px 11px;font-size:12px;display:inline-flex}.badge.earned{background:var(--accent);color:#fff;border-color:var(--accent)}.progress-ring-label{font-size:22px;font-weight:750}@keyframes confetti-fall{0%{opacity:1;transform:translateY(-10px)rotate(0)}to{opacity:0;transform:translateY(110vh)rotate(540deg)}}.confetti-piece{z-index:200;pointer-events:none;animation:linear forwards confetti-fall;position:fixed;top:-10px}
