Spaces:
Sleeping
Sleeping
| /* ============================================ | |
| Dr. AI — Google Material Design 3 | |
| Premium Medical AI Interface | |
| ============================================ */ | |
| /* ---- Design Tokens ---- */ | |
| :root { | |
| /* Material Design 3 Color System */ | |
| --md-primary: #1a73e8; | |
| --md-primary-dark: #0d47a1; | |
| --md-primary-light: #4fc3f7; | |
| --md-secondary: #0288d1; | |
| --md-tertiary: #00bcd4; | |
| --md-accent: #26c6da; | |
| /* Surface Colors */ | |
| --md-surface: #0a0f1e; | |
| --md-surface-1: #111827; | |
| --md-surface-2: #1a2232; | |
| --md-surface-3: #1e2a3d; | |
| --md-surface-variant: #162032; | |
| /* Text Colors */ | |
| --md-on-surface: #e8f0fe; | |
| --md-on-surface-variant: #9aa5c0; | |
| --md-on-primary: #ffffff; | |
| /* Semantic Colors */ | |
| --severity-high: #ef4444; | |
| --severity-medium: #f59e0b; | |
| --severity-low: #10b981; | |
| --severity-normal: #10b981; | |
| /* Gradient */ | |
| --gradient-primary: linear-gradient(135deg, #1a73e8 0%, #0288d1 50%, #00bcd4 100%); | |
| --gradient-card: linear-gradient(145deg, rgba(26, 115, 232, 0.05), rgba(0, 188, 212, 0.03)); | |
| --gradient-hero: radial-gradient(ellipse at 30% 50%, rgba(26, 115, 232, 0.15) 0%, transparent 60%), | |
| radial-gradient(ellipse at 70% 20%, rgba(0, 188, 212, 0.1) 0%, transparent 50%); | |
| /* Borders */ | |
| --md-outline: rgba(26, 115, 232, 0.2); | |
| --md-outline-variant: rgba(255, 255, 255, 0.06); | |
| /* Shadows */ | |
| --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.3); | |
| --shadow-md: 0 4px 24px rgba(0, 0, 0, 0.4); | |
| --shadow-lg: 0 8px 48px rgba(0, 0, 0, 0.5); | |
| --shadow-primary: 0 4px 24px rgba(26, 115, 232, 0.3); | |
| /* Typography */ | |
| --font-display: 'Google Sans', 'Roboto', sans-serif; | |
| --font-body: 'Roboto', sans-serif; | |
| --font-mono: 'Roboto Mono', monospace; | |
| /* Spacing */ | |
| --space-xs: 4px; | |
| --space-sm: 8px; | |
| --space-md: 16px; | |
| --space-lg: 24px; | |
| --space-xl: 32px; | |
| --space-2xl: 48px; | |
| --space-3xl: 64px; | |
| /* Border Radius */ | |
| --radius-sm: 8px; | |
| --radius-md: 12px; | |
| --radius-lg: 16px; | |
| --radius-xl: 24px; | |
| --radius-full: 9999px; | |
| /* Transitions */ | |
| --transition-fast: 150ms cubic-bezier(0.2, 0, 0, 1); | |
| --transition-normal: 300ms cubic-bezier(0.2, 0, 0, 1); | |
| --transition-slow: 500ms cubic-bezier(0.2, 0, 0, 1); | |
| } | |
| /* ---- Reset & Base ---- */ | |
| *, *::before, *::after { | |
| box-sizing: border-box; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| html { | |
| scroll-behavior: smooth; | |
| -webkit-font-smoothing: antialiased; | |
| } | |
| body { | |
| font-family: var(--font-body); | |
| background-color: var(--md-surface); | |
| color: var(--md-on-surface); | |
| min-height: 100vh; | |
| overflow-x: hidden; | |
| line-height: 1.6; | |
| } | |
| /* ---- Animated Background ---- */ | |
| .bg-animation { | |
| position: fixed; | |
| inset: 0; | |
| pointer-events: none; | |
| z-index: 0; | |
| overflow: hidden; | |
| } | |
| .bg-orb { | |
| position: absolute; | |
| border-radius: 50%; | |
| filter: blur(80px); | |
| opacity: 0.12; | |
| animation: float-orb 20s infinite ease-in-out; | |
| } | |
| .orb-1 { | |
| width: 600px; | |
| height: 600px; | |
| background: radial-gradient(circle, #1a73e8, transparent); | |
| top: -200px; | |
| left: -200px; | |
| animation-delay: 0s; | |
| } | |
| .orb-2 { | |
| width: 500px; | |
| height: 500px; | |
| background: radial-gradient(circle, #00bcd4, transparent); | |
| top: 40%; | |
| right: -150px; | |
| animation-delay: -7s; | |
| } | |
| .orb-3 { | |
| width: 400px; | |
| height: 400px; | |
| background: radial-gradient(circle, #0288d1, transparent); | |
| bottom: 10%; | |
| left: 20%; | |
| animation-delay: -14s; | |
| } | |
| @keyframes float-orb { | |
| 0%, 100% { transform: translate(0, 0) scale(1); } | |
| 33% { transform: translate(30px, -40px) scale(1.05); } | |
| 66% { transform: translate(-20px, 30px) scale(0.95); } | |
| } | |
| /* ---- Navigation ---- */ | |
| .navbar { | |
| position: sticky; | |
| top: 0; | |
| z-index: 100; | |
| background: rgba(10, 15, 30, 0.8); | |
| backdrop-filter: blur(20px); | |
| -webkit-backdrop-filter: blur(20px); | |
| border-bottom: 1px solid var(--md-outline-variant); | |
| padding: var(--space-md) 0; | |
| } | |
| .nav-container { | |
| max-width: 1200px; | |
| margin: 0 auto; | |
| padding: 0 var(--space-xl); | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| } | |
| .nav-brand { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-md); | |
| } | |
| .brand-icon { | |
| width: 44px; | |
| height: 44px; | |
| background: var(--gradient-primary); | |
| border-radius: var(--radius-md); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| box-shadow: var(--shadow-primary); | |
| } | |
| .brand-icon .material-icons-round { | |
| color: white; | |
| font-size: 24px; | |
| } | |
| .brand-text { | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| .brand-name { | |
| font-family: var(--font-display); | |
| font-size: 20px; | |
| font-weight: 700; | |
| color: var(--md-on-surface); | |
| letter-spacing: -0.3px; | |
| } | |
| .brand-subtitle { | |
| font-size: 11px; | |
| color: var(--md-on-surface-variant); | |
| letter-spacing: 0.5px; | |
| text-transform: uppercase; | |
| } | |
| .nav-badges { | |
| display: flex; | |
| gap: var(--space-sm); | |
| } | |
| .badge { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-xs); | |
| padding: var(--space-xs) var(--space-md); | |
| border-radius: var(--radius-full); | |
| font-size: 12px; | |
| font-weight: 500; | |
| border: 1px solid; | |
| } | |
| .badge .material-icons-round { | |
| font-size: 14px; | |
| } | |
| .badge-ai { | |
| background: rgba(26, 115, 232, 0.1); | |
| border-color: rgba(26, 115, 232, 0.3); | |
| color: #60a5fa; | |
| } | |
| .badge-research { | |
| background: rgba(0, 188, 212, 0.1); | |
| border-color: rgba(0, 188, 212, 0.3); | |
| color: #22d3ee; | |
| } | |
| /* ---- Main Content ---- */ | |
| .main-content { | |
| position: relative; | |
| z-index: 1; | |
| max-width: 1200px; | |
| margin: 0 auto; | |
| padding: 0 var(--space-xl); | |
| } | |
| /* ---- Hero Section ---- */ | |
| .hero-section { | |
| display: grid; | |
| grid-template-columns: 1fr auto; | |
| gap: var(--space-3xl); | |
| align-items: center; | |
| padding: var(--space-3xl) 0 var(--space-2xl); | |
| background: var(--gradient-hero); | |
| } | |
| .hero-eyebrow { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: var(--space-sm); | |
| background: rgba(26, 115, 232, 0.12); | |
| border: 1px solid rgba(26, 115, 232, 0.25); | |
| border-radius: var(--radius-full); | |
| padding: var(--space-xs) var(--space-md); | |
| font-size: 13px; | |
| font-weight: 500; | |
| color: #60a5fa; | |
| margin-bottom: var(--space-lg); | |
| width: fit-content; | |
| } | |
| .hero-eyebrow .material-icons-round { | |
| font-size: 16px; | |
| animation: sparkle 2s infinite; | |
| } | |
| @keyframes sparkle { | |
| 0%, 100% { transform: scale(1) rotate(0deg); opacity: 1; } | |
| 50% { transform: scale(1.2) rotate(15deg); opacity: 0.8; } | |
| } | |
| .hero-title { | |
| font-family: var(--font-display); | |
| font-size: clamp(36px, 5vw, 56px); | |
| font-weight: 700; | |
| line-height: 1.15; | |
| letter-spacing: -1px; | |
| color: var(--md-on-surface); | |
| margin-bottom: var(--space-lg); | |
| } | |
| .gradient-text { | |
| background: var(--gradient-primary); | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| background-clip: text; | |
| } | |
| .hero-description { | |
| font-size: 17px; | |
| color: var(--md-on-surface-variant); | |
| max-width: 520px; | |
| line-height: 1.7; | |
| margin-bottom: var(--space-xl); | |
| } | |
| .hero-stats { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-lg); | |
| } | |
| .stat-item { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 2px; | |
| } | |
| .stat-number { | |
| font-family: var(--font-display); | |
| font-size: 24px; | |
| font-weight: 700; | |
| color: var(--md-primary); | |
| } | |
| .stat-label { | |
| font-size: 12px; | |
| color: var(--md-on-surface-variant); | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| } | |
| .stat-divider { | |
| width: 1px; | |
| height: 40px; | |
| background: var(--md-outline-variant); | |
| } | |
| /* ---- Eye Graphic ---- */ | |
| .hero-visual { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .eye-graphic { | |
| position: relative; | |
| width: 240px; | |
| height: 240px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .eye-outer { | |
| width: 180px; | |
| height: 180px; | |
| border-radius: 50%; | |
| border: 2px solid rgba(26, 115, 232, 0.3); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| animation: rotate-slow 20s linear infinite; | |
| box-shadow: 0 0 30px rgba(26, 115, 232, 0.15), inset 0 0 30px rgba(26, 115, 232, 0.05); | |
| } | |
| .eye-iris { | |
| width: 120px; | |
| height: 120px; | |
| border-radius: 50%; | |
| background: radial-gradient(circle at 35% 35%, #1565c0, #0d47a1, #01579b); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| box-shadow: 0 0 40px rgba(26, 115, 232, 0.5); | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .eye-pupil { | |
| width: 50px; | |
| height: 50px; | |
| border-radius: 50%; | |
| background: radial-gradient(circle at 30% 30%, #1a1a2e, #0a0a1a); | |
| position: relative; | |
| overflow: hidden; | |
| box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.5); | |
| } | |
| .eye-scan-line { | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| height: 2px; | |
| background: linear-gradient(90deg, transparent, #00e5ff, transparent); | |
| animation: scan-eye 2s ease-in-out infinite; | |
| } | |
| @keyframes scan-eye { | |
| 0% { top: 0; opacity: 0; } | |
| 20% { opacity: 1; } | |
| 80% { opacity: 1; } | |
| 100% { top: 100%; opacity: 0; } | |
| } | |
| .eye-ring { | |
| position: absolute; | |
| border-radius: 50%; | |
| border: 1px solid rgba(26, 115, 232, 0.2); | |
| animation: pulse-ring 3s ease-in-out infinite; | |
| } | |
| .ring-1 { | |
| width: 130px; | |
| height: 130px; | |
| top: -5px; | |
| left: -5px; | |
| animation-delay: 0s; | |
| } | |
| .ring-2 { | |
| width: 150px; | |
| height: 150px; | |
| top: -15px; | |
| left: -15px; | |
| animation-delay: 0.5s; | |
| } | |
| .ring-3 { | |
| width: 170px; | |
| height: 170px; | |
| top: -25px; | |
| left: -25px; | |
| animation-delay: 1s; | |
| } | |
| @keyframes pulse-ring { | |
| 0%, 100% { opacity: 0.2; transform: scale(1); } | |
| 50% { opacity: 0.6; transform: scale(1.02); } | |
| } | |
| @keyframes rotate-slow { | |
| from { transform: rotate(0deg); } | |
| to { transform: rotate(360deg); } | |
| } | |
| .scan-particles { | |
| position: absolute; | |
| inset: 0; | |
| animation: rotate-slow 8s linear infinite reverse; | |
| } | |
| .particle { | |
| position: absolute; | |
| width: 4px; | |
| height: 4px; | |
| border-radius: 50%; | |
| background: #00e5ff; | |
| box-shadow: 0 0 6px #00e5ff; | |
| } | |
| .particle:nth-child(1) { top: 10px; left: 50%; animation: blink 2s infinite 0s; } | |
| .particle:nth-child(2) { top: 50%; right: 10px; animation: blink 2s infinite 0.3s; } | |
| .particle:nth-child(3) { bottom: 10px; left: 50%; animation: blink 2s infinite 0.6s; } | |
| .particle:nth-child(4) { top: 50%; left: 10px; animation: blink 2s infinite 0.9s; } | |
| .particle:nth-child(5) { top: 25px; right: 25px; animation: blink 2s infinite 1.2s; } | |
| .particle:nth-child(6) { bottom: 25px; left: 25px; animation: blink 2s infinite 1.5s; } | |
| @keyframes blink { | |
| 0%, 100% { opacity: 0.3; transform: scale(0.8); } | |
| 50% { opacity: 1; transform: scale(1.2); } | |
| } | |
| /* ---- Disclaimer Banner ---- */ | |
| .disclaimer-banner { | |
| display: flex; | |
| align-items: flex-start; | |
| gap: var(--space-md); | |
| background: rgba(245, 158, 11, 0.08); | |
| border: 1px solid rgba(245, 158, 11, 0.2); | |
| border-radius: var(--radius-lg); | |
| padding: var(--space-md) var(--space-lg); | |
| margin-bottom: var(--space-2xl); | |
| color: #fcd34d; | |
| } | |
| .disclaimer-banner .material-icons-round { | |
| font-size: 20px; | |
| flex-shrink: 0; | |
| margin-top: 2px; | |
| } | |
| .disclaimer-banner p { | |
| font-size: 14px; | |
| line-height: 1.5; | |
| } | |
| /* ---- Section Headers ---- */ | |
| .section-header { | |
| margin-bottom: var(--space-xl); | |
| text-align: center; | |
| } | |
| .section-title { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: var(--space-sm); | |
| font-family: var(--font-display); | |
| font-size: 24px; | |
| font-weight: 600; | |
| color: var(--md-on-surface); | |
| margin-bottom: var(--space-sm); | |
| } | |
| .section-title .material-icons-round { | |
| color: var(--md-primary); | |
| } | |
| .section-subtitle { | |
| color: var(--md-on-surface-variant); | |
| font-size: 15px; | |
| } | |
| /* ---- Upload Section ---- */ | |
| .upload-section { | |
| margin-bottom: var(--space-2xl); | |
| } | |
| .upload-card { | |
| background: var(--gradient-card); | |
| border: 1px solid var(--md-outline-variant); | |
| border-radius: var(--radius-xl); | |
| padding: var(--space-lg); | |
| backdrop-filter: blur(10px); | |
| box-shadow: var(--shadow-md); | |
| transition: box-shadow var(--transition-normal); | |
| } | |
| .upload-card:hover { | |
| box-shadow: var(--shadow-lg); | |
| } | |
| .upload-zone { | |
| border: 2px dashed rgba(26, 115, 232, 0.3); | |
| border-radius: var(--radius-lg); | |
| padding: var(--space-3xl) var(--space-xl); | |
| cursor: pointer; | |
| transition: all var(--transition-normal); | |
| position: relative; | |
| overflow: hidden; | |
| background: rgba(26, 115, 232, 0.02); | |
| min-height: 300px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .upload-zone::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background: radial-gradient(circle at 50% 50%, rgba(26, 115, 232, 0.05), transparent 70%); | |
| opacity: 0; | |
| transition: opacity var(--transition-normal); | |
| } | |
| .upload-zone:hover::before, | |
| .upload-zone.drag-over::before { | |
| opacity: 1; | |
| } | |
| .upload-zone:hover, | |
| .upload-zone.drag-over { | |
| border-color: rgba(26, 115, 232, 0.6); | |
| background: rgba(26, 115, 232, 0.04); | |
| } | |
| .upload-zone.drag-over { | |
| border-color: var(--md-primary); | |
| border-style: solid; | |
| transform: scale(1.01); | |
| } | |
| .upload-idle { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: var(--space-md); | |
| text-align: center; | |
| pointer-events: none; | |
| } | |
| .upload-icon-wrapper { | |
| position: relative; | |
| width: 96px; | |
| height: 96px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .upload-icon-bg { | |
| position: absolute; | |
| inset: 0; | |
| border-radius: 50%; | |
| background: radial-gradient(circle, rgba(26, 115, 232, 0.15), rgba(26, 115, 232, 0.05)); | |
| animation: pulse-icon 3s ease-in-out infinite; | |
| } | |
| @keyframes pulse-icon { | |
| 0%, 100% { transform: scale(1); opacity: 0.7; } | |
| 50% { transform: scale(1.1); opacity: 1; } | |
| } | |
| .upload-icon { | |
| font-size: 48px; | |
| color: var(--md-primary); | |
| position: relative; | |
| z-index: 1; | |
| } | |
| .upload-title { | |
| font-family: var(--font-display); | |
| font-size: 20px; | |
| font-weight: 600; | |
| color: var(--md-on-surface); | |
| } | |
| .upload-hint { | |
| color: var(--md-on-surface-variant); | |
| font-size: 14px; | |
| } | |
| .upload-formats { | |
| display: flex; | |
| gap: var(--space-sm); | |
| flex-wrap: wrap; | |
| justify-content: center; | |
| } | |
| .format-tag { | |
| background: rgba(26, 115, 232, 0.1); | |
| border: 1px solid rgba(26, 115, 232, 0.2); | |
| border-radius: var(--radius-sm); | |
| padding: 2px 10px; | |
| font-size: 12px; | |
| font-weight: 500; | |
| font-family: var(--font-mono); | |
| color: #60a5fa; | |
| } | |
| .upload-size-hint { | |
| font-size: 12px; | |
| color: var(--md-on-surface-variant); | |
| opacity: 0.7; | |
| } | |
| /* ---- Upload Preview ---- */ | |
| .upload-preview { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: var(--space-lg); | |
| width: 100%; | |
| } | |
| .preview-image-wrapper { | |
| position: relative; | |
| border-radius: var(--radius-lg); | |
| overflow: hidden; | |
| max-width: 380px; | |
| box-shadow: var(--shadow-md); | |
| } | |
| .preview-image { | |
| width: 100%; | |
| max-height: 280px; | |
| object-fit: cover; | |
| display: block; | |
| border-radius: var(--radius-lg); | |
| } | |
| .preview-overlay { | |
| position: absolute; | |
| inset: 0; | |
| background: rgba(0, 0, 0, 0); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| transition: background var(--transition-normal); | |
| } | |
| .preview-image-wrapper:hover .preview-overlay { | |
| background: rgba(0, 0, 0, 0.5); | |
| } | |
| .change-image-btn { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-sm); | |
| background: white; | |
| color: #1a1a2e; | |
| border: none; | |
| border-radius: var(--radius-full); | |
| padding: var(--space-sm) var(--space-lg); | |
| font-size: 14px; | |
| font-weight: 600; | |
| cursor: pointer; | |
| opacity: 0; | |
| transform: translateY(10px); | |
| transition: all var(--transition-normal); | |
| } | |
| .change-image-btn .material-icons-round { | |
| font-size: 18px; | |
| } | |
| .preview-image-wrapper:hover .change-image-btn { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| .preview-info { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-md); | |
| color: var(--md-on-surface-variant); | |
| font-size: 13px; | |
| } | |
| .preview-filename { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-xs); | |
| } | |
| .preview-filename .material-icons-round { | |
| font-size: 16px; | |
| color: var(--md-primary); | |
| } | |
| /* ---- Upload Actions ---- */ | |
| .upload-actions { | |
| display: flex; | |
| justify-content: center; | |
| gap: var(--space-md); | |
| margin-top: var(--space-lg); | |
| } | |
| /* ---- Buttons ---- */ | |
| .btn-primary { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-sm); | |
| background: var(--gradient-primary); | |
| color: white; | |
| border: none; | |
| border-radius: var(--radius-full); | |
| padding: 14px 32px; | |
| font-family: var(--font-display); | |
| font-size: 15px; | |
| font-weight: 600; | |
| cursor: pointer; | |
| position: relative; | |
| overflow: hidden; | |
| transition: all var(--transition-normal); | |
| box-shadow: var(--shadow-primary); | |
| letter-spacing: 0.3px; | |
| } | |
| .btn-primary:disabled { | |
| opacity: 0.4; | |
| cursor: not-allowed; | |
| box-shadow: none; | |
| } | |
| .btn-primary:not(:disabled):hover { | |
| transform: translateY(-2px); | |
| box-shadow: 0 8px 32px rgba(26, 115, 232, 0.5); | |
| } | |
| .btn-primary:not(:disabled):active { | |
| transform: translateY(0); | |
| } | |
| .btn-primary .material-icons-round { | |
| font-size: 20px; | |
| } | |
| .btn-primary.loading .btn-text::after { | |
| content: '...'; | |
| animation: dots 1.5s infinite; | |
| } | |
| @keyframes dots { | |
| 0%, 20% { content: '.'; } | |
| 40% { content: '..'; } | |
| 60%, 100% { content: '...'; } | |
| } | |
| .btn-ripple { | |
| position: absolute; | |
| inset: 0; | |
| background: radial-gradient(circle, rgba(255,255,255,0.3) 0%, transparent 70%); | |
| opacity: 0; | |
| transition: opacity var(--transition-fast); | |
| } | |
| .btn-primary:active .btn-ripple { | |
| opacity: 1; | |
| } | |
| .btn-secondary { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-sm); | |
| background: rgba(255, 255, 255, 0.06); | |
| color: var(--md-on-surface-variant); | |
| border: 1px solid var(--md-outline-variant); | |
| border-radius: var(--radius-full); | |
| padding: 13px 24px; | |
| font-family: var(--font-display); | |
| font-size: 14px; | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: all var(--transition-normal); | |
| } | |
| .btn-secondary:hover { | |
| background: rgba(255, 255, 255, 0.1); | |
| border-color: rgba(255, 255, 255, 0.2); | |
| color: var(--md-on-surface); | |
| } | |
| .btn-secondary .material-icons-round { | |
| font-size: 18px; | |
| } | |
| /* ---- Loading Section ---- */ | |
| .loading-section { | |
| margin-bottom: var(--space-2xl); | |
| } | |
| .loading-card { | |
| background: var(--gradient-card); | |
| border: 1px solid var(--md-outline-variant); | |
| border-radius: var(--radius-xl); | |
| padding: var(--space-3xl) var(--space-xl); | |
| backdrop-filter: blur(10px); | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: var(--space-xl); | |
| box-shadow: var(--shadow-md); | |
| } | |
| .loading-visual { | |
| position: relative; | |
| width: 120px; | |
| height: 120px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .loading-eye { | |
| position: relative; | |
| width: 100px; | |
| height: 100px; | |
| } | |
| .loading-iris { | |
| width: 100%; | |
| height: 100%; | |
| border-radius: 50%; | |
| background: radial-gradient(circle, #1565c0, #0d47a1); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| animation: iris-pulse 1.5s ease-in-out infinite; | |
| box-shadow: 0 0 40px rgba(26, 115, 232, 0.6); | |
| } | |
| @keyframes iris-pulse { | |
| 0%, 100% { transform: scale(1); box-shadow: 0 0 40px rgba(26, 115, 232, 0.6); } | |
| 50% { transform: scale(1.05); box-shadow: 0 0 60px rgba(26, 115, 232, 0.8); } | |
| } | |
| .loading-pupil { | |
| width: 40px; | |
| height: 40px; | |
| border-radius: 50%; | |
| background: #0a0a1a; | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .loading-pupil::after { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| height: 3px; | |
| background: linear-gradient(90deg, transparent, #00e5ff, transparent); | |
| animation: scan-eye 1.5s ease-in-out infinite; | |
| } | |
| .loading-scan { | |
| position: absolute; | |
| inset: -10px; | |
| border-radius: 50%; | |
| border: 2px solid transparent; | |
| border-top-color: #1a73e8; | |
| border-right-color: #1a73e8; | |
| animation: spin 1s linear infinite; | |
| } | |
| @keyframes spin { | |
| from { transform: rotate(0deg); } | |
| to { transform: rotate(360deg); } | |
| } | |
| .loading-text { | |
| text-align: center; | |
| } | |
| .loading-title { | |
| font-family: var(--font-display); | |
| font-size: 20px; | |
| font-weight: 600; | |
| color: var(--md-on-surface); | |
| margin-bottom: var(--space-sm); | |
| } | |
| .loading-subtitle { | |
| color: var(--md-on-surface-variant); | |
| font-size: 14px; | |
| transition: color var(--transition-normal); | |
| } | |
| .loading-steps { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-sm); | |
| } | |
| .loading-step { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-xs); | |
| font-size: 13px; | |
| color: var(--md-on-surface-variant); | |
| transition: color var(--transition-normal); | |
| } | |
| .loading-step.active { | |
| color: var(--md-primary); | |
| } | |
| .loading-step.done { | |
| color: var(--severity-normal); | |
| } | |
| .step-dot { | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| background: var(--md-outline-variant); | |
| transition: all var(--transition-normal); | |
| flex-shrink: 0; | |
| } | |
| .loading-step.active .step-dot { | |
| background: var(--md-primary); | |
| animation: pulse-dot 1s ease-in-out infinite; | |
| } | |
| .loading-step.done .step-dot { | |
| background: var(--severity-normal); | |
| } | |
| @keyframes pulse-dot { | |
| 0%, 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(26, 115, 232, 0.4); } | |
| 50% { transform: scale(1.2); box-shadow: 0 0 0 6px rgba(26, 115, 232, 0); } | |
| } | |
| .step-connector { | |
| width: 40px; | |
| height: 2px; | |
| background: var(--md-outline-variant); | |
| flex-shrink: 0; | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .loading-bar-wrapper { | |
| width: 100%; | |
| max-width: 400px; | |
| } | |
| .loading-bar { | |
| height: 4px; | |
| background: rgba(26, 115, 232, 0.15); | |
| border-radius: var(--radius-full); | |
| overflow: hidden; | |
| } | |
| .loading-bar-fill { | |
| height: 100%; | |
| background: var(--gradient-primary); | |
| border-radius: var(--radius-full); | |
| transition: width 0.5s ease; | |
| width: 0%; | |
| } | |
| /* ---- Results Section ---- */ | |
| .results-section { | |
| margin-bottom: var(--space-2xl); | |
| animation: fade-in-up 0.5s ease-out; | |
| } | |
| @keyframes fade-in-up { | |
| from { opacity: 0; transform: translateY(20px); } | |
| to { opacity: 1; transform: translateY(0); } | |
| } | |
| .results-header { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| margin-bottom: var(--space-xl); | |
| gap: var(--space-md); | |
| } | |
| .results-title-group .section-title { | |
| justify-content: flex-start; | |
| margin-bottom: var(--space-xs); | |
| } | |
| /* ---- Diagnosis Card ---- */ | |
| .diagnosis-card { | |
| background: var(--gradient-card); | |
| border: 1px solid var(--md-outline-variant); | |
| border-radius: var(--radius-xl); | |
| padding: var(--space-xl); | |
| margin-bottom: var(--space-xl); | |
| backdrop-filter: blur(10px); | |
| box-shadow: var(--shadow-md); | |
| overflow: hidden; | |
| position: relative; | |
| } | |
| .diagnosis-card::before { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| height: 3px; | |
| background: var(--gradient-primary); | |
| } | |
| .diagnosis-header { | |
| display: grid; | |
| grid-template-columns: auto 1fr auto; | |
| gap: var(--space-lg); | |
| align-items: start; | |
| margin-bottom: var(--space-lg); | |
| } | |
| .diagnosis-icon { | |
| font-size: 48px; | |
| width: 72px; | |
| height: 72px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| background: rgba(26, 115, 232, 0.1); | |
| border-radius: var(--radius-xl); | |
| border: 1px solid rgba(26, 115, 232, 0.2); | |
| } | |
| .diagnosis-info { | |
| flex: 1; | |
| } | |
| .diagnosis-label { | |
| font-size: 12px; | |
| font-weight: 500; | |
| color: var(--md-on-surface-variant); | |
| text-transform: uppercase; | |
| letter-spacing: 0.8px; | |
| margin-bottom: var(--space-xs); | |
| } | |
| .diagnosis-name { | |
| font-family: var(--font-display); | |
| font-size: 26px; | |
| font-weight: 700; | |
| color: var(--md-on-surface); | |
| margin-bottom: var(--space-md); | |
| } | |
| .diagnosis-meta { | |
| display: flex; | |
| gap: var(--space-md); | |
| flex-wrap: wrap; | |
| } | |
| .confidence-badge { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-xs); | |
| background: rgba(26, 115, 232, 0.1); | |
| border: 1px solid rgba(26, 115, 232, 0.25); | |
| border-radius: var(--radius-full); | |
| padding: var(--space-xs) var(--space-md); | |
| font-size: 13px; | |
| font-weight: 600; | |
| color: #60a5fa; | |
| } | |
| .confidence-badge .material-icons-round { | |
| font-size: 16px; | |
| } | |
| .severity-badge { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-xs); | |
| border-radius: var(--radius-full); | |
| padding: var(--space-xs) var(--space-md); | |
| font-size: 13px; | |
| font-weight: 600; | |
| } | |
| .severity-badge.severity-HIGH { | |
| background: rgba(239, 68, 68, 0.1); | |
| border: 1px solid rgba(239, 68, 68, 0.25); | |
| color: #f87171; | |
| } | |
| .severity-badge.severity-MEDIUM { | |
| background: rgba(245, 158, 11, 0.1); | |
| border: 1px solid rgba(245, 158, 11, 0.25); | |
| color: #fcd34d; | |
| } | |
| .severity-badge.severity-LOW, | |
| .severity-badge.severity-NORMAL { | |
| background: rgba(16, 185, 129, 0.1); | |
| border: 1px solid rgba(16, 185, 129, 0.25); | |
| color: #6ee7b7; | |
| } | |
| .severity-badge .material-icons-round { | |
| font-size: 16px; | |
| } | |
| .analyzed-image-wrapper { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: var(--space-sm); | |
| } | |
| .analyzed-image { | |
| width: 120px; | |
| height: 120px; | |
| border-radius: var(--radius-lg); | |
| object-fit: cover; | |
| border: 2px solid var(--md-outline); | |
| box-shadow: var(--shadow-sm); | |
| } | |
| .image-label { | |
| font-size: 11px; | |
| color: var(--md-on-surface-variant); | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| } | |
| .diagnosis-description { | |
| background: rgba(255, 255, 255, 0.03); | |
| border: 1px solid var(--md-outline-variant); | |
| border-radius: var(--radius-md); | |
| padding: var(--space-md) var(--space-lg); | |
| font-size: 14px; | |
| line-height: 1.7; | |
| color: var(--md-on-surface-variant); | |
| } | |
| /* ---- Results Grid ---- */ | |
| .results-grid { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: var(--space-xl); | |
| margin-bottom: var(--space-xl); | |
| } | |
| /* ---- Probability Card ---- */ | |
| .probability-card, | |
| .recommendations-card { | |
| background: var(--gradient-card); | |
| border: 1px solid var(--md-outline-variant); | |
| border-radius: var(--radius-xl); | |
| padding: var(--space-xl); | |
| backdrop-filter: blur(10px); | |
| box-shadow: var(--shadow-md); | |
| } | |
| .card-title { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-sm); | |
| font-family: var(--font-display); | |
| font-size: 16px; | |
| font-weight: 600; | |
| color: var(--md-on-surface); | |
| margin-bottom: var(--space-lg); | |
| } | |
| .card-title .material-icons-round { | |
| color: var(--md-primary); | |
| font-size: 20px; | |
| } | |
| .probability-list { | |
| display: flex; | |
| flex-direction: column; | |
| gap: var(--space-md); | |
| } | |
| .probability-item { | |
| display: flex; | |
| flex-direction: column; | |
| gap: var(--space-xs); | |
| } | |
| .probability-label-row { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| } | |
| .probability-label { | |
| font-size: 13px; | |
| font-weight: 500; | |
| color: var(--md-on-surface); | |
| } | |
| .probability-score { | |
| font-family: var(--font-mono); | |
| font-size: 13px; | |
| font-weight: 600; | |
| color: var(--md-primary); | |
| } | |
| .probability-bar { | |
| height: 6px; | |
| background: rgba(255, 255, 255, 0.06); | |
| border-radius: var(--radius-full); | |
| overflow: hidden; | |
| } | |
| .probability-bar-fill { | |
| height: 100%; | |
| border-radius: var(--radius-full); | |
| transition: width 0.8s cubic-bezier(0.34, 1.56, 0.64, 1); | |
| width: 0%; | |
| } | |
| .probability-item.top .probability-bar-fill { | |
| background: var(--gradient-primary); | |
| } | |
| .probability-item:not(.top) .probability-bar-fill { | |
| background: rgba(26, 115, 232, 0.4); | |
| } | |
| /* ---- Recommendations ---- */ | |
| .recommendations-list { | |
| list-style: none; | |
| display: flex; | |
| flex-direction: column; | |
| gap: var(--space-md); | |
| margin-bottom: var(--space-lg); | |
| } | |
| .recommendations-list li { | |
| display: flex; | |
| align-items: flex-start; | |
| gap: var(--space-md); | |
| font-size: 14px; | |
| color: var(--md-on-surface-variant); | |
| line-height: 1.5; | |
| } | |
| .rec-icon { | |
| width: 28px; | |
| height: 28px; | |
| border-radius: 50%; | |
| background: rgba(26, 115, 232, 0.1); | |
| border: 1px solid rgba(26, 115, 232, 0.2); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| flex-shrink: 0; | |
| margin-top: 1px; | |
| } | |
| .rec-icon .material-icons-round { | |
| font-size: 14px; | |
| color: var(--md-primary); | |
| } | |
| .disclaimer-box { | |
| display: flex; | |
| gap: var(--space-sm); | |
| background: rgba(245, 158, 11, 0.06); | |
| border: 1px solid rgba(245, 158, 11, 0.15); | |
| border-radius: var(--radius-md); | |
| padding: var(--space-md); | |
| font-size: 12px; | |
| color: #fcd34d; | |
| line-height: 1.5; | |
| } | |
| .disclaimer-box .material-icons-round { | |
| font-size: 16px; | |
| flex-shrink: 0; | |
| margin-top: 1px; | |
| } | |
| /* ---- Analysis Note ---- */ | |
| .analysis-note { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-md); | |
| background: rgba(26, 115, 232, 0.05); | |
| border: 1px solid rgba(26, 115, 232, 0.1); | |
| border-radius: var(--radius-lg); | |
| padding: var(--space-md) var(--space-lg); | |
| color: var(--md-on-surface-variant); | |
| font-size: 13px; | |
| } | |
| .analysis-note .material-icons-round { | |
| color: var(--md-primary); | |
| font-size: 20px; | |
| flex-shrink: 0; | |
| } | |
| /* ---- Error Toast ---- */ | |
| .error-toast { | |
| position: fixed; | |
| bottom: var(--space-xl); | |
| left: 50%; | |
| transform: translateX(-50%); | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-md); | |
| background: #1e1015; | |
| border: 1px solid rgba(239, 68, 68, 0.3); | |
| border-radius: var(--radius-full); | |
| padding: var(--space-md) var(--space-lg); | |
| box-shadow: var(--shadow-lg); | |
| z-index: 1000; | |
| max-width: 500px; | |
| width: calc(100% - 48px); | |
| animation: slide-up 0.3s ease-out; | |
| color: #f87171; | |
| font-size: 14px; | |
| } | |
| .error-toast .material-icons-round:first-child { | |
| font-size: 20px; | |
| flex-shrink: 0; | |
| } | |
| .error-toast p { | |
| flex: 1; | |
| } | |
| .error-toast button { | |
| background: none; | |
| border: none; | |
| cursor: pointer; | |
| color: var(--md-on-surface-variant); | |
| display: flex; | |
| padding: 4px; | |
| border-radius: 50%; | |
| transition: background var(--transition-fast); | |
| } | |
| .error-toast button:hover { | |
| background: rgba(255, 255, 255, 0.1); | |
| } | |
| .error-toast button .material-icons-round { | |
| font-size: 18px; | |
| } | |
| @keyframes slide-up { | |
| from { transform: translateX(-50%) translateY(20px); opacity: 0; } | |
| to { transform: translateX(-50%) translateY(0); opacity: 1; } | |
| } | |
| /* ---- Conditions Section ---- */ | |
| .conditions-section { | |
| margin-bottom: var(--space-3xl); | |
| } | |
| .conditions-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); | |
| gap: var(--space-lg); | |
| } | |
| .condition-card { | |
| background: var(--gradient-card); | |
| border: 1px solid var(--md-outline-variant); | |
| border-radius: var(--radius-xl); | |
| padding: var(--space-xl); | |
| cursor: pointer; | |
| transition: all var(--transition-normal); | |
| display: flex; | |
| flex-direction: column; | |
| gap: var(--space-md); | |
| backdrop-filter: blur(10px); | |
| } | |
| .condition-card:hover, | |
| .condition-card:focus { | |
| transform: translateY(-4px); | |
| border-color: rgba(26, 115, 232, 0.3); | |
| box-shadow: var(--shadow-primary); | |
| outline: none; | |
| } | |
| .condition-icon { | |
| font-size: 36px; | |
| width: 64px; | |
| height: 64px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| border-radius: var(--radius-lg); | |
| } | |
| .condition-high { | |
| background: rgba(239, 68, 68, 0.08); | |
| border: 1px solid rgba(239, 68, 68, 0.15); | |
| } | |
| .condition-medium { | |
| background: rgba(245, 158, 11, 0.08); | |
| border: 1px solid rgba(245, 158, 11, 0.15); | |
| } | |
| .condition-normal { | |
| background: rgba(16, 185, 129, 0.08); | |
| border: 1px solid rgba(16, 185, 129, 0.15); | |
| } | |
| .condition-name { | |
| font-family: var(--font-display); | |
| font-size: 15px; | |
| font-weight: 600; | |
| color: var(--md-on-surface); | |
| } | |
| .condition-desc { | |
| font-size: 13px; | |
| color: var(--md-on-surface-variant); | |
| line-height: 1.5; | |
| flex: 1; | |
| } | |
| .condition-severity { | |
| display: inline-flex; | |
| align-items: center; | |
| border-radius: var(--radius-full); | |
| padding: 3px 12px; | |
| font-size: 11px; | |
| font-weight: 600; | |
| letter-spacing: 0.3px; | |
| width: fit-content; | |
| } | |
| .severity-high { | |
| background: rgba(239, 68, 68, 0.1); | |
| color: #f87171; | |
| border: 1px solid rgba(239, 68, 68, 0.2); | |
| } | |
| .severity-medium { | |
| background: rgba(245, 158, 11, 0.1); | |
| color: #fcd34d; | |
| border: 1px solid rgba(245, 158, 11, 0.2); | |
| } | |
| .severity-normal { | |
| background: rgba(16, 185, 129, 0.1); | |
| color: #6ee7b7; | |
| border: 1px solid rgba(16, 185, 129, 0.2); | |
| } | |
| /* ---- Footer ---- */ | |
| .footer { | |
| background: var(--md-surface-1); | |
| border-top: 1px solid var(--md-outline-variant); | |
| padding: var(--space-2xl) 0; | |
| } | |
| .footer-container { | |
| max-width: 1200px; | |
| margin: 0 auto; | |
| padding: 0 var(--space-xl); | |
| text-align: center; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: var(--space-md); | |
| } | |
| .footer-brand { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-sm); | |
| font-family: var(--font-display); | |
| font-size: 18px; | |
| font-weight: 700; | |
| color: var(--md-primary); | |
| } | |
| .footer-brand .material-icons-round { | |
| font-size: 22px; | |
| } | |
| .footer-tagline { | |
| font-size: 14px; | |
| color: var(--md-on-surface-variant); | |
| } | |
| .footer-disclaimer { | |
| font-size: 12px; | |
| color: #fcd34d; | |
| opacity: 0.8; | |
| } | |
| .footer-tech { | |
| display: flex; | |
| align-items: center; | |
| gap: var(--space-md); | |
| font-size: 12px; | |
| color: var(--md-on-surface-variant); | |
| opacity: 0.6; | |
| } | |
| /* ---- Responsive Design ---- */ | |
| @media (max-width: 900px) { | |
| .hero-section { | |
| grid-template-columns: 1fr; | |
| text-align: center; | |
| } | |
| .hero-visual { | |
| order: -1; | |
| } | |
| .hero-eyebrow { | |
| margin: 0 auto var(--space-lg); | |
| } | |
| .hero-description { | |
| margin: 0 auto var(--space-xl); | |
| } | |
| .hero-stats { | |
| justify-content: center; | |
| } | |
| .results-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| .diagnosis-header { | |
| grid-template-columns: auto 1fr; | |
| } | |
| .analyzed-image-wrapper { | |
| display: none; | |
| } | |
| } | |
| @media (max-width: 640px) { | |
| .main-content { | |
| padding: 0 var(--space-md); | |
| } | |
| .nav-container { | |
| padding: 0 var(--space-md); | |
| } | |
| .nav-badges { | |
| display: none; | |
| } | |
| .hero-section { | |
| padding: var(--space-2xl) 0; | |
| } | |
| .eye-graphic { | |
| width: 160px; | |
| height: 160px; | |
| } | |
| .eye-outer { | |
| width: 120px; | |
| height: 120px; | |
| } | |
| .eye-iris { | |
| width: 80px; | |
| height: 80px; | |
| } | |
| .conditions-grid { | |
| grid-template-columns: 1fr 1fr; | |
| } | |
| .results-header { | |
| flex-direction: column; | |
| align-items: flex-start; | |
| } | |
| .loading-steps { | |
| flex-direction: column; | |
| gap: var(--space-sm); | |
| } | |
| .step-connector { | |
| width: 2px; | |
| height: 20px; | |
| } | |
| } | |
| /* ---- Utility Classes ---- */ | |
| [hidden] { | |
| display: none ; | |
| } | |
| .fade-in { | |
| animation: fade-in-up 0.4s ease-out forwards; | |
| } | |