/* ===== Variables & Reset ===== */ :root { --bg-primary: #0f1117; --bg-secondary: #1a1d27; --bg-tertiary: #252833; --text-primary: #e8e8ed; --text-secondary: #9ca3af; --accent: #6c5ce7; --accent-light: #a29bfe; --success: #00b894; --warning: #fdcb6e; --danger: #e17055; --border: #2d3040; --radius: 12px; --radius-sm: 8px; } .btn-lang { position: fixed; top: 12px; right: 16px; z-index: 100; background: var(--bg-tertiary); color: var(--text-primary); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 6px 14px; font-size: 0.85rem; font-weight: 600; cursor: pointer; transition: background 0.2s; } .btn-lang:hover { background: var(--accent); } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: 'Segoe UI', system-ui, -apple-system, sans-serif; background: var(--bg-primary); color: var(--text-primary); min-height: 100vh; display: flex; justify-content: center; align-items: center; } .screen { display: none; width: 100%; max-width: 720px; padding: 24px; } .screen.active { display: flex; flex-direction: column; } /* ===== Setup Screen ===== */ #setup-screen { align-items: center; gap: 32px; min-height: 100vh; justify-content: center; } #setup-screen h1 { font-size: 2rem; font-weight: 700; text-align: center; } #setup-screen p.subtitle { color: var(--text-secondary); text-align: center; margin-top: -16px; font-size: 0.95rem; } .form-group { width: 100%; display: flex; flex-direction: column; gap: 8px; } .form-group label { font-weight: 600; font-size: 0.9rem; color: var(--text-secondary); } .form-group input { padding: 14px 16px; border-radius: var(--radius-sm); border: 1px solid var(--border); background: var(--bg-secondary); color: var(--text-primary); font-size: 1rem; outline: none; transition: border-color 0.2s; } .form-group input:focus { border-color: var(--accent); } .mode-selector { display: flex; gap: 16px; width: 100%; } .mode-btn { flex: 1; padding: 20px 16px; border-radius: var(--radius); border: 2px solid var(--border); background: var(--bg-secondary); color: var(--text-primary); cursor: pointer; text-align: center; transition: all 0.2s; } .mode-btn:hover { border-color: var(--accent-light); } .mode-btn.selected { border-color: var(--accent); background: var(--bg-tertiary); } .mode-btn .mode-title { font-weight: 700; font-size: 1.1rem; margin-bottom: 6px; } .mode-btn .mode-desc { font-size: 0.82rem; color: var(--text-secondary); } .btn-primary { padding: 14px 32px; border-radius: var(--radius-sm); border: none; background: var(--accent); color: #fff; font-size: 1rem; font-weight: 600; cursor: pointer; transition: opacity 0.2s; width: 100%; } .btn-primary:hover { opacity: 0.9; } .btn-primary:disabled { opacity: 0.5; cursor: not-allowed; } /* ===== Upload Zone ===== */ .upload-zone { width: 100%; border: 2px dashed var(--border); border-radius: var(--radius); padding: 28px 20px; text-align: center; cursor: pointer; transition: all 0.2s; background: var(--bg-secondary); } .upload-zone:hover, .upload-zone.dragover { border-color: var(--accent); background: var(--bg-tertiary); } .upload-zone.uploading { opacity: 0.6; pointer-events: none; } .upload-icon { font-size: 2rem; color: var(--accent); margin-bottom: 8px; font-weight: 300; } .upload-text { font-size: 0.92rem; color: var(--text-primary); margin-bottom: 4px; } .upload-hint { font-size: 0.78rem; color: var(--text-secondary); } .upload-list { width: 100%; display: flex; flex-direction: column; gap: 6px; } .upload-item { display: flex; align-items: center; gap: 10px; padding: 10px 14px; background: var(--bg-secondary); border: 1px solid var(--border); border-radius: var(--radius-sm); font-size: 0.85rem; } .upload-item-icon { background: var(--accent); color: #fff; padding: 2px 8px; border-radius: 4px; font-size: 0.7rem; font-weight: 700; flex-shrink: 0; } .upload-item-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .upload-item-chunks { color: var(--text-secondary); font-size: 0.78rem; flex-shrink: 0; } .upload-item-delete { background: transparent; border: 1px solid var(--border); color: var(--text-secondary); border-radius: 4px; cursor: pointer; padding: 2px 8px; font-size: 0.75rem; transition: all 0.2s; } .upload-item-delete:hover { border-color: var(--danger); color: var(--danger); } .upload-status { font-size: 0.82rem; min-height: 1.2em; } .upload-status.success { color: var(--success); } .upload-status.warning { color: var(--warning); } .upload-status.error { color: var(--danger); } .upload-status.uploading { color: var(--accent-light); } .badge-docs { background: var(--success); color: #fff; } /* ===== Chat Screen ===== */ #chat-screen { height: 100vh; max-height: 100vh; padding: 0; gap: 0; } .chat-header { padding: 16px 24px; border-bottom: 1px solid var(--border); display: flex; align-items: center; justify-content: space-between; flex-shrink: 0; } .chat-header-left { display: flex; align-items: center; gap: 12px; } .badge { padding: 4px 12px; border-radius: 20px; font-size: 0.78rem; font-weight: 600; } .badge-mode { background: var(--accent); color: #fff; } .badge-topic { background: var(--bg-tertiary); color: var(--text-secondary); border: 1px solid var(--border); } .chat-header-right { display: flex; align-items: center; } .btn-end { padding: 8px 16px; border-radius: var(--radius-sm); border: 1px solid var(--danger); background: transparent; color: var(--danger); font-size: 0.85rem; font-weight: 600; cursor: pointer; transition: all 0.2s; } .btn-end:hover { background: var(--danger); color: #fff; } .btn-reset { padding: 8px 16px; border-radius: var(--radius-sm); border: 1px solid var(--border); background: transparent; color: var(--text-secondary); font-size: 0.85rem; cursor: pointer; margin-left: 8px; } .btn-reset:hover { border-color: var(--text-secondary); } /* Phase indicator */ .phase-indicator { display: flex; align-items: center; justify-content: center; gap: 0; padding: 14px 24px 6px; flex-shrink: 0; } .phase-step { display: flex; align-items: center; } .phase-dot { width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.75rem; font-weight: 700; background: var(--bg-tertiary); color: var(--text-secondary); border: 2px solid var(--border); transition: all 0.3s; flex-shrink: 0; } .phase-dot.active { background: var(--accent); color: #fff; border-color: var(--accent); } .phase-dot.done { background: var(--success); color: #fff; border-color: var(--success); } .phase-connector { width: 32px; height: 2px; background: var(--border); flex-shrink: 0; } .phase-connector.done { background: var(--success); } .phase-labels { display: flex; justify-content: space-between; padding: 4px 12px 10px; flex-shrink: 0; border-bottom: 1px solid var(--border); } .phase-label-text { font-size: 0.68rem; color: var(--text-secondary); text-align: center; flex: 1; } .phase-label-text.active { color: var(--accent-light); font-weight: 600; } /* Messages */ .messages { flex: 1; overflow-y: auto; padding: 24px; display: flex; flex-direction: column; gap: 16px; } .message { max-width: 85%; padding: 14px 18px; border-radius: var(--radius); line-height: 1.55; font-size: 0.95rem; white-space: pre-wrap; word-wrap: break-word; } .message.assistant { background: var(--bg-secondary); border: 1px solid var(--border); align-self: flex-start; } .message.user { background: var(--accent); color: #fff; align-self: flex-end; } .typing-indicator { align-self: flex-start; padding: 14px 18px; background: var(--bg-secondary); border: 1px solid var(--border); border-radius: var(--radius); display: none; } .typing-indicator span { display: inline-block; width: 8px; height: 8px; background: var(--text-secondary); border-radius: 50%; margin: 0 2px; animation: bounce 1.4s ease-in-out infinite; } .typing-indicator span:nth-child(2) { animation-delay: 0.2s; } .typing-indicator span:nth-child(3) { animation-delay: 0.4s; } @keyframes bounce { 0%, 60%, 100% { transform: translateY(0); } 30% { transform: translateY(-6px); } } /* Input bar */ .input-bar { padding: 16px 24px; border-top: 1px solid var(--border); display: flex; gap: 12px; flex-shrink: 0; } .input-bar input { flex: 1; padding: 14px 16px; border-radius: var(--radius-sm); border: 1px solid var(--border); background: var(--bg-secondary); color: var(--text-primary); font-size: 1rem; outline: none; } .input-bar input:focus { border-color: var(--accent); } .btn-send { padding: 14px 24px; border-radius: var(--radius-sm); border: none; background: var(--accent); color: #fff; font-weight: 600; cursor: pointer; } .btn-send:disabled { opacity: 0.5; cursor: not-allowed; } /* ===== Analysis Screen ===== */ #analysis-screen { min-height: 100vh; justify-content: flex-start; padding-top: 40px; gap: 24px; } #analysis-screen h2 { font-size: 1.5rem; text-align: center; } .scores-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; width: 100%; } .score-card { background: var(--bg-secondary); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 16px; text-align: center; } .score-card .score-value { font-size: 2rem; font-weight: 700; color: var(--accent-light); } .score-card .score-label { font-size: 0.78rem; color: var(--text-secondary); margin-top: 4px; } .score-bar { width: 100%; height: 4px; background: var(--bg-tertiary); border-radius: 2px; margin-top: 8px; overflow: hidden; } .score-bar-fill { height: 100%; background: var(--accent); border-radius: 2px; transition: width 0.6s ease; } .analysis-section { width: 100%; background: var(--bg-secondary); border: 1px solid var(--border); border-radius: var(--radius); padding: 20px; } .analysis-section h3 { font-size: 1rem; margin-bottom: 12px; color: var(--text-secondary); } .analysis-section p, .analysis-section li { line-height: 1.6; font-size: 0.92rem; } .analysis-section ul { list-style: none; padding: 0; } .analysis-section ul li::before { content: "- "; color: var(--accent-light); } .rhythm-badge { display: inline-block; padding: 6px 14px; border-radius: 20px; font-size: 0.85rem; font-weight: 600; background: var(--bg-tertiary); border: 1px solid var(--border); } .analysis-actions { display: flex; gap: 12px; width: 100%; } .analysis-actions button { flex: 1; } .btn-secondary { padding: 14px 24px; border-radius: var(--radius-sm); border: 1px solid var(--border); background: transparent; color: var(--text-primary); font-size: 0.95rem; font-weight: 600; cursor: pointer; } .btn-secondary:hover { border-color: var(--accent); } /* ===== Responsive ===== */ @media (max-width: 600px) { .scores-grid { grid-template-columns: repeat(2, 1fr); } .mode-selector { flex-direction: column; } .analysis-actions { flex-direction: column; } .chat-header { flex-wrap: wrap; gap: 8px; } }