Tesseract / studio /src /index.css
rkbosamia's picture
Tesseract major version upgrade - v2
9c49532
Raw
History Blame Contribute Delete
4.65 kB
@import "tailwindcss";
/* ── Dark theme (default) ──────────────────────────────────────────────── */
:root {
/* Surfaces */
--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 */
--text: #ededf0;
--text-dim: #8b8b94;
--text-faint: #4a4a52;
/* Brand: violet primary, cyan live accent */
--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 / logs — slightly darker than --bg so panels visually pop */
--code-bg: #0d0d0d;
--code-text: #d1d5db;
}
/* ── Light theme ───────────────────────────────────────────────────────── */
[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; /* keep dark — log lines read better on dark */
--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;
}
/* Scrollbars — slim, theme-coherent */
::-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 */
::selection {
background: var(--accent-bg);
color: var(--text);
}
/* Focus outline harmonised with brand */
:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
border-radius: 4px;
}
/* Button press feedback */
button:not(:disabled) {
transition: transform 0.08s ease, opacity 0.08s ease;
}
button:active:not(:disabled) {
transform: scale(0.93);
opacity: 0.8;
}
/* Streaming input border — applied directly to the textarea so it stays pixel-perfect */
@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;
}
/* Animations */
@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;
}