| @import "tailwindcss"; |
|
|
| |
| :root, [data-theme="dark"] { |
| --bg: #0d1117; |
| --bg-2: #161b22; |
| --bg-3: #21262d; |
| --surface: #1c2128; |
| --surface-hover: #292e36; |
| --border: #30363d; |
| --border-subtle: #21262d; |
| --accent: #39d353; |
| --accent-dim: #26a641; |
| --accent-text: #39d353; |
| --text: #e6edf3; |
| --text-2: #8b949e; |
| --text-muted: #6e7681; |
| --text-on-accent: #0d1117; |
| --error: #f85149; |
| --warning: #d29922; |
| --info: #58a6ff; |
| --success: #39d353; |
| --status-bar: #161b22; |
| --activity-bar: #0d1117; |
| --sidebar: #161b22; |
| --tab-active: #0d1117; |
| --tab-inactive: #161b22; |
| --scrollbar: #30363d; |
| --btn-primary: #39d353; |
| --btn-text: #0d1117; |
| --editor-bg: #0d1117; |
| --editor-line: #161b22; |
| --editor-selection: #264f78; |
| --terminal-bg: #0d1117; |
| --terminal-fg: #e6edf3; |
| --terminal-cursor: #39d353; |
| } |
|
|
| [data-theme="light"] { |
| --bg: #faf8f5; |
| --bg-2: #f0ece4; |
| --bg-3: #e8e0d4; |
| --surface: #ffffff; |
| --surface-hover: #f0ece4; |
| --border: #d4c9b8; |
| --border-subtle: #e8e0d4; |
| --accent: #6f4e37; |
| --accent-dim: #8b6347; |
| --accent-text: #6f4e37; |
| --text: #1c1412; |
| --text-2: #5c3d2e; |
| --text-muted: #8b7355; |
| --text-on-accent: #faf8f5; |
| --error: #c0392b; |
| --warning: #d68910; |
| --info: #2471a3; |
| --success: #27ae60; |
| --status-bar: #f0ece4; |
| --activity-bar: #e8e0d4; |
| --sidebar: #f0ece4; |
| --tab-active: #faf8f5; |
| --tab-inactive: #f0ece4; |
| --scrollbar: #d4c9b8; |
| --btn-primary: #6f4e37; |
| --btn-text: #faf8f5; |
| --editor-bg: #faf8f5; |
| --editor-line: #f0ece4; |
| --editor-selection: #d4c9b8; |
| --terminal-bg: #1c1412; |
| --terminal-fg: #faf8f5; |
| --terminal-cursor: #6f4e37; |
| } |
|
|
| |
| @layer base { |
| * { box-sizing: border-box; margin: 0; padding: 0; } |
|
|
| html, body { height: 100%; overflow: hidden; } |
|
|
| body { |
| font-family: "Inter", -apple-system, BlinkMacSystemFont, sans-serif; |
| background: var(--bg); |
| color: var(--text); |
| font-size: 13px; |
| line-height: 1.5; |
| -webkit-font-smoothing: antialiased; |
| } |
| } |
|
|
| |
| ::-webkit-scrollbar { width: 6px; height: 6px; } |
| ::-webkit-scrollbar-track { background: transparent; } |
| ::-webkit-scrollbar-thumb { background: var(--scrollbar); border-radius: 3px; } |
| ::-webkit-scrollbar-thumb:hover { background: var(--text-muted); } |
|
|
| |
| .monaco-editor, .monaco-editor-background, .monaco-editor .inputarea.ime-input { |
| background: var(--editor-bg) !important; |
| } |
| .monaco-editor .margin { background: var(--editor-bg) !important; } |
| .monaco-editor .minimap { background: var(--bg-2) !important; } |
|
|
| |
| .xterm-viewport { background: var(--terminal-bg) !important; } |
| .xterm { background: var(--terminal-bg) !important; } |
|
|
| |
| @keyframes fadeIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } } |
| @keyframes slideIn { from { opacity: 0; transform: translateX(-8px); } to { opacity: 1; transform: translateX(0); } } |
| @keyframes pulse-accent { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } |
| @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } |
| @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } |
|
|
| .animate-fade-in { animation: fadeIn 0.2s ease forwards; } |
| .animate-slide-in { animation: slideIn 0.15s ease forwards; } |
| .animate-pulse-accent { animation: pulse-accent 2s ease-in-out infinite; } |
| .animate-spin { animation: spin 1s linear infinite; } |
|
|
| |
| .skeleton { |
| background: linear-gradient(90deg, var(--bg-2) 25%, var(--bg-3) 50%, var(--bg-2) 75%); |
| background-size: 200% 100%; |
| animation: shimmer 1.5s infinite; |
| border-radius: 4px; |
| } |
|
|
| |
| .ide-shell { |
| display: grid; |
| grid-template-rows: 1fr 22px; |
| grid-template-columns: 48px 1fr; |
| height: 100dvh; |
| width: 100vw; |
| overflow: hidden; |
| } |
|
|
| |
| .activity-bar { |
| grid-row: 1; |
| grid-column: 1; |
| background: var(--activity-bar); |
| border-right: 1px solid var(--border-subtle); |
| display: flex; |
| flex-direction: column; |
| align-items: center; |
| padding: 8px 0; |
| gap: 2px; |
| z-index: 10; |
| } |
|
|
| .activity-btn { |
| position: relative; |
| width: 40px; |
| height: 40px; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| border-radius: 8px; |
| color: var(--text-2); |
| cursor: pointer; |
| transition: background 0.15s, color 0.15s; |
| border: none; |
| background: transparent; |
| } |
|
|
| .activity-btn:hover { background: var(--surface-hover); color: var(--text); } |
| .activity-btn.active { color: var(--accent); } |
| .activity-btn.active::before { |
| content: ""; |
| position: absolute; |
| left: 0; |
| top: 8px; |
| bottom: 8px; |
| width: 2px; |
| background: var(--accent); |
| border-radius: 0 2px 2px 0; |
| } |
|
|
| |
| .status-bar { |
| grid-row: 2; |
| grid-column: 1 / -1; |
| background: var(--status-bar); |
| border-top: 1px solid var(--border-subtle); |
| display: flex; |
| align-items: center; |
| gap: 0; |
| padding: 0 8px; |
| font-size: 11px; |
| color: var(--text-2); |
| user-select: none; |
| z-index: 50; |
| } |
|
|
| .status-item { |
| display: flex; |
| align-items: center; |
| gap: 4px; |
| padding: 0 8px; |
| height: 22px; |
| cursor: pointer; |
| transition: background 0.1s; |
| white-space: nowrap; |
| } |
| .status-item:hover { background: var(--surface-hover); } |
| .status-item.accent { color: var(--accent); } |
| .status-item.error { color: var(--error); } |
| .status-item.warning { color: var(--warning); } |
| .status-divider { width: 1px; height: 12px; background: var(--border); margin: 0 2px; } |
|
|
| |
| .tab-bar { |
| display: flex; |
| align-items: center; |
| background: var(--bg-2); |
| border-bottom: 1px solid var(--border-subtle); |
| overflow-x: auto; |
| min-height: 35px; |
| flex-shrink: 0; |
| } |
|
|
| .tab-bar::-webkit-scrollbar { height: 0; } |
|
|
| .tab { |
| display: flex; |
| align-items: center; |
| gap: 6px; |
| padding: 0 12px; |
| height: 35px; |
| border-right: 1px solid var(--border-subtle); |
| cursor: pointer; |
| white-space: nowrap; |
| font-size: 12px; |
| color: var(--text-2); |
| background: var(--tab-inactive); |
| transition: background 0.1s, color 0.1s; |
| position: relative; |
| flex-shrink: 0; |
| } |
|
|
| .tab.active { |
| background: var(--tab-active); |
| color: var(--text); |
| border-bottom: 1px solid var(--accent); |
| } |
|
|
| .tab:hover:not(.active) { background: var(--surface-hover); color: var(--text); } |
|
|
| .tab-close { |
| width: 16px; |
| height: 16px; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| border-radius: 3px; |
| opacity: 0; |
| cursor: pointer; |
| color: var(--text-2); |
| transition: opacity 0.1s, background 0.1s; |
| flex-shrink: 0; |
| } |
|
|
| .tab:hover .tab-close, .tab.active .tab-close { opacity: 1; } |
| .tab-close:hover { background: var(--surface-hover); color: var(--error); } |
|
|
| |
| .sidebar { |
| background: var(--sidebar); |
| border-right: 1px solid var(--border-subtle); |
| display: flex; |
| flex-direction: column; |
| overflow: hidden; |
| min-width: 0; |
| } |
|
|
| .sidebar-header { |
| padding: 8px 12px 6px; |
| font-size: 10px; |
| font-weight: 600; |
| letter-spacing: 0.08em; |
| color: var(--text-muted); |
| text-transform: uppercase; |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| flex-shrink: 0; |
| } |
|
|
| |
| .file-tree-item { |
| display: flex; |
| align-items: center; |
| gap: 4px; |
| padding: 2px 0 2px 8px; |
| cursor: pointer; |
| border-radius: 4px; |
| font-size: 13px; |
| color: var(--text); |
| transition: background 0.1s; |
| white-space: nowrap; |
| overflow: hidden; |
| text-overflow: ellipsis; |
| } |
|
|
| .file-tree-item:hover { background: var(--surface-hover); } |
| .file-tree-item.active { background: var(--bg-3); color: var(--accent); } |
|
|
| |
| .context-menu { |
| position: fixed; |
| background: var(--surface); |
| border: 1px solid var(--border); |
| border-radius: 8px; |
| padding: 4px; |
| min-width: 180px; |
| box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4); |
| z-index: 9999; |
| animation: fadeIn 0.1s ease; |
| } |
|
|
| .context-menu-item { |
| display: flex; |
| align-items: center; |
| gap: 8px; |
| padding: 6px 10px; |
| border-radius: 5px; |
| cursor: pointer; |
| font-size: 12px; |
| color: var(--text); |
| transition: background 0.1s; |
| } |
|
|
| .context-menu-item:hover { background: var(--surface-hover); } |
| .context-menu-item.destructive:hover { background: rgba(248, 81, 73, 0.15); color: var(--error); } |
| .context-menu-separator { height: 1px; background: var(--border-subtle); margin: 4px 0; } |
|
|
| |
| .command-palette-overlay { |
| position: fixed; |
| inset: 0; |
| background: rgba(0,0,0,0.6); |
| backdrop-filter: blur(4px); |
| z-index: 10000; |
| display: flex; |
| align-items: flex-start; |
| justify-content: center; |
| padding-top: 10vh; |
| } |
|
|
| .command-palette { |
| background: var(--surface); |
| border: 1px solid var(--border); |
| border-radius: 10px; |
| width: min(640px, 90vw); |
| max-height: 60vh; |
| overflow: hidden; |
| box-shadow: 0 20px 60px rgba(0,0,0,0.6); |
| display: flex; |
| flex-direction: column; |
| } |
|
|
| .command-input { |
| padding: 14px 16px; |
| font-size: 14px; |
| background: transparent; |
| border: none; |
| border-bottom: 1px solid var(--border-subtle); |
| color: var(--text); |
| width: 100%; |
| outline: none; |
| font-family: "Inter", sans-serif; |
| } |
|
|
| .command-input::placeholder { color: var(--text-muted); } |
| .command-results { overflow-y: auto; max-height: 50vh; padding: 4px; } |
|
|
| .command-item { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| padding: 8px 12px; |
| border-radius: 6px; |
| cursor: pointer; |
| color: var(--text); |
| font-size: 13px; |
| transition: background 0.1s; |
| } |
|
|
| .command-item:hover, .command-item.focused { background: var(--surface-hover); } |
| .command-item kbd { |
| font-size: 10px; |
| background: var(--bg-3); |
| border: 1px solid var(--border); |
| border-radius: 4px; |
| padding: 1px 5px; |
| color: var(--text-2); |
| font-family: "JetBrains Mono", monospace; |
| } |
|
|
| |
| .btn { |
| display: inline-flex; |
| align-items: center; |
| gap: 6px; |
| padding: 6px 14px; |
| border-radius: 6px; |
| font-size: 13px; |
| font-weight: 500; |
| cursor: pointer; |
| transition: all 0.15s; |
| border: 1px solid transparent; |
| font-family: inherit; |
| } |
|
|
| .btn-primary { |
| background: var(--btn-primary); |
| color: var(--btn-text); |
| border-color: var(--btn-primary); |
| } |
| .btn-primary:hover { filter: brightness(1.1); } |
|
|
| .btn-secondary { |
| background: transparent; |
| color: var(--text); |
| border-color: var(--border); |
| } |
| .btn-secondary:hover { background: var(--surface-hover); } |
|
|
| .btn-ghost { |
| background: transparent; |
| color: var(--text-2); |
| border-color: transparent; |
| } |
| .btn-ghost:hover { background: var(--surface-hover); color: var(--text); } |
|
|
| .btn:disabled { opacity: 0.4; cursor: not-allowed; } |
|
|
| |
| .input { |
| background: var(--bg-2); |
| border: 1px solid var(--border); |
| border-radius: 6px; |
| padding: 8px 12px; |
| font-size: 13px; |
| color: var(--text); |
| font-family: inherit; |
| outline: none; |
| transition: border-color 0.15s; |
| width: 100%; |
| } |
| .input:focus { border-color: var(--accent); } |
| .input::placeholder { color: var(--text-muted); } |
|
|
| |
| .card { |
| background: var(--surface); |
| border: 1px solid var(--border); |
| border-radius: 10px; |
| overflow: hidden; |
| } |
|
|
| .card:hover { border-color: var(--accent); } |
|
|
| |
| .modal-overlay { |
| position: fixed; |
| inset: 0; |
| background: rgba(0,0,0,0.7); |
| backdrop-filter: blur(6px); |
| z-index: 10000; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| padding: 20px; |
| } |
|
|
| .modal { |
| background: var(--surface); |
| border: 1px solid var(--border); |
| border-radius: 12px; |
| box-shadow: 0 24px 80px rgba(0,0,0,0.6); |
| width: min(560px, 95vw); |
| max-height: 90vh; |
| overflow-y: auto; |
| } |
|
|
| .modal-header { |
| padding: 20px 24px 0; |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| } |
|
|
| .modal-body { padding: 20px 24px; } |
| .modal-footer { |
| padding: 0 24px 20px; |
| display: flex; |
| align-items: center; |
| justify-content: flex-end; |
| gap: 8px; |
| } |
|
|
| |
| .dashboard-grid { |
| display: grid; |
| grid-template-columns: 340px 1fr; |
| gap: 0; |
| height: 100%; |
| overflow: hidden; |
| } |
|
|
| @media (max-width: 768px) { |
| .dashboard-grid { grid-template-columns: 1fr; } |
| .ide-shell { grid-template-columns: 1fr; } |
| .activity-bar { display: none; } |
| .sidebar { display: none; } |
| } |
|
|
| |
| .badge { |
| display: inline-flex; |
| align-items: center; |
| padding: 2px 7px; |
| border-radius: 20px; |
| font-size: 10px; |
| font-weight: 600; |
| letter-spacing: 0.04em; |
| } |
|
|
| .badge-accent { background: rgba(57, 211, 83, 0.15); color: var(--accent); } |
| .badge-error { background: rgba(248, 81, 73, 0.15); color: var(--error); } |
| .badge-warning { background: rgba(210, 153, 34, 0.15); color: var(--warning); } |
| .badge-info { background: rgba(88, 166, 255, 0.15); color: var(--info); } |
|
|
| |
| .plan-step { |
| display: flex; |
| align-items: flex-start; |
| gap: 10px; |
| padding: 10px 12px; |
| border-radius: 8px; |
| border: 1px solid var(--border-subtle); |
| background: var(--bg-2); |
| margin-bottom: 6px; |
| } |
|
|
| .plan-step.running { border-color: var(--accent); background: rgba(57, 211, 83, 0.05); } |
| .plan-step.done { opacity: 0.7; } |
| .plan-step.error { border-color: var(--error); background: rgba(248, 81, 73, 0.05); } |
|
|
| |
| @media (max-width: 768px) { |
| .modal { width: 95vw; } |
| .command-palette { width: 95vw; } |
| body { overflow: auto; } |
| html, body { height: auto; } |
| } |
|
|