vibeteam 0.2.2 → 0.2.4

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.
@@ -0,0 +1 @@
1
+ :root{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.5;font-weight:400;color-scheme:dark;color:#fff;background-color:#0a0a0f;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html,body,#root{margin:0;padding:0;width:100%;height:100%;overflow:hidden}a{font-weight:500;color:#0ff;text-decoration:none}a:hover{color:#0af}button{border-radius:6px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#22222e;color:#fff;cursor:pointer;transition:all .15s ease}button:hover{background-color:#2a2a3a}button:focus,button:focus-visible{outline:2px solid #00ffff;outline-offset:2px}input,textarea{font-family:inherit}.tab-hidden *,.tab-hidden *:before,.tab-hidden *:after{animation-play-state:paused!important}.floating-panel{position:fixed;background:#12121af2;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.08);border-radius:12px;box-shadow:0 8px 32px #0006,0 0 1px #ffffff1a,inset 0 1px #ffffff0d;display:flex;flex-direction:column;overflow:hidden;transition:height .2s ease,box-shadow .15s ease}.floating-panel.dragging{transition:none;box-shadow:0 12px 48px #00000080,0 0 1px #00ffff4d,inset 0 1px #ffffff14}.floating-panel.collapsed{height:auto!important}.floating-panel.maximized{border-radius:8px}.floating-panel-header{display:flex;align-items:center;gap:8px;padding:10px 12px;background:linear-gradient(180deg,rgba(255,255,255,.04) 0%,transparent 100%);border-bottom:1px solid rgba(255,255,255,.06);cursor:grab;-webkit-user-select:none;user-select:none;flex-shrink:0}.floating-panel.dragging .floating-panel-header{cursor:grabbing}.floating-panel-title{font-size:.8rem;font-weight:600;color:#fff;letter-spacing:.3px;flex-shrink:0}.floating-panel-header-content{flex:1;display:flex;align-items:center;gap:8px;min-width:0}.floating-panel-controls{display:flex;gap:4px;flex-shrink:0}.panel-control-btn{width:24px;height:24px;border:none;border-radius:6px;background:transparent;color:#666;font-size:.75rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s ease}.panel-control-btn:hover{background:#ffffff1a;color:#fff}.panel-control-btn.close:hover{background:#ef44444d;color:#ef4444}.floating-panel-content{flex:1;overflow:hidden;display:flex;flex-direction:column}.resize-handle{position:absolute;z-index:10}.resize-n,.resize-s{height:6px;left:8px;right:8px;cursor:ns-resize}.resize-e,.resize-w{width:6px;top:8px;bottom:8px;cursor:ew-resize}.resize-n{top:0}.resize-s{bottom:0}.resize-e{right:0}.resize-w{left:0}.resize-ne,.resize-nw,.resize-se,.resize-sw{width:12px;height:12px}.resize-ne{top:0;right:0;cursor:nesw-resize}.resize-nw{top:0;left:0;cursor:nwse-resize}.resize-se{bottom:0;right:0;cursor:nwse-resize}.resize-sw{bottom:0;left:0;cursor:nesw-resize}.floating-panel:hover .resize-handle{background:transparent}.floating-panel .resize-se:after{content:"";position:absolute;bottom:3px;right:3px;width:8px;height:8px;border-right:2px solid rgba(255,255,255,.2);border-bottom:2px solid rgba(255,255,255,.2);opacity:0;transition:opacity .15s ease}.floating-panel:hover .resize-se:after{opacity:1}@keyframes panel-appear{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.floating-panel{animation:panel-appear .2s ease}.confirm-modal-overlay{position:fixed;inset:0;background:#000000bf;display:flex;align-items:center;justify-content:center;z-index:1001;animation:confirmFadeIn .15s ease}@keyframes confirmFadeIn{0%{opacity:0}to{opacity:1}}.confirm-modal{background:#1a1a24;border-radius:12px;border:1px solid #2a2a3a;width:90%;max-width:400px;box-shadow:0 8px 32px #00000080;animation:confirmSlideUp .2s ease}@keyframes confirmSlideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.confirm-modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #2a2a3a}.confirm-modal-header h2{margin:0;font-size:1.1rem;font-weight:500;color:#fff}.confirm-modal-close{background:none;border:none;color:#666;font-size:1.5rem;cursor:pointer;padding:0;line-height:1;transition:color .15s ease}.confirm-modal-close:hover{color:#fff}.confirm-modal-content{padding:20px}.confirm-message{margin:0;font-size:.95rem;color:#e0e0e0;line-height:1.5}.confirm-warning{display:flex;align-items:flex-start;gap:10px;margin-top:16px;padding:12px;background:#fbbf241a;border:1px solid rgba(251,191,36,.3);border-radius:8px;font-size:.85rem;color:#fbbf24}.warning-icon{flex-shrink:0}.confirm-modal-actions{display:flex;justify-content:flex-end;gap:10px;padding:16px 20px;border-top:1px solid #2a2a3a;background:#22222e;border-radius:0 0 12px 12px}.confirm-btn{padding:10px 20px;border-radius:8px;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .15s ease}.confirm-btn.cancel{background:#2a2a3a;border:1px solid #3a3a4a;color:#e0e0e0}.confirm-btn.cancel:hover{background:#3a3a4a;border-color:#4a4a5a}.confirm-btn.danger{background:#ef444433;border:1px solid #ef4444;color:#ef4444}.confirm-btn.danger:hover{background:#ef44444d}.confirm-btn.primary{background:#0ff3;border:1px solid #00ffff;color:#0ff}.confirm-btn.primary:hover{background:#00ffff4d}.compact-agent-card{position:relative;background:#22222ee6;border-radius:6px;padding:8px 10px;cursor:pointer;border-left:3px solid transparent;transition:all .15s ease;display:flex;flex-direction:column;gap:4px;min-width:0}.compact-agent-card:hover{background:#2a2a3a}.compact-agent-card.selected{background:#2a2a3a;box-shadow:0 0 0 1px #00ffff80}.compact-agent-card.attention{background:#2a2520f2;animation:attention-glow 2s ease-in-out infinite}.compact-agent-card.pinned{background:#282637f2}.card-header{display:flex;align-items:center;gap:6px;min-width:0}.status-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}.compact-agent-card.working .status-dot{animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.agent-name{font-size:.75rem;font-weight:600;color:#fff;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:text}.rename-input{background:#0a0a0f;border:1px solid #00ffff;border-radius:3px;color:#fff;font-size:.75rem;font-weight:600;padding:1px 4px;flex:1;min-width:0;outline:none}.compact-agent-card .project-tag{font-size:.5rem;font-weight:600;padding:1px 4px;border-radius:3px;border:1px solid;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:60px;text-transform:uppercase;letter-spacing:.3px;flex-shrink:0}.card-activity{display:flex;align-items:center;gap:4px;min-width:0}.activity-emoji{font-size:.7rem;flex-shrink:0}.activity-text{font-size:.65rem;color:#aaa;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.phase-tag{font-size:.6rem;flex-shrink:0}.time-tag{font-size:.6rem;color:#666;flex-shrink:0;margin-left:auto}.card-task{font-size:.6rem;color:#60a5fa;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-style:italic;opacity:.9;padding-left:12px}.card-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0}.git-info{display:flex;align-items:center;gap:4px;font-size:.55rem;background:#00000040;border-radius:3px;padding:2px 5px;min-width:0;overflow:hidden}.git-branch{color:#a78bfa;font-family:SF Mono,Monaco,monospace;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:80px}.git-changes{display:flex;align-items:center;gap:2px;flex-shrink:0}.git-added{color:#4ade80}.git-removed{color:#f87171}.cost-tag{font-size:.55rem;font-weight:600;padding:2px 5px;border-radius:3px;background:#ffffff14;flex-shrink:0}.cost-tag.cost-low{color:#4ade80}.cost-tag.cost-medium{color:#fbbf24}.cost-tag.cost-high{color:#fb923c}.cost-tag.cost-very-high{color:#f87171}.card-actions{position:absolute;top:6px;right:6px;display:flex;align-items:center;gap:2px;opacity:0;transition:opacity .15s ease;z-index:10}.compact-agent-card:hover .card-actions,.compact-agent-card.pinned .card-actions,.compact-agent-card.selected .card-actions{opacity:1}.action-btn{padding:4px 6px;border-radius:4px;border:none;font-size:.65rem;cursor:pointer;transition:all .15s ease;background:#00000080;opacity:.7;line-height:1}.action-btn:hover{opacity:1;background:#000000b3}.action-btn.pin-btn{opacity:.5}.action-btn.pin-btn:hover,.action-btn.pin-btn.active{background:#fbbf244d;opacity:1}.action-btn.restart-btn{color:#4ade80}.action-btn.restart-btn:hover{background:#4ade804d}.action-btn.stop-btn{color:#ef4444}.action-btn.stop-btn:hover{background:#ef44444d}.compact-agent-card.task-completed{background:#223c28e6;animation:task-complete-glow 2s ease-in-out infinite}.compact-agent-card.task-completed .activity-text{color:#4ade80}@keyframes task-complete-glow{0%,to{box-shadow:0 0 #4ade8000}50%{box-shadow:0 0 8px 2px #4ade8040}}@keyframes attention-glow{0%,to{box-shadow:0 0 #fbbf2400}50%{box-shadow:0 0 8px 2px #fbbf2440}}.control-panel{display:flex;flex-direction:column;height:100%;overflow:hidden}.control-panel-header{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid rgba(255,255,255,.06)}.header-title{font-size:.8rem;font-weight:600;color:#0ff}.header-count{background:#0ff3;color:#0ff;padding:2px 8px;border-radius:8px;font-size:.65rem;font-weight:500}.header-working{background:#4ade8033;color:#4ade80;padding:2px 8px;border-radius:8px;font-size:.6rem;font-weight:500;margin-left:auto}.header-attention{background:#fbbf2433;color:#fbbf24;padding:2px 8px;border-radius:8px;font-size:.6rem;font-weight:500}.control-panel-content{flex:1;overflow:hidden;display:flex;flex-direction:column}.filter-section{padding:8px 10px;border-bottom:1px solid rgba(255,255,255,.04);display:flex;flex-direction:column;gap:6px}.filter-pills{display:flex;flex-wrap:wrap;gap:4px}.filter-pill{padding:3px 8px;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);border-radius:12px;color:#888;font-size:.65rem;font-weight:500;cursor:pointer;transition:all .15s ease;display:flex;align-items:center;gap:4px}.filter-pill:hover:not(:disabled){background:#ffffff1a;color:#fff}.filter-pill:disabled{opacity:.4;cursor:not-allowed}.filter-pill.active{background:#00ffff26;border-color:#0ff6;color:#0ff}.filter-pill.working{border-color:#4ade804d}.filter-pill.working.active{background:#4ade8026;border-color:#4ade8080;color:#4ade80}.filter-pill.idle{border-color:#60a5fa4d}.filter-pill.idle.active{background:#60a5fa26;border-color:#60a5fa80;color:#60a5fa}.filter-pill.attention{border-color:#fbbf244d}.filter-pill.attention.active{background:#fbbf2426;border-color:#fbbf2480;color:#fbbf24}.filter-pill.offline{border-color:#6b72804d}.filter-pill.offline.active{background:#6b728026;border-color:#6b728080;color:#9ca3af}.pill-count{font-size:.6rem;opacity:.8}.search-input{width:100%;padding:6px 10px;background:#0000004d;border:1px solid rgba(255,255,255,.08);border-radius:6px;color:#fff;font-size:.75rem;outline:none}.search-input:focus{border-color:#0ff6}.search-input::placeholder{color:#555}.agents-list{flex:1;overflow-y:auto;padding:8px;display:grid;grid-template-columns:repeat(2,1fr);gap:6px;align-content:start}.agents-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;text-align:center;color:#888;grid-column:span 2}.agents-empty .empty-icon{font-size:2rem;margin-bottom:8px;opacity:.5}.agents-empty .empty-hint{font-size:.7rem;color:#666;margin-top:4px}.spawn-section{padding:8px 10px;border-top:1px solid rgba(255,255,255,.06)}.new-agent-btn{width:100%;padding:10px;background:linear-gradient(135deg,#00888840,#0055aa40);border:1px solid rgba(0,136,136,.4);border-radius:6px;color:#0ff;font-size:.8rem;font-weight:500;cursor:pointer;transition:all .15s ease}.new-agent-btn:hover{background:linear-gradient(135deg,#00888859,#0055aa59);transform:translateY(-1px)}.spawn-form{display:flex;flex-direction:column;gap:8px}.spawn-form input{width:100%;padding:8px 12px;background:#0000004d;border:1px solid rgba(255,255,255,.1);border-radius:6px;color:#fff;font-size:.8rem;outline:none}.spawn-form input:focus{border-color:#00ffff80}.spawn-form input::placeholder{color:#555}.worktree-options{display:flex;flex-direction:column;gap:6px;padding:6px 0}.worktree-checkbox{display:flex;align-items:center;gap:8px;font-size:.75rem;color:#a78bfa;cursor:pointer}.worktree-checkbox input{width:14px;height:14px;accent-color:#8b5cf6}.worktree-branch{padding:6px 10px!important;font-size:.75rem!important;border-color:#8b5cf64d!important;color:#a78bfa!important}.git-checking{font-size:.7rem;color:#666;font-style:italic}.spawn-buttons{display:flex;gap:8px;margin-top:4px}.spawn-btn{flex:1;padding:8px;background:#00888880;border:none;border-radius:6px;color:#fff;font-size:.8rem;font-weight:500;cursor:pointer;transition:all .15s ease}.spawn-btn:hover{background:#0aa9}.cancel-btn{padding:8px 16px;background:transparent;border:1px solid rgba(255,255,255,.15);border-radius:6px;color:#888;font-size:.8rem;cursor:pointer;transition:all .15s ease}.cancel-btn:hover{background:#ffffff0d;color:#fff}.interactive-modal-backdrop{position:fixed;inset:0;background:#000c;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;z-index:1100}.interactive-modal{background:linear-gradient(135deg,#1a1a2e,#141428);border:1px solid #2a2a4a;border-radius:16px;padding:24px;width:90%;max-width:480px;box-shadow:0 20px 60px #00000080}.interactive-modal-header{text-align:center;margin-bottom:16px}.interactive-modal-header h3{margin:0 0 4px;font-size:1rem;font-weight:600;color:#fff}.interactive-modal-header p{margin:0;font-size:.8rem;color:#888}.interactive-modal-body label{display:flex;flex-direction:column;gap:8px;font-size:.8rem;color:#888}.interactive-modal-body textarea{width:100%;padding:12px;background:#0000004d;border:1px solid rgba(255,255,255,.1);border-radius:8px;color:#fff;font-size:.85rem;font-family:inherit;resize:vertical;min-height:100px;outline:none}.interactive-modal-body textarea:focus{border-color:#06b6d480}.interactive-modal-body textarea::placeholder{color:#555}.interactive-modal-actions{display:flex;gap:12px;margin-top:16px}.modal-cancel-btn{padding:10px 18px;background:transparent;border:1px solid rgba(255,255,255,.15);border-radius:8px;color:#888;font-size:.85rem;cursor:pointer;transition:all .15s ease}.modal-cancel-btn:hover{background:#ffffff0d;color:#fff}.modal-submit-btn{flex:1;padding:10px 18px;background:linear-gradient(135deg,#06b6d4,#0891b2);border:none;border-radius:8px;color:#fff;font-size:.85rem;font-weight:600;cursor:pointer;transition:all .15s ease}.modal-submit-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 15px #06b6d44d}.modal-submit-btn:disabled{opacity:.5;cursor:not-allowed}.template-picker{position:relative;display:inline-flex}.template-picker-btn{width:32px;height:32px;border:1px solid rgba(255,255,255,.15);border-radius:6px;background:#ffffff0d;color:#888;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s ease}.template-picker-btn:hover{background:#ffffff1a;color:#fff;border-color:#ffffff40}.template-picker-btn.active{background:#00ffff26;border-color:#0ff6;color:#0ff}.picker-icon{font-size:1rem;font-weight:600}.template-picker-dropdown{position:absolute;bottom:100%;left:0;margin-bottom:8px;width:280px;max-height:350px;background:#1a1a2e;border:1px solid rgba(255,255,255,.15);border-radius:10px;box-shadow:0 10px 40px #00000080;overflow:hidden;display:flex;flex-direction:column;animation:picker-slide-up .15s ease;z-index:1000}@keyframes picker-slide-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.picker-header{padding:10px;border-bottom:1px solid rgba(255,255,255,.08)}.picker-search{width:100%;padding:8px 12px;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);border-radius:6px;color:#fff;font-size:.85rem;outline:none;transition:border-color .15s ease}.picker-search::placeholder{color:#666}.picker-search:focus{border-color:#0ff6}.picker-list{flex:1;overflow-y:auto;padding:6px}.picker-empty{padding:20px;text-align:center;color:#666;display:flex;flex-direction:column;gap:10px;align-items:center}.picker-create-btn{padding:6px 14px;background:#00ffff1a;border:1px solid rgba(0,255,255,.3);border-radius:6px;color:#0ff;font-size:.75rem;cursor:pointer;transition:all .15s ease}.picker-create-btn:hover{background:#0ff3}.picker-group{margin-bottom:6px}.picker-group-header{padding:6px 10px;font-size:.65rem;font-weight:600;color:#666;text-transform:uppercase;letter-spacing:.5px}.picker-item{width:100%;display:flex;justify-content:space-between;align-items:center;padding:10px 12px;background:transparent;border:none;border-radius:6px;color:#fff;text-align:left;cursor:pointer;transition:background .1s ease}.picker-item:hover{background:#ffffff14}.picker-item-name{font-size:.85rem;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.picker-item-shortcut{font-size:.7rem;color:#0ff;background:#00ffff1a;padding:2px 8px;border-radius:4px;margin-left:8px;flex-shrink:0}.picker-footer{padding:8px;border-top:1px solid rgba(255,255,255,.08)}.picker-manage-btn{width:100%;padding:8px;background:transparent;border:1px solid rgba(255,255,255,.1);border-radius:6px;color:#888;font-size:.75rem;cursor:pointer;transition:all .15s ease}.picker-manage-btn:hover{background:#ffffff0d;color:#fff;border-color:#fff3}.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;inset:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{position:absolute;inset:0;z-index:10;color:transparent;pointer-events:none}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.terminal-wrapper{width:100%;height:100%;position:relative;display:flex;flex-direction:column}.terminal-container{width:100%;flex:1;min-height:0;padding:8px;background:#1a1a2e;border-radius:8px 8px 0 0;overflow:hidden;outline:none}.terminal-toolbar{display:flex;align-items:center;gap:12px;padding:8px 12px;background:#1a1a2ef2;border-top:1px solid rgba(255,255,255,.08);border-radius:0 0 8px 8px}.toolbar-hint{font-size:.7rem;color:#666}.terminal-container:focus{outline:none}.terminal-container .xterm{height:100%}.terminal-container .xterm-viewport{overflow-y:auto!important}.terminal-container .xterm-screen{height:100%}.image-upload-overlay{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 32px;background:#1a1a2ef2;border:1px solid rgba(0,212,255,.3);border-radius:12px;color:#eaeaea;font-size:14px;z-index:10}.image-upload-spinner{width:24px;height:24px;border:2px solid rgba(0,212,255,.3);border-top-color:#00d4ff;border-radius:50%;animation:spin .8s linear infinite}.pending-image-container{position:absolute;bottom:16px;right:16px;width:200px;background:#1a1a2ef2;border:1px solid rgba(0,212,255,.4);border-radius:8px;overflow:hidden;z-index:10;box-shadow:0 4px 20px #0006}.pending-image-header{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;background:#00d4ff1a;border-bottom:1px solid rgba(0,212,255,.2)}.pending-image-label{font-size:11px;font-weight:500;color:#00d4ff;text-transform:uppercase;letter-spacing:.5px}.pending-image-close{background:none;border:none;color:#888;font-size:18px;cursor:pointer;padding:0;line-height:1;transition:color .15s}.pending-image-close:hover{color:#f55}.pending-image-preview{width:100%;height:auto;max-height:150px;object-fit:contain;background:#12121f;display:block}.pending-image-path{padding:8px 12px;font-size:10px;color:#888;font-family:Menlo,Monaco,Courier New,monospace;word-break:break-all;background:#0003}.pending-image-hint{padding:8px 12px;font-size:11px;color:#50fa7b;text-align:center;border-top:1px solid rgba(0,212,255,.1)}.template-manager-overlay{position:fixed;inset:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.template-manager-modal{background:#1a1a24;border-radius:12px;border:1px solid #2a2a3a;width:90%;max-width:700px;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 4px 20px #00000080}.template-manager-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #2a2a3a}.template-manager-header h2{margin:0;font-size:1.1rem;font-weight:500;color:#fff}.template-manager-close{background:none;border:none;color:#666;font-size:1.5rem;cursor:pointer;padding:0;line-height:1;transition:color .15s ease}.template-manager-close:hover{color:#fff}.template-manager-content{display:flex;flex:1;min-height:0;overflow:hidden}.template-tabs{display:flex;border-bottom:1px solid #2a2a3a;padding:0 16px}.template-tab{background:none;border:none;padding:12px 16px;color:#666;font-size:.85rem;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .15s ease;display:flex;align-items:center;gap:8px}.template-tab:hover:not(:disabled){color:#aaa}.template-tab.active{color:#0ff;border-bottom-color:#0ff}.template-tab:disabled{opacity:.5;cursor:not-allowed}.template-tab-count{background:#2a2a3a;padding:2px 6px;border-radius:10px;font-size:.7rem;color:#888}.template-tab.active .template-tab-count{background:#0883;color:#0ff}.template-loading{display:flex;align-items:center;justify-content:center;padding:40px;color:#666;font-size:.9rem;width:100%}.template-no-project{display:flex;align-items:center;justify-content:center;padding:40px;color:#555;font-size:.9rem;text-align:center;width:100%}.template-list-section{width:250px;border-right:1px solid #2a2a3a;display:flex;flex-direction:column}.template-list-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #2a2a3a;font-size:.85rem;color:#888}.template-add-btn{background:#0885;border:none;border-radius:4px;padding:4px 10px;color:#0ff;font-size:.75rem;cursor:pointer;transition:all .15s ease}.template-add-btn:hover:not(:disabled){background:#0aa;color:#fff}.template-add-btn:disabled{opacity:.5;cursor:not-allowed}.template-list{flex:1;overflow-y:auto;padding:8px}.template-list-empty{padding:20px 16px;text-align:center;color:#555;font-size:.85rem}.template-list-item{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;border-radius:6px;cursor:pointer;transition:all .15s ease;margin-bottom:4px}.template-list-item:hover{background:#22222e}.template-list-item.active{background:#0883;border:1px solid #00888855}.template-item-info{display:flex;flex-direction:column;gap:2px;min-width:0}.template-item-name{font-size:.85rem;color:#e0e0e0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.template-item-shortcut{font-size:.7rem;color:#0ff8;font-family:SF Mono,Fira Code,monospace}.template-delete-btn{background:none;border:none;color:#666;font-size:1.1rem;cursor:pointer;padding:2px 6px;opacity:0;transition:all .15s ease}.template-list-item:hover .template-delete-btn{opacity:1}.template-delete-btn:hover{color:#ef4444}.template-form-section{flex:1;padding:16px 20px;overflow-y:auto}.template-form-section h3{margin:0 0 16px;font-size:1rem;font-weight:500;color:#fff}.template-form{display:flex;flex-direction:column;gap:16px}.form-group{display:flex;flex-direction:column;gap:6px}.form-group label{font-size:.8rem;color:#888}.form-group input,.form-group textarea{background:#0a0a0f;border:1px solid #2a2a3a;border-radius:6px;padding:10px 12px;font-size:.9rem;color:#fff;font-family:inherit;transition:border-color .15s ease}.form-group input:focus,.form-group textarea:focus{outline:none;border-color:#0ff5}.form-group input::placeholder,.form-group textarea::placeholder{color:#555}.form-group textarea{resize:vertical;min-height:120px;font-family:SF Mono,Fira Code,monospace;font-size:.85rem;line-height:1.5}.template-error{color:#ef4444;font-size:.8rem;padding:8px 12px;background:#ef44441a;border-radius:6px}.template-form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:8px}.template-cancel-btn{background:transparent;border:1px solid #333;border-radius:6px;padding:8px 16px;color:#888;font-size:.85rem;cursor:pointer;transition:all .15s ease}.template-cancel-btn:hover{border-color:#555;color:#fff}.template-save-btn{background:#0888;border:none;border-radius:6px;padding:8px 16px;color:#fff;font-size:.85rem;font-weight:500;cursor:pointer;transition:all .15s ease}.template-save-btn:hover{background:#0aa}.chat-panel{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;background:#1a1a24;position:relative}.chat-panel.empty{align-items:center;justify-content:center}.chat-empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;color:#666}.chat-empty-icon{font-size:2rem;opacity:.5}.chat-header{padding:12px 16px;border-bottom:1px solid #2a2a3a;background:#22222e;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.chat-agent-info,.chat-header-right{display:flex;align-items:center;gap:8px}.chat-agent-color{width:10px;height:10px;border-radius:50%}.chat-agent-name{font-weight:500;color:#fff}.chat-agent-status{font-size:.75rem;padding:2px 8px;border-radius:10px;background:#333;color:#888}.chat-agent-status.working{background:#4ade8033;color:#4ade80}.chat-agent-status.needs_attention,.chat-agent-status.waiting{background:#fbbf2433;color:#fbbf24;animation:attention-pulse 1.5s ease-in-out infinite}.chat-agent-status.error{background:#ef444433;color:#ef4444}@keyframes attention-pulse{0%,to{background:#fbbf2433;box-shadow:0 0 #fbbf2400}50%{background:#fbbf2455;box-shadow:0 0 8px 2px #fbbf244d}}.chat-project-tag{font-size:.7rem;font-weight:600;padding:2px 8px;border-radius:4px;border:1px solid;text-transform:uppercase;letter-spacing:.3px;white-space:nowrap;max-width:120px;overflow:hidden;text-overflow:ellipsis}.chat-current-task{margin-top:6px;font-size:.75rem;color:#888;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-agent-cost{font-size:.75rem;font-weight:500;padding:2px 8px;border-radius:10px;cursor:help}.chat-agent-cost.cost-low{background:#4ade8026;color:#4ade80}.chat-agent-cost.cost-medium{background:#fbbf2426;color:#fbbf24}.chat-agent-cost.cost-high{background:#fb923c26;color:#fb923c}.chat-agent-cost.cost-very-high{background:#f8717126;color:#f87171}.terminal-view{flex:1;min-height:0;overflow:hidden;background:#1a1a2e}.terminal-empty{display:flex;align-items:center;justify-content:center;height:100%;color:#555;font-size:.85rem}.template-manager-btn{padding:4px 10px;font-size:.7rem;background:#222;border:1px solid #333;border-radius:6px;color:#888;cursor:pointer;transition:all .15s ease}.template-manager-btn:hover{background:#333;color:#fff;border-color:#444}.floating-chat-panel .floating-panel-content{display:flex;flex-direction:column}.floating-chat-panel .chat-panel{background:transparent;border:none;border-radius:0;height:100%}.floating-chat-panel .chat-panel.empty{height:100%}.floating-chat-header-info{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.floating-chat-header-info .agent-color-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.floating-chat-header-info .agent-name{font-size:.8rem;font-weight:500;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.floating-chat-header-info .agent-status{font-size:.65rem;padding:2px 6px;border-radius:4px;text-transform:capitalize;flex-shrink:0}.floating-chat-header-info .agent-status.idle{background:#60a5fa33;color:#60a5fa}.floating-chat-header-info .agent-status.working{background:#4ade8033;color:#4ade80}.floating-chat-header-info .agent-status.needs_attention,.floating-chat-header-info .agent-status.waiting{background:#fbbf2433;color:#fbbf24}.floating-chat-header-info .agent-status.stopped,.floating-chat-header-info .agent-status.offline{background:#6b728033;color:#6b7280}.floating-chat-header-info .agent-status.error{background:#ef444433;color:#ef4444}.floating-chat-panel .chat-header{background:linear-gradient(180deg,rgba(255,255,255,.02) 0%,transparent 100%);border-bottom:1px solid rgba(255,255,255,.06);padding:8px 12px}.floating-chat-panel .terminal-view{border-radius:0 0 8px 8px}.floating-chat-panel .chat-empty-state{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px}.floating-chat-panel .chat-empty-icon{font-size:3rem;margin-bottom:12px;opacity:.5}.project-state-panel{display:flex;flex-direction:column;height:100%;color:#e0e0e0;font-size:.85rem}.project-state-empty,.project-state-loading,.project-state-error{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:20px;text-align:center;color:#888}.empty-icon,.error-icon{font-size:2rem;margin-bottom:12px}.empty-hint{font-size:.75rem;color:#666;margin-top:4px}.loading-spinner{width:24px;height:24px;border:2px solid #333;border-top-color:#0ff;border-radius:50%;animation:spin 1s linear infinite;margin-bottom:12px}@keyframes spin{to{transform:rotate(360deg)}}.retry-btn{margin-top:12px;padding:6px 16px;background:#0ff2;border:1px solid #00ffff44;border-radius:6px;color:#0ff;cursor:pointer;font-size:.8rem;transition:all .15s ease}.retry-btn:hover{background:#0ff3;border-color:#0ff6}.state-tabs{display:flex;gap:4px;padding:8px;border-bottom:1px solid #2a2a3a;background:#0003}.state-tab{padding:6px 12px;background:transparent;border:none;border-radius:6px;color:#888;font-size:.8rem;cursor:pointer;transition:all .15s ease;display:flex;align-items:center;gap:6px}.state-tab:hover{background:#ffffff0d;color:#aaa}.state-tab.active{background:#00ffff1a;color:#0ff}.tab-badge{padding:2px 6px;border-radius:10px;font-size:.7rem;font-weight:600}.tab-badge.warning{background:#fa03;color:#fa0}.refresh-btn{margin-left:auto;padding:6px 10px;background:transparent;border:1px solid #333;border-radius:6px;color:#888;cursor:pointer;font-size:.85rem;transition:all .15s ease}.refresh-btn:hover:not(:disabled){background:#ffffff0d;color:#aaa;border-color:#444}.refresh-btn:disabled{opacity:.5;cursor:not-allowed}.state-content{flex:1;overflow-y:auto;padding:12px}.overview-tab{display:flex;flex-direction:column;gap:12px}.state-card{background:#0000004d;border:1px solid #2a2a3a;border-radius:8px;overflow:hidden}.card-header{display:flex;align-items:center;gap:8px;padding:10px 12px;background:#0003;border-bottom:1px solid #2a2a3a}.card-icon{font-size:1rem}.card-title{font-weight:600;color:#fff;font-size:.85rem}.card-content{padding:12px}.branch-info{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.branch-name{font-family:SF Mono,Consolas,monospace;font-size:.85rem;color:#fff}.sync-badge{padding:3px 8px;border-radius:12px;font-size:.7rem;font-weight:600;text-transform:uppercase}.sync-badge.success{background:#00c86433;color:#00c864}.sync-badge.info{background:#00c8ff33;color:#00c8ff}.sync-badge.warning{background:#fa03;color:#fa0}.sync-badge.error{background:#ff505033;color:#ff5050}.sync-badge.neutral{background:#80808033;color:#888}.sync-details{display:flex;gap:12px;font-size:.75rem;color:#888;margin-bottom:8px}.sync-details .ahead{color:#00c8ff}.sync-details .behind{color:#fa0}.uncommitted-changes{margin-bottom:8px}.warning-text{color:#fa0;font-size:.8rem}.last-commit{display:flex;flex-direction:column;gap:4px;padding-top:8px;border-top:1px solid #2a2a3a}.commit-sha{font-family:SF Mono,Consolas,monospace;font-size:.75rem;color:#888}.commit-message{font-size:.8rem;color:#aaa;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.health-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.health-item{display:flex;flex-direction:column;align-items:center;padding:12px;background:#0003;border-radius:8px;border:1px solid #2a2a3a}.health-item.warning{border-color:#fa04;background:#ffaa000d}.health-value{font-size:1.5rem;font-weight:700;color:#fff}.health-item.warning .health-value{color:#fa0}.health-label{font-size:.7rem;color:#888;text-transform:uppercase;margin-top:4px}.worktrees-tab{display:flex;flex-direction:column;gap:12px}.cleanup-banner{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;background:#ffaa001a;border:1px solid #ffaa0044;border-radius:8px}.cleanup-btn{padding:6px 12px;background:#fa02;border:1px solid #ffaa0044;border-radius:6px;color:#fa0;font-size:.75rem;font-weight:600;cursor:pointer;transition:all .15s ease}.cleanup-btn:hover:not(:disabled){background:#fa03;border-color:#fa06}.cleanup-btn:disabled{opacity:.6;cursor:not-allowed}.worktrees-list,.tmux-list{display:flex;flex-direction:column;gap:8px}.empty-list{text-align:center;padding:20px;color:#666;font-size:.8rem}.worktree-item,.tmux-item{padding:10px 12px;background:#0000004d;border:1px solid #2a2a3a;border-radius:8px;transition:all .15s ease}.worktree-item:hover,.tmux-item:hover{background:#0006;border-color:#3a3a4a}.worktree-item.main{border-color:#0ff3;background:#00ffff0d}.worktree-item.orphaned{border-color:#fa04;background:#ffaa000d}.tmux-item.offline{opacity:.6}.worktree-header,.tmux-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.worktree-branch,.tmux-name{font-weight:600;font-size:.85rem;color:#fff}.main-badge,.orphaned-badge,.attached-badge{padding:2px 6px;border-radius:10px;font-size:.65rem;font-weight:600;text-transform:uppercase}.main-badge{background:#0ff3;color:#0ff}.orphaned-badge{background:#fa03;color:#fa0}.attached-badge{background:#64c86433;color:#64c864}.worktree-details{display:flex;align-items:center;justify-content:space-between;font-size:.75rem;color:#888;margin-bottom:4px}.worktree-path,.cwd-path{font-family:SF Mono,Consolas,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.worktree-commit{font-family:SF Mono,Consolas,monospace;color:#666}.worktree-agent,.tmux-agent{display:flex;align-items:center;gap:6px;font-size:.8rem;color:#0ff}.agent-indicator{font-size:.7rem}.tmux-tab{display:flex;flex-direction:column;gap:8px}.tmux-status{font-size:.75rem}.tmux-status.active{color:#64c864}.tmux-status.offline{color:#888}.tmux-cwd{font-size:.75rem;color:#888;margin-top:4px}.tmux-meta{display:flex;gap:6px;margin-top:6px}.project-state-panel-floating .floating-panel-content{padding:0}.kanban-editor-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:2000}.kanban-editor{background:#141423fa;border:1px solid rgba(255,255,255,.12);border-radius:12px;width:420px;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 12px 48px #00000080}.kanban-editor.expanded{width:900px;max-height:85vh}.kanban-editor-header{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid rgba(255,255,255,.08);flex-shrink:0}.kanban-editor-header h3{font-size:14px;font-weight:600;color:#ffffffe6;margin:0}.kanban-editor-close{background:none;border:none;color:#fff6;cursor:pointer;font-size:16px;padding:2px 6px;border-radius:4px}.kanban-editor-close:hover{color:#fffc;background:#ffffff14}.kanban-editor-layout{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.kanban-editor-layout.two-panel{flex-direction:row}.kanban-editor-left-panel{flex:0 0 420px;min-width:0;display:flex;flex-direction:column;min-height:0;overflow:hidden}.kanban-editor-layout.two-panel .kanban-editor-left-panel{border-right:1px solid rgba(255,255,255,.08)}.kanban-editor-right-panel{flex:1;min-width:0;display:flex;flex-direction:column;max-height:calc(85vh - 52px)}.kanban-editor-body{padding:14px 16px;display:flex;flex-direction:column;gap:12px;flex:1;overflow-y:auto;min-height:0}.kanban-editor-label{display:flex;flex-direction:column;gap:4px;font-size:11px;font-weight:500;color:#ffffff80}.kanban-editor-input,.kanban-editor-textarea,.kanban-editor-select{background:#ffffff0d;border:1px solid rgba(255,255,255,.1);border-radius:6px;color:#ffffffe6;font-size:13px;padding:8px 10px;outline:none;transition:border-color .15s;font-family:inherit}.kanban-editor-input:focus,.kanban-editor-textarea:focus,.kanban-editor-select:focus{border-color:#60a5fa80}.kanban-editor-textarea{resize:vertical;min-height:60px}.kanban-editor-select{cursor:pointer}.kanban-editor-select option{background:#1a1a2e;color:#fff}.kanban-editor-row{display:flex;gap:12px}.kanban-editor-row .kanban-editor-label{flex:1}.kanban-editor-footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px;border-top:1px solid rgba(255,255,255,.08);flex-shrink:0}.kanban-editor-btn{padding:7px 16px;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;transition:all .15s;border:none}.kanban-editor-btn.cancel{background:#ffffff0f;color:#fff9}.kanban-editor-btn.cancel:hover{background:#ffffff1a;color:#fffc}.kanban-editor-btn.save{background:#60a5fa33;color:#60a5fa;border:1px solid rgba(96,165,250,.3)}.kanban-editor-btn.save:hover{background:#60a5fa4d}.kanban-editor-btn.save:disabled{opacity:.4;cursor:not-allowed}.kanban-editor-btn.ship{background:#4ade8026;color:#4ade80;border:1px solid rgba(74,222,128,.3)}.kanban-editor-btn.ship:hover{background:#4ade8040}.kanban-editor-btn.request-changes{background:#fbbf2426;color:#fbbf24;border:1px solid rgba(251,191,36,.3)}.kanban-editor-btn.request-changes:hover:not(:disabled){background:#fbbf2440}.kanban-editor-btn.request-changes:disabled{opacity:.4;cursor:not-allowed}.plan-file-tabs{display:flex;gap:2px;padding:8px 12px;border-bottom:1px solid rgba(255,255,255,.08);flex-shrink:0}.plan-file-tab{padding:5px 12px;border:none;background:#ffffff0a;color:#ffffff80;font-size:11px;font-weight:500;border-radius:4px;cursor:pointer;transition:all .15s}.plan-file-tab:hover{background:#ffffff14;color:#ffffffb3}.plan-file-tab.active{background:#60a5fa26;color:#60a5fa}.plan-file-tabs-empty{font-size:11px;color:#ffffff4d;padding:5px 0}.plan-file-content{flex:1;overflow-y:auto;padding:12px;min-height:0}.plan-file-placeholder,.plan-file-loading{color:#ffffff4d;font-size:12px;text-align:center;padding:40px 16px}.plan-file-text{font-family:SF Mono,Fira Code,Cascadia Code,monospace;font-size:11px;line-height:1.5;color:#fffc;white-space:pre-wrap;word-break:break-word;margin:0}.pipeline-log{background:#ffffff08;border:1px solid rgba(255,255,255,.06);border-radius:6px;padding:8px 10px}.pipeline-log-header{font-size:10px;font-weight:600;color:#fff6;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}.pipeline-log-entry{display:flex;align-items:baseline;gap:6px;padding:3px 0;font-size:11px;line-height:1.4}.pipeline-log-phase{color:#60a5facc;font-weight:500;flex-shrink:0;text-transform:capitalize}.pipeline-log-summary{color:#fff9;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pipeline-log-time{color:#ffffff40;flex-shrink:0;font-size:10px}.plan-file-markdown{font-size:13px;line-height:1.6;color:#fffc}.plan-file-markdown h1{font-size:16px;font-weight:700;color:#fffffff2;margin:0 0 8px;padding-bottom:6px;border-bottom:1px solid rgba(255,255,255,.1)}.plan-file-markdown h2{font-size:14px;font-weight:600;color:#ffffffe6;margin:16px 0 6px;padding-bottom:4px;border-bottom:1px solid rgba(255,255,255,.06)}.plan-file-markdown h3{font-size:13px;font-weight:600;color:#ffffffd9;margin:12px 0 4px}.plan-file-markdown h4{font-size:12px;font-weight:600;color:#fffc;margin:10px 0 4px}.plan-file-markdown p{margin:0 0 10px}.plan-file-markdown ul,.plan-file-markdown ol{margin:0 0 10px;padding-left:20px}.plan-file-markdown li{margin-bottom:4px}.plan-file-markdown li>ul,.plan-file-markdown li>ol{margin-top:4px;margin-bottom:0}.plan-file-markdown pre{background:#0000004d;border-radius:6px;padding:10px 12px;overflow-x:auto;margin:0 0 10px}.plan-file-markdown pre code{font-family:SF Mono,Fira Code,Cascadia Code,monospace;font-size:11px;line-height:1.5;color:#ffffffd9;background:none;padding:0;border-radius:0}.plan-file-markdown code{font-family:SF Mono,Fira Code,Cascadia Code,monospace;font-size:11px;background:#ffffff14;padding:1px 5px;border-radius:3px;color:#ffffffe6}.plan-file-markdown table{width:100%;border-collapse:collapse;margin:0 0 10px;font-size:12px}.plan-file-markdown th{background:#ffffff0f;font-weight:600;color:#ffffffd9;text-align:left;padding:6px 8px;border:1px solid rgba(255,255,255,.08)}.plan-file-markdown td{padding:5px 8px;border:1px solid rgba(255,255,255,.06);color:#ffffffb3}.plan-file-markdown tr:nth-child(2n) td{background:#ffffff05}.plan-file-markdown blockquote{margin:0 0 10px;padding:6px 12px;border-left:3px solid rgba(96,165,250,.4);color:#fff9}.plan-file-markdown strong{font-weight:600;color:#fffffff2}.plan-file-markdown em{font-style:italic}.plan-file-markdown a{color:#60a5fa;text-decoration:none}.plan-file-markdown a:hover{text-decoration:underline}.plan-file-markdown hr{border:none;border-top:1px solid rgba(255,255,255,.08);margin:12px 0}.plan-file-markdown img{max-width:100%;border-radius:4px}.pipeline-info{background:#a78bfa0d;border:1px solid rgba(167,139,250,.12);border-radius:6px;padding:8px 10px}.pipeline-info-header{font-size:10px;font-weight:600;color:#fff6;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}.pipeline-info-row{display:flex;align-items:center;gap:6px;padding:3px 0;font-size:11px}.pipeline-info-label{color:#fff6;font-weight:500;flex-shrink:0;width:60px}.pipeline-info-value{color:#a78bfad9;font-family:SF Mono,Fira Code,Cascadia Code,monospace;font-size:10px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pipeline-info-copy{background:none;border:none;color:#ffffff4d;cursor:pointer;font-size:12px;padding:2px 4px;border-radius:3px;flex-shrink:0;transition:all .15s}.pipeline-info-copy:hover{color:#ffffffb3;background:#ffffff14}.worktree-status-badge{display:flex;align-items:center;gap:5px;font-size:11px;color:#fff9}.worktree-status-dot{width:7px;height:7px;border-radius:50%;display:inline-block}.worktree-status-dot.active{background:#4ade80}.worktree-status-dot.cleaned{background:#6b7280}.pipeline-cleanup-section{margin-top:8px;padding-top:8px;border-top:1px solid rgba(255,255,255,.06)}.pipeline-cleanup-btn{background:#f59e0b1a;border:1px solid rgba(245,158,11,.2);border-radius:6px;color:#f59e0be6;font-size:11px;padding:5px 10px;cursor:pointer;width:100%;transition:all .15s}.pipeline-cleanup-btn:hover{background:#f59e0b2e;border-color:#f59e0b59}.pipeline-cleanup-confirm{padding:8px;background:#f59e0b0f;border:1px solid rgba(245,158,11,.15);border-radius:6px}.pipeline-cleanup-warning{font-size:11px;color:#f59e0be6;line-height:1.4;margin-bottom:8px}.pipeline-cleanup-checkbox{display:flex;align-items:center;gap:6px;font-size:11px;color:#fff9;cursor:pointer;margin-bottom:8px}.pipeline-cleanup-checkbox input[type=checkbox]{width:13px;height:13px;cursor:pointer}.pipeline-cleanup-actions{display:flex;gap:6px;justify-content:flex-end}.pipeline-cleanup-cancel{background:#ffffff0f;border:1px solid rgba(255,255,255,.1);border-radius:4px;color:#fff9;font-size:11px;padding:4px 10px;cursor:pointer}.pipeline-cleanup-cancel:hover{background:#ffffff1a;color:#fffc}.pipeline-cleanup-delete{background:#ef444426;border:1px solid rgba(239,68,68,.3);border-radius:4px;color:#ef4444;font-size:11px;padding:4px 10px;cursor:pointer}.pipeline-cleanup-delete:hover{background:#ef444440}.pipeline-cleanup-delete:disabled{opacity:.5;cursor:not-allowed}.kanban-ship-actions{display:flex;align-items:center;gap:6px;margin-right:auto}.ship-branch-selector{display:flex;align-items:center;gap:4px}.ship-branch-selector label{font-size:10px;color:#fff6;white-space:nowrap}.ship-branch-select{background:#ffffff0d;border:1px solid rgba(255,255,255,.1);border-radius:4px;color:#fffc;font-size:11px;padding:4px 6px;outline:none;max-width:160px;font-family:SF Mono,Fira Code,Cascadia Code,monospace}.ship-branch-select:focus{border-color:#4ade8066}.ship-branch-select option{background:#1a1a2e;color:#fff}.plan-json-viewer{display:flex;flex-direction:column;gap:10px}.plan-json-header{background:#60a5fa14;border:1px solid rgba(96,165,250,.15);border-radius:6px;padding:10px 12px}.plan-json-title{font-size:14px;font-weight:600;color:#ffffffe6;margin-bottom:4px}.plan-json-summary{font-size:12px;color:#fff9;line-height:1.5}.plan-json-meta{font-size:11px;color:#60a5facc;margin-top:6px;font-weight:500}.kanban-editor.drag-over{border-color:#60a5fa80;box-shadow:0 12px 48px #00000080,0 0 0 2px #60a5fa33}.image-attachments-section{display:flex;flex-direction:column;gap:6px}.image-attachments-header{display:flex;align-items:center;gap:8px}.image-count-badge{font-size:10px;font-weight:500;color:#60a5fae6;background:#60a5fa1f;padding:1px 8px;border-radius:10px}.image-drop-zone{border:1.5px dashed rgba(255,255,255,.15);border-radius:6px;padding:14px;display:flex;align-items:center;justify-content:center;min-height:48px;cursor:pointer;transition:all .15s;background:#ffffff05}.image-drop-zone:hover{border-color:#ffffff40;background:#ffffff0a}.image-drop-zone.drag-over{border-color:#60a5fa99;background:#60a5fa14}.image-drop-zone-text{font-size:11px;color:#ffffff59;-webkit-user-select:none;user-select:none}.image-upload-error{font-size:11px;color:#ef4444;padding:4px 0}.image-preview-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px}.image-preview-item{position:relative;border:1px solid rgba(255,255,255,.08);border-radius:6px;overflow:hidden;background:#ffffff08}.image-preview-item img{width:100%;height:72px;object-fit:cover;display:block}.image-preview-icon-fallback{position:absolute;top:0;left:0;width:100%;height:72px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:#ffffff4d;background:#ffffff08;z-index:0}.image-preview-item img[style*="display: none"]+.image-preview-icon-fallback{z-index:1}.image-preview-remove{position:absolute;top:3px;right:3px;width:18px;height:18px;border-radius:50%;background:#000000b3;border:none;color:#fffc;font-size:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s;z-index:2}.image-preview-item:hover .image-preview-remove{opacity:1}.image-preview-remove:hover{background:#ef4444cc;color:#fff}.image-preview-info{padding:4px 6px;display:flex;flex-direction:column;gap:1px}.image-preview-name{font-size:10px;color:#fff9;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.image-preview-size{font-size:9px;color:#ffffff4d}.image-preview-item.uploading{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100px}.image-upload-spinner{width:20px;height:20px;border:2px solid rgba(255,255,255,.1);border-top-color:#60a5fab3;border-radius:50%;animation:image-spin .6s linear infinite}@keyframes image-spin{to{transform:rotate(360deg)}}.kanban-panel{display:flex;flex-direction:column;height:100%;overflow:hidden}.kanban-toolbar{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid rgba(255,255,255,.06);flex-shrink:0}.kanban-add-btn{background:#ffffff14;border:1px solid rgba(255,255,255,.1);border-radius:6px;color:#fffc;padding:5px 12px;font-size:12px;cursor:pointer;transition:all .15s}.kanban-add-btn:hover{background:#ffffff1f;color:#fff}.kanban-empty-state{display:flex;align-items:center;justify-content:center;height:100%;color:#fff6;font-size:13px}.kanban-columns{display:flex;gap:8px;padding:8px;overflow-x:auto;overflow-y:hidden;flex:1;min-height:0}.kanban-columns::-webkit-scrollbar{height:6px}.kanban-columns::-webkit-scrollbar-track{background:#ffffff05}.kanban-columns::-webkit-scrollbar-thumb{background:#ffffff1a;border-radius:3px}.kanban-column{display:flex;flex-direction:column;min-width:180px;max-width:240px;flex:1;background:#ffffff05;border-radius:8px;border:1px solid rgba(255,255,255,.04);transition:border-color .2s}.kanban-column.drag-over{border-color:#ffffff26;background:#ffffff0a}.kanban-column-header{display:flex;align-items:center;gap:6px;padding:8px 10px;flex-shrink:0;position:relative}.kanban-column-color-bar{position:absolute;top:0;left:0;right:0;height:2px;border-radius:8px 8px 0 0}.kanban-column-icon{font-size:12px}.kanban-column-title{font-size:11px;font-weight:600;color:#ffffffb3;text-transform:uppercase;letter-spacing:.5px}.kanban-column-count{margin-left:auto;font-size:10px;color:#fff6;background:#ffffff0f;padding:1px 6px;border-radius:8px}.kanban-column-content{flex:1;overflow-y:auto;padding:4px 6px 6px;display:flex;flex-direction:column;gap:6px;min-height:40px}.kanban-column-content::-webkit-scrollbar{width:4px}.kanban-column-content::-webkit-scrollbar-thumb{background:#ffffff14;border-radius:2px}.kanban-column-empty{display:flex;align-items:center;justify-content:center;height:60px;color:#fff3;font-size:11px;border:1px dashed rgba(255,255,255,.08);border-radius:6px}.kanban-task-card{background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:8px;padding:8px 10px;cursor:grab;transition:all .15s;touch-action:none}.kanban-task-card:hover{background:#ffffff0f;border-color:#ffffff1f}.kanban-task-card.dragging{opacity:.4}.kanban-task-card.drag-overlay{background:#1e1e32f2;border:1px solid rgba(255,255,255,.15);box-shadow:0 8px 32px #0006;cursor:grabbing}.kanban-task-header{display:flex;align-items:flex-start;gap:6px}.kanban-task-title{font-size:12px;font-weight:500;color:#ffffffe6;flex:1;line-height:1.3;word-break:break-word}.kanban-task-priority{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:3px}.kanban-task-desc{font-size:11px;color:#ffffff73;margin:4px 0 0;line-height:1.4}.kanban-task-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.kanban-task-tag{font-size:9px;background:#ffffff0f;color:#ffffff80;padding:1px 6px;border-radius:4px}.kanban-task-footer{display:flex;align-items:center;justify-content:space-between;margin-top:6px}.kanban-task-meta{display:flex;align-items:center;gap:6px}.kanban-task-agent{display:flex;align-items:center;gap:4px;font-size:10px;color:#ffffff80}.kanban-task-agent .agent-dot{width:6px;height:6px;border-radius:50%;background:#6b7280}.kanban-task-agent .agent-dot.working{background:#4ade80}.kanban-task-agent .agent-dot.idle{background:#60a5fa}.kanban-task-agent .agent-dot.needs_attention{background:#fbbf24}.kanban-task-agent .agent-dot.error{background:#ef4444}.kanban-task-review{font-size:12px}.kanban-task-actions{display:flex;gap:2px;opacity:0;transition:opacity .15s}.kanban-task-card:hover .kanban-task-actions{opacity:1}.kanban-task-action-btn{background:none;border:none;color:#fff6;cursor:pointer;font-size:11px;padding:2px 4px;border-radius:4px;transition:all .15s}.kanban-task-action-btn:hover{color:#fffc;background:#ffffff14}.kanban-task-action-btn.delete:hover{color:#ef4444}.kanban-task-action-btn.kanban-task-plan-btn:hover{color:#60a5fa;background:#60a5fa1f}.kanban-task-feedback{margin-top:6px;padding:4px 8px;border-radius:4px;font-size:10px;line-height:1.3}.kanban-task-feedback.passed{background:#4ade801a;color:#4ade80cc;border:1px solid rgba(74,222,128,.15)}.kanban-task-feedback.failed{background:#ef44441a;color:#ef4444cc;border:1px solid rgba(239,68,68,.15)}.kanban-task-feedback.pending{background:#22d3d81a;color:#22d3d8cc;border:1px solid rgba(34,211,216,.15)}.kanban-task-notes{margin-top:6px;padding:4px 8px;border-radius:4px;font-size:10px;background:#fbbf241a;color:#fbbf24cc;border:1px solid rgba(251,191,36,.15);line-height:1.3}.kanban-assign-overlay{position:fixed;inset:0;z-index:1000}.kanban-assign-dropdown{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#141423fa;border:1px solid rgba(255,255,255,.12);border-radius:8px;padding:4px;min-width:200px;box-shadow:0 8px 32px #00000080}.kanban-assign-header{font-size:11px;font-weight:600;color:#fff9;padding:6px 8px;border-bottom:1px solid rgba(255,255,255,.06);margin-bottom:2px}.kanban-assign-option{display:flex;align-items:center;gap:8px;width:100%;background:none;border:none;color:#fffc;font-size:12px;padding:6px 8px;border-radius:4px;cursor:pointer;text-align:left}.kanban-assign-option:hover{background:#ffffff14}.kanban-assign-option .agent-dot{width:8px;height:8px;border-radius:50%;background:#6b7280}.kanban-task-branch{display:flex;align-items:center;gap:4px;margin-top:4px;padding:2px 6px;background:#a78bfa14;border:1px solid rgba(167,139,250,.15);border-radius:4px;font-size:9px;color:#a78bfacc;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:SF Mono,Fira Code,Cascadia Code,monospace}.kanban-task-branch-icon{font-size:10px;flex-shrink:0}.kanban-task-worktree-path{cursor:pointer;max-width:100%}.kanban-task-worktree-path:hover{background:#a78bfa26;color:#a78bfa}.kanban-pipeline-status{display:flex;align-items:center;gap:4px;margin-top:6px;padding:4px 6px;background:#60a5fa0f;border:1px solid rgba(96,165,250,.1);border-radius:6px}.kanban-pipeline-status.failed{background:#ef44440f;border-color:#ef44441a}.pipeline-phase{display:flex;align-items:center;gap:2px;font-size:10px;color:#ffffff4d;position:relative}.pipeline-phase.completed{color:#4ade80b3}.pipeline-phase.running{color:#60a5fae6}.pipeline-phase.failed{color:#ef4444cc}.pipeline-phase-icon{font-size:11px;line-height:1}.pipeline-spinner{width:8px;height:8px;border:1.5px solid rgba(96,165,250,.3);border-top-color:#60a5fae6;border-radius:50%;animation:pipeline-spin .8s linear infinite}@keyframes pipeline-spin{to{transform:rotate(360deg)}}.pipeline-error-hint{font-size:10px;font-weight:700;color:#ef4444;margin-left:2px}.kanban-task-cancel-pipeline-btn:hover{color:#ef4444!important;background:#ef44441f!important}.kanban-task-cleanup-btn{font-size:10px!important}.kanban-task-cleanup-btn:hover{color:#f59e0b!important;background:#f59e0b1f!important}.worktree-cleanup-confirm{margin-top:6px;padding:8px;background:#f59e0b0f;border:1px solid rgba(245,158,11,.15);border-radius:6px}.worktree-cleanup-warning{font-size:10px;color:#f59e0be6;line-height:1.4;margin-bottom:6px}.worktree-cleanup-checkbox{display:flex;align-items:center;gap:6px;font-size:10px;color:#fff9;cursor:pointer;margin-bottom:6px}.worktree-cleanup-checkbox input[type=checkbox]{width:12px;height:12px;cursor:pointer}.worktree-cleanup-actions{display:flex;gap:6px;justify-content:flex-end}.worktree-cleanup-cancel{background:#ffffff0f;border:1px solid rgba(255,255,255,.1);border-radius:4px;color:#fff9;font-size:10px;padding:3px 8px;cursor:pointer}.worktree-cleanup-cancel:hover{background:#ffffff1a;color:#fffc}.worktree-cleanup-confirm-btn{background:#ef444426;border:1px solid rgba(239,68,68,.3);border-radius:4px;color:#ef4444;font-size:10px;padding:3px 8px;cursor:pointer}.worktree-cleanup-confirm-btn:hover{background:#ef444440}.worktree-cleanup-confirm-btn:disabled{opacity:.5;cursor:not-allowed}.kanban-panel-floating{z-index:100}.kanban-panel-floating .floating-panel-content{padding:0}.kanban-panel-floating .kanban-panel{border-radius:0;background:transparent}.project-settings-overlay{position:fixed;inset:0;background:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000}.project-settings-modal{background:#1a1a24;border:1px solid rgba(255,255,255,.1);border-radius:12px;width:90%;max-width:480px;max-height:90vh;overflow-y:auto;box-shadow:0 8px 32px #00000080}.project-settings-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid rgba(255,255,255,.1)}.project-settings-header h2{margin:0;font-size:18px;font-weight:600;color:#fff}.project-settings-header .close-btn{background:none;border:none;color:#ffffff80;font-size:24px;cursor:pointer;padding:0;line-height:1}.project-settings-header .close-btn:hover{color:#fff}.project-settings-modal form{padding:20px}.project-settings-error{background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:6px;padding:10px 12px;color:#ef4444;font-size:13px;margin-bottom:16px}.project-settings-field{margin-bottom:20px}.project-settings-field label{display:block;font-size:13px;font-weight:500;color:#ffffffb3;margin-bottom:6px}.project-settings-field input[type=text]{width:100%;padding:10px 12px;background:#0000004d;border:1px solid rgba(255,255,255,.1);border-radius:8px;color:#fff;font-size:14px;font-family:inherit;transition:border-color .15s ease}.project-settings-field input[type=text]:focus{outline:none;border-color:#0ff}.project-settings-field input[type=text]::placeholder{color:#ffffff4d}.field-hint{display:block;margin-top:4px;font-size:11px;color:#fff6}.path-input-row{display:flex;gap:8px}.path-input-row input[type=text]{flex:1}.browse-btn{padding:10px 16px;background:#ffffff0d;border:1px solid rgba(255,255,255,.15);border-radius:8px;color:#fffc;font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease;white-space:nowrap}.browse-btn:hover:not(:disabled){background:#ffffff1a;border-color:#ffffff40;color:#fff}.browse-btn:disabled{opacity:.5;cursor:wait}.checkbox-field label{display:flex;align-items:center;gap:8px;cursor:pointer}.checkbox-field input[type=checkbox]{width:16px;height:16px;accent-color:#00ffff}.theme-picker{display:flex;gap:8px;flex-wrap:wrap}.theme-option{display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px;background:#0003;border:2px solid rgba(255,255,255,.1);border-radius:8px;cursor:pointer;transition:all .15s ease;min-width:70px}.theme-option:hover{background:#0000004d;border-color:#fff3}.theme-option.selected{border-color:var(--theme-accent);box-shadow:0 0 12px rgba(var(--theme-accent-rgb, 0, 255, 255),.3)}.theme-preview{width:36px;height:36px;background:var(--theme-bg);border-radius:6px;display:flex;align-items:center;justify-content:center}.theme-preview-hex{width:20px;height:20px;background:var(--theme-grid);clip-path:polygon(50% 0%,100% 25%,100% 75%,50% 100%,0% 75%,0% 25%);border:1px solid var(--theme-accent)}.theme-name{font-size:11px;color:#fff9}.theme-option.selected .theme-name{color:var(--theme-accent)}.theme-preview-full{background:var(--preview-bg);border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:16px;margin-bottom:20px;position:relative}.preview-hex-grid{width:100%;height:60px}.preview-hex-grid svg{width:100%;height:100%}.preview-label{position:absolute;bottom:4px;right:8px;font-size:10px;color:#ffffff4d;text-transform:uppercase;letter-spacing:.5px}.project-settings-actions{display:flex;gap:12px;justify-content:flex-end;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.1)}.project-settings-actions button{padding:10px 20px;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:all .15s ease}.cancel-btn{background:#ffffff0d;border:1px solid rgba(255,255,255,.1);color:#ffffffb3}.cancel-btn:hover{background:#ffffff1a;color:#fff}.save-btn{background:linear-gradient(135deg,#0ff,#0cc);border:none;color:#000}.save-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 12px #00ffff4d}.save-btn:disabled{opacity:.5;cursor:not-allowed}.theme-option.custom-option{border-style:dashed}.theme-option.custom-option .theme-preview-hex{background:linear-gradient(135deg,var(--theme-grid) 0%,var(--theme-accent) 100%)}.custom-colors{margin-top:12px;padding:12px;background:#0003;border-radius:8px;display:flex;flex-direction:column;gap:10px}.color-picker-row{display:flex;align-items:center;gap:10px}.color-picker-row label{width:80px;font-size:12px;color:#fff9;margin-bottom:0}.color-picker-row input[type=color]{width:36px;height:28px;padding:0;border:none;border-radius:4px;cursor:pointer;background:transparent}.color-picker-row input[type=color]::-webkit-color-swatch-wrapper{padding:2px}.color-picker-row input[type=color]::-webkit-color-swatch{border-radius:4px;border:1px solid rgba(255,255,255,.2)}.color-text-input{flex:1;padding:6px 10px!important;font-family:monospace!important;font-size:12px!important;text-transform:lowercase}.claude-settings-overlay{position:fixed;inset:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.claude-settings-modal{background:#1a1a24;border-radius:12px;border:1px solid #2a2a3a;width:90%;max-width:600px;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 4px 20px #00000080}.claude-settings-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #2a2a3a}.claude-settings-header h2{margin:0;font-size:1.1rem;font-weight:500;color:#fff;display:flex;align-items:center;gap:8px}.claude-settings-icon{font-size:1.2rem;color:#0ff}.claude-settings-close{background:none;border:none;color:#666;font-size:1.5rem;cursor:pointer;padding:0;line-height:1;transition:color .15s ease}.claude-settings-close:hover{color:#fff}.claude-settings-content{flex:1;padding:20px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}.claude-settings-loading{text-align:center;color:#666;padding:40px}.claude-settings-section-header{display:flex;justify-content:space-between;align-items:center;font-size:.85rem;color:#888;margin-bottom:4px}.claude-settings-preset-btn{background:linear-gradient(135deg,#7c3aed,#2563eb);border:none;border-radius:4px;padding:6px 12px;color:#fff;font-size:.75rem;font-weight:500;cursor:pointer;transition:all .15s ease}.claude-settings-preset-btn:hover{background:linear-gradient(135deg,#8b5cf6,#3b82f6);transform:translateY(-1px)}.claude-settings-list{display:flex;flex-direction:column;gap:8px}.claude-settings-list-header{display:grid;grid-template-columns:1fr 1.5fr 60px;gap:12px;padding:0 4px 8px;font-size:.75rem;color:#666;text-transform:uppercase;letter-spacing:.5px}.claude-settings-empty{text-align:center;color:#555;padding:24px;font-size:.9rem}.claude-settings-row{display:grid;grid-template-columns:1fr 1.5fr 60px;gap:12px;align-items:center}.claude-settings-key-input{background:#0a0a0f;border:1px solid #2a2a3a;border-radius:6px;padding:10px 12px;font-size:.85rem;color:#0ff;font-family:SF Mono,Fira Code,monospace;transition:border-color .15s ease}.claude-settings-key-input:focus{outline:none;border-color:#0ff5}.claude-settings-key-input::placeholder{color:#444}.claude-settings-value-wrapper{display:flex;position:relative}.claude-settings-value-input{flex:1;background:#0a0a0f;border:1px solid #2a2a3a;border-radius:6px;padding:10px 40px 10px 12px;font-size:.85rem;color:#fff;font-family:SF Mono,Fira Code,monospace;transition:border-color .15s ease}.claude-settings-value-input:focus{outline:none;border-color:#0ff5}.claude-settings-value-input::placeholder{color:#444}.claude-settings-toggle-btn{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:none;border:none;padding:4px;cursor:pointer;font-size:.9rem;opacity:.5;transition:opacity .15s ease}.claude-settings-toggle-btn:hover{opacity:1}.claude-settings-delete-btn{background:none;border:1px solid #333;border-radius:6px;color:#666;font-size:1.2rem;cursor:pointer;padding:6px 12px;transition:all .15s ease}.claude-settings-delete-btn:hover{border-color:#ef4444;color:#ef4444}.claude-settings-add-btn{background:#0883;border:1px dashed #00888888;border-radius:6px;padding:12px;color:#0ff;font-size:.85rem;cursor:pointer;transition:all .15s ease}.claude-settings-add-btn:hover{background:#0885;border-style:solid}.claude-settings-info{display:flex;align-items:flex-start;gap:8px;padding:12px;background:#00c8ff1a;border-radius:6px;font-size:.8rem;color:#999;line-height:1.4}.claude-settings-info-icon{font-size:.9rem;flex-shrink:0;color:#0af}.claude-settings-error{color:#ef4444;font-size:.85rem;padding:10px 12px;background:#ef44441a;border-radius:6px}.claude-settings-footer{display:flex;justify-content:flex-end;gap:10px;padding:16px 20px;border-top:1px solid #2a2a3a}.claude-settings-cancel-btn{background:transparent;border:1px solid #333;border-radius:6px;padding:10px 20px;color:#888;font-size:.85rem;cursor:pointer;transition:all .15s ease}.claude-settings-cancel-btn:hover{border-color:#555;color:#fff}.claude-settings-save-btn{background:#0888;border:none;border-radius:6px;padding:10px 20px;color:#fff;font-size:.85rem;font-weight:500;cursor:pointer;transition:all .15s ease}.claude-settings-save-btn:hover:not(:disabled){background:#0aa}.claude-settings-save-btn:disabled{opacity:.5;cursor:not-allowed}.setup-page{position:fixed;inset:0;background:#030712;overflow-y:auto;overflow-x:hidden}.setup-bg{position:fixed;inset:0;overflow:hidden;pointer-events:none}.gradient-orb{position:absolute;border-radius:50%;filter:blur(80px);opacity:.5;animation:float 20s ease-in-out infinite}.orb-1{width:600px;height:600px;background:radial-gradient(circle,rgba(0,255,255,.3) 0%,transparent 70%);top:-200px;left:-200px;animation-delay:0s}.orb-2{width:500px;height:500px;background:radial-gradient(circle,rgba(139,92,246,.25) 0%,transparent 70%);bottom:-150px;right:-150px;animation-delay:-7s}.orb-3{width:400px;height:400px;background:radial-gradient(circle,rgba(236,72,153,.2) 0%,transparent 70%);top:50%;left:50%;transform:translate(-50%,-50%);animation-delay:-14s}@keyframes float{0%,to{transform:translate(0) scale(1)}25%{transform:translate(30px,-30px) scale(1.05)}50%{transform:translate(-20px,20px) scale(.95)}75%{transform:translate(20px,30px) scale(1.02)}}.grid-lines{position:absolute;inset:0;opacity:.03}.grid-line{position:absolute;background:linear-gradient(90deg,transparent,rgba(0,255,255,.5),transparent)}.grid-line.horizontal{height:1px;width:100%;top:calc(var(--index) * 5%);animation:grid-pulse 4s ease-in-out infinite;animation-delay:calc(var(--index) * .1s)}.grid-line.vertical{width:1px;height:100%;left:calc(var(--index) * 3.33%);background:linear-gradient(180deg,transparent,rgba(0,255,255,.5),transparent);animation:grid-pulse 4s ease-in-out infinite;animation-delay:calc(var(--index) * .15s)}@keyframes grid-pulse{0%,to{opacity:.3}50%{opacity:1}}.floating-hex{position:absolute;left:var(--x);top:var(--y);color:#00ffff1a;animation:hex-float 12s ease-in-out infinite;animation-delay:var(--delay)}@keyframes hex-float{0%,to{transform:translateY(0) rotate(0);opacity:.1}50%{transform:translateY(-30px) rotate(180deg);opacity:.2}}.setup-container{position:relative;z-index:1;min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:40px 20px 100px}.welcome-view{width:100%;max-width:1000px;animation:fade-up .8s ease-out}@keyframes fade-up{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.hero-section{text-align:center;padding:60px 0 80px}.logo-container{display:flex;align-items:center;justify-content:center;gap:16px;margin-bottom:32px;position:relative}.logo-glow{position:absolute;width:120px;height:120px;background:radial-gradient(circle,rgba(0,255,255,.4) 0%,transparent 70%);filter:blur(30px);animation:logo-pulse 3s ease-in-out infinite}@keyframes logo-pulse{0%,to{opacity:.5;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}.logo-hex{width:64px;height:64px;position:relative;animation:logo-spin 20s linear infinite}.logo-hex svg{width:100%;height:100%}.logo-hex polygon{fill:#00ffff1a;stroke:#0ff;stroke-width:2;filter:drop-shadow(0 0 10px rgba(0,255,255,.5))}@keyframes logo-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.logo-text{font-size:2.5rem;font-weight:700;background:linear-gradient(135deg,#0ff,#a855f7,#ec4899);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;letter-spacing:-.02em}.hero-title{font-size:clamp(2rem,5vw,3.5rem);font-weight:700;color:#fff;margin:0 0 20px;line-height:1.2}.gradient-text{background:linear-gradient(135deg,#0ff,#a855f7);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.hero-subtitle{font-size:1.125rem;color:#fff9;max-width:600px;margin:0 auto 40px;line-height:1.7}.hero-cta{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}.cta-primary{display:flex;align-items:center;gap:10px;padding:16px 32px;background:linear-gradient(135deg,#0ff,#0cc);border:none;border-radius:12px;color:#000;font-size:1rem;font-weight:600;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden}.cta-primary:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,transparent 0%,rgba(255,255,255,.3) 100%);opacity:0;transition:opacity .3s ease}.cta-primary:hover{transform:translateY(-2px);box-shadow:0 8px 30px #0ff6}.cta-primary:hover:before{opacity:1}.cta-primary svg{width:20px;height:20px;transition:transform .3s ease}.cta-primary:hover svg{transform:translate(4px)}.cta-secondary{display:flex;align-items:center;gap:10px;padding:16px 28px;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);border-radius:12px;color:#fffc;font-size:1rem;font-weight:500;text-decoration:none;cursor:pointer;transition:all .3s ease}.cta-secondary:hover{background:#ffffff1a;border-color:#fff3;color:#fff}.cta-secondary svg{width:20px;height:20px}.features-section{padding:40px 0}.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px}.feature-card{background:#ffffff08;border:1px solid rgba(255,255,255,.06);border-radius:16px;padding:28px;transition:all .4s ease;animation:card-appear .6s ease-out backwards;animation-delay:calc(var(--index) * .1s)}@keyframes card-appear{0%{opacity:0;transform:translateY(20px)}}.feature-card:hover{background:#ffffff0f;border-color:#0ff3;transform:translateY(-4px);box-shadow:0 12px 40px #00ffff1a}.feature-icon{font-size:2rem;margin-bottom:16px;display:inline-block;animation:icon-bounce 2s ease-in-out infinite;animation-delay:calc(var(--index) * .2s)}@keyframes icon-bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}.feature-card h3{margin:0 0 8px;font-size:1.1rem;font-weight:600;color:#fff}.feature-card p{margin:0;font-size:.9rem;color:#ffffff80;line-height:1.6}.install-section{padding:60px 0;text-align:center}.install-section h2{font-size:1.75rem;font-weight:600;color:#fff;margin:0 0 40px}.install-steps{display:flex;flex-direction:column;gap:24px;max-width:600px;margin:0 auto 40px}.install-step{display:flex;gap:20px;text-align:left;padding:20px;background:#ffffff05;border:1px solid rgba(255,255,255,.05);border-radius:12px;transition:all .3s ease}.install-step:hover{background:#ffffff0a;border-color:#00ffff26}.step-badge{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#0ff3,#8b5cf633);border:1px solid rgba(0,255,255,.3);border-radius:10px;font-size:1rem;font-weight:700;color:#0ff;flex-shrink:0}.step-content{flex:1;min-width:0}.step-content h3{margin:0 0 8px;font-size:1rem;font-weight:600;color:#fff}.step-content p{margin:0;font-size:.9rem;color:#ffffff80}.step-note{margin-top:8px!important;font-size:.8rem!important;color:#fff6!important;font-style:italic}.code-box{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#0006;border:1px solid rgba(255,255,255,.1);border-radius:8px;overflow-x:auto}.code-box code{flex:1;font-family:SF Mono,Monaco,Consolas,monospace;font-size:.85rem;color:#0ff;white-space:nowrap}.copy-btn{padding:6px 10px;background:#ffffff1a;border:none;border-radius:6px;color:#fff9;font-size:.9rem;cursor:pointer;transition:all .2s ease;flex-shrink:0}.copy-btn:hover{background:#ffffff26;color:#fff}.connect-btn{position:relative;padding:18px 48px;background:linear-gradient(135deg,#00ffff1a,#8b5cf61a);border:1px solid rgba(0,255,255,.3);border-radius:14px;font-size:1.1rem;font-weight:600;color:#fff;cursor:pointer;overflow:hidden;transition:all .4s ease}.connect-btn .btn-glow{position:absolute;inset:-2px;background:linear-gradient(135deg,#0ff,#a855f7,#ec4899,#0ff);background-size:400% 400%;border-radius:16px;z-index:-1;opacity:0;animation:glow-rotate 3s linear infinite;transition:opacity .4s ease}@keyframes glow-rotate{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}.connect-btn:hover{transform:translateY(-2px);border-color:transparent}.connect-btn:hover .btn-glow{opacity:1}.connect-btn .btn-text{position:relative;z-index:1}.configure-view{display:flex;align-items:center;justify-content:center;min-height:80vh;animation:fade-up .5s ease-out}.config-card{width:100%;max-width:440px;background:#ffffff08;border:1px solid rgba(255,255,255,.08);border-radius:20px;overflow:hidden;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}.config-header{display:flex;align-items:flex-start;gap:16px;padding:24px 28px;border-bottom:1px solid rgba(255,255,255,.06)}.back-btn{padding:10px;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);border-radius:10px;color:#fff9;cursor:pointer;transition:all .2s ease}.back-btn:hover{background:#ffffff1a;color:#fff}.back-btn svg{width:18px;height:18px;display:block}.config-title h2{margin:0 0 4px;font-size:1.25rem;font-weight:600;color:#fff}.config-title p{margin:0;font-size:.9rem;color:#ffffff80}.config-form{padding:28px}.input-group{margin-bottom:20px}.input-group label{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:.9rem;font-weight:500;color:#ffffffb3}.input-group label svg{width:16px;height:16px;opacity:.5}.input-group input{width:100%;padding:14px 16px;background:#0000004d;border:1px solid rgba(255,255,255,.1);border-radius:10px;color:#fff;font-size:1rem;font-family:inherit;transition:all .2s ease}.input-group input:focus{outline:none;border-color:#0ff;box-shadow:0 0 0 3px #00ffff1a}.input-group input::placeholder{color:#ffffff4d}.connection-url{padding:16px;background:#00ffff0d;border:1px solid rgba(0,255,255,.15);border-radius:10px;margin-bottom:24px}.url-label{display:block;font-size:.75rem;color:#fff6;text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}.url-value{font-family:SF Mono,Monaco,Consolas,monospace;font-size:.95rem}.url-value .protocol{color:#fff6}.url-value .host{color:#0ff}.url-value .separator{color:#fff6}.url-value .port{color:#a855f7}.test-btn{width:100%;padding:16px;background:linear-gradient(135deg,#0ff,#0cc);border:none;border-radius:12px;color:#000;font-size:1rem;font-weight:600;cursor:pointer;transition:all .3s ease}.test-btn:hover{transform:translateY(-2px);box-shadow:0 8px 25px #00ffff59}.test-btn .btn-content{display:flex;align-items:center;justify-content:center;gap:10px}.test-btn svg{width:20px;height:20px}.testing-view,.success-view,.error-view{display:flex;align-items:center;justify-content:center;min-height:80vh}.testing-card,.success-card,.error-card{text-align:center;padding:60px 40px;background:#ffffff08;border:1px solid rgba(255,255,255,.08);border-radius:20px;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);animation:fade-up .5s ease-out}.testing-animation{position:relative;width:100px;height:100px;margin:0 auto 30px}.signal-ring{position:absolute;inset:0;border:2px solid rgba(0,255,255,.3);border-radius:50%;animation:signal-expand 2s ease-out infinite}.signal-ring.delay-1{animation-delay:.4s}.signal-ring.delay-2{animation-delay:.8s}@keyframes signal-expand{0%{transform:scale(.5);opacity:1}to{transform:scale(1.5);opacity:0}}.signal-icon{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#0ff}.signal-icon svg{width:40px;height:40px;animation:signal-pulse 1s ease-in-out infinite}@keyframes signal-pulse{0%,to{opacity:.5}50%{opacity:1}}.testing-card h2,.success-card h2,.error-card h2{margin:0 0 8px;font-size:1.5rem;font-weight:600;color:#fff}.testing-card p,.success-card p{margin:0;font-size:.95rem;color:#ffffff80}.success-animation{position:relative;width:100px;height:100px;margin:0 auto 30px}.success-ring{position:absolute;inset:0;border:3px solid #4ade80;border-radius:50%;animation:success-pop .5s ease-out}@keyframes success-pop{0%{transform:scale(0);opacity:0}50%{transform:scale(1.1)}to{transform:scale(1);opacity:1}}.success-check{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#4ade80}.success-check svg{width:50px;height:50px;stroke-dasharray:50;stroke-dashoffset:50;animation:check-draw .5s ease-out .3s forwards}@keyframes check-draw{to{stroke-dashoffset:0}}.error-animation{position:relative;width:100px;height:100px;margin:0 auto 30px}.error-ring{position:absolute;inset:0;border:3px solid #ef4444;border-radius:50%;animation:error-shake .5s ease-out}@keyframes error-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-5px)}40%,80%{transform:translate(5px)}}.error-icon{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#ef4444}.error-icon svg{width:50px;height:50px}.error-msg{color:#ef4444!important;margin-bottom:24px!important}.troubleshoot-tips{text-align:left;padding:20px;background:#ffffff08;border-radius:12px;margin-bottom:24px}.troubleshoot-tips h3{margin:0 0 16px;font-size:.85rem;font-weight:600;color:#fff9;text-transform:uppercase;letter-spacing:.5px}.troubleshoot-tips ul{list-style:none;margin:0;padding:0}.troubleshoot-tips li{display:flex;align-items:center;gap:12px;padding:10px 0;font-size:.9rem;color:#ffffffb3;border-bottom:1px solid rgba(255,255,255,.05)}.troubleshoot-tips li:last-child{border-bottom:none}.troubleshoot-tips li svg{width:18px;height:18px;color:#fff6;flex-shrink:0}.test-backend-link{margin-top:16px;padding-top:16px;border-top:1px solid rgba(255,255,255,.08);display:flex;flex-direction:column;gap:8px}.test-backend-link a{display:inline-flex;align-items:center;gap:8px;color:#00d4ff;text-decoration:none;font-weight:500;font-size:.9rem;transition:color .2s ease}.test-backend-link a:hover{color:#0ff}.test-backend-link a svg{width:16px;height:16px}.test-hint{font-size:.8rem;color:#fff6}.browser-note{margin-top:16px;padding:12px;background:#ffc80014;border:1px solid rgba(255,200,0,.2);border-radius:8px;display:flex;align-items:flex-start;gap:10px;font-size:.85rem;color:#ffffffb3}.browser-note svg{width:18px;height:18px;color:#ffc800;flex-shrink:0;margin-top:2px}.browser-note strong{color:#ffffffe6}.retry-btn{display:inline-flex;align-items:center;gap:10px;padding:14px 28px;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);border-radius:10px;color:#fffc;font-size:1rem;font-weight:500;cursor:pointer;transition:all .2s ease}.retry-btn:hover{background:#ffffff1a;color:#fff}.retry-btn svg{width:18px;height:18px}.auto-connect-container{position:fixed;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:10}.pulse-ring{position:absolute;width:120px;height:120px;border:2px solid rgba(0,255,255,.3);border-radius:50%;animation:pulse-expand 2s ease-out infinite}.pulse-ring.delay-1{animation-delay:.5s}.pulse-ring.delay-2{animation-delay:1s}@keyframes pulse-expand{0%{transform:scale(.8);opacity:1}to{transform:scale(2);opacity:0}}.hex-spinner{width:80px;height:80px;position:relative;animation:hex-spin 3s linear infinite}.hex-spinner svg{width:100%;height:100%}.hex-spinner polygon{fill:#00ffff1a;stroke:#0ff;stroke-width:2;filter:drop-shadow(0 0 15px rgba(0,255,255,.5))}@keyframes hex-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.auto-connect-text{margin-top:30px;font-size:1rem;color:#fff9;animation:text-pulse 1.5s ease-in-out infinite}@keyframes text-pulse{0%,to{opacity:.6}50%{opacity:1}}.setup-footer{position:fixed;bottom:0;left:0;right:0;padding:20px;text-align:center;font-size:.85rem;color:#fff6;background:linear-gradient(to top,rgba(3,7,18,.9),transparent)}.setup-footer .divider{margin:0 12px}.setup-footer a{color:#ffffff80;text-decoration:none;transition:color .2s ease}.setup-footer a:hover{color:#0ff}@media(max-width:768px){.setup-container{padding:30px 16px 100px}.hero-section{padding:40px 0 60px}.logo-text{font-size:2rem}.hero-title{font-size:1.75rem}.hero-subtitle{font-size:1rem}.hero-cta{flex-direction:column}.cta-primary,.cta-secondary{width:100%;justify-content:center}.features-grid{grid-template-columns:1fr}.config-card,.testing-card,.success-card,.error-card{margin:0 16px}}.disconnected-overlay{position:fixed;top:0;left:0;right:0;z-index:1500;display:flex;justify-content:center;pointer-events:none}.disconnected-banner{margin-top:16px;background:#ef444426;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(239,68,68,.3);border-radius:12px;overflow:hidden;pointer-events:auto;transition:all .2s ease;min-width:320px}.disconnected-banner.expanded{min-width:400px}.banner-main{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;cursor:pointer;transition:background .15s ease}.banner-main:hover{background:#ef44441a}.banner-status{display:flex;align-items:center;gap:10px;color:#ef4444;font-size:13px;font-weight:500}.pulse-dot{width:8px;height:8px;background:#ef4444;border-radius:50%;animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.8)}}.banner-actions{display:flex;align-items:center;gap:12px}.reconnecting{font-size:12px;color:#ffffff80}.expand-btn{background:none;border:none;color:#fff6;font-size:10px;cursor:pointer;padding:4px;transition:color .15s ease}.expand-btn:hover{color:#fffc}.banner-details{padding:0 16px 16px;border-top:1px solid rgba(239,68,68,.2);margin-top:0}.detail-row{display:flex;align-items:center;gap:8px;padding:10px 0;border-bottom:1px solid rgba(255,255,255,.05)}.detail-row:last-of-type{border-bottom:none}.detail-label{font-size:12px;color:#ffffff80;min-width:100px}.detail-row code{font-family:SF Mono,Monaco,Consolas,monospace;font-size:12px;color:#fffc}.status-reconnecting{font-size:12px;color:#fbbf24}.detail-actions{padding-top:12px}.reconfigure-btn{width:100%;padding:10px 16px;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);border-radius:6px;color:#fffc;font-size:13px;cursor:pointer;transition:all .15s ease}.reconfigure-btn:hover{background:#ffffff1a;border-color:#fff3;color:#fff}.usage-display{display:flex;flex-direction:column;background:#0009;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:8px 12px;cursor:pointer;transition:all .2s ease;min-width:140px}.usage-display:hover{background:#000000b3;border-color:#fff3}.usage-display.expanded{min-width:220px}.usage-display.loading,.usage-display.error{min-width:auto;padding:8px}.usage-icon{font-size:14px}.usage-compact{display:flex;align-items:center;gap:8px}.usage-label{font-size:11px;color:#ffffff80;text-transform:uppercase;letter-spacing:.5px}.usage-bar-container{flex:1;height:6px;background:#ffffff1a;border-radius:3px;overflow:hidden}.usage-bar{height:100%;border-radius:3px;transition:width .3s ease,background-color .3s ease}.usage-percent{font-size:12px;font-weight:600;min-width:36px;text-align:right}.usage-details{margin-top:10px;padding-top:10px;border-top:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;gap:8px}.usage-row{display:flex;align-items:center;gap:8px}.usage-row-label{font-size:11px;color:#fff9;min-width:45px}.usage-row-bar-container{flex:1;height:4px;background:#ffffff1a;border-radius:2px;overflow:hidden}.usage-row-bar{height:100%;border-radius:2px;transition:width .3s ease}.usage-row-value{font-size:11px;font-weight:600;color:#fffc;min-width:30px;text-align:right}.usage-row-reset{font-size:10px;color:#fff6;min-width:50px;text-align:right}.usage-refresh{margin-top:4px;padding:4px 8px;background:#ffffff1a;border:none;border-radius:4px;color:#fff9;font-size:10px;cursor:pointer;transition:all .15s ease}.usage-refresh:hover{background:#fff3;color:#fff}.usage-display.compact{min-width:auto;padding:6px 8px}.usage-display.compact .usage-compact{gap:6px}.usage-display.compact .usage-percent{font-size:11px;min-width:28px}.usage-display.compact.expanded{min-width:auto;position:relative}.usage-display.compact .usage-details{position:absolute;left:calc(100% + 8px);bottom:0;min-width:220px;background:#0f0f19f2;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:10px 12px;margin-top:0;z-index:60}.notification-settings-backdrop{position:fixed;inset:0;z-index:200;display:flex;align-items:flex-end;justify-content:flex-start;padding-left:var(--sidebar-current-width, 200px);padding-bottom:80px}.notification-settings-panel{background:#12121cf2;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid rgba(255,255,255,.1);border-radius:12px;width:280px;margin-left:12px;box-shadow:0 8px 32px #00000080;animation:notif-settings-in .15s ease-out}@keyframes notif-settings-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.notification-settings-header{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid rgba(255,255,255,.06)}.notification-settings-header h3{margin:0;font-size:.85rem;font-weight:600;color:#ccc}.notification-settings-close{background:transparent;border:none;color:#666;font-size:1.2rem;cursor:pointer;padding:0 4px;line-height:1;transition:color .15s ease}.notification-settings-close:hover{color:#fff}.notification-settings-body{padding:10px 14px 14px;display:flex;flex-direction:column;gap:10px}.notification-setting-row{display:flex;align-items:center;justify-content:space-between;gap:10px}.notification-setting-row.volume-row{flex-direction:column;align-items:stretch;gap:6px}.notification-setting-label{display:flex;align-items:center;gap:6px;font-size:.8rem;color:#aaa;white-space:nowrap}.notification-setting-icon{font-size:.9rem}.volume-value{margin-left:auto;color:#666;font-size:.75rem;font-variant-numeric:tabular-nums}.notification-toggle{position:relative;width:36px;height:20px;border-radius:10px;border:1px solid rgba(255,255,255,.15);background:#ffffff14;cursor:pointer;transition:all .2s ease;flex-shrink:0;padding:0}.notification-toggle.on{background:#00ffff40;border-color:#0ff6}.notification-toggle-thumb{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#666;transition:all .2s ease}.notification-toggle.on .notification-toggle-thumb{left:18px;background:#0ff;box-shadow:0 0 6px #0ff6}.notification-volume-slider{-webkit-appearance:none;appearance:none;width:100%;height:4px;border-radius:2px;background:#ffffff1a;outline:none;cursor:pointer}.notification-volume-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:#0ff;box-shadow:0 0 6px #0ff6;cursor:pointer;transition:box-shadow .15s ease}.notification-volume-slider::-webkit-slider-thumb:hover{box-shadow:0 0 10px #0ff9}.notification-volume-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#0ff;border:none;box-shadow:0 0 6px #0ff6;cursor:pointer}.notification-previews{border-top:1px solid rgba(255,255,255,.06);padding-top:10px;display:flex;flex-direction:column;gap:8px}.notification-previews-label{font-size:.72rem;color:#666;text-transform:uppercase;letter-spacing:.5px}.notification-preview-buttons{display:flex;gap:6px}.notification-preview-btn{flex:1;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);border-radius:6px;padding:5px 4px;font-size:.72rem;color:#888;cursor:pointer;transition:all .15s ease;white-space:nowrap}.notification-preview-btn:hover{color:#0ff;border-color:#00ffff4d;background:#00ffff14}.notification-preview-btn:active{transform:scale(.95)}.app-sidebar{position:fixed;top:0;left:0;bottom:0;width:var(--sidebar-current-width, 200px);background:#0a0a12d9;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-right:1px solid rgba(255,255,255,.06);z-index:50;display:flex;flex-direction:column;transition:width .25s cubic-bezier(.4,0,.2,1);overflow:hidden}.sidebar-logo{display:flex;align-items:center;gap:10px;padding:16px;border-bottom:1px solid rgba(255,255,255,.06);min-height:52px}.sidebar-logo-icon{flex-shrink:0;filter:drop-shadow(0 0 6px rgba(0,255,255,.6))}.sidebar-logo-text{font-size:1.2rem;font-weight:600;background:linear-gradient(135deg,#0ff,#0af);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;white-space:nowrap;opacity:1;transition:opacity .2s ease}.app-sidebar.collapsed .sidebar-logo-text{opacity:0;width:0;overflow:hidden}.sidebar-settings{padding:8px 12px;border-bottom:1px solid rgba(255,255,255,.06)}.sidebar-settings-btn{display:flex;align-items:center;gap:10px;width:100%;background:transparent;border:1px solid transparent;border-radius:8px;padding:8px 10px;font-size:.85rem;color:#888;cursor:pointer;transition:all .15s ease;white-space:nowrap;overflow:hidden}.sidebar-settings-btn:hover{color:#0ff;background:#00ffff14;border-color:#00ffff26}.sidebar-settings-btn .sidebar-btn-icon{flex-shrink:0;font-size:1.1rem;width:20px;text-align:center}.sidebar-settings-btn .sidebar-nav-label{opacity:1;transition:opacity .2s ease}.app-sidebar.collapsed .sidebar-settings-btn .sidebar-nav-label{opacity:0;width:0;overflow:hidden}.sidebar-nav{display:flex;flex-direction:column;gap:2px;padding:8px 12px}.sidebar-nav-btn{display:flex;align-items:center;gap:10px;width:100%;background:transparent;border:1px solid transparent;border-radius:8px;padding:8px 10px;font-size:.85rem;color:#888;cursor:pointer;transition:all .15s ease;white-space:nowrap;overflow:hidden}.sidebar-nav-btn:hover{color:#0ff;background:#00ffff14}.sidebar-nav-btn.active{color:#0ff;background:#00ffff26;border-color:#0ff3}.sidebar-nav-btn .sidebar-btn-icon{flex-shrink:0;width:20px;text-align:center}.sidebar-nav-btn .sidebar-btn-icon svg{display:block;margin:0 auto}.sidebar-nav-btn .sidebar-nav-label{opacity:1;transition:opacity .2s ease}.app-sidebar.collapsed .sidebar-nav-btn .sidebar-nav-label{opacity:0;width:0;overflow:hidden}.sidebar-spacer{flex:1}.sidebar-bottom{padding:12px;border-top:1px solid rgba(255,255,255,.06);display:flex;flex-direction:column;gap:8px}.sidebar-connection{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:8px;font-size:.75rem;color:#888;white-space:nowrap;overflow:hidden;transition:background .15s ease}.sidebar-connection.clickable{cursor:pointer}.sidebar-connection.clickable:hover{background:#ffffff0d}.sidebar-connection .status-dot{flex-shrink:0;width:8px;height:8px;border-radius:50%;background:#666}.sidebar-connection .status-dot.connected{background:#4ade80;box-shadow:0 0 8px #4ade8088}.sidebar-connection .sidebar-conn-label{opacity:1;transition:opacity .2s ease}.app-sidebar.collapsed .sidebar-connection .sidebar-conn-label{opacity:0;width:0;overflow:hidden}.sidebar-connection .connection-gear{margin-left:auto;font-size:11px;color:#ffffff4d;transition:color .15s ease,opacity .2s ease}.sidebar-connection:hover .connection-gear{color:#ffffffb3}.app-sidebar.collapsed .sidebar-connection .connection-gear{opacity:0;width:0;overflow:hidden}.sidebar-notif-btn{display:flex;align-items:center;gap:10px;width:100%;background:transparent;border:1px solid transparent;border-radius:8px;padding:8px 10px;font-size:.8rem;color:#888;cursor:pointer;transition:all .15s ease;white-space:nowrap;overflow:hidden}.sidebar-notif-btn:hover{color:#0ff;background:#00ffff14}.sidebar-notif-btn.active{color:#0ff;background:#00ffff1f;border-color:#0ff3}.sidebar-notif-btn .sidebar-btn-icon{flex-shrink:0;width:20px;text-align:center}.sidebar-notif-btn .sidebar-btn-icon svg{display:block;margin:0 auto}.sidebar-notif-btn .sidebar-nav-label{opacity:1;transition:opacity .2s ease}.app-sidebar.collapsed .sidebar-notif-btn .sidebar-nav-label{opacity:0;width:0;overflow:hidden}.sidebar-collapse-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;background:transparent;border:1px solid transparent;border-radius:8px;padding:8px 10px;font-size:.75rem;color:#666;cursor:pointer;transition:all .15s ease;white-space:nowrap;overflow:hidden}.sidebar-collapse-btn:hover{color:#aaa;background:#ffffff0d}.sidebar-collapse-icon{flex-shrink:0;transition:transform .25s ease}.app-sidebar.collapsed .sidebar-collapse-icon{transform:rotate(180deg)}.sidebar-collapse-label{opacity:1;transition:opacity .2s ease}.app-sidebar.collapsed .sidebar-collapse-label{opacity:0;width:0;overflow:hidden}.app-sidebar.collapsed .sidebar-logo{padding:14px 0;justify-content:center;gap:0}.app-sidebar.collapsed .sidebar-settings{padding:8px 6px}.app-sidebar.collapsed .sidebar-settings-btn{padding:8px 0;justify-content:center;gap:0}.app-sidebar.collapsed .sidebar-nav{padding:8px 6px}.app-sidebar.collapsed .sidebar-nav-btn{padding:8px 0;justify-content:center;gap:0}.app-sidebar.collapsed .sidebar-bottom{padding:8px 6px;gap:4px}.app-sidebar.collapsed .sidebar-connection{padding:6px 0;justify-content:center;gap:0}.app-sidebar.collapsed .sidebar-collapse-btn{padding:8px 0;gap:0}.app-sidebar.collapsed .usage-display{padding:4px 6px}.app-sidebar.collapsed .usage-percent{display:none}.secrets-editor-overlay{position:fixed;inset:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.secrets-editor-modal{background:#1a1a24;border-radius:12px;border:1px solid #2a2a3a;width:90%;max-width:600px;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 4px 20px #00000080}.secrets-editor-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #2a2a3a}.secrets-editor-header h2{margin:0;font-size:1.1rem;font-weight:500;color:#fff;display:flex;align-items:center;gap:8px}.secrets-icon{font-size:1.2rem}.secrets-editor-close{background:none;border:none;color:#666;font-size:1.5rem;cursor:pointer;padding:0;line-height:1;transition:color .15s ease}.secrets-editor-close:hover{color:#fff}.secrets-editor-content{flex:1;padding:20px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}.secrets-loading{text-align:center;color:#666;padding:40px}.secrets-list{display:flex;flex-direction:column;gap:8px}.secrets-list-header{display:grid;grid-template-columns:1fr 1.5fr 60px;gap:12px;padding:0 4px 8px;font-size:.75rem;color:#666;text-transform:uppercase;letter-spacing:.5px}.secrets-empty{text-align:center;color:#555;padding:24px;font-size:.9rem}.secrets-row{display:grid;grid-template-columns:1fr 1.5fr 60px;gap:12px;align-items:center}.secrets-key-input{background:#0a0a0f;border:1px solid #2a2a3a;border-radius:6px;padding:10px 12px;font-size:.85rem;color:#0ff;font-family:SF Mono,Fira Code,monospace;transition:border-color .15s ease}.secrets-key-input:focus{outline:none;border-color:#0ff5}.secrets-key-input::placeholder{color:#444}.secrets-value-wrapper{display:flex;position:relative}.secrets-value-input{flex:1;background:#0a0a0f;border:1px solid #2a2a3a;border-radius:6px;padding:10px 40px 10px 12px;font-size:.85rem;color:#fff;font-family:SF Mono,Fira Code,monospace;transition:border-color .15s ease}.secrets-value-input:focus{outline:none;border-color:#0ff5}.secrets-value-input::placeholder{color:#444}.secrets-toggle-btn{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:none;border:none;padding:4px;cursor:pointer;font-size:.9rem;opacity:.5;transition:opacity .15s ease}.secrets-toggle-btn:hover{opacity:1}.secrets-delete-btn{background:none;border:1px solid #333;border-radius:6px;color:#666;font-size:1.2rem;cursor:pointer;padding:6px 12px;transition:all .15s ease}.secrets-delete-btn:hover{border-color:#ef4444;color:#ef4444}.secrets-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.secrets-add-btn{background:#0883;border:1px dashed #00888888;border-radius:6px;padding:10px 16px;color:#0ff;font-size:.85rem;cursor:pointer;transition:all .15s ease}.secrets-add-btn:hover{background:#0885;border-style:solid}.secrets-import-btn{background:#4a4a5a33;border:1px dashed #4a4a5a88;border-radius:6px;padding:10px 16px;color:#aaa;font-size:.85rem;cursor:pointer;transition:all .15s ease}.secrets-import-btn:hover{background:#4a4a5a55;border-style:solid;color:#fff}.secrets-import-success{color:#22c55e;font-size:.8rem;padding:6px 10px;background:#22c55e1a;border-radius:4px;animation:fadeIn .3s ease}@keyframes fadeIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.secrets-info{display:flex;align-items:flex-start;gap:8px;padding:12px;background:#ffc8001a;border-radius:6px;font-size:.8rem;color:#999;line-height:1.4}.secrets-info-icon{font-size:.9rem;flex-shrink:0}.secrets-info code{background:#0000004d;padding:2px 6px;border-radius:3px;font-family:SF Mono,Fira Code,monospace;color:#0ff}.secrets-error{color:#ef4444;font-size:.85rem;padding:10px 12px;background:#ef44441a;border-radius:6px}.secrets-editor-footer{display:flex;justify-content:flex-end;gap:10px;padding:16px 20px;border-top:1px solid #2a2a3a}.secrets-cancel-btn{background:transparent;border:1px solid #333;border-radius:6px;padding:10px 20px;color:#888;font-size:.85rem;cursor:pointer;transition:all .15s ease}.secrets-cancel-btn:hover{border-color:#555;color:#fff}.secrets-save-btn{background:#0888;border:none;border-radius:6px;padding:10px 20px;color:#fff;font-size:.85rem;font-weight:500;cursor:pointer;transition:all .15s ease}.secrets-save-btn:hover:not(:disabled){background:#0aa}.secrets-save-btn:disabled{opacity:.5;cursor:not-allowed}.project-tabs{display:flex;align-items:center;gap:4px;flex:1;min-width:0}.project-tabs-list{display:flex;gap:4px;flex:1;overflow-x:auto;scrollbar-width:none;background:#1a1a2499;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid #2a2a3a;border-radius:10px;padding:4px}.project-tabs-list::-webkit-scrollbar{display:none}.project-tab{display:flex;align-items:center;gap:6px;padding:5px 10px;background:transparent;border:1px solid transparent;border-radius:6px;color:#fff9;font-size:12px;font-weight:500;cursor:pointer;transition:all .15s ease;white-space:nowrap}.project-tab:hover{background:#ffffff1a;color:#ffffffe6}.project-tab.active{background:#ffffff1f;color:#fff;border-color:var(--accent-color, #00ffff);box-shadow:0 0 8px rgba(var(--accent-color-rgb, 0, 255, 255),.2)}.project-tab-indicator{width:6px;height:6px;border-radius:50%;flex-shrink:0}.project-tab-name{max-width:120px;overflow:hidden;text-overflow:ellipsis}.project-add-btn{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);border-radius:6px;color:#fff9;font-size:16px;font-weight:400;cursor:pointer;transition:all .15s ease;flex-shrink:0}.project-add-btn:hover{background:#ffffff1a;color:#0ff;border-color:#00ffff4d}.project-context-menu{position:fixed;z-index:1000;background:#1a1a24;border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:4px;box-shadow:0 4px 16px #0006;min-width:140px}.project-context-menu button{display:block;width:100%;padding:8px 12px;background:transparent;border:none;color:#fffc;font-size:12px;text-align:left;cursor:pointer;border-radius:4px;transition:background .15s ease}.project-context-menu button:hover{background:#ffffff1a}.project-context-menu button.delete{color:#ef4444}.project-context-menu button.delete:hover{background:#ef44441a}.project-tab-count{font-size:10px;font-weight:600;padding:2px 6px;background:#ffffff26;border-radius:10px;color:#fffc;min-width:18px;text-align:center}.project-tab.active .project-tab-count{background:#fff3;color:#fff}.project-tab.all-tab{background:#8888881a}.project-tab.all-tab.active{border-color:#888;box-shadow:0 0 8px #8883}.unassigned-hint{font-size:11px;color:#fff6;padding:4px 8px;cursor:default}.project-tab-edit{width:16px;height:16px;border-radius:50%;border:none;background:transparent;color:#fff6;font-size:11px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;margin-left:4px;opacity:0;transition:all .15s ease;flex-shrink:0}.project-tab:hover .project-tab-edit{opacity:1}.project-tab-edit:hover{background:#60a5fa4d;color:#60a5fa}.project-tab.active .project-tab-edit{opacity:.6}.project-tab.active .project-tab-edit:hover{opacity:1}.project-tab-close{width:16px;height:16px;border-radius:50%;border:none;background:transparent;color:#fff6;font-size:14px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;margin-left:2px;opacity:0;transition:all .15s ease;flex-shrink:0}.project-tab:hover .project-tab-close{opacity:1}.project-tab-close:hover{background:#ef44444d;color:#ef4444}.project-tab.active .project-tab-close{opacity:.6}.project-tab.active .project-tab-close:hover{opacity:1}.project-tab-notification-dot{width:8px;height:8px;border-radius:50%;background:#4ade80;flex-shrink:0;animation:notification-glow 2s ease-in-out infinite}@keyframes notification-glow{0%,to{box-shadow:0 0 2px #4ade8066;opacity:.8}50%{box-shadow:0 0 8px 3px #4ade8099;opacity:1}}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;width:100%;height:100%;overflow:hidden;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:#0a0a0f;color:#fff}.app{width:100%;height:100%;display:flex;position:relative}.app.floating-layout{display:block;--sidebar-width: 200px;--sidebar-collapsed-width: 52px;--sidebar-current-width: var(--sidebar-width)}.app.floating-layout.sidebar-collapsed{--sidebar-current-width: var(--sidebar-collapsed-width)}.app.floating-layout .world-container{position:absolute;inset:0;z-index:1}.world-container{flex:1;position:relative;overflow:hidden}.world-container.fullscreen{width:100%;height:100%}.overlay-top{position:absolute;top:0;left:var(--sidebar-current-width, 0px);right:0;padding:16px 20px;display:flex;justify-content:center;align-items:center;pointer-events:none;z-index:10;transition:left .25s cubic-bezier(.4,0,.2,1);flex-wrap:wrap;gap:8px}.project-tabs-wrapper{flex:1;min-width:0;pointer-events:auto;display:flex}.overlay-bottom{position:absolute;bottom:0;left:var(--sidebar-current-width, 0px);right:0;padding:16px 20px;display:flex;justify-content:center;pointer-events:none;z-index:10;transition:left .25s cubic-bezier(.4,0,.2,1)}.controls-hint{padding:8px 16px;background:#1a1a2488;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:20px;font-size:.75rem;color:#666}@media(max-width:768px){.overlay-top{padding:10px 12px}.controls-hint{display:none}}@media(max-width:480px){.overlay-top{padding:8px;gap:6px}}.control-panel-floating{z-index:100}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#333;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#444}.resize-handle{width:6px;background:#2a2a3a;cursor:col-resize;transition:background .15s ease;flex-shrink:0}.resize-handle:hover,.resize-handle.active{background:#0aa}.right-panel{height:100%;display:flex;flex-direction:column;background:#12121a;border-left:1px solid #2a2a3a;flex-shrink:0}.right-panel>.sidebar{flex:0 0 auto;max-height:50%;min-height:200px;border-left:none;overflow-y:auto}.right-panel>.chat-panel{flex:1;min-height:0;border-top:1px solid #2a2a3a}
Binary file
Binary file
Binary file
@@ -0,0 +1,14 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
2
+ <defs>
3
+ <linearGradient id="fg" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#00ffff" />
5
+ <stop offset="100%" style="stop-color:#a855f7" />
6
+ </linearGradient>
7
+ </defs>
8
+ <polygon
9
+ points="50,5 93,27 93,73 50,95 7,73 7,27"
10
+ fill="none"
11
+ stroke="url(#fg)"
12
+ stroke-width="8"
13
+ />
14
+ </svg>
@@ -0,0 +1,21 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="./favicon.svg" />
6
+ <link rel="icon" type="image/png" sizes="32x32" href="./favicon-32x32.png" />
7
+ <link rel="icon" type="image/png" sizes="16x16" href="./favicon-16x16.png" />
8
+ <link rel="apple-touch-icon" sizes="180x180" href="./apple-touch-icon.png" />
9
+ <link rel="shortcut icon" href="./favicon.ico" />
10
+ <link rel="manifest" href="./site.webmanifest" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
12
+ <meta name="theme-color" content="#030712" />
13
+ <meta name="description" content="VibeTeam - Orchestrate AI Agents with Style" />
14
+ <title>VibeTeam</title>
15
+ <script type="module" crossorigin src="./assets/index-DURW-QlU.js"></script>
16
+ <link rel="stylesheet" crossorigin href="./assets/index-DgQWq5c0.css">
17
+ </head>
18
+ <body>
19
+ <div id="root"></div>
20
+ </body>
21
+ </html>
@@ -0,0 +1,22 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
2
+ <defs>
3
+ <linearGradient id="hexGradient" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#00ffff;stop-opacity:0.2" />
5
+ <stop offset="100%" style="stop-color:#a855f7;stop-opacity:0.1" />
6
+ </linearGradient>
7
+ <filter id="glow">
8
+ <feGaussianBlur stdDeviation="2" result="coloredBlur"/>
9
+ <feMerge>
10
+ <feMergeNode in="coloredBlur"/>
11
+ <feMergeNode in="SourceGraphic"/>
12
+ </feMerge>
13
+ </filter>
14
+ </defs>
15
+ <polygon
16
+ points="50,5 93,27 93,73 50,95 7,73 7,27"
17
+ fill="url(#hexGradient)"
18
+ stroke="#00ffff"
19
+ stroke-width="3"
20
+ filter="url(#glow)"
21
+ />
22
+ </svg>
File without changes
File without changes
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "VibeTeam",
3
+ "short_name": "VibeTeam",
4
+ "description": "Orchestrate AI Agents with Style",
5
+ "icons": [
6
+ {
7
+ "src": "/favicon-16x16.png",
8
+ "sizes": "16x16",
9
+ "type": "image/png"
10
+ },
11
+ {
12
+ "src": "/favicon-32x32.png",
13
+ "sizes": "32x32",
14
+ "type": "image/png"
15
+ },
16
+ {
17
+ "src": "/apple-touch-icon.png",
18
+ "sizes": "180x180",
19
+ "type": "image/png"
20
+ }
21
+ ],
22
+ "theme_color": "#030712",
23
+ "background_color": "#030712",
24
+ "display": "standalone"
25
+ }
Binary file
Binary file
@@ -1,307 +0,0 @@
1
- /**
2
- * CommitWatcher - Monitor git repositories for new commits on specified branches
3
- *
4
- * Similar pattern to GitStatusManager, but focused on detecting new commits
5
- * to trigger Lead agents.
6
- */
7
- import { execFile } from 'child_process';
8
- import { promisify } from 'util';
9
-
10
- const execFileAsync = promisify(execFile);
11
-
12
- // ============================================================================
13
- // CommitWatcher
14
- // ============================================================================
15
- export class CommitWatcher {
16
- /** Map of projectId -> tracking info */
17
- trackedProjects = new Map();
18
-
19
- /** Polling interval reference */
20
- pollInterval = null;
21
-
22
- /** Callback when new commit is detected */
23
- onNewCommit = null;
24
-
25
- // Configuration
26
- POLL_INTERVAL_MS = 10000; // Check every 10 seconds
27
- EXEC_TIMEOUT_MS = 5000; // Timeout for git commands
28
- FETCH_INTERVAL_MS = 30000; // Fetch from remote every 30 seconds
29
-
30
- lastFetchTime = 0;
31
-
32
- constructor() {}
33
-
34
- /**
35
- * Set callback for new commit detection
36
- * @param {Function} handler - (projectId, commitInfo) => void
37
- */
38
- setCommitHandler(handler) {
39
- this.onNewCommit = handler;
40
- }
41
-
42
- /**
43
- * Start tracking a project's branch for new commits
44
- * @param {string} projectId - Project identifier
45
- * @param {string} projectPath - Path to git repository
46
- * @param {string} branch - Branch to watch (default: 'main')
47
- */
48
- track(projectId, projectPath, branch = 'main') {
49
- this.trackedProjects.set(projectId, {
50
- path: projectPath,
51
- branch,
52
- lastCommit: null, // Will be set on first poll
53
- lastChecked: null,
54
- });
55
-
56
- // Immediately check to get baseline
57
- this.checkProject(projectId);
58
- }
59
-
60
- /**
61
- * Stop tracking a project
62
- * @param {string} projectId
63
- */
64
- untrack(projectId) {
65
- this.trackedProjects.delete(projectId);
66
- }
67
-
68
- /**
69
- * Check if a project is being tracked
70
- * @param {string} projectId
71
- * @returns {boolean}
72
- */
73
- isTracking(projectId) {
74
- return this.trackedProjects.has(projectId);
75
- }
76
-
77
- /**
78
- * Get tracking info for a project
79
- * @param {string} projectId
80
- * @returns {Object|null}
81
- */
82
- getTrackingInfo(projectId) {
83
- return this.trackedProjects.get(projectId) || null;
84
- }
85
-
86
- /**
87
- * Start polling for new commits
88
- */
89
- start() {
90
- if (this.pollInterval) return;
91
-
92
- this.pollInterval = setInterval(() => {
93
- this.pollAll();
94
- }, this.POLL_INTERVAL_MS);
95
-
96
- // Initial poll
97
- this.pollAll();
98
- }
99
-
100
- /**
101
- * Stop polling
102
- */
103
- stop() {
104
- if (this.pollInterval) {
105
- clearInterval(this.pollInterval);
106
- this.pollInterval = null;
107
- }
108
- }
109
-
110
- /**
111
- * Poll all tracked projects for new commits
112
- */
113
- async pollAll() {
114
- // Periodically fetch from remotes
115
- const now = Date.now();
116
- if (now - this.lastFetchTime > this.FETCH_INTERVAL_MS) {
117
- this.lastFetchTime = now;
118
- // Fetch in background for all tracked projects
119
- for (const [projectId, info] of this.trackedProjects) {
120
- this.execGit(['fetch', '--quiet'], info.path).catch(() => {}); // Silent fail
121
- }
122
- }
123
-
124
- // Check each project
125
- const promises = Array.from(this.trackedProjects.keys()).map(
126
- (projectId) => this.checkProject(projectId)
127
- );
128
- await Promise.all(promises);
129
- }
130
-
131
- /**
132
- * Check a single project for new commits
133
- * @param {string} projectId
134
- */
135
- async checkProject(projectId) {
136
- const info = this.trackedProjects.get(projectId);
137
- if (!info) return;
138
-
139
- try {
140
- // Get the latest commit on the tracked branch (from remote)
141
- const remoteRef = `origin/${info.branch}`;
142
- const currentSha = await this.getLatestCommit(info.path, remoteRef);
143
-
144
- info.lastChecked = Date.now();
145
-
146
- if (!currentSha) return;
147
-
148
- // First time - just record baseline
149
- if (!info.lastCommit) {
150
- info.lastCommit = currentSha;
151
- return;
152
- }
153
-
154
- // Check if commit changed
155
- if (currentSha !== info.lastCommit) {
156
- const previousCommit = info.lastCommit;
157
- info.lastCommit = currentSha;
158
-
159
- // Get commit details
160
- const commitInfo = await this.getCommitInfo(info.path, currentSha);
161
-
162
- if (commitInfo && this.onNewCommit) {
163
- this.onNewCommit(projectId, commitInfo);
164
- }
165
- }
166
- } catch (err) {
167
- // Silent fail - project might not have remote configured
168
- }
169
- }
170
-
171
- /**
172
- * Get the latest commit SHA for a ref
173
- * @param {string} path - Repository path
174
- * @param {string} ref - Git ref (e.g., 'origin/main')
175
- * @returns {Promise<string|null>}
176
- */
177
- async getLatestCommit(path, ref) {
178
- try {
179
- const result = await this.execGit(
180
- ['log', '-1', '--format=%H', ref],
181
- path
182
- );
183
- return result.trim() || null;
184
- } catch {
185
- return null;
186
- }
187
- }
188
-
189
- /**
190
- * Get detailed commit information
191
- * @param {string} path - Repository path
192
- * @param {string} sha - Commit SHA
193
- * @returns {Promise<Object|null>}
194
- */
195
- async getCommitInfo(path, sha) {
196
- try {
197
- // Get commit details
198
- const format = '%H|||%h|||%s|||%an|||%at';
199
- const logResult = await this.execGit(
200
- ['show', '--format=' + format, '--stat', '--no-patch', sha],
201
- path
202
- );
203
-
204
- const lines = logResult.trim().split('\n');
205
- if (lines.length === 0) return null;
206
-
207
- const [fullSha, shortSha, message, author, timestamp] = lines[0].split('|||');
208
-
209
- // Get diff stats
210
- const diffResult = await this.execGit(
211
- ['diff', '--shortstat', `${sha}^..${sha}`],
212
- path
213
- ).catch(() => '');
214
-
215
- let additions = 0;
216
- let deletions = 0;
217
- const addMatch = diffResult.match(/(\d+) insertion/);
218
- const delMatch = diffResult.match(/(\d+) deletion/);
219
- if (addMatch) additions = parseInt(addMatch[1], 10);
220
- if (delMatch) deletions = parseInt(delMatch[1], 10);
221
-
222
- // Get list of changed files
223
- const filesResult = await this.execGit(
224
- ['diff', '--name-only', `${sha}^..${sha}`],
225
- path
226
- ).catch(() => '');
227
-
228
- const filesChanged = filesResult.trim().split('\n').filter(Boolean);
229
-
230
- // Get the branch this commit is on
231
- const branchResult = await this.execGit(
232
- ['branch', '-r', '--contains', sha],
233
- path
234
- ).catch(() => '');
235
-
236
- // Extract branch name (first one if multiple)
237
- let branch = 'main';
238
- const branchMatch = branchResult.match(/origin\/(\S+)/);
239
- if (branchMatch) {
240
- branch = branchMatch[1];
241
- }
242
-
243
- return {
244
- sha: fullSha,
245
- shortSha,
246
- message,
247
- author,
248
- timestamp: parseInt(timestamp, 10) * 1000, // Convert to ms
249
- branch,
250
- filesChanged,
251
- additions,
252
- deletions,
253
- };
254
- } catch {
255
- return null;
256
- }
257
- }
258
-
259
- /**
260
- * Force check a project (useful after manual trigger)
261
- * @param {string} projectId
262
- * @returns {Promise<Object|null>} - Returns commit info if found
263
- */
264
- async forceCheck(projectId) {
265
- const info = this.trackedProjects.get(projectId);
266
- if (!info) return null;
267
-
268
- try {
269
- // Fetch first
270
- await this.execGit(['fetch', '--quiet'], info.path);
271
-
272
- // Get latest commit
273
- const remoteRef = `origin/${info.branch}`;
274
- const currentSha = await this.getLatestCommit(info.path, remoteRef);
275
-
276
- if (!currentSha) return null;
277
-
278
- return this.getCommitInfo(info.path, currentSha);
279
- } catch {
280
- return null;
281
- }
282
- }
283
-
284
- /**
285
- * Get commit info for a specific SHA in a project
286
- * @param {string} path - Repository path
287
- * @param {string} sha - Commit SHA
288
- * @returns {Promise<Object|null>}
289
- */
290
- async getCommitInfoForPath(path, sha) {
291
- return this.getCommitInfo(path, sha);
292
- }
293
-
294
- /**
295
- * Execute a git command in a directory
296
- * @param {string[]} args - Git command arguments
297
- * @param {string} cwd - Working directory
298
- * @returns {Promise<string>}
299
- */
300
- async execGit(args, cwd) {
301
- const { stdout } = await execFileAsync('git', args, {
302
- cwd,
303
- timeout: this.EXEC_TIMEOUT_MS,
304
- });
305
- return stdout;
306
- }
307
- }