/* ============================================================ DESIGN SYSTEM & THEME TOKENS (DUAL MODE GLASSMORPHISM) ============================================================ */ :root { /* DEFAULT: DARK GLASSMORPHIC MODE */ --base-bg: #070a13; --card-bg: rgba(13, 20, 38, 0.65); --border-color: rgba(99, 102, 241, 0.15); --border-hover: rgba(99, 102, 241, 0.35); /* Branding highlights */ --primary: #06b6d4; /* Neon Cyan */ --primary-light: rgba(6, 182, 212, 0.15); --primary-glow: rgba(6, 182, 212, 0.25); --secondary: #8b5cf6; /* Purple */ --secondary-glow: rgba(139, 92, 246, 0.25); --success: #10b981; --success-light: rgba(16, 185, 129, 0.15); --danger: #f43f5e; --danger-light: rgba(244, 63, 94, 0.15); --grad-primary: linear-gradient(135deg, #06b6d4 0%, #8b5cf6 100%); /* Typography */ --text-primary: #f8fafc; --text-secondary: #cbd5e1; --text-muted: #94a3b8; --text-disabled: #475569; /* Shadows */ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 20px -2px rgba(0, 0, 0, 0.5); --shadow-lg: 0 10px 30px -5px rgba(0, 0, 0, 0.7); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.8); /* Glows */ --badge-glow: 0 0 15px rgba(6, 182, 212, 0.4); --badge-bg: rgba(6, 182, 212, 0.1); --badge-border: rgba(6, 182, 212, 0.3); /* Radii */ --r-lg: 16px; --r-md: 12px; --r-sm: 8px; --r-full: 9999px; /* Transitions */ --t-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1); --t-normal: 0.25s cubic-bezier(0.4, 0, 0.2, 1); --font: 'Outfit', sans-serif; } body.light-theme { /* LIGHT MODE GLASSMORPHISM */ --base-bg: #f1f5f9; --card-bg: rgba(255, 255, 255, 0.75); --border-color: rgba(99, 102, 241, 0.12); --border-hover: rgba(99, 102, 241, 0.3); --primary: #4f46e5; /* Royal Indigo */ --primary-light: rgba(79, 70, 229, 0.08); --primary-glow: rgba(79, 70, 229, 0.15); --secondary: #7c3aed; /* Violet */ --secondary-glow: rgba(124, 58, 237, 0.15); --success: #10b981; --success-light: rgba(16, 185, 129, 0.08); --danger: #ef4444; --danger-light: rgba(239, 68, 68, 0.08); --grad-primary: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%); --text-primary: #0f172a; --text-secondary: #334155; --text-muted: #64748b; --text-disabled: #94a3b8; --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.04), 0 2px 4px -2px rgba(0, 0, 0, 0.04); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.03), 0 4px 6px -4px rgba(0, 0, 0, 0.03); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.04), 0 8px 10px -6px rgba(0, 0, 0, 0.04); --badge-glow: 0 0 12px rgba(79, 70, 229, 0.2); --badge-bg: rgba(79, 70, 229, 0.06); --badge-border: rgba(79, 70, 229, 0.2); } /* ============================================================ RESET & FUTURISTIC BASE ============================================================ */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } body { background-color: var(--base-bg); color: var(--text-primary); font-family: var(--font); min-height: 100vh; line-height: 1.5; padding: 24px; position: relative; overflow-x: hidden; transition: background-color 0.4s ease, color 0.4s ease; } /* Cyberpunk decorative background blur blobs */ .decor-orb { position: fixed; width: 550px; height: 550px; border-radius: var(--r-full); pointer-events: none; z-index: -1; filter: blur(130px); opacity: 0.35; transition: opacity 0.4s ease; } .decor-orb-cyan { background: radial-gradient(circle, rgba(6, 182, 212, 0.14) 0%, transparent 70%); top: -180px; right: -80px; animation: drift-orb 18s ease-in-out infinite alternate; } .decor-orb-purple { background: radial-gradient(circle, rgba(139, 92, 246, 0.1) 0%, transparent 70%); bottom: -120px; left: -120px; animation: drift-orb 22s ease-in-out infinite alternate-reverse; } body.light-theme .decor-orb-cyan { background: radial-gradient(circle, rgba(79, 70, 229, 0.08) 0%, transparent 70%); } body.light-theme .decor-orb-purple { background: radial-gradient(circle, rgba(124, 58, 237, 0.06) 0%, transparent 70%); } @keyframes drift-orb { 0% { transform: translate(0, 0) scale(1); } 100% { transform: translate(40px, -40px) scale(1.12); } } /* ============================================================ APP CONTAINER ============================================================ */ .app-layout { max-width: 1440px; margin: 0 auto; display: flex; flex-direction: column; gap: 24px; } /* ============================================================ HEADER NAVBAR & THERME CONTROLS ============================================================ */ .navbar { display: flex; justify-content: space-between; align-items: center; background: var(--card-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--border-color); border-radius: var(--r-lg); padding: 16px 24px; box-shadow: var(--shadow-md); transition: background-color 0.4s ease, border-color 0.4s ease; } .brand-logo { display: flex; align-items: center; gap: 12px; } .brand-icon { width: 32px; height: 32px; color: var(--primary); filter: drop-shadow(0 0 8px var(--primary-glow)); transition: color 0.4s ease; } .brand-text h1 { font-size: 1.35rem; font-weight: 800; color: var(--text-primary); line-height: 1.15; letter-spacing: -0.5px; } .brand-subtitle { font-size: 0.76rem; font-weight: 700; color: var(--primary); letter-spacing: 0.8px; text-transform: uppercase; transition: color 0.4s ease; } /* Navbar actions and badges */ .navbar-controls { display: flex; align-items: center; gap: 16px; } /* Glowing Eye-Catcher Badge */ .meta-badge-glow { background: var(--badge-bg); color: var(--primary); border: 1px solid var(--badge-border); border-radius: var(--r-full); padding: 8px 16px; font-size: 0.78rem; font-weight: 800; letter-spacing: 0.8px; text-transform: uppercase; box-shadow: var(--badge-glow); transition: all 0.4s ease; animation: pulseBadge 2.5s infinite alternate; } @keyframes pulseBadge { 0% { transform: scale(1); filter: brightness(1.0); } 100% { transform: scale(1.03); filter: brightness(1.15); } } /* Theme Switcher Toggle */ .theme-toggle-btn { width: 38px; height: 38px; border-radius: var(--r-full); border: 1px solid var(--border-color); background: rgba(255, 255, 255, 0.05); color: var(--text-primary); cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all var(--t-fast); } .theme-toggle-btn:hover { border-color: var(--border-hover); color: var(--primary); background: var(--primary-light); } .theme-toggle-btn svg { width: 18px; height: 18px; } /* ============================================================ METRICS GRID ============================================================ */ .metrics-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; } @media (max-width: 768px) { .metrics-grid { grid-template-columns: 1fr; } } .metric-card { background: var(--card-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--border-color); border-radius: var(--r-md); padding: 18px 24px; display: flex; align-items: center; gap: 16px; box-shadow: var(--shadow-sm); transition: all var(--t-normal); } .metric-card:hover { border-color: var(--border-hover); transform: translateY(-2px); box-shadow: var(--shadow-md); } .metric-icon-box { width: 44px; height: 44px; border-radius: var(--r-sm); display: flex; align-items: center; justify-content: center; } .metric-icon-box svg { width: 20px; height: 20px; } .files-icon { background: rgba(6, 182, 212, 0.12); color: var(--primary); } .clips-icon { background: rgba(139, 92, 246, 0.12); color: var(--secondary); } body.light-theme .files-icon { background: var(--primary-light); color: var(--primary); } body.light-theme .clips-icon { background: var(--secondary-glow); color: var(--secondary); } .metric-info { display: flex; flex-direction: column; } .metric-value { font-size: 1.7rem; font-weight: 850; color: var(--text-primary); line-height: 1.1; } .metric-label { font-size: 0.76rem; font-weight: 700; color: var(--text-muted); letter-spacing: 0.5px; text-transform: uppercase; margin-top: 2px; } /* ============================================================ FUTURISTIC 3-COLUMN GRID WORKSPACE ============================================================ */ .dashboard-grid-3col { display: grid; grid-template-columns: 1.1fr 1.1fr 1fr; gap: 20px; align-items: start; } @media (max-width: 1120px) { .dashboard-grid-3col { grid-template-columns: 1fr 1fr; } } @media (max-width: 768px) { .dashboard-grid-3col { grid-template-columns: 1fr; } } .workspace-column, .library-panel { background: var(--card-bg); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--border-color); border-radius: var(--r-lg); padding: 24px; box-shadow: var(--shadow-lg); transition: all 0.4s ease; } .panel-header { margin-bottom: 20px; } .panel-header h2 { font-size: 1.15rem; font-weight: 800; color: var(--text-primary); letter-spacing: -0.3px; } .panel-subtitle { font-size: 0.8rem; color: var(--text-muted); margin-top: 3px; } /* ============================================================ STEP CARD COMPONENTS (FROSTED GLASS) ============================================================ */ .step-card { background: rgba(20, 27, 48, 0.4); border: 1px solid var(--border-color); border-radius: var(--r-md); padding: 16px; margin-bottom: 16px; transition: all var(--t-fast); } body.light-theme .step-card { background: rgba(255, 255, 255, 0.45); } .step-card:hover { border-color: var(--border-hover); } .step-header { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 14px; } .step-num { width: 24px; height: 24px; border-radius: var(--r-full); background: var(--primary-light); color: var(--primary); font-size: 0.8rem; font-weight: 800; display: flex; align-items: center; justify-content: center; flex-shrink: 0; margin-top: 1px; box-shadow: 0 0 6px var(--primary-glow); } .step-title-wrap { display: flex; flex-direction: column; } .step-header h3 { font-size: 0.9rem; font-weight: 700; color: var(--text-primary); } .step-desc { font-size: 0.74rem; color: var(--text-muted); margin-top: 1px; } /* ============================================================ FORM FIELD STYLING ============================================================ */ .form-group { display: flex; flex-direction: column; gap: 6px; width: 100%; } .form-group label { font-size: 0.76rem; font-weight: 700; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.5px; } .input-with-icon { position: relative; display: flex; align-items: center; } .input-icon { position: absolute; left: 14px; width: 18px; height: 18px; color: var(--text-muted); pointer-events: none; } input[type="text"], input[type="number"], select { width: 100%; background: rgba(10, 15, 30, 0.6); border: 1px solid var(--border-color); border-radius: var(--r-sm); padding: 11px 12px; color: var(--text-primary); font-family: var(--font); font-size: 0.9rem; font-weight: 500; transition: all var(--t-fast); outline: none; } body.light-theme input[type="text"], body.light-theme input[type="number"], body.light-theme select { background: rgba(255, 255, 255, 0.8); } .input-with-icon input[type="text"] { padding-left: 44px; } input[type="text"]:focus, input[type="number"]:focus, select:focus { border-color: var(--primary); background: rgba(10, 15, 30, 0.85); box-shadow: 0 0 0 3px var(--primary-glow); } body.light-theme input[type="text"]:focus, body.light-theme input[type="number"]:focus, body.light-theme select:focus { background: #ffffff; } input::placeholder { color: var(--text-disabled); } select option { background: #0f162a; color: var(--text-primary); } body.light-theme select option { background: #ffffff; color: #1f2937; } .input-helper { font-size: 0.7rem; color: var(--text-muted); margin-top: 4px; } /* ============================================================ ASPECT RATIO CARDS ============================================================ */ .aspect-ratio-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; } .aspect-card { border: 1px solid var(--border-color); background: rgba(15, 23, 42, 0.3); border-radius: var(--r-md); padding: 12px 6px; display: flex; flex-direction: column; align-items: center; text-align: center; cursor: pointer; transition: all var(--t-normal); position: relative; } body.light-theme .aspect-card { background: rgba(255, 255, 255, 0.3); } .aspect-card input[type="radio"] { position: absolute; top: 6px; right: 6px; accent-color: var(--primary); } .aspect-card:hover { border-color: var(--border-hover); transform: translateY(-1px); } .aspect-card.selected { border-color: var(--primary); background: rgba(6, 182, 212, 0.05); } body.light-theme .aspect-card.selected { background: rgba(79, 70, 229, 0.04); } .aspect-preview { width: 100%; height: 44px; border-radius: 6px; display: flex; align-items: center; justify-content: center; background: rgba(10, 15, 30, 0.6); color: var(--text-muted); margin-bottom: 8px; transition: all var(--t-fast); } body.light-theme .aspect-preview { background: rgba(255, 255, 255, 0.6); } .aspect-card.selected .aspect-preview { background: var(--primary-light); color: var(--primary); } .aspect-preview svg { width: 20px; height: 20px; } .aspect-title { font-size: 0.78rem; font-weight: 700; color: var(--text-primary); display: block; } /* ============================================================ SEGMENT TABS ============================================================ */ .segment-tabs { display: flex; background: rgba(10, 15, 30, 0.5); padding: 4px; border-radius: var(--r-sm); border: 1px solid var(--border-color); margin-bottom: 12px; } body.light-theme .segment-tabs { background: rgba(255, 255, 255, 0.6); } .segment-tab-btn { flex: 1; display: flex; align-items: center; justify-content: center; gap: 6px; background: transparent; border: none; padding: 8px; font-family: var(--font); font-size: 0.8rem; font-weight: 700; color: var(--text-muted); cursor: pointer; border-radius: 6px; transition: all var(--t-fast); } .segment-tab-btn:hover:not(.active) { color: var(--text-primary); } .segment-tab-btn.active { background: rgba(255, 255, 255, 0.08); color: var(--primary); } body.light-theme .segment-tab-btn.active { background: #ffffff; box-shadow: var(--shadow-sm); } .tab-btn-icon { width: 14px; height: 14px; } .slicing-panel { display: none; } .slicing-panel.active { display: block; animation: slideUpFade 0.2s ease-out; } .inline-row { flex-direction: row; align-items: center; justify-content: space-between; } .input-suffix-group { display: flex; align-items: center; gap: 6px; } .input-suffix-group input { width: 70px; text-align: center; } .input-suffix { font-size: 0.8rem; font-weight: 600; color: var(--text-secondary); } /* ============================================================ iOS ACCENT GLOW TOGGLES ============================================================ */ .toggles-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 14px; } .toggle-control { display: flex; justify-content: space-between; align-items: center; background: rgba(10, 15, 30, 0.4); border: 1px solid var(--border-color); border-radius: var(--r-sm); padding: 10px 12px; cursor: pointer; position: relative; user-select: none; transition: all var(--t-fast); } body.light-theme .toggle-control { background: rgba(255, 255, 255, 0.35); } .toggle-control:hover { border-color: var(--border-hover); } .toggle-label { font-size: 0.78rem; font-weight: 700; color: var(--text-secondary); } .toggle-control input { position: absolute; opacity: 0; cursor: pointer; height: 0; width: 0; } .toggle-switch { position: relative; width: 34px; height: 18px; background-color: #334155; border-radius: var(--r-full); transition: background-color var(--t-fast); } body.light-theme .toggle-switch { background-color: #cbd5e1; } .toggle-switch::after { content: ""; position: absolute; width: 14px; height: 14px; left: 2px; top: 2px; background-color: #ffffff; border-radius: var(--r-full); transition: transform var(--t-fast); } .toggle-control input:checked ~ .toggle-switch { background-color: var(--primary); } .toggle-control input:checked ~ .toggle-switch::after { transform: translateX(16px); } .form-grid { margin-bottom: 10px; } .form-grid-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 10px; } /* ============================================================ PROGRESS BARS ============================================================ */ .progress-container { display: none; flex-direction: column; gap: 6px; background: rgba(10, 15, 30, 0.6); border: 1px solid var(--border-color); border-radius: var(--r-sm); padding: 14px; margin-bottom: 16px; } body.light-theme .progress-container { background: rgba(255, 255, 255, 0.5); } .progress-container.visible { display: flex; animation: slideUpFade 0.2s ease-out; } .progress-details { display: flex; justify-content: space-between; align-items: center; } .progress-status { font-size: 0.8rem; font-weight: 700; color: var(--primary); display: flex; align-items: center; gap: 6px; } .spinner-dot { width: 7px; height: 7px; border-radius: var(--r-full); background: var(--primary); animation: pulseGlow 1.2s ease-in-out infinite; } @keyframes pulseGlow { 0%, 100% { opacity: 0.3; transform: scale(0.8); } 50% { opacity: 1; transform: scale(1.1); } } .progress-percent { font-size: 0.8rem; font-weight: 700; color: var(--text-primary); } .progress-track { height: 5px; width: 100%; background: #1e293b; border-radius: var(--r-full); overflow: hidden; } body.light-theme .progress-track { background: #cbd5e1; } .progress-bar { height: 100%; width: 0%; background: var(--grad-primary); border-radius: var(--r-full); transition: width 0.3s ease; } /* ============================================================ SUBMIT BUTTON (NEON GLOW) ============================================================ */ .submit-button { width: 100%; background: var(--grad-primary); color: #ffffff; border: none; border-radius: var(--r-md); padding: 14px; font-family: var(--font); font-size: 0.94rem; font-weight: 800; cursor: pointer; transition: all var(--t-fast); box-shadow: 0 4px 15px var(--primary-glow); display: flex; align-items: center; justify-content: center; position: relative; } .submit-button:hover { transform: translateY(-1px); box-shadow: 0 6px 20px var(--primary-glow); filter: brightness(1.1); } .submit-button:active { transform: translateY(0); } .btn-text { display: inline-flex; align-items: center; gap: 8px; } .btn-icon { width: 15px; height: 15px; } .btn-spinner { display: none; width: 18px; height: 18px; border: 3px solid rgba(255, 255, 255, 0.3); border-radius: var(--r-full); border-top-color: #ffffff; animation: rotateSpinner 0.7s linear infinite; position: absolute; } @keyframes rotateSpinner { to { transform: rotate(360deg); } } .submit-button.loading .btn-text { opacity: 0; } .submit-button.loading .btn-spinner { display: block; } .submit-button:disabled { opacity: 0.5; cursor: not-allowed; transform: none !important; box-shadow: none !important; } body.light-theme .submit-button { background: #ffffff; color: #0f172a; border: 2.5px solid #4f46e5; box-shadow: 0 4px 12px rgba(79, 70, 229, 0.08); transition: all var(--t-fast); } body.light-theme .submit-button:hover { background: #4f46e5; color: #ffffff; box-shadow: 0 6px 18px rgba(79, 70, 229, 0.25); } body.light-theme .btn-spinner { border-top-color: #0f172a; } /* ============================================================ EXPORTED LIBRARY ============================================================ */ .library-header { display: flex; justify-content: space-between; align-items: center; } .library-actions { display: flex; gap: 6px; } .library-action-btn { width: 32px; height: 32px; border-radius: var(--r-full); border: 1px solid var(--border-color); background: rgba(15, 23, 42, 0.3); color: var(--text-muted); cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all var(--t-fast); } body.light-theme .library-action-btn { background: rgba(255, 255, 255, 0.3); } .library-action-btn svg { width: 14px; height: 14px; } .library-action-btn:hover { color: var(--primary); border-color: var(--border-hover); } .clear-btn:hover { color: var(--danger); background: var(--danger-light); border-color: rgba(244, 63, 94, 0.3); } .zip-btn:hover { color: var(--success); background: var(--success-light); border-color: rgba(16, 185, 129, 0.3); } .refresh-btn:hover svg { transform: rotate(180deg); transition: transform 0.5s ease; } /* Search bar styling */ .search-wrap { position: relative; display: flex; align-items: center; margin-bottom: 16px; } .search-icon { position: absolute; left: 14px; width: 16px; height: 16px; color: var(--text-disabled); pointer-events: none; } .search-wrap input { width: 100%; background: rgba(10, 15, 30, 0.6); border: 1px solid var(--border-color); border-radius: var(--r-sm); padding: 11px 12px 11px 38px; outline: none; font-family: var(--font); font-size: 0.86rem; font-weight: 500; color: var(--text-primary); transition: all var(--t-fast); } body.light-theme .search-wrap input { background: rgba(255, 255, 255, 0.8); } .search-wrap input:focus { border-color: var(--primary); background: rgba(10, 15, 30, 0.8); box-shadow: 0 0 0 3px var(--primary-glow); } body.light-theme .search-wrap input:focus { background: #ffffff; } /* Library List */ .library-list { display: flex; flex-direction: column; gap: 8px; max-height: 500px; overflow-y: auto; padding-right: 2px; } .library-list::-webkit-scrollbar { width: 5px; } .library-list::-webkit-scrollbar-track { background: transparent; } .library-list::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: var(--r-full); } .library-list::-webkit-scrollbar-thumb:hover { background: var(--border-hover); } /* Empty State */ .empty-library { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 40px 16px; } .empty-art { width: 40px; height: 40px; color: var(--text-disabled); margin-bottom: 12px; } .empty-art svg { width: 100%; height: 100%; } .empty-title { font-size: 0.88rem; font-weight: 700; color: var(--text-primary); } .empty-desc { font-size: 0.78rem; color: var(--text-muted); margin-top: 4px; } /* ============================================================ VIDEO CARD ITEMS ============================================================ */ .video-card { background: rgba(15, 23, 42, 0.35); border: 1px solid var(--border-color); border-left: 3px solid var(--border-hover); border-radius: var(--r-md); padding: 12px 14px; display: flex; justify-content: space-between; align-items: center; gap: 12px; transition: all var(--t-fast); } body.light-theme .video-card { background: rgba(255, 255, 255, 0.5); } .video-card:hover { border-color: var(--border-hover); border-left-color: var(--primary); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); transform: translateX(1px); } .video-card-info { display: flex; flex-direction: column; min-width: 0; flex: 1; } .video-card-title { font-size: 0.82rem; font-weight: 700; color: var(--text-primary); display: flex; align-items: center; gap: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .card-file-icon { width: 14px; height: 14px; color: var(--text-muted); flex-shrink: 0; } .video-card-meta { font-size: 0.72rem; color: var(--text-muted); margin-top: 2px; } .video-card-actions { display: flex; align-items: center; gap: 4px; } .video-card-actions .action-btn { border: none; border-radius: var(--r-sm); padding: 6px 10px; font-family: var(--font); font-size: 0.74rem; font-weight: 700; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; transition: all var(--t-fast); } .play-action { background: var(--primary-light); color: var(--primary); } .play-action svg { width: 10px; height: 10px; } .play-action:hover { background: var(--primary); color: #ffffff; } body.light-theme .play-action:hover { color: #ffffff; } .download-action { background: rgba(255, 255, 255, 0.05); color: var(--text-secondary); width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; padding: 0 !important; border: 1px solid var(--border-color); } body.light-theme .download-action { background: rgba(0, 0, 0, 0.03); } .download-action svg { width: 11px; height: 11px; } .download-action:hover { background: rgba(255, 255, 255, 0.15); color: var(--text-primary); border-color: var(--border-hover); } /* ============================================================ MODAL DIALOG (PLAYBACK) ============================================================ */ .modal { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; opacity: 0; pointer-events: none; transition: opacity var(--t-normal); } .modal.active { opacity: 1; pointer-events: auto; } .modal-overlay { position: absolute; inset: 0; background: rgba(3, 5, 10, 0.75); backdrop-filter: blur(10px); } body.light-theme .modal-overlay { background: rgba(15, 23, 42, 0.45); } .modal-content { background: #0d1222; border: 1px solid var(--border-color); border-radius: var(--r-lg); box-shadow: var(--shadow-xl); width: 90%; max-width: 700px; z-index: 1001; overflow: hidden; transform: scale(0.95) translateY(12px); transition: transform var(--t-normal); } body.light-theme .modal-content { background: #ffffff; } .modal.active .modal-content { transform: scale(1) translateY(0); } .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 14px 18px; border-bottom: 1px solid var(--border-color); } .modal-header h3 { font-size: 0.92rem; font-weight: 800; color: var(--text-primary); } .close-btn { border: 1px solid var(--border-color); background: rgba(255, 255, 255, 0.05); color: var(--text-muted); font-size: 1.2rem; width: 26px; height: 26px; border-radius: var(--r-full); cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all var(--t-fast); line-height: 1; } body.light-theme .close-btn { background: #f8fafc; } .close-btn:hover { color: var(--text-primary); border-color: var(--border-hover); transform: rotate(90deg); } .modal-body { padding: 0; background: #000000; aspect-ratio: 16/9; display: flex; } #modal-player { width: 100%; height: 100%; object-fit: contain; } /* ============================================================ TOAST SYSTEM ============================================================ */ .toast { position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%) translateY(40px); background: #0d1222; border: 1px solid var(--border-color); box-shadow: var(--shadow-xl); color: var(--text-primary); padding: 12px 20px; border-radius: var(--r-md); z-index: 2000; font-size: 0.85rem; font-weight: 600; opacity: 0; pointer-events: none; transition: all var(--t-normal) cubic-bezier(0.175, 0.885, 0.32, 1.275); max-width: 90%; width: 480px; display: flex; align-items: center; justify-content: space-between; gap: 16px; } body.light-theme .toast { background: #ffffff; } .toast.show { transform: translateX(-50%) translateY(0); opacity: 1; pointer-events: auto; } .toast-content { flex: 1; white-space: normal; word-break: break-word; line-height: 1.4; } .toast-close { background: transparent; border: none; color: var(--text-muted); cursor: pointer; font-size: 1.25rem; font-weight: 700; line-height: 1; padding: 0 4px; transition: color var(--t-fast); } .toast-close:hover { color: var(--text-primary); } .toast.success { border-left: 4px solid var(--success); } .toast.error { border-left: 4px solid var(--danger); } /* ============================================================ ANIMATIONS & LAYOUT FADE ============================================================ */ @keyframes slideUpFade { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } } /* ============================================================ FILE UPLOAD WIDGET STYLING ============================================================ */ .file-upload-wrapper { display: flex; align-items: center; gap: 12px; width: 100%; margin-top: 4px; } .file-upload-btn { background: rgba(255, 255, 255, 0.08); border: 1px dashed var(--border-color); border-radius: var(--r-sm); padding: 10px 16px; color: var(--text-primary); font-family: var(--font); font-size: 0.86rem; font-weight: 700; cursor: pointer; transition: all var(--t-fast); display: flex; align-items: center; } .file-upload-btn:hover { background: rgba(255, 255, 255, 0.15); border-color: var(--primary); } .file-name-label { font-size: 0.8rem; color: var(--text-muted); font-weight: 550; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 220px; } body.light-theme .file-upload-btn { background: rgba(0, 0, 0, 0.03); border-color: #cbd5e1; } body.light-theme .file-upload-btn:hover { background: rgba(0, 0, 0, 0.06); border-color: #4f46e5; }