@polderlabs/bizar 5.3.0 → 5.4.0

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.
Files changed (69) hide show
  1. package/bizar-dash/dist/assets/EnvVarsSection-DqvB8ZcJ.js +4 -0
  2. package/bizar-dash/dist/assets/EnvVarsSection-DqvB8ZcJ.js.map +1 -0
  3. package/bizar-dash/dist/assets/MobileChat-DRXP2ERQ.js +1 -0
  4. package/bizar-dash/dist/assets/{MobileChat-OidrxXR9.js.map → MobileChat-DRXP2ERQ.js.map} +1 -1
  5. package/bizar-dash/dist/assets/MobileSettings-CVW9VhEo.js +1 -0
  6. package/bizar-dash/dist/assets/MobileSettings-CVW9VhEo.js.map +1 -0
  7. package/bizar-dash/dist/assets/Toast-CcZVVN4i.js +1 -0
  8. package/bizar-dash/dist/assets/Toast-CcZVVN4i.js.map +1 -0
  9. package/bizar-dash/dist/assets/{icons-Bd8piSb2.js → icons-OMEGx5KA.js} +66 -61
  10. package/bizar-dash/dist/assets/icons-OMEGx5KA.js.map +1 -0
  11. package/bizar-dash/dist/assets/main-CMAGZouj.js +16 -0
  12. package/bizar-dash/dist/assets/main-CMAGZouj.js.map +1 -0
  13. package/bizar-dash/dist/assets/{main-3G6mOhiK.css → main-O2tZVdHm.css} +1 -1
  14. package/bizar-dash/dist/assets/mobile-XN2P7YfM.js +1 -0
  15. package/bizar-dash/dist/assets/mobile-XN2P7YfM.js.map +1 -0
  16. package/bizar-dash/dist/assets/{mobile-CsZQAswA.css → mobile-layout-D6V-7WnA.css} +1 -1
  17. package/bizar-dash/dist/assets/mobile-layout-DqTxvXZp.js +2 -0
  18. package/bizar-dash/dist/assets/mobile-layout-DqTxvXZp.js.map +1 -0
  19. package/bizar-dash/dist/assets/useSlashCommands-iyoW95UB.js +2 -0
  20. package/bizar-dash/dist/assets/useSlashCommands-iyoW95UB.js.map +1 -0
  21. package/bizar-dash/dist/index.html +8 -6
  22. package/bizar-dash/dist/mobile.html +4 -4
  23. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  24. package/bizar-dash/src/server/auth.mjs +14 -1
  25. package/bizar-dash/src/server/routes/users.mjs +18 -0
  26. package/bizar-dash/src/web/MobileApp.tsx +26 -19
  27. package/bizar-dash/src/web/components/MobileBottomNav.tsx +38 -0
  28. package/bizar-dash/src/web/components/MobileDrawer.tsx +68 -0
  29. package/bizar-dash/src/web/components/MobileHeader.tsx +50 -0
  30. package/bizar-dash/src/web/components/MobileLayout.tsx +63 -0
  31. package/bizar-dash/src/web/components/TaskCard.tsx +69 -0
  32. package/bizar-dash/src/web/components/TaskCreateSheet.tsx +76 -0
  33. package/bizar-dash/src/web/main.tsx +1 -0
  34. package/bizar-dash/src/web/mobile/MobileDoctor.tsx +80 -0
  35. package/bizar-dash/src/web/mobile/MobileEval.tsx +167 -0
  36. package/bizar-dash/src/web/mobile/MobileMarketplace.tsx +106 -0
  37. package/bizar-dash/src/web/mobile/MobileMemory.tsx +108 -0
  38. package/bizar-dash/src/web/mobile/MobileOverview.tsx +213 -0
  39. package/bizar-dash/src/web/mobile/MobilePlugins.tsx +71 -0
  40. package/bizar-dash/src/web/mobile/MobileSettings.tsx +235 -180
  41. package/bizar-dash/src/web/mobile/MobileTasks.tsx +94 -0
  42. package/bizar-dash/src/web/mobile.tsx +1 -0
  43. package/bizar-dash/src/web/styles/main.css +388 -0
  44. package/bizar-dash/src/web/styles/memory.css +45 -0
  45. package/bizar-dash/src/web/styles/mobile-layout.css +231 -0
  46. package/bizar-dash/src/web/styles/mobile.css +180 -0
  47. package/bizar-dash/src/web/styles/settings.css +110 -0
  48. package/bizar-dash/src/web/styles/tasks.css +305 -0
  49. package/bizar-dash/tests/mobile-chat.test.tsx +82 -0
  50. package/bizar-dash/tests/mobile-layout.test.tsx +296 -0
  51. package/bizar-dash/tests/mobile-misc.test.tsx +321 -0
  52. package/bizar-dash/tests/mobile-overview.test.tsx +214 -0
  53. package/bizar-dash/tests/mobile-settings.test.tsx +181 -0
  54. package/bizar-dash/tests/mobile-tasks.test.tsx +162 -0
  55. package/cli/commands/dash.mjs +5 -0
  56. package/cli/commands/tailscale.mjs +8 -1
  57. package/package.json +1 -1
  58. package/bizar-dash/dist/assets/MobileChat-OidrxXR9.js +0 -1
  59. package/bizar-dash/dist/assets/MobileSettings-B91gVFii.js +0 -1
  60. package/bizar-dash/dist/assets/MobileSettings-B91gVFii.js.map +0 -1
  61. package/bizar-dash/dist/assets/icons-Bd8piSb2.js.map +0 -1
  62. package/bizar-dash/dist/assets/main-6YUZY968.js +0 -19
  63. package/bizar-dash/dist/assets/main-6YUZY968.js.map +0 -1
  64. package/bizar-dash/dist/assets/mobile-CSsp30lr.js +0 -2
  65. package/bizar-dash/dist/assets/mobile-CSsp30lr.js.map +0 -1
  66. package/bizar-dash/dist/assets/mobile-DtwK7DOV.js +0 -1
  67. package/bizar-dash/dist/assets/mobile-DtwK7DOV.js.map +0 -1
  68. package/bizar-dash/dist/assets/useSlashCommands-DEkxEvOO.js +0 -2
  69. package/bizar-dash/dist/assets/useSlashCommands-DEkxEvOO.js.map +0 -1
