Botathon / static /css /style.css
Jeetandar N Silwani
Initial commit
d6d292e
Raw
History Blame Contribute Delete
16.1 kB
/* MemoryBot - Full Theme CSS */
:root {
--bg-primary: #0a0a0f;
--bg-secondary: #12121a;
--bg-card: #1a1a28;
--bg-card-hover: #222236;
--bg-input: #16162a;
--border-primary: #2a2a40;
--border-focus: #8b5cf6;
--text-primary: #f0f0f5;
--text-secondary: #a0a0b8;
--text-muted: #6b6b88;
--accent-purple: #8b5cf6;
--accent-purple-hover: #7c3aed;
--accent-purple-light: rgba(139, 92, 246, 0.15);
--accent-pink: #ec4899;
--accent-blue: #3b82f6;
--accent-green: #10b981;
--accent-amber: #f59e0b;
--accent-red: #ef4444;
--gradient-primary: linear-gradient(135deg, #8b5cf6 0%, #ec4899 100%);
--gradient-card: linear-gradient(135deg, rgba(139,92,246,0.08) 0%, rgba(236,72,153,0.08) 100%);
--shadow-glow: 0 0 20px rgba(139, 92, 246, 0.15);
--shadow-card: 0 4px 24px rgba(0, 0, 0, 0.3);
}
* { box-sizing: border-box; }
html, body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
background: var(--bg-primary);
color: var(--text-primary);
margin: 0;
padding: 0;
height: 100%;
min-height: 100vh;
overflow-x: hidden;
}
/* Ensure the main layout container stretches properly */
.h-full {
height: 100%;
}
/* Sidebar nav layout fix */
.sidebar-nav {
flex: 1;
display: flex;
flex-direction: column;
gap: 6px;
padding: 24px 16px;
}
.sidebar-footer {
padding: 16px;
border-top: 1px solid var(--border-primary);
}
/* Scrollbar */
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: #333; border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: #555; }
.chat-scroll { scrollbar-width: thin; scrollbar-color: #333 transparent; }
/* Animations */
.fade-in { animation: fadeIn 0.3s ease-out; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
.slide-up { animation: slideUp 0.4s ease-out; }
@keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
.pulse { animation: pulse 2s infinite; }
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.typing-dot { animation: typing 1.4s infinite; }
.typing-dot:nth-child(2) { animation-delay: 0.2s; }
.typing-dot:nth-child(3) { animation-delay: 0.4s; }
@keyframes typing { 0%,60%,100% { opacity: 0.3; } 30% { opacity: 1; } }
/* Glow effects */
.glow-purple { box-shadow: 0 0 20px rgba(139, 92, 246, 0.3); }
.glow-pink { box-shadow: 0 0 20px rgba(236, 72, 153, 0.3); }
/* Buttons */
.btn-primary {
background: var(--gradient-primary);
color: white;
border: none;
padding: 10px 24px;
border-radius: 12px;
font-weight: 600;
font-size: 14px;
cursor: pointer;
transition: all 0.2s;
display: inline-flex;
align-items: center;
gap: 8px;
}
.btn-primary:hover {
transform: translateY(-1px);
box-shadow: 0 4px 20px rgba(139, 92, 246, 0.4);
}
.btn-primary:disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none;
}
.btn-secondary {
background: var(--bg-card);
color: var(--text-primary);
border: 1px solid var(--border-primary);
padding: 10px 24px;
border-radius: 12px;
font-weight: 500;
font-size: 14px;
cursor: pointer;
transition: all 0.2s;
display: inline-flex;
align-items: center;
gap: 8px;
}
.btn-secondary:hover {
background: var(--bg-card-hover);
border-color: var(--accent-purple);
}
.btn-danger {
background: rgba(239, 68, 68, 0.1);
color: #ef4444;
border: 1px solid rgba(239, 68, 68, 0.3);
padding: 10px 24px;
border-radius: 12px;
font-weight: 500;
font-size: 14px;
cursor: pointer;
transition: all 0.2s;
}
.btn-danger:hover {
background: rgba(239, 68, 68, 0.2);
border-color: #ef4444;
}
.btn-ghost {
background: transparent;
color: var(--text-secondary);
border: none;
padding: 8px 16px;
border-radius: 8px;
font-weight: 500;
font-size: 14px;
cursor: pointer;
transition: all 0.2s;
}
.btn-ghost:hover {
background: rgba(255,255,255,0.05);
color: var(--text-primary);
}
/* Inputs */
.input-field {
width: 100%;
padding: 12px 16px;
background: var(--bg-input);
border: 1px solid var(--border-primary);
border-radius: 12px;
color: var(--text-primary);
font-size: 14px;
transition: all 0.2s;
outline: none;
}
.input-field:focus {
border-color: var(--accent-purple);
box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.15);
}
.input-field::placeholder { color: var(--text-muted); }
.select-field {
width: 100%;
padding: 12px 16px;
background: var(--bg-input);
border: 1px solid var(--border-primary);
border-radius: 12px;
color: var(--text-primary);
font-size: 14px;
transition: all 0.2s;
outline: none;
appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%236b6b88' viewBox='0 0 16 16'%3E%3Cpath d='M8 11L3 6h10l-5 5z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 12px center;
}
.select-field:focus {
border-color: var(--accent-purple);
box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.15);
}
textarea.input-field { resize: vertical; min-height: 80px; }
/* Cards */
.card {
background: var(--bg-card);
border: 1px solid var(--border-primary);
border-radius: 16px;
padding: 24px;
transition: all 0.2s;
}
.card:hover {
border-color: rgba(139, 92, 246, 0.3);
box-shadow: var(--shadow-glow);
}
.card-gradient {
background: var(--gradient-card);
border: 1px solid var(--border-primary);
border-radius: 16px;
padding: 24px;
}
/* Stat cards */
.stat-card {
background: var(--bg-card);
border: 1px solid var(--border-primary);
border-radius: 16px;
padding: 20px;
position: relative;
overflow: hidden;
}
.stat-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
border-radius: 16px 16px 0 0;
}
.stat-card.purple::before { background: var(--gradient-primary); }
.stat-card.blue::before { background: linear-gradient(90deg, #3b82f6, #06b6d4); }
.stat-card.green::before { background: linear-gradient(90deg, #10b981, #34d399); }
.stat-card.amber::before { background: linear-gradient(90deg, #f59e0b, #fbbf24); }
.stat-card.pink::before { background: linear-gradient(90deg, #ec4899, #f472b6); }
/* Badges */
.badge {
display: inline-flex;
align-items: center;
padding: 4px 10px;
border-radius: 20px;
font-size: 12px;
font-weight: 600;
}
.badge-purple { background: rgba(139, 92, 246, 0.15); color: #a78bfa; }
.badge-pink { background: rgba(236, 72, 153, 0.15); color: #f472b6; }
.badge-blue { background: rgba(59, 130, 246, 0.15); color: #60a5fa; }
.badge-green { background: rgba(16, 185, 129, 0.15); color: #34d399; }
.badge-amber { background: rgba(245, 158, 11, 0.15); color: #fbbf24; }
.badge-red { background: rgba(239, 68, 68, 0.15); color: #f87171; }
/* Avatar */
.avatar {
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
font-weight: 700;
flex-shrink: 0;
}
.avatar-sm { width: 32px; height: 32px; font-size: 14px; }
.avatar-md { width: 40px; height: 40px; font-size: 16px; }
.avatar-lg { width: 56px; height: 56px; font-size: 22px; }
.avatar-xl { width: 72px; height: 72px; font-size: 28px; }
.avatar-purple { background: rgba(139, 92, 246, 0.2); color: #a78bfa; }
.avatar-pink { background: rgba(236, 72, 153, 0.2); color: #f472b6; }
/* File icon */
.file-icon {
width: 40px;
height: 40px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.file-icon.pdf { background: rgba(239, 68, 68, 0.15); color: #f87171; }
.file-icon.txt { background: rgba(59, 130, 246, 0.15); color: #60a5fa; }
.file-icon.doc { background: rgba(16, 185, 129, 0.15); color: #34d399; }
.file-icon.img { background: rgba(245, 158, 11, 0.15); color: #fbbf24; }
.file-icon.audio { background: rgba(236, 72, 153, 0.15); color: #f472b6; }
.file-icon.default { background: rgba(139, 92, 246, 0.15); color: #a78bfa; }
/* Upload zone */
.upload-zone {
border: 2px dashed var(--border-primary);
border-radius: 16px;
padding: 40px 24px;
text-align: center;
cursor: pointer;
transition: all 0.3s;
}
.upload-zone:hover, .upload-zone.drag-over {
border-color: var(--accent-purple);
background: rgba(139, 92, 246, 0.05);
box-shadow: 0 0 30px rgba(139, 92, 246, 0.1);
}
/* Progress bar */
.progress-bar {
background: rgba(255,255,255,0.05);
border-radius: 8px;
height: 6px;
overflow: hidden;
}
.progress-bar-fill {
height: 100%;
background: var(--gradient-primary);
border-radius: 8px;
transition: width 0.3s ease;
}
/* Chat bubbles */
.msg-user {
background: var(--gradient-primary);
color: white;
border-radius: 20px 20px 4px 20px;
padding: 12px 18px;
max-width: 75%;
}
.msg-assistant {
background: var(--bg-card);
border: 1px solid var(--border-primary);
color: var(--text-primary);
border-radius: 20px 20px 20px 4px;
padding: 12px 18px;
max-width: 75%;
}
/* Prose styles for chat markdown */
.prose { line-height: 1.7; color: var(--text-primary); }
.prose p { margin-bottom: 0.75em; }
.prose p:last-child { margin-bottom: 0; }
.prose ul, .prose ol { margin: 0.5em 0; padding-left: 1.5em; }
.prose li { margin: 0.25em 0; }
.prose strong { font-weight: 600; color: var(--accent-purple); }
.prose em { font-style: italic; color: var(--text-secondary); }
.prose code {
background: rgba(139, 92, 246, 0.1);
padding: 0.15em 0.4em;
border-radius: 0.25em;
font-size: 0.875em;
color: #a78bfa;
}
.prose pre {
background: var(--bg-primary);
color: #e5e7eb;
padding: 1em;
border-radius: 0.5em;
overflow-x: auto;
margin: 0.75em 0;
border: 1px solid var(--border-primary);
}
.prose pre code { background: none; padding: 0; color: inherit; }
.prose blockquote {
border-left: 3px solid var(--accent-purple);
padding-left: 1em;
color: var(--text-secondary);
margin: 0.75em 0;
}
.prose h1, .prose h2, .prose h3 { font-weight: 600; margin: 1em 0 0.5em; }
.prose h1 { font-size: 1.25em; }
.prose h2 { font-size: 1.125em; }
.prose h3 { font-size: 1em; }
/* Line clamp */
.line-clamp-2 {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.line-clamp-3 {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
/* Modal overlay */
.modal-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.7);
backdrop-filter: blur(4px);
display: flex;
align-items: center;
justify-content: center;
z-index: 50;
}
/* Voice button */
.voice-btn {
width: 44px;
height: 44px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.2s;
border: none;
background: var(--bg-card);
color: var(--text-secondary);
border: 1px solid var(--border-primary);
}
.voice-btn:hover { background: var(--bg-card-hover); color: var(--text-primary); }
.voice-btn.active { background: rgba(139, 92, 246, 0.2); color: var(--accent-purple); border-color: var(--accent-purple); }
.voice-btn.recording { background: rgba(239, 68, 68, 0.2); color: #ef4444; border-color: #ef4444; animation: pulse 1s infinite; }
/* Send button */
.send-btn {
width: 44px;
height: 44px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.2s;
border: none;
background: var(--gradient-primary);
color: white;
flex-shrink: 0;
}
.send-btn:hover { transform: scale(1.05); box-shadow: 0 4px 20px rgba(139, 92, 246, 0.4); }
.send-btn:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }
/* Mic button */
.mic-btn {
width: 44px;
height: 44px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.2s;
border: none;
background: var(--bg-card);
color: var(--text-secondary);
border: 1px solid var(--border-primary);
flex-shrink: 0;
}
.mic-btn:hover { background: var(--bg-card-hover); color: var(--text-primary); }
.mic-btn.recording { background: rgba(239, 68, 68, 0.2); color: #ef4444; border-color: #ef4444; animation: pulse 1s infinite; }
/* Table */
.data-table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
}
.data-table th {
text-align: left;
padding: 12px 16px;
font-size: 12px;
font-weight: 600;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
border-bottom: 1px solid var(--border-primary);
}
.data-table td {
padding: 12px 16px;
font-size: 14px;
color: var(--text-secondary);
border-bottom: 1px solid rgba(42, 42, 64, 0.5);
}
.data-table tr:hover td {
background: rgba(139, 92, 246, 0.03);
}
/* Empty state */
.empty-state {
text-align: center;
padding: 48px 24px;
}
.empty-state-icon {
width: 64px;
height: 64px;
border-radius: 50%;
background: rgba(139, 92, 246, 0.1);
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 16px;
}
/* Divider */
.divider {
height: 1px;
background: var(--border-primary);
margin: 16px 0;
}
/* Toast / Alert */
.alert-error {
background: rgba(239, 68, 68, 0.1);
border: 1px solid rgba(239, 68, 68, 0.3);
color: #f87171;
border-radius: 12px;
padding: 12px 16px;
font-size: 14px;
}
.alert-warning {
background: rgba(245, 158, 11, 0.1);
border: 1px solid rgba(245, 158, 11, 0.3);
color: #fbbf24;
border-radius: 12px;
padding: 12px 16px;
font-size: 14px;
}
.alert-success {
background: rgba(16, 185, 129, 0.1);
border: 1px solid rgba(16, 185, 129, 0.3);
color: #34d399;
border-radius: 12px;
padding: 12px 16px;
font-size: 14px;
}
/* Responsive sidebar */
@media (max-width: 768px) {
.sidebar { transform: translateX(-100%); }
.sidebar.open { transform: translateX(0); }
.main-content { margin-left: 0 !important; }
}
/* Utility classes (replacing missing Tailwind CSS) */
.hidden { display: none !important; }
.flex { display: flex; }
.flex-col { flex-direction: column; }
.flex-1 { flex: 1; }
.flex-shrink-0 { flex-shrink: 0; }
.items-center { align-items: center; }
.justify-between { justify-content: space-between; }
.justify-center { justify-content: center; }
.min-h-full { min-height: 100%; }
.min-w-0 { min-width: 0; }
.truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ml-64 { margin-left: 256px; }
.w-64 { width: 256px; }
.z-30 { z-index: 30; }
.gap-3 { gap: 12px; }
.no-underline { text-decoration: none; }
.p-4 { padding: 16px; }
.p-6 { padding: 24px; }
.px-4 { padding-left: 16px; padding-right: 16px; }
.px-5 { padding-left: 20px; padding-right: 20px; }
.py-2 { padding-top: 8px; padding-bottom: 8px; }
.py-2\.5 { padding-top: 10px; padding-bottom: 10px; }
.py-3 { padding-top: 12px; padding-bottom: 12px; }
.rounded-xl { border-radius: 12px; }
.text-decoration-none { text-decoration: none; }
.fixed { position: fixed; }
.left-0 { left: 0; }
.top-0 { top: 0; }
.h-full { height: 100%; }
.w-full { width: 100%; }
.text-center { text-align: center; }
.overflow-hidden { overflow: hidden; }
.overflow-y-auto { overflow-y: auto; }
.overflow-x-auto { overflow-x: auto; }
.grid { display: grid; }
.block { display: block; }
.inline-flex { display: inline-flex; }
.relative { position: relative; }
.absolute { position: absolute; }
.inset-0 { top: 0; right: 0; bottom: 0; left: 0; }
.opacity-0 { opacity: 0; }
.min-h-screen { min-height: 100vh; }