| @import "tailwindcss"; |
|
|
| |
| :root { |
| |
| --bg: #08080b; |
| --surface: #101013; |
| --surface-2: #16161b; |
| --surface-3: #1c1c22; |
| --border: rgba(255, 255, 255, 0.06); |
| --border-2: rgba(255, 255, 255, 0.10); |
|
|
| |
| --text: #ededf0; |
| --text-dim: #8b8b94; |
| --text-faint: #4a4a52; |
|
|
| |
| --accent: #8b5cf6; |
| --accent-hi: #a78bfa; |
| --accent-lo: #6d28d9; |
| --accent-bg: rgba(139, 92, 246, 0.12); |
| --accent-glow: rgba(139, 92, 246, 0.35); |
|
|
| --live: #22d3ee; |
| --live-glow: rgba(34, 211, 238, 0.45); |
|
|
| --danger: #f87171; |
|
|
| |
| --code-bg: #0d0d0d; |
| --code-text: #d1d5db; |
| } |
|
|
| |
| [data-theme="light"] { |
| --bg: #f7f7f9; |
| --surface: #ffffff; |
| --surface-2: #f1f1f4; |
| --surface-3: #e8e8ec; |
| --border: rgba(0, 0, 0, 0.08); |
| --border-2: rgba(0, 0, 0, 0.14); |
|
|
| --text: #18181b; |
| --text-dim: #5b5b66; |
| --text-faint: #a0a0aa; |
|
|
| --accent: #7c3aed; |
| --accent-hi: #6d28d9; |
| --accent-lo: #5b21b6; |
| --accent-bg: rgba(124, 58, 237, 0.10); |
| --accent-glow: rgba(124, 58, 237, 0.25); |
|
|
| --live: #0891b2; |
| --live-glow: rgba(8, 145, 178, 0.30); |
|
|
| --danger: #dc2626; |
|
|
| --code-bg: #1e1e22; |
| --code-text: #d1d5db; |
| } |
|
|
| * { box-sizing: border-box; } |
|
|
| html, body, #root { |
| height: 100%; |
| margin: 0; |
| padding: 0; |
| background: var(--bg); |
| color: var(--text); |
| font-family: 'Inter', system-ui, -apple-system, sans-serif; |
| -webkit-font-smoothing: antialiased; |
| -moz-osx-font-smoothing: grayscale; |
| } |
|
|
| code, pre, .mono { |
| font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace; |
| font-feature-settings: 'calt' 1, 'liga' 0; |
| } |
|
|
| |
| ::-webkit-scrollbar { width: 8px; height: 8px; } |
| ::-webkit-scrollbar-track { background: transparent; } |
| ::-webkit-scrollbar-thumb { |
| background: rgba(255, 255, 255, 0.08); |
| border-radius: 4px; |
| } |
| ::-webkit-scrollbar-thumb:hover { |
| background: rgba(255, 255, 255, 0.16); |
| } |
|
|
| |
| ::selection { |
| background: var(--accent-bg); |
| color: var(--text); |
| } |
|
|
| |
| :focus-visible { |
| outline: 2px solid var(--accent); |
| outline-offset: 2px; |
| border-radius: 4px; |
| } |
|
|
| |
| button:not(:disabled) { |
| transition: transform 0.08s ease, opacity 0.08s ease; |
| } |
| button:active:not(:disabled) { |
| transform: scale(0.93); |
| opacity: 0.8; |
| } |
|
|
| |
| @keyframes streaming-border-pulse { |
| 0%, 100% { |
| outline-color: var(--accent); |
| box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.45), 0 0 18px rgba(139, 92, 246, 0.35); |
| } |
| 50% { |
| outline-color: var(--live); |
| box-shadow: 0 0 0 3px rgba(34, 211, 238, 0.5), 0 0 18px rgba(34, 211, 238, 0.4); |
| } |
| } |
| .streaming-input { |
| outline: 2px solid var(--accent) !important; |
| outline-offset: 0px; |
| animation: streaming-border-pulse 2s ease-in-out infinite; |
| } |
|
|
| |
| @keyframes pulse-live { |
| 0%, 100% { box-shadow: 0 0 0 0 var(--live-glow); opacity: 1; } |
| 50% { box-shadow: 0 0 0 6px transparent; opacity: 0.65; } |
| } |
| .pulse-live { animation: pulse-live 1.6s ease-in-out infinite; } |
|
|
| @keyframes spin { |
| from { transform: rotate(0deg); } |
| to { transform: rotate(360deg); } |
| } |
|
|
| @keyframes fade-in { |
| from { opacity: 0; transform: translateY(4px); } |
| to { opacity: 1; transform: translateY(0); } |
| } |
| .fade-in { animation: fade-in 0.18s ease-out; } |
|
|
| @keyframes shimmer { |
| 0% { background-position: -200% 0; } |
| 100% { background-position: 200% 0; } |
| } |
| .streaming-border { |
| position: relative; |
| } |
| .streaming-border::after { |
| content: ''; |
| position: absolute; |
| inset: 0; |
| border-radius: inherit; |
| padding: 1px; |
| background: linear-gradient(90deg, transparent, var(--accent), var(--live), var(--accent), transparent); |
| background-size: 200% 100%; |
| animation: shimmer 2.4s linear infinite; |
| -webkit-mask: |
| linear-gradient(#000 0 0) content-box, |
| linear-gradient(#000 0 0); |
| -webkit-mask-composite: xor; |
| mask-composite: exclude; |
| pointer-events: none; |
| } |
|
|