:root { --primary: #6366f1; --primary-hover: #4f46e5; --secondary: #c084fc; --bg-dark: #070b14; --card-bg: rgba(30, 41, 59, 0.4); --text-main: #f8fafc; --text-dim: #94a3b8; --glass-border: rgba(255, 255, 255, 0.08); --glow: rgba(99, 102, 241, 0.15); } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: 'Inter', system-ui, -apple-system, sans-serif; background: var(--bg-dark); color: var(--text-main); min-height: 100vh; overflow-x: hidden; background-image: radial-gradient(circle at 20% 20%, rgba(99, 102, 241, 0.1) 0%, transparent 40%), radial-gradient(circle at 80% 80%, rgba(192, 132, 252, 0.1) 0%, transparent 40%); } /* Background animated glow */ body::before { content: ''; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: url('https://grainy-gradients.vercel.app/noise.svg'); opacity: 0.15; pointer-events: none; z-index: 0; } .container { position: relative; z-index: 1; max-width: 1100px; margin: 0 auto; padding: 3rem 1.5rem; } header { text-align: center; padding-bottom: 4rem; animation: fadeInDown 0.8s ease-out; } @keyframes fadeInDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } h1 { font-size: clamp(2.5rem, 8vw, 4.5rem); font-weight: 900; letter-spacing: -0.02em; background: linear-gradient(135deg, #818cf8 0%, #c084fc 100%); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; margin-bottom: 1rem; filter: drop-shadow(0 0 10px rgba(129, 140, 248, 0.3)); } .subtitle { color: var(--text-dim); font-size: 1.25rem; max-width: 600px; margin: 0 auto; line-height: 1.6; } /* Grid Layout */ .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 2rem; margin-top: 2rem; } .card { background: var(--card-bg); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border: 1px solid var(--glass-border); border-radius: 2rem; padding: 2.5rem; transition: all 0.4s cubic-bezier(0.23, 1, 0.32, 1); text-decoration: none; color: inherit; display: flex; flex-direction: column; align-items: center; text-align: center; position: relative; overflow: hidden; } .card::after { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(135deg, rgba(255, 255, 255, 0.05) 0%, transparent 100%); pointer-events: none; } .card:hover { transform: translateY(-12px) scale(1.02); border-color: rgba(99, 102, 241, 0.3); box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5), 0 0 20px var(--glow); background: rgba(30, 41, 59, 0.6); } .card i { font-size: 3rem; margin-bottom: 1.5rem; background: linear-gradient(135deg, #6366f1, #a855f7); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; transition: transform 0.3s ease; } .card:hover i { transform: scale(1.1) rotate(5deg); } .card h3 { margin-bottom: 0.75rem; font-size: 1.75rem; font-weight: 700; } .card p { color: var(--text-dim); font-size: 1rem; line-height: 1.6; } /* Form Styles */ .form-card { background: var(--card-bg); backdrop-filter: blur(20px); border: 1px solid var(--glass-border); border-radius: 2.5rem; padding: 3rem; max-width: 700px; margin: 3rem auto; box-shadow: 0 40px 100px -20px rgba(0, 0, 0, 0.4); } .form-group { margin-bottom: 2rem; } label { display: block; margin-bottom: 0.75rem; font-weight: 600; color: var(--text-main); font-size: 1rem; } textarea, input[type="text"], input[type="file"] { width: 100%; background: rgba(15, 23, 42, 0.6); border: 1px solid var(--glass-border); border-radius: 1rem; padding: 1.25rem; color: white; font-family: inherit; font-size: 1rem; transition: all 0.3s; } textarea:focus, input[type="text"]:focus { outline: none; border-color: var(--primary); background: rgba(15, 23, 42, 0.8); box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.1); } button { background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%); color: white; border: none; padding: 1.25rem 2rem; border-radius: 1rem; font-weight: 700; font-size: 1.1rem; cursor: pointer; transition: all 0.3s; width: 100%; display: flex; align-items: center; justify-content: center; gap: 0.75rem; box-shadow: 0 10px 15px -3px rgba(99, 102, 241, 0.3); } button:hover { transform: translateY(-2px); box-shadow: 0 20px 25px -5px rgba(99, 102, 241, 0.4); filter: brightness(1.1); } button:active { transform: translateY(0); } /* Results Section */ .result-box { margin-top: 3rem; padding: 2.5rem; background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(192, 132, 252, 0.1)); border: 1px solid rgba(99, 102, 241, 0.2); border-radius: 1.5rem; animation: slideUp 0.5s ease-out; } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .back-link { display: inline-flex; align-items: center; gap: 0.5rem; margin-bottom: 2rem; color: var(--text-dim); text-decoration: none; font-weight: 500; transition: color 0.2s; } .back-link:hover { color: var(--text-main); } /* Voice Recorder UI */ .recorder-container { display: flex; flex-direction: column; align-items: center; gap: 1.5rem; margin-bottom: 2rem; } .record-btn { width: 80px; height: 80px; border-radius: 50%; background: #ef4444; border: 6px solid rgba(239, 68, 68, 0.2); color: white; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.3s; font-size: 1.5rem; } .record-btn.recording { animation: pulse 1.5s infinite; background: #dc2626; border-radius: 1rem; } @keyframes pulse { 0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.7); } 70% { transform: scale(1.05); box-shadow: 0 0 0 20px rgba(239, 68, 68, 0); } 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); } } /* Loading Overlay */ #loading-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(7, 11, 20, 0.8); backdrop-filter: blur(8px); display: none; flex-direction: column; align-items: center; justify-content: center; z-index: 1000; } .loader { width: 60px; height: 60px; border: 5px solid rgba(99, 102, 241, 0.1); border-top: 5px solid var(--primary); border-radius: 50%; animation: spin 1s linear infinite; margin-bottom: 1.5rem; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Image Preview */ #preview-container { width: 100%; height: 300px; border-radius: 1.5rem; overflow: hidden; margin-bottom: 1.5rem; display: none; border: 2px dashed var(--glass-border); } #preview-img { width: 100%; height: 100%; object-fit: cover; } /* Confidence Meter */ .confidence-container { margin-top: 1.5rem; text-align: left; } .confidence-bar { background: rgba(15, 23, 42, 0.4); border-radius: 1rem; height: 12px; width: 100%; overflow: hidden; margin: 0.5rem 0; } .confidence-fill { background: linear-gradient(90deg, var(--primary), var(--secondary)); height: 100%; transition: width 1s cubic-bezier(0.34, 1.56, 0.64, 1); } /* Copy Button */ .copy-btn { background: rgba(255, 255, 255, 0.05); border: 1px solid var(--glass-border); color: var(--text-dim); padding: 0.5rem 1rem; border-radius: 0.75rem; font-size: 0.875rem; cursor: pointer; display: inline-flex; align-items: center; gap: 0.5rem; transition: all 0.2s; margin-bottom: 1rem; width: auto; } .copy-btn:hover { background: rgba(255, 255, 255, 0.1); color: var(--text-main); } /* Range Slider */ .slider-container { margin-bottom: 2rem; } input[type="range"] { -webkit-appearance: none; width: 100%; height: 6px; background: rgba(15, 23, 42, 0.6); border-radius: 5px; outline: none; margin: 1rem 0; } input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 20px; height: 20px; background: var(--primary); border-radius: 50%; cursor: pointer; box-shadow: 0 0 10px rgba(99, 102, 241, 0.5); } /* Floating Actions */ .floating-actions { display: flex; justify-content: flex-end; gap: 0.5rem; } /* Responsive */ @media (max-width: 768px) { .container { padding: 1.5rem 1rem; } .form-card { padding: 1.5rem; border-radius: 1.5rem; margin: 1.5rem auto; } h1 { font-size: 2rem; } .grid { grid-template-columns: 1fr; gap: 1.25rem; } .card { padding: 1.5rem; border-radius: 1.5rem; } .card h3 { font-size: 1.3rem; } button { padding: 1rem 1.5rem; font-size: 1rem; } .result-box { padding: 1.5rem; } .record-btn { width: 65px; height: 65px; } #preview-container { height: 220px; } }