:root { --bg-dark: #020617; --text-primary: #f8fafc; --text-muted: #94a3b8; --accent: #10b981; --accent-glow: rgba(16, 185, 129, 0.4); --glass-bg: rgba(15, 23, 42, 0.75); --glass-border: rgba(255, 255, 255, 0.08); --panel-gap: 1.5rem; } * { margin: 0; padding: 0; box-sizing: border-box; } body { background-color: var(--bg-dark); color: var(--text-primary); font-family: 'Inter', sans-serif; min-height: 100vh; display: flex; justify-content: center; align-items: center; overflow-x: hidden; position: relative; padding: 2rem; } /* Dynamic ambient lighting */ .ambient-light { position: fixed; border-radius: 50%; filter: blur(120px); opacity: 0.2; z-index: -1; animation: breathe 8s infinite alternate; pointer-events: none; } .blob-1 { width: 50vw; height: 50vw; background: #10b981; top: -20vh; left: -10vw; } .blob-2 { width: 40vw; height: 40vw; background: #0ea5e9; bottom: -10vh; right: -10vw; animation-delay: 4s; } @keyframes breathe { from { transform: scale(1) translate(0, 0); opacity: 0.15; } to { transform: scale(1.1) translate(20px, 30px); opacity: 0.25; } } .dashboard-wrapper { width: 100%; max-width: 1400px; z-index: 10; display: flex; flex-direction: column; gap: var(--panel-gap); } /* HEADER AREA */ .dashboard-header { display: flex; justify-content: space-between; align-items: center; padding: 1.5rem 2.5rem; background: var(--glass-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--glass-border); border-radius: 20px; box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.5); } .logo-area { display: flex; align-items: center; gap: 1rem; } .brand-icon { color: var(--accent); } .title-group h1 { font-family: 'Outfit', sans-serif; font-size: 2rem; letter-spacing: -0.5px; font-weight: 800; } .title-group .highlight { background: linear-gradient(135deg, #34d399, #0ea5e9); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; } .title-group p { font-size: 0.85rem; color: var(--text-muted); font-weight: 500; text-transform: uppercase; letter-spacing: 1px; } /* TOGGLES */ .mode-toggle { display: flex; background: rgba(0, 0, 0, 0.3); border-radius: 50px; padding: 0.3rem; } .toggle-btn { display: flex; align-items: center; gap: 0.5rem; background: transparent; border: none; color: var(--text-muted); padding: 0.7rem 1.5rem; font-weight: 600; font-size: 0.9rem; border-radius: 50px; cursor: pointer; transition: all 0.3s; } .toggle-btn.active { background: rgba(255, 255, 255, 0.1); color: #fff; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); } /* MAIN GRID LAYOUT */ .dashboard-grid { display: grid; grid-template-columns: 1.2fr 0.8fr; gap: var(--panel-gap); min-height: 60vh; } @media (max-width: 900px) { .dashboard-grid { grid-template-columns: 1fr; } .dashboard-header { flex-direction: column; gap: 1.5rem; text-align: center; } } .glass-panel { background: var(--glass-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--glass-border); border-radius: 20px; box-shadow: 0 15px 35px -15px rgba(0, 0, 0, 0.4); overflow: hidden; position: relative; display: flex; flex-direction: column; } /* LEFT COLUMN - MEDIA FEED */ .media-section { padding: 1rem; } .media-container { width: 100%; height: 100%; min-height: 450px; display: flex; flex-direction: column; align-items: center; justify-content: center; position: relative; border-radius: 14px; overflow: hidden; background: #000; } .media-container.hidden { display: none; } #webcam-video, #image-preview { width: 100%; max-height: 65vh; object-fit: contain; pointer-events: none; } .bounding-boxes-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 5; } .overlay-controls { position: absolute; bottom: 20px; z-index: 10; display: flex; gap: 1rem; } .bottom-bar { background: rgba(0, 0, 0, 0.5); backdrop-filter: blur(5px); padding: 0.8rem 1.2rem; border-radius: 50px; } /* DRAG & DROP */ .drop-zone { width: 90%; height: 80%; border: 2px dashed rgba(255, 255, 255, 0.15); border-radius: 12px; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; cursor: pointer; transition: 0.3s; } .drop-zone:hover { border-color: var(--accent); background: rgba(59, 130, 246, 0.03); } .upload-icon { color: var(--text-muted); margin-bottom: 1rem; } .drop-zone h3 { font-size: 1.2rem; margin-bottom: 0.5rem; } .drop-zone p { color: var(--text-muted); font-size: 0.9rem; } .preview-area { width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; position: relative; } /* BUTTONS */ .action-btn { padding: 0.8rem 1.5rem; border: none; border-radius: 50px; font-family: 'Inter'; font-weight: 600; font-size: 0.95rem; cursor: pointer; transition: all 0.3s; } .start-pulse { background: var(--accent); color: white; box-shadow: 0 0 15px var(--accent-glow); } .start-pulse:hover { box-shadow: 0 0 25px var(--accent-glow); transform: scale(1.02); } .stop-btn { background: #ef4444; color: white; } .stop-btn:hover { background: #dc2626; box-shadow: 0 0 15px rgba(239, 68, 68, 0.4); } .primary { background: var(--accent); color: white; } .primary:hover { border: 1px solid white; } .ghost { background: rgba(255, 255, 255, 0.1); color: white; } .ghost:hover { background: rgba(255, 255, 255, 0.2); } /* RIGHT COLUMN - ANALYTICS PANEL */ .analytics-section { padding: 2.5rem; gap: 1.5rem; } .panel-header { display: flex; justify-content: space-between; align-items: center; } .panel-header h2 { font-family: 'Outfit'; font-size: 1.5rem; font-weight: 700; color: #fff; } .status-indicator { display: flex; align-items: center; gap: 0.5rem; font-size: 0.85rem; color: var(--text-muted); font-weight: 600; text-transform: uppercase; background: rgba(0, 0, 0, 0.3); padding: 0.4rem 1rem; border-radius: 50px; } .pulse-dot { width: 8px; height: 8px; border-radius: 50%; background: #22c55e; box-shadow: 0 0 8px #22c55e; animation: blink 1.5s infinite; } @keyframes blink { 50% { opacity: 0.4; } } /* Stats Grid */ .stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; } .stat-card { background: rgba(0, 0, 0, 0.2); border: 1px solid rgba(255, 255, 255, 0.05); padding: 1rem; border-radius: 12px; text-align: center; display: flex; flex-direction: column; } .stat-value { font-size: 1.8rem; font-weight: 700; font-family: 'Outfit'; color: #fff; } .stat-label { font-size: 0.75rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-top: 0.2rem; } .network-card { border-color: rgba(16, 185, 129, 0.3); background: rgba(16, 185, 129, 0.05); } .divider { border: 0; height: 1px; background: rgba(255, 255, 255, 0.08); margin: 0.5rem 0; } .section-title { font-size: 0.85rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 1rem; } /* Primary Subject */ .subject-readout { display: flex; justify-content: space-between; align-items: flex-end; } .emotion-display h2 { font-family: 'Outfit'; font-size: 3.5rem; line-height: 1; letter-spacing: 1px; text-transform: uppercase; color: #fff; } .confidence-text { color: var(--text-muted); font-weight: 500; font-size: 0.95rem; margin-top: 0.5rem; } .demographic-display { text-align: right; } .demo-badge { display: inline-block; background: rgba(236, 72, 153, 0.1); color: #ec4899; padding: 0.3rem 0.8rem; font-size: 0.7rem; font-weight: 700; text-transform: uppercase; border-radius: 5px; margin-bottom: 0.4rem; border: 1px solid rgba(236, 72, 153, 0.3); } .demographic-display h3 { font-size: 1.8rem; font-family: 'Outfit'; color: #cbd5e1; } /* Emotion Spectrum Bars */ .emotion-bars { list-style: none; display: flex; flex-direction: column; gap: 1rem; margin-top: 0.5rem; } .emotion-item { display: flex; align-items: center; gap: 1rem; } .emotion-name { width: 70px; font-weight: 600; font-size: 0.85rem; color: #cbd5e1; } .bar-track { flex: 1; height: 6px; background: rgba(0, 0, 0, 0.4); border-radius: 10px; overflow: hidden; position: relative; } .bar-fill { height: 100%; background: linear-gradient(90deg, #10b981, #0ea5e9); border-radius: 10px; width: 0%; transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1); } .emotion-value { width: 45px; text-align: right; font-size: 0.8rem; font-family: 'Outfit'; font-weight: 600; color: var(--text-muted); } .hidden { display: none !important; }