UNPKG

claude-flow-multilang

Version:

Revolutionary multilingual AI orchestration framework with cultural awareness and DDD architecture

621 lines (541 loc) 12.1 kB
/* Console CSS - Terminal-like web interface for Claude Code */ :root { /* Dark theme colors */ --bg-primary: #0d1117; --bg-secondary: #161b22; --bg-tertiary: #21262d; --text-primary: #c9d1d9; --text-secondary: #8b949e; --text-accent: #58a6ff; --text-success: #3fb950; --text-warning: #d29922; --text-error: #f85149; --border-primary: #30363d; --border-secondary: #21262d; --accent-primary: #1f6feb; --accent-hover: #388bfd; --console-bg: #0d1117; --console-text: #c9d1d9; --console-prompt: #58a6ff; --console-cursor: #c9d1d9; /* Typography */ --font-mono: 'JetBrains Mono', 'Consolas', 'Monaco', 'Courier New', monospace; --font-size-base: 14px; --font-size-small: 12px; --line-height: 1.4; /* Spacing */ --spacing-xs: 4px; --spacing-sm: 8px; --spacing-md: 16px; --spacing-lg: 24px; --spacing-xl: 32px; /* Animation */ --transition-fast: 150ms ease; --transition-medium: 250ms ease; --transition-slow: 350ms ease; } /* Light theme override */ [data-theme='light'] { --bg-primary: #ffffff; --bg-secondary: #f6f8fa; --bg-tertiary: #eaeef2; --text-primary: #24292f; --text-secondary: #656d76; --text-accent: #0969da; --text-success: #1a7f37; --text-warning: #9a6700; --text-error: #d1242f; --border-primary: #d0d7de; --border-secondary: #eaeef2; --console-bg: #ffffff; --console-text: #24292f; --console-prompt: #0969da; --console-cursor: #24292f; } /* Classic terminal theme */ [data-theme='classic'] { --bg-primary: #000000; --bg-secondary: #1a1a1a; --bg-tertiary: #2d2d2d; --text-primary: #00ff00; --text-secondary: #008000; --text-accent: #00ff00; --text-success: #00ff00; --text-warning: #ffff00; --text-error: #ff0000; --border-primary: #333333; --console-bg: #000000; --console-text: #00ff00; --console-prompt: #00ff00; --console-cursor: #00ff00; } /* Matrix theme */ [data-theme='matrix'] { --bg-primary: #000000; --bg-secondary: #001100; --bg-tertiary: #002200; --text-primary: #00ff41; --text-secondary: #008f11; --text-accent: #00ff41; --text-success: #00ff41; --text-warning: #ffff00; --text-error: #ff0000; --border-primary: #003300; --console-bg: #000000; --console-text: #00ff41; --console-prompt: #00ff41; --console-cursor: #00ff41; } /* Global styles */ * { box-sizing: border-box; } html, body { margin: 0; padding: 0; height: 100%; font-family: var(--font-mono); font-size: var(--font-size-base); line-height: var(--line-height); background-color: var(--bg-primary); color: var(--text-primary); overflow: hidden; } body { display: flex; flex-direction: column; } /* Header */ .console-header { display: flex; justify-content: space-between; align-items: center; padding: var(--spacing-sm) var(--spacing-md); background-color: var(--bg-secondary); border-bottom: 1px solid var(--border-primary); min-height: 56px; flex-shrink: 0; } .header-left { display: flex; align-items: center; gap: var(--spacing-lg); } .console-title { margin: 0; font-size: 16px; font-weight: 500; color: var(--text-primary); display: flex; align-items: center; gap: var(--spacing-sm); } .console-icon { font-size: 18px; } .connection-status { display: flex; align-items: center; gap: var(--spacing-sm); font-size: var(--font-size-small); } .status-indicator { width: 8px; height: 8px; border-radius: 50%; background-color: var(--text-error); animation: pulse 2s infinite; } .status-indicator.connected { background-color: var(--text-success); animation: none; } .status-indicator.connecting { background-color: var(--text-warning); } .header-right { display: flex; gap: var(--spacing-sm); } .header-button { display: flex; align-items: center; gap: var(--spacing-xs); padding: var(--spacing-sm) var(--spacing-md); background-color: transparent; color: var(--text-secondary); border: 1px solid var(--border-primary); border-radius: 4px; cursor: pointer; font-family: var(--font-mono); font-size: var(--font-size-small); transition: all var(--transition-fast); } .header-button:hover { background-color: var(--bg-tertiary); color: var(--text-primary); border-color: var(--border-secondary); } .header-button:active { background-color: var(--accent-primary); color: white; } .header-button .icon { font-size: 12px; } /* Main content */ .console-main { flex: 1; display: flex; min-height: 0; position: relative; } /* Console container */ .console-container { flex: 1; display: flex; flex-direction: column; background-color: var(--console-bg); min-height: 0; } /* Console output */ .console-output { flex: 1; padding: var(--spacing-md); overflow-y: auto; font-family: var(--font-mono); color: var(--console-text); line-height: var(--line-height); white-space: pre-wrap; word-wrap: break-word; min-height: 0; } .console-output::-webkit-scrollbar { width: 12px; } .console-output::-webkit-scrollbar-track { background-color: var(--bg-secondary); } .console-output::-webkit-scrollbar-thumb { background-color: var(--border-primary); border-radius: 6px; } .console-output::-webkit-scrollbar-thumb:hover { background-color: var(--border-secondary); } /* Welcome message */ .welcome-message { color: var(--text-accent); margin-bottom: var(--spacing-lg); } .ascii-art { font-family: var(--font-mono); font-size: var(--font-size-small); line-height: 1.2; color: var(--text-accent); white-space: pre; font-weight: normal; letter-spacing: 0; word-spacing: 0; text-align: left; font-variant-ligatures: none; font-feature-settings: 'liga' 0; overflow-x: auto; display: block; } /* Console output entries */ .output-entry { margin-bottom: var(--spacing-xs); display: flex; flex-direction: column; } .output-line { display: flex; align-items: flex-start; gap: var(--spacing-sm); } .output-timestamp { color: var(--text-secondary); font-size: var(--font-size-small); min-width: 80px; flex-shrink: 0; } .output-content { flex: 1; color: var(--console-text); } .output-content.command { color: var(--console-prompt); font-weight: 500; } .output-content.success { color: var(--text-success); } .output-content.warning { color: var(--text-warning); } .output-content.error { color: var(--text-error); } .output-content.info { color: var(--text-accent); } /* Console input area */ .console-input-area { background-color: var(--bg-secondary); border-top: 1px solid var(--border-primary); padding: var(--spacing-md); flex-shrink: 0; } .input-prompt { display: flex; align-items: center; gap: var(--spacing-sm); } .prompt-text { color: var(--console-prompt); font-weight: 500; white-space: nowrap; } .console-input { flex: 1; background-color: transparent; border: none; outline: none; color: var(--console-text); font-family: var(--font-mono); font-size: var(--font-size-base); line-height: var(--line-height); padding: var(--spacing-xs) 0; caret-color: var(--console-cursor); } .console-input::placeholder { color: var(--text-secondary); opacity: 0.6; } /* Input suggestions */ .input-suggestions { margin-top: var(--spacing-sm); background-color: var(--bg-tertiary); border: 1px solid var(--border-primary); border-radius: 4px; max-height: 200px; overflow-y: auto; display: none; } .input-suggestions.visible { display: block; } .suggestion-item { padding: var(--spacing-sm) var(--spacing-md); cursor: pointer; color: var(--text-primary); border-bottom: 1px solid var(--border-secondary); } .suggestion-item:last-child { border-bottom: none; } .suggestion-item:hover, .suggestion-item.selected { background-color: var(--accent-primary); color: white; } .suggestion-command { font-weight: 500; } .suggestion-description { font-size: var(--font-size-small); color: var(--text-secondary); margin-top: var(--spacing-xs); } /* Status bar */ .status-bar { display: flex; justify-content: space-between; align-items: center; padding: var(--spacing-xs) var(--spacing-md); background-color: var(--bg-secondary); border-top: 1px solid var(--border-primary); font-size: var(--font-size-small); color: var(--text-secondary); flex-shrink: 0; min-height: 32px; } .status-left, .status-right { display: flex; gap: var(--spacing-md); } .status-item { white-space: nowrap; } /* Loading overlay */ .loading-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.8); display: flex; align-items: center; justify-content: center; z-index: 1000; backdrop-filter: blur(4px); } .loading-overlay.hidden { display: none; } .loading-spinner { display: flex; flex-direction: column; align-items: center; gap: var(--spacing-lg); } .spinner { width: 40px; height: 40px; border: 3px solid var(--border-primary); border-top-color: var(--accent-primary); border-radius: 50%; animation: spin 1s linear infinite; } .loading-text { color: var(--text-primary); font-size: 16px; } /* Animations */ @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } @keyframes spin { to { transform: rotate(360deg); } } @keyframes blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } /* Cursor animation */ .console-input:focus::after { content: ''; position: absolute; right: 0; top: 0; bottom: 0; width: 2px; background-color: var(--console-cursor); animation: blink 1s infinite; } /* Selection styles */ ::selection { background-color: var(--accent-primary); color: white; } ::-moz-selection { background-color: var(--accent-primary); color: white; } /* Focus styles */ .console-input:focus { outline: none; } button:focus-visible { outline: 2px solid var(--accent-primary); outline-offset: 2px; } /* Error states */ .error-message { color: var(--text-error); background-color: rgba(248, 81, 73, 0.1); border: 1px solid var(--text-error); border-radius: 4px; padding: var(--spacing-md); margin: var(--spacing-md) 0; } /* Success states */ .success-message { color: var(--text-success); background-color: rgba(63, 185, 80, 0.1); border: 1px solid var(--text-success); border-radius: 4px; padding: var(--spacing-md); margin: var(--spacing-md) 0; } /* Warning states */ .warning-message { color: var(--text-warning); background-color: rgba(210, 153, 34, 0.1); border: 1px solid var(--text-warning); border-radius: 4px; padding: var(--spacing-md); margin: var(--spacing-md) 0; } /* Info states */ .info-message { color: var(--text-accent); background-color: rgba(88, 166, 255, 0.1); border: 1px solid var(--text-accent); border-radius: 4px; padding: var(--spacing-md); margin: var(--spacing-md) 0; } /* Scroll indicator */ .scroll-indicator { position: absolute; bottom: 60px; right: var(--spacing-md); background-color: var(--bg-tertiary); color: var(--text-primary); border: 1px solid var(--border-primary); border-radius: 8px; padding: var(--spacing-sm) var(--spacing-md); display: none; align-items: center; gap: var(--spacing-sm); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); backdrop-filter: blur(8px); z-index: 100; font-size: var(--font-size-small); transition: all var(--transition-fast); } .scroll-indicator:hover { background-color: var(--bg-secondary); border-color: var(--border-secondary); } .scroll-text { color: var(--text-secondary); white-space: nowrap; } .scroll-resume-btn { background-color: var(--accent-primary); color: white; border: none; border-radius: 4px; padding: var(--spacing-xs) var(--spacing-sm); font-family: var(--font-mono); font-size: var(--font-size-small); cursor: pointer; transition: background-color var(--transition-fast); white-space: nowrap; } .scroll-resume-btn:hover { background-color: var(--accent-hover); } .scroll-resume-btn:active { transform: translateY(1px); }