/* CSS Variables and Base Styles */ :root { /* Kasane Teto Color Palette */ --teto-red: #e53e3e; --teto-red-glow: rgba(229, 62, 62, 0.6); --teto-red-dark: #c53030; /* Dark Theme Base */ --bg-primary: #0a0a0b; --bg-secondary: #1a1a1d; --bg-panel: rgba(44, 44, 52, 0.8); --bg-glass: rgba(44, 44, 52, 0.6); --border-primary: rgba(229, 62, 62, 0.3); --border-secondary: rgba(74, 74, 82, 0.5); /* Text Colors */ --text-primary: #f5f5f5; --text-secondary: #a9a9b3; --text-muted: #6b7280; /* Glassmorphism */ --glass-backdrop: blur(20px); --glass-border: 1px solid rgba(255, 255, 255, 0.1); /* Shadows and Glows */ --shadow-soft: 0 4px 20px rgba(0, 0, 0, 0.3); --glow-red: 0 0 20px var(--teto-red-glow); --glow-soft: 0 0 10px rgba(229, 62, 62, 0.2); /* Animation Timings */ --transition-fast: 0.2s ease-out; --transition-smooth: 0.3s cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: 0.5s cubic-bezier(0.4, 0, 0.2, 1); } /* Global Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: var(--bg-primary); color: var(--text-primary); overflow-x: hidden; min-height: 100vh; font-feature-settings: 'ss01' on, 'ss02' on; } /* Neural Grid Background */ .neural-grid { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background-image: linear-gradient(rgba(229, 62, 62, 0.1) 1px, transparent 1px), linear-gradient(90deg, rgba(229, 62, 62, 0.1) 1px, transparent 1px); background-size: 50px 50px; pointer-events: none; z-index: -2; opacity: 0.3; } /* Synapse Canvas */ #synapse-canvas { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; pointer-events: none; z-index: -1; } /* Dashboard Container */ .dashboard-container { min-height: 100vh; padding: 1rem; max-width: 100vw; } /* Header Styles */ .header-glass { background: var(--bg-glass); backdrop-filter: var(--glass-backdrop); border: var(--glass-border); border-radius: 16px; margin-bottom: 1rem; box-shadow: var(--shadow-soft); } .header-content { display: flex; align-items: center; justify-content: space-between; padding: 1.5rem 2rem; flex-wrap: wrap; gap: 1rem; } .bot-identity { display: flex; align-items: center; gap: 1rem; } .teto-avatar { position: relative; width: 60px; height: 60px; } .avatar-inner { width: 60px; height: 60px; background: linear-gradient(135deg, var(--teto-red), var(--teto-red-dark)); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; font-weight: 700; color: white; box-shadow: var(--glow-red); position: relative; z-index: 1; } .status-ring { position: absolute; top: -2px; left: -2px; right: -2px; bottom: -2px; border: 2px solid var(--teto-red); border-radius: 50%; animation: pulse-ring 2s infinite; } @keyframes pulse-ring { 0% { transform: scale(1); opacity: 1; } 100% { transform: scale(1.1); opacity: 0; } } .bot-info { display: flex; flex-direction: column; gap: 0.25rem; } .bot-title { font-size: 1.75rem; font-weight: 700; background: linear-gradient(135deg, var(--text-primary), var(--teto-red)); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .bot-subtitle { font-size: 0.9rem; color: var(--text-secondary); display: flex; align-items: center; gap: 0.5rem; } .status-indicator { width: 8px; height: 8px; background: #10b981; border-radius: 50%; animation: blink 2s infinite; } @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } } .user-controls { display: flex; align-items: center; gap: 1rem; } .user-profile { display: flex; align-items: center; gap: 0.75rem; } .user-avatar { width: 40px; height: 40px; border-radius: 50%; border: 2px solid var(--border-primary); } .username { font-weight: 600; color: var(--text-primary); } .logout-btn { display: flex; align-items: center; gap: 0.5rem; background: rgba(107, 114, 128, 0.2); border: 1px solid rgba(107, 114, 128, 0.3); color: var(--text-primary); padding: 0.75rem 1rem; border-radius: 8px; font-weight: 500; transition: var(--transition-fast); cursor: pointer; } .logout-btn:hover { background: rgba(107, 114, 128, 0.3); border-color: rgba(107, 114, 128, 0.5); } /* Navigation Styles */ .nav-glass { background: var(--bg-glass); backdrop-filter: var(--glass-backdrop); border: var(--glass-border); border-radius: 12px; margin-bottom: 1.5rem; padding: 0.5rem; box-shadow: var(--shadow-soft); } .nav-items { display: flex; gap: 0.25rem; overflow-x: auto; scrollbar-width: none; -ms-overflow-style: none; } .nav-items::-webkit-scrollbar { display: none; } .nav-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1rem; border-radius: 8px; border: none; background: transparent; color: var(--text-secondary); font-weight: 500; font-size: 0.9rem; white-space: nowrap; transition: var(--transition-fast); cursor: pointer; position: relative; } .nav-item:hover { background: rgba(229, 62, 62, 0.1); color: var(--text-primary); } .nav-item.active { background: linear-gradient(135deg, var(--teto-red), var(--teto-red-dark)); color: white; box-shadow: var(--glow-soft); } .nav-item.active::after { content: ''; position: absolute; top: -2px; left: -2px; right: -2px; bottom: -2px; background: linear-gradient(135deg, var(--teto-red), transparent, var(--teto-red)); border-radius: 10px; z-index: -1; animation: nav-glow 2s infinite; } @keyframes nav-glow { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } } /* Main Content */ .main-content { min-height: calc(100vh - 200px); } .tab-content { display: none; animation: fadeIn 0.3s ease-out; } .tab-content.active { display: block; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* Content Grid */ .content-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem; grid-auto-rows: min-content; } /* Panel Styles */ .panel { background: var(--bg-glass); backdrop-filter: var(--glass-backdrop); border: var(--glass-border); border-radius: 16px; box-shadow: var(--shadow-soft); overflow: hidden; transition: var(--transition-smooth); position: relative; } .panel::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, var(--teto-red-glow), transparent); opacity: 0; transition: var(--transition-smooth); } .panel:hover::before { opacity: 1; } .panel:hover { border-color: var(--border-primary); box-shadow: var(--shadow-soft), var(--glow-soft); } .panel-header { display: flex; align-items: center; justify-content: space-between; padding: 1.5rem 1.5rem 0; margin-bottom: 1rem; } .panel-header h2 { font-size: 1.25rem; font-weight: 600; color: var(--text-primary); } /* Enhanced Metrics Panel */ .system-status { display: flex; align-items: center; gap: 0.5rem; font-size: 0.75rem; color: var(--text-muted); } .status-indicator.online { width: 8px; height: 8px; background: #10b981; border-radius: 50%; animation: blink 2s infinite; } .metric-details { font-size: 0.75rem; color: var(--text-muted); margin-top: 0.5rem; } /* Status Panel */ .panel-status { grid-column: 1 / -1; } .status-lights { display: flex; gap: 0.5rem; } .status-light { width: 12px; height: 12px; border-radius: 50%; background: var(--text-muted); transition: var(--transition-fast); } .status-light.active { background: var(--teto-red); box-shadow: 0 0 10px var(--teto-red-glow); animation: pulse-light 2s infinite; } @keyframes pulse-light { 0%, 100% { opacity: 1; } 50% { opacity: 0.6; } } .status-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem; padding: 0 1.5rem 1.5rem; } .status-item { display: flex; align-items: center; gap: 1rem; padding: 1rem; background: rgba(0, 0, 0, 0.2); border-radius: 12px; border: 1px solid var(--border-secondary); transition: var(--transition-fast); } .status-item:hover { background: rgba(0, 0, 0, 0.3); border-color: var(--border-primary); } .status-emoji { font-size: 2rem; filter: drop-shadow(0 0 10px rgba(229, 62, 62, 0.3)); } .status-info h3 { font-weight: 600; font-size: 1rem; color: var(--text-primary); } .status-info p { font-size: 0.875rem; color: var(--text-secondary); } /* Thoughts Panel */ .panel-thoughts { min-height: 400px; } .thought-indicator { display: flex; align-items: center; gap: 0.5rem; font-size: 0.875rem; color: var(--text-secondary); } .pulse-dot { width: 8px; height: 8px; background: var(--teto-red); border-radius: 50%; animation: pulse 1s infinite; } @keyframes pulse { 0% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.2); opacity: 0.7; } 100% { transform: scale(1); opacity: 1; } } .thoughts-container { padding: 0 1.5rem 1.5rem; height: 300px; } .thought-stream { height: 100%; background: rgba(0, 0, 0, 0.4); border-radius: 8px; padding: 1rem; font-family: 'JetBrains Mono', monospace; font-size: 0.75rem; line-height: 1.6; color: var(--text-secondary); overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--teto-red) transparent; } .thought-stream::-webkit-scrollbar { width: 4px; } .thought-stream::-webkit-scrollbar-track { background: transparent; } .thought-stream::-webkit-scrollbar-thumb { background: var(--teto-red); border-radius: 2px; } .thought-line { margin-bottom: 0.5rem; opacity: 0; animation: thoughtAppear 0.5s ease-out forwards; } @keyframes thoughtAppear { from { opacity: 0; transform: translateX(-10px); } to { opacity: 1; transform: translateX(0); } } .thought-timestamp { color: var(--teto-red); } /* Actions Panel */ .actions-list { padding: 0 1.5rem 1.5rem; } .action-item { display: flex; align-items: center; gap: 1rem; padding: 0.75rem; margin-bottom: 0.5rem; background: rgba(0, 0, 0, 0.2); border-radius: 8px; border-left: 3px solid transparent; transition: var(--transition-fast); } .action-item:hover { background: rgba(0, 0, 0, 0.3); border-left-color: var(--teto-red); } .action-time { font-size: 0.75rem; color: var(--text-muted); min-width: 60px; } .action-desc { flex: 1; font-size: 0.875rem; color: var(--text-secondary); } .channel { color: var(--teto-red); font-weight: 500; } .action-type { font-size: 1.25rem; opacity: 0.7; } .action-count { font-size: 0.75rem; color: var(--text-muted); background: rgba(229, 62, 62, 0.1); padding: 0.25rem 0.5rem; border-radius: 12px; } /* Metrics Panel */ .metrics-grid { padding: 0 1.5rem 1.5rem; display: flex; flex-direction: column; gap: 1.5rem; } .metric { display: flex; flex-direction: column; gap: 0.5rem; } .metric-value { font-size: 2rem; font-weight: 700; color: var(--text-primary); } .metric-label { font-size: 0.875rem; color: var(--text-secondary); } .metric-bar { height: 4px; background: rgba(107, 114, 128, 0.3); border-radius: 2px; overflow: hidden; } .metric-fill { height: 100%; background: var(--teto-red); border-radius: 2px; transition: width 1s ease-out; } .metric-fill.good { background: #10b981; } .metric-fill.vram { background: linear-gradient(90deg, #8b5cf6, #a855f7); } /* Response Time Breakdown */ .response-metric { grid-column: 1 / -1; } .response-breakdown { margin-top: 1rem; display: flex; flex-direction: column; gap: 0.75rem; } .breakdown-item { display: flex; align-items: center; gap: 1rem; } .breakdown-label { flex: 1; font-size: 0.75rem; color: var(--text-secondary); min-width: 120px; } .breakdown-value { font-size: 0.75rem; color: var(--text-primary); font-weight: 600; min-width: 30px; text-align: right; } .breakdown-bar { flex: 2; height: 4px; background: rgba(107, 114, 128, 0.3); border-radius: 2px; overflow: hidden; } .breakdown-fill { height: 100%; border-radius: 2px; transition: width 1s ease-out; } /* Shutdown Timer */ .shutdown-metric .metric-value { color: #ef4444; font-family: 'JetBrains Mono', monospace; } .shutdown-progress { margin-top: 1rem; } .progress-track { height: 6px; background: rgba(107, 114, 128, 0.3); border-radius: 3px; overflow: hidden; margin-bottom: 0.5rem; } .shutdown-fill { background: linear-gradient(90deg, #10b981, #eab308, #ef4444); transition: width 1s ease-out; } .shutdown-details { font-size: 0.75rem; color: var(--text-muted); text-align: center; margin-bottom: 0.75rem; } .shutdown-reason { display: flex; align-items: center; gap: 0.5rem; justify-content: center; padding: 0.5rem; background: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.3); border-radius: 6px; } .reason-icon { font-size: 1rem; } .reason-text { font-size: 0.75rem; color: #ef4444; } /* Analytics Styles */ .analytics-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); gap: 1.5rem; } .leaderboard-period { font-size: 0.75rem; color: var(--text-muted); background: rgba(229, 62, 62, 0.1); padding: 0.25rem 0.5rem; border-radius: 12px; } .leaderboard { padding: 0 1.5rem 1.5rem; display: flex; flex-direction: column; gap: 1rem; } .leader-item { display: flex; align-items: center; gap: 1rem; padding: 1rem; background: rgba(0, 0, 0, 0.2); border-radius: 12px; border: 1px solid var(--border-secondary); transition: var(--transition-fast); } .leader-item:hover { background: rgba(0, 0, 0, 0.3); border-color: var(--border-primary); } .rank { width: 32px; height: 32px; background: var(--teto-red); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 0.875rem; color: white; } .avatar { width: 40px; height: 40px; background: var(--bg-secondary); border: 2px solid var(--border-secondary); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 600; color: var(--text-primary); } .info { flex: 1; display: flex; flex-direction: column; } .name { font-weight: 600; color: var(--text-primary); } .score { font-size: 0.875rem; color: var(--text-secondary); } .activity-bar { width: 60px; height: 4px; background: rgba(107, 114, 128, 0.3); border-radius: 2px; overflow: hidden; } .bar-fill { height: 100%; background: linear-gradient(90deg, var(--teto-red), var(--teto-red-dark)); border-radius: 2px; transition: width 1s ease-out; } /* Language Chart */ .language-chart { padding: 0 1.5rem 1.5rem; display: flex; flex-direction: column; gap: 1rem; } .language-item { display: flex; flex-direction: column; gap: 0.5rem; } .lang-info { display: flex; justify-content: space-between; align-items: center; } .lang-name { font-weight: 500; color: var(--text-primary); } .lang-percent { font-size: 0.875rem; color: var(--text-secondary); } .lang-bar { height: 8px; background: rgba(107, 114, 128, 0.2); border-radius: 4px; overflow: hidden; } .lang-fill { height: 100%; border-radius: 4px; transition: width 1s ease-out; } /* Sentiment Analysis */ .sentiment-overview { padding: 0 1.5rem 1.5rem; display: flex; flex-direction: column; gap: 1.5rem; } .sentiment-score { text-align: center; padding: 2rem 1rem; background: rgba(16, 185, 129, 0.1); border-radius: 12px; border: 1px solid rgba(16, 185, 129, 0.3); } .score-value { font-size: 3rem; font-weight: 700; color: #10b981; } .score-label { color: var(--text-secondary); font-size: 0.875rem; text-transform: uppercase; letter-spacing: 0.05em; } .sentiment-breakdown { display: flex; flex-direction: column; gap: 0.75rem; } .sentiment-item { display: flex; align-items: center; gap: 1rem; padding: 0.75rem; border-radius: 8px; background: rgba(0, 0, 0, 0.2); } .sentiment-emoji { font-size: 1.5rem; } .sentiment-data { display: flex; justify-content: space-between; width: 100%; font-size: 0.875rem; } .sentiment-item.positive { border-left: 3px solid #10b981; } .sentiment-item.neutral { border-left: 3px solid #6b7280; } .sentiment-item.negative { border-left: 3px solid #ef4444; } /* Activity Heatmap */ .heatmap-container { padding: 0 1.5rem 1.5rem; } .heatmap-grid { display: grid; grid-template-columns: repeat(24, 1fr); gap: 2px; margin-bottom: 1rem; } .heatmap-cell { aspect-ratio: 1; border-radius: 2px; background: rgba(107, 114, 128, 0.2); transition: var(--transition-fast); cursor: pointer; } .heatmap-cell:hover { transform: scale(1.2); } .heatmap-legend { display: flex; align-items: center; justify-content: center; gap: 0.5rem; font-size: 0.75rem; color: var(--text-muted); } .legend-scale { width: 100px; height: 10px; background: linear-gradient(90deg, rgba(107, 114, 128, 0.2), var(--teto-red)); border-radius: 5px; } /* Trending Topics */ .trending-topics { padding: 0 1.5rem 1.5rem; } .topic-cloud { display: flex; flex-wrap: wrap; gap: 0.75rem; justify-content: center; } .topic-tag { padding: 0.5rem 1rem; border-radius: 20px; background: rgba(229, 62, 62, 0.1); border: 1px solid rgba(229, 62, 62, 0.3); color: var(--text-primary); font-weight: 500; transition: var(--transition-fast); cursor: pointer; } .topic-tag:hover { background: rgba(229, 62, 62, 0.2); border-color: var(--teto-red); } .topic-tag.large { font-size: 1.1rem; } .topic-tag.medium { font-size: 0.95rem; } .topic-tag.small { font-size: 0.8rem; } /* Archives Styles */ .archives-layout { display: grid; grid-template-columns: 1fr 2fr; gap: 1.5rem; height: 80vh; } .archives-sidebar .panel { height: 100%; display: flex; flex-direction: column; } .archive-categories { padding: 0 1.5rem 1.5rem; overflow-y: auto; flex: 1; } .archive-category { margin-bottom: 2rem; } .archive-category h3 { color: var(--teto-red); font-size: 1rem; font-weight: 600; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 1px solid var(--border-secondary); } .archive-list { display: flex; flex-direction: column; gap: 0.5rem; } .archive-item { padding: 1rem; background: rgba(0, 0, 0, 0.2); border-radius: 8px; border: 1px solid var(--border-secondary); cursor: pointer; transition: var(--transition-fast); } .archive-item:hover, .archive-item.active { background: rgba(0, 0, 0, 0.3); border-color: var(--border-primary); } .archive-title { font-weight: 500; color: var(--text-primary); margin-bottom: 0.25rem; } .archive-meta { font-size: 0.75rem; color: var(--text-muted); } .archives-viewer .panel { height: 100%; display: flex; flex-direction: column; } #archive-content { padding: 1.5rem; flex: 1; overflow-y: auto; } .archive-placeholder { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; color: var(--text-muted); text-align: center; } .placeholder-icon { font-size: 4rem; margin-bottom: 1rem; opacity: 0.5; } .archive-display.hidden { display: none; } .archive-header { margin-bottom: 2rem; padding-bottom: 1rem; border-bottom: 1px solid var(--border-secondary); } .archive-header h2 { color: var(--text-primary); font-size: 1.5rem; font-weight: 600; margin-bottom: 0.5rem; } .archive-info { color: var(--text-secondary); font-size: 0.875rem; } /* Memory Explorer with 3D Visualization */ .memory-container { height: 80vh; } .panel-memory { height: 100%; display: flex; flex-direction: column; } .memory-viewer { flex: 1; display: flex; flex-direction: column; padding: 0 1.5rem 1.5rem; } .memory-canvas { flex: 1; background: rgba(0, 0, 0, 0.3); border-radius: 12px; border: 1px solid var(--border-secondary); overflow: hidden; position: relative; min-height: 400px; cursor: grab; } .memory-canvas:active { cursor: grabbing; } .memory-canvas canvas { width: 100% !important; height: 100% !important; } /* Voice Player */ .voice-player { background: rgba(0, 0, 0, 0.3); padding: 1.5rem; border-radius: 12px; margin-bottom: 2rem; } .player-controls { display: flex; align-items: center; gap: 1rem; } .play-btn { width: 48px; height: 48px; background: var(--teto-red); border: none; border-radius: 50%; color: white; font-size: 1.25rem; cursor: pointer; transition: var(--transition-fast); } .play-btn:hover { background: var(--teto-red-dark); transform: scale(1.05); } .progress-bar { flex: 1; } .progress-track { height: 6px; background: rgba(107, 114, 128, 0.3); border-radius: 3px; overflow: hidden; margin-bottom: 0.5rem; } .progress-fill { height: 100%; background: var(--teto-red); border-radius: 3px; transition: width 0.2s ease; } .time-display { font-family: 'JetBrains Mono', monospace; font-size: 0.875rem; color: var(--text-secondary); min-width: 80px; text-align: right; } /* Transcript */ .transcript { background: rgba(0, 0, 0, 0.2); border-radius: 8px; padding: 1rem; max-height: 400px; overflow-y: auto; } .transcript-entry { display: flex; gap: 0.75rem; margin-bottom: 0.75rem; font-size: 0.875rem; line-height: 1.5; } .timestamp { color: var(--text-muted); font-family: 'JetBrains Mono', monospace; font-size: 0.75rem; min-width: 50px; } .speaker { font-weight: 600; min-width: 60px; } .speaker.alice { color: #3b82f6; } .speaker.bob { color: #10b981; } .speaker.teto { color: var(--teto-red); } .message { color: var(--text-secondary); } /* Chat Log */ .chat-log { background: rgba(0, 0, 0, 0.2); border-radius: 8px; padding: 1rem; max-height: 500px; overflow-y: auto; } .message-group { display: flex; flex-direction: column; gap: 1rem; } .message-item { display: flex; gap: 1rem; } .message-avatar { width: 40px; height: 40px; background: var(--bg-secondary); border: 2px solid var(--border-secondary); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 0.875rem; flex-shrink: 0; } .message-avatar.teto { background: var(--teto-red); border-color: var(--teto-red); color: white; } .message-content { flex: 1; } .message-header { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.25rem; } .username { font-weight: 600; color: var(--text-primary); } .username.teto { color: var(--teto-red); } .message-header .timestamp { font-size: 0.75rem; color: var(--text-muted); } .message-text { color: var(--text-secondary); line-height: 1.5; margin-bottom: 0.5rem; } .message-attachment { margin-top: 0.5rem; } .attachment-placeholder { background: rgba(0, 0, 0, 0.3); border: 1px dashed var(--border-secondary); border-radius: 8px; padding: 2rem; text-align: center; color: var(--text-muted); font-size: 0.875rem; } /* Profile Page Styles */ .profile-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); gap: 1.5rem; } /* Teto's Opinion Panel */ .relationship-score { display: flex; flex-direction: column; align-items: center; text-align: center; } .score-value { font-size: 2rem; font-weight: 700; color: var(--teto-red); line-height: 1; } .score-label { font-size: 0.75rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.05em; } .opinion-content { padding: 0 1.5rem 1.5rem; display: flex; flex-direction: column; gap: 2rem; } .teto-quote { display: flex; gap: 1rem; align-items: flex-start; } .quote-bubble { flex: 1; background: rgba(229, 62, 62, 0.1); border: 1px solid rgba(229, 62, 62, 0.3); border-radius: 16px; padding: 1.5rem; position: relative; } .quote-bubble::after { content: ''; position: absolute; right: -8px; top: 20px; width: 0; height: 0; border: 8px solid transparent; border-left-color: rgba(229, 62, 62, 0.3); } .quote-bubble p { color: var(--text-secondary); line-height: 1.6; font-style: italic; } .teto-avatar-mini { flex-shrink: 0; } .avatar-mini { width: 48px; height: 48px; background: linear-gradient(135deg, var(--teto-red), var(--teto-red-dark)); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; color: white; box-shadow: var(--glow-soft); } .personality-tags h3 { color: var(--text-primary); font-weight: 600; margin-bottom: 1rem; } .tag-cloud { display: flex; flex-wrap: wrap; gap: 0.75rem; } .personality-tag { padding: 0.5rem 1rem; border-radius: 20px; font-size: 0.875rem; font-weight: 500; transition: var(--transition-fast); } .personality-tag.positive { background: rgba(16, 185, 129, 0.15); color: #10b981; border: 1px solid rgba(16, 185, 129, 0.3); } .personality-tag.neutral { background: rgba(107, 114, 128, 0.15); color: #9ca3af; border: 1px solid rgba(107, 114, 128, 0.3); } .personality-tag:hover { transform: translateY(-2px); } /* Key Memories Panel */ .memory-count { font-size: 0.75rem; color: var(--text-muted); background: rgba(229, 62, 62, 0.1); padding: 0.25rem 0.5rem; border-radius: 12px; } .memories-list { padding: 0 1.5rem 1.5rem; max-height: 500px; overflow-y: auto; } .memory-item { display: flex; gap: 1rem; padding: 1rem; margin-bottom: 1rem; background: rgba(0, 0, 0, 0.2); border-radius: 12px; border-left: 3px solid transparent; transition: var(--transition-fast); } .memory-item:hover { background: rgba(0, 0, 0, 0.3); border-left-color: var(--teto-red); } .memory-date { color: var(--text-muted); font-size: 0.75rem; min-width: 80px; font-family: 'JetBrains Mono', monospace; } .memory-content { flex: 1; } .memory-content h4 { color: var(--text-primary); font-weight: 600; margin-bottom: 0.5rem; } .memory-content p { color: var(--text-secondary); font-size: 0.875rem; line-height: 1.5; } .memory-sentiment { font-size: 1.5rem; opacity: 0.7; } /* Conversation Archive */ .conversation-archive { grid-column: 1 / -1; } .archive-stats { color: var(--text-muted); font-size: 0.875rem; display: flex; align-items: center; gap: 0.5rem; } .archive-viewer { padding: 0 1.5rem 1.5rem; } .archive-filters { display: flex; gap: 0.5rem; margin-bottom: 1.5rem; } .filter-btn { padding: 0.5rem 1rem; border: 1px solid var(--border-secondary); background: transparent; color: var(--text-secondary); border-radius: 6px; font-size: 0.875rem; cursor: pointer; transition: var(--transition-fast); } .filter-btn:hover { background: rgba(229, 62, 62, 0.1); border-color: var(--border-primary); color: var(--text-primary); } .filter-btn.active { background: var(--teto-red); border-color: var(--teto-red); color: white; } .conversation-timeline { max-height: 400px; overflow-y: auto; } .timeline-item { display: flex; gap: 1rem; padding: 1rem; margin-bottom: 1rem; background: rgba(0, 0, 0, 0.2); border-radius: 8px; transition: var(--transition-fast); } .timeline-item:hover { background: rgba(0, 0, 0, 0.3); } .timeline-date { color: var(--text-muted); font-size: 0.75rem; min-width: 80px; font-family: 'JetBrains Mono', monospace; } .conversation-preview { flex: 1; } .channel-name { color: var(--teto-red); font-weight: 500; font-size: 0.875rem; margin-bottom: 0.5rem; } .message-sample { color: var(--text-secondary); font-size: 0.875rem; line-height: 1.5; margin-bottom: 0.5rem; } .speaker.you { color: #3b82f6; font-weight: 500; } .speaker.teto { color: var(--teto-red); font-weight: 500; } .voice-preview { color: var(--text-secondary); font-style: italic; } .conversation-meta { color: var(--text-muted); font-size: 0.75rem; } /* Data Control Panel */ .privacy-status { display: flex; align-items: center; gap: 0.5rem; font-size: 0.75rem; color: var(--text-muted); } .status-indicator.secure { width: 8px; height: 8px; background: #10b981; border-radius: 50%; animation: blink 2s infinite; } .data-options { padding: 0 1.5rem 1.5rem; } .data-summary h3 { color: var(--text-primary); font-weight: 600; margin-bottom: 1rem; } .data-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 1rem; margin-bottom: 2rem; } .stat-item { text-align: center; padding: 1rem; background: rgba(0, 0, 0, 0.2); border-radius: 8px; } .stat-number { display: block; font-size: 1.5rem; font-weight: 700; color: var(--teto-red); line-height: 1; } .stat-label { font-size: 0.75rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.05em; } .control-actions { display: flex; flex-direction: column; gap: 1rem; } .data-btn { display: flex; align-items: center; gap: 0.75rem; padding: 1rem 1.5rem; border: 1px solid var(--border-secondary); background: rgba(0, 0, 0, 0.2); color: var(--text-primary); border-radius: 8px; font-weight: 500; transition: var(--transition-fast); cursor: pointer; text-align: left; } .data-btn:hover { background: rgba(0, 0, 0, 0.3); border-color: var(--border-primary); } .data-btn.download:hover { border-color: #10b981; color: #10b981; } .data-btn.export:hover { border-color: #3b82f6; color: #3b82f6; } .data-btn.delete { margin-top: 1rem; } .data-btn.delete:hover { border-color: #ef4444; color: #ef4444; } .file-info, .warning-text { display: block; font-size: 0.75rem; color: var(--text-muted); font-weight: 400; margin-top: 0.25rem; } .warning-text { color: #ef4444; } .danger-zone { margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid rgba(239, 68, 68, 0.3); } .danger-zone h4 { color: #ef4444; font-weight: 600; margin-bottom: 0.75rem; font-size: 0.875rem; text-transform: uppercase; letter-spacing: 0.05em; } /* Responsive Design */ @media (max-width: 768px) { .dashboard-container { padding: 0.5rem; } .header-content { flex-direction: column; text-align: center; gap: 1rem; } .bot-title { font-size: 1.5rem; } .content-grid { grid-template-columns: 1fr; } .status-grid { grid-template-columns: 1fr; } .nav-items { justify-content: flex-start; } .nav-item { font-size: 0.8rem; padding: 0.5rem 0.75rem; } .memory-container { height: 60vh; } } @media (max-width: 480px) { .panel-header { flex-direction: column; align-items: flex-start; gap: 0.5rem; } .status-item { flex-direction: column; text-align: center; gap: 0.5rem; } .action-item { flex-direction: column; align-items: flex-start; gap: 0.5rem; } } /* Responsive Design for Archives */ @media (max-width: 1024px) { .archives-layout { grid-template-columns: 1fr; grid-template-rows: auto 1fr; height: auto; } .archives-sidebar .panel { height: auto; max-height: 300px; } } /* Additional animations and effects */ @keyframes dataFlow { 0% { transform: translateX(-100%); opacity: 0; } 50% { opacity: 1; } 100% { transform: translateX(100%); opacity: 0; } } .data-particle { position: absolute; width: 4px; height: 4px; background: var(--teto-red); border-radius: 50%; animation: dataFlow 2s linear infinite; } /* Accessibility */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } /* High contrast mode */ @media (prefers-contrast: high) { :root { --bg-panel: #000; --text-secondary: #fff; --border-primary: #fff; } }