Voice-AI-Agent / frontend /style.css
rakib72642's picture
many issue
17cb949
/* ── Reset & base ─────────────────────────────────────────────────────────── */
*,
*::before,
*::after {
box-sizing: border-box;
}
:root {
--bg: #05070d;
--panel: rgba(10, 14, 24, 0.76);
--panel-strong: rgba(13, 18, 30, 0.94);
--panel-soft: rgba(255, 255, 255, 0.03);
--border: rgba(255, 255, 255, 0.08);
--border-strong: rgba(255, 255, 255, 0.14);
--text: #e5eefb;
--text-2: #a9b7cc;
--text-3: #6f7d92;
--accent: #f5f7fb;
--accent-2: #64b5ff;
--good: #16a34a;
--warn: #f59e0b;
--danger: #ff5e7b;
--shadow: 0 22px 60px rgba(0, 0, 0, 0.45);
--shadow-soft: 0 10px 26px rgba(0, 0, 0, 0.32);
--radius-xl: 28px;
--radius-lg: 20px;
--radius-md: 14px;
--radius-sm: 10px;
--sidebar-w: 304px;
--max-chat: 860px;
}
html,
body {
height: 100%;
margin: 0;
background:
radial-gradient(circle at top left, rgba(100, 181, 255, 0.14), transparent 20%),
radial-gradient(circle at 75% 25%, rgba(133, 95, 255, 0.12), transparent 18%),
radial-gradient(circle at bottom right, rgba(22, 163, 74, 0.08), transparent 22%),
var(--bg);
color: var(--text);
font-family: 'Hind Siliguri', 'Syne', sans-serif;
overflow: hidden;
}
body {
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
button,
input,
select {
font: inherit;
}
button {
appearance: none;
}
/* ── Layout ───────────────────────────────────────────────────────────────── */
.app {
position: fixed;
inset: 0;
display: flex;
opacity: 1;
pointer-events: auto;
}
.sidebar {
width: var(--sidebar-w);
flex-shrink: 0;
display: flex;
flex-direction: column;
background: rgba(8, 12, 20, 0.82);
backdrop-filter: blur(20px);
border-right: 1px solid var(--border);
box-shadow: inset -1px 0 0 rgba(255, 255, 255, 0.03);
overflow-y: auto;
}
.sidebar.collapsed {
width: 0;
overflow: hidden;
}
.sidebar-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 18px 16px 14px;
}
.brand {
display: flex;
align-items: center;
gap: 10px;
font-family: 'Syne', sans-serif;
font-weight: 700;
font-size: 14px;
letter-spacing: 0.02em;
}
.sidebar-toggle,
.brain-btn,
.clear-btn,
.mobile-menu-btn,
.stop-btn,
#send-btn,
.mic-btn,
.setting-select,
#text-input {
border: 1px solid var(--border);
}
.sidebar-toggle {
width: 34px;
height: 34px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.04);
color: var(--text-2);
display: grid;
place-items: center;
cursor: pointer;
transition: transform 0.15s ease, border-color 0.15s ease;
}
.sidebar-toggle:hover {
border-color: var(--border-strong);
transform: translateY(-1px);
}
.sidebar-divider {
height: 1px;
margin: 4px 16px;
background: var(--border);
}
.dash-section {
padding: 16px;
}
.dash-title {
font-size: 11px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--text-3);
margin-bottom: 12px;
}
.metric-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
}
.metric-card {
background: rgba(255, 255, 255, 0.04);
border: 1px solid var(--border);
border-radius: 16px;
padding: 12px 10px;
box-shadow: var(--shadow-soft);
text-align: center;
}
.metric-val {
font-family: 'JetBrains Mono', monospace;
font-size: 18px;
color: var(--accent);
line-height: 1;
margin-bottom: 4px;
}
.metric-label,
.queue-label,
.status-label {
color: var(--text-3);
font-size: 11px;
}
.setting-row {
margin-bottom: 14px;
}
.setting-row label {
display: block;
font-size: 11px;
color: var(--text-2);
margin-bottom: 8px;
}
.slider-wrap {
display: flex;
align-items: center;
gap: 10px;
}
.slider-wrap input[type='range'] {
flex: 1;
accent-color: var(--accent-2);
}
.slider-wrap span {
min-width: 64px;
text-align: right;
font-size: 11px;
color: var(--text-2);
font-family: 'JetBrains Mono', monospace;
}
.setting-select {
width: 100%;
padding: 11px 12px;
border-radius: 14px;
background: rgba(255, 255, 255, 0.04);
color: var(--text);
}
.setting-select:focus,
#text-input:focus {
outline: none;
border-color: rgba(37, 99, 235, 0.4);
box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.08);
}
.queue-vis {
display: flex;
align-items: flex-end;
gap: 4px;
height: 48px;
margin-bottom: 8px;
}
.queue-bar {
flex: 1;
min-height: 4px;
border-radius: 999px;
background: linear-gradient(180deg, rgba(37, 99, 235, 0.85), rgba(15, 23, 42, 0.55));
opacity: 0.2;
transition: height 0.14s ease, opacity 0.14s ease;
}
.queue-bar.active {
opacity: 0.95;
}
/* ── Main column ──────────────────────────────────────────────────────────── */
.main {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
overflow: hidden;
}
.topbar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 14px 18px;
border-bottom: 1px solid var(--border);
background: rgba(8, 12, 20, 0.72);
backdrop-filter: blur(18px);
flex-shrink: 0;
}
.topbar-left,
.topbar-right {
display: flex;
align-items: center;
gap: 10px;
}
.topbar-center {
position: absolute;
left: 50%;
transform: translateX(-50%);
font-family: 'Syne', sans-serif;
font-weight: 700;
font-size: 14px;
color: var(--text);
letter-spacing: 0.01em;
}
.topbar-title {
opacity: 0.92;
}
.topbar-state {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 12px;
border: 1px solid var(--border);
border-radius: 999px;
background: rgba(255, 255, 255, 0.04);
box-shadow: var(--shadow-soft);
}
.state-dot {
width: 8px;
height: 8px;
border-radius: 999px;
background: var(--good);
box-shadow: 0 0 0 4px rgba(22, 163, 74, 0.12);
}
.state-dot.listening {
background: var(--accent-2);
box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.12);
}
.state-dot.recording {
background: var(--danger);
box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.12);
}
.state-dot.processing {
background: var(--warn);
box-shadow: 0 0 0 4px rgba(217, 119, 6, 0.12);
}
.state-dot.speaking {
background: var(--accent);
box-shadow: 0 0 0 4px rgba(15, 23, 42, 0.08);
}
#state-label {
font-size: 12px;
color: var(--text-2);
}
.mobile-menu-btn,
.clear-btn,
.brain-btn {
height: 38px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.04);
color: var(--text);
cursor: pointer;
padding: 0 14px;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
transition: transform 0.15s ease, border-color 0.15s ease, background 0.15s ease;
}
.brain-btn {
width: 40px;
padding: 0;
display: grid;
place-items: center;
}
.brain-btn.active {
background: var(--accent);
color: #fff;
border-color: var(--accent);
}
.brain-btn svg {
width: 20px;
height: 20px;
fill: currentColor;
}
.mobile-menu-btn:hover,
.clear-btn:hover,
.brain-btn:hover,
.sidebar-toggle:hover,
.stop-btn:hover,
#send-btn:hover,
.mic-btn:hover {
transform: translateY(-1px);
}
.clear-btn {
font-size: 12px;
color: var(--text-2);
}
.voice-caption {
width: min(var(--max-chat), calc(100% - 32px));
margin: 14px auto 0;
min-height: 24px;
color: var(--text-2);
font-size: 12px;
line-height: 1.5;
letter-spacing: 0.01em;
padding: 0 4px;
transition: opacity 0.2s ease;
}
#chat-box {
width: min(var(--max-chat), calc(100% - 32px));
margin: 10px auto 0;
padding: 16px 0 22px;
flex: 1;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 12px;
scroll-behavior: smooth;
}
#chat-box::-webkit-scrollbar,
.sidebar::-webkit-scrollbar {
width: 8px;
}
#chat-box::-webkit-scrollbar-track,
.sidebar::-webkit-scrollbar-track {
background: transparent;
}
#chat-box::-webkit-scrollbar-thumb,
.sidebar::-webkit-scrollbar-thumb {
background: rgba(15, 23, 42, 0.15);
border-radius: 999px;
}
.message {
max-width: min(100%, 760px);
padding: 14px 16px;
border-radius: 18px;
line-height: 1.65;
font-size: 15px;
border: 1px solid var(--border);
background: var(--panel);
box-shadow: var(--shadow-soft);
animation: msg-in 0.22s ease-out;
backdrop-filter: blur(16px);
}
@keyframes msg-in {
from {
opacity: 0;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.message.user {
align-self: flex-end;
background: rgba(100, 181, 255, 0.08);
border-bottom-right-radius: 6px;
}
.message.ai {
align-self: flex-start;
background: rgba(255, 255, 255, 0.05);
border-bottom-left-radius: 6px;
}
.message.system {
align-self: center;
max-width: 92%;
font-size: 12px;
color: var(--text-2);
background: rgba(255, 255, 255, 0.04);
}
.message p,
.message ul,
.message ol {
margin: 0.5em 0;
}
.message code {
padding: 1px 6px;
border-radius: 6px;
background: rgba(15, 23, 42, 0.06);
font-family: 'JetBrains Mono', monospace;
font-size: 13px;
}
.message pre {
overflow-x: auto;
padding: 12px;
border-radius: 14px;
background: rgba(15, 23, 42, 0.05);
}
.message.thinking {
display: inline-flex;
align-items: center;
gap: 6px;
width: max-content;
padding: 12px 14px;
}
.message.thinking .dot {
width: 7px;
height: 7px;
border-radius: 999px;
background: var(--accent-2);
opacity: 0.35;
animation: bob 1.1s infinite ease-in-out;
}
.message.thinking .dot:nth-child(2) {
animation-delay: 0.16s;
}
.message.thinking .dot:nth-child(3) {
animation-delay: 0.32s;
}
@keyframes bob {
0%,
80%,
100% {
transform: translateY(0);
opacity: 0.35;
}
40% {
transform: translateY(-5px);
opacity: 1;
}
}
/* ── Voice visualizer ─────────────────────────────────────────────────────── */
.voice-visualizer {
width: min(var(--max-chat), calc(100% - 32px));
margin: 0 auto;
height: 0;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
gap: 4px;
transition: height 0.22s ease;
}
.voice-visualizer.active {
height: 52px;
}
.viz-bar {
width: 4px;
height: 6px;
border-radius: 999px;
background: linear-gradient(180deg, rgba(37, 99, 235, 0.95), rgba(15, 23, 42, 0.55));
transition: height 0.08s ease;
}
/* ── Controls ─────────────────────────────────────────────────────────────── */
.controls {
width: min(var(--max-chat), calc(100% - 32px));
margin: 12px auto 18px;
padding: 14px;
border: 1px solid var(--border);
border-radius: 24px;
background: rgba(8, 12, 20, 0.78);
backdrop-filter: blur(18px);
box-shadow: var(--shadow);
flex-shrink: 0;
}
.text-row {
display: flex;
align-items: flex-end;
gap: 10px;
margin-bottom: 10px;
}
#text-input {
flex: 1;
min-height: 46px;
max-height: 220px;
resize: none;
overflow-y: auto;
padding: 12px 14px;
border-radius: 16px;
background: rgba(255, 255, 255, 0.04);
color: var(--text);
line-height: 1.55;
}
#text-input::placeholder {
color: var(--text-3);
}
#send-btn {
width: 48px;
height: 46px;
border-radius: 16px;
background: linear-gradient(135deg, #64b5ff, #8b5cf6);
color: #05070d;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
}
.voice-row {
display: flex;
gap: 10px;
}
.mic-btn {
flex: 1;
min-height: 48px;
border-radius: 16px;
background: rgba(255, 255, 255, 0.04);
color: var(--text);
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
cursor: pointer;
padding: 0 16px;
}
.mic-btn.mic-listening {
border-color: rgba(37, 99, 235, 0.35);
box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.08);
}
.mic-btn.mic-recording {
border-color: rgba(239, 68, 68, 0.35);
box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.08);
}
.mic-btn.mic-processing {
border-color: rgba(217, 119, 6, 0.35);
box-shadow: 0 0 0 4px rgba(217, 119, 6, 0.08);
}
.mic-icon {
font-size: 18px;
}
.stop-btn {
min-width: 90px;
height: 48px;
border-radius: 16px;
background: rgba(255, 255, 255, 0.04);
color: #ff8da1;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
cursor: pointer;
padding: 0 14px;
}
/* ── Brain mode ───────────────────────────────────────────────────────────── */
.brain-stage {
display: none;
width: min(560px, calc(100% - 24px));
margin: 14px auto 0;
flex: 1;
align-items: center;
justify-content: center;
position: relative;
}
.brain-shell {
position: relative;
width: min(560px, 100%);
height: min(74vh, 760px);
border-radius: 40px;
background:
radial-gradient(circle at 50% 40%, rgba(100, 181, 255, 0.18), transparent 20%),
radial-gradient(circle at 50% 62%, rgba(139, 92, 246, 0.14), transparent 38%),
radial-gradient(circle at 50% 50%, rgba(15, 23, 42, 0.96), rgba(5, 7, 13, 1) 74%);
border: 1px solid rgba(255, 255, 255, 0.08);
box-shadow: var(--shadow);
overflow: hidden;
}
.brain-bubbles {
position: absolute;
inset: 0;
z-index: 3;
pointer-events: none;
padding: 18px;
}
.brain-bubble {
position: absolute;
width: min(320px, calc(100% - 36px));
min-height: 102px;
padding: 16px 18px;
border-radius: 24px;
border: 1px solid rgba(255, 255, 255, 0.08);
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.03)),
rgba(8, 12, 20, 0.82);
backdrop-filter: blur(18px);
box-shadow: 0 18px 50px rgba(0, 0, 0, 0.35);
transform: translateY(8px) scale(0.96);
opacity: 0.78;
transition: transform 0.25s ease, opacity 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease;
}
.brain-bubble::after {
content: '';
position: absolute;
inset: auto 18px -8px auto;
width: 16px;
height: 16px;
background: inherit;
border-right: 1px solid rgba(255, 255, 255, 0.08);
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
transform: rotate(45deg);
}
.brain-bubble-label {
font-size: 10px;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--text-3);
margin-bottom: 8px;
}
.brain-bubble-text {
font-size: 16px;
line-height: 1.6;
color: var(--text);
min-height: 40px;
white-space: pre-wrap;
word-break: break-word;
}
.brain-bubble-stt {
left: 18px;
top: 18px;
}
.brain-bubble-tts {
right: 18px;
bottom: 18px;
}
.brain-bubble.active {
opacity: 1;
transform: translateY(0) scale(1);
border-color: rgba(100, 181, 255, 0.28);
box-shadow:
0 22px 62px rgba(0, 0, 0, 0.48),
0 0 0 1px rgba(100, 181, 255, 0.08);
}
.brain-bubble.active .brain-bubble-label {
color: rgba(100, 181, 255, 0.82);
}
.brain-bubble.speaking {
animation: bubble-breathe 1.4s ease-in-out infinite;
}
.brain-bubble.speaking .brain-bubble-text {
position: relative;
}
.brain-bubble.speaking .brain-bubble-text::after {
content: '';
display: inline-block;
width: 10px;
height: 10px;
margin-left: 8px;
border-radius: 999px;
background: linear-gradient(135deg, #64b5ff, #8b5cf6);
box-shadow: 0 0 0 0 rgba(100, 181, 255, 0.26);
animation: bubble-dot 1s ease-in-out infinite;
}
.brain-scan {
position: absolute;
inset: 0;
background:
linear-gradient(180deg, transparent 0%, rgba(100, 181, 255, 0.12) 50%, transparent 100%),
linear-gradient(90deg, transparent 0%, rgba(100, 181, 255, 0.22) 48%, rgba(139, 92, 246, 0.22) 52%, transparent 100%);
background-size: 100% 180px, 280px 100%;
background-repeat: repeat-y, no-repeat;
mix-blend-mode: screen;
opacity: 0.55;
animation: scan 6s linear infinite;
pointer-events: none;
}
.brain-shell::before,
.brain-shell::after {
content: '';
position: absolute;
inset: -20%;
background:
radial-gradient(circle at 30% 30%, rgba(100, 181, 255, 0.18), transparent 14%),
radial-gradient(circle at 70% 40%, rgba(139, 92, 246, 0.12), transparent 16%),
radial-gradient(circle at 55% 68%, rgba(22, 163, 74, 0.11), transparent 15%);
animation: drift 16s linear infinite;
pointer-events: none;
}
.brain-shell::after {
animation-direction: reverse;
opacity: 0.7;
}
.brain-pulse {
position: absolute;
inset: 50% auto auto 50%;
width: 16px;
height: 16px;
border-radius: 999px;
border: 1px solid rgba(100, 181, 255, 0.55);
box-shadow: 0 0 0 0 rgba(100, 181, 255, 0.22);
transform: translate(-50%, -50%);
animation: pulse-ring 3.6s linear infinite;
pointer-events: none;
}
.pulse-a {
width: 110px;
height: 110px;
}
.pulse-b {
width: 220px;
height: 220px;
animation-delay: 0.8s;
}
.pulse-c {
width: 340px;
height: 340px;
animation-delay: 1.6s;
}
.brain-svg {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
filter: drop-shadow(0 0 16px rgba(37, 99, 235, 0.08));
}
.brain-outline {
fill: rgba(255, 255, 255, 0.04);
stroke: rgba(255, 255, 255, 0.12);
stroke-width: 2;
stroke-dasharray: 10 12;
animation: pulse-line 8s linear infinite;
}
.brain-wire {
fill: none;
stroke: url(#brainGlow);
stroke-width: 2.5;
stroke-linecap: round;
stroke-dasharray: 10 10;
animation: dash 7s linear infinite;
opacity: 0.82;
}
.brain-node {
fill: rgba(255, 255, 255, 0.9);
stroke: rgba(100, 181, 255, 0.35);
stroke-width: 2;
filter: drop-shadow(0 0 12px rgba(100, 181, 255, 0.38));
animation: node-pulse 2.4s ease-in-out infinite;
transform-box: fill-box;
transform-origin: center;
}
.node-2,
.node-5,
.node-8,
.node-11 {
animation-delay: 0.2s;
}
.node-3,
.node-6,
.node-9,
.node-12 {
animation-delay: 0.4s;
}
.brain-core {
fill: rgba(100, 181, 255, 0.18);
stroke: rgba(100, 181, 255, 0.65);
stroke-width: 2;
animation: core-breath 2.8s ease-in-out infinite;
transform-box: fill-box;
transform-origin: center;
}
.brain-core.ring {
fill: none;
stroke: rgba(255, 255, 255, 0.12);
stroke-dasharray: 8 12;
animation: dash 9s linear infinite;
}
@keyframes dash {
to {
stroke-dashoffset: -120;
}
}
@keyframes pulse-line {
0%,
100% {
opacity: 0.65;
}
50% {
opacity: 1;
}
}
@keyframes node-pulse {
0%,
100% {
transform: scale(1);
opacity: 0.84;
}
50% {
transform: scale(1.18);
opacity: 1;
}
}
@keyframes core-breath {
0%,
100% {
transform: scale(1);
opacity: 0.7;
}
50% {
transform: scale(1.08);
opacity: 1;
}
}
@keyframes drift {
0% {
transform: translate3d(0, 0, 0) scale(1);
}
50% {
transform: translate3d(3%, -2%, 0) scale(1.02);
}
100% {
transform: translate3d(0, 0, 0) scale(1);
}
}
@keyframes scan {
0% {
transform: translateY(-20%);
}
100% {
transform: translateY(20%);
}
}
@keyframes pulse-ring {
0% {
opacity: 0.15;
transform: translate(-50%, -50%) scale(0.75);
}
50% {
opacity: 0.75;
transform: translate(-50%, -50%) scale(1);
}
100% {
opacity: 0.12;
transform: translate(-50%, -50%) scale(1.28);
}
}
@keyframes bubble-breathe {
0%,
100% {
transform: translateY(0) scale(1);
}
50% {
transform: translateY(-2px) scale(1.015);
}
}
@keyframes bubble-dot {
0%,
100% {
transform: scale(0.75);
opacity: 0.35;
}
50% {
transform: scale(1);
opacity: 1;
}
}
body.brain-mode .sidebar,
body.brain-mode #chat-box,
body.brain-mode .voice-caption,
body.brain-mode .voice-visualizer {
display: none;
}
body.brain-mode .brain-stage {
display: flex;
}
body.brain-mode .controls {
display: block;
position: fixed;
left: 50%;
bottom: 18px;
transform: translateX(-50%);
width: min(420px, calc(100% - 24px));
margin: 0;
padding: 12px;
background: rgba(5, 7, 13, 0.78);
border-color: rgba(255, 255, 255, 0.08);
}
body.brain-mode .text-row {
display: none;
}
body.brain-mode .voice-row {
display: flex;
}
body.brain-mode .mic-btn,
body.brain-mode .stop-btn {
background: rgba(255, 255, 255, 0.05);
}
body.brain-mode .topbar {
background: rgba(5, 7, 13, 0.45);
border-bottom-color: transparent;
}
body.brain-mode .topbar-center,
body.brain-mode #state-label {
opacity: 0;
pointer-events: none;
}
body.brain-mode .clear-btn {
width: 40px;
padding: 0;
font-size: 0;
color: transparent;
background: rgba(255, 255, 255, 0.05);
}
body.brain-mode .clear-btn::before {
content: 'β†Ί';
font-size: 13px;
color: var(--text);
}
body.brain-mode .brain-shell {
box-shadow:
0 30px 80px rgba(0, 0, 0, 0.5),
inset 0 0 0 1px rgba(255, 255, 255, 0.03);
}
body.brain-mode .brain-bubble.active {
transform: translateY(0) scale(1);
}
body.brain-mode .brain-pulse {
border-color: rgba(100, 181, 255, 0.35);
}
body.brain-mode .brain-stage.searching .brain-wire {
stroke-width: 3.2;
opacity: 1;
animation-duration: 2.2s;
}
body.brain-mode .brain-stage.searching .brain-core {
animation-duration: 1.8s;
filter: drop-shadow(0 0 18px rgba(100, 181, 255, 0.45));
}
body.brain-mode .brain-stage.searching .brain-node {
animation-duration: 1.2s;
}
body.brain-mode .brain-stage[data-state='listening'] .brain-shell {
box-shadow:
0 30px 80px rgba(0, 0, 0, 0.46),
0 0 0 1px rgba(100, 181, 255, 0.08),
0 0 34px rgba(100, 181, 255, 0.12);
}
body.brain-mode .brain-stage[data-state='processing'] .brain-shell::before {
animation-duration: 8s;
filter: blur(0.3px);
}
body.brain-mode .brain-stage[data-state='speaking'] .brain-core {
fill: rgba(100, 181, 255, 0.26);
animation-duration: 1.4s;
}
body.brain-mode .brain-stage[data-state='speaking'] .brain-node {
filter: drop-shadow(0 0 14px rgba(100, 181, 255, 0.52));
}
/* ── Responsive ───────────────────────────────────────────────────────────── */
@media (max-width: 960px) {
.sidebar {
position: fixed;
inset: 0 auto 0 0;
transform: translateX(-100%);
z-index: 30;
box-shadow: var(--shadow);
transition: transform 0.2s ease;
}
.sidebar.mobile-open {
transform: translateX(0);
}
.mobile-menu-btn {
display: inline-flex;
}
.topbar-center {
font-size: 13px;
}
.brain-shell {
height: min(68vh, 620px);
}
}
@media (max-width: 720px) {
.topbar {
padding: 12px 12px;
}
.topbar-state {
padding: 7px 10px;
}
.clear-btn {
padding: 0 12px;
}
.voice-caption,
#chat-box,
.controls,
.voice-visualizer,
.brain-stage {
width: calc(100% - 20px);
}
#chat-box {
padding-top: 12px;
}
.message {
font-size: 14px;
padding: 12px 14px;
}
.controls {
padding: 12px;
border-radius: 20px;
}
.text-row {
margin-bottom: 8px;
}
.voice-row {
gap: 8px;
}
.brain-shell {
width: 100%;
height: 64vh;
border-radius: 28px;
}
.brain-bubble {
width: calc(100% - 30px);
}
}