Spaces:
Running
Running
Komalpreet Kaur
feat: implement memory consolidation service with sleep cycle, add frontend visualization components, and integrate backend database orchestration.
2e9dd8e unverified | @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Outfit:wght@500;600;700;800&family=Space+Mono:wght@400;700&display=swap'); | |
| :root { | |
| --bg-app: #e5e5e5; | |
| --bg-sidebar: #f0f0f0; | |
| --bg-card: rgba(255, 255, 255, 0.7); | |
| --primary: #2d2d2d; | |
| --secondary: #ff6b35; | |
| --accent: #ff6b35; | |
| --text-main: #2d2d2d; | |
| --text-muted: #666666; | |
| --text-light: #999999; | |
| --border-card: 1px solid rgba(0, 0, 0, 0.05); | |
| --radius-lg: 32px; | |
| --radius-md: 20px; | |
| --radius-sm: 12px; | |
| --shadow-premium: 0 20px 40px rgba(0, 0, 0, 0.05); | |
| --font-body: 'Inter', sans-serif; | |
| --font-display: 'Outfit', sans-serif; | |
| } | |
| * { | |
| box-sizing: border-box; | |
| margin: 0; | |
| padding: 0; | |
| -webkit-font-smoothing: antialiased; | |
| } | |
| html, | |
| body, | |
| #root { | |
| min-height: 100%; | |
| } | |
| body { | |
| font-family: var(--font-body); | |
| background: | |
| radial-gradient(circle at top left, rgba(255, 255, 255, 0.9), transparent 50%), | |
| radial-gradient(circle at bottom right, rgba(255, 107, 53, 0.08), transparent 50%), | |
| #f2f2f2; | |
| color: var(--text-main); | |
| overflow: hidden; | |
| } | |
| button, | |
| input, | |
| textarea { | |
| font: inherit; | |
| } | |
| button { | |
| border: 0; | |
| background: none; | |
| cursor: pointer; | |
| } | |
| img { | |
| display: block; | |
| max-width: 100%; | |
| } | |
| .material-icons { | |
| font-family: 'Material Icons'; | |
| font-weight: normal; | |
| font-style: normal; | |
| font-size: 24px; | |
| line-height: 1; | |
| letter-spacing: normal; | |
| text-transform: none; | |
| display: inline-block; | |
| white-space: nowrap; | |
| word-wrap: normal; | |
| direction: ltr; | |
| -webkit-font-feature-settings: 'liga'; | |
| } | |
| /* ── SOMA Premium Glassmorphic Dark Theme ── */ | |
| body.dark-theme { | |
| --bg-app: #000000; | |
| --bg-sidebar: #050505; | |
| --bg-card: rgba(18, 18, 18, 0.75); | |
| --primary: #f8fafc; | |
| --secondary: #ff7d4d; | |
| --accent: #ff7d4d; | |
| --text-main: #f8fafc; | |
| --text-muted: #a3a3a3; /* Neutral light grey, no blue/slate tint */ | |
| --text-light: #737373; /* Neutral dark grey, no blue/slate tint */ | |
| --border-card: 1px solid rgba(255, 255, 255, 0.06); | |
| --shadow-premium: 0 40px 100px rgba(0, 0, 0, 0.6); | |
| background: | |
| radial-gradient(circle at top left, rgba(255, 107, 53, 0.04), transparent 50%), | |
| radial-gradient(circle at bottom right, rgba(255, 255, 255, 0.015), transparent 50%), | |
| #000000; | |
| color: var(--text-main); | |
| } | |
| /* Header & Sidebar Titles */ | |
| body.dark-theme .page-header h2 { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .brand-copy h1 { | |
| color: #f8fafc ; | |
| } | |
| /* Brain Ambient Node Labels Contrast Correction */ | |
| body.dark-theme .signal-copy strong { | |
| color: #e2e8f0 ; | |
| text-shadow: 0 2px 4px rgba(0,0,0,0.5); | |
| } | |
| body.dark-theme .signal-node { | |
| opacity: 0.38 ; /* Raised from 0.2 to prevent faintness */ | |
| } | |
| body.dark-theme .signal-node.active, | |
| body.dark-theme .signal-node.hot { | |
| opacity: 1 ; | |
| } | |
| body.dark-theme .signal-dot { | |
| background-color: #475569 ; | |
| } | |
| /* Timeline & Feed Overrides */ | |
| body.dark-theme .phase-title { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .phase-desc { | |
| color: #a3a3a3 ; | |
| } | |
| body.dark-theme .timeline-row::before { | |
| background-color: rgba(255, 255, 255, 0.06) ; | |
| } | |
| body.dark-theme .timeline-dot { | |
| box-shadow: 0 0 0 4px #050505 ; | |
| background-color: #ff6b35 ; /* Active accent node dot */ | |
| } | |
| body.dark-theme .timeline-empty { | |
| color: #737373 ; | |
| } | |
| /* Chat bubble dark mode overrides */ | |
| body.dark-theme .bubble-body { | |
| background-color: rgba(24, 24, 24, 0.75) ; /* Pure neutral dark-grey glass bubble, no navy blue */ | |
| color: #f8fafc ; | |
| border: 1px solid rgba(255, 255, 255, 0.04) ; | |
| box-shadow: 0 4px 20px rgba(0,0,0,0.2) ; | |
| } | |
| body.dark-theme .chat-bubble-group.user .bubble-body { | |
| background-color: rgba(28, 28, 28, 0.85) ; /* Elegant neutral deep charcoal, completely mud-free */ | |
| border: 1px solid rgba(255, 255, 255, 0.08) ; | |
| color: #f8fafc ; | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25) ; | |
| } | |
| body.dark-theme .bubble-text { | |
| color: #e5e5e5 ; | |
| } | |
| body.dark-theme .bubble-meta strong { | |
| color: #e5e5e5 ; | |
| } | |
| body.dark-theme .chat-bubble-group.soma .bubble-meta strong { | |
| color: #ff8b54 ; /* Elegant warm orange highlight for Soma in pure dark mode */ | |
| } | |
| /* Input elements dark mode overrides */ | |
| body.dark-theme .input-field-wrap { | |
| background-color: rgba(24, 24, 24, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.05) ; | |
| box-shadow: 0 4px 15px rgba(0,0,0,0.15) ; | |
| } | |
| body.dark-theme .input-field-wrap input { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .new-chat-btn { | |
| background-color: rgba(24, 24, 24, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.05) ; | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .new-chat-btn:hover { | |
| background-color: rgba(255, 107, 53, 0.1) ; | |
| color: #ff6b35 ; | |
| } | |
| body.dark-theme .suggested-starters button { | |
| background-color: rgba(24, 24, 24, 0.5) ; | |
| border: 1px solid rgba(255, 255, 255, 0.05) ; | |
| color: #e5e5e5 ; | |
| } | |
| body.dark-theme .suggested-starters button:hover { | |
| background-color: rgba(255, 107, 53, 0.1) ; | |
| color: #ff7d4d ; | |
| border-color: rgba(255, 107, 53, 0.3) ; | |
| } | |
| body.dark-theme .welcome-icon { | |
| background-color: rgba(24, 24, 24, 0.75) ; | |
| box-shadow: 0 10px 30px rgba(0,0,0,0.3) ; | |
| } | |
| body.dark-theme .welcome-icon span { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .welcome-state h3 { | |
| color: #f8fafc ; | |
| } | |
| /* Sidebar overrides */ | |
| body.dark-theme .session-card { | |
| background-color: rgba(18, 18, 18, 0.6) ; | |
| border: 1px solid rgba(255, 255, 255, 0.03) ; | |
| } | |
| body.dark-theme .session-avatar { | |
| border-color: rgba(255, 255, 255, 0.1) ; | |
| } | |
| body.dark-theme .session-copy strong { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .sidebar-link { | |
| color: var(--text-muted); | |
| } | |
| body.dark-theme .sidebar-link:hover { | |
| color: var(--text-main); | |
| background-color: rgba(255, 255, 255, 0.03); | |
| } | |
| body.dark-theme .sidebar-link.active { | |
| background-color: rgba(255, 255, 255, 0.03) ; | |
| } | |
| /* Memory & Dashboard dynamic panels */ | |
| body.dark-theme .dashboard-metric-card, | |
| body.dark-theme .memory-list-card, | |
| body.dark-theme .memory-detail-card, | |
| body.dark-theme .knowledge-card { | |
| background-color: rgba(18, 18, 18, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.04) ; | |
| } | |
| body.dark-theme .timeline-node { | |
| background-color: rgba(24, 24, 24, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.03) ; | |
| } | |
| body.dark-theme .sleep-telemetry-card { | |
| background-color: rgba(18, 18, 18, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.04) ; | |
| } | |
| body.dark-theme .summary-card-combined, | |
| body.dark-theme .summary-card-inline { | |
| background-color: rgba(18, 18, 18, 0.85) ; | |
| } | |
| body.dark-theme .telemetry-card-value { | |
| color: #f8fafc ; | |
| } | |
| /* Graph online indicator */ | |
| body.dark-theme .graph-container-glow { | |
| border-color: rgba(255, 255, 255, 0.04) ; | |
| } | |
| body.dark-theme .input-area-card { | |
| background-color: rgba(18, 18, 18, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.04) ; | |
| } | |
| body.dark-theme .text-input-field { | |
| background-color: rgba(24, 24, 24, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.05) ; | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .theme-toggle-btn { | |
| border-top-color: rgba(255, 255, 255, 0.08) ; | |
| } | |
| /* ── SOMA Memory Explorer Dark UI Overrides ── */ | |
| body.dark-theme .memory-surface { | |
| background: rgba(18, 18, 18, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.06) ; | |
| box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55) ; | |
| } | |
| body.dark-theme .memory-search-wrap { | |
| background-color: rgba(24, 24, 24, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.05) ; | |
| } | |
| body.dark-theme .memory-search-wrap input { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .filter-tabs { | |
| background-color: rgba(0, 0, 0, 0.2) ; | |
| } | |
| body.dark-theme .filter-tab { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .filter-tab.active { | |
| background-color: rgba(255, 255, 255, 0.08) ; | |
| color: #f8fafc ; | |
| box-shadow: 0 2px 8px rgba(0,0,0,0.3) ; | |
| } | |
| body.dark-theme .memory-row { | |
| color: #a3a3a3 ; | |
| } | |
| body.dark-theme .memory-row:hover { | |
| background-color: rgba(255, 255, 255, 0.03) ; | |
| } | |
| body.dark-theme .memory-row.active { | |
| background-color: rgba(255, 255, 255, 0.05) ; | |
| border-color: rgba(255, 255, 255, 0.08) ; | |
| } | |
| body.dark-theme .memory-row-copy strong { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .memory-row-meta { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .memory-id-badge { | |
| background-color: rgba(255, 255, 255, 0.04) ; | |
| color: #a3a3a3 ; | |
| } | |
| body.dark-theme .memory-detail-title { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .memory-content-box { | |
| background-color: rgba(24, 24, 24, 0.6) ; | |
| border: 1px solid rgba(255, 255, 255, 0.04) ; | |
| color: #e5e5e5 ; | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2) ; | |
| } | |
| body.dark-theme .instrument-card { | |
| background-color: rgba(24, 24, 24, 0.5) ; | |
| border: 1px solid rgba(255, 255, 255, 0.04) ; | |
| } | |
| body.dark-theme .instrument-card h4 { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .meter-track { | |
| background-color: rgba(255, 255, 255, 0.06) ; | |
| } | |
| body.dark-theme .metric-value { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .neighbor-card { | |
| background-color: rgba(24, 24, 24, 0.5) ; | |
| border: 1px solid rgba(255, 255, 255, 0.04) ; | |
| } | |
| body.dark-theme .neighbor-card strong { | |
| color: #e2e8f0 ; | |
| } | |
| body.dark-theme .neighbor-card span { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .metadata-tag { | |
| background-color: rgba(255, 255, 255, 0.03) ; | |
| border-color: rgba(255, 255, 255, 0.04) ; | |
| } | |
| body.dark-theme .metadata-tag span:first-child { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .metadata-tag span:last-child { | |
| color: #e2e8f0 ; | |
| } | |
| body.dark-theme .empty-detail { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .insight-close { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .neural-insight-modal { | |
| background-color: #0f1115 ; | |
| border: 1px solid rgba(255, 255, 255, 0.06) ; | |
| } | |
| body.dark-theme .insight-header h3 { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .insight-body p { | |
| color: #a3a3a3 ; | |
| } | |
| body.dark-theme .insight-btn { | |
| background-color: #ff6b35 ; | |
| color: white ; | |
| } | |
| /* ── SOMA Knowledge Graph Dark UI Overrides ── */ | |
| body.dark-theme .graph-network-container { | |
| background: rgba(18, 18, 18, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.06) ; | |
| box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55), inset 0 0 80px rgba(255, 255, 255, 0.02) ; | |
| } | |
| body.dark-theme .graph-select { | |
| background: rgba(24, 24, 24, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.05) ; | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .graph-icon-button { | |
| background: rgba(24, 24, 24, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.05) ; | |
| color: #a3a3a3 ; | |
| } | |
| body.dark-theme .graph-icon-button:hover { | |
| background: rgba(255, 255, 255, 0.05) ; | |
| color: #ff6b35 ; | |
| } | |
| body.dark-theme .graph-legend { | |
| background: rgba(24, 24, 24, 0.85) ; | |
| border: 1px solid rgba(255, 255, 255, 0.05) ; | |
| box-shadow: 0 8px 32px rgba(0,0,0,0.4) ; | |
| } | |
| body.dark-theme .legend-item { | |
| color: #a3a3a3 ; | |
| } | |
| body.dark-theme .hud-panel { | |
| background: rgba(18, 18, 18, 0.85) ; | |
| border: 1px solid rgba(255, 255, 255, 0.05) ; | |
| box-shadow: 0 8px 32px rgba(0,0,0,0.4) ; | |
| } | |
| body.dark-theme .hud-header { | |
| color: #ff8b54 ; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.05) ; | |
| } | |
| body.dark-theme .hud-label { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .hud-value { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .entity-name { | |
| color: #e5e5e5 ; | |
| } | |
| body.dark-theme .entity-connections { | |
| color: #ffaa80 ; | |
| background: rgba(255, 107, 53, 0.1) ; | |
| } | |
| body.dark-theme .graph-tooltip { | |
| text-shadow: | |
| -3px -3px 0 #000, | |
| 3px -3px 0 #000, | |
| -3px 3px 0 #000, | |
| 3px 3px 0 #000, | |
| -3px 0px 0 #000, | |
| 3px 0px 0 #000, | |
| 0px -3px 0 #000, | |
| 0px 3px 0 #000 ; | |
| } | |
| body.dark-theme .graph-loading { | |
| background: rgba(18, 18, 18, 0.9) ; | |
| border: 1px solid rgba(255, 255, 255, 0.06) ; | |
| color: #ff6b35 ; | |
| } | |
| /* ── SOMA Neural Inscription Dark UI Overrides ── */ | |
| body.dark-theme .inscription-icon { | |
| background-color: rgba(24, 24, 24, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.05) ; | |
| } | |
| body.dark-theme .inscription-title h3 { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .inscription-composer { | |
| background: rgba(18, 18, 18, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.06) ; | |
| box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55) ; | |
| } | |
| body.dark-theme .inscription-composer textarea { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .inscription-composer textarea::placeholder { | |
| color: #525252 ; | |
| } | |
| body.dark-theme .inscription-footer { | |
| border-top-color: rgba(255, 255, 255, 0.05) ; | |
| } | |
| body.dark-theme .analysis-panel { | |
| background: rgba(18, 18, 18, 0.75) ; | |
| border: 1px solid rgba(255, 255, 255, 0.06) ; | |
| box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55) ; | |
| } | |
| body.dark-theme .analysis-section label, | |
| body.dark-theme .analysis-metric label { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .mini-meter { | |
| background-color: rgba(255, 255, 255, 0.06) ; | |
| } | |
| body.dark-theme .metric-sub { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .link-tag { | |
| background-color: rgba(24, 24, 24, 0.5) ; | |
| border: 1px solid rgba(255, 255, 255, 0.04) ; | |
| color: #e2e8f0 ; | |
| } | |
| body.dark-theme .link-tag.reinforced { | |
| border-color: rgba(16, 185, 129, 0.3) ; | |
| background: rgba(16, 185, 129, 0.08) ; | |
| } | |
| body.dark-theme .impact-item { | |
| background-color: rgba(24, 24, 24, 0.5) ; | |
| border: 1px solid rgba(255, 255, 255, 0.04) ; | |
| } | |
| body.dark-theme .impact-val { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .impact-label { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .layer-item { | |
| color: #a3a3a3 ; | |
| } | |
| body.dark-theme .empty-tag { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .existing-link-item { | |
| background-color: rgba(24, 24, 24, 0.5) ; | |
| border: 1px solid rgba(255, 255, 255, 0.04) ; | |
| } | |
| body.dark-theme .link-info strong { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .link-info span { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .panel-footer { | |
| border-top-color: rgba(255, 255, 255, 0.05) ; | |
| color: #737373 ; | |
| } | |
| /* ── SOMA Sleep Page & Consolidation Dark UI Overrides ── */ | |
| body.dark-theme .sleep-page-container { | |
| background-color: #000000 ; | |
| } | |
| body.dark-theme .sleep-page-header h2 { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .sleep-copy-combined h3 { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .sleep-copy-combined p { | |
| color: #a3a3a3 ; | |
| } | |
| body.dark-theme .sleep-step-text { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .sleep-step-item-vertical.active .sleep-step-text { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .sleep-step-circle { | |
| background-color: #000000 ; | |
| } | |
| body.dark-theme .sleep-step-circle.pending { | |
| border-color: #404040 ; | |
| } | |
| body.dark-theme .connector-line { | |
| background-color: #404040 ; | |
| } | |
| body.dark-theme .summary-overlay-combined { | |
| background-color: #000000 ; | |
| } | |
| body.dark-theme .sleep-page-header-summary h2 { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .summary-card-combined { | |
| background-color: rgba(18, 18, 18, 0.85) ; | |
| border-color: rgba(255, 255, 255, 0.05) ; | |
| box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55) ; | |
| } | |
| body.dark-theme .summary-close-combined { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .summary-close-combined:hover { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .summary-header-copy-combined h3 { | |
| color: #f8fafc ; | |
| } | |
| body.dark-theme .summary-header-copy-combined p { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .summary-item-combined { | |
| background-color: rgba(255, 255, 255, 0.03) ; | |
| border-color: rgba(255, 255, 255, 0.04) ; | |
| } | |
| body.dark-theme .summary-item-copy-combined strong { | |
| color: #e5e5e5 ; | |
| } | |
| body.dark-theme .summary-item-copy-combined span { | |
| color: #737373 ; | |
| } | |
| body.dark-theme .summary-view-btn-combined { | |
| background-color: rgba(255, 107, 53, 0.1) ; | |
| color: #ff6b35 ; | |
| } | |
| body.dark-theme .summary-view-btn-combined:hover { | |
| background-color: rgba(255, 107, 53, 0.15) ; | |
| } | |
| body.dark-theme .summary-footer-combined p { | |
| color: #a3a3a3 ; | |
| } | |
| body.dark-theme .sleep-trigger-btn { | |
| background: linear-gradient(135deg, #ff6b35, #ff5714) ; | |
| } | |
| body.dark-theme .sleep-trigger-btn:hover { | |
| box-shadow: 0 15px 40px rgba(255, 107, 53, 0.4) ; | |
| } | |
| body.dark-theme .sleep-brain-image-asset { | |
| background: none ; | |
| mix-blend-mode: normal ; | |
| opacity: 1 ; | |
| border-radius: 0 ; | |
| } | |