@rubytech/taskmaster 1.0.44 → 1.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/routes/screencast.js +22 -2
- package/dist/browser/screencast.js +9 -1
- package/dist/build-info.json +3 -3
- package/dist/control-ui/assets/{index-CpAWYZjj.js → index-BGyGg5oT.js} +172 -163
- package/dist/control-ui/assets/index-BGyGg5oT.js.map +1 -0
- package/dist/control-ui/assets/index-CBnatXwP.css +1 -0
- package/dist/control-ui/index.html +2 -2
- package/dist/gateway/server-methods/browser-screencast.js +25 -5
- package/extensions/diagnostics-otel/node_modules/.bin/acorn +0 -0
- package/extensions/googlechat/node_modules/.bin/taskmaster +0 -0
- package/extensions/line/node_modules/.bin/taskmaster +0 -0
- package/extensions/matrix/node_modules/.bin/markdown-it +0 -0
- package/extensions/matrix/node_modules/.bin/taskmaster +0 -0
- package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +0 -0
- package/extensions/memory-lancedb/node_modules/.bin/openai +0 -0
- package/extensions/msteams/node_modules/.bin/taskmaster +0 -0
- package/extensions/nostr/node_modules/.bin/taskmaster +0 -0
- package/extensions/nostr/node_modules/.bin/tsc +0 -0
- package/extensions/nostr/node_modules/.bin/tsserver +0 -0
- package/extensions/zalo/node_modules/.bin/taskmaster +0 -0
- package/extensions/zalouser/node_modules/.bin/taskmaster +0 -0
- package/package.json +64 -54
- package/scripts/install.sh +0 -0
- package/skills/google-ai/references/browser-setup.md +2 -0
- package/skills/tavily/references/browser-setup.md +1 -0
- package/taskmaster-docs/USER-GUIDE.md +7 -4
- package/templates/customer/agents/admin/BOOTSTRAP.md +49 -12
- package/dist/control-ui/assets/index-CpAWYZjj.js.map +0 -1
- package/dist/control-ui/assets/index-D5w5UtCL.css +0 -1
- package/templates/.DS_Store +0 -0
- package/templates/customer/.DS_Store +0 -0
- package/templates/customer/agents/.DS_Store +0 -0
- package/templates/taskmaster/.gitignore +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&display=swap";:root{--bg: #12141a;--bg-accent: #14161d;--bg-elevated: #1a1d25;--bg-hover: #262a35;--bg-muted: #262a35;--card: #181b22;--card-foreground: #f4f4f5;--card-highlight: rgba(255, 255, 255, .05);--popover: #181b22;--popover-foreground: #f4f4f5;--panel: #12141a;--panel-strong: #1a1d25;--panel-hover: #262a35;--chrome: rgba(18, 20, 26, .95);--chrome-strong: rgba(18, 20, 26, .98);--text: #e4e4e7;--text-strong: #fafafa;--chat-text: #e4e4e7;--muted: #71717a;--muted-strong: #52525b;--muted-foreground: #71717a;--border: #27272a;--border-strong: #3f3f46;--border-hover: #52525b;--input: #27272a;--ring: rgba(255, 255, 255, .2);--accent: #00d4ff;--accent-hover: #33dfff;--accent-muted: #00d4ff;--accent-subtle: rgba(0, 212, 255, .15);--accent-foreground: #fafafa;--accent-glow: rgba(0, 212, 255, .25);--primary: #00d4ff;--primary-foreground: #111111;--secondary: #1e2028;--secondary-foreground: #f4f4f5;--accent-2: #14b8a6;--accent-2-muted: rgba(20, 184, 166, .7);--accent-2-subtle: rgba(20, 184, 166, .15);--ok: #22c55e;--ok-muted: rgba(34, 197, 94, .75);--ok-subtle: rgba(34, 197, 94, .12);--destructive: #ef4444;--destructive-foreground: #fafafa;--warn: #f59e0b;--warn-muted: rgba(245, 158, 11, .75);--warn-subtle: rgba(245, 158, 11, .12);--danger: #ef4444;--danger-muted: rgba(239, 68, 68, .75);--danger-subtle: rgba(239, 68, 68, .12);--info: #3b82f6;--focus: rgba(0, 212, 255, .25);--focus-ring: 0 0 0 2px var(--bg), 0 0 0 4px var(--ring);--focus-glow: 0 0 0 2px var(--bg), 0 0 0 4px var(--ring), 0 0 20px var(--accent-glow);--grid-line: rgba(255, 255, 255, .04);--theme-switch-x: 50%;--theme-switch-y: 50%;--mono: "JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace;--font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "DejaVu Sans", sans-serif;--font-display: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "DejaVu Sans", sans-serif;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .2);--shadow-md: 0 4px 12px rgba(0, 0, 0, .25), 0 0 0 1px rgba(255, 255, 255, .03);--shadow-lg: 0 12px 28px rgba(0, 0, 0, .35), 0 0 0 1px rgba(255, 255, 255, .03);--shadow-xl: 0 24px 48px rgba(0, 0, 0, .4), 0 0 0 1px rgba(255, 255, 255, .03);--shadow-glow: 0 0 30px var(--accent-glow);--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 9999px;--radius: 8px;--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--duration-fast: .12s;--duration-normal: .2s;--duration-slow: .35s;color-scheme:dark}:root[data-theme=light]{--bg: #fafafa;--bg-accent: #f5f5f5;--bg-elevated: #ffffff;--bg-hover: #f0f0f0;--bg-muted: #f0f0f0;--bg-content: #f5f5f5;--card: #ffffff;--card-foreground: #18181b;--card-highlight: rgba(0, 0, 0, .03);--popover: #ffffff;--popover-foreground: #18181b;--panel: #fafafa;--panel-strong: #f5f5f5;--panel-hover: #ebebeb;--chrome: rgba(250, 250, 250, .95);--chrome-strong: rgba(250, 250, 250, .98);--text: #3f3f46;--text-strong: #18181b;--chat-text: #3f3f46;--muted: #71717a;--muted-strong: #52525b;--muted-foreground: #71717a;--border: #e4e4e7;--border-strong: #d4d4d8;--border-hover: #a1a1aa;--input: #e4e4e7;--accent: #0891b2;--accent-hover: #06b6d4;--accent-muted: #0891b2;--accent-subtle: rgba(8, 145, 178, .12);--accent-foreground: #ffffff;--accent-glow: rgba(8, 145, 178, .15);--primary: #0891b2;--primary-foreground: #ffffff;--secondary: #f4f4f5;--secondary-foreground: #3f3f46;--accent-2: #0d9488;--accent-2-muted: rgba(13, 148, 136, .75);--accent-2-subtle: rgba(13, 148, 136, .12);--ok: #16a34a;--ok-muted: rgba(22, 163, 74, .75);--ok-subtle: rgba(22, 163, 74, .1);--destructive: #dc2626;--destructive-foreground: #fafafa;--warn: #d97706;--warn-muted: rgba(217, 119, 6, .75);--warn-subtle: rgba(217, 119, 6, .1);--danger: #dc2626;--danger-muted: rgba(220, 38, 38, .75);--danger-subtle: rgba(220, 38, 38, .1);--info: #2563eb;--focus: rgba(8, 145, 178, .2);--focus-glow: 0 0 0 2px var(--bg), 0 0 0 4px var(--ring), 0 0 16px var(--accent-glow);--grid-line: rgba(0, 0, 0, .05);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .06);--shadow-md: 0 4px 12px rgba(0, 0, 0, .08), 0 0 0 1px rgba(0, 0, 0, .04);--shadow-lg: 0 12px 28px rgba(0, 0, 0, .12), 0 0 0 1px rgba(0, 0, 0, .04);--shadow-xl: 0 24px 48px rgba(0, 0, 0, .15), 0 0 0 1px rgba(0, 0, 0, .04);--shadow-glow: 0 0 24px var(--accent-glow);color-scheme:light}*{box-sizing:border-box}html,body{height:100%}body{margin:0;font:400 14px/1.55 var(--font-body);letter-spacing:-.02em;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@keyframes theme-circle-transition{0%{clip-path:circle(0% at var(--theme-switch-x, 50%) var(--theme-switch-y, 50%))}to{clip-path:circle(150% at var(--theme-switch-x, 50%) var(--theme-switch-y, 50%))}}html.theme-transition{view-transition-name:theme}html.theme-transition::view-transition-old(theme){mix-blend-mode:normal;animation:none;z-index:1}html.theme-transition::view-transition-new(theme){mix-blend-mode:normal;z-index:2;animation:theme-circle-transition .4s var(--ease-out) forwards}@media(prefers-reduced-motion:reduce){html.theme-transition::view-transition-old(theme),html.theme-transition::view-transition-new(theme){animation:none!important}}taskmaster-app{display:block;position:relative;z-index:1;min-height:100vh}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button,input,textarea,select{font:inherit;color:inherit}::selection{background:var(--accent-subtle);color:var(--text-strong)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--border-strong)}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes dashboard-enter{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes pulse-subtle{0%,to{opacity:1}50%{opacity:.7}}@keyframes glow-pulse{0%,to{box-shadow:0 0 #00d4ff00}50%{box-shadow:0 0 20px var(--accent-glow)}}.stagger-1{animation-delay:0ms}.stagger-2{animation-delay:50ms}.stagger-3{animation-delay:.1s}.stagger-4{animation-delay:.15s}.stagger-5{animation-delay:.2s}.stagger-6{animation-delay:.25s}:focus-visible{outline:none;box-shadow:var(--focus-ring)}.grid{display:grid;gap:20px}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.stat-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.note-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.row{display:flex;gap:12px;align-items:center}.stack{display:grid;gap:12px;grid-template-columns:minmax(0,1fr)}.filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center}@media(max-width:1100px){.grid-cols-2,.grid-cols-3,.table-head,.table-row,.list-item{grid-template-columns:1fr}}@media(max-width:600px){.card{padding:12px;border-radius:var(--radius-md)}.card-title{font-size:13px}.stat-grid{gap:8px;grid-template-columns:repeat(2,1fr)}.stat{padding:10px;border-radius:var(--radius-md)}.stat-label{font-size:11px}.stat-value{font-size:18px}.note-grid{grid-template-columns:1fr;gap:8px}.form-grid{grid-template-columns:1fr;gap:10px}.field input,.field textarea,.field select{padding:8px 10px;border-radius:var(--radius-md);font-size:14px}.btn{padding:8px 12px;font-size:12px}.pill{padding:4px 10px;font-size:12px}.chat-header{flex-direction:column;align-items:stretch;gap:8px}.chat-header__left{flex-direction:column;align-items:stretch}.chat-header__right{justify-content:space-between}.chat-session{min-width:unset;width:100%}.chat-thread{margin-top:8px;padding:12px 8px}.chat-msg{max-width:90%}.chat-bubble{padding:8px 12px;border-radius:var(--radius-md)}.chat-compose{gap:8px}.chat-compose__field textarea{min-height:60px;padding:8px 10px;border-radius:var(--radius-md);font-size:14px}.log-stream{border-radius:var(--radius-md);max-height:380px}.log-row{grid-template-columns:1fr;gap:4px;padding:8px}.log-time{font-size:10px}.log-level{font-size:9px}.log-subsystem{font-size:11px}.log-message{font-size:12px}.list-item{padding:10px;border-radius:var(--radius-md)}.list-title{font-size:13px}.list-sub{font-size:11px}.code-block{padding:8px;border-radius:var(--radius-md);font-size:11px}.theme-toggle{--theme-item: 24px;--theme-gap: 2px;--theme-pad: 3px}.theme-icon{width:12px;height:12px}}@media(max-width:400px){.card{padding:10px}.stat{padding:8px}.stat-value{font-size:16px}.chat-bubble{padding:8px 10px}.chat-compose__field textarea{min-height:52px;padding:8px 10px;font-size:13px}.btn{padding:6px 10px;font-size:11px}.theme-toggle{--theme-item: 22px;--theme-gap: 2px;--theme-pad: 2px}.theme-icon{width:11px;height:11px}}.chat{position:relative;display:flex;flex-direction:column;flex:1 1 0;height:100%;min-height:0;overflow:hidden;background:transparent!important;border:none!important;box-shadow:none!important}.chat--dragover{outline:2px dashed var(--accent)!important;outline-offset:-2px;background:var(--accent-subtle)!important}.chat-header{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:nowrap;flex-shrink:0;padding-bottom:12px;margin-bottom:12px;background:transparent}.chat-header__left{display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-width:0}.chat-session{min-width:180px}.chat-thread{flex:1 1 0;overflow-y:auto;overflow-x:hidden;padding:12px 4px;margin:0 -4px;min-height:0;border-radius:12px;background:transparent}.chat-scroll-bottom{position:absolute;bottom:8px;left:50%;transform:translate(-50%);z-index:5;width:36px;height:36px;border-radius:50%;border:1px solid var(--border);background:var(--card);color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;box-shadow:0 2px 8px #0000004d;transition:color .15s ease-out,background .15s ease-out,border-color .15s ease-out;animation:scroll-btn-enter .4s cubic-bezier(.34,1.56,.64,1)}@keyframes scroll-btn-enter{0%{opacity:0;transform:translate(-50%) translateY(8px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.chat-scroll-bottom:hover{color:var(--text);background:var(--panel-strong);border-color:var(--border-strong, var(--border))}.chat-scroll-bottom svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;animation:chevron-bounce 2s ease-in-out infinite}@keyframes chevron-bounce{0%,to{transform:translateY(0)}50%{transform:translateY(3px)}}:root[data-theme=light] .chat-scroll-bottom{background:#fff;box-shadow:0 2px 8px #0000001f}:root[data-theme=light] .chat-scroll-bottom:hover{background:#f5f5f5}.chat-focus-exit{position:absolute;top:12px;right:12px;z-index:100;width:32px;height:32px;border-radius:50%;border:1px solid var(--border);background:var(--panel);color:var(--muted);font-size:20px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s ease-out,color .15s ease-out,border-color .15s ease-out;box-shadow:0 4px 12px #0003}.chat-focus-exit:hover{background:var(--panel-strong);color:var(--text);border-color:var(--accent)}.chat-focus-exit svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.chat-compose{position:sticky;bottom:0;flex-shrink:0;display:flex;flex-direction:column;gap:12px;margin-top:auto;padding:12px 4px 16px;background:linear-gradient(to bottom,transparent,var(--bg) 20%);z-index:10}.chat-attachments{display:inline-flex;flex-wrap:wrap;gap:8px;width:fit-content;max-width:100%;align-self:flex-start}.chat-attachment{position:relative;width:80px;height:80px;border-radius:6px;overflow:hidden;border:1px solid var(--border);background:var(--bg)}.chat-attachment__img{width:100%;height:100%;object-fit:contain}.chat-attachment__remove{position:absolute;top:4px;right:4px;width:20px;height:20px;border-radius:50%;border:none;background:#000000b3;color:#fff;font-size:12px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s ease-out}.chat-attachment:hover .chat-attachment__remove{opacity:1}.chat-attachment__remove:hover{background:#dc2626e6}.chat-attachment__remove svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2px}.chat-attachment--file{width:auto;height:auto;display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:8px;background:var(--panel);border:1px solid var(--border);max-width:220px}.chat-attachment__icon{flex-shrink:0;display:flex;color:var(--muted)}.chat-attachment__icon svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.chat-attachment__name{font-size:13px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.chat-attachment__remove--file{position:static;opacity:.6;flex-shrink:0;width:24px;height:24px;border-radius:50%;border:none;background:#ffffff14;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:opacity .15s ease-out,color .15s ease-out,background .15s ease-out}.chat-attachment__remove--file:hover{opacity:1;color:var(--danger, #dc2626);background:#dc262626}.chat-attachment__remove--file svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2.5px}:root[data-theme=light] .chat-attachment{border-color:#10182826;background:#fff}:root[data-theme=light] .chat-attachment__remove{background:#0009}.chat-message-images{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.chat-message-image{max-width:300px;max-height:200px;border-radius:8px;object-fit:contain;cursor:pointer;transition:transform .15s ease-out}.chat-message-image:hover{transform:scale(1.02)}.chat-group.user .chat-message-images{justify-content:flex-end}.chat-compose__row{display:flex;align-items:stretch;gap:12px;flex:1}:root[data-theme=light] .chat-compose{background:linear-gradient(to bottom,transparent,var(--bg-content) 20%)}.chat-compose__field{flex:1 1 auto;min-width:0;display:flex;align-items:stretch}.chat-compose__field>span{display:none}.chat-compose .chat-compose__field textarea{width:100%;height:44px;min-height:44px;max-height:150px;padding:11px 16px;border-radius:8px;resize:none;overflow-y:hidden;white-space:pre-wrap;font-family:var(--font-body);font-size:15px;line-height:1.45;outline:none}.chat-compose .chat-compose__field textarea:focus,.chat-compose .chat-compose__field textarea:focus-visible,.field.chat-compose__field textarea:focus,.field.chat-compose__field textarea:focus-visible{outline:none!important;box-shadow:none!important;border-color:var(--border)}.chat-compose__field textarea:disabled{opacity:.7;cursor:not-allowed}.chat-compose__emoji{flex-shrink:0;align-self:flex-end;width:40px;height:40px;min-width:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;padding:0;border:none;background:transparent;color:var(--muted);cursor:pointer;transition:color .15s ease-out}.chat-compose__emoji:hover{color:var(--text)}.chat-compose__emoji.active{color:var(--accent)}.chat-compose__emoji svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.emoji-picker-popup{position:absolute;bottom:100%;left:0;margin-bottom:8px;z-index:50;border-radius:var(--radius-lg, 12px);overflow:hidden;box-shadow:0 4px 24px #0006;display:none}.emoji-picker-popup.active{display:block}emoji-picker{--background: var(--card);--border-color: var(--border);--indicator-color: var(--accent);--input-border-color: var(--border);--input-font-color: var(--text);--input-placeholder-color: var(--muted);--outline-color: var(--accent);--category-font-color: var(--muted);--button-active-background: var(--panel-strong);--button-hover-background: var(--panel);--num-columns: 8;height:320px}.chat-compose__send{flex-shrink:0;align-self:flex-end;width:40px;height:40px;min-width:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;padding:0;border:none;cursor:pointer;transition:background .15s ease-out,opacity .15s ease-out}.chat-compose__send.primary{background:var(--accent);color:#fff}.chat-compose__send.primary:hover:not(:disabled){background:var(--accent-strong, var(--accent));opacity:.9}.chat-compose__send.primary:disabled{opacity:.4;cursor:not-allowed}.chat-compose__send:not(.primary){background:var(--panel-strong);color:var(--muted)}.chat-compose__send:not(.primary):hover{color:var(--text)}.chat-compose__send svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.chat-compose__actions{flex-shrink:0;display:flex;align-items:stretch;gap:8px}.chat-compose .chat-compose__actions .btn{padding:0 16px;font-size:13px;height:40px;min-height:40px;max-height:40px;line-height:1;white-space:nowrap;box-sizing:border-box}.chat-controls{display:flex;align-items:center;justify-content:flex-start;gap:12px;flex-wrap:wrap}.chat-controls__session{min-width:140px}.chat-controls__thinking{display:flex;align-items:center;gap:6px;font-size:13px}.btn--icon{padding:8px!important;min-width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);background:#ffffff0f}.chat-controls__separator{color:#fff6;font-size:18px;margin:0 8px;font-weight:300}:root[data-theme=light] .chat-controls__separator{color:#1018284d}.btn--icon:hover{background:#ffffff1f;border-color:#fff3}:root[data-theme=light] .btn--icon{background:#fff;border-color:var(--border);box-shadow:0 1px 2px #1018280d;color:var(--muted)}:root[data-theme=light] .btn--icon:hover{background:#fff;border-color:var(--border-strong);color:var(--text)}.btn--icon svg{display:block;width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.chat-controls__session select{padding:6px 10px;font-size:13px}.chat-controls__thinking{display:flex;align-items:center;gap:4px;font-size:12px;padding:4px 10px;background:#ffffff0a;border-radius:6px;border:1px solid var(--border)}:root[data-theme=light] .chat-controls__thinking{background:#ffffffe6;border-color:#10182826}@media(max-width:640px){.chat-session{min-width:140px}.chat-compose{grid-template-columns:1fr}.chat-controls{flex-wrap:wrap;gap:8px}.chat-controls__session{min-width:120px}}.chat-model-bar{position:relative;display:flex;align-items:center;gap:8px;padding:6px 0 2px}.chat-model-bar__select{position:relative}.chat-model-bar__dropdown{-moz-appearance:none;appearance:none;-webkit-appearance:none;background:transparent;border:1px solid var(--border);border-radius:6px;color:var(--muted);font-size:12px;padding:4px 22px 4px 8px;cursor:pointer;outline:none;transition:color .15s,border-color .15s;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23888' fill='none' stroke-width='1.2'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 6px center}.chat-model-bar__dropdown:hover,.chat-model-bar__dropdown:focus{color:var(--text);border-color:var(--border-strong, var(--border))}.chat-model-bar__dropdown option{background:var(--card);color:var(--text)}:root[data-theme=light] .chat-model-bar__dropdown{border-color:var(--border);color:var(--muted);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23666' fill='none' stroke-width='1.2'/%3E%3C/svg%3E")}:root[data-theme=light] .chat-model-bar__dropdown:hover,:root[data-theme=light] .chat-model-bar__dropdown:focus{color:var(--text);border-color:var(--border-strong, var(--border))}:root[data-theme=light] .chat-model-bar__dropdown option{background:#fff;color:var(--text)}.chat-model-bar__dropdown:focus,.chat-model-bar__dropdown:focus-visible{outline:none;box-shadow:none}.chat-model-bar__settings-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:transparent;color:var(--muted);cursor:pointer;border-radius:4px;padding:0;transition:color .15s,background .15s}.chat-model-bar__settings-btn:hover{color:var(--text);background:#ffffff14}.chat-model-bar__settings-btn:focus,.chat-model-bar__settings-btn:focus-visible{outline:none;box-shadow:none}:root[data-theme=light] .chat-model-bar__settings-btn:hover{background:#0000000f}.chat-model-bar__settings-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.chat-settings-menu{display:none;position:absolute;bottom:calc(100% + 4px);right:0;z-index:60;min-width:180px;padding:6px 0;background:var(--card);border:1px solid var(--border);border-radius:8px;box-shadow:0 4px 16px #0000004d}.chat-settings-menu.active{display:block}.chat-settings-menu__item{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;font-size:13px;color:var(--text);transition:background .1s}.chat-settings-menu__item:hover{background:#ffffff0f}:root[data-theme=light] .chat-settings-menu__item:hover{background:#0000000a}.chat-settings-menu__item input[type=checkbox]{accent-color:var(--accent);width:15px;height:15px;cursor:pointer;flex-shrink:0}.chat-settings-menu__hint{margin-left:auto;font-size:11px;color:var(--muted)}:root[data-theme=light] .chat-settings-menu{background:#fff;box-shadow:0 4px 16px #0000001f}.chat-thinking{margin-bottom:10px;padding:10px 12px;border-radius:10px;border:1px dashed rgba(255,255,255,.18);background:#ffffff0a;color:var(--muted);font-size:12px;line-height:1.4}:root[data-theme=light] .chat-thinking{border-color:#10182840;background:#1018280a}.chat-text{font-size:14px;line-height:1.5;word-wrap:break-word;overflow-wrap:break-word}.chat-text :where(p+p,p+ul,p+ol,p+pre,p+blockquote){margin-top:.75em}.chat-text :where(ul,ol){padding-left:1.5em}.chat-text :where(a){color:var(--accent);text-decoration:underline;text-underline-offset:2px}.chat-text :where(a:hover){opacity:.8}.chat-text :where(:not(pre)>code){background:#00000026;padding:.15em .4em;border-radius:4px}.chat-text :where(pre){background:#00000026;border-radius:6px;padding:10px 12px;overflow-x:auto}.chat-text :where(pre code){background:none;padding:0}.chat-text :where(blockquote){border-left:3px solid var(--border-strong);margin-left:0;color:var(--muted);background:#ffffff05;padding:8px 12px;border-radius:0 var(--radius-sm) var(--radius-sm) 0}.chat-text :where(blockquote blockquote){margin-top:8px;border-left-color:var(--border-hover);background:#ffffff08}.chat-text :where(blockquote blockquote blockquote){border-left-color:var(--muted-strong);background:#ffffff0a}:root[data-theme=light] .chat-text :where(blockquote){background:#00000008}:root[data-theme=light] .chat-text :where(blockquote blockquote){background:#0000000d}:root[data-theme=light] .chat-text :where(blockquote blockquote blockquote){background:#0000000a}:root[data-theme=light] .chat-text :where(:not(pre)>code){background:#00000014;border:1px solid rgba(0,0,0,.1)}:root[data-theme=light] .chat-text :where(pre){background:#0000000d;border:1px solid rgba(0,0,0,.1)}.chat-text :where(hr){border:none;border-top:1px solid var(--border);margin:1em 0}.chat-group{display:flex;gap:12px;align-items:flex-start;margin-bottom:16px;margin-left:44px;margin-right:44px}.chat-group.user{flex-direction:row-reverse;justify-content:flex-start}.chat-group-messages{display:flex;flex-direction:column;gap:2px;max-width:100%}.chat-group.user .chat-group-messages{align-items:flex-end;max-width:85%}.chat-group.user .chat-group-footer{justify-content:flex-end}.chat-group-footer{display:flex;gap:8px;align-items:baseline;margin-top:6px}.chat-sender-name{font-weight:500;font-size:12px;color:var(--muted)}.chat-group-timestamp{font-size:11px;color:var(--muted);opacity:.7}.chat-avatar{width:40px;height:40px;border-radius:8px;background:var(--panel-strong);display:grid;place-items:center;font-weight:600;font-size:14px;flex-shrink:0;align-self:flex-end;margin-bottom:4px}.chat-avatar.user{background:var(--accent-subtle);color:var(--accent)}.chat-avatar.assistant,.chat-avatar.other,.chat-avatar.tool{background:var(--secondary);color:var(--muted)}img.chat-avatar{display:block;object-fit:cover;object-position:center}.chat-bubble{position:relative;display:inline-block;border:1px solid transparent;background:var(--card);border-radius:var(--radius-lg);padding:10px 14px;box-shadow:none;transition:background .15s ease-out,border-color .15s ease-out;max-width:100%;word-wrap:break-word}.chat-copy-btn{position:absolute;top:6px;border:1px solid var(--border);background:var(--bg);color:var(--muted);border-radius:var(--radius-md);padding:4px 6px;font-size:14px;line-height:1;cursor:pointer;opacity:.5;transition:opacity .12s ease-out,background .12s ease-out}.chat-group.assistant .chat-copy-btn,.chat-group.other .chat-copy-btn{left:-40px}.chat-group.user .chat-copy-btn{right:-40px}.chat-copy-btn__icon{display:inline-flex;width:14px;height:14px;position:relative}.chat-copy-btn__icon svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.chat-copy-btn__icon-copy,.chat-copy-btn__icon-check{position:absolute;top:0;left:0;transition:opacity .15s ease}.chat-copy-btn__icon-check,.chat-copy-btn[data-copied="1"] .chat-copy-btn__icon-copy{opacity:0}.chat-copy-btn[data-copied="1"] .chat-copy-btn__icon-check{opacity:1}.chat-copy-btn:hover{opacity:1;background:var(--bg-hover)}.chat-copy-btn[data-copying="1"]{opacity:.3;pointer-events:none}.chat-copy-btn[data-error="1"]{opacity:1;pointer-events:auto;border-color:var(--danger-subtle);background:var(--danger-subtle);color:var(--danger)}.chat-copy-btn[data-copied="1"]{opacity:1;pointer-events:auto;border-color:var(--ok-subtle);background:var(--ok-subtle);color:var(--ok)}.chat-copy-btn:focus-visible{opacity:1;pointer-events:auto;outline:2px solid var(--accent);outline-offset:2px}.chat-group.assistant .chat-bubble,.chat-group.other .chat-bubble{display:block;background:transparent;border-color:transparent;padding:4px 0;box-shadow:none}.chat-group.assistant .chat-bubble:hover,.chat-group.other .chat-bubble:hover{background:transparent}:root[data-theme=light] .chat-group.assistant .chat-bubble,:root[data-theme=light] .chat-group.other .chat-bubble{background:transparent;border-color:transparent;box-shadow:none}.chat-group.user .chat-bubble{background:var(--accent-subtle);border-color:transparent}:root[data-theme=light] .chat-group.user .chat-bubble{border-color:#ea580c33;background:#fb923c1f}.chat-bubble.streaming{border-left:2px solid var(--accent);padding-left:12px;animation:pulsing-accent 1.5s ease-out infinite}@keyframes pulsing-accent{0%,to{border-left-color:var(--accent);opacity:1}50%{border-left-color:var(--accent);opacity:.4}}.chat-bubble.fade-in{animation:fade-in .2s ease-out}@keyframes fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.chat-tool-card{border:1px solid var(--border);border-radius:8px;padding:12px;margin-top:8px;background:var(--card);box-shadow:inset 0 1px 0 var(--card-highlight);transition:border-color .15s ease-out,background .15s ease-out;max-height:120px;overflow:hidden}.chat-tool-card:hover{border-color:var(--border-strong);background:var(--bg-hover)}.chat-tool-card:first-child{margin-top:0}.chat-tool-card--clickable{cursor:pointer}.chat-tool-card--clickable:focus{outline:2px solid var(--accent);outline-offset:2px}.chat-tool-card__header{display:flex;justify-content:space-between;align-items:center;gap:8px}.chat-tool-card__title{display:inline-flex;align-items:center;gap:6px;font-weight:600;font-size:13px;line-height:1.2}.chat-tool-card__icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0}.chat-tool-card__icon svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.chat-tool-card__action{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--accent);opacity:.8;transition:opacity .15s ease-out}.chat-tool-card__action svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.chat-tool-card--clickable:hover .chat-tool-card__action{opacity:1}.chat-tool-card__status{display:inline-flex;align-items:center;color:var(--ok)}.chat-tool-card__status svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.chat-tool-card__status-text{font-size:11px;margin-top:4px}.chat-tool-card__detail{font-size:12px;color:var(--muted);margin-top:4px}.chat-tool-card__preview{font-size:11px;color:var(--muted);margin-top:8px;padding:8px 10px;background:var(--secondary);border-radius:var(--radius-md);white-space:pre-wrap;overflow:hidden;max-height:44px;line-height:1.4;border:1px solid var(--border)}.chat-tool-card--clickable:hover .chat-tool-card__preview{background:var(--bg-hover);border-color:var(--border-strong)}.chat-tool-card__inline{font-size:11px;color:var(--text);margin-top:6px;padding:6px 8px;background:var(--secondary);border-radius:var(--radius-sm);white-space:pre-wrap;word-break:break-word}.chat-reading-indicator{background:transparent;border:1px solid var(--border);padding:12px;display:inline-flex}.chat-reading-indicator__dots{display:flex;gap:6px;align-items:center}.chat-reading-indicator__dots span{width:6px;height:6px;border-radius:50%;background:var(--muted);animation:reading-pulse 1.4s ease-in-out infinite}.chat-reading-indicator__dots span:nth-child(1){animation-delay:0s}.chat-reading-indicator__dots span:nth-child(2){animation-delay:.2s}.chat-reading-indicator__dots span:nth-child(3){animation-delay:.4s}@keyframes reading-pulse{0%,60%,to{opacity:.3;transform:scale(.8)}30%{opacity:1;transform:scale(1)}}.chat-split-container{display:flex;gap:0;flex:1;min-height:0;height:100%}.chat-main{position:relative;min-width:400px;display:flex;flex-direction:column;overflow:hidden;transition:flex .25s ease-out}.chat-sidebar{flex:1;min-width:300px;border-left:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden;animation:slide-in .2s ease-out}@keyframes slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}.sidebar-panel{display:flex;flex-direction:column;height:100%;background:var(--panel)}.sidebar-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border);flex-shrink:0;position:sticky;top:0;z-index:10;background:var(--panel)}.sidebar-header .btn{padding:4px 8px;font-size:14px;min-width:auto;line-height:1}.sidebar-title{font-weight:600;font-size:14px}.sidebar-content{flex:1;overflow:auto;padding:16px}.sidebar-markdown{font-size:14px;line-height:1.5}.sidebar-markdown pre{background:#0000001f;border-radius:4px;padding:12px;overflow-x:auto}.sidebar-markdown code{font-family:var(--mono);font-size:13px}@media(max-width:768px){.chat-split-container--open{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1000}.chat-split-container--open .chat-main{display:none}.chat-split-container--open .chat-sidebar{width:100%;min-width:0;border-left:none}}.card{border:1px solid var(--border);background:var(--card);border-radius:var(--radius-lg);padding:20px;animation:rise .35s var(--ease-out) backwards;transition:border-color var(--duration-normal) var(--ease-out),box-shadow var(--duration-normal) var(--ease-out),transform var(--duration-normal) var(--ease-out);box-shadow:var(--shadow-sm),inset 0 1px 0 var(--card-highlight)}.card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md),inset 0 1px 0 var(--card-highlight)}.card-title{font-size:15px;font-weight:600;letter-spacing:-.02em;color:var(--text-strong)}.card-sub{color:var(--muted);font-size:13px;margin-top:6px;line-height:1.5}.stat{background:var(--card);border-radius:var(--radius-md);padding:14px 16px;border:1px solid var(--border);transition:border-color var(--duration-normal) var(--ease-out),box-shadow var(--duration-normal) var(--ease-out);box-shadow:inset 0 1px 0 var(--card-highlight)}.stat:hover{border-color:var(--border-strong);box-shadow:var(--shadow-sm),inset 0 1px 0 var(--card-highlight)}.stat-label{color:var(--muted);font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.04em}.stat-value{font-size:24px;font-weight:700;margin-top:6px;letter-spacing:-.03em;line-height:1.1}.stat-value.ok{color:var(--ok)}.stat-value.warn{color:var(--warn)}.stat-card{display:grid;gap:6px}.note-title{font-weight:600;letter-spacing:-.01em}.status-list{display:grid;gap:8px}.status-list div{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--border)}.status-list div:last-child{border-bottom:none}.account-count{margin-top:10px;font-size:12px;font-weight:500;color:var(--muted)}.account-card-list{margin-top:16px;display:grid;gap:12px}.account-card{border:1px solid var(--border);border-radius:var(--radius-md);padding:12px;background:var(--bg-elevated);transition:border-color var(--duration-fast) ease}.account-card:hover{border-color:var(--border-strong)}.account-card-header{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.account-card-title{font-weight:500}.account-card-id{font-family:var(--mono);font-size:12px;color:var(--muted)}.account-card-status{margin-top:10px;font-size:13px}.account-card-status div{padding:4px 0}.account-card-error{margin-top:8px;color:var(--danger);font-size:12px}.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:500;line-height:1.4}.badge-baileys{background:#25d36626;color:#25d366}.badge-cloud{background:#007aff26;color:#007aff}.label{color:var(--muted);font-size:12px;font-weight:500}.pill{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);padding:6px 12px;border-radius:var(--radius-full);background:var(--secondary);font-size:13px;font-weight:500;transition:border-color var(--duration-fast) ease}.pill:hover{border-color:var(--border-strong)}.pill.danger{border-color:var(--danger-subtle);background:var(--danger-subtle);color:var(--danger)}.theme-toggle{--theme-item: 28px;--theme-gap: 2px;--theme-pad: 4px;position:relative}.theme-toggle__track{position:relative;display:grid;grid-template-columns:repeat(3,var(--theme-item));gap:var(--theme-gap);padding:var(--theme-pad);border-radius:var(--radius-full);border:1px solid var(--border);background:var(--secondary)}.theme-toggle__indicator{position:absolute;top:50%;left:var(--theme-pad);width:var(--theme-item);height:var(--theme-item);border-radius:var(--radius-full);transform:translateY(-50%) translate(calc(var(--theme-index, 0) * (var(--theme-item) + var(--theme-gap))));background:var(--accent);transition:transform var(--duration-normal) var(--ease-out);z-index:0}.theme-toggle__button{height:var(--theme-item);width:var(--theme-item);display:grid;place-items:center;border:0;border-radius:var(--radius-full);background:transparent;color:var(--muted);cursor:pointer;position:relative;z-index:1;transition:color var(--duration-fast) ease}.theme-toggle__button:hover{color:var(--text)}.theme-toggle__button.active{color:var(--accent-foreground)}.theme-toggle__button.active .theme-icon{stroke:var(--accent-foreground)}.theme-icon{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.statusDot{width:8px;height:8px;border-radius:var(--radius-full);background:var(--danger);box-shadow:0 0 8px #ef444480;animation:pulse-subtle 2s ease-in-out infinite}.statusDot.ok{background:var(--ok);box-shadow:0 0 8px #22c55e80;animation:none}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--border);background:var(--bg-elevated);padding:9px 16px;border-radius:var(--radius-md);font-size:13px;font-weight:500;letter-spacing:-.01em;cursor:pointer;transition:border-color var(--duration-fast) var(--ease-out),background var(--duration-fast) var(--ease-out),box-shadow var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out)}.btn:hover{background:var(--bg-hover);border-color:var(--border-strong);transform:translateY(-1px);box-shadow:var(--shadow-sm)}.btn:active{background:var(--secondary);transform:translateY(0);box-shadow:none}.btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.btn.primary{border-color:var(--accent);background:var(--accent);color:var(--primary-foreground);box-shadow:0 1px 2px #0003}.btn.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover);box-shadow:var(--shadow-md),0 0 20px var(--accent-glow)}.btn-kbd{display:inline-flex;align-items:center;justify-content:center;margin-left:6px;padding:2px 5px;font-family:var(--mono);font-size:11px;font-weight:500;line-height:1;border-radius:4px;background:#ffffff26;color:inherit;opacity:.8}.btn.primary .btn-kbd{background:#fff3}:root[data-theme=light] .btn-kbd{background:#00000014}:root[data-theme=light] .btn.primary .btn-kbd{background:#ffffff40}.btn.active{border-color:var(--accent);background:var(--accent-subtle);color:var(--accent)}.btn.danger{border-color:transparent;background:var(--danger-subtle);color:var(--danger)}.btn.danger:hover{background:#ef444426}.btn--sm{padding:6px 10px;font-size:12px}.btn:disabled{opacity:.5;cursor:not-allowed}.field{display:grid;gap:6px}.field.full{grid-column:1 / -1}.field span{color:var(--muted);font-size:13px;font-weight:500}.field input,.field textarea,.field select{border:1px solid var(--input);background:var(--card);border-radius:var(--radius-md);padding:8px 12px;outline:none;box-shadow:inset 0 1px 0 var(--card-highlight);transition:border-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--ring);box-shadow:var(--focus-ring)}.field select{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:36px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23a1a1aa' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;cursor:pointer}.field textarea{font-family:var(--mono);min-height:160px;resize:vertical;white-space:pre;line-height:1.5}.field.checkbox{grid-template-columns:auto 1fr;align-items:center}.config-form .field.checkbox{grid-template-columns:18px minmax(0,1fr);column-gap:10px}.config-form .field.checkbox input[type=checkbox]{margin:0;width:16px;height:16px;accent-color:var(--accent)}.form-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}:root[data-theme=light] .field input,:root[data-theme=light] .field textarea,:root[data-theme=light] .field select{background:var(--card);border-color:var(--input)}:root[data-theme=light] .btn{background:var(--bg);border-color:var(--input)}:root[data-theme=light] .btn:hover{background:var(--bg-hover)}:root[data-theme=light] .btn.primary{background:var(--accent);border-color:var(--accent)}.muted{color:var(--muted)}.mono{font-family:var(--mono)}.callout{padding:14px 16px;border-radius:var(--radius-md);background:var(--secondary);border:1px solid var(--border);font-size:13px;line-height:1.5;position:relative}.callout.danger{border-color:#ef444440;background:linear-gradient(135deg,#ef444414,#ef44440a);color:var(--danger)}.callout.info{border-color:#3b82f640;background:linear-gradient(135deg,#3b82f614,#3b82f60a);color:var(--info)}.callout.success{border-color:#22c55e40;background:linear-gradient(135deg,#22c55e14,#22c55e0a);color:var(--ok)}.compaction-indicator{font-size:13px;padding:10px 12px;margin-bottom:8px;animation:fade-in .2s var(--ease-out)}.compaction-indicator--active{animation:compaction-pulse 1.5s ease-in-out infinite}.compaction-indicator--complete{animation:fade-in .2s var(--ease-out)}@keyframes compaction-pulse{0%,to{opacity:.7}50%{opacity:1}}.code-block{font-family:var(--mono);font-size:13px;line-height:1.5;background:var(--secondary);padding:12px;border-radius:var(--radius-md);border:1px solid var(--border);max-height:360px;overflow:auto;max-width:100%}:root[data-theme=light] .code-block,:root[data-theme=light] .list-item,:root[data-theme=light] .table-row,:root[data-theme=light] .chip{background:var(--bg)}.list{display:grid;gap:8px;container-type:inline-size}.list-item{display:grid;grid-template-columns:minmax(0,1fr) minmax(200px,260px);gap:16px;align-items:start;border:1px solid var(--border);border-radius:var(--radius-md);padding:12px;background:var(--card);transition:border-color var(--duration-fast) ease}.list-item-clickable{cursor:pointer}.list-item-clickable:hover{border-color:var(--border-strong)}.list-item-selected{border-color:var(--accent);box-shadow:var(--focus-ring)}.list-main{display:grid;gap:4px;min-width:0}.list-title{font-weight:500}.list-sub{color:var(--muted);font-size:12px}.list-meta{text-align:right;color:var(--muted);font-size:12px;display:grid;gap:4px;min-width:200px}.list-meta .btn{padding:6px 10px}.list-meta .field input,.list-meta .field textarea,.list-meta .field select{width:100%}@container (max-width: 560px){.list-item{grid-template-columns:1fr}.list-meta{min-width:0;text-align:left}}.chip-row{display:flex;flex-wrap:wrap;gap:8px}.chip{font-size:12px;font-weight:500;border:1px solid var(--border);border-radius:var(--radius-full);padding:5px 12px;color:var(--muted);background:var(--secondary);transition:border-color var(--duration-fast) var(--ease-out),background var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out)}.chip:hover{border-color:var(--border-strong);transform:translateY(-1px)}.chip input{margin-right:6px}.chip-ok{color:var(--ok);border-color:#22c55e4d;background:var(--ok-subtle)}.chip-warn{color:var(--warn);border-color:#f59e0b4d;background:var(--warn-subtle)}.table{display:grid;gap:6px}.table-head,.table-row{display:grid;grid-template-columns:1.4fr 1fr .8fr .7fr .8fr .8fr .8fr .8fr .6fr;gap:12px;align-items:center}.table-head{font-size:12px;font-weight:500;color:var(--muted);padding:0 12px}.table-row{border:1px solid var(--border);padding:10px 12px;border-radius:var(--radius-md);background:var(--card);transition:border-color var(--duration-fast) ease}.table-row:hover{border-color:var(--border-strong)}.session-link{text-decoration:none;color:var(--accent);font-weight:500}.session-link:hover{text-decoration:underline}.log-stream{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);max-height:500px;overflow:auto;container-type:inline-size}.log-row{display:flex;flex-direction:column;gap:4px;padding:8px 12px;border-bottom:1px solid var(--border);font-size:12px;transition:background var(--duration-fast) ease}.log-row:hover{background:var(--bg-hover)}.log-row:last-child{border-bottom:none}.log-row-header{display:flex;align-items:center;gap:8px}.log-time{color:var(--muted);font-family:var(--mono)}.log-level{font-size:11px;font-weight:500;border:1px solid var(--border);border-radius:var(--radius-sm);padding:2px 6px;width:fit-content}.log-level.trace,.log-level.debug{color:var(--muted)}.log-level.info{color:var(--info);border-color:#3b82f64d}.log-level.warn{color:var(--warn);border-color:var(--warn-subtle)}.log-level.error,.log-level.fatal{color:var(--danger);border-color:var(--danger-subtle)}.log-chip.trace,.log-chip.debug{color:var(--muted)}.log-chip.info{color:var(--info);border-color:#3b82f64d}.log-chip.warn{color:var(--warn);border-color:var(--warn-subtle)}.log-chip.error,.log-chip.fatal{color:var(--danger);border-color:var(--danger-subtle)}.log-subsystem{color:var(--muted);font-family:var(--mono)}.log-message{white-space:pre-wrap;word-break:break-word;font-family:var(--mono)}@container (max-width: 620px){.log-subsystem{display:none}.log-row-header{flex-wrap:wrap}}.session-log-type{font-size:11px;font-weight:500;border:1px solid var(--border);border-radius:var(--radius-sm);padding:2px 6px;width:fit-content}.session-log-type.user{color:var(--success);border-color:var(--success-subtle)}.session-log-type.assistant{color:var(--info);border-color:#3b82f64d}.session-log-type.tool{color:var(--warn);border-color:var(--warn-subtle)}.session-log-type.thinking{color:var(--muted);border-color:var(--border)}.session-log-type.error{color:var(--danger);border-color:var(--danger-subtle)}.session-log-type.system{color:var(--muted);border-color:var(--border)}.session-log-chip.user{color:var(--success);border-color:var(--success-subtle)}.session-log-chip.assistant{color:var(--info);border-color:#3b82f64d}.session-log-chip.tool{color:var(--warn);border-color:var(--warn-subtle)}.session-log-chip.thinking{color:var(--muted)}.session-log-chip.error{color:var(--danger);border-color:var(--danger-subtle)}.session-label{color:var(--muted);font-family:var(--mono)}.session-tool,.session-model{color:var(--muted);font-family:var(--mono);font-size:11px}.chat{display:flex;flex-direction:column;min-height:0}.shell--chat .chat{flex:1}.chat-header{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap}.chat-header__left{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;min-width:0}.chat-header__right{display:flex;align-items:center;gap:8px}.chat-session{min-width:240px}.chat-thread{margin-top:16px;display:flex;flex-direction:column;gap:12px;flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;padding:16px 12px;min-width:0;border-radius:0;border:none;background:transparent}.chat-queue{margin-top:12px;padding:12px;border-radius:var(--radius-lg);border:1px solid var(--border);background:var(--card);display:grid;gap:8px}.chat-queue__title{font-family:var(--mono);font-size:12px;font-weight:500;color:var(--muted)}.chat-queue__list{display:grid;gap:8px}.chat-queue__item{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px;padding:10px 12px;border-radius:var(--radius-md);border:1px dashed var(--border-strong);background:var(--secondary)}.chat-queue__text{color:var(--chat-text);font-size:13px;line-height:1.45;white-space:pre-wrap;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.chat-queue__remove{align-self:start;padding:4px 10px;font-size:12px;line-height:1}.chat-line{display:flex}.chat-line.user{justify-content:flex-end}.chat-line.assistant,.chat-line.other{justify-content:flex-start}.chat-msg{display:grid;gap:6px;max-width:min(700px,82%)}.chat-line.user .chat-msg{justify-items:end}.chat-bubble{border:1px solid transparent;background:var(--card);border-radius:var(--radius-lg);padding:10px 14px;min-width:0}:root[data-theme=light] .chat-bubble{border-color:var(--border);background:var(--bg)}.chat-line.user .chat-bubble{border-color:transparent;background:var(--accent-subtle)}:root[data-theme=light] .chat-line.user .chat-bubble{border-color:#ea580c33;background:#fb923c1f}.chat-line.assistant .chat-bubble{border-color:transparent;background:var(--secondary)}:root[data-theme=light] .chat-line.assistant .chat-bubble{border-color:var(--border);background:var(--bg-muted)}@keyframes chatStreamPulse{0%,to{border-color:var(--border)}50%{border-color:var(--accent)}}.chat-bubble.streaming{animation:chatStreamPulse 1.5s ease-in-out infinite}@media(prefers-reduced-motion:reduce){.chat-bubble.streaming{animation:none;border-color:var(--accent)}}.chat-bubble.chat-reading-indicator{width:fit-content;padding:10px 16px}.chat-reading-indicator__dots{display:inline-flex;align-items:center;gap:4px;height:12px}.chat-reading-indicator__dots>span{display:inline-block;width:6px;height:6px;border-radius:var(--radius-full);background:var(--muted);opacity:.6;transform:translateY(0);animation:chatReadingDot 1.2s ease-in-out infinite;will-change:transform,opacity}.chat-reading-indicator__dots>span:nth-child(2){animation-delay:.15s}.chat-reading-indicator__dots>span:nth-child(3){animation-delay:.3s}@keyframes chatReadingDot{0%,80%,to{opacity:.4;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}@media(prefers-reduced-motion:reduce){.chat-reading-indicator__dots>span{animation:none;opacity:.6}}.chat-text{overflow-wrap:anywhere;word-break:break-word;color:var(--chat-text);line-height:1.5}.chat-text :where(p,ul,ol,pre,blockquote,table){margin:0}.chat-text :where(p+p,p+ul,p+ol,p+pre,p+blockquote,p+table){margin-top:.75em}.chat-text :where(ul,ol){padding-left:1.2em}.chat-text :where(li+li){margin-top:.25em}.chat-text :where(a){color:var(--accent)}.chat-text :where(a:hover){text-decoration:underline}.chat-text :where(blockquote){border-left:2px solid var(--border-strong);padding-left:12px;color:var(--muted)}.chat-text :where(hr){border:0;border-top:1px solid var(--border);margin:1em 0}.chat-text :where(code){font-family:var(--mono);font-size:.9em}.chat-text :where(:not(pre)>code){padding:.15em .35em;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--secondary)}:root[data-theme=light] .chat-text :where(:not(pre)>code){background:var(--bg-muted)}.chat-text :where(pre){margin-top:.75em;padding:10px 12px;border-radius:var(--radius-md);border:1px solid var(--border);background:var(--secondary);overflow:auto}:root[data-theme=light] .chat-text :where(pre){background:var(--bg-muted)}.chat-text :where(pre code){font-size:12px;white-space:pre}.chat-text :where(table){margin-top:.75em;border-collapse:collapse;width:100%;font-size:13px}.chat-text :where(th,td){border:1px solid var(--border);padding:6px 10px;vertical-align:top}.chat-text :where(th){font-family:var(--mono);font-weight:500;color:var(--muted);background:var(--secondary)}.chat-tool-card{margin-top:8px;padding:10px 12px;border-radius:var(--radius-md);border:1px solid var(--border);background:var(--secondary);display:grid;gap:4px}:root[data-theme=light] .chat-tool-card{background:var(--bg-muted)}.chat-tool-card__title{font-family:var(--mono);font-size:12px;font-weight:500;color:var(--text)}.chat-tool-card__detail{font-family:var(--mono);font-size:11px;color:var(--muted)}.chat-tool-card__details{margin-top:6px}.chat-tool-card__summary{font-family:var(--mono);font-size:11px;color:var(--muted);cursor:pointer;list-style:none;display:inline-flex;align-items:center;gap:6px}.chat-tool-card__summary::-webkit-details-marker{display:none}.chat-tool-card__summary-meta{color:var(--muted);opacity:.7}.chat-tool-card__details[open] .chat-tool-card__summary{color:var(--text)}.chat-tool-card__output{margin-top:8px;font-family:var(--mono);font-size:11px;line-height:1.5;white-space:pre-wrap;color:var(--chat-text);padding:8px 10px;border-radius:var(--radius-md);border:1px solid var(--border);background:var(--card)}:root[data-theme=light] .chat-tool-card__output{background:var(--bg)}.chat-stamp{font-size:11px;color:var(--muted)}.chat-line.user .chat-stamp{text-align:right}.chat-compose{margin-top:12px;display:flex;flex-direction:column;gap:10px}.shell--chat .chat-compose{position:sticky;bottom:0;z-index:5;margin-top:0;padding-top:12px;background:linear-gradient(180deg,transparent 0%,var(--bg) 40%)}.shell--chat-focus .chat-compose{bottom:calc(var(--shell-pad) + 8px);padding-bottom:calc(12px + env(safe-area-inset-bottom,0px));border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.chat-compose__field{gap:4px}.chat-compose__field textarea{min-height:72px;padding:10px 14px;border-radius:var(--radius-lg);resize:vertical;white-space:pre-wrap;font-family:var(--font-body);line-height:1.5;border:1px solid var(--input);background:var(--card);box-shadow:inset 0 1px 0 var(--card-highlight);transition:border-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease}.chat-compose__field textarea:focus{border-color:var(--ring);box-shadow:var(--focus-ring)}.chat-compose__field textarea:disabled{opacity:.5;cursor:not-allowed}.chat-compose__actions{justify-content:flex-end;align-self:end}@media(max-width:900px){.chat-session{min-width:180px}.chat-compose{grid-template-columns:1fr}}.qr-wrap{margin-top:16px;border-radius:var(--radius-md);background:var(--card);border:1px dashed var(--border-strong);padding:16px;display:inline-flex}.qr-wrap img{width:160px;height:160px;border-radius:var(--radius-sm);image-rendering:pixelated}.exec-approval-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000c;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:24px;z-index:200}.exec-approval-card{width:min(540px,100%);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;animation:scale-in .2s var(--ease-out)}.exec-approval-header{display:flex;align-items:center;justify-content:space-between;gap:16px}.exec-approval-title{font-size:14px;font-weight:600}.exec-approval-sub{color:var(--muted);font-size:13px;margin-top:4px}.exec-approval-queue{font-size:11px;font-weight:500;color:var(--muted);border:1px solid var(--border);border-radius:var(--radius-full);padding:4px 10px}.exec-approval-command{margin-top:12px;padding:10px 12px;background:var(--secondary);border:1px solid var(--border);border-radius:var(--radius-md);word-break:break-word;white-space:pre-wrap;font-family:var(--mono);font-size:13px}.exec-approval-meta{margin-top:12px;display:grid;gap:6px;font-size:13px;color:var(--muted)}.exec-approval-meta-row{display:flex;justify-content:space-between;gap:12px}.exec-approval-meta-row span:last-child{color:var(--text);font-family:var(--mono)}.exec-approval-error{margin-top:10px;font-size:13px;color:var(--danger)}.exec-approval-actions{margin-top:16px;display:flex;flex-wrap:wrap;gap:8px}.event-status-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:20px}.event-status-bar__info{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted);flex-wrap:wrap}.event-status-bar__info .statusDot{flex-shrink:0}.event-status-bar__sep{color:var(--border-strong);-webkit-user-select:none;user-select:none}.event-grid{display:grid;gap:12px;grid-template-columns:repeat(2,1fr)}@media(max-width:600px){.event-grid{grid-template-columns:1fr}}.event-card{border:1px solid var(--border);background:var(--card);border-radius:var(--radius-md);padding:14px;cursor:pointer;transition:border-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease,transform var(--duration-fast) ease;box-shadow:var(--shadow-sm),inset 0 1px 0 var(--card-highlight);display:flex;flex-direction:column;gap:8px}.event-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md),inset 0 1px 0 var(--card-highlight);transform:translateY(-1px)}.event-card.disabled{opacity:.6}.event-card__header{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.event-card__name{font-weight:500;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.event-card__schedule{color:var(--muted);font-size:12px;line-height:1.4}.event-card__agent{color:var(--muted);font-size:11px;font-family:var(--mono)}.event-card__footer{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-top:auto}.event-card__status{display:flex;align-items:center;gap:6px}.event-card__actions{display:flex;align-items:center;gap:4px}.event-card__actions .btn-icon{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--muted);cursor:pointer;transition:color var(--duration-fast) ease,background var(--duration-fast) ease,border-color var(--duration-fast) ease}.event-card__actions .btn-icon:hover{color:var(--text);background:var(--bg-hover);border-color:var(--border)}.event-card__actions .btn-icon.danger:hover{color:var(--danger);background:var(--danger-subtle);border-color:var(--danger-subtle)}.event-card__actions .btn-icon svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.event-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:20px;z-index:200;animation:fade-in .15s var(--ease-out)}.event-modal-overlay *:focus,.event-modal-overlay *:focus-visible{outline:none!important;box-shadow:none}.event-modal{width:min(560px,100%);max-height:calc(100vh - 40px);overflow-y:auto;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:24px;box-shadow:var(--shadow-xl);animation:scale-in .2s var(--ease-out)}.event-modal__header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px}.event-modal__title{font-size:16px;font-weight:600;letter-spacing:-.02em}.event-modal__close{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid var(--border);border-radius:var(--radius-sm);background:transparent;color:var(--muted);cursor:pointer;transition:color var(--duration-fast) ease,background var(--duration-fast) ease;flex-shrink:0}.event-modal__close:hover{color:var(--text);background:var(--bg-hover)}.event-modal__close svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.event-detail-section{margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}.event-detail-section:first-of-type{margin-top:0;padding-top:0;border-top:none}.event-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:6px 0}.event-detail-label{color:var(--muted);font-size:13px;font-weight:500;flex-shrink:0}.event-detail-value{font-size:13px;text-align:right;word-break:break-word}.config-layout{display:grid;grid-template-columns:260px minmax(0,1fr);gap:0;height:calc(100vh - 160px);margin:-16px;border-radius:var(--radius-xl);overflow:hidden;border:1px solid var(--border);background:var(--panel)}.config-sidebar{display:flex;flex-direction:column;background:var(--bg-accent);border-right:1px solid var(--border);min-height:0;overflow:hidden}:root[data-theme=light] .config-sidebar{background:var(--bg-hover)}.config-sidebar__header{display:flex;align-items:center;justify-content:space-between;padding:18px;border-bottom:1px solid var(--border)}.config-sidebar__title{font-weight:600;font-size:14px;letter-spacing:-.01em}.config-sidebar__footer{margin-top:auto;padding:14px;border-top:1px solid var(--border)}.config-search{position:relative;padding:14px;border-bottom:1px solid var(--border)}.config-search__icon{position:absolute;left:28px;top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--muted);pointer-events:none}.config-search__input{width:100%;padding:11px 36px 11px 42px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-elevated);font-size:13px;outline:none;transition:border-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease,background var(--duration-fast) ease}.config-search__input::placeholder{color:var(--muted)}.config-search__input:focus{border-color:var(--accent);box-shadow:var(--focus-ring);background:var(--bg-hover)}:root[data-theme=light] .config-search__input{background:#fff}:root[data-theme=light] .config-search__input:focus{background:#fff}.config-search__clear{position:absolute;right:22px;top:50%;transform:translateY(-50%);width:22px;height:22px;border:none;border-radius:var(--radius-full);background:var(--bg-hover);color:var(--muted);font-size:14px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background var(--duration-fast) ease,color var(--duration-fast) ease}.config-search__clear:hover{background:var(--border-strong);color:var(--text)}.config-nav{flex:1;overflow-y:auto;padding:10px}.config-nav__item{display:flex;align-items:center;gap:12px;width:100%;padding:11px 14px;border:none;border-radius:var(--radius-md);background:transparent;color:var(--muted);font-size:13px;font-weight:500;text-align:left;cursor:pointer;transition:background var(--duration-fast) ease,color var(--duration-fast) ease}.config-nav__item:hover{background:var(--bg-hover);color:var(--text)}:root[data-theme=light] .config-nav__item:hover{background:#0000000a}.config-nav__item.active{background:var(--accent-subtle);color:var(--accent)}.config-nav__icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:15px;opacity:.7}.config-nav__item:hover .config-nav__icon,.config-nav__item.active .config-nav__icon{opacity:1}.config-nav__icon svg{width:18px;height:18px;stroke:currentColor;fill:none}.config-nav__label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.config-mode-toggle{display:flex;padding:4px;background:var(--bg-elevated);border-radius:var(--radius-md);border:1px solid var(--border)}:root[data-theme=light] .config-mode-toggle{background:#fff}.config-mode-toggle__btn{flex:1;padding:9px 14px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--muted);font-size:12px;font-weight:600;cursor:pointer;transition:background var(--duration-fast) ease,color var(--duration-fast) ease,box-shadow var(--duration-fast) ease}.config-mode-toggle__btn:hover{color:var(--text)}.config-mode-toggle__btn.active{background:var(--accent);color:#fff;box-shadow:var(--shadow-sm)}.config-main{display:flex;flex-direction:column;min-height:0;min-width:0;background:var(--panel);overflow:hidden}.config-actions{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 22px;background:var(--bg-accent);border-bottom:1px solid var(--border)}:root[data-theme=light] .config-actions{background:var(--bg-hover)}.config-actions__left,.config-actions__right{display:flex;align-items:center;gap:10px}.config-changes-badge{padding:6px 14px;border-radius:var(--radius-full);background:var(--accent-subtle);border:1px solid rgba(255,77,77,.3);color:var(--accent);font-size:12px;font-weight:600}.config-status{font-size:13px;color:var(--muted)}.config-diff{margin:18px 22px 0;border:1px solid rgba(255,77,77,.25);border-radius:var(--radius-lg);background:var(--accent-subtle);overflow:hidden}.config-diff__summary{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;cursor:pointer;font-size:13px;font-weight:600;color:var(--accent);list-style:none}.config-diff__summary::-webkit-details-marker{display:none}.config-diff__chevron{width:16px;height:16px;transition:transform var(--duration-normal) var(--ease-out)}.config-diff__chevron svg{width:100%;height:100%}.config-diff[open] .config-diff__chevron{transform:rotate(180deg)}.config-diff__content{padding:0 18px 18px;display:grid;gap:10px}.config-diff__item{display:flex;align-items:baseline;gap:14px;padding:10px 14px;border-radius:var(--radius-md);background:var(--bg-elevated);font-size:12px;font-family:var(--mono)}:root[data-theme=light] .config-diff__item{background:#fff}.config-diff__path{font-weight:600;color:var(--text);flex-shrink:0}.config-diff__values{display:flex;align-items:baseline;gap:10px;min-width:0;flex-wrap:wrap}.config-diff__from{color:var(--danger);opacity:.85}.config-diff__arrow{color:var(--muted)}.config-diff__to{color:var(--ok)}.config-section-hero{display:flex;align-items:center;gap:16px;padding:16px 22px;border-bottom:1px solid var(--border);background:var(--bg-accent)}:root[data-theme=light] .config-section-hero{background:var(--bg-hover)}.config-section-hero__icon{width:30px;height:30px;color:var(--accent);display:flex;align-items:center;justify-content:center}.config-section-hero__icon svg{width:100%;height:100%;stroke:currentColor;fill:none}.config-section-hero__text{display:grid;gap:3px;min-width:0}.config-section-hero__title{font-size:16px;font-weight:600;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.config-section-hero__desc{font-size:13px;color:var(--muted)}.config-subnav{display:flex;gap:8px;padding:12px 22px 14px;border-bottom:1px solid var(--border);background:var(--bg-accent);overflow-x:auto}:root[data-theme=light] .config-subnav{background:var(--bg-hover)}.config-subnav__item{border:1px solid transparent;border-radius:var(--radius-full);padding:7px 14px;font-size:12px;font-weight:600;color:var(--muted);background:var(--bg-elevated);cursor:pointer;transition:background var(--duration-fast) ease,color var(--duration-fast) ease,border-color var(--duration-fast) ease;white-space:nowrap}:root[data-theme=light] .config-subnav__item{background:#fff}.config-subnav__item:hover{color:var(--text);border-color:var(--border)}.config-subnav__item.active{color:var(--accent);border-color:#ff4d4d66;background:var(--accent-subtle)}.config-content{flex:1;overflow-y:auto;padding:22px}.config-raw-field textarea{min-height:500px;font-family:var(--mono);font-size:13px;line-height:1.55}.config-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:80px 24px;color:var(--muted)}.config-loading__spinner{width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:var(--radius-full);animation:spin .75s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.config-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:80px 24px;text-align:center}.config-empty__icon{font-size:56px;opacity:.35}.config-empty__text{color:var(--muted);font-size:15px}.config-form--modern{display:grid;gap:26px}.config-section-card{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--bg-elevated);overflow:hidden;transition:border-color var(--duration-fast) ease}.config-section-card:hover{border-color:var(--border-strong)}:root[data-theme=light] .config-section-card{background:#fff}.config-section-card__header{display:flex;align-items:flex-start;gap:16px;padding:20px 22px;background:var(--bg-accent);border-bottom:1px solid var(--border)}:root[data-theme=light] .config-section-card__header{background:var(--bg-hover)}.config-section-card__icon{width:34px;height:34px;color:var(--accent);flex-shrink:0}.config-section-card__icon svg{width:100%;height:100%}.config-section-card__titles{flex:1;min-width:0}.config-section-card__title{margin:0;font-size:17px;font-weight:600;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.config-section-card__desc{margin:5px 0 0;font-size:13px;color:var(--muted);line-height:1.45}.config-section-card__content{padding:22px}.cfg-fields{display:grid;gap:22px}.cfg-field{display:grid;gap:8px}.cfg-field--error{padding:14px;border-radius:var(--radius-md);background:var(--danger-subtle);border:1px solid rgba(239,68,68,.3)}.cfg-field__label{font-size:13px;font-weight:600;color:var(--text)}.cfg-field__help{font-size:12px;color:var(--muted);line-height:1.45}.cfg-field__error{font-size:12px;color:var(--danger)}.cfg-input-wrap{display:flex;gap:10px}.cfg-input{flex:1;padding:11px 14px;border:1px solid var(--border-strong);border-radius:var(--radius-md);background:var(--bg-accent);font-size:14px;outline:none;transition:border-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease,background var(--duration-fast) ease}.cfg-input::placeholder{color:var(--muted);opacity:.7}.cfg-input:focus{border-color:var(--accent);box-shadow:var(--focus-ring);background:var(--bg-hover)}:root[data-theme=light] .cfg-input{background:#fff}:root[data-theme=light] .cfg-input:focus{background:#fff}.cfg-input--sm{padding:9px 12px;font-size:13px}.cfg-input__reset{padding:10px 14px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-elevated);color:var(--muted);font-size:14px;cursor:pointer;transition:background var(--duration-fast) ease,color var(--duration-fast) ease}.cfg-input__reset:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.cfg-input__reset:disabled{opacity:.5;cursor:not-allowed}.cfg-textarea{width:100%;padding:12px 14px;border:1px solid var(--border-strong);border-radius:var(--radius-md);background:var(--bg-accent);font-family:var(--mono);font-size:13px;line-height:1.55;resize:vertical;outline:none;transition:border-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease}.cfg-textarea:focus{border-color:var(--accent);box-shadow:var(--focus-ring)}:root[data-theme=light] .cfg-textarea{background:#fff}.cfg-textarea--sm{padding:10px 12px;font-size:12px}.cfg-number{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--radius-md);overflow:hidden;background:var(--bg-accent)}:root[data-theme=light] .cfg-number{background:#fff}.cfg-number__btn{width:44px;border:none;background:var(--bg-elevated);color:var(--text);font-size:18px;font-weight:300;cursor:pointer;transition:background var(--duration-fast) ease}.cfg-number__btn:hover:not(:disabled){background:var(--bg-hover)}.cfg-number__btn:disabled{opacity:.4;cursor:not-allowed}:root[data-theme=light] .cfg-number__btn{background:var(--bg-hover)}:root[data-theme=light] .cfg-number__btn:hover:not(:disabled){background:var(--border)}.cfg-number__input{width:85px;padding:11px;border:none;border-left:1px solid var(--border);border-right:1px solid var(--border);background:transparent;font-size:14px;text-align:center;outline:none;-moz-appearance:textfield}.cfg-number__input::-webkit-outer-spin-button,.cfg-number__input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.cfg-select{padding:11px 40px 11px 14px;border:1px solid var(--border-strong);border-radius:var(--radius-md);background-color:var(--bg-accent);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;font-size:14px;cursor:pointer;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;transition:border-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease}.cfg-select:focus{border-color:var(--accent);box-shadow:var(--focus-ring)}:root[data-theme=light] .cfg-select{background-color:#fff}.cfg-segmented{display:inline-flex;padding:4px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-accent)}:root[data-theme=light] .cfg-segmented{background:var(--bg-hover)}.cfg-segmented__btn{padding:9px 18px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--muted);font-size:13px;font-weight:500;cursor:pointer;transition:background var(--duration-fast) ease,color var(--duration-fast) ease,box-shadow var(--duration-fast) ease}.cfg-segmented__btn:hover:not(:disabled):not(.active){color:var(--text)}.cfg-segmented__btn.active{background:var(--accent);color:#fff;box-shadow:var(--shadow-sm)}.cfg-segmented__btn:disabled{opacity:.5;cursor:not-allowed}.cfg-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:16px 18px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--bg-accent);cursor:pointer;transition:background var(--duration-fast) ease,border-color var(--duration-fast) ease}.cfg-toggle-row:hover:not(.disabled){background:var(--bg-hover);border-color:var(--border-strong)}.cfg-toggle-row.disabled{opacity:.55;cursor:not-allowed}:root[data-theme=light] .cfg-toggle-row{background:#fff}:root[data-theme=light] .cfg-toggle-row:hover:not(.disabled){background:var(--bg-hover)}.cfg-toggle-row__content{flex:1;min-width:0}.cfg-toggle-row__label{display:block;font-size:14px;font-weight:500;color:var(--text)}.cfg-toggle-row__help{display:block;margin-top:3px;font-size:12px;color:var(--muted);line-height:1.45}.cfg-toggle{position:relative;flex-shrink:0}.cfg-toggle input{position:absolute;opacity:0;width:0;height:0}.cfg-toggle__track{display:block;width:50px;height:28px;background:var(--bg-elevated);border:1px solid var(--border-strong);border-radius:var(--radius-full);position:relative;transition:background var(--duration-normal) ease,border-color var(--duration-normal) ease}:root[data-theme=light] .cfg-toggle__track{background:var(--border)}.cfg-toggle__track:after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;background:var(--text);border-radius:var(--radius-full);box-shadow:var(--shadow-sm);transition:transform var(--duration-normal) var(--ease-out),background var(--duration-normal) ease}.cfg-toggle input:checked+.cfg-toggle__track{background:var(--ok-subtle);border-color:#22c55e66}.cfg-toggle input:checked+.cfg-toggle__track:after{transform:translate(22px);background:var(--ok)}.cfg-toggle input:focus+.cfg-toggle__track{box-shadow:var(--focus-ring)}.cfg-object{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--bg-accent);overflow:hidden}:root[data-theme=light] .cfg-object{background:#fff}.cfg-object__header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;cursor:pointer;list-style:none;transition:background var(--duration-fast) ease}.cfg-object__header:hover{background:var(--bg-hover)}.cfg-object__header::-webkit-details-marker{display:none}.cfg-object__title{font-size:14px;font-weight:600;color:var(--text)}.cfg-object__chevron{width:18px;height:18px;color:var(--muted);transition:transform var(--duration-normal) var(--ease-out)}.cfg-object__chevron svg{width:100%;height:100%}.cfg-object[open] .cfg-object__chevron{transform:rotate(180deg)}.cfg-object__help{padding:0 18px 14px;font-size:12px;color:var(--muted);border-bottom:1px solid var(--border)}.cfg-object__content{padding:18px;display:grid;gap:18px}.cfg-array{border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.cfg-array__header{display:flex;align-items:center;gap:14px;padding:14px 18px;background:var(--bg-accent);border-bottom:1px solid var(--border)}:root[data-theme=light] .cfg-array__header{background:var(--bg-hover)}.cfg-array__label{flex:1;font-size:14px;font-weight:600;color:var(--text)}.cfg-array__count{font-size:12px;color:var(--muted);padding:4px 10px;background:var(--bg-elevated);border-radius:var(--radius-full)}:root[data-theme=light] .cfg-array__count{background:#fff}.cfg-array__add{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-elevated);color:var(--text);font-size:12px;font-weight:500;cursor:pointer;transition:background var(--duration-fast) ease}.cfg-array__add:hover:not(:disabled){background:var(--bg-hover)}.cfg-array__add:disabled{opacity:.5;cursor:not-allowed}.cfg-array__add-icon{width:14px;height:14px}.cfg-array__add-icon svg{width:100%;height:100%}.cfg-array__help{padding:12px 18px;font-size:12px;color:var(--muted);border-bottom:1px solid var(--border)}.cfg-array__empty{padding:36px 18px;text-align:center;color:var(--muted);font-size:13px}.cfg-array__items{display:grid;gap:1px;background:var(--border)}.cfg-array__item{background:var(--panel)}.cfg-array__item-header{display:flex;align-items:center;justify-content:space-between;padding:12px 18px;background:var(--bg-accent);border-bottom:1px solid var(--border)}:root[data-theme=light] .cfg-array__item-header{background:var(--bg-hover)}.cfg-array__item-index{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.cfg-array__item-remove{width:30px;height:30px;display:flex;align-items:center;justify-content:center;border:none;border-radius:var(--radius-md);background:transparent;color:var(--muted);cursor:pointer;transition:background var(--duration-fast) ease,color var(--duration-fast) ease}.cfg-array__item-remove svg{width:16px;height:16px}.cfg-array__item-remove:hover:not(:disabled){background:var(--danger-subtle);color:var(--danger)}.cfg-array__item-remove:disabled{opacity:.4;cursor:not-allowed}.cfg-array__item-content{padding:18px}.cfg-map{border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.cfg-map__header{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 18px;background:var(--bg-accent);border-bottom:1px solid var(--border)}:root[data-theme=light] .cfg-map__header{background:var(--bg-hover)}.cfg-map__label{font-size:13px;font-weight:600;color:var(--muted)}.cfg-map__add{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-elevated);color:var(--text);font-size:12px;font-weight:500;cursor:pointer;transition:background var(--duration-fast) ease}.cfg-map__add:hover:not(:disabled){background:var(--bg-hover)}.cfg-map__add-icon{width:14px;height:14px}.cfg-map__add-icon svg{width:100%;height:100%}.cfg-map__empty{padding:28px 18px;text-align:center;color:var(--muted);font-size:13px}.cfg-map__items{display:grid;gap:10px;padding:14px}.cfg-map__item{display:grid;grid-template-columns:150px 1fr auto;gap:10px;align-items:start}.cfg-map__item-key,.cfg-map__item-value{min-width:0}.cfg-map__item-remove{width:34px;height:34px;display:flex;align-items:center;justify-content:center;border:none;border-radius:var(--radius-md);background:transparent;color:var(--muted);cursor:pointer;transition:background var(--duration-fast) ease,color var(--duration-fast) ease}.cfg-map__item-remove svg{width:16px;height:16px}.cfg-map__item-remove:hover:not(:disabled){background:var(--danger-subtle);color:var(--danger)}.pill--sm{padding:5px 12px;font-size:11px}.pill--ok{border-color:#22c55e59;color:var(--ok)}.pill--danger{border-color:#ef444459;color:var(--danger)}@media(max-width:768px){.config-layout{grid-template-columns:1fr}.config-sidebar{border-right:none;border-bottom:1px solid var(--border)}.config-sidebar__header{padding:14px 16px}.config-nav{display:flex;flex-wrap:nowrap;gap:6px;padding:10px 14px;overflow-x:auto;-webkit-overflow-scrolling:touch}.config-nav__item{flex:0 0 auto;padding:9px 14px;white-space:nowrap}.config-nav__label{display:inline}.config-sidebar__footer{display:none}.config-actions{flex-wrap:wrap;padding:14px 16px}.config-actions__left,.config-actions__right{width:100%;justify-content:center}.config-section-hero{padding:14px 16px}.config-subnav{padding:10px 16px 12px}.config-content{padding:18px}.config-section-card__header{padding:16px 18px}.config-section-card__content{padding:18px}.cfg-toggle-row{padding:14px 16px}.cfg-map__item{grid-template-columns:1fr;gap:10px}.cfg-map__item-remove{justify-self:end}}@media(max-width:480px){.config-nav__icon{width:26px;height:26px;font-size:17px}.config-nav__label{display:none}.config-section-card__icon{width:30px;height:30px}.config-section-card__title{font-size:16px}.cfg-segmented{flex-wrap:wrap}.cfg-segmented__btn{flex:1 0 auto;min-width:70px}}.setup-container{--tasker-black: #1a1a1a;--tasker-charcoal: #2d2d2d;--tasker-orange: var(--accent, #00d4ff);--tasker-orange-hover: var(--accent-hover, #00b8e0);--tasker-orange-glow: var(--accent-glow, rgba(0, 212, 255, .3));--tasker-white: #ffffff;--tasker-text-grey: #b0b0b0;--tasker-muted-grey: #888888;min-height:100vh;display:flex;align-items:flex-start;justify-content:center;background:linear-gradient(170deg,#1a1a1a,#111);padding:80px 20px 40px;position:relative;overflow-y:auto}.setup-container:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(rgba(255,107,0,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(255,107,0,.03) 1px,transparent 1px);background-size:60px 60px;pointer-events:none}.setup-card{background:var(--tasker-charcoal);border:1px solid rgba(255,255,255,.06);border-radius:16px;padding:32px 28px;text-align:center;max-width:420px;width:100%;box-shadow:0 24px 80px #00000080,0 0 0 1.5px #ffffff1a;position:relative;z-index:1;margin:auto 0}.setup-card h1{margin:0 0 12px;font-size:28px;font-weight:800;color:var(--tasker-white);letter-spacing:-.02em}.setup-card p{margin:0 0 24px;color:var(--tasker-text-grey);font-size:15px;line-height:1.6}.setup-qr{background:var(--tasker-white);padding:20px;border-radius:12px;display:inline-block;margin:24px 0;box-shadow:0 8px 32px #ff6b0024,0 0 60px #ff6b000f}.setup-qr img{display:block;width:256px;height:256px;image-rendering:pixelated}.setup-spinner{width:48px;height:48px;border:3px solid rgba(255,255,255,.1);border-top-color:var(--tasker-orange);border-radius:50%;animation:setup-spin .8s linear infinite;margin:0 auto 24px}@keyframes setup-spin{to{transform:rotate(360deg)}}.setup-success{border:2px solid var(--tasker-orange);box-shadow:0 0 40px #ff6b0026}.setup-success .setup-icon{width:72px;height:72px;background:var(--tasker-orange);border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 24px;font-size:36px;color:var(--tasker-white);box-shadow:0 4px 20px var(--tasker-orange-glow)}.setup-waiting{color:var(--tasker-orange);font-weight:600;font-size:14px}.setup-error{color:#ef4444;background:#ef44441a;padding:12px 16px;border-radius:8px;border:1px solid rgba(239,68,68,.2)}.setup-hint{font-size:13px;color:var(--tasker-muted-grey);margin-top:8px}.setup-logo{height:72px;width:auto;margin-bottom:32px}.setup-steps{display:flex;justify-content:center;gap:32px;margin-bottom:32px}.setup-step{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--tasker-muted-grey)}.setup-step.active{color:var(--tasker-orange)}.setup-step.completed{color:var(--tasker-text-grey)}.setup-step-dot{width:12px;height:12px;border-radius:50%;border:2px solid currentColor;background:transparent}.setup-step.active .setup-step-dot{background:var(--tasker-orange);border-color:var(--tasker-orange);box-shadow:0 0 10px var(--tasker-orange-glow)}.setup-step.completed .setup-step-dot{background:var(--tasker-orange);border-color:var(--tasker-orange)}.setup-button{display:inline-block;padding:14px 28px;font-size:15px;font-weight:600;border-radius:10px;cursor:pointer;border:none;transition:all .2s ease;text-decoration:none;font-family:inherit}.setup-button.primary{background:var(--tasker-orange);color:var(--tasker-white);box-shadow:0 4px 14px var(--tasker-orange-glow)}.setup-button.primary:hover{background:var(--tasker-orange-hover);transform:translateY(-1px);box-shadow:0 6px 20px var(--tasker-orange-glow)}.setup-button:not(.primary){background:#ffffff1a;color:var(--tasker-white);border:1px solid rgba(255,255,255,.15)}.setup-button:not(.primary):hover{background:#ffffff26}.setup-button:disabled{opacity:.5;cursor:not-allowed;transform:none!important}.setup-divider{display:flex;align-items:center;margin:24px 0;color:var(--tasker-muted-grey);font-size:13px}.setup-divider:before,.setup-divider:after{content:"";flex:1;height:1px;background:#ffffff1a}.setup-divider span{padding:0 16px}.setup-code-input{display:flex;gap:12px;margin-top:16px}.setup-code-input input{flex:1;padding:14px 16px;font-size:15px;border-radius:10px;border:1px solid rgba(255,255,255,.15);background:#0000004d;color:var(--tasker-white);font-family:inherit;outline:none;transition:border-color .2s ease}.setup-code-input input:focus{border-color:#fff3}.setup-code-input input::placeholder{color:var(--tasker-muted-grey)}.setup-device-id{margin:16px 0 8px;padding:12px 16px;border-radius:10px;background:#0000004d;border:1px solid rgba(255,255,255,.1)}.setup-device-id-label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--tasker-muted-grey);margin-bottom:4px}.setup-device-id-value{display:block;font-size:13px;font-family:SF Mono,Fira Code,Consolas,monospace;color:var(--tasker-orange);word-break:break-all;-webkit-user-select:all;user-select:all;cursor:text}.setup-device-id-copy{display:inline-block;margin-top:8px;background:#ffffff14;border:1px solid rgba(255,255,255,.15);border-radius:6px;color:var(--tasker-text-grey);font-size:11px;padding:4px 10px;cursor:pointer;transition:all .15s ease}.setup-device-id-copy:hover{background:#ffffff24;color:var(--tasker-white)}.setup-hint a.setup-link-danger{color:#ef4444;text-decoration:none;font-size:12px;opacity:.7;transition:opacity .15s ease}.setup-hint a.setup-link-danger:hover{color:#ef4444;opacity:1;text-decoration:underline}.setup-license-remove-confirm{margin-top:16px;padding:16px;border-radius:10px;background:#ef444414;border:1px solid rgba(239,68,68,.25)}.setup-license-remove-warning{font-size:14px;color:#ef4444;margin:0 0 14px;line-height:1.5}.setup-license-remove-actions{display:flex;gap:10px;justify-content:center}.setup-hint a{color:var(--tasker-orange);text-decoration:none}.setup-hint a:hover{text-decoration:underline}.setup-status-light{width:14px;height:14px;border-radius:50%;display:inline-block;flex-shrink:0;box-shadow:0 0 8px currentColor}.setup-status-row{display:flex;align-items:center;justify-content:center;gap:12px;font-size:22px;font-weight:700;color:var(--tasker-white);margin-bottom:16px}.setup-status-dashboard{display:flex;flex-direction:column;gap:8px;margin:16px 0;padding:12px;background:#0003;border-radius:12px;border:1px solid rgba(255,255,255,.08)}.setup-status-item{display:flex;align-items:center;gap:12px;padding:10px 14px;background:#0003;border-radius:8px}.setup-status-info{display:flex;flex-direction:column;align-items:flex-start;gap:2px;flex:1}.setup-status-info strong{font-size:15px;color:var(--tasker-white);font-weight:600}.setup-status-info span{font-size:13px;color:var(--tasker-text-grey)}.setup-model-select{background:#0000004d;color:var(--tasker-text-grey);border:1px solid rgba(255,255,255,.1);border-radius:4px;padding:3px 6px;font-size:12px;cursor:pointer;outline:none}.setup-model-select:focus,.setup-model-select:focus-visible{border-color:#fff3;box-shadow:none}.setup-link-btn{background:transparent;border:none;color:var(--accent, #00d4ff);font-size:13px;cursor:pointer;padding:4px 8px;border-radius:4px;transition:opacity .15s ease;white-space:nowrap}.setup-link-btn:hover{opacity:.8}.setup-link-btn:focus,.setup-link-btn:focus-visible{outline:none}.setup-status-action{background:transparent;border:1px solid rgba(255,255,255,.15);border-radius:6px;color:var(--tasker-text-grey);padding:8px;cursor:pointer;transition:all .15s ease;display:flex;align-items:center;justify-content:center}.setup-status-action svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.setup-status-action:hover:not(:disabled){background:#ffffff14;border-color:#ffffff40;color:var(--tasker-white)}.setup-status-action:disabled{opacity:.5;cursor:not-allowed}.setup-status-action.spinning svg{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.setup-success-message{font-size:18px;font-weight:600;color:#22c55e!important;margin-top:8px!important}.setup-warning{color:#eab308!important;background:#eab3081a;padding:12px 16px;border-radius:8px;border:1px solid rgba(234,179,8,.2);margin-bottom:16px}.setup-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:16px;padding-top:16px;border-top:1px solid rgba(255,255,255,.1)}.setup-button.secondary{background:transparent;color:var(--tasker-text-grey);border:1px solid rgba(255,255,255,.15)}.setup-button.secondary:hover{background:#ffffff0d;color:var(--tasker-white)}.setup-button.danger{background:transparent;color:#ef4444;border:1px solid rgba(239,68,68,.3)}.setup-button.danger:hover{background:#ef44441a}.setup-add-account{margin-top:12px;padding:16px;border-radius:8px;background:#ffffff0a;border:1px solid rgba(255,255,255,.08);text-align:left}.setup-add-account strong{font-size:14px;color:var(--tasker-white)}.setup-add-account-input{display:block;width:100%;margin-top:10px;padding:12px 14px;font-size:14px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:#0000004d;color:var(--tasker-white);font-family:inherit;outline:none;box-sizing:border-box;transition:border-color .2s ease}.setup-add-account-input:focus{border-color:#fff3;outline:none}.setup-add-account-input::placeholder{color:var(--tasker-muted-grey)}.setup-add-account-actions{display:flex;gap:8px;margin-top:10px}.setup-add-account-actions .setup-button{padding:10px 20px;font-size:14px}.setup-page{min-height:100vh;background:linear-gradient(170deg,#1a1a1a,#111)}.setup-button.small{padding:8px 14px;font-size:13px}.sp-card{background:var(--tasker-charcoal);border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:24px;margin-top:24px}.sp-card-header{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:8px}.sp-card-header h2{margin:0;font-size:18px;font-weight:600;color:var(--tasker-white)}.sp-form-row{display:flex;gap:12px;margin:16px 0}.sp-input{flex:1;padding:12px 14px;font-size:14px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:#0000004d;color:var(--tasker-white);font-family:inherit;outline:none;transition:border-color .2s ease}.sp-input:focus{border-color:#fff3}.sp-input::placeholder{color:var(--tasker-muted-grey)}.sp-input:disabled{opacity:.5}.sp-list{margin-top:16px;background:#0003;border:1px solid rgba(255,255,255,.08);border-radius:10px;overflow:hidden}.sp-list-empty{padding:24px;text-align:center;color:var(--tasker-muted-grey);font-size:14px}.sp-list-item{display:flex;align-items:center;gap:16px;padding:14px 16px;border-bottom:1px solid rgba(255,255,255,.06)}.sp-list-item:last-child{border-bottom:none}.sp-list-item-main{flex:1;min-width:0}.sp-list-item-title{font-size:15px;font-weight:500;color:var(--tasker-white);font-family:SF Mono,Fira Code,monospace}.sp-list-item-sub{font-size:13px;color:var(--tasker-muted-grey);margin-top:2px}.sp-callout{margin-top:20px;padding:14px 16px;background:#0003;border:1px solid rgba(255,255,255,.08);border-radius:8px;font-size:13px;line-height:1.5;color:var(--tasker-text-grey)}.sp-callout code{background:#ffffff1a;padding:2px 6px;border-radius:4px;font-family:SF Mono,Fira Code,monospace;font-size:12px;color:var(--tasker-orange)}.sp-error{color:#ef4444;background:#ef44441a;padding:12px 16px;border-radius:8px;border:1px solid rgba(239,68,68,.2);font-size:14px}.sp-card-wide{max-width:720px}.sp-toolbar{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.sp-search-bar{display:flex;gap:8px;align-items:center;margin-top:12px}.sp-search-input{flex:1;padding:8px 12px;font-size:14px;background:#ffffff0d;border:1px solid rgba(255,255,255,.15);border-radius:6px;color:var(--tasker-white);outline:none}.sp-search-input::placeholder{color:var(--tasker-muted-grey)}.sp-search-agent-select{padding:8px 12px;font-size:13px;background:#ffffff0d;border:1px solid rgba(255,255,255,.15);border-radius:6px;color:var(--tasker-white);outline:none;min-width:140px}.sp-search-results{display:flex;flex-direction:column;gap:2px;margin-top:16px;background:#0003;border:1px solid rgba(255,255,255,.08);border-radius:10px;max-height:400px;overflow-y:auto;text-align:left}.sp-search-result{padding:10px 12px;cursor:pointer;border-bottom:1px solid rgba(255,255,255,.04)}.sp-search-result:last-child{border-bottom:none}.sp-search-result:hover{background:#ffffff0a}.sp-search-result.selected{background:#00d4ff14}.sp-search-result-header{display:flex;justify-content:space-between;align-items:center;gap:12px}.sp-search-result-path{font-size:13px;font-weight:600;color:var(--tasker-white);word-break:break-all}.sp-search-result-score{font-size:12px;font-weight:600;color:var(--tasker-orange);white-space:nowrap}.sp-search-result-meta{font-size:12px;color:var(--tasker-muted-grey);margin-top:2px}.sp-search-result-snippet{font-size:12px;color:var(--tasker-text-grey);margin:6px 0 0;white-space:pre-wrap;word-break:break-word;max-height:80px;overflow:hidden;line-height:1.4}.sp-file-tree{margin-top:16px;background:#0003;border:1px solid rgba(255,255,255,.08);border-radius:10px;max-height:340px;overflow-y:auto;text-align:left}.sp-tree-item{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:14px;color:var(--tasker-text-grey);cursor:pointer;transition:background .12s ease;border-bottom:1px solid rgba(255,255,255,.04);-webkit-user-select:none;user-select:none}.sp-tree-item:last-child{border-bottom:none}.sp-tree-item:hover{background:#ffffff0a}.sp-tree-item.selected{background:#00d4ff14;color:var(--tasker-white)}.sp-tree-dir{color:var(--tasker-white);font-weight:500}.sp-tree-chevron{width:16px;text-align:center;font-size:13px;color:var(--tasker-muted-grey);flex-shrink:0}.sp-tree-icon{flex-shrink:0;display:flex;align-items:center}.sp-tree-icon svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.sp-tree-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sp-tree-size{font-size:12px;color:var(--tasker-muted-grey);flex-shrink:0;margin-left:auto}.sp-badge{font-size:10px;padding:1px 6px;border-radius:4px;background:#ffffff14;color:var(--tasker-muted-grey);flex-shrink:0}.sp-tree-file[draggable=true]{cursor:grab}.sp-tree-file[draggable=true]:active{cursor:grabbing}.sp-drop-target{background:#00d4ff14!important;outline:2px dashed var(--tasker-orange);outline-offset:-2px}.sp-bulk-actions{margin-top:12px;display:flex;align-items:center;gap:12px;padding:10px 16px;background:#0003;border:1px solid rgba(255,255,255,.08);border-radius:10px}.sp-file-preview{margin-top:16px;background:#0003;border:1px solid rgba(255,255,255,.08);border-radius:10px;overflow:hidden;text-align:left}.sp-file-preview-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;border-bottom:1px solid rgba(255,255,255,.06)}.sp-file-preview-header strong{color:var(--tasker-white);font-size:14px}.sp-file-preview-meta{font-size:12px;color:var(--tasker-muted-grey);margin-top:2px}.sp-file-actions{display:flex;gap:8px;flex-shrink:0}.sp-file-preview-body{padding:16px;max-height:300px;overflow:auto}.sp-file-code{font-family:SF Mono,Fira Code,Cascadia Code,monospace;font-size:13px;line-height:1.5;color:var(--tasker-text-grey);white-space:pre-wrap;word-break:break-all;margin:0}.sp-canvas-area{text-align:center}.sp-canvas-wrap{position:relative;display:inline-block;border:1px solid rgba(255,255,255,.08);border-radius:10px;overflow:hidden;background:#000}.sp-canvas-wrap.sp-input-active{border-color:var(--tasker-orange);box-shadow:0 0 16px var(--tasker-orange-glow)}.sp-canvas{display:block;max-width:100%;height:auto;cursor:default}.sp-canvas-wrap.sp-input-active .sp-canvas{cursor:crosshair}.sp-canvas-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:60px 24px;background:#0003;border:1px solid rgba(255,255,255,.08);border-radius:10px}.sp-canvas-placeholder p{margin:0;font-size:14px;color:var(--tasker-muted-grey)}.sp-canvas-placeholder-icon{color:var(--tasker-muted-grey);opacity:.5}.sp-canvas-placeholder-icon svg{width:48px;height:48px;stroke:currentColor;fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.sp-page-nav{display:flex;justify-content:center;gap:24px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.08)}.sp-page-nav a,.sp-page-nav-fixed a,.setup-header-nav a{color:var(--tasker-muted-grey);text-decoration:none;font-size:13px;transition:color .15s ease}.sp-page-nav a:hover,.sp-page-nav-fixed a:hover,.setup-header-nav a:hover{color:var(--tasker-orange)}.sp-page-nav-current{font-size:13px;color:var(--tasker-white);font-weight:600}.setup-header{position:fixed;top:0;left:0;right:0;background:#1a1a1aeb;border-bottom:1px solid rgba(255,255,255,.08);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:10}.setup-header-inner{position:relative;z-index:11;display:flex;align-items:center;justify-content:space-between;max-width:1060px;margin:0 auto;padding:10px 20px}.setup-header-logo{height:28px;width:auto}.setup-header-nav{display:flex;gap:20px;align-items:center;margin-left:24px}.setup-header-nav a{color:var(--tasker-muted-grey);text-decoration:none;font-size:13px}.setup-header-nav a:hover{color:var(--tasker-orange)}.setup-header-nav .sp-page-nav-current{color:var(--tasker-white)}.setup-header-right{display:flex;align-items:center;gap:12px;margin-left:auto}.nav-logout-btn{background:none;border:1px solid rgba(255,255,255,.15);color:#fff9;cursor:pointer;padding:6px 8px;border-radius:6px;display:flex;align-items:center;transition:color .2s,border-color .2s}.nav-logout-btn:hover{color:#fff;border-color:#ffffff4d}.nav-audit-btn{background:none;border:1px solid rgba(255,170,0,.3);color:#fa0;cursor:pointer;padding:6px 8px;border-radius:6px;display:flex;align-items:center;gap:4px;transition:color .2s,border-color .2s;position:relative}.nav-audit-btn:hover{color:#fc4;border-color:#ffaa0080}.nav-audit-badge{font-size:11px;font-weight:600;min-width:16px;text-align:center}.audit-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;z-index:100;display:flex;align-items:center;justify-content:center;padding:20px}.audit-modal-card{background:var(--tasker-charcoal, #2d2d2d);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:24px;max-width:520px;width:100%;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 24px 80px #00000080}.audit-modal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.audit-modal-header h3{margin:0;font-size:16px;font-weight:600;color:var(--tasker-white, #fff)}.audit-modal-close{background:none;border:none;color:#ffffff80;font-size:22px;cursor:pointer;padding:0 4px;line-height:1}.audit-modal-close:hover{color:#fff}.audit-modal-desc{font-size:13px;color:var(--tasker-muted-grey, #888);margin:0 0 16px;line-height:1.4}.audit-modal-empty{font-size:13px;color:var(--tasker-muted-grey, #888);text-align:center;padding:20px 0}.audit-modal-list{overflow-y:auto;max-height:50vh;display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.audit-modal-entry{padding:8px 10px;background:#ffffff08;border-radius:6px;border:1px solid rgba(255,255,255,.06)}.audit-modal-entry-path{display:flex;align-items:center;gap:8px;margin-bottom:4px}.audit-modal-folder{font-size:10px;font-weight:600;text-transform:uppercase;padding:2px 6px;border-radius:3px;flex-shrink:0}.audit-modal-folder--shared{background:#ffaa0026;color:#fa0}.audit-modal-folder--public{background:#ff505026;color:#ff5050}.audit-modal-path-link{font-size:13px;color:var(--tasker-white, #fff);text-decoration:none;word-break:break-all}.audit-modal-path-link:hover{text-decoration:underline}.audit-modal-entry-meta{font-size:11px;color:var(--tasker-muted-grey, #888);display:flex;gap:8px}.audit-modal-agent{background:#ffffff0f;padding:0 5px;border-radius:3px}.audit-modal-clear{width:100%;margin-top:4px}.sp-workspace-selector{-moz-appearance:none;appearance:none;-webkit-appearance:none;background:#ffffff14;color:var(--tasker-white);border:1px solid rgba(255,255,255,.15);border-radius:6px;padding:5px 28px 5px 10px;font-size:13px;font-family:inherit;cursor:pointer;outline:none;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;background-size:10px;transition:border-color .15s}.sp-workspace-selector:hover{border-color:#ffffff4d}.sp-workspace-selector:focus,.sp-workspace-selector:focus-visible,.sp-workspace-selector:focus-within{border-color:#ffffff4d;outline:none!important;outline-color:transparent!important;box-shadow:none!important;-webkit-focus-ring-color:transparent}.sp-workspace-selector option{background:#1e1e2e;color:var(--tasker-white)}.nav-burger-checkbox{display:none}.nav-burger-button{display:none;cursor:pointer;padding:8px;margin:-8px;-webkit-tap-highlight-color:transparent}.nav-burger-icon{display:block;width:20px;height:2px;background:#fff;border-radius:1px;position:relative;transition:background .2s}.nav-burger-icon:before,.nav-burger-icon:after{content:"";display:block;width:20px;height:2px;background:#fff;border-radius:1px;position:absolute;left:0;transition:transform .25s ease,top .25s ease}.nav-burger-icon:before{top:-6px}.nav-burger-icon:after{top:6px}.nav-burger-checkbox:checked~.setup-header-inner .nav-burger-icon{background:transparent}.nav-burger-checkbox:checked~.setup-header-inner .nav-burger-icon:before{top:0;transform:rotate(45deg)}.nav-burger-checkbox:checked~.setup-header-inner .nav-burger-icon:after{top:0;transform:rotate(-45deg)}.setup-header-dropdown{position:relative;z-index:11;display:none;flex-direction:column;gap:4px;padding:8px 20px 16px;max-width:1060px;margin:0 auto}.setup-header-dropdown a,.setup-header-dropdown .sp-page-nav-current{display:block;padding:10px 0;font-size:14px;border-bottom:1px solid rgba(255,255,255,.06)}.setup-header-dropdown a{color:#888;text-decoration:none}.setup-header-dropdown a:hover{color:var(--accent, #00d4ff)}.setup-header-dropdown .sp-page-nav-current{color:#fff;font-weight:600}.nav-selector-inline{display:inline-flex}.nav-selector-mobile{display:none}@media(max-width:768px){.setup-header-nav,.nav-selector-inline{display:none}.nav-selector-mobile{display:block;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.06)}.nav-selector-mobile .sp-workspace-selector{width:100%;max-width:none}.nav-burger-button{display:block}.nav-burger-checkbox:checked~.setup-header-inner+.setup-header-dropdown{display:flex}}.setup-container--full{padding-top:88px;padding-bottom:0;min-height:100vh;align-items:stretch}.chat-viewport{width:100%;max-width:900px;flex:1;display:flex;flex-direction:column;min-height:0;margin:0 auto;padding:0 16px;text-align:left}.chat-viewport>.card.chat{border:none;background:transparent;padding:0;box-shadow:none;animation:none}.chat-viewport>.card.chat:hover{border-color:transparent;box-shadow:none}.chat-page{padding-bottom:0}.sp-card-advanced{max-width:1060px;width:100%;text-align:left;z-index:auto}.sp-card-advanced .table{overflow-x:auto}.sp-tabs{display:flex;gap:4px;margin-bottom:20px;border-bottom:1px solid rgba(255,255,255,.08);padding-bottom:12px}.sp-tab{padding:8px 16px;border:none;background:transparent;color:var(--tasker-muted-grey);font-size:14px;font-weight:500;cursor:pointer;border-radius:6px 6px 0 0;transition:color .15s ease,background .15s ease}.sp-tab:hover{color:var(--tasker-white);background:#ffffff0d}.sp-tab.active{color:var(--tasker-orange);border-bottom:2px solid var(--tasker-orange)}.setup-info-btn{background:transparent;border:1px solid rgba(255,255,255,.12);border-radius:50%;color:var(--tasker-muted-grey);width:22px;height:22px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:all .15s ease;flex-shrink:0;padding:0}.setup-info-btn:hover{background:#ffffff14;border-color:#ffffff40;color:var(--tasker-white)}.setup-info-btn svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.setup-info-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;z-index:100;display:flex;align-items:center;justify-content:center;padding:20px}.setup-info-card{background:var(--tasker-charcoal, #2d2d2d);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:24px;max-width:380px;width:100%;box-shadow:0 24px 80px #00000080}.setup-info-card h3{margin:0 0 16px;font-size:16px;font-weight:600;color:var(--tasker-white, #fff)}.setup-info-row{display:flex;justify-content:space-between;align-items:baseline;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.06);gap:12px}.setup-info-row:last-of-type{border-bottom:none}.setup-info-label{font-size:13px;color:var(--tasker-muted-grey, #888);flex-shrink:0}.setup-info-value{font-size:13px;color:var(--tasker-white, #fff);text-align:right;word-break:break-all}@media(max-width:480px){.setup-card{padding:32px 24px}.setup-qr img{width:200px;height:200px}.setup-card h1{font-size:24px}.setup-steps{gap:16px}.setup-step-label{display:none}.setup-code-input{flex-direction:column}}.setup-container,.setup-page,.login-overlay,.setup-info-overlay{--ring: transparent;--focus-ring: none}.setup-container *:focus,.setup-container *:focus-visible,.setup-page *:focus,.setup-page *:focus-visible,.login-overlay *:focus,.login-overlay *:focus-visible,.setup-info-overlay *:focus,.setup-info-overlay *:focus-visible{outline:none!important;box-shadow:none!important}.login-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10000;display:flex;align-items:center;justify-content:center;background:#111}.login-card{display:flex;flex-direction:column;align-items:center;padding:48px 40px;max-width:360px;width:100%}.login-logo{width:56px;height:56px;margin-bottom:16px}.login-title{color:#fff;font-size:22px;font-weight:600;margin:0 0 4px}.login-subtitle{color:#888;font-size:14px;margin:0 0 28px;text-align:center}.login-form{display:flex;flex-direction:column;gap:12px;width:100%}.login-pin-input{width:100%;padding:14px 16px;font-size:20px;letter-spacing:8px;text-align:center;background:#1a1a1a;border:1px solid #333333;border-radius:8px;color:#fff;outline:none;transition:border-color .2s;box-sizing:border-box}.login-pin-input:focus{border-color:#555}.login-pin-input::placeholder{font-size:14px;letter-spacing:normal;color:#555}.login-error{color:#f44;font-size:13px;text-align:center;margin:0}.login-submit{width:100%;padding:14px;font-size:16px;font-weight:600;color:#000;background:var(--accent, #00d4ff);border:none;border-radius:8px;cursor:pointer;transition:opacity .2s}.login-submit:hover{opacity:.9}.login-submit:disabled{opacity:.5;cursor:not-allowed}.login-spinner{display:inline-block;width:18px;height:18px;border:2px solid rgba(0,0,0,.2);border-top-color:#000;border-radius:50%;animation:setup-spin .8s linear infinite;vertical-align:middle}.setup-button .login-spinner{border-color:#fff3;border-top-color:#fff}.login-account-select{width:100%;padding:12px 14px;font-size:15px;background:#1a1a1a;border:1px solid #333333;border-radius:8px;color:#fff;outline:none;cursor:pointer;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;background-size:10px;transition:border-color .2s;box-sizing:border-box}.login-account-select:focus{border-color:#555}.login-account-select option{background:#1a1a1a;color:#fff}.login-success{color:#22c55e;font-size:13px;text-align:center;margin:0}.login-link{color:var(--accent, #00d4ff);text-decoration:none;cursor:pointer}.login-link:hover{text-decoration:underline}.login-hint{color:#666;font-size:12px;text-align:center;margin:20px 0 0;line-height:1.5}.setup-apikey-list{padding:8px 0 16px;display:flex;flex-direction:column;gap:12px;max-height:calc(100vh - 200px);overflow-y:auto;-webkit-overflow-scrolling:touch}.setup-apikey-row{display:flex;flex-direction:column;gap:6px;padding:10px 12px;background:#ffffff08;border-radius:6px}.setup-apikey-info{display:flex;align-items:center;gap:8px}.setup-apikey-info strong{font-size:.9rem;color:#fff}.setup-apikey-category{font-size:.75rem;color:var(--tasker-muted-grey);background:#ffffff0f;padding:2px 8px;border-radius:3px}.setup-apikey-input{display:flex;align-items:center;gap:6px}.setup-apikey-input input{flex:1;min-width:0;background:#0000004d;border:1px solid rgba(255,255,255,.1);border-radius:4px;color:#fff;font-size:.85rem;padding:6px 10px;outline:none}.setup-apikey-input input:focus{border-color:#fff3}.setup-apikey-input input::placeholder{color:#555}.setup-apikey-save{padding:6px 10px;font-size:.8rem;min-width:50px}.setup-apikey-badge{font-size:.75rem;padding:2px 8px;border-radius:3px;white-space:nowrap}.setup-apikey-badge.saving{color:var(--tasker-text-grey, #999)}.setup-apikey-badge.saved{color:#22c55e;background:#22c55e1a}.setup-apikey-badge.removed{color:#eab308;background:#eab3081a}.setup-apikey-icon-btn{background:none;border:none;cursor:pointer;padding:4px;color:#ffffff59;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:color .15s}.setup-apikey-icon-btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.setup-apikey-icon-btn:hover{color:#ffffffb3}.setup-apikey-icon-btn.active{color:var(--tasker-orange)}.setup-apikey-icon-btn.danger:hover{color:#ef4444}.setup-apikey-advanced{margin-top:4px;border-top:1px solid rgba(255,255,255,.06);padding-top:4px}.setup-apikey-advanced summary{cursor:pointer;font-size:12px;color:#ffffff73;padding:6px 0;-webkit-user-select:none;user-select:none}.setup-apikey-advanced summary:hover{color:#ffffffa6}.setup-update-progress{margin:12px 0 4px;padding:10px 12px;background:#ffffff08;border:1px solid rgba(255,255,255,.08);border-radius:8px;font-size:13px;line-height:1.5;max-height:300px;overflow-y:auto}.setup-update-step{display:flex;align-items:center;gap:8px;padding:2px 0;color:#ffffff80}.setup-update-step.done{color:#ffffffb3}.setup-update-step.failed{color:#ef4444}.setup-update-step.running{color:var(--tasker-white)}.setup-update-step-icon{width:16px;text-align:center;flex-shrink:0}.setup-update-check{color:#22c55e}.setup-update-cross{color:#ef4444}.setup-update-spinner{display:inline-block;width:12px;height:12px;border:2px solid rgba(255,255,255,.2);border-top-color:var(--tasker-white);border-radius:50%;animation:spin .8s linear infinite}.setup-update-step-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.setup-update-step-time{color:#ffffff59;font-size:12px;flex-shrink:0}.setup-update-status{margin-top:6px;padding-top:6px;border-top:1px solid rgba(255,255,255,.06);color:#fff9;font-size:12px}.customers-search{display:flex;gap:12px;align-items:stretch}.customers-search input{flex:1;padding:10px 14px;font-size:14px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:#0000004d;color:var(--tasker-white);font-family:inherit}.customers-search input::placeholder{color:#ffffff59}.customers-record{border:1px solid rgba(255,255,255,.08);border-radius:8px;margin-bottom:8px;overflow:hidden}.customers-record-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;cursor:pointer;transition:background .15s}.customers-record-header:hover{background:#ffffff0a}.customers-record-info{min-width:0;overflow:hidden}.customers-record-name{font-weight:600;color:var(--tasker-white);font-size:14px}.customers-record-phone{font-size:13px;color:#ffffff80;margin-left:8px}.customers-record-meta{font-size:12px;color:#ffffff59}.customers-record-fields{padding:0 16px 16px;border-top:1px solid rgba(255,255,255,.06)}.customers-field-row{display:flex;gap:8px;align-items:center;margin-top:8px}.customers-field-row input{padding:8px 12px;font-size:13px;border-radius:6px;border:1px solid rgba(255,255,255,.12);background:#0000004d;color:var(--tasker-white);font-family:inherit}.customers-field-row .field-key{width:140px;flex-shrink:0}.customers-field-row .field-value{flex:1}.customers-field-row .field-delete{padding:6px 10px;font-size:12px;flex-shrink:0}.customers-record-actions{display:flex;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid rgba(255,255,255,.06)}.customers-add-form{display:flex;flex-direction:column;gap:12px;padding:16px;background:#0003;border-radius:8px;margin-top:16px}.customers-add-form input{padding:10px 14px;font-size:14px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:#0000004d;color:var(--tasker-white);font-family:inherit}.customers-add-form input::placeholder{color:#ffffff59}.customers-add-form-buttons{display:flex;gap:8px}.customers-empty{text-align:center;color:#fff6;padding:32px 16px;font-size:14px}@media(max-width:520px){.customers-record-header{flex-direction:column;align-items:flex-start;gap:4px;padding:10px 12px}.customers-record-phone{margin-left:0;font-size:12px}.customers-record-meta{font-size:11px}.customers-field-row{flex-wrap:wrap}.customers-field-row .field-key{width:100%;flex-shrink:1}.customers-field-row .field-value{flex:1;min-width:0}.customers-record-fields{padding:0 12px 12px}.customers-record-actions{flex-wrap:wrap}.customers-search{flex-direction:column}.sp-toolbar{flex-wrap:wrap}}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
<title>Taskmaster Control</title>
|
|
7
7
|
<meta name="color-scheme" content="dark light" />
|
|
8
8
|
<link rel="icon" type="image/png" href="./favicon.png" />
|
|
9
|
-
<script type="module" crossorigin src="./assets/index-
|
|
10
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
9
|
+
<script type="module" crossorigin src="./assets/index-BGyGg5oT.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="./assets/index-CBnatXwP.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<taskmaster-app></taskmaster-app>
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { createSubsystemLogger } from "../../logging/subsystem.js";
|
|
1
2
|
import { ErrorCodes, errorShape } from "../protocol/index.js";
|
|
2
3
|
import { registerScreencastFrameListener, removeScreencastFrameListener, getActiveScreencastSession, } from "../../browser/routes/screencast.js";
|
|
3
4
|
import { stopScreencast } from "../../browser/screencast.js";
|
|
4
5
|
import { resolveHandoff, getPendingHandoff } from "../../browser/handoff.js";
|
|
6
|
+
const log = createSubsystemLogger("browser").child("screencast-rpc");
|
|
5
7
|
/**
|
|
6
8
|
* Gateway RPC handlers for browser screencast.
|
|
7
9
|
* These relay between the UI WebSocket clients and the browser bridge.
|
|
@@ -11,9 +13,11 @@ export const browserScreencastHandlers = {
|
|
|
11
13
|
const quality = typeof params.quality === "number" ? params.quality : 60;
|
|
12
14
|
const maxWidth = typeof params.maxWidth === "number" ? params.maxWidth : 1280;
|
|
13
15
|
const maxHeight = typeof params.maxHeight === "number" ? params.maxHeight : 720;
|
|
16
|
+
log.info(`screencast.start requested quality=${quality} maxWidth=${maxWidth} maxHeight=${maxHeight}`);
|
|
14
17
|
// Stop existing session if any
|
|
15
18
|
const existing = getActiveScreencastSession();
|
|
16
19
|
if (existing?.active) {
|
|
20
|
+
log.info("stopping existing screencast session");
|
|
17
21
|
stopScreencast(existing);
|
|
18
22
|
}
|
|
19
23
|
// Remove old listener
|
|
@@ -30,9 +34,11 @@ export const browserScreencastHandlers = {
|
|
|
30
34
|
try {
|
|
31
35
|
const bridgeUrl = await resolveBridgeUrl(context);
|
|
32
36
|
if (!bridgeUrl) {
|
|
37
|
+
log.warn("screencast.start failed: bridge URL could not be resolved");
|
|
33
38
|
respond(false, undefined, errorShape(ErrorCodes.UNAVAILABLE, "Browser bridge not configured"));
|
|
34
39
|
return;
|
|
35
40
|
}
|
|
41
|
+
log.info(`forwarding screencast.start to bridge at ${bridgeUrl}`);
|
|
36
42
|
const res = await fetch(`${bridgeUrl}/screencast/start`, {
|
|
37
43
|
method: "POST",
|
|
38
44
|
headers: { "Content-Type": "application/json" },
|
|
@@ -40,21 +46,27 @@ export const browserScreencastHandlers = {
|
|
|
40
46
|
});
|
|
41
47
|
if (!res.ok) {
|
|
42
48
|
const body = (await res.json().catch(() => ({ error: "Unknown error" })));
|
|
43
|
-
|
|
49
|
+
const msg = body?.error ?? `HTTP ${res.status}`;
|
|
50
|
+
log.error(`bridge returned error: ${msg}`);
|
|
51
|
+
respond(false, undefined, errorShape(ErrorCodes.UNAVAILABLE, msg));
|
|
44
52
|
return;
|
|
45
53
|
}
|
|
46
54
|
const result = (await res.json());
|
|
55
|
+
log.info(`screencast started: sessionId=${result.sessionId}`);
|
|
47
56
|
respond(true, result);
|
|
48
57
|
}
|
|
49
58
|
catch (err) {
|
|
59
|
+
log.error(`screencast.start failed: ${err}`);
|
|
50
60
|
respond(false, undefined, errorShape(ErrorCodes.UNAVAILABLE, String(err)));
|
|
51
61
|
}
|
|
52
62
|
},
|
|
53
63
|
"browser.screencast.stop": async ({ respond, context }) => {
|
|
64
|
+
log.info("screencast.stop requested");
|
|
54
65
|
removeScreencastFrameListener("gateway");
|
|
55
66
|
try {
|
|
56
67
|
const bridgeUrl = await resolveBridgeUrl(context);
|
|
57
68
|
if (!bridgeUrl) {
|
|
69
|
+
log.info("screencast.stop: no bridge URL, returning ok");
|
|
58
70
|
respond(true, { ok: true });
|
|
59
71
|
return;
|
|
60
72
|
}
|
|
@@ -63,9 +75,11 @@ export const browserScreencastHandlers = {
|
|
|
63
75
|
headers: { "Content-Type": "application/json" },
|
|
64
76
|
body: JSON.stringify({}),
|
|
65
77
|
});
|
|
78
|
+
log.info("screencast stopped");
|
|
66
79
|
respond(true, { ok: true });
|
|
67
80
|
}
|
|
68
81
|
catch (err) {
|
|
82
|
+
log.error(`screencast.stop failed: ${err}`);
|
|
69
83
|
respond(false, undefined, errorShape(ErrorCodes.UNAVAILABLE, String(err)));
|
|
70
84
|
}
|
|
71
85
|
},
|
|
@@ -133,18 +147,24 @@ export const browserScreencastHandlers = {
|
|
|
133
147
|
async function resolveBridgeUrl(context) {
|
|
134
148
|
const health = context.getHealthCache();
|
|
135
149
|
const browserUrl = health?.browser?.controlUrl;
|
|
136
|
-
if (browserUrl)
|
|
150
|
+
if (browserUrl) {
|
|
151
|
+
log.debug(`bridge URL from health cache: ${browserUrl}`);
|
|
137
152
|
return browserUrl;
|
|
153
|
+
}
|
|
154
|
+
log.debug("no bridge URL in health cache, resolving from config");
|
|
138
155
|
try {
|
|
139
156
|
const { loadConfig } = await import("../../config/config.js");
|
|
140
157
|
const { resolveBrowserConfig } = await import("../../browser/config.js");
|
|
141
158
|
const cfg = loadConfig();
|
|
142
159
|
const resolved = resolveBrowserConfig(cfg.browser);
|
|
143
|
-
if (resolved.enabled && resolved.controlUrl)
|
|
160
|
+
if (resolved.enabled && resolved.controlUrl) {
|
|
161
|
+
log.debug(`bridge URL from config: ${resolved.controlUrl}`);
|
|
144
162
|
return resolved.controlUrl;
|
|
163
|
+
}
|
|
164
|
+
log.warn(`browser config resolved but not usable: enabled=${resolved.enabled} controlUrl=${resolved.controlUrl ?? "null"}`);
|
|
145
165
|
}
|
|
146
|
-
catch {
|
|
147
|
-
|
|
166
|
+
catch (err) {
|
|
167
|
+
log.error(`failed to resolve browser config: ${err}`);
|
|
148
168
|
}
|
|
149
169
|
return null;
|
|
150
170
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rubytech/taskmaster",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.46",
|
|
4
4
|
"description": "AI-powered business assistant for small businesses",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -77,12 +77,66 @@
|
|
|
77
77
|
"dist/filler/**",
|
|
78
78
|
"dist/license/**"
|
|
79
79
|
],
|
|
80
|
+
"scripts": {
|
|
81
|
+
"dev": "node scripts/run-node.mjs",
|
|
82
|
+
"postinstall": "node scripts/postinstall.js",
|
|
83
|
+
"prepack": "pnpm build && pnpm ui:build",
|
|
84
|
+
"docs:list": "node scripts/docs-list.js",
|
|
85
|
+
"docs:bin": "node scripts/build-docs-list.mjs",
|
|
86
|
+
"docs:dev": "cd docs && mint dev",
|
|
87
|
+
"docs:build": "cd docs && pnpm dlx --reporter append-only mint broken-links",
|
|
88
|
+
"build": "tsc -p tsconfig.json && node --import tsx scripts/canvas-a2ui-copy.ts && node --import tsx scripts/copy-hook-metadata.ts && node --import tsx scripts/write-build-info.ts",
|
|
89
|
+
"plugins:sync": "node --import tsx scripts/sync-plugin-versions.ts",
|
|
90
|
+
"release:check": "node --import tsx scripts/release-check.ts",
|
|
91
|
+
"ui:install": "node scripts/ui.js install",
|
|
92
|
+
"ui:dev": "node scripts/ui.js dev",
|
|
93
|
+
"ui:build": "node scripts/ui.js build",
|
|
94
|
+
"start": "node scripts/run-node.mjs",
|
|
95
|
+
"taskmaster": "node scripts/run-node.mjs",
|
|
96
|
+
"gateway:watch": "node scripts/watch-node.mjs gateway --force",
|
|
97
|
+
"logs": "npx tsx scripts/session-viewer.ts",
|
|
98
|
+
"gateway:dev": "TASKMASTER_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway",
|
|
99
|
+
"gateway:dev:reset": "TASKMASTER_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway --reset",
|
|
100
|
+
"tui": "node scripts/run-node.mjs tui",
|
|
101
|
+
"tui:dev": "TASKMASTER_PROFILE=dev node scripts/run-node.mjs tui",
|
|
102
|
+
"taskmaster:rpc": "node scripts/run-node.mjs agent --mode rpc --json",
|
|
103
|
+
"lint": "oxlint --type-aware src test",
|
|
104
|
+
"lint:fix": "pnpm format:fix && oxlint --type-aware --fix src test",
|
|
105
|
+
"format": "oxfmt --check src test",
|
|
106
|
+
"format:fix": "oxfmt --write src test",
|
|
107
|
+
"test": "node scripts/test-parallel.mjs",
|
|
108
|
+
"test:watch": "vitest",
|
|
109
|
+
"test:ui": "pnpm --dir ui test",
|
|
110
|
+
"test:force": "node --import tsx scripts/test-force.ts",
|
|
111
|
+
"test:coverage": "vitest run --coverage",
|
|
112
|
+
"test:e2e": "vitest run --config vitest.e2e.config.ts",
|
|
113
|
+
"test:live": "TASKMASTER_LIVE_TEST=1 vitest run --config vitest.live.config.ts",
|
|
114
|
+
"test:docker:onboard": "bash scripts/e2e/onboard-docker.sh",
|
|
115
|
+
"test:docker:gateway-network": "bash scripts/e2e/gateway-network-docker.sh",
|
|
116
|
+
"test:docker:live-models": "bash scripts/test-live-models-docker.sh",
|
|
117
|
+
"test:docker:live-gateway": "bash scripts/test-live-gateway-models-docker.sh",
|
|
118
|
+
"test:docker:qr": "bash scripts/e2e/qr-import-docker.sh",
|
|
119
|
+
"test:docker:doctor-switch": "bash scripts/e2e/doctor-install-switch-docker.sh",
|
|
120
|
+
"test:docker:plugins": "bash scripts/e2e/plugins-docker.sh",
|
|
121
|
+
"test:docker:cleanup": "bash scripts/test-cleanup-docker.sh",
|
|
122
|
+
"test:docker:all": "pnpm test:docker:live-models && pnpm test:docker:live-gateway && pnpm test:docker:onboard && pnpm test:docker:gateway-network && pnpm test:docker:qr && pnpm test:docker:doctor-switch && pnpm test:docker:plugins && pnpm test:docker:cleanup",
|
|
123
|
+
"test:all": "pnpm lint && pnpm build && pnpm test && pnpm test:e2e && pnpm test:live && pnpm test:docker:all",
|
|
124
|
+
"test:install:e2e": "bash scripts/test-install-sh-e2e-docker.sh",
|
|
125
|
+
"test:install:smoke": "bash scripts/test-install-sh-docker.sh",
|
|
126
|
+
"test:install:e2e:openai": "TASKMASTER_E2E_MODELS=openai bash scripts/test-install-sh-e2e-docker.sh",
|
|
127
|
+
"test:install:e2e:anthropic": "TASKMASTER_E2E_MODELS=anthropic bash scripts/test-install-sh-e2e-docker.sh",
|
|
128
|
+
"protocol:gen": "node --import tsx scripts/protocol-gen.ts",
|
|
129
|
+
"protocol:check": "pnpm protocol:gen && git diff --exit-code -- dist/protocol.schema.json",
|
|
130
|
+
"canvas:a2ui:bundle": "bash scripts/bundle-a2ui.sh",
|
|
131
|
+
"check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 500"
|
|
132
|
+
},
|
|
80
133
|
"keywords": [],
|
|
81
134
|
"author": "",
|
|
82
135
|
"license": "MIT",
|
|
83
136
|
"engines": {
|
|
84
137
|
"node": ">=22.12.0"
|
|
85
138
|
},
|
|
139
|
+
"packageManager": "pnpm@10.23.0",
|
|
86
140
|
"dependencies": {
|
|
87
141
|
"@agentclientprotocol/sdk": "0.13.1",
|
|
88
142
|
"@aws-sdk/client-bedrock": "^3.975.0",
|
|
@@ -172,6 +226,14 @@
|
|
|
172
226
|
"vitest": "^4.0.18",
|
|
173
227
|
"wireit": "^0.14.12"
|
|
174
228
|
},
|
|
229
|
+
"pnpm": {
|
|
230
|
+
"minimumReleaseAge": 2880,
|
|
231
|
+
"overrides": {
|
|
232
|
+
"@sinclair/typebox": "0.34.47",
|
|
233
|
+
"hono": "4.11.4",
|
|
234
|
+
"tar": "7.5.4"
|
|
235
|
+
}
|
|
236
|
+
},
|
|
175
237
|
"vitest": {
|
|
176
238
|
"coverage": {
|
|
177
239
|
"provider": "v8",
|
|
@@ -200,57 +262,5 @@
|
|
|
200
262
|
"**/vendor/**",
|
|
201
263
|
"dist/Taskmaster.app/**"
|
|
202
264
|
]
|
|
203
|
-
},
|
|
204
|
-
"scripts": {
|
|
205
|
-
"dev": "node scripts/run-node.mjs",
|
|
206
|
-
"postinstall": "node scripts/postinstall.js",
|
|
207
|
-
"docs:list": "node scripts/docs-list.js",
|
|
208
|
-
"docs:bin": "node scripts/build-docs-list.mjs",
|
|
209
|
-
"docs:dev": "cd docs && mint dev",
|
|
210
|
-
"docs:build": "cd docs && pnpm dlx --reporter append-only mint broken-links",
|
|
211
|
-
"build": "tsc -p tsconfig.json && node --import tsx scripts/canvas-a2ui-copy.ts && node --import tsx scripts/copy-hook-metadata.ts && node --import tsx scripts/write-build-info.ts",
|
|
212
|
-
"plugins:sync": "node --import tsx scripts/sync-plugin-versions.ts",
|
|
213
|
-
"release:check": "node --import tsx scripts/release-check.ts",
|
|
214
|
-
"ui:install": "node scripts/ui.js install",
|
|
215
|
-
"ui:dev": "node scripts/ui.js dev",
|
|
216
|
-
"ui:build": "node scripts/ui.js build",
|
|
217
|
-
"start": "node scripts/run-node.mjs",
|
|
218
|
-
"taskmaster": "node scripts/run-node.mjs",
|
|
219
|
-
"gateway:watch": "node scripts/watch-node.mjs gateway --force",
|
|
220
|
-
"logs": "npx tsx scripts/session-viewer.ts",
|
|
221
|
-
"gateway:dev": "TASKMASTER_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway",
|
|
222
|
-
"gateway:dev:reset": "TASKMASTER_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway --reset",
|
|
223
|
-
"tui": "node scripts/run-node.mjs tui",
|
|
224
|
-
"tui:dev": "TASKMASTER_PROFILE=dev node scripts/run-node.mjs tui",
|
|
225
|
-
"taskmaster:rpc": "node scripts/run-node.mjs agent --mode rpc --json",
|
|
226
|
-
"lint": "oxlint --type-aware src test",
|
|
227
|
-
"lint:fix": "pnpm format:fix && oxlint --type-aware --fix src test",
|
|
228
|
-
"format": "oxfmt --check src test",
|
|
229
|
-
"format:fix": "oxfmt --write src test",
|
|
230
|
-
"test": "node scripts/test-parallel.mjs",
|
|
231
|
-
"test:watch": "vitest",
|
|
232
|
-
"test:ui": "pnpm --dir ui test",
|
|
233
|
-
"test:force": "node --import tsx scripts/test-force.ts",
|
|
234
|
-
"test:coverage": "vitest run --coverage",
|
|
235
|
-
"test:e2e": "vitest run --config vitest.e2e.config.ts",
|
|
236
|
-
"test:live": "TASKMASTER_LIVE_TEST=1 vitest run --config vitest.live.config.ts",
|
|
237
|
-
"test:docker:onboard": "bash scripts/e2e/onboard-docker.sh",
|
|
238
|
-
"test:docker:gateway-network": "bash scripts/e2e/gateway-network-docker.sh",
|
|
239
|
-
"test:docker:live-models": "bash scripts/test-live-models-docker.sh",
|
|
240
|
-
"test:docker:live-gateway": "bash scripts/test-live-gateway-models-docker.sh",
|
|
241
|
-
"test:docker:qr": "bash scripts/e2e/qr-import-docker.sh",
|
|
242
|
-
"test:docker:doctor-switch": "bash scripts/e2e/doctor-install-switch-docker.sh",
|
|
243
|
-
"test:docker:plugins": "bash scripts/e2e/plugins-docker.sh",
|
|
244
|
-
"test:docker:cleanup": "bash scripts/test-cleanup-docker.sh",
|
|
245
|
-
"test:docker:all": "pnpm test:docker:live-models && pnpm test:docker:live-gateway && pnpm test:docker:onboard && pnpm test:docker:gateway-network && pnpm test:docker:qr && pnpm test:docker:doctor-switch && pnpm test:docker:plugins && pnpm test:docker:cleanup",
|
|
246
|
-
"test:all": "pnpm lint && pnpm build && pnpm test && pnpm test:e2e && pnpm test:live && pnpm test:docker:all",
|
|
247
|
-
"test:install:e2e": "bash scripts/test-install-sh-e2e-docker.sh",
|
|
248
|
-
"test:install:smoke": "bash scripts/test-install-sh-docker.sh",
|
|
249
|
-
"test:install:e2e:openai": "TASKMASTER_E2E_MODELS=openai bash scripts/test-install-sh-e2e-docker.sh",
|
|
250
|
-
"test:install:e2e:anthropic": "TASKMASTER_E2E_MODELS=anthropic bash scripts/test-install-sh-e2e-docker.sh",
|
|
251
|
-
"protocol:gen": "node --import tsx scripts/protocol-gen.ts",
|
|
252
|
-
"protocol:check": "pnpm protocol:gen && git diff --exit-code -- dist/protocol.schema.json",
|
|
253
|
-
"canvas:a2ui:bundle": "bash scripts/bundle-a2ui.sh",
|
|
254
|
-
"check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 500"
|
|
255
265
|
}
|
|
256
|
-
}
|
|
266
|
+
}
|
package/scripts/install.sh
CHANGED
|
File without changes
|
|
@@ -53,6 +53,8 @@ Take a snapshot and check the page content.
|
|
|
53
53
|
- Copy the new key
|
|
54
54
|
- Screenshot: "Created a new key for you."
|
|
55
55
|
|
|
56
|
+
**Send the key as a separate message** — just the key on its own line, nothing else. This lets the user tap and copy it easily from their chat app.
|
|
57
|
+
|
|
56
58
|
## Step 6: Add to Taskmaster
|
|
57
59
|
|
|
58
60
|
Tell the user how to add the key:
|
|
@@ -44,6 +44,7 @@ Take a snapshot of the dashboard.
|
|
|
44
44
|
- If the key is masked, click the eye icon to reveal it
|
|
45
45
|
- Screenshot: "Here's your Tavily dashboard. Copying your API key..."
|
|
46
46
|
- Copy the key value
|
|
47
|
+
- **Send the key as a separate message** — just the key on its own line, nothing else. This lets the user tap and copy it easily from their chat app.
|
|
47
48
|
|
|
48
49
|
## Step 6: Add to Taskmaster
|
|
49
50
|
|
|
@@ -107,7 +107,7 @@ Once your license is activated:
|
|
|
107
107
|
2. Sign in with your Claude Pro account
|
|
108
108
|
3. Copy the code shown and paste it into the setup page
|
|
109
109
|
4. Tap **Submit**
|
|
110
|
-
5. When connected, tap **"Continue to
|
|
110
|
+
5. When connected, tap **"Continue to Chat"** to start configuring your assistant
|
|
111
111
|
|
|
112
112
|
> **Don't have Claude Pro?** Click "Or enter your API key" below the Connect button. Paste your Anthropic API key and tap Submit. This is the advanced option — most people find signing in with Claude Pro much easier.
|
|
113
113
|
|
|
@@ -206,13 +206,16 @@ Taskmaster runs two assistants on the same WhatsApp number, each with a differen
|
|
|
206
206
|
|
|
207
207
|
**The Public Assistant** handles messages from your customers. It can reply to messages and look up information you've taught it, but it cannot access your files, run commands, or see private notes. If a customer tries to trick it into doing something it shouldn't, it simply can't — those capabilities don't exist for it.
|
|
208
208
|
|
|
209
|
-
**The Admin Assistant** is your personal assistant. When you
|
|
209
|
+
**The Admin Assistant** is your personal assistant. When you use the Chat page (or message yourself on WhatsApp), you're talking to this one. It has full access — it can manage files, browse the web, run scheduled tasks, and read everything.
|
|
210
210
|
|
|
211
211
|
### How does Taskmaster know which is which?
|
|
212
212
|
|
|
213
|
-
|
|
213
|
+
There are two concepts to understand:
|
|
214
214
|
|
|
215
|
-
|
|
215
|
+
- **Paired WhatsApp number** — the WhatsApp account linked to your Pi during setup. This is the number your customers message. When you send yourself a message on this WhatsApp account (self-chat), it goes to the admin assistant.
|
|
216
|
+
- **Admin phones** — additional phone numbers that get admin access when they message the paired WhatsApp. Useful if you have a separate personal phone, or if a business partner needs admin access from their own number.
|
|
217
|
+
|
|
218
|
+
By default, messages from anyone other than registered admin phones go to the public assistant. You can add admin phones on the **Admins** page.
|
|
216
219
|
|
|
217
220
|
---
|
|
218
221
|
|