:root {
--primary: #ff6b9d;
--primary-dark: #e91e63;
--primary-light: #ffb3d1;
--secondary: #4ecdc4;
--accent: #ffd93d;
--purple: #9c27b0;
--success: #4caf50;
--warning: #ff9800;
--error: #f44336;
--info: #2196f3;
--text: #2d3748;
--text-light: #4a5568;
--text-lighter: #718096;
--text-white: #ffffff;
--bg: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
--bg-secondary: #f8fafc;
--card: #ffffff;
--card-hover: #f7fafc;
--border: #e2e8f0;
--shadow-sm: 0 2px 4px rgba(0,0,0,0.1);
--shadow: 0 4px 8px rgba(0,0,0,0.12);
--shadow-md: 0 6px 12px rgba(0,0,0,0.15);
--shadow-lg: 0 10px 25px rgba(0,0,0,0.15);
--gradient-cute: linear-gradient(135deg, #ff6b9d 0%, #4ecdc4 100%);
--gradient-purple: linear-gradient(135deg, #9c27b0 0%, #e91e63 100%);
--gradient-logo: linear-gradient(135deg, #ff6b9d 0%, #4ecdc4 50%, #ffd93d 100%);
--gradient-voice: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
--radius-sm: 8px;
--radius: 12px;
--radius-lg: 16px;
--radius-xl: 20px;
--radius-full: 50px;
--font-nunito: 'Nunito', sans-serif;
--font-comfortaa: 'Comfortaa', sans-serif;
--font-poppins: 'Poppins', sans-serif;
--font-inter: 'Inter', sans-serif;
--font-roboto: 'Roboto', sans-serif;
--font-opensans: 'Open Sans', sans-serif;
--font-lato: 'Lato', sans-serif;
--font-montserrat: 'Montserrat', sans-serif;
--font-sourcesans: 'Source Sans Pro', sans-serif;
--font-ubuntu: 'Ubuntu', sans-serif;
--font-fira: 'Fira Sans', sans-serif;
--font-work: 'Work Sans', sans-serif;
--font-space: 'Space Grotesk', sans-serif;
--font-outfit: 'Outfit', sans-serif;
--font-jakarta: 'Plus Jakarta Sans', sans-serif;
--font-xs: 12px;
--font-sm: 14px;
--font-base: 16px;
--font-lg: 18px;
--font-xl: 20px;
--font-2xl: 24px;
--font-3xl: 30px;
}
.dark-mode {
--primary: #ff8fab;
--text: #f1f5f9;
--text-light: #e2e8f0;
--text-lighter: #cbd5e1;
--bg: linear-gradient(135deg, #1a202c 0%, #2d3748 100%);
--bg-secondary: #334155;
--card: #475569;
--card-hover: #64748b;
--border: #64748b;
}
* {
box-sizing: border-box;
-webkit-tap-highlight-color: transparent !important;
-webkit-touch-callout: none !important;
-webkit-user-select: none !important;
user-select: none !important;
}
.message-bubble,
.data-field-value,
input[type="text"],
textarea,
.fallback-code-block,
.CodeMirror {
-webkit-user-select: text !important;
user-select: text !important;
}
body {
font-family: var(--font-nunito);
background: var(--bg);
color: var(--text);
font-size: var(--font-base);
line-height: 1.5;
margin: 0;
padding: 0;
overflow-x: hidden;
transition: all 0.3s ease;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
touch-action: manipulation;
}
.font-nunito { font-family: var(--font-nunito) !important; }
.font-comfortaa { font-family: var(--font-comfortaa) !important; }
.font-poppins { font-family: var(--font-poppins) !important; }
.font-inter { font-family: var(--font-inter) !important; }
.font-roboto { font-family: var(--font-roboto) !important; }
.font-opensans { font-family: var(--font-opensans) !important; }
.font-lato { font-family: var(--font-lato) !important; }
.font-montserrat { font-family: var(--font-montserrat) !important; }
.font-sourcesans { font-family: var(--font-sourcesans) !important; }
.font-ubuntu { font-family: var(--font-ubuntu) !important; }
.font-fira { font-family: var(--font-fira) !important; }
.font-work { font-family: var(--font-work) !important; }
.font-space { font-family: var(--font-space) !important; }
.font-outfit { font-family: var(--font-outfit) !important; }
.font-jakarta { font-family: var(--font-jakarta) !important; }
.font-size-xs { font-size: var(--font-xs) !important; }
.font-size-sm { font-size: var(--font-sm) !important; }
.font-size-base { font-size: var(--font-base) !important; }
.font-size-lg { font-size: var(--font-lg) !important; }
.font-size-xl { font-size: var(--font-xl) !important; }
.font-size-2xl { font-size: var(--font-2xl) !important; }
.font-size-3xl { font-size: var(--font-3xl) !important; }
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-image:
radial-gradient(circle at 25% 25%, rgba(255, 107, 157, 0.05) 0%, transparent 50%),
radial-gradient(circle at 75% 75%, rgba(78, 205, 196, 0.05) 0%, transparent 50%);
pointer-events: none;
z-index: 0;
}
.app-container {
display: flex;
min-height: 100vh;
position: relative;
z-index: 1;
}
.sidebar {
width: 300px;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
border-right: 1px solid var(--border);
display: flex;
flex-direction: column;
position: fixed;
left: -300px;
top: 0;
height: 100vh;
height: 100dvh;
z-index: 1001;
box-shadow: var(--shadow-md);
transition: transform 0.3s ease;
overflow: hidden;
overscroll-behavior: contain;
touch-action: pan-y;
}
.sidebar.show {
transform: translateX(300px);
}
.dark-mode .sidebar {
background: rgba(55, 65, 81, 0.95);
}
.sidebar-header {
padding: 20px 16px;
padding-top: max(20px, env(safe-area-inset-top) + 10px);
background: var(--gradient-cute);
color: var(--text-white);
display: flex;
align-items: center;
justify-content: space-between;
flex-shrink: 0;
min-height: 70px;
}
.sidebar-logo {
font-family: var(--font-comfortaa);
font-size: 1.4rem;
font-weight: 600;
display: flex;
align-items: center;
gap: 10px;
}
.cute-avatar {
width: 40px;
height: 40px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #ff6b9d 100%);
border-radius: var(--radius-full);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.4rem;
border: 3px solid rgba(255, 255, 255, 0.4);
position: relative;
overflow: hidden;
animation: avatarGlow 3s ease-in-out infinite;
box-shadow:
0 0 20px rgba(255, 107, 157, 0.4),
inset 0 2px 4px rgba(255, 255, 255, 0.2);
}
.cute-avatar::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: linear-gradient(45deg, transparent 30%, rgba(255, 255, 255, 0.3) 50%, transparent 70%);
transform: rotate(-45deg);
animation: avatarShine 3s ease-in-out infinite;
}
.cute-avatar::after {
content: '🤖';
position: relative;
z-index: 2;
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2));
animation: logoFloat 2s ease-in-out infinite;
}
.logo-avatar {
width: 36px;
height: 36px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 40%, #ff6b9d 100%);
border-radius: var(--radius-full);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.1rem;
color: white;
position: relative;
overflow: hidden;
animation: logoGlow 4s ease-in-out infinite;
box-shadow:
0 4px 15px rgba(255, 107, 157, 0.4),
inset 0 2px 4px rgba(255, 255, 255, 0.2);
flex-shrink: 0;
border: 2px solid rgba(255, 255, 255, 0.3);
}
.logo-avatar::before {
content: '';
position: absolute;
top: -2px;
left: -2px;
right: -2px;
bottom: -2px;
background: linear-gradient(45deg,
#ff6b9d 0%,
#4ecdc4 25%,
#ffd93d 50%,
#9c27b0 75%,
#ff6b9d 100%);
border-radius: var(--radius-full);
z-index: -1;
animation: logoRotate 8s linear infinite;
}
.logo-avatar::after {
content: '🤖';
position: relative;
z-index: 2;
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));
animation: logoFloat 2.5s ease-in-out infinite;
}
@keyframes logoFloat {
0%, 100% {
transform: translateY(0) scale(1);
}
50% {
transform: translateY(-2px) scale(1.05);
}
}
@keyframes avatarGlow {
0%, 100% {
box-shadow:
0 0 20px rgba(255, 107, 157, 0.4),
inset 0 2px 4px rgba(255, 255, 255, 0.2);
transform: scale(1);
}
50% {
box-shadow:
0 0 30px rgba(255, 107, 157, 0.6),
inset 0 2px 4px rgba(255, 255, 255, 0.3);
transform: scale(1.02);
}
}
@keyframes logoGlow {
0%, 100% {
box-shadow:
0 4px 15px rgba(255, 107, 157, 0.4),
inset 0 2px 4px rgba(255, 255, 255, 0.2);
transform: scale(1);
}
50% {
box-shadow:
0 6px 25px rgba(255, 107, 157, 0.6),
inset 0 2px 4px rgba(255, 255, 255, 0.3);
transform: scale(1.02);
}
}
@keyframes logoRotate {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@keyframes avatarShine {
0% { transform: translateX(-100%) translateY(-100%) rotate(-45deg); }
50% { transform: translateX(100%) translateY(100%) rotate(-45deg); }
100% { transform: translateX(-100%) translateY(-100%) rotate(-45deg); }
}
.logo-text {
background: linear-gradient(45deg,
#ff6b9d 0%,
#4ecdc4 25%,
#ffd93d 50%,
#9c27b0 75%,
#ff6b9d 100%);
background-size: 300% 300%;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
font-weight: 700;
letter-spacing: -0.5px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: clamp(1rem, 4vw, 1.4rem);
animation: gradientShift 3s ease-in-out infinite;
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
}
@keyframes gradientShift {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
@keyframes avatarGlow {
0%, 100% {
box-shadow: 0 0 15px rgba(255, 255, 255, 0.3);
transform: scale(1);
}
50% {
box-shadow: 0 0 25px rgba(255, 255, 255, 0.5);
transform: scale(1.05);
}
}
@keyframes avatarShine {
0% { transform: translateX(-100%) translateY(-100%) rotate(-45deg); }
50% { transform: translateX(100%) translateY(100%) rotate(-45deg); }
100% { transform: translateX(-100%) translateY(-100%) rotate(-45deg); }
}
.sidebar-close {
background: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(255, 255, 255, 0.3);
color: white;
width: 40px;
height: 40px;
min-width: 40px;
min-height: 40px;
border-radius: var(--radius-full);
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
touch-action: manipulation;
}
.sidebar-close:active {
transform: scale(0.95);
background: rgba(255, 255, 255, 0.3);
}
.sidebar-content {
flex: 1;
padding: 16px;
overflow-y: auto;
overflow-x: hidden;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
touch-action: pan-y;
}
.sidebar-search-wrapper {
position: relative;
margin-bottom: 16px;
}
.sidebar-search {
width: 100%;
padding: 12px 16px 12px 40px;
border: 1px solid var(--border);
border-radius: var(--radius-full);
background: var(--card);
color: var(--text);
font-size: 16px;
transition: border-color 0.2s ease;
box-shadow: var(--shadow-sm);
touch-action: manipulation;
}
.sidebar-search:focus {
outline: none;
border-color: var(--primary);
}
.sidebar-search-wrapper i {
position: absolute;
left: 14px;
top: 50%;
transform: translateY(-50%);
color: var(--primary);
font-size: 1rem;
pointer-events: none;
}
.font-selector {
background: var(--card);
border: 1px solid var(--border);
padding: 20px;
border-radius: var(--radius-lg);
margin-bottom: 16px;
box-shadow: var(--shadow-sm);
position: relative;
overflow: hidden;
}
.font-selector::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: var(--gradient-cute);
}
.font-selector label {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 15px;
font-weight: 600;
color: var(--text);
font-size: 0.9rem !important;
font-family: var(--font-nunito) !important;
}
.font-controls {
display: grid;
grid-template-columns: 1fr;
gap: 12px;
}
.font-select {
padding: 12px 14px;
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--card);
color: var(--text);
font-size: 14px !important;
font-family: var(--font-nunito) !important;
cursor: pointer;
font-weight: 500;
min-height: 44px;
transition: all 0.2s ease;
touch-action: manipulation;
}
.font-select:focus {
outline: none;
border-color: var(--primary);
transform: translateY(-1px);
box-shadow: var(--shadow);
}
.font-select:hover {
border-color: var(--primary);
}
.sidebar-btn {
width: 100%;
padding: 16px;
background: var(--card);
color: var(--text);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
margin-bottom: 10px;
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
gap: 12px;
font-weight: 600;
font-size: 0.9rem;
box-shadow: var(--shadow-sm);
text-decoration: none;
touch-action: manipulation;
min-height: 56px;
position: relative;
z-index: 1;
}
.sidebar-btn:hover {
background: var(--card-hover);
transform: translateY(-1px);
box-shadow: var(--shadow);
}
.sidebar-btn:active {
transform: scale(0.98) translateY(0);
background: rgba(255, 107, 157, 0.1);
}
.sidebar-btn i {
font-size: 1.2rem;
width: 24px;
text-align: center;
flex-shrink: 0;
color: var(--primary);
}
.sidebar-btn span {
flex: 1;
text-align: left;
}
.chat-history-header {
display: flex;
align-items: center;
margin-bottom: 12px;
padding: 0 4px;
}
.chat-history-title {
font-size: 0.85rem;
font-weight: 700;
color: var(--text-light);
text-transform: uppercase;
letter-spacing: 0.5px;
display: flex;
align-items: center;
gap: 6px;
}
.chat-history-title::before {
content: '💬';
font-size: 1rem;
}
.history-item {
padding: 16px 20px 16px 16px;
border: 1px solid var(--border);
border-radius: var(--radius-lg);
margin-bottom: 8px;
cursor: pointer;
transition: all 0.3s ease;
background: var(--card);
position: relative;
box-shadow: var(--shadow-sm);
min-height: 80px;
touch-action: manipulation;
overflow: hidden;
}
.history-item::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 4px;
background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
opacity: 0;
transition: opacity 0.3s ease;
}
.history-item:hover::before,
.history-item.active::before {
opacity: 1;
}
.history-item:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-md);
background: var(--card-hover);
}
.history-item:active {
transform: scale(0.98);
}
.history-item.active {
border-color: var(--primary);
background: rgba(255, 107, 157, 0.1);
box-shadow: var(--shadow);
}
.history-item.pinned {
border-color: var(--accent);
background: rgba(255, 217, 61, 0.1);
}
.history-item.pinned::after {
content: '📌';
position: absolute;
top: 12px;
right: 60px;
font-size: 0.9rem;
opacity: 0.7;
}
.history-title {
font-weight: 600;
margin-bottom: 6px;
color: var(--text);
font-size: 0.9rem;
line-height: 1.3;
padding-right: 50px;
word-break: break-word;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.history-timestamp {
font-size: 0.75rem;
color: var(--text-light);
display: flex;
align-items: center;
gap: 4px;
margin-bottom: 8px;
}
.history-actions {
position: absolute;
right: 8px;
top: 50%;
transform: translateY(-50%);
display: flex;
flex-direction: column;
gap: 4px;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
padding: 6px;
border-radius: var(--radius);
box-shadow: var(--shadow-sm);
border: 1px solid var(--border);
opacity: 1;
visibility: visible;
transition: all 0.2s ease;
}
.dark-mode .history-actions {
background: rgba(55, 65, 81, 0.95);
}
.history-actions:hover {
transform: translateY(-50%) scale(1.05);
box-shadow: var(--shadow);
}
.multiple-choice-container {
background: linear-gradient(135deg, rgba(255, 107, 157, 0.08) 0%, rgba(78, 205, 196, 0.08) 100%);
border: 2px solid rgba(255, 107, 157, 0.2);
border-radius: var(--radius-xl);
padding: 20px;
margin: 16px 0;
box-shadow: var(--shadow-sm);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.multiple-choice-container::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: var(--gradient-cute);
border-radius: var(--radius-xl) var(--radius-xl) 0 0;
}
.multiple-choice-container:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-md);
border-color: rgba(255, 107, 157, 0.4);
}
.multiple-choice-question {
display: flex;
align-items: flex-start;
gap: 12px;
margin-bottom: 16px;
font-weight: 600;
color: var(--text);
font-size: 1.05rem;
line-height: 1.5;
}
.question-number {
background: var(--gradient-cute);
color: white;
font-weight: 700;
font-size: 0.85rem;
padding: 6px 12px;
border-radius: var(--radius-full);
min-width: 40px;
text-align: center;
flex-shrink: 0;
box-shadow: var(--shadow-sm);
position: relative;
}
.question-number::after {
content: '';
position: absolute;
top: 2px;
left: 2px;
right: 2px;
bottom: 2px;
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: inherit;
}
.multiple-choice-options {
display: grid;
grid-template-columns: 1fr;
gap: 8px; }
.multiple-choice-option {
display: flex;
align-items: center;
gap: 12px;
padding: 12px 16px; background: var(--card);
border: 2px solid var(--border);
border-radius: var(--radius-lg);
cursor: pointer;
transition: all 0.2s ease;
position: relative;
overflow: hidden;
min-height: 50px; box-shadow: var(--shadow-sm);
}
.multiple-choice-option::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 4px;
background: transparent;
transition: all 0.3s ease;
}
.multiple-choice-option:hover {
transform: translateY(-1px);
border-color: var(--primary);
box-shadow: var(--shadow);
background: rgba(255, 107, 157, 0.05);
}
.multiple-choice-option:hover::before {
background: var(--primary);
}
.multiple-choice-option:active {
transform: scale(0.98);
}
.multiple-choice-option.selected {
border-color: var(--primary);
background: rgba(255, 107, 157, 0.1);
box-shadow: var(--shadow);
}
.multiple-choice-option.selected::before {
background: var(--primary);
}
.choice-letter {
width: 32px; height: 32px;
background: var(--gradient-purple);
color: white;
border-radius: var(--radius-full);
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
font-size: 0.9rem; flex-shrink: 0;
box-shadow: var(--shadow-sm);
position: relative;
}
.modal-content {
border: none;
border-radius: 24px;
overflow: hidden;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);
backdrop-filter: blur(20px);
background: rgba(255, 255, 255, 0.98);
animation: modalSlideIn 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
@keyframes modalSlideIn {
from {
opacity: 0;
transform: scale(0.9) translateY(20px);
}
to {
opacity: 1;
transform: scale(1) translateY(0);
}
}
.dark-mode .modal-content {
background: rgba(30, 41, 59, 0.98);
border: 1px solid rgba(255, 255, 255, 0.1);
}
.modal-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border-radius: 24px 24px 0 0;
padding: 28px 32px;
border: none;
position: relative;
overflow: hidden;
}
.modal-header::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml,');
opacity: 0.4;
}
.modal-title {
font-size: 1.5rem;
font-weight: 700;
display: flex;
align-items: center;
gap: 16px;
z-index: 1;
position: relative;
margin: 0;
}
.modal-title i {
width: 48px;
height: 48px;
background: rgba(255, 255, 255, 0.2);
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
border: 2px solid rgba(255, 255, 255, 0.3);
backdrop-filter: blur(10px);
}
.btn-close {
background: rgba(255, 255, 255, 0.2) !important;
border: 2px solid rgba(255, 255, 255, 0.3) !important;
border-radius: 12px !important;
width: 40px !important;
height: 40px !important;
backdrop-filter: blur(10px) !important;
transition: all 0.3s ease !important;
position: relative !important;
z-index: 1 !important;
opacity: 1 !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
color: white !important;
font-size: 1.2rem !important;
font-weight: bold !important;
}
.btn-close:hover {
background: rgba(255, 255, 255, 0.3) !important;
transform: rotate(90deg) scale(1.1) !important;
border-color: rgba(255, 255, 255, 0.5) !important;
}
.btn-close:focus {
box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.3) !important;
}
.btn-close::before {
content: '✕' !important;
color: white !important;
font-size: 1.1rem !important;
font-weight: bold !important;
}
.dark-mode .btn-close {
background: rgba(0, 0, 0, 0.3) !important;
border-color: rgba(255, 255, 255, 0.2) !important;
}
.dark-mode .btn-close:hover {
background: rgba(0, 0, 0, 0.5) !important;
border-color: rgba(255, 255, 255, 0.4) !important;
}
.modal-body {
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
color: var(--text);
padding: 32px;
font-size: 0.95rem;
max-height: 70vh;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
.dark-mode .modal-body {
background: linear-gradient(135deg, #1e293b 0%, #334155 100%);
}
.search-results .alert {
background: linear-gradient(135deg, rgba(99, 102, 241, 0.1) 0%, rgba(139, 92, 246, 0.1) 100%);
border: 2px solid rgba(99, 102, 241, 0.2);
border-radius: 16px;
padding: 20px 24px;
margin-bottom: 24px;
color: var(--text);
position: relative;
overflow: hidden;
}
.search-results .alert::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, #6366f1, #8b5cf6, #a855f7);
}
.search-results .alert i {
color: #6366f1;
font-size: 1.25rem;
margin-right: 12px;
}
.search-results .badge {
background: linear-gradient(135deg, #6366f1, #8b5cf6);
color: white;
padding: 6px 16px;
border-radius: 12px;
font-weight: 600;
font-size: 0.8rem;
border: none;
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
}
.data-row {
display: flex;
padding: 16px 0;
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
transition: all 0.3s ease;
flex-wrap: wrap;
gap: 12px;
position: relative;
}
.dark-mode .data-row {
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.data-row:hover {
background: rgba(99, 102, 241, 0.05);
padding-left: 16px;
padding-right: 16px;
margin: 0 -16px;
border-radius: 12px;
transform: translateX(4px);
}
.data-row:last-child {
border-bottom: none;
}
.data-label {
font-weight: 700;
width: 40%;
color: #64748b;
display: flex;
align-items: center;
gap: 12px;
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.data-label i {
color: #6366f1;
font-size: 0.6rem;
filter: drop-shadow(0 1px 2px rgba(99, 102, 241, 0.3));
}
.data-value {
width: 60%;
color: var(--text);
font-weight: 600;
font-size: 0.95rem;
line-height: 1.5;
padding: 8px 16px;
background: rgba(255, 255, 255, 0.7);
border-radius: 10px;
border: 1px solid rgba(0, 0, 0, 0.05);
backdrop-filter: blur(10px);
transition: all 0.3s ease;
}
.dark-mode .data-value {
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.1);
}
.data-value:hover {
background: rgba(255, 255, 255, 0.9);
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.dark-mode .data-value:hover {
background: rgba(255, 255, 255, 0.15);
}
.data-row:nth-child(1) .data-value,
.data-row:nth-child(2) .data-value,
.data-row:nth-child(3) .data-value {
background: linear-gradient(135deg, rgba(99, 102, 241, 0.1) 0%, rgba(139, 92, 246, 0.1) 100%);
border: 2px solid rgba(99, 102, 241, 0.2);
font-weight: 700;
color: #4c1d95;
}
.dark-mode .data-row:nth-child(1) .data-value,
.dark-mode .data-row:nth-child(2) .data-value,
.dark-mode .data-row:nth-child(3) .data-value {
color: #c4b5fd;
background: linear-gradient(135deg, rgba(99, 102, 241, 0.2) 0%, rgba(139, 92, 246, 0.2) 100%);
}
.modal-body .mt-3 {
background: linear-gradient(135deg, rgba(16, 185, 129, 0.1) 0%, rgba(6, 182, 212, 0.1) 100%);
border: 2px solid rgba(16, 185, 129, 0.2);
border-radius: 16px;
padding: 20px;
margin-top: 32px;
position: relative;
overflow: hidden;
}
.modal-body .mt-3::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, #10b981, #06b6d4);
}
.modal-body .mt-3 .text-muted {
color: #059669 !important;
font-weight: 600;
font-size: 0.9rem;
display: flex;
align-items: center;
gap: 8px;
}
.modal-body .mt-3 i {
color: #10b981;
font-size: 1.1rem;
}
.modal-footer {
background: rgba(248, 250, 252, 0.8);
border-top: 2px solid rgba(0, 0, 0, 0.05);
padding: 24px 32px;
display: flex;
gap: 16px;
justify-content: flex-end;
backdrop-filter: blur(10px);
}
.dark-mode .modal-footer {
background: rgba(30, 41, 59, 0.8);
border-top: 2px solid rgba(255, 255, 255, 0.05);
}
.modal-footer .btn {
padding: 14px 28px;
border-radius: 16px;
font-weight: 700;
font-size: 0.9rem;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
cursor: pointer;
border: 2px solid transparent;
display: inline-flex;
align-items: center;
gap: 10px;
touch-action: manipulation;
min-height: 48px;
position: relative;
overflow: hidden;
}
.modal-footer .btn::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
border-radius: 50%;
background: rgba(255, 255, 255, 0.3);
transform: translate(-50%, -50%);
transition: all 0.4s ease;
}
.modal-footer .btn:hover::before {
width: 300px;
height: 300px;
}
.btn-secondary {
background: linear-gradient(135deg, #e2e8f0, #cbd5e1);
color: #475569;
border: 2px solid #cbd5e1;
box-shadow: 0 4px 12px rgba(203, 213, 225, 0.4);
}
.btn-secondary:hover {
background: linear-gradient(135deg, #cbd5e1, #94a3b8);
color: #334155;
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(203, 213, 225, 0.6);
}
.btn-primary {
background: linear-gradient(135deg, #6366f1, #8b5cf6);
color: white;
border: 2px solid transparent;
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.4);
}
.btn-primary:hover {
background: linear-gradient(135deg, #4f46e5, #7c3aed);
transform: translateY(-2px) scale(1.02);
box-shadow: 0 8px 25px rgba(99, 102, 241, 0.6);
}
.btn-primary:active {
transform: scale(0.98);
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.4);
}
@media (max-width: 768px) {
.modal-dialog {
margin: 10px;
max-width: calc(100vw - 20px);
}
.modal-header {
padding: 20px 24px;
}
.modal-title {
font-size: 1.25rem;
gap: 12px;
}
.modal-title i {
width: 40px;
height: 40px;
font-size: 1.25rem;
}
.modal-body {
padding: 24px 20px;
max-height: 60vh;
}
.data-row {
flex-direction: column;
padding: 12px 0;
gap: 8px;
}
.data-label,
.data-value {
width: 100%;
}
.data-label {
margin-bottom: 4px;
font-size: 0.8rem;
}
.data-value {
padding: 12px 16px;
font-size: 0.9rem;
}
.modal-footer {
padding: 16px 20px;
flex-direction: column-reverse;
gap: 12px;
}
.modal-footer .btn {
width: 100%;
justify-content: center;
padding: 16px 24px;
font-size: 1rem;
}
}
.modal-body::-webkit-scrollbar {
width: 8px;
}
.modal-body::-webkit-scrollbar-track {
background: rgba(99, 102, 241, 0.1);
border-radius: 4px;
}
.modal-body::-webkit-scrollbar-thumb {
background: linear-gradient(135deg, #6366f1, #8b5cf6);
border-radius: 4px;
}
.modal-body::-webkit-scrollbar-thumb:hover {
background: linear-gradient(135deg, #4f46e5, #7c3aed);
}
.data-value .text-muted {
color: #94a3b8 !important;
font-style: italic;
font-weight: 500;
}
.data-row:has(.data-label:contains("NIK")) .data-label i {
color: #dc2626;
}
.data-row:has(.data-label:contains("Nama")) .data-label i {
color: #2563eb;
}
.data-row:has(.data-label:contains("Alamat")) .data-label i {
color: #16a34a;
}
.data-row {
opacity: 0;
animation: fadeInRow 0.5s ease forwards;
}
.data-row:nth-child(1) { animation-delay: 0.1s; }
.data-row:nth-child(2) { animation-delay: 0.15s; }
.data-row:nth-child(3) { animation-delay: 0.2s; }
.data-row:nth-child(4) { animation-delay: 0.25s; }
.data-row:nth-child(5) { animation-delay: 0.3s; }
.data-row:nth-child(n+6) { animation-delay: 0.35s; }
@keyframes fadeInRow {
from {
opacity: 0;
transform: translateX(-20px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
.choice-letter::after {
content: '';
position: absolute;
top: 1px;
left: 1px;
right: 1px;
bottom: 1px;
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: inherit;
}
.choice-text {
flex: 1;
color: var(--text);
font-weight: 500;
font-size: 0.95rem; line-height: 1.4;
margin: 0;
}
.multiple-choice-option:hover .choice-letter {
background: var(--gradient-cute);
transform: scale(1.05);
}
.multiple-choice-option.selected .choice-letter {
background: var(--gradient-cute);
transform: scale(1.1);
box-shadow: var(--shadow);
}
.message-bubble {
position: relative;
padding-bottom: 35px !important; }
.bubble-copy-btn {
position: absolute;
bottom: 5px;
right: 8px;
width: 28px;
height: 28px;
background: rgba(0, 0, 0, 0.1);
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 8px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
opacity: 0.6;
transition: all 0.2s ease;
font-size: 12px;
color: #64748b;
}
.bubble-copy-btn:hover {
opacity: 1;
background: rgba(0, 0, 0, 0.15);
transform: scale(1.1);
}
.bubble-copy-btn.copied {
background: #10b981;
color: white;
opacity: 1;
}
.message-row.user .bubble-copy-btn {
background: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, 0.3);
color: rgba(255, 255, 255, 0.9);
}
.message-row.user .bubble-copy-btn:hover {
background: rgba(255, 255, 255, 0.3);
}
@media (max-width: 768px) {
.multiple-choice-container {
padding: 16px;
margin: 12px 0;
}
.multiple-choice-question {
font-size: 1rem;
margin-bottom: 12px;
}
.multiple-choice-options {
gap: 6px;
}
.multiple-choice-option {
padding: 10px 14px;
min-height: 46px;
}
.choice-letter {
width: 28px;
height: 28px;
font-size: 0.85rem;
}
.choice-text {
font-size: 0.9rem;
}
.question-number {
font-size: 0.8rem;
padding: 5px 10px;
min-width: 36px;
}
}
.history-action-btn {
width: 32px;
height: 32px;
min-width: 32px;
min-height: 32px;
border: none;
border-radius: var(--radius);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.8rem;
transition: all 0.2s ease;
touch-action: manipulation;
position: relative;
overflow: hidden;
}
.history-action-btn:active {
transform: scale(0.9);
}
.history-action-btn.pin {
background: linear-gradient(135deg, var(--accent), #e6c200);
color: white;
box-shadow: 0 2px 8px rgba(255, 217, 61, 0.3);
}
.history-action-btn.pin:hover {
box-shadow: 0 4px 12px rgba(255, 217, 61, 0.4);
}
.history-action-btn.delete {
background: linear-gradient(135deg, var(--error), #d32f2f);
color: white;
box-shadow: 0 2px 8px rgba(244, 67, 54, 0.3);
}
.history-action-btn.delete:hover {
box-shadow: 0 4px 12px rgba(244, 67, 54, 0.4);
}
.main-content {
flex: 1;
display: flex;
flex-direction: column;
width: 100%;
min-height: 100vh;
min-height: 100dvh;
}
.main-header {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
border-bottom: 1px solid var(--border);
padding: 12px 16px;
padding-left: max(16px, env(safe-area-inset-left));
padding-right: max(16px, env(safe-area-inset-right));
padding-top: max(12px, env(safe-area-inset-top));
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 998;
box-shadow: var(--shadow-sm);
min-height: 64px;
touch-action: manipulation;
}
.dark-mode .main-header {
background: rgba(55, 65, 81, 0.95);
}
.header-left {
display: flex;
align-items: center;
gap: 12px;
flex: 1;
min-width: 0;
}
.sidebar-toggle {
background: var(--card);
border: 1px solid var(--border);
color: var(--text);
font-size: 1.2rem;
cursor: pointer;
width: 44px;
height: 44px;
min-width: 44px;
min-height: 44px;
border-radius: var(--radius);
transition: all 0.2s ease;
display: flex;
align-items: center;
justify-content: center;
box-shadow: var(--shadow-sm);
touch-action: manipulation;
flex-shrink: 0;
}
.sidebar-toggle:active {
transform: scale(0.95);
background: var(--primary);
color: white;
}
.logo {
display: flex;
align-items: center;
gap: 10px;
font-family: var(--font-comfortaa);
font-weight: 600;
background: var(--gradient-logo);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
position: relative;
flex: 1;
min-width: 0;
justify-content: center;
}
.logo-avatar {
width: 36px;
height: 36px;
background: var(--gradient-cute);
border-radius: var(--radius-full);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.1rem;
color: white;
position: relative;
overflow: hidden;
animation: logoGlow 4s ease-in-out infinite;
box-shadow: 0 4px 12px rgba(255, 107, 157, 0.3);
flex-shrink: 0;
}
.logo-avatar::before {
content: '';
position: absolute;
top: -2px;
left: -2px;
right: -2px;
bottom: -2px;
background: var(--gradient-logo);
border-radius: var(--radius-full);
z-index: -1;
animation: logoRotate 8s linear infinite;
}
.logo-avatar::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(45deg, transparent 40%, rgba(255, 255, 255, 0.3) 50%, transparent 60%);
border-radius: var(--radius-full);
animation: logoShine 3s ease-in-out infinite;
}
.logo-text {
background: var(--gradient-logo);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
font-weight: 700;
letter-spacing: -0.5px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: clamp(1rem, 4vw, 1.4rem);
}
@keyframes logoGlow {
0%, 100% {
box-shadow: 0 4px 12px rgba(255, 107, 157, 0.3);
transform: scale(1);
}
50% {
box-shadow: 0 6px 20px rgba(255, 107, 157, 0.5);
transform: scale(1.05);
}
}
@keyframes logoRotate {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@keyframes logoShine {
0% { transform: translateX(-100%) translateY(-100%) rotate(45deg); }
50% { transform: translateX(100%) translateY(100%) rotate(45deg); }
100% { transform: translateX(-100%) translateY(-100%) rotate(45deg); }
}
.header-right {
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;
}
.theme-toggle {
background: var(--card);
border: 1px solid var(--border);
color: var(--text);
font-size: 1.2rem;
cursor: pointer;
width: 44px;
height: 44px;
min-width: 44px;
min-height: 44px;
border-radius: var(--radius);
transition: all 0.2s ease;
display: flex;
align-items: center;
justify-content: center;
box-shadow: var(--shadow-sm);
touch-action: manipulation;
}
.theme-toggle:active {
transform: scale(0.95);
background: var(--secondary);
color: white;
}
.points-display {
background: var(--gradient-purple);
color: white;
padding: 8px 16px;
border-radius: var(--radius-full);
font-size: 0.85rem;
font-weight: 600;
display: flex;
align-items: center;
gap: 6px;
box-shadow: var(--shadow);
min-height: 36px;
}
.chat-area {
flex: 1;
display: flex;
flex-direction: column;
margin-top: 64px;
background: transparent;
}
.chat-messages {
flex: 1;
overflow-y: auto;
padding: 16px 12px;
padding-bottom: 160px;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
touch-action: pan-y;
}
.message-row {
display: flex;
margin-bottom: 16px;
align-items: flex-start;
width: 100%;
touch-action: auto;
}
.message-row.user {
flex-direction: row-reverse;
}
.message-bubble {
max-width: 99%;
width: auto;
min-width: 200px;
padding: 16px 20px;
border-radius: var(--radius-lg);
line-height: 1.6;
word-wrap: break-word;
position: relative;
box-shadow: var(--shadow-sm);
font-size: 0.95rem;
touch-action: auto;
transition: all 0.2s ease;
}
.message-bubble:hover {
transform: translateY(-1px);
box-shadow: var(--shadow);
}
.message-row.bot .message-bubble {
background: var(--card);
border: 1px solid var(--border);
color: var(--text);
border-radius: var(--radius-lg) var(--radius-lg) var(--radius-lg) 4px;
margin-right: 1%;
}
.message-row.user .message-bubble {
background: var(--gradient-cute);
color: white;
border-radius: var(--radius-lg) var(--radius-lg) 4px var(--radius-lg);
border: none;
box-shadow: var(--shadow);
margin-left: 1%;
}
.markdown-h3 {
font-size: 1.3rem;
font-weight: 700;
color: var(--primary);
margin: 20px 0 12px 0;
padding: 12px 16px;
background: linear-gradient(135deg, rgba(255, 107, 157, 0.1) 0%, rgba(78, 205, 196, 0.1) 100%);
border-left: 4px solid var(--primary);
border-radius: var(--radius);
position: relative;
overflow: hidden;
}
.markdown-h3::before {
content: '✨';
position: absolute;
right: 12px;
top: 50%;
transform: translateY(-50%);
font-size: 1.2rem;
opacity: 0.7;
}
.inline-code {
background: linear-gradient(135deg, rgba(156, 39, 176, 0.1) 0%, rgba(233, 30, 99, 0.1) 100%);
color: var(--purple);
padding: 4px 8px;
border-radius: var(--radius-sm);
font-family: 'Courier New', monospace;
font-size: 0.9rem;
font-weight: 600;
border: 1px solid rgba(156, 39, 176, 0.2);
position: relative;
display: inline-block;
margin: 0 2px;
transition: all 0.2s ease;
}
.inline-code:hover {
background: linear-gradient(135deg, rgba(156, 39, 176, 0.2) 0%, rgba(233, 30, 99, 0.2) 100%);
transform: translateY(-1px);
box-shadow: 0 2px 4px rgba(156, 39, 176, 0.2);
}
.code-editor {
background: var(--card);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
margin: 16px 0;
overflow: hidden;
box-shadow: var(--shadow);
transition: all 0.3s ease;
width: 100%; max-width: 100%; }
.code-editor:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-md);
}
.code-editor-header {
background: var(--gradient-purple);
color: white;
padding: 12px 16px;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.85rem;
font-weight: 600;
min-height: 48px;
position: relative;
overflow: visible; z-index: 10; }
.chat-messages {
flex: 1;
overflow-y: auto !important;
overflow-x: hidden !important;
padding: 16px 12px;
padding-bottom: 160px;
-webkit-overflow-scrolling: touch !important;
overscroll-behavior: contain !important;
touch-action: pan-y !important;
scroll-behavior: smooth !important;
height: calc(100vh - 140px) !important; max-height: calc(100dvh - 140px) !important;
}
.fallback-code-block {
margin: 0 !important;
padding: 20px !important;
background: #f8fafc;
color: #334155;
font-family: 'Courier New', monospace !important;
font-size: 0.9rem;
line-height: 1.5 !important;
overflow: auto !important; -webkit-overflow-scrolling: touch !important;
white-space: pre !important;
word-wrap: break-word;
border: none;
width: 100% !important;
box-sizing: border-box !important;
min-height: 60px !important;
height: auto !important;
max-height: 400px !important; resize: none !important;
display: block !important;
scrollbar-width: thin;
scrollbar-color: var(--primary) rgba(0,0,0,0.1);
}
.fallback-code-block::-webkit-scrollbar {
width: 8px !important;
height: 8px !important;
}
.fallback-code-block::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.05) !important;
border-radius: 4px !important;
}
.fallback-code-block::-webkit-scrollbar-thumb {
background: linear-gradient(135deg, var(--primary), var(--secondary)) !important;
border-radius: 4px !important;
border: 1px solid rgba(255, 255, 255, 0.3) !important;
}
.fallback-code-block::-webkit-scrollbar-thumb:hover {
background: linear-gradient(135deg, var(--primary-dark), var(--secondary)) !important;
}
.message-bubble {
max-width: 99%;
width: auto;
min-width: 200px;
padding: 16px 20px;
border-radius: var(--radius-lg);
line-height: 1.6;
word-wrap: break-word;
position: relative;
box-shadow: var(--shadow-sm);
font-size: 0.95rem;
touch-action: auto !important; overflow: visible !important; transition: all 0.2s ease;
}
.fas, .far, .fab, .fa {
font-family: "Font Awesome 6 Free" !important;
font-style: normal !important;
font-variant: normal !important;
text-rendering: auto !important;
line-height: 1 !important;
display: inline-block !important;
font-weight: 900 !important;
}
.fa-copy::before {
content: "\f0c5" !important;
font-family: "Font Awesome 6 Free" !important;
font-weight: 900 !important;
}
.fa-download::before {
content: "\f019" !important;
font-family: "Font Awesome 6 Free" !important;
font-weight: 900 !important;
}
.fa-check::before {
content: "\f00c" !important;
font-family: "Font Awesome 6 Free" !important;
font-weight: 900 !important;
}
.code-editor-btn {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.1)) !important;
border: 2px solid rgba(255, 255, 255, 0.3) !important;
color: #ffffff !important;
padding: 8px 12px !important;
border-radius: 8px !important;
cursor: pointer !important;
font-size: 0.8rem !important;
font-weight: 600 !important;
transition: all 0.2s ease !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
gap: 6px !important;
min-height: 32px !important;
min-width: 70px !important;
position: relative !important;
overflow: visible !important; z-index: 20 !important;
backdrop-filter: blur(10px) !important;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15) !important;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3) !important;
white-space: nowrap !important;
}
.code-editor-btn i {
font-size: 0.9rem !important;
color: #ffffff !important;
filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3)) !important;
display: inline-block !important;
width: auto !important;
height: auto !important;
line-height: 1 !important;
vertical-align: middle !important;
font-family: "Font Awesome 6 Free" !important;
font-weight: 900 !important;
font-style: normal !important;
}
.code-editor-btn span {
color: #ffffff !important;
font-size: 0.75rem !important;
font-weight: 600 !important;
text-transform: uppercase !important;
letter-spacing: 0.5px !important;
display: inline-block !important;
vertical-align: middle !important;
}
.code-editor-header {
background: var(--gradient-purple);
color: white;
padding: 12px 16px;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.85rem;
font-weight: 600;
min-height: 48px;
position: relative;
overflow: visible !important; z-index: 10 !important;
}
.code-editor-actions {
display: flex;
gap: 8px;
position: relative;
z-index: 25 !important; }
@media (max-width: 768px) {
.chat-messages {
height: calc(100vh - 120px) !important;
max-height: calc(100dvh - 120px) !important;
padding: 12px 8px;
padding-bottom: 150px;
}
.fallback-code-block {
max-height: 300px !important;
font-size: 0.8rem !important;
padding: 15px !important;
}
.code-editor-btn {
padding: 6px 10px !important;
font-size: 0.75rem !important;
min-width: 60px !important;
min-height: 30px !important;
gap: 4px !important;
}
.code-editor-btn i {
font-size: 0.8rem !important;
}
.code-editor-btn span {
font-size: 0.7rem !important;
}
}
.chat-messages::-webkit-scrollbar {
width: 6px !important;
background: transparent !important;
}
.chat-messages::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.05) !important;
border-radius: 3px !important;
}
.chat-messages::-webkit-scrollbar-thumb {
background: linear-gradient(135deg, var(--primary), var(--secondary)) !important;
border-radius: 3px !important;
border: 1px solid rgba(255, 255, 255, 0.2) !important;
}
.chat-messages::-webkit-scrollbar-thumb:hover {
background: linear-gradient(135deg, var(--primary-dark), var(--secondary)) !important;
}
.code-editor-header::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml,');
opacity: 0.3;
}
.bullet-point {
margin: 8px 0;
padding-left: 20px;
position: relative;
line-height: 1.6;
color: var(--text);
}
.bullet-point::before {
content: '•';
position: absolute;
left: 0;
color: var(--primary);
font-weight: bold;
font-size: 1.2em;
}
.numbered-list {
margin: 8px 0;
display: flex;
align-items: flex-start;
gap: 10px;
line-height: 1.6;
}
.list-number {
font-weight: 700;
color: var(--primary);
min-width: 25px;
}
.message-bubble .bullet-point strong {
color: var(--primary);
font-weight: 700;
}
.message-bubble .code-editor {
margin: 16px 0;
border-radius: var(--radius-lg);
overflow: hidden;
box-shadow: var(--shadow);
}
.inline-code {
background: linear-gradient(135deg, rgba(156, 39, 176, 0.15) 0%, rgba(233, 30, 99, 0.15) 100%);
color: var(--purple);
padding: 3px 8px;
border-radius: 6px;
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
font-size: 0.9em;
font-weight: 600;
border: 1px solid rgba(156, 39, 176, 0.25);
white-space: nowrap;
display: inline-block;
margin: 0 2px;
}
.dark-mode .inline-code {
background: linear-gradient(135deg, rgba(139, 92, 246, 0.3) 0%, rgba(168, 85, 247, 0.3) 100%);
color: #c4b5fd;
border-color: rgba(139, 92, 246, 0.5);
}
.message-bubble p {
margin: 12px 0;
line-height: 1.6;
}
.message-bubble br + br {
display: block;
height: 8px;
}
.code-editor-language {
display: flex;
align-items: center;
gap: 8px;
position: relative;
z-index: 1;
}
.language-icon {
font-size: 1.2rem;
}
.code-editor-actions {
display: flex;
gap: 8px;
position: relative;
z-index: 15; }
.code-editor-btn {
background: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(255, 255, 255, 0.3);
color: white;
padding: 8px 12px;
border-radius: var(--radius);
cursor: pointer;
font-size: 0.8rem;
transition: all 0.2s ease;
display: flex;
align-items: center;
gap: 4px;
font-weight: 500;
touch-action: manipulation;
min-height: 36px;
backdrop-filter: blur(10px);
}
.code-editor-btn:hover {
background: rgba(255, 255, 255, 0.25) !important;
border-color: rgba(255, 255, 255, 0.4) !important;
transform: translateY(-2px) scale(1.05) !important;
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.25) !important;
color: #ffffff !important;
}
.code-editor-btn:active {
transform: translateY(0) scale(0.98) !important;
background: rgba(255, 255, 255, 0.35) !important;
}
.code-editor-btn i {
font-size: 0.9rem;
filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3));
}
.code-editor-btn.copy-btn:hover {
background: rgba(16, 185, 129, 0.8) !important;
border-color: rgba(16, 185, 129, 1) !important;
box-shadow: 0 8px 25px rgba(16, 185, 129, 0.4) !important;
}
.code-editor-btn.download-btn:hover {
background: rgba(59, 130, 246, 0.8) !important;
border-color: rgba(59, 130, 246, 1) !important;
box-shadow: 0 8px 25px rgba(59, 130, 246, 0.4) !important;
}
.code-editor-content {
position: relative;
overflow: hidden;
width: 100%; }
.code-editor-content {
position: relative;
overflow: hidden;
}
.fallback-code-block {
margin: 0;
padding: 20px;
background: #f8fafc;
color: #334155;
font-family: 'Courier New', monospace;
font-size: 0.9rem;
line-height: 1.6;
overflow: auto;
-webkit-overflow-scrolling: touch;
white-space: pre;
word-wrap: normal;
border: none;
width: 100%; box-sizing: border-box; min-height: 80px;
max-height: 500px; height: auto; resize: vertical;
transition: all 0.3s ease;
}
.fallback-code-block::-webkit-scrollbar {
width: 8px;
height: 8px;
}
.fallback-code-block::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.1);
border-radius: 4px;
}
.fallback-code-block::-webkit-scrollbar-thumb {
background: linear-gradient(135deg, var(--primary), var(--secondary));
border-radius: 4px;
}
.fallback-code-block::-webkit-scrollbar-thumb:hover {
background: linear-gradient(135deg, var(--primary-dark), var(--secondary));
}
.code-editor-btn.success-state {
background: rgba(16, 185, 129, 0.9) !important;
border-color: rgba(16, 185, 129, 1) !important;
color: white !important;
animation: successPulse 0.6s ease-out;
}
@keyframes successPulse {
0% { transform: scale(1); }
50% { transform: scale(1.1); }
100% { transform: scale(1); }
}
@media (max-width: 768px) {
.code-editor-btn {
padding: 8px 12px !important;
font-size: 0.8rem !important;
min-width: 70px !important;
min-height: 36px !important;
}
.code-editor-actions {
gap: 6px;
}
.fallback-code-block {
font-size: 0.85rem;
padding: 16px;
}
}
.dark-mode .fallback-code-block {
background: #1e293b;
color: #e2e8f0;
}
/* ========================================
BEAUTIFUL MATH CONTAINER STYLING
======================================== */
.math-container {
background: linear-gradient(135deg,
rgba(99, 102, 241, 0.08) 0%,
rgba(139, 92, 246, 0.08) 50%,
rgba(168, 85, 247, 0.08) 100%);
border: 2px solid rgba(99, 102, 241, 0.2);
border-radius: 20px;
padding: 24px 20px;
margin: 20px 0;
position: relative;
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
touch-action: pan-x;
scroll-behavior: smooth;
box-shadow:
0 8px 32px rgba(99, 102, 241, 0.15),
0 4px 16px rgba(139, 92, 246, 0.1),
inset 0 2px 4px rgba(255, 255, 255, 0.1);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.math-container::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg,
#6366f1 0%,
#8b5cf6 25%,
#a855f7 50%,
#8b5cf6 75%,
#6366f1 100%);
background-size: 300% 100%;
border-radius: 20px 20px 0 0;
animation: mathGradientFlow 3s ease-in-out infinite;
}
.math-container::after {
content: '📐';
position: absolute;
top: 12px;
right: 16px;
font-size: 1.5rem;
opacity: 0.6;
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
animation: mathIconFloat 4s ease-in-out infinite;
}
.math-container:hover {
transform: translateY(-2px);
box-shadow:
0 12px 40px rgba(99, 102, 241, 0.2),
0 6px 20px rgba(139, 92, 246, 0.15),
inset 0 2px 4px rgba(255, 255, 255, 0.15);
border-color: rgba(99, 102, 241, 0.4);
}
.math-container .MathJax_Display,
.math-container .MathJax {
margin: 0 !important;
padding: 8px 0 !important;
overflow: visible !important;
white-space: nowrap !important;
display: inline-block !important;
min-width: max-content !important;
color: #1e293b !important;
font-weight: 500 !important;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) !important;
}
.dark-mode .math-container {
background: linear-gradient(135deg,
rgba(99, 102, 241, 0.15) 0%,
rgba(139, 92, 246, 0.15) 50%,
rgba(168, 85, 247, 0.15) 100%);
border-color: rgba(99, 102, 241, 0.3);
box-shadow:
0 8px 32px rgba(99, 102, 241, 0.2),
0 4px 16px rgba(139, 92, 246, 0.15),
inset 0 2px 4px rgba(255, 255, 255, 0.05);
}
.dark-mode .math-container .MathJax_Display,
.dark-mode .math-container .MathJax {
color: #f8fafc !important;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3) !important;
}
/* ========================================
ENHANCED INLINE CODE STYLING
======================================== */
.inline-code {
background: linear-gradient(135deg,
rgba(168, 85, 247, 0.12) 0%,
rgba(236, 72, 153, 0.12) 100%);
color: #7c3aed;
padding: 6px 12px;
border-radius: 12px;
font-family: 'JetBrains Mono', 'Fira Code', 'SF Mono', 'Monaco', 'Consolas', monospace;
font-size: 0.9em;
font-weight: 600;
border: 2px solid rgba(168, 85, 247, 0.2);
white-space: nowrap;
display: inline-flex;
align-items: center;
margin: 0 4px;
position: relative;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow:
0 2px 8px rgba(168, 85, 247, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
}
.inline-code::before {
content: '⚡';
margin-right: 4px;
font-size: 0.8em;
opacity: 0.7;
}
.inline-code:hover {
background: linear-gradient(135deg,
rgba(168, 85, 247, 0.2) 0%,
rgba(236, 72, 153, 0.2) 100%);
transform: translateY(-1px) scale(1.02);
box-shadow:
0 4px 16px rgba(168, 85, 247, 0.25),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
border-color: rgba(168, 85, 247, 0.4);
}
.dark-mode .inline-code {
background: linear-gradient(135deg,
rgba(139, 92, 246, 0.25) 0%,
rgba(168, 85, 247, 0.25) 100%);
color: #c4b5fd;
border-color: rgba(139, 92, 246, 0.4);
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
box-shadow:
0 2px 8px rgba(139, 92, 246, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.dark-mode .inline-code:hover {
background: linear-gradient(135deg,
rgba(139, 92, 246, 0.35) 0%,
rgba(168, 85, 247, 0.35) 100%);
color: #ddd6fe;
box-shadow:
0 4px 16px rgba(139, 92, 246, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
/* ========================================
BEAUTIFUL BLOCKQUOTE STYLING
======================================== */
.markdown-blockquote {
background: linear-gradient(135deg,
rgba(34, 197, 94, 0.08) 0%,
rgba(16, 185, 129, 0.08) 100%);
border-left: 6px solid #10b981;
border-radius: 16px;
padding: 20px 24px;
margin: 20px 0;
position: relative;
overflow: hidden;
box-shadow:
0 4px 16px rgba(16, 185, 129, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
transition: all 0.3s ease;
}
.markdown-blockquote::before {
content: '"';
position: absolute;
top: 10px;
right: 20px;
font-size: 4rem;
color: rgba(16, 185, 129, 0.2);
font-family: 'Times New Roman', serif;
line-height: 1;
pointer-events: none;
}
.markdown-blockquote::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 2px;
background: linear-gradient(90deg,
#10b981 0%,
#059669 50%,
#047857 100%);
animation: quoteGlow 2s ease-in-out infinite alternate;
}
.markdown-blockquote:hover {
transform: translateY(-2px);
box-shadow:
0 8px 24px rgba(16, 185, 129, 0.15),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
.dark-mode .markdown-blockquote {
background: linear-gradient(135deg,
rgba(34, 197, 94, 0.15) 0%,
rgba(16, 185, 129, 0.15) 100%);
box-shadow:
0 4px 16px rgba(16, 185, 129, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
}
/* ========================================
ENHANCED HEADERS STYLING
======================================== */
.markdown-h1, .markdown-h2, .markdown-h3 {
position: relative;
margin: 24px 0 16px 0;
font-family: var(--font-comfortaa);
font-weight: 700;
background: linear-gradient(135deg,
#667eea 0%,
#764ba2 50%,
#f093fb 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
background-size: 300% 300%;
animation: headerGradientShift 4s ease-in-out infinite;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
letter-spacing: -0.5px;
line-height: 1.2;
}
.markdown-h1 {
font-size: 2.2rem;
padding: 20px 24px;
background: linear-gradient(135deg,
rgba(102, 126, 234, 0.1) 0%,
rgba(118, 75, 162, 0.1) 100%);
border-radius: 20px;
border: 2px solid rgba(102, 126, 234, 0.2);
box-shadow:
0 8px 24px rgba(102, 126, 234, 0.15),
inset 0 2px 4px rgba(255, 255, 255, 0.1);
}
.markdown-h2 {
font-size: 1.8rem;
padding: 16px 20px;
background: linear-gradient(135deg,
rgba(118, 75, 162, 0.08) 0%,
rgba(240, 147, 251, 0.08) 100%);
border-radius: 16px;
border-left: 5px solid #764ba2;
box-shadow: 0 4px 16px rgba(118, 75, 162, 0.1);
}
.markdown-h3 {
font-size: 1.4rem;
padding: 12px 20px;
background: linear-gradient(135deg,
rgba(240, 147, 251, 0.08) 0%,
rgba(102, 126, 234, 0.08) 100%);
border-radius: 12px;
border-left: 4px solid #f093fb;
position: relative;
overflow: hidden;
box-shadow: 0 2px 12px rgba(240, 147, 251, 0.1);
}
.markdown-h3::before {
content: '✨';
position: absolute;
right: 16px;
top: 50%;
transform: translateY(-50%);
font-size: 1.2rem;
opacity: 0.7;
animation: sparkleFloat 3s ease-in-out infinite;
}
/* ========================================
ENHANCED LISTS STYLING
======================================== */
.bullet-point {
margin: 12px 0;
padding: 12px 16px 12px 48px;
position: relative;
line-height: 1.6;
color: var(--text);
background: linear-gradient(135deg,
rgba(59, 130, 246, 0.05) 0%,
rgba(147, 51, 234, 0.05) 100%);
border-radius: 12px;
border-left: 3px solid #3b82f6;
transition: all 0.3s ease;
box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1);
}
.bullet-point::before {
content: '🔸';
position: absolute;
left: 16px;
top: 12px;
font-size: 1.1em;
animation: bulletPulse 2s ease-in-out infinite;
}
.bullet-point:hover {
transform: translateX(8px);
background: linear-gradient(135deg,
rgba(59, 130, 246, 0.1) 0%,
rgba(147, 51, 234, 0.1) 100%);
box-shadow: 0 4px 16px rgba(59, 130, 246, 0.15);
}
.numbered-list {
margin: 12px 0;
display: flex;
align-items: flex-start;
gap: 16px;
line-height: 1.6;
padding: 12px 16px;
background: linear-gradient(135deg,
rgba(16, 185, 129, 0.05) 0%,
rgba(5, 150, 105, 0.05) 100%);
border-radius: 12px;
border-left: 3px solid #10b981;
transition: all 0.3s ease;
box-shadow: 0 2px 8px rgba(16, 185, 129, 0.1);
}
.list-number {
font-weight: 700;
color: white;
background: linear-gradient(135deg, #10b981, #059669);
width: 28px;
height: 28px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.85rem;
flex-shrink: 0;
box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);
animation: numberGlow 3s ease-in-out infinite;
}
.numbered-list:hover {
transform: translateX(8px);
background: linear-gradient(135deg,
rgba(16, 185, 129, 0.1) 0%,
rgba(5, 150, 105, 0.1) 100%);
box-shadow: 0 4px 16px rgba(16, 185, 129, 0.15);
}
/* ========================================
BEAUTIFUL LINK STYLING
======================================== */
a[href] {
color: #3b82f6;
text-decoration: none;
font-weight: 600;
position: relative;
padding: 4px 8px;
border-radius: 8px;
background: linear-gradient(135deg,
rgba(59, 130, 246, 0.1) 0%,
rgba(99, 102, 241, 0.1) 100%);
border: 1px solid rgba(59, 130, 246, 0.2);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
display: inline-flex;
align-items: center;
gap: 6px;
margin: 0 2px;
}
a[href]::after {
content: '🔗';
font-size: 0.8em;
opacity: 0.7;
transition: all 0.3s ease;
}
a[href]:hover {
color: #1e40af;
background: linear-gradient(135deg,
rgba(59, 130, 246, 0.2) 0%,
rgba(99, 102, 241, 0.2) 100%);
transform: translateY(-2px);
box-shadow:
0 4px 16px rgba(59, 130, 246, 0.25),
inset 0 1px 0 rgba(255, 255, 255, 0.2);
border-color: rgba(59, 130, 246, 0.4);
}
a[href]:hover::after {
opacity: 1;
transform: scale(1.1);
}
.dark-mode a[href] {
color: #60a5fa;
background: linear-gradient(135deg,
rgba(96, 165, 250, 0.15) 0%,
rgba(129, 140, 248, 0.15) 100%);
border-color: rgba(96, 165, 250, 0.3);
}
.dark-mode a[href]:hover {
color: #93c5fd;
background: linear-gradient(135deg,
rgba(96, 165, 250, 0.25) 0%,
rgba(129, 140, 248, 0.25) 100%);
}
/* ========================================
ANIMATIONS
======================================== */
@keyframes mathGradientFlow {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
@keyframes mathIconFloat {
0%, 100% {
transform: translateY(0) rotate(0deg);
opacity: 0.6;
}
50% {
transform: translateY(-3px) rotate(5deg);
opacity: 0.8;
}
}
@keyframes headerGradientShift {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
@keyframes quoteGlow {
0% { opacity: 0.6; }
100% { opacity: 1; }
}
@keyframes sparkleFloat {
0%, 100% {
transform: translateY(-50%) scale(1);
opacity: 0.7;
}
50% {
transform: translateY(-50%) scale(1.1);
opacity: 1;
}
}
@keyframes bulletPulse {
0%, 100% {
transform: scale(1);
opacity: 0.8;
}
50% {
transform: scale(1.1);
opacity: 1;
}
}
@keyframes numberGlow {
0%, 100% {
box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);
}
50% {
box-shadow: 0 6px 20px rgba(16, 185, 129, 0.5);
}
}
.message-bubble {
white-space: pre-wrap !important; word-wrap: break-word;
overflow-wrap: break-word;
}
/* ========================================
MOBILE RESPONSIVE
======================================== */
@media (max-width: 768px) {
.math-container {
padding: 16px 12px;
margin: 16px 0;
border-radius: 16px;
}
.markdown-h1 {
font-size: 1.8rem;
padding: 16px 20px;
}
.markdown-h2 {
font-size: 1.5rem;
padding: 12px 16px;
}
.markdown-h3 {
font-size: 1.2rem;
padding: 10px 16px;
}
.bullet-point, .numbered-list {
padding: 10px 12px 10px 40px;
margin: 8px 0;
}
.inline-code {
padding: 4px 8px;
font-size: 0.85em;
margin: 0 2px;
}
.markdown-blockquote {
padding: 16px 20px;
margin: 16px 0;
}
}
.math-container::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.1);
border-radius: 4px;
}
.math-container::-webkit-scrollbar-thumb {
background: linear-gradient(90deg, var(--primary), var(--secondary));
border-radius: 4px;
border: 1px solid rgba(255, 255, 255, 0.3);
}
.math-container::-webkit-scrollbar-thumb:hover {
background: linear-gradient(90deg, var(--primary-dark), var(--secondary));
}
.math-container .MathJax_Display {
margin: 0 !important;
overflow: visible !important;
white-space: nowrap !important;
display: inline-block !important;
min-width: max-content !important;
}
.math-container::-webkit-scrollbar {
height: 6px;
}
.math-container::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.1);
border-radius: 3px;
}
.math-container::-webkit-scrollbar-thumb {
background: var(--primary);
border-radius: 3px;
}
.math-container::-webkit-scrollbar-thumb:hover {
background: var(--primary-dark);
}
.input-area {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
border-top: 1px solid var(--border);
padding: 12px;
padding-left: max(12px, env(safe-area-inset-left));
padding-right: max(12px, env(safe-area-inset-right));
padding-bottom: max(12px, env(safe-area-inset-bottom));
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 100;
box-shadow: 0 -2px 8px rgba(0,0,0,0.1);
touch-action: manipulation;
}
.dark-mode .input-area {
background: rgba(55, 65, 81, 0.95);
}
.input-toolbar {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 8px;
margin-bottom: 12px;
}
.toolbar-btn {
background: var(--card);
border: 1px solid var(--border);
color: var(--text);
padding: 10px 8px;
border-radius: var(--radius);
cursor: pointer;
transition: all 0.2s ease;
font-size: 0.75rem;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 4px;
font-weight: 500;
box-shadow: var(--shadow-sm);
min-height: 56px;
touch-action: manipulation;
position: relative;
z-index: 101;
}
.toolbar-btn:hover {
background: var(--card-hover);
transform: translateY(-1px);
}
.toolbar-btn:active {
transform: scale(0.95) translateY(0);
background: rgba(255, 107, 157, 0.1);
}
.toolbar-btn i {
font-size: 1.2rem;
}
.input-group {
display: flex;
gap: 8px;
align-items: flex-end;
}
.message-input {
flex: 1;
min-height: 48px;
max-height: 120px;
padding: 12px 16px;
border: 1px solid var(--border);
border-radius: var(--radius); background: var(--card);
color: var(--text);
resize: none;
transition: border-color 0.2s ease;
font-size: 16px;
line-height: 1.4;
box-shadow: var(--shadow-sm);
touch-action: manipulation;
}
.message-input:focus {
outline: none;
border-color: var(--primary);
}
.send-btn, .stop-btn {
width: 48px;
height: 48px;
min-width: 48px;
min-height: 48px;
border: none;
border-radius: var(--radius-full);
background: var(--gradient-cute);
color: white;
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
box-shadow: var(--shadow);
touch-action: manipulation;
position: relative;
z-index: 102;
}
.send-btn:hover, .stop-btn:hover {
transform: scale(1.05);
box-shadow: var(--shadow-md);
}
.send-btn:active, .stop-btn:active {
transform: scale(0.95);
}
.voice-recording-backdrop {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.6);
backdrop-filter: blur(12px);
z-index: 10000;
opacity: 0;
visibility: hidden;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
display: flex;
align-items: center;
justify-content: center;
}
.voice-recording-backdrop.show {
opacity: 1;
visibility: visible;
}
.voice-recording-popup {
background: var(--gradient-voice);
border-radius: var(--radius-xl);
padding: 40px 30px;
color: white;
text-align: center;
transform: scale(0.8) translateY(20px);
opacity: 0;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: var(--shadow-lg);
min-width: 320px;
max-width: 90vw;
cursor: pointer;
touch-action: manipulation;
position: relative;
overflow: hidden;
border: 2px solid rgba(255, 255, 255, 0.2);
}
.voice-recording-popup::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml,');
opacity: 0.3;
animation: wavePattern 4s ease-in-out infinite;
}
@keyframes wavePattern {
0%, 100% { transform: translateX(0); }
50% { transform: translateX(10px); }
}
.voice-recording-popup.show {
opacity: 1;
transform: scale(1) translateY(0);
}
.voice-recording-icon {
width: 100px;
height: 100px;
background: rgba(255, 255, 255, 0.2);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 24px;
font-size: 2.5rem;
animation: recordingPulse 1.5s ease-in-out infinite;
position: relative;
z-index: 1;
border: 3px solid rgba(255, 255, 255, 0.3);
backdrop-filter: blur(10px);
}
@keyframes recordingPulse {
0%, 100% {
transform: scale(1);
box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.4);
}
50% {
transform: scale(1.1);
box-shadow: 0 0 0 20px rgba(255, 255, 255, 0);
}
}
.voice-recording-text {
font-size: 1.6rem;
font-weight: 700;
margin-bottom: 8px;
font-family: var(--font-comfortaa);
position: relative;
z-index: 1;
}
.voice-recording-instruction {
font-size: 1rem;
opacity: 0.9;
margin-bottom: 24px;
position: relative;
z-index: 1;
font-weight: 500;
}
.voice-recording-waveform {
display: flex;
justify-content: center;
align-items: center;
gap: 4px;
margin-bottom: 20px;
height: 40px;
position: relative;
z-index: 1;
}
.voice-wave-bar {
width: 4px;
background: rgba(255, 255, 255, 0.8);
border-radius: 2px;
animation: voiceWave 1.2s ease-in-out infinite;
}
.voice-wave-bar:nth-child(1) { animation-delay: 0s; }
.voice-wave-bar:nth-child(2) { animation-delay: 0.1s; }
.voice-wave-bar:nth-child(3) { animation-delay: 0.2s; }
.voice-wave-bar:nth-child(4) { animation-delay: 0.3s; }
.voice-wave-bar:nth-child(5) { animation-delay: 0.4s; }
.voice-wave-bar:nth-child(6) { animation-delay: 0.2s; }
.voice-wave-bar:nth-child(7) { animation-delay: 0.1s; }
@keyframes voiceWave {
0%, 100% {
height: 8px;
opacity: 0.5;
}
50% {
height: 35px;
opacity: 1;
}
}
.voice-language-info {
font-size: 0.85rem;
opacity: 0.8;
background: rgba(255, 255, 255, 0.1);
padding: 8px 16px;
border-radius: var(--radius-full);
display: inline-block;
position: relative;
z-index: 1;
border: 1px solid rgba(255, 255, 255, 0.2);
backdrop-filter: blur(10px);
}
.thinking-indicator {
display: flex;
align-items: center;
gap: 12px;
padding: 16px;
background: var(--card);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
margin: 12px 0;
max-width: 200px;
box-shadow: var(--shadow-sm);
}
.thinking-dots {
display: flex;
gap: 6px;
}
.thinking-dot {
width: 8px;
height: 8px;
background: var(--primary);
border-radius: 50%;
animation: thinking 1.4s infinite;
}
.thinking-dot:nth-child(2) { animation-delay: 0.2s; }
.thinking-dot:nth-child(3) { animation-delay: 0.4s; }
@keyframes thinking {
0%, 60%, 100% {
transform: scale(1) translateY(0);
opacity: 0.5;
}
30% {
transform: scale(1.2) translateY(-4px);
opacity: 1;
}
}
.settings-modal .modal-content {
border: none;
border-radius: var(--radius-xl);
overflow: hidden;
box-shadow: var(--shadow-lg);
background: var(--card);
}
.settings-modal .modal-header {
background: var(--gradient-cute);
color: white;
padding: 24px 30px;
border: none;
position: relative;
overflow: hidden;
}
.settings-modal .modal-header::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml,');
opacity: 0.3;
}
.settings-modal .modal-title {
display: flex;
align-items: center;
gap: 12px;
font-family: var(--font-comfortaa);
position: relative;
z-index: 1;
font-size: 1.4rem;
font-weight: 600;
}
.settings-modal .modal-title i {
width: 40px;
height: 40px;
background: rgba(255, 255, 255, 0.2);
border-radius: var(--radius-full);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
}
.settings-modal .btn-close {
background: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: var(--radius-full);
width: 40px;
height: 40px;
position: relative;
z-index: 1;
}
.settings-modal .modal-body {
padding: 30px;
background: var(--bg-secondary);
}
.dark-mode .settings-modal .modal-body {
background: var(--card);
}
.settings-card {
background: var(--card);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
padding: 20px;
margin-bottom: 16px;
position: relative;
overflow: hidden;
transition: all 0.3s ease;
}
.settings-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: var(--gradient-cute);
}
.settings-card:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-md);
}
.settings-card label {
display: flex;
align-items: center;
gap: 10px;
font-weight: 600;
color: var(--text);
margin-bottom: 12px;
font-size: 0.95rem !important;
font-family: var(--font-nunito) !important;
}
.settings-card label i {
color: var(--primary);
font-size: 1.1rem;
width: 20px;
text-align: center;
}
.settings-card .form-select,
.settings-card .form-control {
border: 1px solid var(--border);
border-radius: var(--radius);
background: var(--card);
color: var(--text);
padding: 12px 14px;
font-size: 14px !important;
font-family: var(--font-nunito) !important;
transition: all 0.2s ease;
min-height: 44px;
}
.settings-card .form-select:focus,
.settings-card .form-control:focus {
outline: none;
border-color: var(--primary);
box-shadow: 0 0 0 3px rgba(255, 107, 157, 0.1);
}
.font-controls-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
margin-top: 12px;
}
.form-check {
display: flex;
align-items: center;
gap: 12px;
padding: 12px 16px; }
.form-check-input {
width: 17px;
height: 17px;
border: 2px solid var(--border);
border-radius: 4px;
background: var(--card);
cursor: pointer;
transition: all 0.2s ease;
margin-left: 10px;
}
.form-check-input:checked {
background: var(--primary);
border-color: var(--primary);
}
.form-check-label {
color: var(--text);
font-weight: 500;
cursor: pointer;
display: flex;
align-items: center;
gap: 8px;
font-size: 0.9rem !important;
font-family: var(--font-nunito) !important;
}
.form-check-label i {
color: var(--primary);
width: 16px;
text-align: center;
}
.toast {
position: fixed;
bottom: 80px;
right: 12px;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
border: 1px solid var(--border);
padding: 12px 16px;
border-radius: var(--radius-lg);
box-shadow: var(--shadow);
z-index: 1001;
opacity: 0;
transform: translateY(20px);
transition: all 0.3s ease;
max-width: calc(100vw - 24px);
display: flex;
align-items: center;
gap: 8px;
font-weight: 500;
font-size: 0.85rem;
}
.dark-mode .toast {
background: rgba(55, 65, 81, 0.95);
}
.toast.show {
opacity: 1;
transform: translateY(0);
}
.sidebar-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 999;
opacity: 0;
visibility: hidden;
transition: all 0.3s ease;
touch-action: none;
}
.sidebar-overlay.show {
opacity: 1;
visibility: visible;
}
.btn {
padding: 12px 24px;
border-radius: var(--radius);
font-weight: 600;
font-size: 0.85rem;
transition: all 0.2s ease;
cursor: pointer;
border: 1px solid transparent;
display: inline-flex;
align-items: center;
gap: 6px;
min-height: 44px;
touch-action: manipulation;
}
.btn:hover {
transform: translateY(-1px);
box-shadow: var(--shadow);
}
.btn:active {
transform: scale(0.98) translateY(0);
}
.btn-primary {
background: var(--gradient-cute);
color: white;
box-shadow: var(--shadow-sm);
}
.btn-primary:hover {
background: var(--gradient-cute);
filter: brightness(1.1);
}
@media (max-width: 768px) {
.sidebar {
width: 90vw;
left: -90vw;
}
.sidebar.show {
transform: translateX(90vw);
}
.logo .logo-text {
font-size: 1.1rem;
}
.points-display {
padding: 6px 12px;
font-size: 0.8rem;
}
.message-bubble {
padding: 14px 16px;
font-size: 0.9rem;
}
.toolbar-btn span {
font-size: 0.7rem;
}
.font-controls-grid {
grid-template-columns: 1fr;
}
.settings-modal .modal-dialog {
margin: 10px;
}
.voice-recording-popup {
min-width: 280px;
padding: 30px 20px;
}
}
@media (max-width: 480px) {
.main-header {
padding: 10px 12px;
}
.chat-messages {
padding: 12px 8px;
padding-bottom: 150px;
}
.input-area {
padding: 8px;
}
}
body.sidebar-open {
overflow: hidden;
position: fixed;
width: 100%;
}
.chat-messages::-webkit-scrollbar,
.sidebar-content::-webkit-scrollbar {
width: 4px;
}
.chat-messages::-webkit-scrollbar-track,
.sidebar-content::-webkit-scrollbar-track {
background: transparent;
}
.chat-messages::-webkit-scrollbar-thumb,
.sidebar-content::-webkit-scrollbar-thumb {
background: var(--primary);
border-radius: 2px;
}
*:focus-visible {
outline: 2px solid var(--primary);
outline-offset: 2px;
}
::selection {
background: var(--primary);
color: white;
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
.ripple {
position: absolute;
border-radius: 50%;
background: rgba(255, 107, 157, 0.3);
transform: scale(0);
pointer-events: none;
z-index: 1000;
}
.ripple.animate {
animation: rippleEffect 0.6s ease-out;
}
@keyframes rippleEffect {
0% {
transform: scale(0);
opacity: 0.8;
}
100% {
transform: scale(4);
opacity: 0;
}
}
.pressed {
transform: scale(0.98) !important;
transition: all 0.1s ease !important;
}
/* ========================================
ULTRA PROFESSIONAL AI LOGO SYSTEM
======================================== */
.cute-avatar,
.logo-avatar {
width: 48px !important;
height: 48px !important;
background: linear-gradient(135deg,
#667eea 0%,
#764ba2 20%,
#667eea 40%,
#764ba2 60%,
#667eea 80%,
#764ba2 100%) !important;
border-radius: 12px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
position: relative !important;
overflow: hidden !important;
cursor: pointer !important;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1) !important;
box-shadow:
0 8px 32px rgba(102, 126, 234, 0.3),
0 4px 16px rgba(118, 75, 162, 0.2),
inset 0 2px 8px rgba(255, 255, 255, 0.1) !important;
border: 2px solid rgba(255, 255, 255, 0.2) !important;
}
.cute-avatar::before,
.logo-avatar::before {
content: '' !important;
position: absolute !important;
top: -3px !important;
left: -3px !important;
right: -3px !important;
bottom: -3px !important;
background: conic-gradient(
from 0deg,
#667eea 0deg,
#764ba2 72deg,
#f093fb 144deg,
#f5576c 216deg,
#4facfe 288deg,
#667eea 360deg
) !important;
border-radius: 15px !important;
z-index: -1 !important;
animation: aiRotateBorder 4s linear infinite !important;
opacity: 0.8 !important;
}
.cute-avatar::after,
.logo-avatar::after {
content: '' !important;
position: absolute !important;
top: 0 !important;
left: 0 !important;
right: 0 !important;
bottom: 0 !important;
background:
radial-gradient(circle at 20% 20%, rgba(255, 255, 255, 0.1) 2px, transparent 2px),
radial-gradient(circle at 80% 20%, rgba(255, 255, 255, 0.1) 2px, transparent 2px),
radial-gradient(circle at 20% 80%, rgba(255, 255, 255, 0.1) 2px, transparent 2px),
radial-gradient(circle at 80% 80%, rgba(255, 255, 255, 0.1) 2px, transparent 2px),
radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.15) 3px, transparent 3px),
linear-gradient(45deg, transparent 48%, rgba(255, 255, 255, 0.1) 49%, rgba(255, 255, 255, 0.1) 51%, transparent 52%),
linear-gradient(-45deg, transparent 48%, rgba(255, 255, 255, 0.1) 49%, rgba(255, 255, 255, 0.1) 51%, transparent 52%) !important;
border-radius: 12px !important;
animation: aiNeuralPulse 3s ease-in-out infinite !important;
pointer-events: none !important;
}
.ai-brain-icon {
position: relative !important;
z-index: 5 !important;
width: 24px !important;
height: 24px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
color: white !important;
font-size: 14px !important;
font-weight: 600 !important;
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;
animation: aiBrainFloat 4s ease-in-out infinite !important;
}
.ai-brain-icon::before {
content: '' !important;
position: absolute !important;
width: 20px !important;
height: 20px !important;
background:
radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.9) 2px, transparent 2px),
radial-gradient(circle at 70% 30%, rgba(255, 255, 255, 0.9) 2px, transparent 2px),
radial-gradient(circle at 30% 70%, rgba(255, 255, 255, 0.9) 2px, transparent 2px),
radial-gradient(circle at 70% 70%, rgba(255, 255, 255, 0.9) 2px, transparent 2px),
radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 1) 3px, transparent 3px) !important;
border-radius: 50% !important;
animation: aiSynapseFlow 2s ease-in-out infinite !important;
}
.ai-brain-icon::after {
content: '' !important;
position: absolute !important;
width: 18px !important;
height: 18px !important;
background:
linear-gradient(90deg, transparent 45%, rgba(255, 255, 255, 0.8) 47%, rgba(255, 255, 255, 0.8) 53%, transparent 55%),
linear-gradient(0deg, transparent 45%, rgba(255, 255, 255, 0.8) 47%, rgba(255, 255, 255, 0.8) 53%, transparent 55%) !important;
border-radius: 50% !important;
animation: aiCircuitPulse 1.5s ease-in-out infinite alternate !important;
}
.cute-avatar:hover,
.logo-avatar:hover {
transform: scale(1.1) rotate(5deg) !important;
box-shadow:
0 12px 48px rgba(102, 126, 234, 0.4),
0 8px 24px rgba(118, 75, 162, 0.3),
inset 0 2px 12px rgba(255, 255, 255, 0.2) !important;
}
.cute-avatar:hover::before,
.logo-avatar:hover::before {
animation-duration: 2s !important;
opacity: 1 !important;
}
.cute-avatar:hover .ai-brain-icon,
.logo-avatar:hover .ai-brain-icon {
animation-duration: 2s !important;
}
.cute-avatar.active,
.logo-avatar.active {
animation: aiLogoActiveGlow 3s ease-in-out infinite !important;
}
.logo-text {
background: linear-gradient(135deg,
#667eea 0%,
#764ba2 25%,
#f093fb 50%,
#667eea 75%,
#764ba2 100%) !important;
background-size: 300% 300% !important;
-webkit-background-clip: text !important;
-webkit-text-fill-color: transparent !important;
background-clip: text !important;
font-weight: 700 !important;
letter-spacing: -0.5px !important;
font-size: clamp(1rem, 4vw, 1.4rem) !important;
animation: aiTextFlow 6s ease-in-out infinite !important;
position: relative !important;
text-shadow: 0 2px 8px rgba(102, 126, 234, 0.3) !important;
}
.logo-text::before {
content: '' !important;
position: absolute !important;
top: 0 !important;
left: -100% !important;
width: 100% !important;
height: 100% !important;
background: linear-gradient(90deg,
transparent 0%,
rgba(255, 255, 255, 0.4) 50%,
transparent 100%) !important;
animation: aiTextShine 4s ease-in-out infinite !important;
}
.sidebar-header .cute-avatar {
width: 44px !important;
height: 44px !important;
}
.sidebar-header .ai-brain-icon {
width: 22px !important;
height: 22px !important;
font-size: 12px !important;
}
.header-left .logo-avatar {
width: 40px !important;
height: 40px !important;
}
.header-left .ai-brain-icon {
width: 20px !important;
height: 20px !important;
font-size: 11px !important;
}
/* ========================================
ANIMATIONS
======================================== */
@keyframes aiRotateBorder {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@keyframes aiNeuralPulse {
0%, 100% {
opacity: 0.6;
transform: scale(1);
}
50% {
opacity: 1;
transform: scale(1.02);
}
}
@keyframes aiBrainFloat {
0%, 100% {
transform: translateY(0) scale(1);
}
25% {
transform: translateY(-1px) scale(1.02);
}
50% {
transform: translateY(0) scale(1.05);
}
75% {
transform: translateY(1px) scale(1.02);
}
}
@keyframes aiSynapseFlow {
0%, 100% {
opacity: 0.8;
transform: scale(1);
}
50% {
opacity: 1;
transform: scale(1.1);
}
}
@keyframes aiCircuitPulse {
0% {
opacity: 0.5;
transform: scale(0.9);
}
100% {
opacity: 1;
transform: scale(1.1);
}
}
@keyframes aiLogoActiveGlow {
0%, 100% {
box-shadow:
0 8px 32px rgba(102, 126, 234, 0.3),
0 4px 16px rgba(118, 75, 162, 0.2),
inset 0 2px 8px rgba(255, 255, 255, 0.1);
}
50% {
box-shadow:
0 16px 48px rgba(102, 126, 234, 0.5),
0 8px 24px rgba(118, 75, 162, 0.4),
inset 0 2px 12px rgba(255, 255, 255, 0.2);
}
}
@keyframes aiTextFlow {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
@keyframes aiTextShine {
0% { left: -100%; }
50%, 100% { left: 100%; }
}
/* ========================================
ALTERNATIVE AI LOGOS
======================================== */
.ai-circuit-style {
background: linear-gradient(135deg, #0f0f23 0%, #1a1a3e 50%, #0f0f23 100%) !important;
border: 2px solid #00ff88 !important;
box-shadow:
0 0 20px rgba(0, 255, 136, 0.3),
inset 0 2px 8px rgba(0, 255, 136, 0.1) !important;
}
.ai-circuit-style::before {
background: conic-gradient(
from 0deg,
#00ff88 0deg,
#0088ff 120deg,
#ff0088 240deg,
#00ff88 360deg
) !important;
}
.ai-circuit-style::after {
background:
linear-gradient(90deg, transparent 30%, #00ff88 31%, #00ff88 32%, transparent 33%),
linear-gradient(0deg, transparent 30%, #00ff88 31%, #00ff88 32%, transparent 33%),
radial-gradient(circle at 25% 25%, #00ff88 1px, transparent 1px),
radial-gradient(circle at 75% 25%, #00ff88 1px, transparent 1px),
radial-gradient(circle at 25% 75%, #00ff88 1px, transparent 1px),
radial-gradient(circle at 75% 75%, #00ff88 1px, transparent 1px) !important;
animation: aiCircuitFlow 2s linear infinite !important;
}
@keyframes aiCircuitFlow {
0% { opacity: 0.6; }
50% { opacity: 1; }
100% { opacity: 0.6; }
}
.ai-quantum-style {
background: linear-gradient(45deg,
#ff006e 0%,
#8338ec 25%,
#3a86ff 50%,
#06ffa5 75%,
#ff006e 100%) !important;
background-size: 300% 300% !important;
animation: aiQuantumShift 4s ease-in-out infinite !important;
border-radius: 20% !important;
}
.ai-quantum-style::after {
background:
radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.8) 2px, transparent 2px),
radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.6) 1px, transparent 1px),
radial-gradient(circle at 70% 30%, rgba(255, 255, 255, 0.6) 1px, transparent 1px),
radial-gradient(circle at 30% 70%, rgba(255, 255, 255, 0.6) 1px, transparent 1px),
radial-gradient(circle at 70% 70%, rgba(255, 255, 255, 0.6) 1px, transparent 1px) !important;
animation: aiQuantumParticles 3s ease-in-out infinite !important;
}
@keyframes aiQuantumShift {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
@keyframes aiQuantumParticles {
0%, 100% {
transform: scale(1) rotate(0deg);
opacity: 0.8;
}
50% {
transform: scale(1.1) rotate(180deg);
opacity: 1;
}
}
.dark-mode .cute-avatar,
.dark-mode .logo-avatar {
border-color: rgba(255, 255, 255, 0.3) !important;
box-shadow:
0 8px 32px rgba(102, 126, 234, 0.4),
0 4px 16px rgba(118, 75, 162, 0.3),
inset 0 2px 8px rgba(255, 255, 255, 0.15) !important;
}
.input-toolbar {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 12px;
justify-content: space-between;
}
.toolbar-btn {
flex: 1;
min-width: 70px; padding: 10px 4px;
font-size: 0.75rem;
}
@media (max-width: 480px) {
.toolbar-btn {
min-width: 60px;
padding: 8px 2px;
}
.toolbar-btn span {
font-size: 0.7rem;
}
}
@media (max-width: 768px) {
.cute-avatar,
.logo-avatar {
width: 40px !important;
height: 40px !important;
}
.ai-brain-icon {
width: 18px !important;
height: 18px !important;
font-size: 10px !important;
}
.sidebar-header .cute-avatar {
width: 38px !important;
height: 38px !important;
}
.header-left .logo-avatar {
width: 36px !important;
height: 36px !important;
}
}
.code-editor-btn {
background: rgba(255, 255, 255, 0.15) !important;
border: 2px solid rgba(255, 255, 255, 0.25) !important;
color: white !important;
padding: 10px 16px !important;
border-radius: 12px !important;
cursor: pointer !important;
font-size: 0.85rem !important;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
display: flex !important;
align-items: center !important;
gap: 8px !important;
font-weight: 600 !important;
backdrop-filter: blur(10px) !important;
min-height: 40px !important;
min-width: 80px !important;
justify-content: center !important;
position: relative !important;
overflow: hidden !important;
z-index: 20 !important; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
text-transform: uppercase !important;
letter-spacing: 0.5px !important;
}
.code-editor-btn::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
transition: left 0.5s ease;
}
.code-editor-btn:hover::before {
left: 100%;
}
.code-editor-actions {
display: flex;
gap: 8px;
position: relative;
z-index: 2; }
.code-editor-header {
overflow: visible; z-index: 10; }
.dark-mode .inline-code {
background: linear-gradient(135deg, rgba(139, 92, 246, 0.25) 0%, rgba(168, 85, 247, 0.25) 100%) !important;
color: #c4b5fd !important; border-color: rgba(139, 92, 246, 0.4) !important;
text-shadow: 0 1px 2px rgba(0,0,0,0.5) !important; }
.dark-mode .inline-code:hover {
background: linear-gradient(135deg, rgba(139, 92, 246, 0.35) 0%, rgba(168, 85, 247, 0.35) 100%) !important;
color: #ddd6fe !important;
box-shadow: 0 2px 12px rgba(139, 92, 246, 0.3) !important;
}
.toast {
position: fixed;
bottom: 100px;
right: 20px;
background: rgba(255, 255, 255, 0.98);
backdrop-filter: blur(20px);
border: none;
padding: 20px 24px;
border-radius: 20px;
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.15),
0 10px 20px rgba(0, 0, 0, 0.1),
inset 0 1px 0 rgba(255, 255, 255, 0.8);
z-index: 10001;
opacity: 0;
transform: translateY(30px) scale(0.9);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
max-width: calc(100vw - 40px);
min-width: 300px;
display: flex;
align-items: center;
gap: 16px;
font-weight: 600;
font-size: 0.95rem;
position: relative;
overflow: hidden;
border-left: 5px solid transparent;
}
.dark-mode .toast {
background: rgba(30, 41, 59, 0.98);
color: #f1f5f9;
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.3),
0 10px 20px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.toast.show {
opacity: 1;
transform: translateY(0) scale(1);
}
.toast.success {
border-left-color: #10b981;
background: linear-gradient(135deg,
rgba(16, 185, 129, 0.1) 0%,
rgba(255, 255, 255, 0.98) 20%);
}
.dark-mode .toast.success {
background: linear-gradient(135deg,
rgba(16, 185, 129, 0.2) 0%,
rgba(30, 41, 59, 0.98) 20%);
}
.toast.error {
border-left-color: #ef4444;
background: linear-gradient(135deg,
rgba(239, 68, 68, 0.1) 0%,
rgba(255, 255, 255, 0.98) 20%);
}
.dark-mode .toast.error {
background: linear-gradient(135deg,
rgba(239, 68, 68, 0.2) 0%,
rgba(30, 41, 59, 0.98) 20%);
}
.toast.warning {
border-left-color: #f59e0b;
background: linear-gradient(135deg,
rgba(245, 158, 11, 0.1) 0%,
rgba(255, 255, 255, 0.98) 20%);
}
.dark-mode .toast.warning {
background: linear-gradient(135deg,
rgba(245, 158, 11, 0.2) 0%,
rgba(30, 41, 59, 0.98) 20%);
}
.toast.info {
border-left-color: #3b82f6;
background: linear-gradient(135deg,
rgba(59, 130, 246, 0.1) 0%,
rgba(255, 255, 255, 0.98) 20%);
}
.dark-mode .toast.info {
background: linear-gradient(135deg,
rgba(59, 130, 246, 0.2) 0%,
rgba(30, 41, 59, 0.98) 20%);
}
.toast-icon-container {
width: 48px;
height: 48px;
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.4rem;
flex-shrink: 0;
position: relative;
overflow: hidden;
animation: toastIconPulse 2s ease-in-out infinite;
}
.toast.success .toast-icon-container {
background: linear-gradient(135deg, #10b981, #059669);
color: white;
box-shadow: 0 8px 16px rgba(16, 185, 129, 0.3);
}
.toast.error .toast-icon-container {
background: linear-gradient(135deg, #ef4444, #dc2626);
color: white;
box-shadow: 0 8px 16px rgba(239, 68, 68, 0.3);
}
.toast.warning .toast-icon-container {
background: linear-gradient(135deg, #f59e0b, #d97706);
color: white;
box-shadow: 0 8px 16px rgba(245, 158, 11, 0.3);
}
.toast.info .toast-icon-container {
background: linear-gradient(135deg, #3b82f6, #2563eb);
color: white;
box-shadow: 0 8px 16px rgba(59, 130, 246, 0.3);
}
.toast-content {
flex: 1;
display: flex;
flex-direction: column;
gap: 4px;
}
.toast-title {
font-weight: 700;
font-size: 1rem;
color: var(--text);
margin: 0;
}
.toast-message {
font-weight: 500;
font-size: 0.9rem;
color: var(--text-light);
margin: 0;
line-height: 1.4;
}
.toast-close {
width: 32px;
height: 32px;
border: none;
background: rgba(0, 0, 0, 0.1);
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.2s ease;
font-size: 1rem;
color: var(--text-light);
flex-shrink: 0;
}
.toast-close:hover {
background: rgba(0, 0, 0, 0.2);
transform: scale(1.1);
}
.dark-mode .toast-close {
background: rgba(255, 255, 255, 0.1);
}
.dark-mode .toast-close:hover {
background: rgba(255, 255, 255, 0.2);
}
.toast-progress {
position: absolute;
bottom: 0;
left: 0;
height: 4px;
background: rgba(0, 0, 0, 0.1);
border-radius: 0 0 20px 20px;
transition: width 0.1s linear;
}
.toast.success .toast-progress {
background: linear-gradient(90deg, #10b981, #059669);
}
.toast.error .toast-progress {
background: linear-gradient(90deg, #ef4444, #dc2626);
}
.toast.warning .toast-progress {
background: linear-gradient(90deg, #f59e0b, #d97706);
}
.toast.info .toast-progress {
background: linear-gradient(90deg, #3b82f6, #2563eb);
}
.toast::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background:
radial-gradient(circle at 20% 20%, rgba(255, 255, 255, 0.3) 2px, transparent 2px),
radial-gradient(circle at 80% 20%, rgba(255, 255, 255, 0.3) 2px, transparent 2px),
radial-gradient(circle at 20% 80%, rgba(255, 255, 255, 0.3) 2px, transparent 2px),
radial-gradient(circle at 80% 80%, rgba(255, 255, 255, 0.3) 2px, transparent 2px);
background-size: 40px 40px;
pointer-events: none;
opacity: 0.6;
animation: floatingParticles 10s linear infinite;
}
.confirm-dialog {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.7);
backdrop-filter: blur(12px);
z-index: 10002;
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
visibility: hidden;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
padding: 20px;
}
.confirm-dialog.show {
opacity: 1;
visibility: visible;
}
.confirm-dialog-content {
background: rgba(255, 255, 255, 0.98);
backdrop-filter: blur(20px);
border-radius: 24px;
padding: 40px;
max-width: 480px;
width: 100%;
box-shadow:
0 40px 80px rgba(0, 0, 0, 0.2),
0 20px 40px rgba(0, 0, 0, 0.15);
transform: scale(0.8) translateY(30px);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
}
.dark-mode .confirm-dialog-content {
background: rgba(30, 41, 59, 0.98);
color: #f1f5f9;
}
.confirm-dialog.show .confirm-dialog-content {
transform: scale(1) translateY(0);
}
.confirm-dialog-icon {
width: 80px;
height: 80px;
border-radius: 20px;
background: linear-gradient(135deg, #ef4444, #dc2626);
color: white;
display: flex;
align-items: center;
justify-content: center;
font-size: 2rem;
margin: 0 auto 24px;
animation: confirmIconPulse 2s ease-in-out infinite;
box-shadow: 0 12px 24px rgba(239, 68, 68, 0.3);
}
.confirm-dialog-title {
font-size: 1.5rem;
font-weight: 700;
color: var(--text);
text-align: center;
margin-bottom: 16px;
font-family: var(--font-comfortaa);
}
.confirm-dialog-message {
font-size: 1rem;
color: var(--text-light);
text-align: center;
margin-bottom: 32px;
line-height: 1.6;
}
.confirm-dialog-buttons {
display: flex;
gap: 16px;
justify-content: center;
}
.confirm-btn {
padding: 16px 32px;
border: none;
border-radius: 16px;
font-weight: 700;
font-size: 1rem;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
min-width: 120px;
position: relative;
overflow: hidden;
}
.confirm-btn-cancel {
background: linear-gradient(135deg, #e5e7eb, #d1d5db);
color: #374151;
box-shadow: 0 8px 16px rgba(209, 213, 219, 0.4);
}
.confirm-btn-confirm {
background: linear-gradient(135deg, #ef4444, #dc2626);
color: white;
box-shadow: 0 8px 16px rgba(239, 68, 68, 0.4);
}
.confirm-btn:hover {
transform: translateY(-2px) scale(1.02);
}
.confirm-btn-cancel:hover {
box-shadow: 0 12px 24px rgba(209, 213, 219, 0.6);
}
.confirm-btn-confirm:hover {
box-shadow: 0 12px 24px rgba(239, 68, 68, 0.6);
}
.confirm-btn:active {
transform: scale(0.98);
}
.loading-dialog {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.8);
backdrop-filter: blur(15px);
z-index: 10003;
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
visibility: hidden;
transition: all 0.3s ease;
}
.loading-dialog.show {
opacity: 1;
visibility: visible;
}
.loading-dialog-content {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(20px);
border-radius: 20px;
padding: 40px;
text-align: center;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2);
transform: scale(0.9);
transition: all 0.3s ease;
min-width: 280px;
}
.dark-mode .loading-dialog-content {
background: rgba(30, 41, 59, 0.95);
color: #f1f5f9;
}
.loading-dialog.show .loading-dialog-content {
transform: scale(1);
}
.loading-spinner {
width: 60px;
height: 60px;
border: 4px solid rgba(99, 102, 241, 0.2);
border-left-color: #6366f1;
border-radius: 50%;
animation: loadingSpinner 1s linear infinite;
margin: 0 auto 20px;
}
.loading-message {
font-size: 1.1rem;
font-weight: 600;
color: var(--text);
}
@keyframes toastIconPulse {
0%, 100% {
transform: scale(1);
box-shadow: 0 8px 16px rgba(16, 185, 129, 0.3);
}
50% {
transform: scale(1.05);
box-shadow: 0 12px 24px rgba(16, 185, 129, 0.5);
}
}
@keyframes confirmIconPulse {
0%, 100% {
transform: scale(1);
box-shadow: 0 12px 24px rgba(239, 68, 68, 0.3);
}
50% {
transform: scale(1.1);
box-shadow: 0 16px 32px rgba(239, 68, 68, 0.5);
}
}
@keyframes floatingParticles {
0% {
transform: translateY(0) rotate(0deg);
}
100% {
transform: translateY(-20px) rotate(360deg);
}
}
@keyframes loadingSpinner {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@media (max-width: 768px) {
.toast {
bottom: 80px;
right: 10px;
left: 10px;
max-width: none;
min-width: auto;
padding: 16px 20px;
border-radius: 16px;
}
.toast-icon-container {
width: 40px;
height: 40px;
font-size: 1.2rem;
}
.confirm-dialog-content {
padding: 30px 24px;
margin: 20px;
border-radius: 20px;
}
.confirm-dialog-icon {
width: 64px;
height: 64px;
font-size: 1.6rem;
}
.confirm-dialog-buttons {
flex-direction: column;
}
.confirm-btn {
width: 100%;
padding: 14px 24px;
}
.loading-dialog-content {
margin: 20px;
padding: 30px 24px;
}
}
.toast-container {
position: fixed;
bottom: 100px;
right: 20px;
z-index: 10001;
display: flex;
flex-direction: column-reverse;
gap: 12px;
pointer-events: none;
}
.toast-container .toast {
pointer-events: all;
position: relative;
right: auto;
bottom: auto;
}
@media (max-width: 768px) {
.toast-container {
bottom: 80px;
right: 10px;
left: 10px;
}
}
.code-editor-btn.loading {
pointer-events: none;
position: relative;
color: transparent !important;
}
#voiceBtn {
background: linear-gradient(135deg, #667eea, #764ba2) !important;
color: white !important;
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4) !important;
}
#voiceBtn:hover {
transform: translateY(-2px) scale(1.05) !important;
box-shadow: 0 6px 20px rgba(102, 126, 234, 0.6) !important;
}
#voiceBtn i {
font-size: 1.4rem !important;
color: white !important;
font-family: "Font Awesome 6 Free" !important;
font-weight: 900 !important;
}
#voiceBtn span {
color: white !important;
font-weight: 600 !important;
}
.code-editor-btn.loading::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 16px;
height: 16px;
border: 2px solid rgba(255, 255, 255, 0.3);
border-top: 2px solid white;
border-radius: 50%;
animation: buttonSpin 1s linear infinite;
}
@keyframes buttonSpin {
0% { transform: translate(-50%, -50%) rotate(0deg); }
100% { transform: translate(-50%, -50%) rotate(360deg); }
}
.code-editor-btn::after {
content: '';
position: absolute;
top: -2px;
left: -2px;
right: -2px;
bottom: -2px;
background: linear-gradient(45deg,
rgba(255, 255, 255, 0.1) 0%,
rgba(255, 255, 255, 0.3) 50%,
rgba(255, 255, 255, 0.1) 100%);
border-radius: 14px;
z-index: -1;
opacity: 0;
transition: opacity 0.3s ease;
}
.code-editor-btn:hover::after {
opacity: 1;
}
.code-editor {
background: var(--card);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
margin: 0; overflow: hidden;
box-shadow: var(--shadow);
transition: all 0.3s ease;
width: 100% !important; max-width: 100% !important;
box-sizing: border-box;
}
.code-editor:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-md);
}
.code-editor-actions {
display: flex;
gap: 8px;
position: relative;
z-index: 15;
}
.code-editor-btn {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.1)) !important;
border: 2px solid rgba(255, 255, 255, 0.3) !important;
color: #ffffff !important;
padding: 8px 12px !important;
border-radius: 8px !important;
cursor: pointer !important;
font-size: 0.8rem !important;
font-weight: 600 !important;
transition: all 0.2s ease !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
gap: 6px !important;
min-height: 32px !important;
min-width: 70px !important;
position: relative !important;
overflow: hidden !important;
z-index: 20 !important;
backdrop-filter: blur(10px) !important;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15) !important;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3) !important;
}
.code-editor-btn i {
font-size: 0.9rem !important;
color: #ffffff !important;
filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3)) !important;
display: inline-block !important;
width: auto !important;
height: auto !important;
}
.code-editor-btn span {
color: #ffffff !important;
font-size: 0.75rem !important;
font-weight: 600 !important;
text-transform: uppercase !important;
letter-spacing: 0.5px !important;
}
.code-editor-btn:hover {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.2)) !important;
border-color: rgba(255, 255, 255, 0.5) !important;
transform: translateY(-1px) scale(1.05) !important;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.25) !important;
}
.code-editor-btn.copy-btn:hover {
background: linear-gradient(135deg, #10b981, #059669) !important;
border-color: #10b981 !important;
box-shadow: 0 4px 15px rgba(16, 185, 129, 0.4) !important;
}
.code-editor-btn.download-btn:hover {
background: linear-gradient(135deg, #3b82f6, #2563eb) !important;
border-color: #3b82f6 !important;
box-shadow: 0 4px 15px rgba(59, 130, 246, 0.4) !important;
}
.code-editor-btn:active {
transform: translateY(0) scale(0.98) !important;
}
.code-editor-btn.success-state {
background: linear-gradient(135deg, #10b981, #059669) !important;
border-color: #10b981 !important;
animation: successPulse 0.6s ease-out !important;
}
@keyframes successPulse {
0% {
transform: scale(1);
box-shadow: 0 4px 15px rgba(16, 185, 129, 0.4);
}
50% {
transform: scale(1.1);
box-shadow: 0 8px 25px rgba(16, 185, 129, 0.6);
}
100% {
transform: scale(1);
box-shadow: 0 4px 15px rgba(16, 185, 129, 0.4);
}
}
.code-editor-content {
position: relative;
width: 100% !important;
box-sizing: border-box;
margin: 0;
padding: 0;
}
.fallback-code-block {
margin: 0 !important;
padding: 20px !important;
background: #f8fafc;
color: #334155;
font-family: 'Courier New', monospace !important;
font-size: 0.9rem;
line-height: 1.5 !important;
overflow: auto;
-webkit-overflow-scrolling: touch;
white-space: pre !important;
word-wrap: break-word;
border: none;
width: 100% !important;
box-sizing: border-box !important;
min-height: 60px !important;
height: auto !important;
max-height: none !important; resize: none !important;
display: block !important;
}
.dark-mode .fallback-code-block {
background: #1e293b;
color: #e2e8f0;
}
.message-bubble .code-editor {
margin: 12px 0 !important; }
.message-bubble .code-editor:first-child {
margin-top: 0 !important;
}
.message-bubble .code-editor:last-child {
margin-bottom: 0 !important;
}
@media (max-width: 768px) {
.code-editor-btn {
padding: 6px 10px !important;
font-size: 0.75rem !important;
min-width: 60px !important;
min-height: 30px !important;
gap: 4px !important;
}
.code-editor-btn i {
font-size: 0.8rem !important;
}
.code-editor-btn span {
font-size: 0.7rem !important;
}
.code-editor-actions {
gap: 6px;
}
.fallback-code-block {
font-size: 0.8rem !important;
padding: 15px !important;
line-height: 1.4 !important;
}
}
.fas, .far, .fab {
font-family: "Font Awesome 6 Free" !important;
font-weight: 900 !important;
}
.fas.fa-copy::before {
content: "\f0c5" !important;
}
.fas.fa-download::before {
content: "\f019" !important;
}
.fas.fa-check::before {
content: "\f00c" !important;
}
.message-bubble {
max-width: 99% !important;
width: 99% !important;
min-width: 200px;
padding: 16px 20px;
border-radius: var(--radius-lg);
line-height: 1.6;
word-wrap: break-word;
position: relative;
box-shadow: var(--shadow-sm);
font-size: 0.95rem;
touch-action: auto !important;
overflow: visible !important;
transition: all 0.2s ease;
}
.message-bubble .code-editor {
width: 98% !important;
max-width: 98% !important;
margin: 12px auto !important;
box-sizing: border-box !important;
}
.code-editor {
background: var(--card);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
margin: 0;
overflow: hidden;
box-shadow: var(--shadow);
transition: all 0.3s ease;
width: 100% !important;
max-width: 100% !important;
box-sizing: border-box;
}
.code-editor-content {
position: relative;
width: 100% !important;
box-sizing: border-box;
margin: 0;
padding: 0;
overflow: hidden;
}
.fallback-code-block {
margin: 0 !important;
padding: 20px !important;
background: #f8fafc;
color: #334155;
font-family: 'Courier New', monospace !important;
font-size: 0.9rem;
line-height: 1.5 !important;
overflow: auto !important;
overflow-x: auto !important;
overflow-y: auto !important;
-webkit-overflow-scrolling: touch !important;
overscroll-behavior: contain !important;
touch-action: auto !important;
scroll-behavior: smooth !important;
white-space: pre !important;
word-wrap: normal !important;
border: none;
width: 100% !important;
box-sizing: border-box !important;
min-height: 60px !important;
height: auto !important;
max-height: 350px !important;
resize: none !important;
display: block !important;
scrollbar-width: thin;
scrollbar-color: var(--primary) rgba(0,0,0,0.1);
}
.fallback-code-block::-webkit-scrollbar {
width: 6px !important;
height: 6px !important;
}
.fallback-code-block::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.05) !important;
border-radius: 3px !important;
}
.fallback-code-block::-webkit-scrollbar-thumb {
background: linear-gradient(135deg, var(--primary), var(--secondary)) !important;
border-radius: 3px !important;
border: 1px solid rgba(255, 255, 255, 0.3) !important;
}
.fallback-code-block::-webkit-scrollbar-thumb:hover {
background: linear-gradient(135deg, var(--primary-dark), var(--secondary)) !important;
}
.chat-messages {
flex: 1;
overflow-y: auto !important;
overflow-x: hidden !important;
padding: 16px 12px;
padding-bottom: 160px;
-webkit-overflow-scrolling: touch !important;
overscroll-behavior: contain !important;
touch-action: pan-y !important;
scroll-behavior: smooth !important;
height: calc(100vh - 140px) !important;
max-height: calc(100dvh - 140px) !important;
scroll-padding-bottom: 20px;
}
.message-bubble {
will-change: auto;
contain: layout style;
}
.thinking-indicator {
display: flex;
align-items: center;
gap: 12px;
padding: 16px;
background: var(--card);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
margin: 12px 0;
max-width: 200px;
box-shadow: var(--shadow-sm);
position: relative;
z-index: 1;
}
/* ========================================
4. MOBILE RESPONSIVE FIXES
======================================== */
@media (max-width: 480px) {
.simple-voice-modal {
padding: 5px;
align-items: flex-start;
padding-top: max(20px, env(safe-area-inset-top));
padding-bottom: max(20px, env(safe-area-inset-bottom));
touch-action: pan-y !important;
overscroll-behavior-x: none !important;
}
.voice-card {
padding: 20px;
margin: 5px;
border-radius: 25px;
max-height: calc(100vh - 40px);
max-height: calc(100dvh - 40px);
touch-action: pan-y !important;
overscroll-behavior-x: none !important;
}
.math-container {
padding: 8px 12px;
margin: 8px 0;
max-width: 100%;
overflow-x: auto !important;
}
.chat-messages {
height: calc(100vh - 120px) !important;
max-height: calc(100dvh - 120px) !important;
padding: 12px 8px;
padding-bottom: 150px;
}
}
.chat-messages::-webkit-scrollbar {
width: 4px !important;
background: transparent !important;
}
.chat-messages::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.03) !important;
border-radius: 2px !important;
}
.chat-messages::-webkit-scrollbar-thumb {
background: linear-gradient(135deg, var(--primary), var(--secondary)) !important;
border-radius: 2px !important;
border: 1px solid rgba(255, 255, 255, 0.2) !important;
}
.chat-messages::-webkit-scrollbar-thumb:hover {
background: linear-gradient(135deg, var(--primary-dark), var(--secondary)) !important;
}
.inline-code {
background: rgba(100, 116, 139, 0.1);
color: #475569;
padding: 3px 8px;
border-radius: 6px;
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
font-size: 0.9em;
font-weight: 500;
border: 1px solid rgba(100, 116, 139, 0.15);
display: inline-block;
max-width: calc(100% - 8px);
min-width: 0;
box-sizing: border-box;
white-space: nowrap;
overflow-x: auto;
overflow-y: hidden;
margin: 0 2px;
transition: background-color 0.2s ease;
scrollbar-width: thin;
scrollbar-color: rgba(100, 116, 139, 0.4) transparent;
}
.inline-code::-webkit-scrollbar {
height: 3px;
}
.inline-code::-webkit-scrollbar-track {
background: transparent;
}
.inline-code::-webkit-scrollbar-thumb {
background: rgba(100, 116, 139, 0.4);
border-radius: 2px;
}
.inline-code::-webkit-scrollbar-thumb:hover {
background: rgba(100, 116, 139, 0.6);
}
.inline-code:hover {
background: rgba(100, 116, 139, 0.15);
border-color: rgba(100, 116, 139, 0.25);
}
.dark-mode .inline-code {
background: rgba(148, 163, 184, 0.15);
color: #cbd5e1;
border-color: rgba(148, 163, 184, 0.2);
scrollbar-color: rgba(148, 163, 184, 0.4) transparent;
}
.dark-mode .inline-code::-webkit-scrollbar-thumb {
background: rgba(148, 163, 184, 0.4);
}
.dark-mode .inline-code::-webkit-scrollbar-thumb:hover {
background: rgba(148, 163, 184, 0.6);
}
.dark-mode .inline-code:hover {
background: rgba(148, 163, 184, 0.2);
border-color: rgba(148, 163, 184, 0.3);
}
.inline-code.has-overflow::after {
opacity: 0.6 !important;
animation: scrollHint 2s ease-in-out infinite;
}
@keyframes scrollHint {
0%, 100% {
opacity: 0.6;
transform: translateY(-50%) scale(1);
}
50% {
opacity: 1;
transform: translateY(-50%) scale(1.2);
}
}
.inline-code.has-overflow:hover::after {
opacity: 0 !important;
animation: none;
}
@media (max-width: 768px) {
.inline-code {
font-size: 0.85em;
padding: 2px 6px;
margin: 0 1px;
max-width: calc(100% - 4px);
}
.inline-code::-webkit-scrollbar {
height: 2px;
}
}
.inline-code::before {
display: none; }
.inline-code::after {
display: none; }
.message-bubble .inline-code {
max-width: calc(100% - 12px) !important;
}
@media (max-width: 768px) {
.message-bubble {
max-width: 99% !important;
width: 99% !important;
padding: 14px 16px;
font-size: 0.9rem;
}
.message-bubble .code-editor {
width: 97% !important;
max-width: 97% !important;
margin: 10px auto !important;
}
.fallback-code-block {
max-height: 300px !important;
font-size: 0.8rem !important;
padding: 15px !important;
line-height: 1.4 !important;
}
.chat-messages {
height: calc(100vh - 120px) !important;
max-height: calc(100dvh - 120px) !important;
padding: 12px 8px;
padding-bottom: 150px;
}
.fallback-code-block::-webkit-scrollbar {
width: 4px !important;
height: 4px !important;
}
.chat-messages::-webkit-scrollbar {
width: 3px !important;
}
}
.message-row.user .message-bubble {
background: linear-gradient(135deg, #ad1457 0%, #0e7490 100%) !important;
}
.data-detail-container {
padding: 20px;
max-width: 600px;
margin: 0 auto;
}
.detail-header-card {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 20px;
padding: 30px;
display: flex;
align-items: center;
gap: 20px;
color: white;
margin-bottom: 25px;
box-shadow: 0 10px 30px rgba(102, 126, 234, 0.3);
}
.detail-avatar {
width: 80px;
height: 80px;
background: rgba(255, 255, 255, 0.2);
border-radius: 20px;
display: flex;
align-items: center;
justify-content: center;
font-size: 3rem;
backdrop-filter: blur(10px);
border: 3px solid rgba(255, 255, 255, 0.3);
}
.detail-header-info {
flex: 1;
}
.detail-name {
font-size: 1.5rem;
font-weight: 700;
margin: 0 0 5px 0;
color: white;
}
.detail-nik {
font-size: 1rem;
margin: 0;
opacity: 0.9;
font-family: 'Courier New', monospace;
}
.detail-cards-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 15px;
margin-bottom: 25px;
}
.detail-mini-card {
background: white;
border: 2px solid #f1f5f9;
border-radius: 16px;
padding: 16px;
display: flex;
align-items: center;
gap: 12px;
transition: all 0.3s ease;
}
.detail-mini-card:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08);
border-color: #e2e8f0;
}
.mini-card-icon {
font-size: 1.5rem;
width: 40px;
height: 40px;
background: #f8fafc;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
}
.mini-card-content {
flex: 1;
display: flex;
flex-direction: column;
}
.mini-card-label {
font-size: 0.75rem;
color: #64748b;
font-weight: 600;
text-transform: uppercase;
}
.mini-card-value {
font-size: 0.95rem;
color: #1e293b;
font-weight: 600;
}
.detail-section {
margin-bottom: 25px;
}
.section-title {
font-size: 1.1rem;
font-weight: 700;
color: #334155;
margin: 0 0 15px 0;
display: flex;
align-items: center;
gap: 8px;
}
.address-card {
background: #f8fafc;
border: 2px solid #e2e8f0;
border-radius: 16px;
padding: 20px;
position: relative;
overflow: hidden;
}
.address-card::before {
content: '🏠';
position: absolute;
right: 20px;
top: 20px;
font-size: 2rem;
opacity: 0.1;
}
.address-line {
margin: 0;
line-height: 1.6;
}
.main-address {
font-size: 1.05rem;
font-weight: 600;
color: #1e293b;
margin-bottom: 8px;
}
.sub-address {
font-size: 0.9rem;
color: #64748b;
}
.info-pills {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.info-pill {
background: linear-gradient(135deg, #f1f5f9, #e2e8f0);
border: 1px solid #cbd5e1;
padding: 8px 16px;
border-radius: 20px;
font-size: 0.9rem;
font-weight: 600;
color: #475569;
display: inline-flex;
align-items: center;
gap: 6px;
}
.info-pill i {
font-size: 0.85rem;
color: #6366f1;
}
.detail-footer {
margin-top: 25px;
padding-top: 20px;
border-top: 2px solid #f1f5f9;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.85rem;
color: #64748b;
}
.timestamp {
display: flex;
align-items: center;
gap: 6px;
}
.result-count {
background: #6366f1;
color: white;
padding: 4px 12px;
border-radius: 12px;
font-weight: 600;
}
.dark-mode .detail-mini-card {
background: #334155;
border-color: #475569;
}
.dark-mode .mini-card-icon {
background: #1e293b;
}
.dark-mode .mini-card-value {
color: #f1f5f9;
}
.dark-mode .section-title {
color: #e2e8f0;
}
.dark-mode .address-card {
background: #1e293b;
border-color: #334155;
}
.dark-mode .main-address {
color: #f1f5f9;
}
.dark-mode .sub-address {
color: #94a3b8;
}
.dark-mode .info-pill {
background: linear-gradient(135deg, #334155, #475569);
border-color: #475569;
color: #e2e8f0;
}
.dark-mode .detail-footer {
border-top-color: #334155;
color: #94a3b8;
}
@media (max-width: 480px) {
.detail-header-card {
padding: 20px;
flex-direction: column;
text-align: center;
}
.detail-avatar {
width: 70px;
height: 70px;
font-size: 2.5rem;
}
.detail-name {
font-size: 1.3rem;
}
.detail-cards-grid {
grid-template-columns: 1fr;
}
.detail-footer {
flex-direction: column;
gap: 10px;
text-align: center;
}
}
@media (max-width: 768px) {
.message-bubble {
max-width: 99% !important;
width: 99% !important;
min-width: 150px; padding: 12px 14px; font-size: 0.9rem;
}
.message-row.bot .message-bubble {
margin-right: 0.5% !important; }
.message-row.user .message-bubble {
margin-left: 0.5% !important; }
.message-bubble .code-editor {
width: 99% !important; max-width: 99% !important;
margin: 10px auto !important;
}
}
@media (max-width: 768px) {
.chat-messages::-webkit-scrollbar {
width: 2px !important; background: transparent !important;
}
.chat-messages::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.02) !important;
border-radius: 1px !important;
}
.chat-messages::-webkit-scrollbar-thumb {
background: linear-gradient(135deg, var(--primary), var(--secondary)) !important;
border-radius: 1px !important;
min-height: 20px !important;
}
.fallback-code-block::-webkit-scrollbar {
width: 3px !important;
height: 3px !important;
}
.fallback-code-block::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.03) !important;
border-radius: 1.5px !important;
}
.fallback-code-block::-webkit-scrollbar-thumb {
background: linear-gradient(135deg, var(--primary), var(--secondary)) !important;
border-radius: 1.5px !important;
}
.sidebar-content::-webkit-scrollbar {
width: 2px !important;
}
.sidebar-content::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.02) !important;
border-radius: 1px !important;
}
.sidebar-content::-webkit-scrollbar-thumb {
background: var(--primary) !important;
border-radius: 1px !important;
}
}
@media (max-width: 480px) {
.message-bubble {
max-width: 99.5% !important;
width: 99.5% !important;
padding: 10px 12px;
font-size: 0.85rem;
}
.message-row.bot .message-bubble {
margin-right: 0.25% !important;
}
.message-row.user .message-bubble {
margin-left: 0.25% !important;
}
.chat-messages::-webkit-scrollbar {
width: 1px !important;
}
.fallback-code-block::-webkit-scrollbar {
width: 2px !important;
height: 2px !important;
}
}
#voiceBtn {
background: linear-gradient(135deg, #667eea, #764ba2) !important;
color: white !important;
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4) !important;
}
#voiceBtn:hover {
transform: translateY(-2px) scale(1.05) !important;
box-shadow: 0 6px 20px rgba(102, 126, 234, 0.6) !important;
}
#voiceBtn i {
font-size: 1.4rem !important;
}