dr_ai_project / static /styles.css
Gokul-G1
🚀 Initial deployment: Dr. AI Eye & Retinal Disease Detection
408adba
Raw
History Blame Contribute Delete
35.7 kB
/* ============================================
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 !important;
}
.fade-in {
animation: fade-in-up 0.4s ease-out forwards;
}