/* ========================================== REFRESH BUTTON ========================================== */ .refresh-btn { display: flex; align-items: center; justify-content: center; transition: all 0.2s ease; } .refresh-btn:hover { background: hsl(var(--muted)); } .refresh-btn.refreshing svg { animation: spin 1s linear infinite; } .refresh-btn:disabled { opacity: 0.5; cursor: not-allowed; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* ========================================== MCP MANAGER STYLES ========================================== */ .mcp-manager { width: 100%; } .mcp-section { margin-bottom: 2rem; width: 100%; } .mcp-server-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; width: 100%; } .mcp-server-card { position: relative; } .mcp-server-card.opacity-60 { opacity: 0.6; } .mcp-server-available { border-style: dashed; } .mcp-server-available:hover { border-style: solid; } /* MCP Toggle Switch */ .mcp-toggle { position: relative; display: inline-flex; align-items: center; } .mcp-toggle input { position: absolute; opacity: 0; width: 0; height: 0; } .mcp-toggle > div { width: 36px; height: 20px; background: hsl(var(--muted)); border-radius: 10px; position: relative; transition: background 0.2s; } .mcp-toggle > div::after { content: ''; position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; background: white; border-radius: 50%; transition: transform 0.2s; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); } .mcp-toggle input:checked + div { background: hsl(var(--success)); } .mcp-toggle input:checked + div::after { transform: translateX(16px); } .mcp-toggle input:focus + div { box-shadow: 0 0 0 2px hsl(var(--primary) / 0.2); } /* MCP Projects List */ .mcp-projects-list { max-height: 400px; overflow-y: auto; } .mcp-project-item { transition: background 0.15s; } .mcp-project-item:hover { background: hsl(var(--hover)); } .mcp-project-item.bg-primary-light { background: hsl(var(--primary-light)); } /* MCP Empty State */ .mcp-empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 120px; } /* MCP Server Details */ .mcp-server-details { font-size: 0.875rem; } .mcp-server-details .font-mono { font-family: var(--font-mono); } /* MCP Projects Table */ .mcp-projects-table { overflow-x: auto; } .mcp-projects-table table { border-collapse: collapse; min-width: 100%; } .mcp-projects-table th { white-space: nowrap; } .mcp-projects-table td { vertical-align: middle; } .mcp-projects-table tr:hover { background-color: hsl(var(--hover)); } .mcp-projects-table .bg-primary-light\/30 { background-color: hsl(var(--primary) / 0.08); } /* MCP Create Modal */ .mcp-modal { animation: fadeIn 0.15s ease-out; } .mcp-modal-backdrop { animation: fadeIn 0.15s ease-out; } .mcp-modal-content { animation: slideUp 0.2s ease-out; } .mcp-modal.hidden { display: none; } .mcp-modal .form-group label { display: block; margin-bottom: 0.25rem; } .mcp-modal input, .mcp-modal textarea { transition: border-color 0.15s, box-shadow 0.15s; } .mcp-modal input:focus, .mcp-modal textarea:focus { border-color: hsl(var(--primary)); box-shadow: 0 0 0 2px hsl(var(--primary) / 0.2); } /* MCP Tab Buttons */ .mcp-tab-btn { cursor: pointer; transition: all 0.2s; color: hsl(var(--muted-foreground)); } .mcp-tab-btn.active { background: hsl(var(--background)); color: hsl(var(--foreground)); font-weight: 500; } .mcp-tab-btn:hover:not(.active) { color: hsl(var(--foreground)); } @keyframes slideUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } /* ========================================== HOOK MANAGER STYLES ========================================== */ .hook-manager { width: 100%; } .hook-section { margin-bottom: 2rem; width: 100%; } .hook-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 1rem; width: 100%; } .hook-card { position: relative; } .hook-details { font-size: 0.875rem; } .hook-details .font-mono { font-family: var(--font-mono); } .hook-templates-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; } .hook-template-card { transition: all 0.2s ease; } .hook-template-card:hover { box-shadow: 0 4px 12px rgb(0 0 0 / 0.1); } /* Hook Empty State */ .hook-empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 120px; } /* Hook Modal */ .hook-modal { animation: fadeIn 0.15s ease-out; } .hook-modal-backdrop { animation: fadeIn 0.15s ease-out; } .hook-modal-content { animation: slideUp 0.2s ease-out; } .hook-modal.hidden { display: none; } .hook-modal .form-group label { display: block; margin-bottom: 0.25rem; } .hook-modal input, .hook-modal textarea, .hook-modal select { transition: border-color 0.15s, box-shadow 0.15s; } .hook-modal input:focus, .hook-modal textarea:focus, .hook-modal select:focus { border-color: hsl(var(--primary)); box-shadow: 0 0 0 2px hsl(var(--primary) / 0.2); } .hook-template-btn { transition: all 0.15s ease; } .hook-template-btn:hover { background: hsl(var(--hover)); border-color: hsl(var(--primary)); } /* ========================================== STATS SECTION & CAROUSEL ========================================== */ .stats-section { min-height: 180px; } .stats-metrics { width: 300px; } .stats-carousel { position: relative; } .carousel-header { height: 40px; } .carousel-btn { transition: all 0.15s; } .carousel-btn:hover { background: hsl(var(--hover)); } /* Carousel dots indicator */ .carousel-dots { display: flex; align-items: center; gap: 6px; } .carousel-dot { cursor: pointer; border: none; padding: 0; transition: all 0.2s ease; } .carousel-dot:focus { outline: none; box-shadow: 0 0 0 2px hsl(var(--primary) / 0.3); } .carousel-footer { flex-shrink: 0; } .carousel-content { position: relative; overflow: hidden; } .carousel-slide { position: absolute; inset: 0; } .carousel-empty { position: absolute; inset: 0; } /* Carousel slide animations */ .carousel-fade-in { animation: carouselFadeIn 0.3s ease-out forwards; } .carousel-slide-left { animation: carouselSlideLeft 0.35s ease-out forwards; } .carousel-slide-right { animation: carouselSlideRight 0.35s ease-out forwards; } @keyframes carouselFadeIn { from { opacity: 0; transform: scale(0.98); } to { opacity: 1; transform: scale(1); } } @keyframes carouselSlideLeft { from { opacity: 0; transform: translateX(100%); } to { opacity: 1; transform: translateX(0); } } @keyframes carouselSlideRight { from { opacity: 0; transform: translateX(-100%); } to { opacity: 1; transform: translateX(0); } } /* Task card in carousel */ .carousel-slide .task-card { height: 100%; display: flex; flex-direction: column; } .carousel-slide .task-timestamps { flex-grow: 1; } .carousel-slide .task-session-info { margin-top: auto; } /* Task status badge pulse for in_progress */ .task-status-badge { transition: all 0.2s; } .bg-warning-light .task-status-badge { animation: statusPulse 2s ease-in-out infinite; } @keyframes statusPulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.7; } } /* Task highlight animation when navigating from carousel */ .task-highlight { animation: taskHighlight 0.5s ease-out 3; } @keyframes taskHighlight { 0%, 100% { background: transparent; box-shadow: none; } 50% { background: hsl(var(--primary-light)); box-shadow: 0 0 0 3px hsl(var(--primary) / 0.3); } } /* Line clamp utility */ .line-clamp-1 { display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; } .line-clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .line-clamp-3 { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } /* Highlight pulse effect */ .highlight-pulse { animation: highlightPulse 0.5s ease-out 2; } @keyframes highlightPulse { 0%, 100% { box-shadow: none; } 50% { box-shadow: 0 0 0 3px hsl(var(--primary) / 0.3); } } /* ========================================== NOTIFICATION BUBBLES ========================================== */ .notification-bubble { position: fixed; top: 70px; right: 20px; max-width: 280px; padding: 8px 12px; background: hsl(var(--card)); border: 1px solid hsl(var(--border)); border-radius: 6px; box-shadow: 0 4px 12px rgb(0 0 0 / 0.12); z-index: 1000; display: flex; align-items: center; gap: 6px; opacity: 0; transform: translateX(100%); transition: all 0.3s ease-out; } .notification-bubble.show { opacity: 1; transform: translateX(0); } .notification-bubble.fade-out { opacity: 0; transform: translateX(100%); } .notification-bubble:nth-child(2) { top: 130px; } .notification-bubble:nth-child(3) { top: 190px; } .notification-content { display: flex; align-items: center; gap: 8px; flex: 1; } .notification-icon { font-size: 1rem; } .notification-message { font-size: 0.8125rem; color: hsl(var(--foreground)); flex: 1; } .notification-action { padding: 4px 12px; background: hsl(var(--primary)); color: hsl(var(--primary-foreground)); border: none; border-radius: 4px; font-size: 0.75rem; font-weight: 500; cursor: pointer; transition: opacity 0.15s; } .notification-action:hover { opacity: 0.9; } .notification-close { width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; background: transparent; border: none; color: hsl(var(--muted-foreground)); font-size: 1.25rem; cursor: pointer; border-radius: 4px; transition: all 0.15s; } .notification-close:hover { background: hsl(var(--hover)); color: hsl(var(--foreground)); } /* Notification types */ .notification-success { border-left: 3px solid hsl(var(--success)); } .notification-warning { border-left: 3px solid hsl(var(--warning)); } .notification-error { border-left: 3px solid hsl(var(--destructive)); } .notification-info { border-left: 3px solid hsl(var(--primary)); } /* Responsive stats section */ @media (max-width: 768px) { .stats-section { flex-direction: column; } .stats-metrics { width: 100%; grid-template-columns: repeat(4, 1fr); } .stats-carousel { min-height: 160px; } } /* Exploration Object Rendering - Theme Compatible */ .exp-object { display: flex; flex-direction: column; gap: 8px; padding: 12px; background: hsl(var(--muted)); border-radius: 8px; border: 1px solid hsl(var(--border)); } .exp-obj-field { display: flex; flex-wrap: wrap; gap: 6px; align-items: flex-start; font-size: 13px; line-height: 1.5; } .exp-obj-key { font-weight: 600; color: hsl(var(--muted-foreground)); min-width: 120px; } .exp-obj-val { color: hsl(var(--foreground)); flex: 1; } .exp-obj-nested { margin-left: 16px; padding: 8px; border-left: 2px solid hsl(var(--border)); } .exp-obj-nested > .exp-obj-key { display: block; margin-bottom: 8px; color: hsl(var(--primary)); font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; } .exp-list { margin: 4px 0 0 0; padding-left: 20px; list-style: disc; } .exp-list li { font-size: 13px; color: hsl(var(--foreground)); line-height: 1.6; margin-bottom: 4px; } .exp-array-objects { display: flex; flex-direction: column; gap: 10px; } .exp-object-item { padding: 10px; background: hsl(var(--card)); border-radius: 6px; border: 1px solid hsl(var(--border)); } .clarification-impact { font-size: 12px; color: hsl(var(--muted-foreground)); margin-top: 6px; } .priority-badge { display: inline-block; padding: 2px 8px; border-radius: 4px; font-size: 11px; font-weight: 500; text-transform: uppercase; } .priority-badge.priority-high { background: hsl(var(--destructive) / 0.15); color: hsl(var(--destructive)); } .priority-badge.priority-medium { background: hsl(var(--warning-light)); color: hsl(var(--warning)); } .priority-badge.priority-low { background: hsl(var(--success-light)); color: hsl(var(--success)); } /* Conflict Tab Styles - Theme Compatible */ .conflict-tab-content { padding: 16px; } .conflict-tab-header { margin-bottom: 24px; } .conflict-tab-header h3 { font-size: 18px; font-weight: 600; color: hsl(var(--foreground)); margin: 0 0 8px 0; } .conflict-meta-info { display: flex; gap: 16px; font-size: 13px; color: hsl(var(--muted-foreground)); } .conflict-meta-info strong { color: hsl(var(--foreground)); } .conflict-section-title { font-size: 15px; font-weight: 600; color: hsl(var(--foreground)); margin: 24px 0 12px 0; padding-bottom: 8px; border-bottom: 1px solid hsl(var(--border)); } .conflict-cards-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px; } .conflict-card { background: hsl(var(--card)); border: 1px solid hsl(var(--border)); border-radius: 12px; padding: 16px; transition: box-shadow 0.2s ease, border-color 0.2s ease; } .conflict-card:hover { box-shadow: 0 4px 12px hsl(var(--foreground) / 0.08); border-color: hsl(var(--primary)); } .decision-card { border-left: 3px solid hsl(var(--primary)); } .resolved-card { border-left: 3px solid hsl(var(--success)); } .conflict-card-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; } .conflict-card-label { font-size: 14px; font-weight: 600; color: hsl(var(--foreground)); } .conflict-card-id { font-size: 13px; font-weight: 600; color: hsl(var(--primary)); font-family: monospace; } .conflict-category-tag { padding: 3px 8px; background: hsl(var(--muted)); color: hsl(var(--muted-foreground)); border-radius: 4px; font-size: 11px; font-weight: 500; } .conflict-card-choice { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; padding: 10px 12px; background: hsl(var(--primary-light)); border-radius: 8px; } .choice-label { font-size: 12px; color: hsl(var(--muted-foreground)); } .choice-value { font-size: 14px; font-weight: 600; color: hsl(var(--primary)); } .conflict-card-desc { font-size: 13px; color: hsl(var(--muted-foreground)); line-height: 1.5; margin-bottom: 10px; } .conflict-card-brief { font-size: 13px; color: hsl(var(--foreground)); line-height: 1.5; margin-bottom: 12px; } .conflict-card-implications { margin-top: 10px; padding-top: 10px; border-top: 1px solid hsl(var(--border)); } .conflict-card-implications .impl-label { display: block; font-size: 11px; font-weight: 600; color: hsl(var(--muted-foreground)); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 6px; } .conflict-card-implications ul { margin: 0; padding-left: 18px; } .conflict-card-implications li { font-size: 12px; color: hsl(var(--muted-foreground)); line-height: 1.5; margin-bottom: 4px; } .conflict-card-strategy { display: flex; align-items: center; gap: 8px; margin-top: 12px; padding-top: 12px; border-top: 1px solid hsl(var(--border)); } .conflict-card-strategy .strategy-label { font-size: 12px; color: hsl(var(--muted-foreground)); } .strategy-tag { padding: 4px 10px; background: hsl(var(--success-light)); color: hsl(var(--success)); border-radius: 6px; font-size: 12px; font-weight: 500; } /* ========================================== NOTIFICATION SIDEBAR (Right-Side Toolbar) ========================================== */ /* Sidebar Container - Compact floating panel */ .notif-sidebar { position: fixed; top: 60px; right: 16px; width: 320px; max-width: 90vw; max-height: 70vh; background: hsl(var(--card)); border: 1px solid hsl(var(--border)); border-radius: 8px; box-shadow: 0 8px 24px rgb(0 0 0 / 0.15); z-index: 1100; display: flex; flex-direction: column; transform: translateX(calc(100% + 20px)); opacity: 0; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .notif-sidebar.open { transform: translateX(0); opacity: 1; } /* Sidebar Header */ .notif-sidebar-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 14px; border-bottom: 1px solid hsl(var(--border)); background: hsl(var(--muted) / 0.3); border-radius: 8px 8px 0 0; } .notif-sidebar-title { display: flex; align-items: center; gap: 8px; font-size: 0.875rem; font-weight: 600; color: hsl(var(--foreground)); } .notif-title-icon { font-size: 1rem; } .notif-count-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 5px; background: hsl(var(--primary)); color: hsl(var(--primary-foreground)); border-radius: 9px; font-size: 0.6875rem; font-weight: 600; } .notif-sidebar-close { display: flex; align-items: center; justify-content: center; width: 26px; height: 26px; background: transparent; border: none; border-radius: 4px; color: hsl(var(--muted-foreground)); cursor: pointer; transition: all 0.15s; } .notif-sidebar-close:hover { background: hsl(var(--hover)); color: hsl(var(--foreground)); } /* Sidebar Actions */ .notif-sidebar-actions { display: flex; gap: 6px; padding: 8px 14px; border-bottom: 1px solid hsl(var(--border)); background: hsl(var(--background)); } .notif-action-btn { display: flex; align-items: center; gap: 4px; padding: 4px 10px; background: hsl(var(--card)); border: 1px solid hsl(var(--border)); border-radius: 4px; font-size: 0.75rem; color: hsl(var(--muted-foreground)); cursor: pointer; transition: all 0.15s; } .notif-action-btn:hover { background: hsl(var(--hover)); color: hsl(var(--foreground)); border-color: hsl(var(--primary) / 0.5); } /* Sidebar Content */ .notif-sidebar-content { flex: 1; overflow-y: auto; padding: 8px; } /* Empty State */ .notif-empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 32px 16px; text-align: center; } .notif-empty-icon { font-size: 2rem; opacity: 0.3; margin-bottom: 12px; } .notif-empty-text { font-size: 0.875rem; font-weight: 500; color: hsl(var(--muted-foreground)); margin-bottom: 4px; } .notif-empty-hint { font-size: 0.75rem; color: hsl(var(--muted-foreground) / 0.7); } /* Notification Settings */ .notif-sidebar-settings { padding: 8px 12px; border-bottom: 1px solid hsl(var(--border)); background: hsl(var(--muted) / 0.3); } .notif-setting-item { display: flex; align-items: center; gap: 8px; cursor: pointer; font-size: 0.75rem; color: hsl(var(--muted-foreground)); } .notif-setting-item input[type="checkbox"] { width: 14px; height: 14px; cursor: pointer; accent-color: hsl(var(--primary)); } .notif-setting-label { display: flex; align-items: center; gap: 6px; } .notif-setting-label svg { opacity: 0.7; } /* Notification Items */ .notif-item { padding: 8px 10px; background: hsl(var(--card)); border: 1px solid hsl(var(--border)); border-radius: 6px; margin-bottom: 6px; transition: all 0.15s; cursor: default; } .notif-item.has-details { cursor: pointer; } .notif-item:hover { border-color: hsl(var(--primary) / 0.3); box-shadow: 0 2px 8px rgb(0 0 0 / 0.06); } .notif-item.read { opacity: 0.7; } .notif-item.type-info { border-left: 3px solid hsl(var(--primary)); } .notif-item.type-success { border-left: 3px solid hsl(var(--success)); } .notif-item.type-warning { border-left: 3px solid hsl(var(--warning)); } .notif-item.type-error { border-left: 3px solid hsl(var(--destructive)); } .notif-item-header { display: flex; align-items: flex-start; gap: 8px; } .notif-icon { font-size: 0.9375rem; flex-shrink: 0; } .notif-item-content { flex: 1; min-width: 0; } .notif-message { display: block; font-size: 0.8125rem; font-weight: 500; color: hsl(var(--foreground)); line-height: 1.3; word-break: break-word; } .notif-source { display: inline-block; margin-top: 3px; padding: 1px 6px; background: hsl(var(--muted)); border-radius: 3px; font-size: 0.625rem; color: hsl(var(--muted-foreground)); font-family: var(--font-mono); } /* Expand Icon */ .notif-expand-icon { flex-shrink: 0; font-size: 0.625rem; color: hsl(var(--muted-foreground)); opacity: 0.6; transition: transform 0.2s; } .notif-item.expanded .notif-expand-icon { transform: rotate(0deg); } /* Details Hint (collapsed state) */ .notif-details-hint { margin-top: 4px; font-size: 0.6875rem; color: hsl(var(--muted-foreground)); opacity: 0.7; font-style: italic; } /* Expanded Details */ .notif-details-expanded { max-height: 300px; overflow-y: auto; } /* Notification Details */ .notif-details { margin-top: 6px; padding: 6px 8px; background: hsl(var(--muted) / 0.5); border-radius: 4px; font-size: 0.75rem; color: hsl(var(--muted-foreground)); line-height: 1.4; white-space: pre-wrap; word-break: break-word; font-family: var(--font-mono); } /* JSON Formatted Details */ .notif-details-json { margin-top: 6px; padding: 6px 8px; background: hsl(var(--muted) / 0.5); border-radius: 4px; font-size: 0.75rem; line-height: 1.4; font-family: var(--font-mono); } .json-field { padding: 2px 0; } .json-key { color: hsl(var(--primary)); font-weight: 500; } .json-value { color: hsl(var(--foreground)); } .json-string { color: hsl(142 71% 45%); } .json-number { color: hsl(217 91% 60%); } .json-bool { color: hsl(280 65% 60%); } .json-null { color: hsl(var(--muted-foreground)); font-style: italic; } .json-object { color: hsl(var(--muted-foreground)); } .json-empty { color: hsl(var(--muted-foreground)); font-style: italic; } .json-more { color: hsl(var(--muted-foreground)); font-style: italic; padding-top: 4px; } .json-array-item { padding: 2px 0; } .json-index { color: hsl(var(--muted-foreground)); font-size: 0.75rem; margin-right: 6px; } /* Notification Meta */ .notif-meta { margin-top: 6px; padding-top: 6px; border-top: 1px solid hsl(var(--border) / 0.5); } .notif-time { font-size: 0.6875rem; color: hsl(var(--muted-foreground)); } /* Toggle Button (Right Edge) */ .notif-sidebar-toggle { position: fixed; top: 50%; right: 0; transform: translateY(-50%); width: 40px; height: 64px; background: hsl(var(--card)); border: 1px solid hsl(var(--border)); border-right: none; border-radius: 8px 0 0 8px; box-shadow: -2px 0 8px rgb(0 0 0 / 0.1); cursor: pointer; z-index: 1050; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; transition: all 0.2s; } .notif-sidebar-toggle:hover { width: 48px; background: hsl(var(--hover)); } .notif-sidebar-toggle.hidden { transform: translateY(-50%) translateX(100%); opacity: 0; pointer-events: none; } .toggle-icon { font-size: 1.25rem; } .toggle-badge { display: none; min-width: 18px; height: 18px; padding: 0 5px; background: hsl(var(--destructive)); color: white; border-radius: 9px; font-size: 0.6875rem; font-weight: 600; align-items: center; justify-content: center; } .toggle-badge[style*="display: flex"] { display: flex; } /* Overlay */ .notif-sidebar-overlay { position: fixed; inset: 0; background: rgb(0 0 0 / 0.4); z-index: 1090; opacity: 0; visibility: hidden; transition: all 0.3s; } .notif-sidebar-overlay.show { opacity: 1; visibility: visible; } /* Toast Notification */ .notif-toast { position: fixed; bottom: 20px; right: 20px; display: flex; align-items: center; gap: 8px; padding: 8px 14px; background: hsl(var(--card)); border: 1px solid hsl(var(--border)); border-radius: 6px; box-shadow: 0 4px 12px rgb(0 0 0 / 0.15); z-index: 1200; transform: translateY(100px); opacity: 0; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); max-width: 280px; } .notif-toast.show { transform: translateY(0); opacity: 1; } .notif-toast.type-info { border-left: 3px solid hsl(var(--primary)); } .notif-toast.type-success { border-left: 3px solid hsl(var(--success)); } .notif-toast.type-warning { border-left: 3px solid hsl(var(--warning)); } .notif-toast.type-error { border-left: 3px solid hsl(var(--destructive)); } .toast-icon { font-size: 1rem; } .toast-message { font-size: 0.8125rem; color: hsl(var(--foreground)); max-width: 220px; line-height: 1.3; } /* Responsive */ @media (max-width: 480px) { .notif-sidebar { width: 100vw; max-width: 100vw; } .notif-sidebar-toggle { top: auto; bottom: 80px; transform: translateY(0); } .notif-sidebar-toggle.hidden { transform: translateX(100%); } .notif-toast { left: 16px; right: 16px; bottom: 16px; } .toast-message { max-width: none; } } /* ========================================== TASK QUEUE SIDEBAR (Right-Side Toolbar) ========================================== */ /* Sidebar Container - Compact floating panel (matches notif-sidebar) */ .task-queue-sidebar { position: fixed; top: 60px; right: 16px; width: 360px; max-width: 90vw; max-height: 70vh; background: hsl(var(--card)); border: 1px solid hsl(var(--border)); border-radius: 8px; box-shadow: 0 8px 24px rgb(0 0 0 / 0.15); z-index: 1100; display: flex; flex-direction: column; transform: translateX(calc(100% + 20px)); opacity: 0; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .task-queue-sidebar.open { transform: translateX(0); opacity: 1; } /* Sidebar Header */ .task-queue-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 14px; border-bottom: 1px solid hsl(var(--border)); background: hsl(var(--muted) / 0.3); border-radius: 8px 8px 0 0; } .task-queue-title { display: flex; align-items: center; gap: 10px; font-size: 1rem; font-weight: 600; color: hsl(var(--foreground)); } .task-queue-title-icon { font-size: 1.25rem; } .task-queue-count-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 22px; height: 22px; padding: 0 6px; background: hsl(var(--primary)); color: hsl(var(--primary-foreground)); border-radius: 11px; font-size: 0.75rem; font-weight: 600; } .task-queue-close { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; background: transparent; border: none; border-radius: 6px; color: hsl(var(--muted-foreground)); cursor: pointer; transition: all 0.15s; } .task-queue-close:hover { background: hsl(var(--hover)); color: hsl(var(--foreground)); } /* Filters */ .task-queue-filters { display: flex; gap: 6px; padding: 12px 20px; border-bottom: 1px solid hsl(var(--border)); background: hsl(var(--muted) / 0.3); } .task-filter-btn { padding: 6px 12px; background: transparent; border: 1px solid hsl(var(--border)); border-radius: 6px; font-size: 0.8125rem; color: hsl(var(--muted-foreground)); cursor: pointer; transition: all 0.15s; } .task-filter-btn:hover { background: hsl(var(--hover)); color: hsl(var(--foreground)); } .task-filter-btn.active { background: hsl(var(--primary)); color: hsl(var(--primary-foreground)); border-color: hsl(var(--primary)); } /* Sidebar Content */ .task-queue-content { flex: 1; overflow-y: auto; padding: 12px; } /* Empty State */ .task-queue-empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 48px 24px; text-align: center; } .task-queue-empty-icon { font-size: 3rem; opacity: 0.3; margin-bottom: 16px; } .task-queue-empty-text { font-size: 1rem; font-weight: 500; color: hsl(var(--muted-foreground)); margin-bottom: 8px; } .task-queue-empty-hint { font-size: 0.8125rem; color: hsl(var(--muted-foreground) / 0.7); } /* Task Queue Items */ .task-queue-item { padding: 14px 16px; background: hsl(var(--card)); border: 1px solid hsl(var(--border)); border-radius: 10px; margin-bottom: 10px; cursor: pointer; transition: all 0.15s; } .task-queue-item:hover { border-color: hsl(var(--primary) / 0.4); box-shadow: 0 2px 8px rgb(0 0 0 / 0.08); transform: translateX(-2px); } .task-queue-item.status-in_progress { border-left: 4px solid hsl(var(--warning)); background: hsl(var(--warning) / 0.05); } .task-queue-item.status-pending { border-left: 4px solid hsl(var(--muted-foreground)); } .task-queue-item.status-completed { border-left: 4px solid hsl(var(--success)); opacity: 0.7; } .task-queue-item.status-skipped { border-left: 4px solid hsl(var(--muted-foreground) / 0.5); opacity: 0.5; } .task-queue-item-header { display: flex; align-items: flex-start; gap: 12px; } .task-queue-status-icon { font-size: 1.25rem; flex-shrink: 0; margin-top: 2px; } .task-queue-item-info { flex: 1; min-width: 0; } .task-queue-item-title { display: block; font-size: 0.9rem; font-weight: 500; color: hsl(var(--foreground)); line-height: 1.4; word-break: break-word; } .task-queue-item-id { display: block; font-size: 0.75rem; color: hsl(var(--muted-foreground)); font-family: var(--font-mono); margin-top: 4px; } .task-queue-item-meta { display: flex; align-items: center; gap: 8px; margin-top: 10px; flex-wrap: wrap; } .task-queue-session-tag { padding: 3px 8px; background: hsl(var(--muted)); border-radius: 4px; font-size: 0.6875rem; color: hsl(var(--muted-foreground)); font-family: var(--font-mono); max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .task-queue-type-badge { padding: 3px 8px; border-radius: 4px; font-size: 0.6875rem; font-weight: 500; text-transform: uppercase; } .task-queue-type-badge.type-workflow { background: hsl(var(--primary) / 0.15); color: hsl(var(--primary)); } .task-queue-type-badge.type-lite { background: hsl(var(--success) / 0.15); color: hsl(var(--success)); } .task-queue-type-badge.type-tdd { background: hsl(280 65% 60% / 0.15); color: hsl(280 65% 60%); } .task-queue-type-badge.type-test { background: hsl(var(--warning) / 0.15); color: hsl(var(--warning)); } .task-queue-item-scope { margin-top: 8px; padding: 6px 10px; background: hsl(var(--muted) / 0.5); border-radius: 6px; } .task-queue-item-scope code { font-size: 0.75rem; color: hsl(var(--muted-foreground)); font-family: var(--font-mono); word-break: break-all; } /* Toggle Button (Below Notification Toggle) */ .task-queue-toggle { position: fixed; top: calc(50% + 40px); right: 0; transform: translateY(-50%); width: 40px; height: 64px; background: hsl(var(--card)); border: 1px solid hsl(var(--border)); border-right: none; border-radius: 8px 0 0 8px; box-shadow: -2px 0 8px rgb(0 0 0 / 0.1); cursor: pointer; z-index: 1050; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; transition: all 0.2s; } .task-queue-toggle:hover { width: 48px; background: hsl(var(--hover)); } .task-queue-toggle.hidden { transform: translateY(-50%) translateX(100%); opacity: 0; pointer-events: none; } .task-queue-toggle .toggle-icon { font-size: 1.25rem; } .task-queue-toggle .toggle-badge { display: none; min-width: 18px; height: 18px; padding: 0 5px; background: hsl(var(--warning)); color: white; border-radius: 9px; font-size: 0.6875rem; font-weight: 600; align-items: center; justify-content: center; } .task-queue-toggle .toggle-badge[style*="display: flex"] { display: flex; } .task-queue-toggle .toggle-badge.has-active { background: hsl(var(--warning)); animation: taskPulse 2s ease-in-out infinite; } @keyframes taskPulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } } /* Overlay */ .task-queue-overlay { position: fixed; inset: 0; background: rgb(0 0 0 / 0.4); z-index: 1090; opacity: 0; visibility: hidden; transition: all 0.3s; } .task-queue-overlay.show { opacity: 1; visibility: visible; } /* Adjust notification toggle position to be above task toggle */ .notif-sidebar-toggle { top: calc(50% - 40px); } /* Responsive for Task Queue */ @media (max-width: 480px) { .task-queue-sidebar { width: 100vw; max-width: 100vw; } .task-queue-toggle { top: auto; bottom: 80px; transform: translateY(0); } .task-queue-toggle.hidden { transform: translateX(100%); } .notif-sidebar-toggle { bottom: 150px; } } /* ========================================== UPDATE TASKS SECTION - In CLI Tab ========================================== */ /* Section Container */ .update-tasks-section { border-bottom: 1px solid hsl(var(--border)); padding-bottom: 12px; margin-bottom: 12px; } .update-tasks-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 12px; margin-bottom: 8px; } .update-tasks-title { font-size: 0.8125rem; font-weight: 600; color: hsl(var(--foreground)); } .update-tasks-clear-btn { width: 28px; height: 28px; border: none; background: transparent; color: hsl(var(--muted-foreground)); border-radius: 6px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.15s; } .update-tasks-clear-btn:hover { background: hsl(var(--destructive) / 0.1); color: hsl(var(--destructive)); } .update-tasks-list { padding: 0 12px; } .update-tasks-empty { display: flex; flex-direction: column; align-items: center; padding: 16px; text-align: center; color: hsl(var(--muted-foreground)); } .update-tasks-empty span { font-size: 0.8125rem; font-weight: 500; } .update-tasks-empty p { font-size: 0.75rem; margin: 4px 0 0; } /* CLI History Section */ .cli-history-section { padding-top: 4px; } .cli-history-header { display: flex; align-items: center; padding: 8px 12px; margin-bottom: 8px; } .cli-history-title { font-size: 0.8125rem; font-weight: 600; color: hsl(var(--foreground)); } .cli-history-list { padding: 0 12px; } /* Individual Update Task Item */ .update-task-item { background: hsl(var(--background)); border: 1px solid hsl(var(--border)); border-radius: 8px; padding: 10px 12px; margin-bottom: 8px; transition: all 0.15s ease; } .update-task-item:last-child { margin-bottom: 0; } .update-task-item.status-pending { border-left: 3px solid hsl(var(--muted-foreground)); } .update-task-item.status-running { border-left: 3px solid hsl(var(--warning)); background: hsl(var(--warning) / 0.05); } .update-task-item.status-completed { border-left: 3px solid hsl(var(--success)); background: hsl(var(--success) / 0.05); opacity: 0.8; } .update-task-item.status-failed { border-left: 3px solid hsl(var(--destructive)); background: hsl(var(--destructive) / 0.05); } .update-task-header { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; } .update-task-status { font-size: 14px; flex-shrink: 0; } .update-task-item.status-running .update-task-status { animation: spin 1s linear infinite; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .update-task-name { flex: 1; font-size: 0.8125rem; font-weight: 500; color: hsl(var(--foreground)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .update-task-strategy { font-size: 14px; flex-shrink: 0; } .update-task-controls { display: flex; align-items: center; gap: 6px; } .update-task-cli-select { height: 28px; padding: 0 8px; font-size: 0.75rem; border: 1px solid hsl(var(--border)); border-radius: 6px; background: hsl(var(--background)); color: hsl(var(--foreground)); cursor: pointer; transition: all 0.15s; } .update-task-cli-select:hover:not(:disabled) { border-color: hsl(var(--primary)); } .update-task-cli-select:disabled { opacity: 0.6; cursor: not-allowed; } .update-task-btn { width: 28px; height: 28px; border: none; border-radius: 6px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.15s; } .update-task-start { background: hsl(var(--primary)); color: hsl(var(--primary-foreground)); } .update-task-start:hover { background: hsl(var(--primary) / 0.9); transform: scale(1.05); } .update-task-remove { background: transparent; color: hsl(var(--muted-foreground)); } .update-task-remove:hover { background: hsl(var(--destructive) / 0.1); color: hsl(var(--destructive)); } .update-task-stop { background: hsl(var(--warning)); color: white; } .update-task-stop:hover { background: hsl(var(--warning) / 0.9); } .update-task-message { font-size: 0.6875rem; color: hsl(var(--muted-foreground)); margin-top: 6px; padding-top: 6px; border-top: 1px solid hsl(var(--border)); }