:root{--bg:#0a0a0b;--fg:#f5f5f5;--dim:#888;--accent:#c8b6ff;--panel:#14141a;--border:#2a2a32}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:-apple-system,system-ui,sans-serif}body{min-height:100vh}.app{max-width:880px;margin:0 auto;padding:48px 24px 96px}h1{font-size:28px;margin:0 0 8px;letter-spacing:-.02em}h2{font-size:14px;margin:32px 0 12px;text-transform:uppercase;letter-spacing:.08em;font-weight:500}.subtitle,h2{color:var(--dim)}.subtitle{margin:0 0 32px}.grid{display:grid;grid-gap:12px;gap:12px;grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}.card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:16px;cursor:pointer;transition:all .15s;text-align:left}.card.active,.card:hover{border-color:var(--accent)}.card.active{background:#1c1825}.card h3{margin:0 0 4px;font-size:15px}.card p{margin:0;font-size:12px;color:var(--dim);line-height:1.4}.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.btn{background:var(--accent);color:#1a1325;border:0;border-radius:8px;padding:12px 20px;font-weight:600;cursor:pointer;font-size:14px}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.secondary{background:transparent;color:var(--fg);border:1px solid var(--border)}.btn.secondary:hover{border-color:var(--accent)}input,textarea{width:100%;background:var(--panel);color:var(--fg);border:1px solid var(--border);border-radius:8px;padding:12px;font-family:inherit;font-size:14px;resize:vertical}input:focus,textarea:focus{outline:0;border-color:var(--accent)}pre{border:1px solid var(--border);border-radius:8px;padding:16px;overflow-x:auto;font-size:13px;line-height:1.5;white-space:pre-wrap;word-break:break-word}.player,pre{background:var(--panel)}.player{border:1px solid var(--border);border-radius:10px;padding:20px;margin-top:16px}.player audio{width:100%;margin-top:12px}.toggle{display:flex;align-items:center;gap:8px;cursor:pointer}.toggle input{width:auto}.meta{font-size:12px;color:var(--dim)}.spinner{display:inline-block;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}