@@ -0,0 +1 @@
1
+ import{M as r}from"./mobile-layout-DqTxvXZp.js";import{b as e,j as o,r as n}from"./react-vendor-Dn4wqh4Z.js";import"./icons-OMEGx5KA.js";const t=document.getElementById("root");if(!t)throw new Error("Root element #root not found");e(t).render(o.jsx(n.StrictMode,{children:o.jsx(r,{})}));
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile-XN2P7YfM.js","sources":["../../src/web/mobile.tsx"],"sourcesContent":["// src/mobile.tsx — entry point for mobile dashboard.\nimport { StrictMode } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { MobileApp } from './MobileApp';\nimport './styles/mobile.css';\nimport './styles/mobile-layout.css';\n\nconst root = document.getElementById('root');\nif (!root) throw new Error('Root element #root not found');\ncreateRoot(root).render(\n <StrictMode>\n <MobileApp />\n </StrictMode>,\n);\n"],"names":["root","createRoot","jsx","StrictMode","MobileApp"],"mappings":"yIAOA,MAAMA,EAAO,SAAS,eAAe,MAAM,EAC3C,GAAI,CAACA,EAAM,MAAM,IAAI,MAAM,8BAA8B,EACzDC,EAAWD,CAAI,EAAE,OACfE,EAAAA,IAACC,EAAAA,WAAA,CACC,SAAAD,EAAAA,IAACE,EAAA,CAAA,CAAU,CAAA,CACb,CACF"}
@@ -1 +1 @@
1
- @media (max-width: 480px){.chat-composer-wrap{padding:.375rem .375rem .5rem}.chat-welcome-h1{font-size:1.875rem}}:root{--bg: #0b0e14;--bg-elev: #12161f;--bg-elev-2: #1a1f2b;--bg-elev-3: #232a39;--surface: var(--bg-elev);--surface-2: var(--bg-elev-2);--border: #232a39;--border-strong: #2d3648;--text: #c9d1d9;--text-muted: #6e7681;--text-dim: #484f58;--text-strong: #f0f6fc;--accent: #8b5cf6;--accent-bg: rgba(139, 92, 246, .12);--accent-border: rgba(139, 92, 246, .4);--accent-2: #a78bfa;--success: #3fb950;--warning: #d29922;--error: #f85149;--info: #58a6ff;--font-sans: "Inter var", "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", ui-monospace, monospace;--mobile-tap-target: 44px;--mobile-nav-height: 56px;--mobile-topbar-height: 48px;--mobile-padding: 16px;--mobile-font-base: 16px}*,*:before,*:after{box-sizing:border-box;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;touch-action:manipulation}html,body{margin:0;padding:0;height:100%;overflow:hidden}body{font-family:var(--font-sans);font-size:var(--mobile-font-base);line-height:1.5;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;overscroll-behavior:none}button,[role=button],a,input,select,textarea{touch-action:manipulation}input,textarea,select{user-select:text;-webkit-user-select:text;font-size:var(--mobile-font-base)}a{color:var(--accent);text-decoration:none}code,.mono{font-family:var(--font-mono)}.mobile-app{display:flex;flex-direction:column;height:100vh;height:100dvh;background:var(--bg);color:var(--text);font-family:var(--font-sans);padding-top:env(safe-area-inset-top,0);padding-bottom:env(safe-area-inset-bottom,0);overscroll-behavior:none}.mobile-topbar{height:var(--mobile-topbar-height);flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 var(--mobile-padding);background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10}.mobile-topbar-left{display:flex;align-items:center;gap:8px}.mobile-logo{font-size:20px;line-height:1}.mobile-title{font-size:16px;font-weight:600;color:var(--text-strong)}.mobile-topbar-right{display:flex;align-items:center;gap:4px}.mobile-icon-btn{width:var(--mobile-tap-target);height:var(--mobile-tap-target);min-width:var(--mobile-tap-target);min-height:var(--mobile-tap-target);display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:8px;color:var(--text-muted);cursor:pointer;transition:background .12s ease,color .12s ease;padding:0}.mobile-icon-btn:hover{background:var(--bg-elev-2);color:var(--text)}.mobile-icon-btn:active{background:var(--bg-elev-3)}.mobile-icon-btn-danger{color:var(--error)}.mobile-content{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;padding:var(--mobile-padding);padding-bottom:calc(var(--mobile-nav-height) + var(--mobile-padding) + env(safe-area-inset-bottom,0))}.mobile-view{max-width:100%;min-width:0}.mobile-view-footer{padding:24px 0;text-align:center}.mobile-bottom-nav{position:fixed;bottom:0;left:0;right:0;height:calc(var(--mobile-nav-height) + env(safe-area-inset-bottom,0));background:var(--surface);border-top:1px solid var(--border);display:flex;align-items:stretch;padding-bottom:env(safe-area-inset-bottom,0);z-index:50}.mobile-nav-btn{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;background:transparent;border:none;color:var(--text-muted);cursor:pointer;min-height:var(--mobile-tap-target);padding:8px 4px;transition:color .12s ease}.mobile-nav-btn-active{color:var(--accent)}.mobile-nav-label{font-size:10px;font-weight:500}.mobile-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;height:100dvh;gap:12px;color:var(--text-muted)}.mobile-stats{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:20px}.mobile-stat{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px;text-align:center}.mobile-stat-value{font-size:28px;font-weight:700;color:var(--accent);line-height:1}.mobile-stat-label{font-size:12px;color:var(--text-muted);margin-top:4px}.mobile-section{margin-bottom:20px}.mobile-section-title{font-size:12px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin:0 0 8px;display:flex;align-items:center;gap:6px}.mobile-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:14px;margin-bottom:12px}.mobile-card-list{display:flex;flex-direction:column;gap:6px}.mobile-agent-card{display:flex;align-items:center;gap:10px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:10px}.mobile-agent-dot{width:8px;height:8px;border-radius:50%;background:var(--text-dim);flex-shrink:0}.mobile-agent-dot[data-status=working],.mobile-agent-dot[data-status=doing]{background:var(--success);animation:pulse-dot 1.6s ease-in-out infinite}.mobile-agent-dot[data-status=error],.mobile-agent-dot[data-status=stuck]{background:var(--error)}.mobile-agent-dot[data-status=idle]{background:var(--text-dim)}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}.mobile-agent-info{flex:1;min-width:0}.mobile-agent-name{font-size:14px;font-weight:500;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;white-space:normal;overflow-wrap:anywhere}.mobile-agent-meta{font-size:12px;color:var(--text-muted);display:block;overflow-wrap:anywhere}.mobile-task-card{width:100%;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:10px;display:flex;align-items:center;gap:10px;text-align:left}.mobile-task-actions{display:flex;gap:2px;flex-shrink:0}.priority-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.task-content{flex:1;min-width:0}.task-title{font-size:14px;font-weight:500;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;white-space:normal;overflow-wrap:anywhere}.task-meta{font-size:12px;color:var(--text-muted);display:block;overflow-wrap:anywhere}.mobile-tasks-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:16px}.mobile-search-input{flex:1;height:var(--mobile-tap-target);padding:0 14px;background:var(--surface);border:1px solid var(--border);border-radius:22px;color:var(--text);font-family:inherit;font-size:var(--mobile-font-base);outline:none}.mobile-search-input:focus{border-color:var(--accent)}.mobile-empty-inline{font-size:13px;color:var(--text-muted);padding:4px 0}.mobile-empty-compact{padding:24px 16px}.mobile-setting-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--border)}.mobile-setting-row:last-child{border-bottom:none}.mobile-setting-label{font-size:14px;color:var(--text)}.mobile-setting-value{font-size:14px;color:var(--text-muted);text-align:right}.mobile-list-item{display:flex;align-items:center;gap:12px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:10px}.mobile-list-icon{color:var(--text-muted);flex-shrink:0}.mobile-list-content{flex:1;min-width:0}.mobile-list-title{font-size:14px;font-weight:500;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;white-space:normal;overflow-wrap:anywhere}.mobile-list-meta{font-size:12px;color:var(--text-muted);display:block;overflow-wrap:anywhere}.mobile-list-badge{font-size:11px;padding:2px 8px;border-radius:12px;background:var(--bg-elev-3);color:var(--text-muted);flex-shrink:0}.mobile-list-badge[data-status=working],.mobile-list-badge[data-status=doing]{background:#3fb95026;color:var(--success)}.mobile-list-badge[data-status=error],.mobile-list-badge[data-status=stuck]{background:#f8514926;color:var(--error)}.badge-on{background:#3fb95026;color:var(--success)}.badge-off{background:var(--bg-elev-3);color:var(--text-dim)}.mobile-active-badge{font-size:11px;padding:2px 8px;border-radius:12px;background:var(--accent-bg);color:var(--accent);flex-shrink:0}.mobile-empty{text-align:center;padding:48px 20px;color:var(--text-muted)}.mobile-empty svg{margin-bottom:12px;opacity:.4}.mobile-empty p{margin:0 0 6px}.muted{color:var(--text-muted);font-size:13px}.mobile-btn{min-height:var(--mobile-tap-target);min-width:var(--mobile-tap-target);padding:12px 20px;border-radius:10px;font-size:15px;font-weight:500;border:none;background:var(--accent);color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:opacity .12s ease;text-decoration:none}.mobile-btn:active{opacity:.7}.mobile-btn-secondary{background:var(--surface);border:1px solid var(--border);color:var(--text)}.mobile-more-footer{padding:16px 0;border-top:1px solid var(--border);margin-top:8px}.mobile-more-link{display:flex;align-items:center;justify-content:center;gap:4px;color:var(--accent);font-size:14px;text-decoration:none;min-height:var(--mobile-tap-target);padding:12px}[data-theme=dark] .mobile-app{background:#0d1117}[data-theme=light]{--bg: #ffffff;--bg-elev: #f6f8fa;--bg-elev-2: #eaeef2;--bg-elev-3: #d0d7de;--surface: var(--bg-elev);--surface-2: var(--bg-elev-2);--border: #d0d7de;--border-strong: #afb8c1;--text: #1f2328;--text-muted: #656d76;--text-dim: #8c959f;--text-strong: #1f2328;--accent: #7c3aed;--accent-2: #6d28d9;--accent-bg: rgba(124, 58, 237, .08);--accent-border: rgba(124, 58, 237, .3)}.mobile-sheet-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;z-index:100;display:flex;align-items:flex-end;animation:sheet-fade-in .15s ease}@keyframes sheet-fade-in{0%{opacity:0}to{opacity:1}}.mobile-sheet{width:100%;background:var(--surface);border-radius:16px 16px 0 0;max-height:85vh;overflow-y:auto;overflow-x:hidden;animation:sheet-slide-up .2s cubic-bezier(.32,.72,0,1);display:flex;flex-direction:column}@keyframes sheet-slide-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}.mobile-sheet-handle{width:36px;height:4px;background:var(--border-strong);border-radius:2px;margin:10px auto 0;flex-shrink:0}.mobile-sheet-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px 8px;border-bottom:1px solid var(--border);flex-shrink:0}.mobile-sheet-title{font-size:16px;font-weight:600;color:var(--text-strong);margin:0}.mobile-sheet-content{flex:1;overflow-y:auto;padding:12px 16px}.mobile-sheet-actions{padding:12px 16px;border-top:1px solid var(--border);flex-shrink:0;display:flex;gap:8px}.mobile-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--bg);z-index:200;display:flex;flex-direction:column;animation:modal-fade-in .15s ease}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}.mobile-modal{flex:1;display:flex;flex-direction:column;overflow:hidden}.mobile-modal-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--border);flex-shrink:0}.mobile-modal-title{font-size:18px;font-weight:600;color:var(--text-strong);margin:0}.mobile-modal-content{flex:1;overflow-y:auto;padding:16px}.mobile-modal-actions{padding:12px 16px;border-top:1px solid var(--border);flex-shrink:0;display:flex;gap:8px}.mobile-search-container{display:flex;flex-direction:column;gap:12px;height:100%}.mobile-search-input-row{display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:0 14px;height:var(--mobile-tap-target)}.mobile-search-field{flex:1;background:transparent;border:none;outline:none;color:var(--text);font-family:inherit;font-size:var(--mobile-font-base)}.mobile-search-scopes{display:flex;gap:6px;flex-wrap:wrap}.mobile-scope-chip{min-height:var(--mobile-tap-target);padding:10px 14px;border-radius:16px;font-size:13px;font-weight:500;background:var(--surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;transition:all .12s ease}.mobile-scope-chip.active{background:var(--accent-bg);border-color:var(--accent-border);color:var(--accent)}.mobile-search-results{flex:1;overflow-y:auto}.mobile-search-group{margin-bottom:16px}.mobile-search-group-title{font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin:0 0 6px;display:flex;align-items:center;gap:4px}.mobile-search-result-item{padding:10px 12px;background:var(--surface);border:1px solid var(--border);border-radius:8px;margin-bottom:4px;cursor:pointer}.mobile-search-result-title{font-size:14px;font-weight:500;display:block;overflow-wrap:anywhere}.mobile-search-result-meta{font-size:12px;color:var(--text-muted);display:block;overflow-wrap:anywhere}.mobile-search-loading{text-align:center;padding:20px;color:var(--text-muted);font-size:14px}.mobile-notif-btn{position:relative}.mobile-notif-badge{position:absolute;top:4px;right:4px;min-width:16px;height:16px;background:var(--error);color:#fff;font-size:10px;font-weight:700;border-radius:8px;display:flex;align-items:center;justify-content:center;padding:0 4px}.mobile-notif-list{display:flex;flex-direction:column;gap:4px}.mobile-notif-item{width:100%;min-height:var(--mobile-tap-target);display:flex;align-items:flex-start;gap:12px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:10px;cursor:pointer;position:relative}.mobile-notif-item.unread{border-color:var(--accent-border)}.mobile-notif-icon{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0}.mobile-notif-icon.severity-success{background:#3fb95026;color:var(--success)}.mobile-notif-icon.severity-error{background:#f8514926;color:var(--error)}.mobile-notif-icon.severity-warning{background:#d2992226;color:var(--warning)}.mobile-notif-icon.severity-info{background:#58a6ff26;color:var(--info)}.mobile-notif-body{flex:1;min-width:0}.mobile-notif-title{font-size:14px;font-weight:500;display:block;overflow-wrap:anywhere}.mobile-notif-text{font-size:13px;color:var(--text-muted);display:block;margin-top:2px}.mobile-notif-time{font-size:11px;color:var(--text-dim);display:block;margin-top:4px}.mobile-notif-dot{width:8px;height:8px;border-radius:50%;background:var(--accent);flex-shrink:0;margin-top:6px}.mobile-project-btn{display:flex;align-items:center;gap:4px;background:transparent;border:none;color:var(--text-muted);cursor:pointer;min-height:var(--mobile-tap-target);min-width:var(--mobile-tap-target);padding:10px 8px;border-radius:6px;font-size:14px;font-family:inherit}.mobile-project-btn:hover{background:var(--bg-elev-2);color:var(--text)}.mobile-project-name{max-width:120px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;white-space:normal}.mobile-project-list{display:flex;flex-direction:column;gap:6px}.mobile-project-item{display:flex;align-items:center;gap:12px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:10px;cursor:pointer}.mobile-project-item.active{border-color:var(--accent-border)}.mobile-project-status{width:8px;height:8px;border-radius:50%;background:var(--text-dim);flex-shrink:0}.mobile-project-status[data-status=active]{background:var(--success)}.mobile-project-status[data-status=error]{background:var(--error)}.mobile-project-info{flex:1;min-width:0}.mobile-project-item-name{font-size:14px;font-weight:500;display:block}.mobile-project-item-path{font-size:11px;color:var(--text-muted);display:block;overflow-wrap:anywhere;font-family:var(--font-mono)}.mobile-back-btn{position:fixed;top:calc(var(--mobile-topbar-height) + 8px);left:12px;z-index:60;background:var(--surface);border:1px solid var(--border);color:var(--text);font-size:13px;font-weight:500;min-height:var(--mobile-tap-target);padding:10px 14px;border-radius:20px;cursor:pointer;display:flex;align-items:center;gap:4px;box-shadow:0 2px 8px #0000004d}.mobile-kanban-tabs{display:flex;gap:4px;margin-bottom:12px;overflow-x:auto;-webkit-overflow-scrolling:touch}.mobile-kanban-tab{min-height:var(--mobile-tap-target);padding:10px 14px;border-radius:20px;font-size:13px;font-weight:500;background:var(--surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;white-space:nowrap;transition:all .12s ease;flex-shrink:0}.mobile-kanban-tab.active{background:var(--accent-bg);border-color:var(--accent-border);color:var(--accent)}.mobile-tasks-filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.mobile-filter-select{min-height:var(--mobile-tap-target);padding:0 10px;background:var(--surface);border:1px solid var(--border);border-radius:18px;color:var(--text);font-family:inherit;font-size:13px;cursor:pointer}.mobile-fab{position:fixed;bottom:calc(var(--mobile-nav-height) + 80px + env(safe-area-inset-bottom,0));right:20px;width:56px;height:56px;border-radius:50%;background:var(--accent);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px #8b5cf666;z-index:30;transition:transform .12s ease,box-shadow .12s ease}.mobile-fab:active{transform:scale(.94);box-shadow:0 2px 8px #8b5cf64d}.mobile-task-detail-actions{display:flex;gap:8px;flex-wrap:wrap}.mobile-task-detail{display:flex;flex-direction:column;gap:12px}.mobile-task-detail-header{display:flex;align-items:center;gap:8px}.mobile-task-status-badge{font-size:11px;font-weight:600;padding:3px 10px;border-radius:12px;text-transform:capitalize}.mobile-task-status-badge.status-queued{background:#58a6ff26;color:var(--info)}.mobile-task-status-badge.status-doing{background:#3fb95026;color:var(--success)}.mobile-task-status-badge.status-blocked{background:#f8514926;color:var(--error)}.mobile-task-status-badge.status-done{background:#3fb95026;color:var(--success)}.mobile-task-priority{font-size:11px;font-weight:600;padding:3px 10px;border-radius:12px;text-transform:capitalize}.mobile-task-priority.priority-high{background:#f8514926;color:var(--error)}.mobile-task-priority.priority-normal{background:#58a6ff26;color:var(--info)}.mobile-task-priority.priority-low{background:var(--bg-elev-3);color:var(--text-dim)}.mobile-task-detail-title{font-size:18px;font-weight:600;color:var(--text-strong);margin:0}.mobile-task-detail-desc{font-size:14px;color:var(--text-muted);line-height:1.5;margin:0;overflow-wrap:anywhere}.mobile-task-detail-meta{display:flex;flex-direction:column;gap:0}.mobile-task-detail-row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--border);font-size:13px}.mobile-task-detail-row:last-child{border-bottom:none}.mobile-task-detail-row span:first-child{color:var(--text-muted)}.mobile-task-detail-row span:last-child{color:var(--text);font-weight:500}.mobile-task-form{display:flex;flex-direction:column;gap:12px}.mobile-field-label{font-size:12px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px;display:block}.mobile-input{width:100%;min-height:var(--mobile-tap-target);padding:10px 14px;background:var(--surface);border:1px solid var(--border);border-radius:10px;color:var(--text);font-family:inherit;font-size:var(--mobile-font-base);outline:none;transition:border-color .12s ease}.mobile-input:focus{border-color:var(--accent)}.mobile-input-sm{min-height:var(--mobile-tap-target);padding:8px 12px}.mobile-agent-detail{display:flex;flex-direction:column;gap:12px}.mobile-agent-detail-status{display:flex;align-items:center;gap:8px}.mobile-agent-detail-status-text{font-size:14px;font-weight:500;text-transform:capitalize}.mobile-agent-detail-desc{font-size:14px;color:var(--text-muted);line-height:1.5;margin:0;overflow-wrap:anywhere}.mobile-view-canvas{padding-bottom:80px}.mobile-canvas-bar{display:flex;align-items:center;justify-content:space-between;padding:0 0 12px;border-bottom:1px solid var(--border);margin-bottom:12px}.mobile-canvas-meta{display:flex;flex-direction:column;gap:2px}.mobile-canvas-title{font-size:16px;font-weight:600;color:var(--text-strong)}.mobile-canvas-status{font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;text-transform:capitalize}.mobile-canvas-status[data-status=approved],.mobile-canvas-status[data-status=done]{background:#3fb95026;color:var(--success)}.mobile-canvas-status[data-status=in-progress],.mobile-canvas-status[data-status=doing]{background:#58a6ff26;color:var(--info)}.mobile-canvas-status[data-status=draft]{background:var(--bg-elev-3);color:var(--text-dim)}.mobile-canvas-actions{display:flex;align-items:center;gap:4px}.mobile-canvas-comment-count{position:absolute;top:2px;right:2px;background:var(--accent);color:#fff;font-size:9px;font-weight:700;border-radius:6px;padding:1px 4px;min-width:14px;text-align:center}.mobile-canvas-elements{display:flex;flex-direction:column;gap:10px}.mobile-canvas-element{background:var(--surface);border:2px solid var(--border);border-radius:12px;overflow:hidden;cursor:pointer}.mobile-canvas-element.selected{box-shadow:0 0 0 2px var(--accent)}.mobile-canvas-el-header{display:flex;align-items:center;gap:6px;padding:8px 12px}.mobile-canvas-el-type{font-size:11px;font-weight:600;text-transform:uppercase}.mobile-canvas-el-status{font-size:10px;padding:1px 6px;border-radius:8px;background:var(--bg-elev-3);color:var(--text-muted);margin-left:auto}.mobile-canvas-el-title{font-size:14px;font-weight:600;padding:8px 12px;color:var(--text-strong)}.mobile-canvas-el-content{font-size:13px;color:var(--text-muted);padding:0 12px 8px;line-height:1.4}.mobile-canvas-el-comments{display:flex;align-items:center;gap:4px;padding:6px 12px;border-top:1px solid var(--border);font-size:11px;color:var(--text-dim)}.mobile-canvas-comments{margin-top:16px;background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:hidden}.mobile-canvas-comments-header{display:flex;align-items:center;justify-content:space-between;padding:12px;border-bottom:1px solid var(--border)}.mobile-canvas-comments-header h4{margin:0;font-size:14px;font-weight:600}.mobile-canvas-comment-list{max-height:300px;overflow-y:auto;padding:12px}.mobile-canvas-comment{margin-bottom:12px}.mobile-canvas-comment-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.mobile-canvas-comment-head .mono{font-size:11px;font-weight:600}.mobile-canvas-comment-head .muted{font-size:11px;color:var(--text-dim);margin-left:auto}.mobile-canvas-comment-text{font-size:13px;color:var(--text-muted);line-height:1.4}.mobile-canvas-comment-input{display:flex;gap:8px;padding:12px;border-top:1px solid var(--border)}.mobile-canvas-comment-input .mobile-input{flex:1}.mobile-activity-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.mobile-event-item{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;background:var(--surface);border:1px solid var(--border);border-radius:10px;margin-bottom:4px;cursor:pointer}.mobile-event-kind{font-size:10px;font-weight:700;padding:2px 8px;border-radius:8px;background:var(--bg-elev-3);color:var(--text-muted);text-transform:uppercase;flex-shrink:0}.mobile-event-msg{flex:1;font-size:13px;color:var(--text);overflow-wrap:anywhere}.mobile-event-time{font-size:11px;color:var(--text-dim);flex-shrink:0}.mobile-submit-hero{background:linear-gradient(135deg,var(--accent-bg) 0%,var(--bg-elev) 100%);border:1px solid var(--accent-border);border-radius:16px;padding:16px;margin-bottom:16px}.mobile-submit-input{width:100%;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px;color:var(--text);font-family:inherit;font-size:var(--mobile-font-base);resize:none;outline:none;margin-bottom:12px}.mobile-submit-input:focus{border-color:var(--accent)}.mobile-submit-actions{display:flex;flex-direction:column;gap:10px}.mobile-submit-chips{display:flex;gap:6px;flex-wrap:wrap}.mobile-submit-chip{min-height:var(--mobile-tap-target);padding:10px 12px;border-radius:16px;font-size:12px;font-weight:500;background:var(--surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;transition:all .12s ease}.mobile-submit-chip:hover{border-color:var(--accent-border);color:var(--accent)}.mobile-more-nav-item{display:flex;align-items:center;gap:14px;padding:14px 12px;background:var(--surface);border:1px solid var(--border);border-radius:12px;margin-bottom:6px;cursor:pointer;transition:all .12s ease}.mobile-more-nav-item:hover{border-color:var(--accent-border);background:var(--bg-elev-2)}.mobile-more-nav-icon{width:40px;height:40px;border-radius:10px;background:var(--bg-elev-2);color:var(--accent);display:flex;align-items:center;justify-content:center;flex-shrink:0}.mobile-more-nav-content{flex:1;min-width:0}.mobile-more-nav-label{font-size:15px;font-weight:600;color:var(--text-strong);display:flex;align-items:center;gap:8px}.mobile-more-nav-count{font-size:11px;font-weight:600;padding:1px 7px;border-radius:10px;background:var(--bg-elev-3);color:var(--text-muted)}.mobile-more-nav-desc{font-size:12px;color:var(--text-muted);display:block;margin-top:2px}.mobile-more-nav-arrow{color:var(--text-dim);flex-shrink:0}.mobile-config-list{display:flex;flex-direction:column;gap:0}.mobile-config-row{display:flex;align-items:flex-start;flex-wrap:wrap;gap:10px;padding:10px 0;border-bottom:1px solid var(--border)}.mobile-config-row:last-child{border-bottom:none}.mobile-config-key{flex:0 0 104px;display:flex;flex-direction:column;gap:2px}.mobile-config-key .mono{font-size:12px;font-weight:500;color:var(--text);word-break:break-all}.mobile-config-type{font-size:10px;color:var(--text-dim);text-transform:uppercase}.mobile-config-value{flex:1;min-width:0}.mobile-config-value .mobile-input{min-height:var(--mobile-tap-target);padding:6px 10px;font-size:13px}.mobile-toggle{position:relative;display:inline-flex;align-items:center;cursor:pointer;width:44px;height:24px}.mobile-toggle input{opacity:0;width:0;height:0;position:absolute}.mobile-toggle-slider{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--bg-elev-3);border-radius:12px;transition:background .2s ease}.mobile-toggle-slider:before{content:"";position:absolute;left:2px;top:2px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform .2s ease}.mobile-toggle input:checked+.mobile-toggle-slider{background:var(--accent)}.mobile-toggle input:checked+.mobile-toggle-slider:before{transform:translate(20px)}.mobile-theme-btns{display:flex;gap:6px}.mobile-theme-btn{display:flex;align-items:center;gap:4px;min-height:var(--mobile-tap-target);padding:10px 12px;border-radius:16px;font-size:12px;font-weight:500;background:var(--surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;transition:all .12s ease}.mobile-theme-btn.active{background:var(--accent-bg);border-color:var(--accent-border);color:var(--accent)}.mobile-accent-swatches{display:flex;gap:8px;flex-wrap:wrap}.mobile-accent-swatch{width:var(--mobile-tap-target);height:var(--mobile-tap-target);border-radius:50%;border:2px solid transparent;cursor:pointer;transition:transform .12s ease}.mobile-accent-swatch:hover{transform:scale(1.1)}.mobile-accent-swatch.active{border-color:#fff;box-shadow:0 0 0 2px var(--accent)}.mobile-settings-save-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:10px 16px;background:var(--warning);color:#000;font-size:13px;font-weight:500;margin:calc(-1 * var(--mobile-padding));margin-bottom:12px}.mobile-list-item-interactive{cursor:pointer;transition:all .12s ease}.mobile-list-item-interactive:hover{border-color:var(--accent-border);background:var(--bg-elev-2)}.mobile-list-item-interactive:active{opacity:.8}.mobile-list-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.mobile-list-status-dot[data-status=working],.mobile-list-status-dot[data-status=doing]{background:var(--success)}.mobile-list-status-dot[data-status=error],.mobile-list-status-dot[data-status=stuck]{background:var(--error)}.mobile-list-status-dot[data-status=idle]{background:var(--text-dim)}.mobile-list-badge.badge-accent{background:var(--accent-bg);color:var(--accent)}.mobile-list-badge.badge-warning{background:#d2992226;color:var(--warning)}.mobile-btn-danger{background:var(--error);color:#fff}.mobile-btn-danger:active{opacity:.8}.mobile-artifact-iframe{width:100%;min-height:min(70dvh,560px);border:1px solid var(--border);border-radius:12px;background:#fff}@media (max-width: 420px){.mobile-config-key,.mobile-config-value{flex-basis:100%}.mobile-task-detail-row{flex-direction:column}.mobile-task-detail-row span:first-child,.mobile-task-detail-row span:last-child{flex:none;text-align:left}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
1
+ @media (max-width: 480px){.chat-composer-wrap{padding:.375rem .375rem .5rem}.chat-welcome-h1{font-size:1.875rem}}:root{--bg: #0b0e14;--bg-elev: #12161f;--bg-elev-2: #1a1f2b;--bg-elev-3: #232a39;--surface: var(--bg-elev);--surface-2: var(--bg-elev-2);--border: #232a39;--border-strong: #2d3648;--text: #c9d1d9;--text-muted: #6e7681;--text-dim: #484f58;--text-strong: #f0f6fc;--accent: #8b5cf6;--accent-bg: rgba(139, 92, 246, .12);--accent-border: rgba(139, 92, 246, .4);--accent-2: #a78bfa;--success: #3fb950;--warning: #d29922;--error: #f85149;--info: #58a6ff;--font-sans: "Inter var", "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", ui-monospace, monospace;--mobile-tap-target: 44px;--mobile-nav-height: 56px;--mobile-topbar-height: 48px;--mobile-padding: 16px;--mobile-font-base: 16px}*,*:before,*:after{box-sizing:border-box;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;touch-action:manipulation}html,body{margin:0;padding:0;height:100%;overflow:hidden}body{font-family:var(--font-sans);font-size:var(--mobile-font-base);line-height:1.5;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;overscroll-behavior:none}button,[role=button],a,input,select,textarea{touch-action:manipulation}input,textarea,select{user-select:text;-webkit-user-select:text;font-size:var(--mobile-font-base)}a{color:var(--accent);text-decoration:none}code,.mono{font-family:var(--font-mono)}.mobile-app{display:flex;flex-direction:column;height:100vh;height:100dvh;background:var(--bg);color:var(--text);font-family:var(--font-sans);padding-top:env(safe-area-inset-top,0);padding-bottom:env(safe-area-inset-bottom,0);overscroll-behavior:none}.mobile-topbar{height:var(--mobile-topbar-height);flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 var(--mobile-padding);background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10}.mobile-topbar-left{display:flex;align-items:center;gap:8px}.mobile-logo{font-size:20px;line-height:1}.mobile-title{font-size:16px;font-weight:600;color:var(--text-strong)}.mobile-topbar-right{display:flex;align-items:center;gap:4px}.mobile-icon-btn{width:var(--mobile-tap-target);height:var(--mobile-tap-target);min-width:var(--mobile-tap-target);min-height:var(--mobile-tap-target);display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:8px;color:var(--text-muted);cursor:pointer;transition:background .12s ease,color .12s ease;padding:0}.mobile-icon-btn:hover{background:var(--bg-elev-2);color:var(--text)}.mobile-icon-btn:active{background:var(--bg-elev-3)}.mobile-icon-btn-danger{color:var(--error)}.mobile-content{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;padding:var(--mobile-padding);padding-bottom:calc(var(--mobile-nav-height) + var(--mobile-padding) + env(safe-area-inset-bottom,0))}.mobile-view{max-width:100%;min-width:0}.mobile-view-footer{padding:24px 0;text-align:center}.mobile-bottom-nav{position:fixed;bottom:0;left:0;right:0;height:calc(var(--mobile-nav-height) + env(safe-area-inset-bottom,0));background:var(--surface);border-top:1px solid var(--border);display:flex;align-items:stretch;padding-bottom:env(safe-area-inset-bottom,0);z-index:50}.mobile-nav-btn{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;background:transparent;border:none;color:var(--text-muted);cursor:pointer;min-height:var(--mobile-tap-target);padding:8px 4px;transition:color .12s ease}.mobile-nav-btn-active{color:var(--accent)}.mobile-nav-label{font-size:10px;font-weight:500}.mobile-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;height:100dvh;gap:12px;color:var(--text-muted)}.mobile-stats{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:20px}.mobile-stat{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px;text-align:center}.mobile-stat-value{font-size:28px;font-weight:700;color:var(--accent);line-height:1}.mobile-stat-label{font-size:12px;color:var(--text-muted);margin-top:4px}.mobile-section{margin-bottom:20px}.mobile-section-title{font-size:12px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin:0 0 8px;display:flex;align-items:center;gap:6px}.mobile-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:14px;margin-bottom:12px}.mobile-card-list{display:flex;flex-direction:column;gap:6px}.mobile-agent-card{display:flex;align-items:center;gap:10px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:10px}.mobile-agent-dot{width:8px;height:8px;border-radius:50%;background:var(--text-dim);flex-shrink:0}.mobile-agent-dot[data-status=working],.mobile-agent-dot[data-status=doing]{background:var(--success);animation:pulse-dot 1.6s ease-in-out infinite}.mobile-agent-dot[data-status=error],.mobile-agent-dot[data-status=stuck]{background:var(--error)}.mobile-agent-dot[data-status=idle]{background:var(--text-dim)}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}.mobile-agent-info{flex:1;min-width:0}.mobile-agent-name{font-size:14px;font-weight:500;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;white-space:normal;overflow-wrap:anywhere}.mobile-agent-meta{font-size:12px;color:var(--text-muted);display:block;overflow-wrap:anywhere}.mobile-task-card{width:100%;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:10px;display:flex;align-items:center;gap:10px;text-align:left}.mobile-task-actions{display:flex;gap:2px;flex-shrink:0}.priority-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.task-content{flex:1;min-width:0}.task-title{font-size:14px;font-weight:500;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;white-space:normal;overflow-wrap:anywhere}.task-meta{font-size:12px;color:var(--text-muted);display:block;overflow-wrap:anywhere}.mobile-tasks-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:16px}.mobile-search-input{flex:1;height:var(--mobile-tap-target);padding:0 14px;background:var(--surface);border:1px solid var(--border);border-radius:22px;color:var(--text);font-family:inherit;font-size:var(--mobile-font-base);outline:none}.mobile-search-input:focus{border-color:var(--accent)}.mobile-empty-inline{font-size:13px;color:var(--text-muted);padding:4px 0}.mobile-empty-compact{padding:24px 16px}.mobile-setting-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--border)}.mobile-setting-row:last-child{border-bottom:none}.mobile-setting-label{font-size:14px;color:var(--text)}.mobile-setting-value{font-size:14px;color:var(--text-muted);text-align:right}.mobile-list-item{display:flex;align-items:center;gap:12px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:10px}.mobile-list-icon{color:var(--text-muted);flex-shrink:0}.mobile-list-content{flex:1;min-width:0}.mobile-list-title{font-size:14px;font-weight:500;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;white-space:normal;overflow-wrap:anywhere}.mobile-list-meta{font-size:12px;color:var(--text-muted);display:block;overflow-wrap:anywhere}.mobile-list-badge{font-size:11px;padding:2px 8px;border-radius:12px;background:var(--bg-elev-3);color:var(--text-muted);flex-shrink:0}.mobile-list-badge[data-status=working],.mobile-list-badge[data-status=doing]{background:#3fb95026;color:var(--success)}.mobile-list-badge[data-status=error],.mobile-list-badge[data-status=stuck]{background:#f8514926;color:var(--error)}.badge-on{background:#3fb95026;color:var(--success)}.badge-off{background:var(--bg-elev-3);color:var(--text-dim)}.mobile-active-badge{font-size:11px;padding:2px 8px;border-radius:12px;background:var(--accent-bg);color:var(--accent);flex-shrink:0}.mobile-empty{text-align:center;padding:48px 20px;color:var(--text-muted)}.mobile-empty svg{margin-bottom:12px;opacity:.4}.mobile-empty p{margin:0 0 6px}.muted{color:var(--text-muted);font-size:13px}.mobile-btn{min-height:var(--mobile-tap-target);min-width:var(--mobile-tap-target);padding:12px 20px;border-radius:10px;font-size:15px;font-weight:500;border:none;background:var(--accent);color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:opacity .12s ease;text-decoration:none}.mobile-btn:active{opacity:.7}.mobile-btn-secondary{background:var(--surface);border:1px solid var(--border);color:var(--text)}.mobile-more-footer{padding:16px 0;border-top:1px solid var(--border);margin-top:8px}.mobile-more-link{display:flex;align-items:center;justify-content:center;gap:4px;color:var(--accent);font-size:14px;text-decoration:none;min-height:var(--mobile-tap-target);padding:12px}[data-theme=dark] .mobile-app{background:#0d1117}[data-theme=light]{--bg: #ffffff;--bg-elev: #f6f8fa;--bg-elev-2: #eaeef2;--bg-elev-3: #d0d7de;--surface: var(--bg-elev);--surface-2: var(--bg-elev-2);--border: #d0d7de;--border-strong: #afb8c1;--text: #1f2328;--text-muted: #656d76;--text-dim: #8c959f;--text-strong: #1f2328;--accent: #7c3aed;--accent-2: #6d28d9;--accent-bg: rgba(124, 58, 237, .08);--accent-border: rgba(124, 58, 237, .3)}.mobile-sheet-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;z-index:100;display:flex;align-items:flex-end;animation:sheet-fade-in .15s ease}@keyframes sheet-fade-in{0%{opacity:0}to{opacity:1}}.mobile-sheet{width:100%;background:var(--surface);border-radius:16px 16px 0 0;max-height:85vh;overflow-y:auto;overflow-x:hidden;animation:sheet-slide-up .2s cubic-bezier(.32,.72,0,1);display:flex;flex-direction:column}@keyframes sheet-slide-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}.mobile-sheet-handle{width:36px;height:4px;background:var(--border-strong);border-radius:2px;margin:10px auto 0;flex-shrink:0}.mobile-sheet-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px 8px;border-bottom:1px solid var(--border);flex-shrink:0}.mobile-sheet-title{font-size:16px;font-weight:600;color:var(--text-strong);margin:0}.mobile-sheet-content{flex:1;overflow-y:auto;padding:12px 16px}.mobile-sheet-actions{padding:12px 16px;border-top:1px solid var(--border);flex-shrink:0;display:flex;gap:8px}.mobile-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--bg);z-index:200;display:flex;flex-direction:column;animation:modal-fade-in .15s ease}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}.mobile-modal{flex:1;display:flex;flex-direction:column;overflow:hidden}.mobile-modal-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--border);flex-shrink:0}.mobile-modal-title{font-size:18px;font-weight:600;color:var(--text-strong);margin:0}.mobile-modal-content{flex:1;overflow-y:auto;padding:16px}.mobile-modal-actions{padding:12px 16px;border-top:1px solid var(--border);flex-shrink:0;display:flex;gap:8px}.mobile-search-container{display:flex;flex-direction:column;gap:12px;height:100%}.mobile-search-input-row{display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:0 14px;height:var(--mobile-tap-target)}.mobile-search-field{flex:1;background:transparent;border:none;outline:none;color:var(--text);font-family:inherit;font-size:var(--mobile-font-base)}.mobile-search-scopes{display:flex;gap:6px;flex-wrap:wrap}.mobile-scope-chip{min-height:var(--mobile-tap-target);padding:10px 14px;border-radius:16px;font-size:13px;font-weight:500;background:var(--surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;transition:all .12s ease}.mobile-scope-chip.active{background:var(--accent-bg);border-color:var(--accent-border);color:var(--accent)}.mobile-search-results{flex:1;overflow-y:auto}.mobile-search-group{margin-bottom:16px}.mobile-search-group-title{font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin:0 0 6px;display:flex;align-items:center;gap:4px}.mobile-search-result-item{padding:10px 12px;background:var(--surface);border:1px solid var(--border);border-radius:8px;margin-bottom:4px;cursor:pointer}.mobile-search-result-title{font-size:14px;font-weight:500;display:block;overflow-wrap:anywhere}.mobile-search-result-meta{font-size:12px;color:var(--text-muted);display:block;overflow-wrap:anywhere}.mobile-search-loading{text-align:center;padding:20px;color:var(--text-muted);font-size:14px}.mobile-notif-btn{position:relative}.mobile-notif-badge{position:absolute;top:4px;right:4px;min-width:16px;height:16px;background:var(--error);color:#fff;font-size:10px;font-weight:700;border-radius:8px;display:flex;align-items:center;justify-content:center;padding:0 4px}.mobile-notif-list{display:flex;flex-direction:column;gap:4px}.mobile-notif-item{width:100%;min-height:var(--mobile-tap-target);display:flex;align-items:flex-start;gap:12px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:10px;cursor:pointer;position:relative}.mobile-notif-item.unread{border-color:var(--accent-border)}.mobile-notif-icon{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0}.mobile-notif-icon.severity-success{background:#3fb95026;color:var(--success)}.mobile-notif-icon.severity-error{background:#f8514926;color:var(--error)}.mobile-notif-icon.severity-warning{background:#d2992226;color:var(--warning)}.mobile-notif-icon.severity-info{background:#58a6ff26;color:var(--info)}.mobile-notif-body{flex:1;min-width:0}.mobile-notif-title{font-size:14px;font-weight:500;display:block;overflow-wrap:anywhere}.mobile-notif-text{font-size:13px;color:var(--text-muted);display:block;margin-top:2px}.mobile-notif-time{font-size:11px;color:var(--text-dim);display:block;margin-top:4px}.mobile-notif-dot{width:8px;height:8px;border-radius:50%;background:var(--accent);flex-shrink:0;margin-top:6px}.mobile-project-btn{display:flex;align-items:center;gap:4px;background:transparent;border:none;color:var(--text-muted);cursor:pointer;min-height:var(--mobile-tap-target);min-width:var(--mobile-tap-target);padding:10px 8px;border-radius:6px;font-size:14px;font-family:inherit}.mobile-project-btn:hover{background:var(--bg-elev-2);color:var(--text)}.mobile-project-name{max-width:120px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;white-space:normal}.mobile-project-list{display:flex;flex-direction:column;gap:6px}.mobile-project-item{display:flex;align-items:center;gap:12px;padding:12px;background:var(--surface);border:1px solid var(--border);border-radius:10px;cursor:pointer}.mobile-project-item.active{border-color:var(--accent-border)}.mobile-project-status{width:8px;height:8px;border-radius:50%;background:var(--text-dim);flex-shrink:0}.mobile-project-status[data-status=active]{background:var(--success)}.mobile-project-status[data-status=error]{background:var(--error)}.mobile-project-info{flex:1;min-width:0}.mobile-project-item-name{font-size:14px;font-weight:500;display:block}.mobile-project-item-path{font-size:11px;color:var(--text-muted);display:block;overflow-wrap:anywhere;font-family:var(--font-mono)}.mobile-back-btn{position:fixed;top:calc(var(--mobile-topbar-height) + 8px);left:12px;z-index:60;background:var(--surface);border:1px solid var(--border);color:var(--text);font-size:13px;font-weight:500;min-height:var(--mobile-tap-target);padding:10px 14px;border-radius:20px;cursor:pointer;display:flex;align-items:center;gap:4px;box-shadow:0 2px 8px #0000004d}.mobile-kanban-tabs{display:flex;gap:4px;margin-bottom:12px;overflow-x:auto;-webkit-overflow-scrolling:touch}.mobile-kanban-tab{min-height:var(--mobile-tap-target);padding:10px 14px;border-radius:20px;font-size:13px;font-weight:500;background:var(--surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;white-space:nowrap;transition:all .12s ease;flex-shrink:0}.mobile-kanban-tab.active{background:var(--accent-bg);border-color:var(--accent-border);color:var(--accent)}.mobile-tasks-filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.mobile-filter-select{min-height:var(--mobile-tap-target);padding:0 10px;background:var(--surface);border:1px solid var(--border);border-radius:18px;color:var(--text);font-family:inherit;font-size:13px;cursor:pointer}.mobile-fab{position:fixed;bottom:calc(var(--mobile-nav-height) + 80px + env(safe-area-inset-bottom,0));right:20px;width:56px;height:56px;border-radius:50%;background:var(--accent);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px #8b5cf666;z-index:30;transition:transform .12s ease,box-shadow .12s ease}.mobile-fab:active{transform:scale(.94);box-shadow:0 2px 8px #8b5cf64d}.mobile-task-detail-actions{display:flex;gap:8px;flex-wrap:wrap}.mobile-task-detail{display:flex;flex-direction:column;gap:12px}.mobile-task-detail-header{display:flex;align-items:center;gap:8px}.mobile-task-status-badge{font-size:11px;font-weight:600;padding:3px 10px;border-radius:12px;text-transform:capitalize}.mobile-task-status-badge.status-queued{background:#58a6ff26;color:var(--info)}.mobile-task-status-badge.status-doing{background:#3fb95026;color:var(--success)}.mobile-task-status-badge.status-blocked{background:#f8514926;color:var(--error)}.mobile-task-status-badge.status-done{background:#3fb95026;color:var(--success)}.mobile-task-priority{font-size:11px;font-weight:600;padding:3px 10px;border-radius:12px;text-transform:capitalize}.mobile-task-priority.priority-high{background:#f8514926;color:var(--error)}.mobile-task-priority.priority-normal{background:#58a6ff26;color:var(--info)}.mobile-task-priority.priority-low{background:var(--bg-elev-3);color:var(--text-dim)}.mobile-task-detail-title{font-size:18px;font-weight:600;color:var(--text-strong);margin:0}.mobile-task-detail-desc{font-size:14px;color:var(--text-muted);line-height:1.5;margin:0;overflow-wrap:anywhere}.mobile-task-detail-meta{display:flex;flex-direction:column;gap:0}.mobile-task-detail-row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--border);font-size:13px}.mobile-task-detail-row:last-child{border-bottom:none}.mobile-task-detail-row span:first-child{color:var(--text-muted)}.mobile-task-detail-row span:last-child{color:var(--text);font-weight:500}.mobile-task-form{display:flex;flex-direction:column;gap:12px}.mobile-field-label{font-size:12px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px;display:block}.mobile-input{width:100%;min-height:var(--mobile-tap-target);padding:10px 14px;background:var(--surface);border:1px solid var(--border);border-radius:10px;color:var(--text);font-family:inherit;font-size:var(--mobile-font-base);outline:none;transition:border-color .12s ease}.mobile-input:focus{border-color:var(--accent)}.mobile-input-sm{min-height:var(--mobile-tap-target);padding:8px 12px}.mobile-agent-detail{display:flex;flex-direction:column;gap:12px}.mobile-agent-detail-status{display:flex;align-items:center;gap:8px}.mobile-agent-detail-status-text{font-size:14px;font-weight:500;text-transform:capitalize}.mobile-agent-detail-desc{font-size:14px;color:var(--text-muted);line-height:1.5;margin:0;overflow-wrap:anywhere}.mobile-view-canvas{padding-bottom:80px}.mobile-canvas-bar{display:flex;align-items:center;justify-content:space-between;padding:0 0 12px;border-bottom:1px solid var(--border);margin-bottom:12px}.mobile-canvas-meta{display:flex;flex-direction:column;gap:2px}.mobile-canvas-title{font-size:16px;font-weight:600;color:var(--text-strong)}.mobile-canvas-status{font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;text-transform:capitalize}.mobile-canvas-status[data-status=approved],.mobile-canvas-status[data-status=done]{background:#3fb95026;color:var(--success)}.mobile-canvas-status[data-status=in-progress],.mobile-canvas-status[data-status=doing]{background:#58a6ff26;color:var(--info)}.mobile-canvas-status[data-status=draft]{background:var(--bg-elev-3);color:var(--text-dim)}.mobile-canvas-actions{display:flex;align-items:center;gap:4px}.mobile-canvas-comment-count{position:absolute;top:2px;right:2px;background:var(--accent);color:#fff;font-size:9px;font-weight:700;border-radius:6px;padding:1px 4px;min-width:14px;text-align:center}.mobile-canvas-elements{display:flex;flex-direction:column;gap:10px}.mobile-canvas-element{background:var(--surface);border:2px solid var(--border);border-radius:12px;overflow:hidden;cursor:pointer}.mobile-canvas-element.selected{box-shadow:0 0 0 2px var(--accent)}.mobile-canvas-el-header{display:flex;align-items:center;gap:6px;padding:8px 12px}.mobile-canvas-el-type{font-size:11px;font-weight:600;text-transform:uppercase}.mobile-canvas-el-status{font-size:10px;padding:1px 6px;border-radius:8px;background:var(--bg-elev-3);color:var(--text-muted);margin-left:auto}.mobile-canvas-el-title{font-size:14px;font-weight:600;padding:8px 12px;color:var(--text-strong)}.mobile-canvas-el-content{font-size:13px;color:var(--text-muted);padding:0 12px 8px;line-height:1.4}.mobile-canvas-el-comments{display:flex;align-items:center;gap:4px;padding:6px 12px;border-top:1px solid var(--border);font-size:11px;color:var(--text-dim)}.mobile-canvas-comments{margin-top:16px;background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:hidden}.mobile-canvas-comments-header{display:flex;align-items:center;justify-content:space-between;padding:12px;border-bottom:1px solid var(--border)}.mobile-canvas-comments-header h4{margin:0;font-size:14px;font-weight:600}.mobile-canvas-comment-list{max-height:300px;overflow-y:auto;padding:12px}.mobile-canvas-comment{margin-bottom:12px}.mobile-canvas-comment-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.mobile-canvas-comment-head .mono{font-size:11px;font-weight:600}.mobile-canvas-comment-head .muted{font-size:11px;color:var(--text-dim);margin-left:auto}.mobile-canvas-comment-text{font-size:13px;color:var(--text-muted);line-height:1.4}.mobile-canvas-comment-input{display:flex;gap:8px;padding:12px;border-top:1px solid var(--border)}.mobile-canvas-comment-input .mobile-input{flex:1}.mobile-activity-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.mobile-event-item{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;background:var(--surface);border:1px solid var(--border);border-radius:10px;margin-bottom:4px;cursor:pointer}.mobile-event-kind{font-size:10px;font-weight:700;padding:2px 8px;border-radius:8px;background:var(--bg-elev-3);color:var(--text-muted);text-transform:uppercase;flex-shrink:0}.mobile-event-msg{flex:1;font-size:13px;color:var(--text);overflow-wrap:anywhere}.mobile-event-time{font-size:11px;color:var(--text-dim);flex-shrink:0}.mobile-submit-hero{background:linear-gradient(135deg,var(--accent-bg) 0%,var(--bg-elev) 100%);border:1px solid var(--accent-border);border-radius:16px;padding:16px;margin-bottom:16px}.mobile-submit-input{width:100%;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px;color:var(--text);font-family:inherit;font-size:var(--mobile-font-base);resize:none;outline:none;margin-bottom:12px}.mobile-submit-input:focus{border-color:var(--accent)}.mobile-submit-actions{display:flex;flex-direction:column;gap:10px}.mobile-submit-chips{display:flex;gap:6px;flex-wrap:wrap}.mobile-submit-chip{min-height:var(--mobile-tap-target);padding:10px 12px;border-radius:16px;font-size:12px;font-weight:500;background:var(--surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;transition:all .12s ease}.mobile-submit-chip:hover{border-color:var(--accent-border);color:var(--accent)}.mobile-more-nav-item{display:flex;align-items:center;gap:14px;padding:14px 12px;background:var(--surface);border:1px solid var(--border);border-radius:12px;margin-bottom:6px;cursor:pointer;transition:all .12s ease}.mobile-more-nav-item:hover{border-color:var(--accent-border);background:var(--bg-elev-2)}.mobile-more-nav-icon{width:40px;height:40px;border-radius:10px;background:var(--bg-elev-2);color:var(--accent);display:flex;align-items:center;justify-content:center;flex-shrink:0}.mobile-more-nav-content{flex:1;min-width:0}.mobile-more-nav-label{font-size:15px;font-weight:600;color:var(--text-strong);display:flex;align-items:center;gap:8px}.mobile-more-nav-count{font-size:11px;font-weight:600;padding:1px 7px;border-radius:10px;background:var(--bg-elev-3);color:var(--text-muted)}.mobile-more-nav-desc{font-size:12px;color:var(--text-muted);display:block;margin-top:2px}.mobile-more-nav-arrow{color:var(--text-dim);flex-shrink:0}.mobile-config-list{display:flex;flex-direction:column;gap:0}.mobile-config-row{display:flex;align-items:flex-start;flex-wrap:wrap;gap:10px;padding:10px 0;border-bottom:1px solid var(--border)}.mobile-config-row:last-child{border-bottom:none}.mobile-config-key{flex:0 0 104px;display:flex;flex-direction:column;gap:2px}.mobile-config-key .mono{font-size:12px;font-weight:500;color:var(--text);word-break:break-all}.mobile-config-type{font-size:10px;color:var(--text-dim);text-transform:uppercase}.mobile-config-value{flex:1;min-width:0}.mobile-config-value .mobile-input{min-height:var(--mobile-tap-target);padding:6px 10px;font-size:13px}.mobile-toggle{position:relative;display:inline-flex;align-items:center;cursor:pointer;width:44px;height:24px}.mobile-toggle input{opacity:0;width:0;height:0;position:absolute}.mobile-toggle-slider{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--bg-elev-3);border-radius:12px;transition:background .2s ease}.mobile-toggle-slider:before{content:"";position:absolute;left:2px;top:2px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform .2s ease}.mobile-toggle input:checked+.mobile-toggle-slider{background:var(--accent)}.mobile-toggle input:checked+.mobile-toggle-slider:before{transform:translate(20px)}.mobile-theme-btns{display:flex;gap:6px}.mobile-theme-btn{display:flex;align-items:center;gap:4px;min-height:var(--mobile-tap-target);padding:10px 12px;border-radius:16px;font-size:12px;font-weight:500;background:var(--surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;transition:all .12s ease}.mobile-theme-btn.active{background:var(--accent-bg);border-color:var(--accent-border);color:var(--accent)}.mobile-accent-swatches{display:flex;gap:8px;flex-wrap:wrap}.mobile-accent-swatch{width:var(--mobile-tap-target);height:var(--mobile-tap-target);border-radius:50%;border:2px solid transparent;cursor:pointer;transition:transform .12s ease}.mobile-accent-swatch:hover{transform:scale(1.1)}.mobile-accent-swatch.active{border-color:#fff;box-shadow:0 0 0 2px var(--accent)}.mobile-settings-save-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:10px 16px;background:var(--warning);color:#000;font-size:13px;font-weight:500;margin:calc(-1 * var(--mobile-padding));margin-bottom:12px}.mobile-list-item-interactive{cursor:pointer;transition:all .12s ease}.mobile-list-item-interactive:hover{border-color:var(--accent-border);background:var(--bg-elev-2)}.mobile-list-item-interactive:active{opacity:.8}.mobile-list-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.mobile-list-status-dot[data-status=working],.mobile-list-status-dot[data-status=doing]{background:var(--success)}.mobile-list-status-dot[data-status=error],.mobile-list-status-dot[data-status=stuck]{background:var(--error)}.mobile-list-status-dot[data-status=idle]{background:var(--text-dim)}.mobile-list-badge.badge-accent{background:var(--accent-bg);color:var(--accent)}.mobile-list-badge.badge-warning{background:#d2992226;color:var(--warning)}.mobile-btn-danger{background:var(--error);color:#fff}.mobile-btn-danger:active{opacity:.8}.mobile-artifact-iframe{width:100%;min-height:min(70dvh,560px);border:1px solid var(--border);border-radius:12px;background:#fff}@media (max-width: 420px){.mobile-config-key,.mobile-config-value{flex-basis:100%}.mobile-task-detail-row{flex-direction:column}.mobile-task-detail-row span:first-child,.mobile-task-detail-row span:last-child{flex:none;text-align:left}}.mobile-overview{display:flex;flex-direction:column;gap:16px}.mobile-hero{padding:20px 16px;background:linear-gradient(135deg,#8b5cf626,#3b82f61a);border:1px solid var(--border);border-radius:14px}.mobile-hero h1{margin:0 0 8px;font-size:24px;font-weight:700;line-height:1.2}.mobile-hero p{margin:0 0 12px;font-size:13px;color:var(--text-dim);line-height:1.4}.mobile-hero-input{width:100%;background:var(--surface-2);border:1px solid var(--border);border-radius:8px;padding:10px 12px;color:var(--text);font-size:14px;font-family:inherit;resize:vertical;margin-bottom:8px;box-sizing:border-box}.mobile-hero-submit{width:100%;padding:10px;background:var(--accent, #8b5cf6);color:#fff;border:none;border-radius:8px;font-weight:600;font-size:14px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px}.mobile-hero-submit:disabled{opacity:.5;cursor:not-allowed}.mobile-stats-stack{display:flex;flex-direction:column;gap:8px}.mobile-stat-card{display:flex;align-items:center;gap:14px;padding:14px 16px;background:var(--surface-1);border:1px solid var(--border);border-radius:10px}.mobile-stat-card.is-blue{border-left:4px solid #58a6ff}.mobile-stat-card.is-purple{border-left:4px solid #8b5cf6}.mobile-stat-card.is-green{border-left:4px solid #3fb950}.mobile-stat-card.is-yellow{border-left:4px solid #d29922}.mobile-stat-icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:10px;background:var(--surface-2);color:var(--text);flex-shrink:0}.mobile-stat-body{flex:1;min-width:0}.mobile-stat-label{font-size:12px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em}.mobile-stat-value{font-size:24px;font-weight:700;margin-top:2px}.mobile-stat-subtext{font-size:11px;color:var(--text-dim);margin-top:2px}.mobile-activity-card,.mobile-quick-actions{padding:16px;background:var(--surface-1);border:1px solid var(--border);border-radius:10px}.mobile-activity-card h3{margin:0 0 12px;font-size:14px;font-weight:600}.mobile-activity-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.mobile-activity-item{display:flex;gap:8px;padding:8px;border-radius:6px;background:var(--surface-2);font-size:12px}.mobile-activity-time{color:var(--text-dim);font-variant-numeric:tabular-nums;flex-shrink:0}.mobile-activity-text{word-break:break-word}.mobile-quick-actions{display:flex;flex-direction:column;gap:8px}.mobile-quick-action{display:flex;align-items:center;gap:8px;padding:12px;background:var(--surface-2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:14px;font-weight:500;text-align:left;cursor:pointer}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.mobile-layout{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh;background:var(--bg)}.mobile-header{position:sticky;top:0;z-index:100;display:flex;align-items:center;gap:12px;height:56px;padding:0 16px;background:var(--surface-1, var(--surface, var(--bg-elev)));border-bottom:1px solid transparent;transition:border-color .2s ease}.mobile-header.is-scrolled{border-bottom-color:var(--border)}.mobile-header-title{flex:1;font-size:18px;font-weight:600;margin:0;color:var(--text-strong, var(--text))}.mobile-menu-btn,.mobile-search-btn,.mobile-settings-exit{background:transparent;border:none;color:var(--text);padding:8px;border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .12s ease}.mobile-menu-btn:hover,.mobile-search-btn:hover,.mobile-settings-exit:hover{background:var(--bg-elev-2, var(--bg-elev))}.mobile-menu-btn:active,.mobile-search-btn:active,.mobile-settings-exit:active{background:var(--bg-elev-3)}.mobile-content{flex:1;overflow-y:auto;overflow-x:hidden;padding:16px 16px 80px;-webkit-overflow-scrolling:touch}.mobile-bottom-nav{position:fixed;bottom:0;left:0;right:0;display:flex;height:64px;background:var(--surface-1, var(--surface, var(--bg-elev)));border-top:1px solid var(--border);z-index:50;padding-bottom:env(safe-area-inset-bottom,0)}.mobile-nav-item{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;background:transparent;border:none;color:var(--text-dim, var(--text-muted));font-size:10px;font-family:inherit;cursor:pointer;padding:4px 0;transition:color .12s ease}.mobile-nav-item.is-active{color:var(--accent)}.mobile-nav-label{font-size:10px;font-weight:500;line-height:1}.mobile-drawer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:60;animation:fadeIn .2s ease}.mobile-drawer{position:fixed;top:0;left:0;bottom:0;width:80%;max-width:320px;background:var(--surface-1, var(--surface, var(--bg-elev)));z-index:70;transform:translate(-100%);transition:transform .25s cubic-bezier(.4,0,.2,1);overflow-y:auto;-webkit-overflow-scrolling:touch;display:flex;flex-direction:column}.mobile-drawer.is-open{transform:translate(0)}.mobile-drawer-head{position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;padding:16px;background:var(--surface-1, var(--surface, var(--bg-elev)));border-bottom:1px solid var(--border);flex-shrink:0}.mobile-drawer-head h2{font-size:18px;font-weight:600;margin:0;color:var(--text-strong, var(--text))}.mobile-drawer-close{background:transparent;border:none;color:var(--text);padding:8px;border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center}.mobile-drawer-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;padding:16px;flex:1}.mobile-drawer-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px 8px;background:var(--surface-2, var(--bg-elev-2));border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:12px;font-family:inherit;cursor:pointer;min-height:80px;transition:border-color .12s ease,background .12s ease}.mobile-drawer-item.is-active{border-color:var(--accent);background:#8b5cf61a}.mobile-drawer-item:active{opacity:.8}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@media (min-width: 1024px){.mobile-layout,.mobile-bottom-nav,.mobile-drawer,.mobile-header{display:none}}
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MobileSettings-CVW9VhEo.js","assets/react-vendor-Dn4wqh4Z.js","assets/EnvVarsSection-DqvB8ZcJ.js","assets/Toast-CcZVVN4i.js","assets/icons-OMEGx5KA.js","assets/MobileChat-DRXP2ERQ.js","assets/useSlashCommands-iyoW95UB.js","assets/markdown-C6mXtQxD.js","assets/vendor-CeHGtduv.js"])))=>i.map(i=>d[i]);
2
+ var Xe=Object.defineProperty;var Ze=(s,t,n)=>t in s?Xe(s,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):s[t]=n;var B=(s,t,n)=>Ze(s,typeof t!="symbol"?t+"":t,n);import{j as e,r as l,R as Be}from"./react-vendor-Dn4wqh4Z.js";import{X as Q,z as ye,ba as et,d as tt,bb as st,r as me,U as at,ab as te,ar as nt,R as _,B as ae,g as ue,t as F,a2 as it,Z as ne,a9 as lt,q as G,aD as ot,m as he,_ as Fe,N as V,l as be,aN as qe,e as Ne,a5 as _e,M as K,ad as ke,bc as ct,S as se,b as rt,i as we,y as dt,bd as mt}from"./icons-OMEGx5KA.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const m of i)if(m.type==="childList")for(const u of m.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&r(u)}).observe(document,{childList:!0,subtree:!0});function n(i){const m={};return i.integrity&&(m.integrity=i.integrity),i.referrerPolicy&&(m.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?m.credentials="include":i.crossOrigin==="anonymous"?m.credentials="omit":m.credentials="same-origin",m}function r(i){if(i.ep)return;i.ep=!0;const m=n(i);fetch(i.href,m)}})();function X(...s){return s.filter(Boolean).join(" ")}function J(s){if(!s&&s!==0)return"";const t=typeof s=="number"?s:new Date(s).getTime();if(Number.isNaN(t))return"";const n=Date.now()-t;return n<0||n<6e4?"just now":n<36e5?`${Math.floor(n/6e4)}m ago`:n<864e5?`${Math.floor(n/36e5)}h ago`:n<7*864e5?`${Math.floor(n/864e5)}d ago`:new Date(t).toLocaleDateString()}function us(s){if(!s)return"";const t=typeof s=="number"?new Date(s):new Date(s);return Number.isNaN(t.getTime())?"":t.toLocaleString()}function hs(s,t=160){return s?s.length>t?s.slice(0,t)+"…":s:""}const ut={low:"var(--text-dim)",normal:"var(--info)",high:"var(--error)"},ee="bizar-auth-token",Se="bizar-loopback-trusted";class Ce extends Error{constructor(n,r,i){super(n);B(this,"status");B(this,"data");this.name="ApiError",this.status=r,this.data=i}}class ht{constructor(){B(this,"base","/api")}getToken(){try{return localStorage.getItem(ee)||""}catch{return""}}setToken(t){try{t?localStorage.setItem(ee,t):localStorage.removeItem(ee)}catch{}}pickupTokenFromUrl(){try{const t=new URLSearchParams(window.location.search),n=t.get("token");if(!n)return!1;this.setToken(n),t.delete("token");const r=t.toString(),i=r?`${window.location.pathname}?${r}`:window.location.pathname;return history.replaceState(null,"",i),!0}catch{return!1}}urlWithToken(t){const n=this.base+t,r=this.getToken();if(!r)return n;const i=n.includes("?")?"&":"?";return`${n}${i}token=${encodeURIComponent(r)}`}async probeAuthStatus(){try{const t=await this.get("/auth/status");try{localStorage.setItem(Se,t.loopback?"1":"0")}catch{}return t}catch{return{required:!1,loopback:!0,peer:""}}}isLoopbackTrusted(){try{return localStorage.getItem(Se)!=="0"}catch{return!0}}async get(t,n){return this.req("GET",t,void 0,n)}async post(t,n,r){return this.req("POST",t,n,r)}async put(t,n,r){return this.req("PUT",t,n,r)}async patch(t,n,r){return this.req("PATCH",t,n,r)}async del(t,n){return this.req("DELETE",t,void 0,n)}async req(t,n,r,i){const m={"Content-Type":"application/json"},u=this.getToken();u&&(m.Authorization=`Bearer ${u}`);const c={method:t,headers:m};r!=null&&(c.body=typeof r=="string"?r:JSON.stringify(r)),i&&(c.signal=i);const p=await fetch(this.base+n,c);if((p.headers.get("content-type")||"").includes("application/json")){const b=await p.json();if(!p.ok){const g=(b&&typeof b=="object"&&"message"in b?b.message:void 0)||`${t} ${n}: ${p.status}`;throw new Ce(g,p.status,b)}return b}const a=await p.text();if(!p.ok)throw new Ce(`${t} ${n}: ${p.status} — ${a.slice(0,200)}`,p.status,a);try{return JSON.parse(a)}catch{return a}}}const C=new ht;C.pickupTokenFromUrl();async function bs(s){return s}function bt(){if(typeof location>"u")return"ws://localhost/ws";const s=`${location.protocol==="https:"?"wss":"ws"}://${location.host}/ws`;let t="";try{t=localStorage.getItem(ee)||""}catch{}return t?`${s}?token=${encodeURIComponent(t)}`:s}class We{constructor(t){B(this,"urlOverride");B(this,"handlers",new Set);B(this,"statusHandlers",new Set);B(this,"ws",null);B(this,"reconnectDelay",1e3);B(this,"maxReconnectDelay",15e3);B(this,"reconnectTimer",null);B(this,"_status","connecting");B(this,"pingTimer",null);B(this,"closed",!1);this.urlOverride=t,this.connect()}on(t){return this.handlers.add(t),()=>{this.handlers.delete(t)}}onStatus(t){return this.statusHandlers.add(t),t(this._status),()=>{this.statusHandlers.delete(t)}}get status(){return this._status}send(t){return this.ws&&this.ws.readyState===WebSocket.OPEN?(this.ws.send(JSON.stringify(t)),!0):!1}close(){var t;this.closed=!0,this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=null,this.pingTimer&&clearInterval(this.pingTimer),this.pingTimer=null;try{(t=this.ws)==null||t.close()}catch{}this.ws=null,this.setStatus("disconnected")}connect(){if(this.closed)return;this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.setStatus("connecting");const t=this.urlOverride??bt();let n;try{n=new WebSocket(t),this.ws=n}catch(r){console.warn("[ws] construct failed:",r),this.scheduleReconnect();return}n.addEventListener("open",()=>{this.ws!==n||this.closed||(this.reconnectDelay=1e3,this.setStatus("connected"),this.pingTimer&&clearInterval(this.pingTimer),this.pingTimer=setInterval(()=>{this._status==="connected"&&this.send({type:"ping"})},3e4))}),n.addEventListener("close",()=>{this.ws===n&&(this.ws=null,this.setStatus("disconnected"),this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=null),this.closed||this.scheduleReconnect())}),n.addEventListener("error",()=>{this.ws===n&&console.warn("[ws] error")}),n.addEventListener("message",r=>{let i;try{i=JSON.parse(r.data)}catch{console.warn("[ws] bad message");return}for(const m of this.handlers)try{m(i)}catch(u){console.error("[ws] handler error:",u)}})}scheduleReconnect(){this.closed||this.reconnectTimer||(this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},this.reconnectDelay),this.reconnectDelay=Math.min(this.reconnectDelay*1.6,this.maxReconnectDelay))}setStatus(t){this._status=t;for(const n of this.statusHandlers)try{n(t)}catch(r){console.error("[ws] status handler error:",r)}}}const ps=Object.freeze(Object.defineProperty({__proto__:null,Ws:We},Symbol.toStringTag,{value:"Module"}));function Te(s){const t=typeof s=="string"?s:s.mode,n=t==="system"?typeof window<"u"&&window.matchMedia("(prefers-color-scheme: light)").matches?"light":"dark":t==="light"?"light":"dark";return typeof document<"u"&&(n==="light"?document.documentElement.setAttribute("data-theme","light"):document.documentElement.removeAttribute("data-theme")),n}function Ae(s){if(typeof document>"u")return;const t=document.documentElement;t.style.setProperty("--accent",s.accent),t.style.setProperty("--success",s.success),t.style.setProperty("--warning",s.warning),t.style.setProperty("--error",s.error),t.style.setProperty("--info",s.info),t.style.setProperty("--accent-bg",Ee(s.accent,.12)),t.style.setProperty("--accent-border",Ee(s.accent,.4)),s.fontFamily&&t.style.setProperty("--font-sans",`'${s.fontFamily}', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif`),s.fontSize&&t.style.setProperty("--base-font-size",`${s.fontSize}px`),t.dataset.compactMode=s.compactMode?"true":"false",t.dataset.animations=s.animations?"true":"false"}function Ee(s,t){const n=/^#?([0-9a-f]{6})$/i.exec(s||"");if(!n)return`rgba(139, 92, 246, ${t})`;const r=parseInt(n[1],16),i=r>>16&255,m=r>>8&255,u=r&255;return`rgba(${i}, ${m}, ${u}, ${t})`}function ce({size:s="md",className:t,label:n}){return e.jsx("span",{className:X("spinner",`spinner-${s}`,t),role:"status","aria-label":n||"Loading"})}const pt="modulepreload",ft=function(s){return"/"+s},$e={},He=function(t,n,r){let i=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const u=document.querySelector("meta[property=csp-nonce]"),c=(u==null?void 0:u.nonce)||(u==null?void 0:u.getAttribute("nonce"));i=Promise.allSettled(n.map(p=>{if(p=ft(p),p in $e)return;$e[p]=!0;const v=p.endsWith(".css"),a=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${p}"]${a}`))return;const b=document.createElement("link");if(b.rel=v?"stylesheet":pt,v||(b.as="script"),b.crossOrigin="",b.href=p,c&&b.setAttribute("nonce",c),document.head.appendChild(b),v)return new Promise((g,h)=>{b.addEventListener("load",g),b.addEventListener("error",()=>h(new Error(`Unable to preload CSS for ${p}`)))})}))}function m(u){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=u,window.dispatchEvent(c),!c.defaultPrevented)throw u}return i.then(u=>{for(const c of u||[])c.status==="rejected"&&m(c.reason);return t().catch(m)})};function q({open:s,onClose:t,title:n,children:r,actions:i,maxHeight:m="85vh"}){const u=l.useRef(null),c=l.useRef(null),p=l.useId(),v=l.useRef(null),a=l.useRef(null),b=l.useRef(0),g=l.useRef(0),h=()=>{var f;return((f=u.current)==null?void 0:f.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'))??[]};if(l.useEffect(()=>{if(!s)return;v.current=document.activeElement instanceof HTMLElement?document.activeElement:null;const f=j=>{var P;if(j.key==="Escape"&&t(),j.key!=="Tab")return;const E=Array.from(h());if(E.length===0){j.preventDefault(),(P=u.current)==null||P.focus();return}const T=E[0],M=E[E.length-1],D=document.activeElement;if(j.shiftKey){(!D||D===T||D===u.current)&&(j.preventDefault(),M==null||M.focus());return}D===M&&(j.preventDefault(),T==null||T.focus())};return window.addEventListener("keydown",f),requestAnimationFrame(()=>{var j,E;((j=c.current)==null?void 0:j.focus())??((E=u.current)==null||E.focus())}),()=>{var j;window.removeEventListener("keydown",f),(j=v.current)==null||j.focus()}},[s,t]),l.useEffect(()=>(s?(g.current=window.scrollY,document.documentElement.style.overflow="hidden",document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.top=`-${g.current}px`,document.body.style.left="0",document.body.style.right="0",document.body.style.width="100%"):(document.documentElement.style.overflow="",document.body.style.overflow="",document.body.style.position="",document.body.style.top="",document.body.style.left="",document.body.style.right="",document.body.style.width=""),()=>{document.documentElement.style.overflow="",document.body.style.overflow="",document.body.style.position="",document.body.style.top="",document.body.style.left="",document.body.style.right="",document.body.style.width="",window.scrollTo(0,g.current)}),[s]),!s)return null;const d=f=>{var j;f.isPrimary&&(a.current=f.clientY,b.current=0,(j=u.current)==null||j.setPointerCapture(f.pointerId))},o=f=>{if(a.current==null||!u.current)return;const j=Math.max(0,f.clientY-a.current);b.current=j,u.current.style.transform=`translateY(${j}px)`},N=f=>{if(!u.current)return;f&&u.current.hasPointerCapture(f.pointerId)&&u.current.releasePointerCapture(f.pointerId);const j=b.current;u.current.style.transform="",a.current=null,b.current=0,j>72&&t()};return e.jsx("div",{className:"mobile-sheet-overlay",onClick:t,children:e.jsxs("div",{ref:u,className:"mobile-sheet",style:{maxHeight:m},onClick:f=>f.stopPropagation(),role:"dialog","aria-modal":!0,"aria-label":n?void 0:"Sheet","aria-labelledby":n?p:void 0,tabIndex:-1,children:[e.jsx("div",{className:"mobile-sheet-handle",onPointerDown:d,onPointerMove:o,onPointerUp:N,onPointerCancel:N,"aria-hidden":"true"}),e.jsxs("div",{className:"mobile-sheet-header",children:[n?e.jsx("h3",{id:p,className:"mobile-sheet-title",children:n}):e.jsx("div",{}),e.jsx("button",{ref:c,type:"button",className:"mobile-icon-btn",onClick:t,"aria-label":"Close",children:e.jsx(Q,{size:18})})]}),e.jsx("div",{className:"mobile-sheet-content",children:r}),i&&e.jsx("div",{className:"mobile-sheet-actions",children:i})]})})}function xt(s){switch(s){case"success":return"✓";case"error":return"✗";case"warning":return"⚠";default:return"ℹ"}}function jt(s){const t=new Date(s),r=Date.now()-t.getTime();return r<6e4?"just now":r<36e5?`${Math.floor(r/6e4)}m ago`:r<864e5?`${Math.floor(r/36e5)}h ago`:t.toLocaleDateString()}function gt({onSelect:s}){const[t,n]=l.useState(!1),[r,i]=l.useState([]),[m,u]=l.useState(0),c=async()=>{var a;try{const b=await C.get("/notifications");i(b.notifications||[]),u(((a=b.stats)==null?void 0:a.unread)||0)}catch{}};l.useEffect(()=>{c()},[]),l.useEffect(()=>{t&&c()},[t]);const p=async()=>{try{await C.post("/notifications/read-all"),i(a=>a.map(b=>({...b,read:!0}))),u(0)}catch{}},v=async a=>{try{await C.post(`/notifications/${encodeURIComponent(a)}/read`),i(b=>b.map(g=>g.id===a?{...g,read:!0}:g)),u(b=>Math.max(0,b-1))}catch{}};return e.jsxs(e.Fragment,{children:[e.jsxs("button",{type:"button",className:"mobile-icon-btn mobile-notif-btn",onClick:()=>n(!0),"aria-label":`Notifications${m>0?` (${m} unread)`:""}`,children:[e.jsx(ye,{size:20}),m>0&&e.jsx("span",{className:"mobile-notif-badge",children:m>9?"9+":m})]}),e.jsx(q,{open:t,onClose:()=>n(!1),title:"Notifications",actions:m>0?e.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",style:{width:"100%"},onClick:p,children:[e.jsx(et,{size:14})," Mark all read"]}):void 0,children:e.jsxs("div",{className:"mobile-notif-list",children:[r.length===0&&e.jsxs("div",{className:"mobile-empty",children:[e.jsx(ye,{size:32}),e.jsx("p",{children:"No notifications"})]}),r.map(a=>e.jsxs("button",{type:"button",className:`mobile-notif-item ${a.read?"read":"unread"}`,onClick:()=>{a.read||v(a.id),s(a),n(!1)},children:[e.jsx("span",{className:`mobile-notif-icon severity-${a.severity}`,children:xt(a.severity)}),e.jsxs("div",{className:"mobile-notif-body",children:[e.jsx("span",{className:"mobile-notif-title",children:a.title||a.message}),a.message&&a.title&&e.jsx("span",{className:"mobile-notif-text",children:a.message}),e.jsx("span",{className:"mobile-notif-time",children:jt(a.ts)})]}),!a.read&&e.jsx("span",{className:"mobile-notif-dot"})]},a.id))]})})]})}const vt={activity:"Activity",chat:"Chat",tasks:"Tasks",settings:"Settings",more:"More",plans:"Plans",agents:"Agents",skills:"Skills",mods:"Mods",schedules:"Schedules",history:"History",config:"Config","plan-detail":"Plan","agent-detail":"Agent","task-detail":"Task"};function yt({activeTab:s,snapshot:t,onSearch:n,onNavigate:r}){const[i,m]=l.useState(!1),u=async c=>{try{await C.post(`/projects/${encodeURIComponent(c)}/activate`),m(!1),window.location.reload()}catch{}};return e.jsxs("header",{className:"mobile-topbar",children:[e.jsxs("div",{className:"mobile-topbar-left",children:[e.jsx("span",{className:"mobile-logo",children:"ᛒ"}),(t==null?void 0:t.activeProject)&&e.jsxs("button",{type:"button",className:"mobile-project-btn",onClick:()=>m(!0),"aria-label":"Select project",children:[e.jsx("span",{className:"mobile-project-name",children:t.activeProject.name}),e.jsx(tt,{size:14})]}),e.jsx("span",{className:"mobile-title",children:vt[s]||"Bizar"})]}),e.jsxs("div",{className:"mobile-topbar-right",children:[e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:n,"aria-label":"Search",children:e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("circle",{cx:"11",cy:"11",r:"8"}),e.jsx("path",{d:"m21 21-4.35-4.35"})]})}),e.jsx(gt,{onSelect:c=>{r("notification",c.link||"",c.meta??null)}}),(t==null?void 0:t.activeProject)&&e.jsx(q,{open:i,onClose:()=>m(!1),title:"Projects",children:e.jsx("div",{className:"mobile-project-list",children:(t.projects||[]).map(c=>{var p,v;return e.jsxs("button",{type:"button",className:`mobile-project-item ${c.id===((p=t.activeProject)==null?void 0:p.id)?"active":""}`,onClick:()=>u(c.id),children:[e.jsx("div",{className:"mobile-project-status","data-status":c.status}),e.jsxs("div",{className:"mobile-project-info",children:[e.jsx("span",{className:"mobile-project-item-name",children:c.name}),e.jsx("span",{className:"mobile-project-item-path",children:c.path})]}),c.id===((v=t.activeProject)==null?void 0:v.id)&&e.jsx("span",{className:"mobile-active-badge",children:"active"})]},c.id)})})})]})]})}function Nt({onMenuClick:s,scrolled:t,activeTab:n,onSettings:r,onSearch:i}){return e.jsxs("header",{className:X("mobile-header",t&&"is-scrolled"),children:[e.jsx("button",{onClick:s,className:"mobile-menu-btn","aria-label":"Open menu",type:"button",children:e.jsx(st,{size:20})}),e.jsx("h1",{className:"mobile-header-title",children:n==="settings"?"Settings":"Bizar"}),r?e.jsx("button",{onClick:r,className:"mobile-settings-exit","aria-label":"Exit settings",type:"button",children:e.jsx(Q,{size:20})}):e.jsx("button",{onClick:i,className:"mobile-search-btn","aria-label":"Search",type:"button",children:e.jsx(me,{size:20})})]})}function kt({open:s,onClose:t,tabs:n,activeTab:r,onTabChange:i}){return e.jsxs(e.Fragment,{children:[s&&e.jsx("div",{className:"mobile-drawer-overlay",onClick:t,"aria-hidden":"true"}),e.jsxs("aside",{className:X("mobile-drawer",s&&"is-open"),role:"dialog","aria-modal":"true","aria-label":"All views",children:[e.jsxs("div",{className:"mobile-drawer-head",children:[e.jsx("h2",{children:"All Views"}),e.jsx("button",{onClick:t,"aria-label":"Close menu",type:"button",className:"mobile-drawer-close",children:e.jsx(Q,{size:20})})]}),e.jsx("div",{className:"mobile-drawer-grid",children:n.map(m=>{const u=m.icon;return e.jsxs("button",{role:"tab","aria-selected":r===m.id,className:X("mobile-drawer-item",r===m.id&&"is-active"),onClick:()=>i(m.id),type:"button",children:[e.jsx(u,{size:22}),e.jsx("span",{children:m.label})]},m.id)})})]})]})}function wt({tabs:s,activeTab:t,onTabChange:n}){return e.jsx("nav",{className:"mobile-bottom-nav",role:"tablist","aria-label":"Primary navigation",children:s.map(r=>{const i=r.icon;return e.jsxs("button",{role:"tab","aria-selected":t===r.id,className:X("mobile-nav-item",t===r.id&&"is-active"),onClick:()=>n(r.id),type:"button",children:[e.jsx(i,{size:20}),e.jsx("span",{className:"mobile-nav-label",children:r.label})]},r.id)})})}function St({children:s,activeTab:t,onTabChange:n,tabs:r,fullTabs:i,onExitSettings:m,onSearch:u}){const[c,p]=l.useState(!1),[v,a]=l.useState(!1);return e.jsxs("div",{className:"mobile-layout",children:[e.jsx(Nt,{onMenuClick:()=>p(!0),scrolled:v,activeTab:t,onSettings:t==="settings"?m:null,onSearch:u}),e.jsx(kt,{open:c,onClose:()=>p(!1),tabs:i,activeTab:t,onTabChange:b=>{n(b),p(!1)}}),e.jsx("main",{className:"mobile-content",onScroll:b=>a(b.currentTarget.scrollTop>10),children:s}),e.jsx(wt,{tabs:r,activeTab:t,onTabChange:n})]})}const Ct=["all","tasks","agents","bg","artifacts","mods"],re={all:"All",tasks:"Tasks",agents:"Agents",bg:"Background",artifacts:"Plans",mods:"Mods"};function Tt({snapshot:s,onRefresh:t}){var I;const[n,r]=l.useState(((I=s.overview)==null?void 0:I.recentActivity)||[]),[i,m]=l.useState(!0),[u,c]=l.useState("all"),[p,v]=l.useState(!1),[a,b]=l.useState(null),[g,h]=l.useState(""),[d,o]=l.useState(!1);l.useEffect(()=>{var x;(x=s.overview)!=null&&x.recentActivity?(r(s.overview.recentActivity),m(!1)):N()},[s.overview]);const N=async()=>{var x;try{const L=await C.get("/snapshot");r(((x=L.overview)==null?void 0:x.recentActivity)||[])}catch{}finally{m(!1)}},f=u==="all"?n:n.filter(x=>{var L,w,y,S,A,$;return u==="tasks"?(L=x.kind)==null?void 0:L.startsWith("task"):u==="agents"?(w=x.kind)==null?void 0:w.startsWith("agent"):u==="bg"?((y=x.kind)==null?void 0:y.includes("bg"))||((S=x.kind)==null?void 0:S.includes("schedule")):u==="artifacts"?(A=x.kind)==null?void 0:A.includes("artifacts"):u==="mods"?($=x.kind)==null?void 0:$.includes("mod"):!0}),j=s.agents||[],E=s.tasks||[],T=E.filter(x=>x.status==="doing"||x.status==="queued"),M=E.filter(x=>x.status==="done"),D=async()=>{if(!(!g.trim()||d)){o(!0);try{await C.post("/chat",{message:g.trim(),agent:"odin"}),h(""),await t().catch(()=>{}),await N()}catch{}finally{o(!1)}}},P=async()=>{await t().catch(()=>{}),await N()};return e.jsxs("div",{className:"mobile-view",children:[e.jsxs("div",{className:"mobile-submit-hero",children:[e.jsx("textarea",{className:"mobile-submit-input",placeholder:"What needs to be done? Describe a task, bug, or refactor for Odin to artifacts…",value:g,onChange:x=>h(x.target.value),rows:2}),e.jsxs("div",{className:"mobile-submit-actions",children:[e.jsx("div",{className:"mobile-submit-chips",children:["Implement feature","Fix bug","Refactor","Investigate","Write tests"].map(x=>e.jsx("button",{type:"button",className:"mobile-submit-chip",onClick:()=>h(L=>L?`${L} ${x}`:x),children:x},x))}),e.jsxs("button",{type:"button",className:"mobile-btn",disabled:!g.trim()||d,onClick:D,children:[e.jsx(at,{size:14})," Submit to Odin"]})]})]}),e.jsxs("div",{className:"mobile-stats",children:[e.jsxs("div",{className:"mobile-stat",children:[e.jsx("div",{className:"mobile-stat-value",children:j.length}),e.jsx("div",{className:"mobile-stat-label",children:"Agents"})]}),e.jsxs("div",{className:"mobile-stat",children:[e.jsx("div",{className:"mobile-stat-value",children:T.length}),e.jsx("div",{className:"mobile-stat-label",children:"Active"})]}),e.jsxs("div",{className:"mobile-stat",children:[e.jsx("div",{className:"mobile-stat-value",children:M.length}),e.jsx("div",{className:"mobile-stat-label",children:"Done"})]}),e.jsxs("div",{className:"mobile-stat",children:[e.jsx("div",{className:"mobile-stat-value",children:s.artifacts.length||0}),e.jsx("div",{className:"mobile-stat-label",children:"Plans"})]})]}),i&&n.length===0&&e.jsx("div",{className:"mobile-loading mobile-loading-inline",children:e.jsx("p",{children:"Loading activity…"})}),e.jsxs("div",{className:"mobile-activity-header",children:[e.jsx("h3",{className:"mobile-section-title",style:{margin:0},children:"Recent Activity"}),e.jsxs("div",{style:{display:"flex",gap:4},children:[e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>v(x=>!x),"aria-label":p?"Resume":"Pause",children:p?e.jsx(te,{size:14}):e.jsx(nt,{size:14})}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:P,"aria-label":"Refresh",children:e.jsx(_,{size:14})})]})]}),e.jsx("div",{className:"mobile-search-scopes",children:Ct.map(x=>e.jsx("button",{type:"button",className:`mobile-scope-chip ${u===x?"active":""}`,onClick:()=>c(x),children:re[x]},x))}),j.length>0&&e.jsxs("section",{className:"mobile-section",children:[e.jsxs("h3",{className:"mobile-section-title",children:[e.jsx(ae,{size:14})," Agents"]}),e.jsx("div",{className:"mobile-card-list",children:j.slice(0,6).map(x=>e.jsxs("div",{className:"mobile-agent-card",children:[e.jsx("div",{className:"mobile-agent-dot","data-status":x.status||"idle"}),e.jsxs("div",{className:"mobile-agent-info",children:[e.jsx("span",{className:"mobile-agent-name",children:x.name}),e.jsx("span",{className:"mobile-agent-meta",children:x.status||"idle"})]})]},x.name))})]}),!p&&f.length>0&&e.jsx("section",{className:"mobile-section",children:e.jsx("div",{className:"mobile-card-list",children:f.slice(0,30).map((x,L)=>e.jsxs("button",{type:"button",className:"mobile-event-item",onClick:()=>b(x),children:[e.jsx("span",{className:"mobile-event-kind","data-kind":x.kind,children:re[x.kind]||x.kind}),e.jsx("span",{className:"mobile-event-msg",children:At(x)}),e.jsx("span",{className:"mobile-event-time",children:J(x.ts)})]},`${x.ts}-${x.kind}-${L}`))})}),!p&&f.length===0&&n.length>0&&e.jsxs("div",{className:"mobile-empty",children:[e.jsx(ue,{size:40}),e.jsx("p",{children:"No matching activity."}),e.jsx("p",{className:"muted",children:"Try a different filter."})]}),a&&e.jsx(q,{open:!0,onClose:()=>b(null),title:re[a.kind]||a.kind,children:e.jsxs("div",{className:"mobile-agent-detail-meta",children:[e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Kind"}),e.jsx("span",{children:a.kind})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Time"}),e.jsx("span",{children:new Date(a.ts).toLocaleString()})]}),Object.entries(a).filter(([x])=>!["ts","kind"].includes(x)).map(([x,L])=>e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:x}),e.jsx("span",{style:{fontSize:12,maxWidth:200,wordBreak:"break-all"},children:typeof L=="object"?JSON.stringify(L):String(L)})]},x))]})}),j.length===0&&T.length===0&&e.jsxs("div",{className:"mobile-empty",children:[e.jsx(ue,{size:40}),e.jsx("p",{children:"No activity yet."}),e.jsx("p",{className:"muted",children:"Start a task or chat to see things here."})]})]})}function At(s){const t=s.kind||"";return t.includes("task")?`Task: ${s.title||s.id||"updated"}`:t.includes("agent")?`Agent: ${s.name||"status changed"}`:t.includes("artifacts")?`Plan: ${s.slug||"changed"}`:t.includes("mod")?`Mod: ${s.name||"changed"}`:t.includes("schedule")?`Schedule: ${s.name||"triggered"}`:JSON.stringify(s).slice(0,80)}function H({open:s,onClose:t,title:n,children:r,actions:i}){const m=l.useRef(null),u=l.useRef(null),c=l.useRef(null),p=l.useId(),v=l.useRef(0);return l.useEffect(()=>{if(!s)return;c.current=document.activeElement instanceof HTMLElement?document.activeElement:null;const a='button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',b=g=>{var f,j;if(g.key==="Escape"&&t(),g.key!=="Tab")return;const h=Array.from(((f=m.current)==null?void 0:f.querySelectorAll(a))??[]);if(h.length===0){g.preventDefault(),(j=m.current)==null||j.focus();return}const d=h[0],o=h[h.length-1],N=document.activeElement;if(g.shiftKey){(!N||N===d||N===m.current)&&(g.preventDefault(),o==null||o.focus());return}N===o&&(g.preventDefault(),d==null||d.focus())};return window.addEventListener("keydown",b),v.current=window.scrollY,document.documentElement.style.overflow="hidden",document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.top=`-${v.current}px`,document.body.style.left="0",document.body.style.right="0",document.body.style.width="100%",requestAnimationFrame(()=>{var g,h;((g=u.current)==null?void 0:g.focus())??((h=m.current)==null||h.focus())}),()=>{var g;window.removeEventListener("keydown",b),document.documentElement.style.overflow="",document.body.style.overflow="",document.body.style.position="",document.body.style.top="",document.body.style.left="",document.body.style.right="",document.body.style.width="",window.scrollTo(0,v.current),(g=c.current)==null||g.focus()}},[s,t]),s?e.jsx("div",{className:"mobile-modal-overlay",onClick:a=>{a.target===a.currentTarget&&t()},children:e.jsxs("div",{ref:m,className:"mobile-modal",onClick:a=>a.stopPropagation(),role:"dialog","aria-modal":!0,"aria-label":n?void 0:"Modal","aria-labelledby":n?p:void 0,tabIndex:-1,children:[e.jsxs("div",{className:"mobile-modal-header",children:[n?e.jsx("h2",{id:p,className:"mobile-modal-title",children:n}):e.jsx("div",{}),e.jsx("button",{ref:u,type:"button",className:"mobile-icon-btn",onClick:t,"aria-label":"Close",children:e.jsx(Q,{size:20})})]}),e.jsx("div",{className:"mobile-modal-content",children:r}),i&&e.jsx("div",{className:"mobile-modal-actions",children:i})]})}):null}const Ve=["reasoning","code","design","planning","gitops","analysis"],Le={reasoning:"var(--accent)",code:"var(--info)",design:"var(--success)",planning:"var(--warning)",gitops:"var(--error)",analysis:"var(--text-dim)"};function ze({snapshot:s,onBack:t,onOpenAgent:n,selectedAgent:r,onRefresh:i}){const[m,u]=l.useState(s.agents||[]),[c,p]=l.useState(!s.agents),[v,a]=l.useState(""),[b,g]=l.useState(""),[h,d]=l.useState(null),[o,N]=l.useState(!1),[f,j]=l.useState(""),[E,T]=l.useState(!1);l.useEffect(()=>{if(r){const w=m.find(y=>y.name===r);w&&d(w)}},[r,m]);const M=async()=>{try{const w=await C.get("/agents");u(w.agents||[])}catch{}finally{p(!1)}},D=m.filter(w=>{if(v&&w.category!==v)return!1;if(b){const y=b.toLowerCase();if(!w.name.toLowerCase().includes(y)&&!(w.description||"").toLowerCase().includes(y))return!1}return!0}),P=async(w,y)=>{try{await C.post(`/agents/${encodeURIComponent(w)}/invoke`,{prompt:y}),T(!1),j("")}catch{}},I=async w=>{try{await C.post(`/agents/${encodeURIComponent(w)}/restart`),await M()}catch{}},x=async w=>{if(confirm(`Delete agent "${w}"?`))try{await C.del(`/agents/${encodeURIComponent(w)}`),u(y=>y.filter(S=>S.name!==w)),d(null),i==null||i()}catch{}},L=async w=>{try{const y=await C.post("/agents",w);u(S=>[...S,y]),N(!1),i==null||i()}catch{}};return e.jsxs("div",{className:"mobile-view",children:[e.jsxs("div",{className:"mobile-tasks-toolbar",children:[e.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search agents…",value:b,onChange:w=>g(w.target.value),style:{flex:1}}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>M(),"aria-label":"Refresh",children:e.jsx(_,{size:16})}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>N(!0),"aria-label":"New agent",children:e.jsx(F,{size:16})})]}),e.jsxs("div",{className:"mobile-search-scopes",children:[e.jsx("button",{type:"button",className:`mobile-scope-chip ${v?"":"active"}`,onClick:()=>a(""),children:"All"}),Ve.map(w=>e.jsx("button",{type:"button",className:`mobile-scope-chip ${v===w?"active":""}`,onClick:()=>a(w),children:w},w))]}),c?e.jsx("div",{className:"mobile-loading",children:e.jsx("p",{children:"Loading…"})}):D.length===0?e.jsxs("div",{className:"mobile-empty",children:[e.jsx(ae,{size:40}),e.jsx("p",{children:"No agents found."})]}):e.jsx("div",{className:"mobile-card-list",children:D.map(w=>e.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>{d(w),n(w.name)},children:[e.jsx("div",{className:"mobile-agent-dot","data-status":w.status||"idle"}),e.jsxs("div",{className:"mobile-list-content",children:[e.jsx("span",{className:"mobile-list-title",children:w.name}),e.jsx("span",{className:"mobile-list-meta",children:w.model||w.mode||"—"})]}),w.category&&e.jsx("span",{className:"mobile-list-badge",style:{color:Le[w.category]||"var(--text-dim)"},children:w.category}),e.jsx("span",{className:"mobile-list-badge","data-status":w.status||"idle",children:w.status||"idle"})]},w.name))}),h&&e.jsx(q,{open:!0,onClose:()=>d(null),title:h.name,actions:e.jsxs("div",{className:"mobile-task-detail-actions",children:[e.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>{j(""),T(!0)},children:[e.jsx(te,{size:14})," Invoke"]}),(h.isStuck||h.status==="error"||h.status==="working")&&e.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",onClick:()=>I(h.name),children:[e.jsx(it,{size:14})," Restart"]}),e.jsx("button",{type:"button",className:"mobile-btn mobile-btn-danger",onClick:()=>x(h.name),children:e.jsx(ne,{size:14})})]}),children:e.jsxs("div",{className:"mobile-agent-detail",children:[e.jsxs("div",{className:"mobile-agent-detail-status",children:[e.jsx("span",{className:"mobile-agent-dot","data-status":h.status||"idle"}),e.jsx("span",{className:"mobile-agent-detail-status-text",children:h.status||"idle"}),h.category&&e.jsx("span",{className:"mobile-list-badge",style:{color:Le[h.category]},children:h.category})]}),e.jsx("p",{className:"mobile-agent-detail-desc",children:h.description||"No description."}),e.jsxs("div",{className:"mobile-agent-detail-meta",children:[e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Model"}),e.jsx("span",{className:"mono",children:h.model||"—"})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Mode"}),e.jsx("span",{children:h.mode||"subagent"})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Path"}),e.jsx("span",{className:"mono",style:{fontSize:11},children:h.path})]}),h.lastError&&e.jsxs("div",{className:"mobile-task-detail-row",style:{color:"var(--error)"},children:[e.jsx("span",{children:"Last error"}),e.jsx("span",{children:h.lastError.message})]}),h.tasksTotal!=null&&h.tasksTotal>0&&e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Success rate"}),e.jsxs("span",{children:[Math.round((h.successRate||0)*100),"%"]})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Last modified"}),e.jsx("span",{children:J(h.mtime)})]})]})]})}),e.jsxs(H,{open:E,onClose:()=>T(!1),title:`Invoke ${h==null?void 0:h.name}`,actions:e.jsxs("button",{type:"button",className:"mobile-btn",style:{width:"100%"},disabled:!f.trim(),onClick:()=>{h&&P(h.name,f.trim())},children:[e.jsx(te,{size:14})," Invoke"]}),children:[e.jsxs("p",{className:"muted",style:{marginBottom:12},children:["Model: ",e.jsx("span",{className:"mono",children:(h==null?void 0:h.model)||"—"})]}),e.jsx("textarea",{className:"mobile-input",rows:5,placeholder:"What should this agent do?",value:f,onChange:w=>j(w.target.value),autoFocus:!0})]}),e.jsx(Et,{open:o,onClose:()=>N(!1),onCreate:L})]})}function Et({open:s,onClose:t,onCreate:n}){const[r,i]=l.useState(""),[m,u]=l.useState(""),[c,p]=l.useState(""),[v,a]=l.useState("subagent"),[b,g]=l.useState("#8b5cf6"),[h,d]=l.useState(""),[o,N]=l.useState(""),[f,j]=l.useState(""),E=T=>{T.preventDefault(),r.trim()&&(n({name:r.trim(),description:m.trim(),model:c,mode:v,color:b,tools:[],tags:o.split(",").map(M=>M.trim()).filter(Boolean),category:h,prompt:f}),i(""),u(""),p(""),a("subagent"),g("#8b5cf6"),d(""),N(""),j(""))};return e.jsx(H,{open:s,onClose:t,title:"New Agent",actions:e.jsxs("button",{type:"submit",form:"new-agent-form",className:"mobile-btn",style:{width:"100%"},children:[e.jsx(F,{size:14})," Create"]}),children:e.jsxs("form",{id:"new-agent-form",onSubmit:E,className:"mobile-task-form",children:[e.jsx("label",{className:"mobile-field-label",children:"Name *"}),e.jsx("input",{className:"mobile-input",type:"text",placeholder:"my-agent",pattern:"[a-z0-9][a-z0-9-]{0,63}",value:r,onChange:T=>i(T.target.value),autoFocus:!0,required:!0}),e.jsx("label",{className:"mobile-field-label",children:"Description"}),e.jsx("input",{className:"mobile-input",type:"text",placeholder:"What does this agent do?",value:m,onChange:T=>u(T.target.value)}),e.jsx("label",{className:"mobile-field-label",children:"Model"}),e.jsx("input",{className:"mobile-input",type:"text",placeholder:"(provider default)",value:c,onChange:T=>p(T.target.value)}),e.jsx("label",{className:"mobile-field-label",children:"Category"}),e.jsxs("select",{className:"mobile-input",value:h,onChange:T=>d(T.target.value),children:[e.jsx("option",{value:"",children:"None"}),Ve.map(T=>e.jsx("option",{value:T,children:T},T))]}),e.jsx("label",{className:"mobile-field-label",children:"Tags (comma-separated)"}),e.jsx("input",{className:"mobile-input",type:"text",placeholder:"tag1, tag2",value:o,onChange:T=>N(T.target.value)})]})})}function $t({onBack:s}){const[t,n]=l.useState([]),[r,i]=l.useState(!0),[m,u]=l.useState({}),[c,p]=l.useState(!1),v=async()=>{try{const o=await C.get("/config"),N=Object.entries(o).map(([f,j])=>({key:f,value:j,type:a(j)}));n(N),u(Object.fromEntries(Object.entries(o).map(([f,j])=>[f,j])))}catch{}finally{i(!1)}};l.useEffect(()=>{v()},[]);const a=o=>typeof o=="boolean"?"boolean":typeof o=="number"?"number":typeof o=="string"?"string":Array.isArray(o)?"array":o&&typeof o=="object"?"object":"unknown",b=(o,N)=>{u(f=>({...f,[o]:N}))},g=async()=>{p(!0);try{await C.patch("/config",m),await v()}catch{}finally{p(!1)}},h=(o,N)=>{u(f=>({...f,[o]:N}))},d=o=>{const N=m[o.key];switch(o.type){case"boolean":return e.jsxs("label",{className:"mobile-toggle",children:[e.jsx("input",{type:"checkbox",checked:!!N,onChange:f=>b(o.key,f.target.checked)}),e.jsx("span",{className:"mobile-toggle-slider"})]});case"number":return e.jsx("input",{className:"mobile-input mobile-input-sm",type:"number",inputMode:"numeric",value:String(N??""),onChange:f=>b(o.key,Number(f.target.value))});case"string":return e.jsx("input",{className:"mobile-input mobile-input-sm",type:"text",value:String(N??""),onChange:f=>b(o.key,f.target.value)});case"object":case"array":return e.jsx("textarea",{className:"mobile-input mobile-input-sm",rows:2,value:JSON.stringify(N??null,null,2),onChange:f=>{try{b(o.key,JSON.parse(f.target.value))}catch{}}});default:return e.jsx("span",{className:"mobile-setting-value mono",children:String(N??"null")})}};return e.jsxs("div",{className:"mobile-view",children:[e.jsxs("div",{className:"mobile-tasks-toolbar",children:[e.jsxs("span",{style:{fontSize:14,color:"var(--text-muted)",flex:1},children:[t.length," config entries"]}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>v(),"aria-label":"Refresh",children:e.jsx(_,{size:16})}),e.jsxs("button",{type:"button",className:"mobile-btn",disabled:c,onClick:()=>g(),children:[e.jsx(lt,{size:14})," ",c?"Saving…":"Save all"]})]}),r?e.jsx("div",{className:"mobile-loading",children:e.jsx("p",{children:"Loading…"})}):t.length===0?e.jsxs("div",{className:"mobile-empty",children:[e.jsx(G,{size:40}),e.jsx("p",{children:"No config entries."})]}):e.jsx("div",{className:"mobile-config-list",children:t.map(o=>e.jsxs("div",{className:"mobile-config-row",children:[e.jsxs("div",{className:"mobile-config-key",children:[e.jsx("span",{className:"mono",children:o.key}),e.jsx("span",{className:"mobile-config-type",children:o.type})]}),e.jsx("div",{className:"mobile-config-value",children:d(o)}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>h(o.key,o.defaultValue),"aria-label":"Reset to default",title:"Reset",children:e.jsx(ot,{size:14})})]},o.key))})]})}function Lt({onBack:s}){const[t,n]=l.useState([]),[r,i]=l.useState(!0),[m,u]=l.useState(null),[c,p]=l.useState(""),v=async()=>{try{const h=await C.get("/history");if(Array.isArray(h.history)){n(h.history);return}if(Array.isArray(h.projects)){const d=new Map;for(const o of h.events||[]){const N=o.projectId;if(!N)continue;const f=d.get(N);(!f||new Date(o.ts).getTime()>new Date(f.ts).getTime())&&d.set(N,o)}n(h.projects.map(o=>{const N=d.get(o.id);return{id:o.id,ts:o.lastAccessed||(N==null?void 0:N.ts)||new Date(0).toISOString(),agent:o.name,taskCount:o.tasks.total,summary:`${o.path} · ${o.tasks.done}/${o.tasks.total} done · ${o.plans} plan${o.plans===1?"":"s"}`,output:N?`${N.kind}${N.text?` — ${N.text}`:""}`:"No recent events."}}));return}n([])}catch{}finally{i(!1)}};l.useEffect(()=>{v()},[]);const a=h=>{if(!h)return"—";const d=Math.floor(h/1e3);if(d<60)return`${d}s`;const o=Math.floor(d/60),N=d%60;return`${o}m ${N}s`},b=h=>new Date(h).toLocaleString(),g=c.trim()?t.filter(h=>{const d=c.toLowerCase();return(h.agent||"session").toLowerCase().includes(d)||(h.summary||"").toLowerCase().includes(d)||(h.output||"").toLowerCase().includes(d)}):t;return e.jsxs("div",{className:"mobile-view",children:[e.jsxs("div",{className:"mobile-tasks-toolbar",children:[e.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search history…",value:c,onChange:h=>p(h.target.value),style:{flex:1}}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>v(),"aria-label":"Refresh",children:e.jsx(_,{size:16})})]}),r?e.jsx("div",{className:"mobile-loading",children:e.jsx("p",{children:"Loading…"})}):g.length===0?e.jsxs("div",{className:"mobile-empty",children:[e.jsx(he,{size:40}),e.jsx("p",{children:t.length===0?"No history yet.":"No matching sessions."})]}):e.jsx("div",{className:"mobile-card-list",children:g.map(h=>e.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>u(h),children:[e.jsx("div",{className:"mobile-list-icon",children:e.jsx(he,{size:16})}),e.jsxs("div",{className:"mobile-list-content",children:[e.jsx("span",{className:"mobile-list-title",children:h.agent||"Session"}),e.jsxs("span",{className:"mobile-list-meta",children:[b(h.ts),h.duration?` · ${a(h.duration)}`:"",h.taskCount?` · ${h.taskCount} tasks`:""]})]})]},h.id))}),m&&e.jsxs(q,{open:!0,onClose:()=>u(null),title:"Session Detail",children:[e.jsxs("div",{className:"mobile-agent-detail-meta",children:[e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Agent"}),e.jsx("span",{children:m.agent||"—"})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Started"}),e.jsx("span",{children:b(m.ts)})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Duration"}),e.jsx("span",{children:a(m.duration)})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Tasks"}),e.jsx("span",{children:m.taskCount||0})]})]}),m.summary&&e.jsxs("div",{style:{marginTop:12},children:[e.jsx("h4",{style:{fontSize:12,color:"var(--text-muted)",marginBottom:4},children:"Summary"}),e.jsx("p",{style:{fontSize:13},children:m.summary})]}),m.output&&e.jsxs("div",{style:{marginTop:12},children:[e.jsx("h4",{style:{fontSize:12,color:"var(--text-muted)",marginBottom:4},children:"Output"}),e.jsxs("pre",{className:"mono",style:{fontSize:11,whiteSpace:"pre-wrap",wordBreak:"break-all",background:"var(--bg-elev-2)",padding:8,borderRadius:6},children:[m.output.slice(0,1e3),m.output.length>1e3?"…":""]})]})]})]})}function zt({snapshot:s,onBack:t}){const[n,r]=l.useState(s.mods||[]),[i,m]=l.useState(!s.mods),[u,c]=l.useState(""),[p,v]=l.useState("all"),[a,b]=l.useState(null),g=async()=>{try{const o=await C.get("/mods");r(o.mods||[])}catch{}finally{m(!1)}};l.useEffect(()=>{s.mods?(r(s.mods),m(!1)):g()},[s.mods]);const h=async(o,N)=>{try{await C.patch(`/mods/${encodeURIComponent(o)}`,{enabled:N}),r(f=>f.map(j=>j.id===o?{...j,enabled:N}:j)),(a==null?void 0:a.id)===o&&b(f=>f&&{...f,enabled:N})}catch{}},d=n.filter(o=>{if(p==="enabled"&&!o.enabled||p==="disabled"&&o.enabled)return!1;if(u){const N=u.toLowerCase();return o.name.toLowerCase().includes(N)||o.description.toLowerCase().includes(N)}return!0});return e.jsxs("div",{className:"mobile-view",children:[e.jsxs("div",{className:"mobile-tasks-toolbar",children:[e.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search mods…",value:u,onChange:o=>c(o.target.value),style:{flex:1}}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>g(),"aria-label":"Refresh",children:e.jsx(_,{size:16})})]}),e.jsx("div",{className:"mobile-search-scopes",children:["all","enabled","disabled"].map(o=>e.jsx("button",{type:"button",className:`mobile-scope-chip ${p===o?"active":""}`,onClick:()=>v(o),children:o.charAt(0).toUpperCase()+o.slice(1)},o))}),i?e.jsx("div",{className:"mobile-loading",children:e.jsx("p",{children:"Loading…"})}):d.length===0?e.jsxs("div",{className:"mobile-empty",children:[e.jsx(G,{size:40}),e.jsx("p",{children:"No mods found."})]}):e.jsx("div",{className:"mobile-card-list",children:d.map(o=>e.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>b(o),children:[e.jsx("div",{className:"mobile-list-icon",children:e.jsx(G,{size:16})}),e.jsxs("div",{className:"mobile-list-content",children:[e.jsx("span",{className:"mobile-list-title",children:o.name}),e.jsxs("span",{className:"mobile-list-meta",children:["v",o.version," · ",o.author]})]}),e.jsx("span",{className:`mobile-list-badge ${o.enabled?"badge-on":"badge-off"}`,children:o.enabled?"on":"off"})]},o.id))}),a&&e.jsx(q,{open:!0,onClose:()=>b(null),title:a.name,actions:e.jsx("div",{className:"mobile-task-detail-actions",children:e.jsxs("button",{type:"button",className:"mobile-btn",style:{flex:1},onClick:()=>{a&&h(a.id,!a.enabled)},children:[e.jsx(Fe,{size:14})," ",a.enabled?"Disable":"Enable"]})}),children:e.jsxs("div",{className:"mobile-agent-detail",children:[e.jsx("p",{className:"mobile-agent-detail-desc",children:a.description||"No description."}),e.jsxs("div",{className:"mobile-agent-detail-meta",children:[e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Version"}),e.jsx("span",{className:"mono",children:a.version})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Author"}),e.jsx("span",{children:a.author})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Bizar"}),e.jsx("span",{className:"mono",children:a.bizar})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Type"}),e.jsx("span",{children:a.type})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Permissions"}),e.jsx("span",{children:a.permissions.length})]}),a.installedAt&&e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Installed"}),e.jsx("span",{children:new Date(a.installedAt).toLocaleDateString()})]})]})]})})]})}function Rt({snapshot:s,onNavigate:t}){var u,c,p;const[n,r]=l.useState(""),i=[{id:"artifacts",icon:V,label:"Plans",count:s.artifacts.length||0,desc:"Visual artifacts with elements & comments"},{id:"agents",icon:ae,label:"Agents",count:((u=s.agents)==null?void 0:u.length)||0,desc:"The Norse pantheon"},{id:"skills",icon:G,label:"Skills",count:null,desc:"Agent capabilities & tools"},{id:"mods",icon:G,label:"Mods",count:((c=s.mods)==null?void 0:c.length)||0,desc:"Installed modifications"},{id:"schedules",icon:be,label:"Schedules",count:((p=s.schedules)==null?void 0:p.length)||0,desc:"Cron jobs & automated tasks"},{id:"history",icon:he,label:"History",count:null,desc:"Past sessions & outputs"},{id:"config",icon:qe,label:"Config",count:null,desc:"Key-value configuration editor"}],m=n.trim()?i.filter(v=>v.label.toLowerCase().includes(n.toLowerCase())||v.desc.toLowerCase().includes(n.toLowerCase())):i;return e.jsxs("div",{className:"mobile-view",children:[e.jsx("div",{className:"mobile-tasks-toolbar",children:e.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search…",value:n,onChange:v=>r(v.target.value),style:{flex:1}})}),e.jsx("div",{className:"mobile-card-list",children:m.map(v=>{const a=v.icon;return e.jsxs("button",{type:"button",className:"mobile-more-nav-item",onClick:()=>t(v.id),children:[e.jsx("div",{className:"mobile-more-nav-icon",children:e.jsx(a,{size:20})}),e.jsxs("div",{className:"mobile-more-nav-content",children:[e.jsxs("span",{className:"mobile-more-nav-label",children:[v.label,v.count!=null&&e.jsx("span",{className:"mobile-more-nav-count",children:v.count})]}),e.jsx("span",{className:"mobile-more-nav-desc",children:v.desc})]}),e.jsx(Ne,{size:16,className:"mobile-more-nav-arrow"})]},v.id)})}),e.jsx("div",{className:"mobile-more-footer",children:e.jsxs("a",{href:"/?desktop=1",className:"mobile-more-link",children:["Switch to Desktop ",e.jsx(Ne,{size:14})]})})]})}const pe=[{id:"task",label:"Task",color:"var(--info)"},{id:"note",label:"Note",color:"var(--text-dim)"},{id:"decision",label:"Decision",color:"var(--accent)"},{id:"question",label:"Question",color:"var(--warning)"}];function de(s){var t;return((t=pe.find(n=>n.id===s))==null?void 0:t.color)||"var(--text-dim)"}function Dt({type:s,size:t=12}){switch(s){case"task":return e.jsx(se,{size:t,style:{color:"var(--info)"}});case"note":return e.jsx(ke,{size:t,style:{color:"var(--text-dim)"}});case"decision":return e.jsx(se,{size:t,style:{color:"var(--accent)"}});case"question":return e.jsx(ct,{size:t,style:{color:"var(--warning)"}});default:return e.jsx(ke,{size:t})}}function It({slug:s,onBack:t}){const[n,r]=l.useState(null),[i,m]=l.useState(null),[u,c]=l.useState(!0),[p,v]=l.useState(!1),[a,b]=l.useState(null),[g,h]=l.useState(!1),[d,o]=l.useState(!1),[N,f]=l.useState(!1),[j,E]=l.useState(""),T=async()=>{c(!0);try{const x=await C.get(`/plans/${encodeURIComponent(s)}`);r(x.canvas),m(x.meta)}catch{}finally{c(!1)}};l.useEffect(()=>{T()},[s]);const M=async(x,L,w)=>{try{const y=((n==null?void 0:n.elements)||[]).reduce((A,$)=>Math.max(A,$.x||0),40),S=((n==null?void 0:n.elements)||[]).reduce((A,$)=>Math.max(A,$.y||0),40);await C.post(`/plans/${encodeURIComponent(s)}/elements`,{type:x,title:L,content:w,x:20+y,y:20+S,width:240,height:120}),await T(),o(!1)}catch{}},D=async(x,L)=>{try{await C.put(`/plans/${encodeURIComponent(s)}/elements/${encodeURIComponent(x)}`,L),await T(),b(null)}catch{}},P=async x=>{if(confirm("Delete this element?"))try{await C.del(`/plans/${encodeURIComponent(s)}/elements/${encodeURIComponent(x)}`),b(null),await T()}catch{}},I=async(x,L)=>{try{const w=L?`/plans/${encodeURIComponent(s)}/elements/${encodeURIComponent(L)}/comments`:`/plans/${encodeURIComponent(s)}/comments`;await C.post(w,{text:x,elementId:L}),await T(),E(""),f(!1)}catch{}};return u||!n||!i?e.jsx("div",{className:"mobile-view",children:e.jsx("div",{className:"mobile-loading",children:e.jsx("p",{children:"Loading canvas…"})})}):e.jsxs("div",{className:"mobile-view mobile-view-canvas",children:[e.jsxs("div",{className:"mobile-canvas-bar",children:[e.jsxs("div",{className:"mobile-canvas-meta",children:[e.jsx("span",{className:"mobile-canvas-title",children:i.title||s}),e.jsx("span",{className:"mobile-canvas-status","data-status":i.status,children:i.status})]}),e.jsxs("div",{className:"mobile-canvas-actions",children:[e.jsx("button",{type:"button",className:`mobile-icon-btn ${p?"active":""}`,onClick:()=>v(x=>!x),"aria-label":p?"Done editing":"Edit",children:e.jsx(_e,{size:16})}),e.jsxs("button",{type:"button",className:"mobile-icon-btn",onClick:()=>h(x=>!x),"aria-label":"Comments",children:[e.jsx(K,{size:16}),n.comments.length>0&&e.jsx("span",{className:"mobile-canvas-comment-count",children:n.comments.length})]}),p&&e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>o(!0),"aria-label":"Add element",children:e.jsx(F,{size:16})})]})]}),e.jsxs("div",{className:"mobile-canvas-elements",children:[n.elements.length===0&&e.jsxs("div",{className:"mobile-empty",children:[e.jsx("p",{children:"No elements yet."}),p&&e.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>o(!0),children:[e.jsx(F,{size:14})," Add Element"]})]}),n.elements.map(x=>e.jsxs("button",{type:"button",className:`mobile-canvas-element ${(a==null?void 0:a.id)===x.id?"selected":""}`,style:{borderColor:de(x.type)},onClick:()=>{p&&b(x)},"aria-pressed":(a==null?void 0:a.id)===x.id,children:[e.jsxs("div",{className:"mobile-canvas-el-header",style:{background:`${de(x.type)}18`},children:[e.jsx(Dt,{type:x.type,size:12}),e.jsx("span",{className:"mobile-canvas-el-type",style:{color:de(x.type)},children:x.type}),x.status&&x.status!=="open"&&e.jsx("span",{className:"mobile-canvas-el-status",children:x.status})]}),e.jsx("div",{className:"mobile-canvas-el-title",children:x.title||"Untitled"}),x.content&&e.jsxs("div",{className:"mobile-canvas-el-content",children:[x.content.slice(0,120),x.content.length>120?"…":""]}),e.jsxs("div",{className:"mobile-canvas-el-comments",children:[e.jsx(K,{size:10}),n.comments.filter(L=>L.elementId===x.id).length]})]},x.id))]}),g&&e.jsxs("div",{className:"mobile-canvas-comments",children:[e.jsxs("div",{className:"mobile-canvas-comments-header",children:[e.jsxs("h4",{children:["Comments (",n.comments.length,")"]}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>h(!1),children:e.jsx(Q,{size:16})})]}),e.jsxs("div",{className:"mobile-canvas-comment-list",children:[n.comments.length===0&&e.jsx("p",{className:"mobile-empty-inline",children:"No comments yet."}),n.comments.map(x=>e.jsxs("div",{className:"mobile-canvas-comment",children:[e.jsxs("div",{className:"mobile-canvas-comment-head",children:[e.jsx("span",{className:"mono",children:x.author}),e.jsx("span",{className:"muted",children:J(x.created)})]}),e.jsx("div",{className:"mobile-canvas-comment-text",children:x.text})]},x.id))]}),e.jsxs("div",{className:"mobile-canvas-comment-input",children:[e.jsx("textarea",{className:"mobile-input",rows:2,placeholder:"Add a comment…",value:j,onChange:x=>E(x.target.value)}),e.jsx("button",{type:"button",className:"mobile-btn",disabled:!j.trim(),onClick:()=>{I(j.trim(),null)},children:"Post"})]})]}),a&&e.jsx(q,{open:!0,onClose:()=>b(null),title:`Edit ${a.title||a.type}`,actions:e.jsxs("div",{className:"mobile-task-detail-actions",children:[e.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-danger",onClick:()=>P(a.id),children:[e.jsx(ne,{size:14})," Delete"]}),e.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>f(!0),children:[e.jsx(K,{size:14})," Comment"]})]}),children:e.jsx(Mt,{element:a,onSave:x=>D(a.id,x),onClose:()=>b(null)})}),e.jsx(Pt,{open:d,onClose:()=>o(!1),onAdd:M}),e.jsx(H,{open:N,onClose:()=>f(!1),title:"Add Comment",actions:e.jsxs("button",{type:"button",className:"mobile-btn",style:{width:"100%"},disabled:!j.trim(),onClick:()=>{I(j.trim(),(a==null?void 0:a.id)||null),f(!1)},children:[e.jsx(K,{size:14})," Post"]}),children:e.jsx("textarea",{className:"mobile-input",rows:3,placeholder:"Your comment…",value:j,onChange:x=>E(x.target.value),autoFocus:!0})})]})}function Mt({element:s,onSave:t,onClose:n}){const[r,i]=l.useState(s.type),[m,u]=l.useState(s.title||""),[c,p]=l.useState(s.content||""),[v,a]=l.useState(s.status||"open");return e.jsxs("form",{className:"mobile-task-form",onSubmit:b=>{b.preventDefault(),t({type:r,title:m,content:c,status:v}),n()},children:[e.jsx("label",{className:"mobile-field-label",children:"Type"}),e.jsx("select",{className:"mobile-input",value:r,onChange:b=>i(b.target.value),children:pe.map(b=>e.jsx("option",{value:b.id,children:b.label},b.id))}),e.jsx("label",{className:"mobile-field-label",children:"Title"}),e.jsx("input",{className:"mobile-input",type:"text",value:m,onChange:b=>u(b.target.value)}),e.jsx("label",{className:"mobile-field-label",children:"Status"}),e.jsx("input",{className:"mobile-input",type:"text",value:v,onChange:b=>a(b.target.value),placeholder:"open / done / blocked"}),e.jsx("label",{className:"mobile-field-label",children:"Content (markdown)"}),e.jsx("textarea",{className:"mobile-input",rows:4,value:c,onChange:b=>p(b.target.value)}),e.jsx("button",{type:"submit",className:"mobile-btn",style:{width:"100%",marginTop:8},children:"Save"})]})}function Pt({open:s,onClose:t,onAdd:n}){const[r,i]=l.useState("task"),[m,u]=l.useState(""),[c,p]=l.useState(""),v=a=>{a.preventDefault(),m.trim()&&(n(r,m.trim(),c.trim()),u(""),p(""))};return e.jsx(H,{open:s,onClose:t,title:"Add Element",actions:e.jsxs("button",{type:"submit",form:"add-el-form",className:"mobile-btn",style:{width:"100%"},children:[e.jsx(F,{size:14})," Add"]}),children:e.jsxs("form",{id:"add-el-form",onSubmit:v,className:"mobile-task-form",children:[e.jsx("label",{className:"mobile-field-label",children:"Type"}),e.jsx("select",{className:"mobile-input",value:r,onChange:a=>i(a.target.value),children:pe.map(a=>e.jsx("option",{value:a.id,children:a.label},a.id))}),e.jsx("label",{className:"mobile-field-label",children:"Title *"}),e.jsx("input",{className:"mobile-input",type:"text",placeholder:"Element title",value:m,onChange:a=>u(a.target.value),autoFocus:!0,required:!0}),e.jsx("label",{className:"mobile-field-label",children:"Content (markdown)"}),e.jsx("textarea",{className:"mobile-input",rows:3,placeholder:"Description…",value:c,onChange:a=>p(a.target.value)})]})})}function Ot({snapshot:s,onBack:t,onOpenArtifact:n}){const[r,i]=l.useState(s.artifacts||[]),[m,u]=l.useState(!s.artifacts),[c,p]=l.useState(""),[v,a]=l.useState(!1),[b,g]=l.useState(""),[h,d]=l.useState(""),o=async()=>{try{const j=await C.get("/artifacts");i(j.artifacts||[])}catch{}finally{u(!1)}},N=async()=>{if(b.trim())try{const j=await C.post("/artifacts",{slug:b.trim(),title:h.trim()||void 0});a(!1),g(""),d(""),n(j.slug)}catch{}},f=c.trim()?r.filter(j=>(j.title||j.slug||"").toLowerCase().includes(c.toLowerCase())):r;return e.jsxs("div",{className:"mobile-view",children:[e.jsxs("div",{className:"mobile-tasks-toolbar",children:[e.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search artifacts…",value:c,onChange:j=>p(j.target.value),style:{flex:1}}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>o(),"aria-label":"Refresh",children:e.jsx(_,{size:16})})]}),e.jsx("div",{style:{marginBottom:12},children:e.jsxs("button",{type:"button",className:"mobile-btn",style:{width:"100%"},onClick:()=>a(!0),children:[e.jsx(F,{size:14})," New Artifact"]})}),m?e.jsx("div",{className:"mobile-loading",children:e.jsx("p",{children:"Loading…"})}):f.length===0?e.jsxs("div",{className:"mobile-empty",children:[e.jsx(V,{size:40}),e.jsx("p",{children:"No artifacts yet."})]}):e.jsx("div",{className:"mobile-card-list",children:f.map(j=>e.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>n(j.slug),children:[e.jsx("div",{className:"mobile-list-icon",children:e.jsx(V,{size:16})}),e.jsxs("div",{className:"mobile-list-content",children:[e.jsx("span",{className:"mobile-list-title",children:j.title||j.slug}),e.jsxs("span",{className:"mobile-list-meta",children:[j.status," · ",j.source,j.elementCount!=null?` · ${j.elementCount} elements`:"",j.commentCount!=null?` · ${j.commentCount} comments`:""]})]}),e.jsx("span",{className:"mobile-list-badge","data-status":j.status,children:j.status})]},j.slug))}),e.jsx(H,{open:v,onClose:()=>a(!1),title:"New Artifact",actions:e.jsxs("button",{type:"submit",form:"new-plan-form",className:"mobile-btn",style:{width:"100%"},children:[e.jsx(F,{size:14})," Create"]}),children:e.jsxs("form",{id:"new-plan-form",onSubmit:j=>{j.preventDefault(),N()},className:"mobile-task-form",children:[e.jsx("label",{className:"mobile-field-label",children:"Slug *"}),e.jsx("input",{className:"mobile-input",type:"text",placeholder:"my-plan",pattern:"[a-z0-9][a-z0-9-]{0,63}",value:b,onChange:j=>g(j.target.value),autoFocus:!0,required:!0}),e.jsx("label",{className:"mobile-field-label",children:"Title (optional)"}),e.jsx("input",{className:"mobile-input",type:"text",placeholder:"My Artifact",value:h,onChange:j=>d(j.target.value)})]})})]})}const Ut=["cron","interval","once"],Bt=["command","agent","webhook"],Re=["UTC","America/New_York","America/Los_Angeles","Europe/London","Europe/Berlin","Asia/Tokyo"],Ye=Array.from({length:24},(s,t)=>({value:t,label:t===0?"12 AM":t<12?`${t} AM`:t===12?"12 PM":`${t-12} PM`})),Ft=Array.from({length:12},(s,t)=>t*5),Ke=[{value:"*",label:"Every day"},{value:"0",label:"Sun"},{value:"1",label:"Mon"},{value:"2",label:"Tue"},{value:"3",label:"Wed"},{value:"4",label:"Thu"},{value:"5",label:"Fri"},{value:"6",label:"Sat"}],qt=[{value:"s",label:"sec"},{value:"m",label:"min"},{value:"h",label:"hr"},{value:"d",label:"day"}];function _t({snapshot:s}){var N;const[t,n]=l.useState(s.schedules||[]),[r,i]=l.useState(!s.schedules),[m,u]=l.useState(""),[c,p]=l.useState(null),[v,a]=l.useState({open:!1}),b=async()=>{try{const f=await C.get("/schedules");n(f.schedules||[])}catch{}finally{i(!1)}};l.useEffect(()=>{s.schedules?(n(s.schedules),i(!1)):b()},[s.schedules]);const g=async(f,j)=>{try{await C.patch(`/schedules/${encodeURIComponent(f)}`,{enabled:j}),n(E=>E.map(T=>T.id===f?{...T,enabled:j}:T)),(c==null?void 0:c.id)===f&&p(E=>E&&{...E,enabled:j})}catch{}},h=async f=>{if(confirm("Delete this schedule?"))try{await C.del(`/schedules/${encodeURIComponent(f)}`),n(j=>j.filter(E=>E.id!==f)),(c==null?void 0:c.id)===f&&p(null)}catch{}},d=async f=>{try{await C.post(`/schedules/${encodeURIComponent(f)}/trigger`)}catch{}},o=m.trim()?t.filter(f=>f.name.toLowerCase().includes(m.toLowerCase())):t;return e.jsxs("div",{className:"mobile-view",children:[e.jsxs("div",{className:"mobile-tasks-toolbar",children:[e.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search schedules…",value:m,onChange:f=>u(f.target.value),style:{flex:1}}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>b(),"aria-label":"Refresh",children:e.jsx(_,{size:16})}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>a({open:!0}),"aria-label":"New schedule",children:e.jsx(F,{size:16})})]}),r?e.jsx("div",{className:"mobile-loading",children:e.jsx("p",{children:"Loading…"})}):o.length===0?e.jsxs("div",{className:"mobile-empty",children:[e.jsx(be,{size:40}),e.jsx("p",{children:"No schedules found."})]}):e.jsx("div",{className:"mobile-card-list",children:o.map(f=>e.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>p(f),children:[e.jsx("div",{className:"mobile-list-icon",children:e.jsx(be,{size:16})}),e.jsxs("div",{className:"mobile-list-content",children:[e.jsx("span",{className:"mobile-list-title",children:f.name}),e.jsxs("span",{className:"mobile-list-meta",children:[Me(f)," ·"," ",f.nextRun?`next ${Ie(f.nextRun,f.timezone)}`:"no next run"]})]}),e.jsx("span",{className:`mobile-list-badge ${f.enabled?"badge-on":"badge-off"}`,children:f.enabled?"on":"off"})]},f.id))}),c&&e.jsx(q,{open:!0,onClose:()=>p(null),title:c.name,actions:e.jsxs("div",{className:"mobile-task-detail-actions",children:[e.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>{c&&d(c.id)},children:[e.jsx(te,{size:14})," Trigger now"]}),e.jsx("button",{type:"button",className:`mobile-btn ${c.enabled?"mobile-btn-secondary":""}`,onClick:()=>{c&&g(c.id,!c.enabled)},children:c.enabled?"Disable":"Enable"}),e.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>{c&&(a({open:!0,initial:c}),p(null))},children:[e.jsx(_e,{size:14})," Edit"]}),e.jsx("button",{type:"button",className:"mobile-btn mobile-btn-danger",onClick:()=>{c&&h(c.id)},children:e.jsx(ne,{size:14})})]}),children:e.jsx("div",{className:"mobile-agent-detail",children:e.jsxs("div",{className:"mobile-agent-detail-meta",children:[e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Type"}),e.jsx("span",{children:c.type})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Schedule"}),e.jsx("span",{className:"mono",children:Me(c)||c.schedule})]}),c.timezone&&e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Timezone"}),e.jsx("span",{className:"mono",children:c.timezone})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Action"}),e.jsxs("span",{children:[c.action.type,": ",c.action.target]})]}),c.action.type==="agent"&&c.action.prompt&&e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Prompt"}),e.jsx("span",{style:{fontSize:12},children:c.action.prompt})]}),((N=c.budgetCheck)==null?void 0:N.skipIfBudgetLow)&&e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Budget gate"}),e.jsxs("span",{children:["skip if ≥ ",c.budgetCheck.maxConcurrent??6," concurrent"]})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Next run"}),e.jsx("span",{children:c.nextRun?Ie(c.nextRun,c.timezone):"—"})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Last run"}),e.jsx("span",{children:c.lastRun?Vt(c.lastRun):"—"})]}),c.lastResult&&e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Last result"}),e.jsx("span",{style:{fontSize:12},children:c.lastResult})]}),c.lastError&&e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Last error"}),e.jsx("span",{style:{fontSize:12},children:c.lastError})]})]})})}),e.jsx(Ht,{open:v.open,initial:v.initial,onClose:()=>a({open:!1}),onSaved:()=>{a({open:!1}),b()}})]})}function De(s){var r,i;if(!s)return{name:"",type:"cron",cronMinute:0,cronHour:13,cronDow:"0",intervalN:30,intervalUnit:"m",onceAt:"",timezone:"UTC",actionType:"agent",actionTarget:"",actionPrompt:"",skipIfBudgetLow:!1,maxConcurrent:6,enabled:!0};const t=s.type==="cron"?Je(s.schedule):null,n=s.type==="interval"?Yt(s.schedule):null;return{name:s.name||"",type:s.type,cronMinute:(t==null?void 0:t.minute)??0,cronHour:(t==null?void 0:t.hour)??9,cronDow:(t==null?void 0:t.dow)??"*",intervalN:(n==null?void 0:n.n)??30,intervalUnit:(n==null?void 0:n.unit)??"m",onceAt:s.type==="once"?Kt(s.schedule):"",timezone:s.timezone||"UTC",actionType:s.action.type,actionTarget:s.action.target||"",actionPrompt:s.action.prompt||"",skipIfBudgetLow:!!((r=s.budgetCheck)!=null&&r.skipIfBudgetLow),maxConcurrent:Number.isFinite((i=s.budgetCheck)==null?void 0:i.maxConcurrent)?s.budgetCheck.maxConcurrent:6,enabled:s.enabled!==!1}}function Wt(s){if(s.type==="cron")return`${s.cronMinute} ${s.cronHour} * * ${s.cronDow}`;if(s.type==="interval")return`${s.intervalN}${s.intervalUnit}`;if(!s.onceAt)return"";try{return new Date(s.onceAt).toISOString()}catch{return s.onceAt}}function Ht({open:s,initial:t,onClose:n,onSaved:r}){const[i,m]=l.useState(()=>De(t)),[u,c]=l.useState(!1);l.useEffect(()=>{s&&m(De(t))},[s,t]);const p=(a,b)=>{m(g=>({...g,[a]:b}))},v=async a=>{if(a.preventDefault(),!i.name.trim())return;const b=Wt(i);if(b){c(!0);try{const g={name:i.name.trim(),type:i.type,schedule:b,timezone:i.timezone,action:{type:i.actionType,target:i.actionTarget.trim(),...i.actionType==="agent"&&i.actionPrompt.trim()?{prompt:i.actionPrompt.trim()}:{}},budgetCheck:{maxConcurrent:i.maxConcurrent,skipIfBudgetLow:i.skipIfBudgetLow},enabled:i.enabled};t?await C.put(`/schedules/${encodeURIComponent(t.id)}`,g):await C.post("/schedules",g),r()}catch{}finally{c(!1)}}};return e.jsx(H,{open:s,onClose:n,title:t?`Edit ${t.name}`:"New schedule",actions:e.jsxs("button",{type:"submit",form:"mobile-schedule-form",className:"mobile-btn",style:{width:"100%"},disabled:u,children:[e.jsx(F,{size:14})," ",t?"Save":"Create"]}),children:e.jsxs("form",{id:"mobile-schedule-form",onSubmit:v,className:"mobile-task-form",children:[e.jsx("label",{className:"mobile-field-label",children:"Name *"}),e.jsx("input",{className:"mobile-input",type:"text",placeholder:"Weekly review",value:i.name,onChange:a=>p("name",a.target.value),autoFocus:!0,required:!0}),e.jsx("label",{className:"mobile-field-label",children:"Type"}),e.jsx("select",{className:"mobile-input",value:i.type,onChange:a=>p("type",a.target.value),children:Ut.map(a=>e.jsx("option",{value:a,children:a},a))}),i.type==="cron"&&e.jsxs(e.Fragment,{children:[e.jsx("label",{className:"mobile-field-label",children:"Day of week"}),e.jsx("select",{className:"mobile-input",value:i.cronDow,onChange:a=>p("cronDow",a.target.value),children:Ke.map(a=>e.jsx("option",{value:a.value,children:a.label},a.value))}),e.jsxs("div",{className:"mobile-form-row",children:[e.jsxs("div",{style:{flex:1},children:[e.jsx("label",{className:"mobile-field-label",children:"Hour"}),e.jsx("select",{className:"mobile-input",value:String(i.cronHour),onChange:a=>p("cronHour",parseInt(a.target.value,10)),children:Ye.map(a=>e.jsx("option",{value:String(a.value),children:a.label},a.value))})]}),e.jsxs("div",{style:{flex:1},children:[e.jsx("label",{className:"mobile-field-label",children:"Minute"}),e.jsx("select",{className:"mobile-input",value:String(i.cronMinute),onChange:a=>p("cronMinute",parseInt(a.target.value,10)),children:Ft.map(a=>e.jsx("option",{value:String(a),children:String(a).padStart(2,"0")},a))})]})]})]}),i.type==="interval"&&e.jsxs("div",{className:"mobile-form-row",children:[e.jsxs("div",{style:{flex:1},children:[e.jsx("label",{className:"mobile-field-label",children:"Every"}),e.jsx("input",{className:"mobile-input",type:"number",min:1,value:i.intervalN,onChange:a=>p("intervalN",parseInt(a.target.value,10)||1)})]}),e.jsxs("div",{style:{flex:1},children:[e.jsx("label",{className:"mobile-field-label",children:"Unit"}),e.jsx("select",{className:"mobile-input",value:i.intervalUnit,onChange:a=>p("intervalUnit",a.target.value),children:qt.map(a=>e.jsx("option",{value:a.value,children:a.label},a.value))})]})]}),i.type==="once"&&e.jsxs(e.Fragment,{children:[e.jsx("label",{className:"mobile-field-label",children:"Run at"}),e.jsx("input",{className:"mobile-input",type:"datetime-local",value:i.onceAt,onChange:a=>p("onceAt",a.target.value)})]}),e.jsx("label",{className:"mobile-field-label",children:"Timezone"}),e.jsx("select",{className:"mobile-input",value:Re.includes(i.timezone)?i.timezone:"UTC",onChange:a=>p("timezone",a.target.value),children:Re.map(a=>e.jsx("option",{value:a,children:a},a))}),e.jsx("label",{className:"mobile-field-label",children:"Action type"}),e.jsx("select",{className:"mobile-input",value:i.actionType,onChange:a=>p("actionType",a.target.value),children:Bt.map(a=>e.jsx("option",{value:a,children:a},a))}),e.jsx("label",{className:"mobile-field-label",children:"Target"}),e.jsx("input",{className:"mobile-input",type:"text",placeholder:i.actionType==="webhook"?"https://...":i.actionType==="agent"?"agent or task ref":"echo hello",value:i.actionTarget,onChange:a=>p("actionTarget",a.target.value)}),i.actionType==="agent"&&e.jsxs(e.Fragment,{children:[e.jsx("label",{className:"mobile-field-label",children:"Prompt"}),e.jsx("textarea",{className:"mobile-input",rows:3,placeholder:"What should the agent do?",value:i.actionPrompt,onChange:a=>p("actionPrompt",a.target.value)})]}),e.jsxs("fieldset",{className:"mobile-budget-card",children:[e.jsx("legend",{children:"Budget pre-flight"}),e.jsxs("label",{className:"mobile-checkbox-row",children:[e.jsx("input",{type:"checkbox",checked:i.skipIfBudgetLow,onChange:a=>p("skipIfBudgetLow",a.target.checked)}),e.jsx("span",{children:"Skip if too many bg tasks are running"})]}),e.jsx("label",{className:"mobile-field-label",children:"Cap"}),e.jsx("input",{className:"mobile-input",type:"number",min:1,max:64,value:i.maxConcurrent,onChange:a=>p("maxConcurrent",parseInt(a.target.value,10)||6),disabled:!i.skipIfBudgetLow})]}),e.jsxs("label",{className:"mobile-checkbox-row",children:[e.jsx("input",{type:"checkbox",checked:i.enabled,onChange:a=>p("enabled",a.target.checked)}),e.jsx("span",{children:"Enabled"})]})]})})}function Vt(s){const t=Date.now()-new Date(s).getTime();return t<6e4?"just now":t<36e5?`${Math.floor(t/6e4)}m ago`:t<864e5?`${Math.floor(t/36e5)}h ago`:new Date(s).toLocaleDateString()}function Ie(s,t){try{return new Date(s).toLocaleString(void 0,{timeZone:t||void 0,weekday:"short",hour:"numeric",minute:"2-digit",month:"short",day:"numeric"})}catch{return new Date(s).toLocaleString()}}function Je(s){if(typeof s!="string")return null;const t=s.trim().split(/\s+/);if(t.length!==5)return null;const[n,r,,,i]=t,m=parseInt(n,10),u=parseInt(r,10);return!Number.isFinite(m)||!Number.isFinite(u)||n!==String(m)||r!==String(u)?null:{minute:m,hour:u,dow:i==="*"?"*":Number.isFinite(parseInt(i,10))?i:"*"}}function Yt(s){if(typeof s!="string")return null;const t=/^(\d+)([smhd])$/i.exec(s.trim());return t?{n:parseInt(t[1],10),unit:t[2].toLowerCase()}:null}function Kt(s){if(!s)return"";try{const t=new Date(s);if(Number.isNaN(t.getTime()))return"";const n=r=>String(r).padStart(2,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}T${n(t.getHours())}:${n(t.getMinutes())}`}catch{return""}}function Me(s){var m,u;if(s.type!=="cron")return s.schedule;const t=Je(s.schedule);if(!t)return s.schedule;const n=((m=Ke.find(c=>c.value===t.dow))==null?void 0:m.label)||t.dow,r=((u=Ye.find(c=>c.value===t.hour))==null?void 0:u.label)||`${t.hour}`,i=String(t.minute).padStart(2,"0");return n==="Every day"?`Every day ${r} :${i}`:`Every ${n} ${r} :${i}`}const Jt=["all","tasks","agents","artifacts","projects","settings"],Gt={tasks:se,agents:ae,plans:V,projects:rt,settings:G};function Qt({open:s,onClose:t,onNavigate:n}){const[r,i]=l.useState(""),[m,u]=l.useState("all"),[c,p]=l.useState([]),[v,a]=l.useState(!1),b=l.useRef(null);l.useEffect(()=>{s&&(i(""),p([]),requestAnimationFrame(()=>{var d;return(d=b.current)==null?void 0:d.focus()}))},[s]),l.useEffect(()=>{if(!r.trim()){p([]);return}const d=setTimeout(async()=>{a(!0);try{const o=await C.get(`/search?q=${encodeURIComponent(r)}&scope=${m}`);p(o.results||[])}catch{p([])}finally{a(!1)}},250);return()=>clearTimeout(d)},[r,m]);const g=d=>{const o=d.item,N=o.id||o.slug||o.name||"";n(d.type,N),t()},h=c.reduce((d,o)=>(d[o.type]||(d[o.type]=[]),d[o.type].push(o),d),{});return e.jsx(H,{open:s,onClose:t,title:"Search",children:e.jsxs("div",{className:"mobile-search-container",children:[e.jsxs("div",{className:"mobile-search-input-row",children:[e.jsx(me,{size:16,style:{color:"var(--text-muted)",flexShrink:0}}),e.jsx("input",{ref:b,className:"mobile-search-field",type:"text",placeholder:"Search…",value:r,onChange:d=>i(d.target.value),enterKeyHint:"search",onKeyDown:d=>{d.key==="Escape"&&t(),d.key==="Enter"&&c.length>0&&g(c[0])}}),r&&e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>i(""),"aria-label":"Clear",children:e.jsx(Q,{size:16})})]}),e.jsx("div",{className:"mobile-search-scopes",children:Jt.map(d=>e.jsx("button",{type:"button",className:`mobile-scope-chip ${m===d?"active":""}`,onClick:()=>u(d),children:d==="all"?"All":d.charAt(0).toUpperCase()+d.slice(1)},d))}),e.jsxs("div",{className:"mobile-search-results",children:[v&&e.jsx("div",{className:"mobile-search-loading",children:"Searching…"}),!v&&r&&c.length===0&&e.jsxs("div",{className:"mobile-empty",children:[e.jsx(me,{size:32}),e.jsx("p",{children:"No results found"})]}),!v&&!r&&e.jsx("div",{className:"mobile-empty",children:e.jsx("p",{children:"Type to search across tasks, agents, plans, and more."})}),Object.entries(h).map(([d,o])=>{const N=Gt[d]||V;return e.jsxs("div",{className:"mobile-search-group",children:[e.jsxs("h4",{className:"mobile-search-group-title",children:[e.jsx(N,{size:12})," ",d.charAt(0).toUpperCase()+d.slice(1)," (",o.length,")"]}),o.map((f,j)=>{const E=f.item;return e.jsxs("button",{type:"button",className:"mobile-search-result-item",onClick:()=>g(f),children:[e.jsx("span",{className:"mobile-search-result-title",children:E.title||E.name||E.slug||"(unnamed)"}),E.description&&e.jsx("span",{className:"mobile-search-result-meta",children:E.description.slice(0,80)})]},j)})]},d)})]})]})})}const Xt=["languages","framework","design","testing","devops","data","security","integration"];function Zt({snapshot:s,onBack:t}){const[n,r]=l.useState([]),[i,m]=l.useState(!0),[u,c]=l.useState(""),[p,v]=l.useState(""),[a,b]=l.useState(null),g=async()=>{try{const o=await C.get("/skills");r(o.skills||[])}catch{}finally{m(!1)}};l.useEffect(()=>{g()},[]);const h=async(o,N)=>{try{await C.patch(`/skills/${encodeURIComponent(o)}`,{enabled:N}),r(f=>f.map(j=>j.id===o?{...j,enabled:N}:j)),(a==null?void 0:a.id)===o&&b(f=>f&&{...f,enabled:N})}catch{}},d=n.filter(o=>{if(p&&o.category!==p)return!1;if(u){const N=u.toLowerCase();return o.name.toLowerCase().includes(N)||o.description.toLowerCase().includes(N)}return!0});return e.jsxs("div",{className:"mobile-view",children:[e.jsxs("div",{className:"mobile-tasks-toolbar",children:[e.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search skills…",value:u,onChange:o=>c(o.target.value),style:{flex:1}}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>g(),"aria-label":"Refresh",children:e.jsx(_,{size:16})})]}),e.jsxs("div",{className:"mobile-search-scopes",children:[e.jsx("button",{type:"button",className:`mobile-scope-chip ${p?"":"active"}`,onClick:()=>v(""),children:"All"}),Xt.map(o=>e.jsx("button",{type:"button",className:`mobile-scope-chip ${p===o?"active":""}`,onClick:()=>v(o),children:o},o))]}),i?e.jsx("div",{className:"mobile-loading",children:e.jsx("p",{children:"Loading…"})}):d.length===0?e.jsxs("div",{className:"mobile-empty",children:[e.jsx(we,{size:40}),e.jsx("p",{children:"No skills found."})]}):e.jsx("div",{className:"mobile-card-list",children:d.map(o=>e.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>b(o),children:[e.jsx("div",{className:"mobile-list-icon",children:e.jsx(we,{size:16})}),e.jsxs("div",{className:"mobile-list-content",children:[e.jsx("span",{className:"mobile-list-title",children:o.name}),e.jsxs("span",{className:"mobile-list-meta",children:[o.category," · v",o.version]})]}),e.jsx("span",{className:`mobile-list-badge ${o.enabled?"badge-on":"badge-off"}`,children:o.enabled?"on":"off"})]},o.id))}),a&&e.jsx(q,{open:!0,onClose:()=>b(null),title:a.name,actions:e.jsxs("button",{type:"button",className:`mobile-btn ${a.enabled?"mobile-btn-secondary":""}`,style:{width:"100%"},onClick:()=>{a&&h(a.id,!a.enabled)},children:[e.jsx(Fe,{size:14})," ",a.enabled?"Disable":"Enable"]}),children:e.jsxs("div",{className:"mobile-agent-detail",children:[e.jsx("p",{className:"mobile-agent-detail-desc",children:a.description||"No description."}),e.jsxs("div",{className:"mobile-agent-detail-meta",children:[e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Category"}),e.jsx("span",{children:a.category})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Version"}),e.jsx("span",{className:"mono",children:a.version})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Source"}),e.jsx("span",{children:a.source})]}),a.tags.length>0&&e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Tags"}),e.jsx("span",{children:a.tags.join(", ")})]})]})]})})]})}const es=["queued","doing","blocked","done"],Z={queued:"Queued",doing:"Doing",blocked:"Blocked",done:"Done"},Pe={queued:"doing",doing:"done",blocked:"queued",done:"queued"};function ts(s){const t=s.metadata??{};return!!(t.sessionId||t.bgInstanceId)}function ss(s){var n;const t=s.metadata??{};return!!((n=t.artifactIds)!=null&&n.length||t.artifactId)}function Oe({snapshot:s,onRefresh:t,selectedTaskId:n,onCloseDetail:r,onOpenChat:i,onOpenArtifact:m}){var ge,ve;const[u,c]=l.useState(s.tasks||[]),[p,v]=l.useState(!s.tasks),[a,b]=l.useState(""),[g,h]=l.useState("queued"),[d,o]=l.useState(null),[N,f]=l.useState(!1),[j,E]=l.useState(null),[T,M]=l.useState([]),[D,P]=l.useState(""),[I,x]=l.useState(null),[L,w]=l.useState(!1),[y,S]=l.useState(""),[A,$]=l.useState("updated");l.useEffect(()=>{var k;if(s.tasks&&(c(s.tasks),v(!1)),n){const R=(k=s.tasks)==null?void 0:k.find(z=>z.id===n);R&&o(R)}},[s.tasks,n]),l.useEffect(()=>{if(n){const k=u.find(R=>R.id===n);k&&o(k)}},[n,u]);const U=async()=>{try{const k=await C.get("/tasks");c(Array.isArray(k)?k:[])}catch{}finally{v(!1)}},W=async(k,R)=>{c(z=>z.map(O=>O.id===k?{...O,status:R}:O)),(d==null?void 0:d.id)===k&&o(z=>z&&{...z,status:R});try{await C.patch(`/tasks/${encodeURIComponent(k)}/status`,{status:R})}catch{await U()}},ie=async k=>{if(confirm("Delete this task?"))try{await C.del(`/tasks/${encodeURIComponent(k)}`),c(R=>R.filter(z=>z.id!==k)),(d==null?void 0:d.id)===k&&o(null)}catch{await U()}},Y=async k=>{try{await C.post(`/tasks/${encodeURIComponent(k)}/archive`),c(R=>R.filter(z=>z.id!==k)),(d==null?void 0:d.id)===k&&o(null)}catch{}},fe=[...u.filter(k=>{var R,z;if(a.trim()){const O=a.toLowerCase();if(!(k.title||"").toLowerCase().includes(O)&&!(k.description||"").toLowerCase().includes(O))return!1}if(y.trim()){const O=y==="mine"?((z=(R=s.settings)==null?void 0:R.data)==null?void 0:z.defaultAgent)||as(s):y.replace(/^@/,"");if((k.assignee||"").toLowerCase()!==O.toLowerCase())return!1}return!0})].sort((k,R)=>{switch(A){case"priority":{const z={high:0,normal:1,low:2};return(z[k.priority]??1)-(z[R.priority]??1)}case"created":return new Date(R.createdAt).getTime()-new Date(k.createdAt).getTime();case"updated":default:return new Date(R.updatedAt).getTime()-new Date(k.updatedAt).getTime()}}),xe=fe.filter(k=>k.status===g),je=s.agents||[],Ge=async(k,R,z,O)=>{try{const le=await C.post("/tasks",{title:k,description:R,assignee:z||null,priority:O});c(oe=>[le,...oe]),f(!1)}catch{}},Qe=async k=>{w(!0),P(""),x(null),E(k);try{const z=((await C.get(`/tasks/${encodeURIComponent(k)}/artifacts`)).artifacts||[]).map(O=>O.id);if(M(z),z.length>0){const[O,le]=await Promise.all([C.get(`/artifacts/${encodeURIComponent(z[0])}`),fetch(C.urlWithToken(`/artifacts/${encodeURIComponent(z[0])}/content`)).then(oe=>oe.text())]);x(O),P(le)}}catch{}finally{w(!1)}};return p?e.jsx("div",{className:"mobile-loading",children:e.jsx("p",{children:"Loading…"})}):e.jsxs("div",{className:"mobile-view mobile-view-tasks",children:[e.jsxs("div",{className:"mobile-tasks-toolbar",children:[e.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search tasks…",value:a,onChange:k=>b(k.target.value),style:{flex:1}}),e.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>U(),"aria-label":"Refresh",children:e.jsx(_,{size:16})})]}),e.jsxs("div",{className:"mobile-tasks-filters",children:[e.jsxs("select",{className:"mobile-filter-select",value:y,onChange:k=>S(k.target.value),children:[e.jsx("option",{value:"",children:"All"}),e.jsx("option",{value:"mine",children:"Mine"}),je.map(k=>e.jsxs("option",{value:`@${k.name}`,children:["@",k.name]},k.name))]}),e.jsxs("select",{className:"mobile-filter-select",value:A,onChange:k=>$(k.target.value),children:[e.jsx("option",{value:"updated",children:"Updated"}),e.jsx("option",{value:"created",children:"Created"}),e.jsx("option",{value:"priority",children:"Priority"})]})]}),e.jsx("div",{className:"mobile-kanban-tabs",children:es.map(k=>{const R=fe.filter(z=>z.status===k).length;return e.jsxs("button",{type:"button",className:`mobile-kanban-tab ${g===k?"active":""}`,onClick:()=>h(k),children:[Z[k]," (",R,")"]},k)})}),e.jsxs("div",{className:"mobile-card-list",children:[xe.length===0&&e.jsxs("div",{className:"mobile-empty mobile-empty-compact",children:[e.jsxs("p",{children:["No ",Z[g].toLowerCase()," tasks."]}),e.jsx("p",{className:"muted",children:"Create one or switch columns."})]}),xe.map(k=>{var R;return e.jsxs("button",{type:"button",className:"mobile-task-card",onClick:()=>o(k),children:[e.jsx("div",{className:"priority-dot",style:{background:ut[k.priority]||"var(--info)"}}),e.jsxs("div",{className:"task-content",children:[e.jsx("div",{className:"task-title",children:k.title}),e.jsxs("div",{className:"task-meta",children:[k.assignee?`@${k.assignee}`:"unassigned"," · ",J(k.updatedAt||k.createdAt),(R=k.dependencies)!=null&&R.length?` · ${k.dependencies.length} deps`:""]})]})]},k.id)})]}),e.jsx("button",{type:"button",className:"mobile-fab",onClick:()=>f(!0),"aria-label":"Add task",children:e.jsx(F,{size:24})}),e.jsx(q,{open:!!d,onClose:()=>{o(null),r==null||r()},title:"Task Detail",actions:d&&e.jsxs("div",{className:"mobile-task-detail-actions",children:[d.status!=="done"&&e.jsxs("button",{type:"button",className:"mobile-btn",style:{flex:1},onClick:()=>{d&&W(d.id,Pe[d.status])},children:["Move to ",Z[Pe[d.status]||"queued"]]}),e.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",onClick:()=>{d&&Y(d.id)},children:[e.jsx(dt,{size:14})," Archive"]}),ts(d)&&e.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",onClick:()=>{i==null||i(d.id)},children:[e.jsx(K,{size:14})," Chat"]}),ss(d)&&e.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",onClick:()=>{Qe(d.id)},children:[e.jsx(V,{size:14})," Artifact"]}),e.jsx("button",{type:"button",className:"mobile-btn mobile-btn-danger",onClick:()=>{d&&ie(d.id)},children:e.jsx(ne,{size:14})})]}),children:d&&e.jsxs("div",{className:"mobile-task-detail",children:[e.jsxs("div",{className:"mobile-task-detail-header",children:[e.jsx("span",{className:`mobile-task-status-badge status-${d.status}`,children:Z[d.status]||d.status}),e.jsx("span",{className:`mobile-task-priority priority-${d.priority}`,children:d.priority})]}),e.jsx("h3",{className:"mobile-task-detail-title",children:d.title}),d.description&&e.jsx("p",{className:"mobile-task-detail-desc",children:d.description}),e.jsxs("div",{className:"mobile-task-detail-meta",children:[d.assignee&&e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Assignee"}),e.jsxs("span",{children:["@",d.assignee]})]}),d.dueDate&&e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Due"}),e.jsx("span",{children:new Date(d.dueDate).toLocaleDateString()})]}),d.timeSpent!=null&&e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Time spent"}),e.jsxs("span",{children:[Math.round(d.timeSpent/6e4),"min"]})]}),(ge=d.dependencies)!=null&&ge.length?e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Dependencies"}),e.jsx("span",{children:d.dependencies.length})]}):null,(ve=d.comments)!=null&&ve.length?e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Comments"}),e.jsx("span",{children:d.comments.length})]}):null,e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Created"}),e.jsx("span",{children:J(d.createdAt)})]}),e.jsxs("div",{className:"mobile-task-detail-row",children:[e.jsx("span",{children:"Updated"}),e.jsx("span",{children:J(d.updatedAt)})]})]})]})}),e.jsx(ns,{open:N,onClose:()=>f(!1),onCreate:Ge,agents:je}),e.jsx(q,{open:!!j,onClose:()=>{E(null),P(""),x(null)},title:(I==null?void 0:I.name)||"Artifact",actions:T.length>1?e.jsx("div",{className:"mobile-task-detail-actions",children:T.map((k,R)=>e.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",style:{flex:1},onClick:()=>{w(!0),Promise.all([C.get(`/artifacts/${encodeURIComponent(k)}`),fetch(C.urlWithToken(`/artifacts/${encodeURIComponent(k)}/content`)).then(z=>z.text())]).then(([z,O])=>{x(z),P(O),w(!1)}).catch(()=>w(!1))},children:["Artifact ",R+1]},k))}):null,children:e.jsx("div",{className:"mobile-artifact-viewer",children:L?e.jsx("div",{className:"mobile-loading",children:e.jsx("p",{children:"Loading artifact…"})}):D?e.jsx("iframe",{srcDoc:D,className:"mobile-artifact-iframe",sandbox:"allow-scripts allow-forms allow-popups allow-same-origin",title:(I==null?void 0:I.name)||"Artifact",loading:"lazy"}):e.jsxs("div",{className:"mobile-empty",children:[e.jsx(V,{size:32}),e.jsx("p",{className:"muted",children:"No artifact content available."})]})})})]})}function as(s){var t,n;return((n=(t=s.settings)==null?void 0:t.data)==null?void 0:n.defaultAgent)||"odin"}function ns({open:s,onClose:t,onCreate:n,agents:r}){const[i,m]=l.useState(""),[u,c]=l.useState(""),[p,v]=l.useState(""),[a,b]=l.useState("normal"),g=h=>{h.preventDefault(),i.trim()&&(n(i.trim(),u.trim(),p,a),m(""),c(""),v(""),b("normal"))};return e.jsx(H,{open:s,onClose:t,title:"New Task",actions:e.jsxs("button",{type:"submit",form:"new-task-form",className:"mobile-btn",style:{width:"100%"},children:[e.jsx(F,{size:14})," Create Task"]}),children:e.jsxs("form",{id:"new-task-form",onSubmit:g,className:"mobile-task-form",children:[e.jsx("label",{className:"mobile-field-label",children:"Title *"}),e.jsx("input",{className:"mobile-input",type:"text",placeholder:"Task title",value:i,onChange:h=>m(h.target.value),autoFocus:!0,required:!0}),e.jsx("label",{className:"mobile-field-label",children:"Description"}),e.jsx("textarea",{className:"mobile-input",rows:3,placeholder:"Optional description",value:u,onChange:h=>c(h.target.value)}),e.jsx("label",{className:"mobile-field-label",children:"Assignee"}),e.jsxs("select",{className:"mobile-input",value:p,onChange:h=>v(h.target.value),children:[e.jsx("option",{value:"",children:"Unassigned"}),r.map(h=>e.jsxs("option",{value:h.name,children:["@",h.name]},h.name))]}),e.jsx("label",{className:"mobile-field-label",children:"Priority"}),e.jsxs("select",{className:"mobile-input",value:a,onChange:h=>b(h.target.value),children:[e.jsx("option",{value:"low",children:"Low"}),e.jsx("option",{value:"normal",children:"Normal"}),e.jsx("option",{value:"high",children:"High"})]})]})})}const is=Be.lazy(()=>He(()=>import("./MobileSettings-CVW9VhEo.js"),__vite__mapDeps([0,1,2,3,4])).then(s=>({default:s.MobileSettings}))),ls=Be.lazy(()=>He(()=>import("./MobileChat-DRXP2ERQ.js"),__vite__mapDeps([5,1,6,4,7,8,3])).then(s=>({default:s.MobileChat}))),Ue=[{id:"activity",label:"Activity",icon:ue},{id:"chat",label:"Chat",icon:K},{id:"tasks",label:"Tasks",icon:se},{id:"settings",label:"Settings",icon:qe},{id:"more",label:"More",icon:mt}];function os(s){const t=s.meta??{},n=typeof t.taskId=="string"?t.taskId:null,r=typeof t.slug=="string"?t.slug:null,i=typeof t.agent=="string"?t.agent:null;if(n)return{id:"task-detail",taskId:n};if(r)return{id:"artifacts?-detail",slug:r};if(i)return{id:"agent-detail",name:i};const m=s.link??"";return m.startsWith("/artifacts?/")?{id:"artifacts?-detail",slug:decodeURIComponent(m.slice(12))}:m.startsWith("/tasks/")?{id:"task-detail",taskId:decodeURIComponent(m.slice(7))}:m.startsWith("/agents/")?{id:"agent-detail",name:decodeURIComponent(m.slice(8))}:null}function fs(){const[s,t]=l.useState("activity"),[n,r]=l.useState([]),[i,m]=l.useState(!1),[u,c]=l.useState(!1),[p,v]=l.useState(null),[a,b]=l.useState(null),[g,h]=l.useState(null),[d,o]=l.useState(null),[N,f]=l.useState(!0),[j,E]=l.useState(0),T=l.useMemo(()=>n[n.length-1]??{id:s},[s,n]),M=l.useCallback(y=>{r(S=>[...S,y])},[]),D=l.useCallback(()=>{r(y=>y.slice(0,-1))},[]),P=l.useCallback(y=>{r([]),t(y)},[]),I=l.useCallback(async()=>{var y;try{const S=await C.get("/snapshot");b(S),(y=S.settings)!=null&&y.data&&h(S.settings.data),o(null)}catch(S){throw o(S.message||"Dashboard server unreachable."),S}},[]);l.useEffect(()=>{let y=!1;return Promise.all([C.get("/snapshot").catch(()=>null),C.get("/settings").catch(()=>null),C.probeAuthStatus().catch(()=>null)]).then(([S,A])=>{var U;if(y)return;const $=(A==null?void 0:A.data)??((U=S==null?void 0:S.settings)==null?void 0:U.data)??null;S&&b(S),$&&h($),o(!S&&!$?"Dashboard server unreachable.":null)}).catch(S=>{y||o(S.message||"Dashboard server unreachable.")}).finally(()=>{y||f(!1)}),()=>{y=!0}},[]),l.useEffect(()=>{g!=null&&g.theme&&(Te(g.theme),Ae(g.theme))},[g==null?void 0:g.theme]),l.useEffect(()=>{var A;if(((A=g==null?void 0:g.theme)==null?void 0:A.mode)!=="system")return;const y=window.matchMedia("(prefers-color-scheme: light)"),S=()=>{g!=null&&g.theme&&(Te(g.theme),Ae(g.theme))};return y.addEventListener("change",S),()=>y.removeEventListener("change",S)},[g==null?void 0:g.theme]),l.useEffect(()=>{const y=()=>{E(A=>A+1),I().catch(()=>{})},S=()=>{document.visibilityState==="visible"&&y()};return window.addEventListener("online",y),window.addEventListener("pageshow",y),document.addEventListener("visibilitychange",S),()=>{window.removeEventListener("online",y),window.removeEventListener("pageshow",y),document.removeEventListener("visibilitychange",S)}},[I]),l.useEffect(()=>{const y=new We,S=y.on(A=>{if(A.type==="snapshot"&&"data"in A&&A.data)b($=>({...$??{},...A.data}));else if(A.type==="change")I().catch(()=>{});else if(A.type==="tasks:change"){const $=A.task;b(U=>{if(!U)return U;const W=(U.tasks||[]).map(Y=>Y.id===$.id?$:Y),ie=W.some(Y=>Y.id===$.id);return{...U,tasks:ie?W:[$,...W]}})}else A.type==="tasks:delete"?b($=>$&&{...$,tasks:($.tasks||[]).filter(U=>U.id!==A.id)}):A.type==="settings:change"?A.settings&&h(A.settings):A.type==="project:change"||A.type==="agents:change"||A.type==="schedules:change"||A.type==="artifact:change"?I().catch(()=>{}):(A.type==="agent:status"||A.type==="agent:restarted")&&b($=>{if(!$)return $;const U=($.agents||[]).map(W=>W.name===A.agent.name?A.agent:W);return{...$,agents:U}})});return()=>{S(),y.close()}},[I,j]);const x=l.useCallback(y=>{(y==="activity"||y==="chat"||y==="tasks"||y==="settings"||y==="more")&&P(y)},[P]),L=l.useCallback((y,S,A)=>{if(y==="notification"){const $=os({link:S||null,meta:A??null});$&&M($);return}if(y==="task"&&S){M({id:"task-detail",taskId:S});return}if(y==="artifacts?"&&S){M({id:"artifacts?-detail",slug:S});return}if(y==="agent"&&S){M({id:"agent-detail",name:S});return}if(y==="project"){P("activity");return}y==="setting"&&P("settings")},[P,M]),w=()=>{if(!a||!g)return null;if(n.length>0){const y=n[n.length-1];switch(y.id){case"artifacts?":return e.jsx(Ot,{snapshot:a,onBack:D,onOpenArtifact:S=>M({id:"artifacts?-detail",slug:S})});case"agents":return e.jsx(ze,{snapshot:a,onBack:D,onOpenAgent:S=>M({id:"agent-detail",name:S}),onRefresh:I});case"skills":return e.jsx(Zt,{snapshot:a,onBack:D});case"mods":return e.jsx(zt,{snapshot:a,onBack:D});case"schedules":return e.jsx(_t,{snapshot:a,onBack:D});case"history":return e.jsx(Lt,{onBack:D});case"config":return e.jsx($t,{onBack:D});case"artifacts?-detail":return e.jsx(It,{slug:y.slug,onBack:D});case"agent-detail":return e.jsx(ze,{snapshot:a,onBack:D,onOpenAgent:()=>{},onRefresh:I,selectedAgent:y.name});case"task-detail":return e.jsx(Oe,{snapshot:a,onRefresh:I,selectedTaskId:y.taskId,onCloseDetail:D,onOpenChat:S=>{v(S),P("chat")}});default:return null}}switch(s){case"activity":return e.jsx(Tt,{snapshot:a,onRefresh:I});case"chat":return e.jsx(l.Suspense,{fallback:e.jsx("div",{className:"mobile-loading",children:e.jsx(ce,{size:"lg"})}),children:e.jsx(ls,{snapshot:a,settings:g,initialTaskId:p,onClearTaskId:()=>v(null)})});case"tasks":return e.jsx(Oe,{snapshot:a,onRefresh:I,onOpenChat:y=>{v(y),P("chat")}});case"settings":return e.jsx(l.Suspense,{fallback:e.jsx("div",{className:"mobile-loading",children:e.jsx(ce,{size:"lg"})}),children:e.jsx(is,{settings:g,snapshot:a,onRefresh:I})});case"more":return e.jsx(Rt,{snapshot:a,onNavigate:y=>{(y==="artifacts?"||y==="agents"||y==="skills"||y==="mods"||y==="schedules"||y==="history"||y==="config")&&M({id:y})}});default:return null}};return N?e.jsxs("div",{className:"mobile-loading",children:[e.jsx(ce,{size:"lg"}),e.jsx("p",{children:"Loading Bizar…"})]}):d||!a||!g?e.jsxs("div",{className:"mobile-loading",children:[e.jsx("h2",{children:"Dashboard unavailable"}),e.jsx("p",{children:d||"Dashboard server unreachable."}),e.jsx("p",{className:"muted",children:"Make sure the Bizar dashboard server is running."})]}):e.jsxs(e.Fragment,{children:[e.jsxs(St,{activeTab:s,onTabChange:x,tabs:Ue,fullTabs:Ue,onExitSettings:()=>P("activity"),onSearch:()=>m(!0),children:[e.jsx(yt,{activeTab:T.id,snapshot:a,onSearch:()=>m(!0),onNavigate:L}),e.jsx("main",{className:"mobile-content",children:w()}),n.length>0&&e.jsx("button",{type:"button",className:"mobile-back-btn",onClick:D,"aria-label":"Go back",children:"← Back"})]}),e.jsx(Qt,{open:i,onClose:()=>m(!1),onNavigate:L})]})}export{Ce as A,fs as M,ce as S,We as W,He as _,C as a,us as b,X as c,Ae as d,bs as e,J as f,Te as g,ut as p,hs as t,ps as w};