/* ========================================================================== GastroGen — Modern Medical AI Dashboard Stylesheet Design System: Plus Jakarta Sans, Custom Glassmorphism, Micro-Animations ========================================================================== */ :root { --bg-app: #F8FAFC; --bg-card: #FFFFFF; --bg-sidebar: #FFFFFF; --primary: #4F46E5; --primary-hover: #4338CA; --primary-light: #EEF2FF; --primary-glow: rgba(79, 70, 229, 0.15); --accent-pink: #EC4899; --accent-pink-light: #FDF2F8; --accent-purple: #8B5CF6; --accent-purple-light: #F5F3FF; --accent-blue: #3B82F6; --accent-blue-light: #EFF6FF; --accent-orange: #F97316; --accent-orange-light: #FFF7ED; --accent-green: #10B981; --accent-green-light: #ECFDF5; --accent-teal: #06B6D4; --text-main: #0F172A; --text-muted: #64748B; --text-light: #94A3B8; --border-subtle: #E2E8F0; --border-focus: #C7D2FE; --shadow-sm: 0 1px 3px rgba(0,0,0,0.04), 0 1px 2px rgba(0,0,0,0.02); --shadow-card: 0 4px 14px 0 rgba(0, 0, 0, 0.03), 0 1px 3px 0 rgba(0, 0, 0, 0.02); --shadow-hover: 0 10px 25px -5px rgba(79, 70, 229, 0.08); --radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px; --radius-xl: 20px; --font-family: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: var(--font-family); background-color: var(--bg-app); color: var(--text-main); line-height: 1.5; -webkit-font-smoothing: antialiased; min-height: 100vh; } /* Top Header Navigation */ .top-header { display: flex; align-items: center; justify-content: space-between; background: var(--bg-card); padding: 12px 28px; border-bottom: 1px solid var(--border-subtle); position: sticky; top: 0; z-index: 100; box-shadow: var(--shadow-sm); } .brand-container { display: flex; align-items: center; gap: 12px; } .logo-icon { width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; } .brand-text { display: flex; flex-direction: column; } .brand-title { font-size: 20px; font-weight: 800; color: #0F172A; letter-spacing: -0.5px; } .brand-sub { font-size: 11px; color: var(--text-muted); font-weight: 500; } .header-center-title { text-align: center; } .header-center-title h1 { font-size: 15px; font-weight: 700; color: #0F172A; letter-spacing: -0.2px; } .header-center-title p { font-size: 11.5px; color: var(--text-muted); font-weight: 500; } .user-profile { display: flex; align-items: center; gap: 10px; cursor: pointer; padding: 6px 12px; border-radius: var(--radius-sm); transition: background 0.2s ease; } .user-profile:hover { background: var(--primary-light); } .avatar { width: 32px; height: 32px; border-radius: 50%; background: #1E293B; color: #FFFFFF; display: flex; align-items: center; justify-content: center; font-size: 13px; } .user-name { font-size: 13.5px; font-weight: 600; color: var(--text-main); } .dropdown-arrow { font-size: 11px; color: var(--text-light); } /* App Layout */ .app-layout { display: flex; min-height: calc(100vh - 65px); } /* Sidebar Navigation */ .sidebar { width: 240px; background: var(--bg-sidebar); border-right: 1px solid var(--border-subtle); display: flex; flex-direction: column; justify-content: space-between; padding: 20px 14px; position: sticky; top: 65px; height: calc(100vh - 65px); flex-shrink: 0; } .nav-menu { display: flex; flex-direction: column; gap: 6px; } .nav-item { display: flex; align-items: center; gap: 12px; padding: 10px 14px; border-radius: var(--radius-md); text-decoration: none; font-size: 13.5px; font-weight: 600; color: #475569; transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); } .nav-item i { font-size: 16px; width: 20px; text-align: center; color: #64748B; transition: color 0.2s ease; } .nav-item:hover { background: #F1F5F9; color: var(--primary); } .nav-item:hover i { color: var(--primary); } .nav-item.active { background: #EEF2FF; color: var(--primary); box-shadow: 0 1px 2px rgba(79, 70, 229, 0.08); } .nav-item.active i { color: var(--primary); } .sidebar-footer { text-align: center; padding-top: 20px; } .watermark-graphic { display: flex; justify-content: center; margin-bottom: 8px; } .organ-vector { width: 60px; height: 70px; } .tagline { font-size: 11px; color: var(--text-light); line-height: 1.4; } .tagline strong { color: var(--primary); } /* Main Dashboard Area */ .main-dashboard { flex: 1; padding: 24px 32px; overflow-y: auto; background: #F8FAFC; } /* Section Switching Animations */ .view-section { display: none; opacity: 0; transform: translateY(6px); transition: opacity 0.25s ease, transform 0.25s ease; } .view-section.active { display: block; opacity: 1; transform: translateY(0); } /* Section Banners */ .section-banner { background: linear-gradient(135deg, #4F46E5 0%, #7C3AED 50%, #9333EA 100%); border-radius: var(--radius-lg); padding: 20px 24px; color: #FFFFFF; margin-bottom: 22px; display: flex; justify-content: space-between; align-items: center; box-shadow: 0 8px 20px -4px rgba(79, 70, 229, 0.25); } .section-banner.vae-gradient { background: linear-gradient(135deg, #7C3AED 0%, #C026D3 50%, #EC4899 100%); box-shadow: 0 8px 20px -4px rgba(192, 38, 211, 0.25); } .section-banner.dataset-gradient { background: linear-gradient(135deg, #0284C7 0%, #2563EB 50%, #4F46E5 100%); box-shadow: 0 8px 20px -4px rgba(2, 132, 199, 0.25); } .section-banner.about-gradient { background: linear-gradient(135deg, #0D9488 0%, #059669 50%, #16A34A 100%); box-shadow: 0 8px 20px -4px rgba(13, 148, 136, 0.25); } .banner-text h2 { font-size: 18px; font-weight: 800; margin-bottom: 4px; letter-spacing: -0.3px; } .banner-text p { font-size: 12.5px; opacity: 0.9; max-width: 800px; line-height: 1.4; } .banner-badge-group { display: flex; gap: 8px; flex-shrink: 0; } .model-pill { font-size: 11px; font-weight: 700; background: rgba(255, 255, 255, 0.18); backdrop-filter: blur(8px); padding: 6px 12px; border-radius: 20px; border: 1px solid rgba(255, 255, 255, 0.25); display: flex; align-items: center; gap: 6px; } .model-pill.success { background: rgba(16, 185, 129, 0.3); border-color: rgba(16, 185, 129, 0.5); } /* Dashboard Row Grids */ .dashboard-row { display: grid; gap: 20px; margin-bottom: 20px; } .row-recon-grid { grid-template-columns: 1.15fr 0.85fr; } .row-details-grid { grid-template-columns: 1fr 1fr; } /* Card General Styling */ .card { background: var(--bg-card); border-radius: var(--radius-lg); border: 1px solid var(--border-subtle); padding: 20px; box-shadow: var(--shadow-card); transition: transform 0.2s ease, box-shadow 0.2s ease; } .card:hover { box-shadow: var(--shadow-hover); } .card-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid #F1F5F9; } .header-title-wrap { display: flex; align-items: center; gap: 10px; } .header-title-wrap i { font-size: 17px; } .card-header h3 { font-size: 14.5px; font-weight: 700; color: #1E293B; letter-spacing: -0.2px; } .header-badge { font-size: 10.5px; font-weight: 700; color: var(--primary); background: var(--primary-light); padding: 4px 10px; border-radius: 12px; } .header-badge.purple { color: var(--accent-purple); background: var(--accent-purple-light); } .header-badge.pink { color: var(--accent-pink); background: var(--accent-pink-light); } .header-badge.orange { color: var(--accent-orange); background: var(--accent-orange-light); } .header-badge.success { color: var(--accent-green); background: var(--accent-green-light); } /* Dropzone Mini */ .dropzone-mini { border: 2px dashed #CBD5E1; border-radius: var(--radius-md); padding: 14px; text-align: center; background: #F8FAFC; cursor: pointer; transition: all 0.2s ease; margin-bottom: 12px; } .dropzone-mini:hover, .dropzone-mini.dragover { border-color: var(--primary); background: var(--primary-light); } .upload-icon-circle.mini { width: 34px; height: 34px; border-radius: 50%; background: #EEF2FF; color: var(--primary); display: inline-flex; align-items: center; justify-content: center; font-size: 14px; margin-bottom: 4px; } .upload-icon-circle.mini.pink { background: #FDF2F8; color: var(--accent-pink); } .dropzone-text.mini { font-size: 12px; color: var(--text-muted); } .dropzone-text.mini strong { color: #1E293B; } /* Sample Picker Bar */ .sample-picker-bar { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; } .sample-label { font-size: 11.5px; font-weight: 600; color: var(--text-muted); white-space: nowrap; } .sample-chips { display: flex; gap: 6px; flex-wrap: wrap; } .chip { font-size: 11px; font-weight: 600; background: #F1F5F9; border: 1px solid var(--border-subtle); color: #475569; padding: 4px 10px; border-radius: 14px; cursor: pointer; transition: all 0.15s ease; } .chip:hover { background: #E2E8F0; color: #0F172A; } .chip.active { background: var(--primary); color: #FFFFFF; border-color: var(--primary); } #vaeSampleChips .chip.active { background: var(--pink); border-color: var(--pink); } .comp-sample-picker { padding: 12px 18px 4px 18px; margin-bottom: 0; } /* Side-by-Side Visual Comparison */ .side-by-side-recon { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 14px; margin-bottom: 16px; } .recon-col { display: flex; flex-direction: column; gap: 6px; } .img-label { font-size: 11.5px; font-weight: 700; color: #475569; display: flex; align-items: center; gap: 6px; } .img-frame { width: 100%; aspect-ratio: 1 / 1; border-radius: var(--radius-md); overflow: hidden; border: 1px solid var(--border-subtle); background: #000000; box-shadow: var(--shadow-sm); position: relative; } .img-frame img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s ease; } .img-frame:hover img { transform: scale(1.03); } .img-frame.recon-glow { border: 2px solid var(--primary); box-shadow: 0 0 15px rgba(79, 70, 229, 0.2); } .img-frame.recon-glow.pink { border: 2px solid var(--accent-pink); box-shadow: 0 0 15px rgba(236, 72, 153, 0.2); } .recon-arrow-divider { display: flex; flex-direction: column; align-items: center; gap: 6px; } .arrow-circle { width: 36px; height: 36px; border-radius: 50%; background: var(--primary-light); color: var(--primary); display: flex; align-items: center; justify-content: center; font-size: 14px; box-shadow: 0 2px 6px rgba(79, 70, 229, 0.15); } .arrow-circle.pink { background: var(--accent-pink-light); color: var(--accent-pink); box-shadow: 0 2px 6px rgba(236, 72, 153, 0.15); } .bottleneck-tag { font-size: 10px; font-weight: 700; color: var(--text-muted); text-align: center; line-height: 1.1; } /* Metrics Ribbon */ .metrics-ribbon { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; background: #F8FAFC; padding: 10px 12px; border-radius: var(--radius-md); border: 1px solid var(--border-subtle); margin-bottom: 14px; } .metric-box { display: flex; flex-direction: column; align-items: center; text-align: center; } .m-title { font-size: 10px; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.3px; } .m-val { font-size: 15px; font-weight: 800; color: #0F172A; margin: 2px 0; } .m-sub { font-size: 9.5px; color: var(--text-light); } .highlight-green { color: var(--accent-green) !important; } .highlight-blue { color: var(--accent-blue) !important; } .highlight-purple { color: var(--accent-purple) !important; } .highlight-pink { color: var(--accent-pink) !important; } /* Buttons */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; font-size: 13.5px; font-weight: 700; padding: 10px 20px; border-radius: var(--radius-md); border: none; cursor: pointer; transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); text-decoration: none; } .btn-primary { background: linear-gradient(135deg, #4F46E5 0%, #6366F1 100%); color: #FFFFFF; box-shadow: 0 4px 12px rgba(79, 70, 229, 0.25); } .btn-primary:hover { background: linear-gradient(135deg, #4338CA 0%, #4F46E5 100%); box-shadow: 0 6px 16px rgba(79, 70, 229, 0.35); transform: translateY(-1px); } .btn-secondary { background: #F1F5F9; color: #334155; border: 1px solid var(--border-subtle); } .btn-secondary:hover { background: #E2E8F0; color: #0F172A; } .btn-block { width: 100%; } .btn-group-row { display: flex; gap: 10px; margin-bottom: 14px; } .btn-sm { padding: 6px 14px; font-size: 12px; } /* Loss Summary Cards & Charts */ .loss-summary-cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 14px; } .l-card { background: #F8FAFC; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); padding: 8px; text-align: center; } .l-lbl { display: block; font-size: 10px; color: var(--text-muted); font-weight: 600; } .l-num { font-size: 14px; font-weight: 800; color: #1E293B; } .chart-wrapper-loss { height: 280px; position: relative; margin-bottom: 14px; background: linear-gradient(180deg, rgba(248, 250, 252, 0.85) 0%, rgba(241, 245, 249, 0.4) 100%); border: 1px solid rgba(226, 232, 240, 0.9); border-radius: var(--radius-md); padding: 12px 14px 8px 14px; box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.02); } .chart-wrapper-class { height: 280px; position: relative; background: linear-gradient(180deg, rgba(248, 250, 252, 0.85) 0%, rgba(241, 245, 249, 0.4) 100%); border: 1px solid rgba(226, 232, 240, 0.9); border-radius: var(--radius-md); padding: 12px 14px 8px 14px; box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.02); } .loss-explanation { display: flex; gap: 14px; font-size: 11px; color: var(--text-muted); flex-wrap: wrap; } .loss-pill { display: flex; align-items: center; gap: 6px; } .dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; } .train-dot { background: #4F46E5; } .val-dot { background: #EC4899; } .pink-dot { background: #EC4899; } .purple-dot { background: #8B5CF6; } /* Latent Bottleneck & Flow Diagram */ .bottleneck-desc { font-size: 12px; color: var(--text-muted); margin-bottom: 14px; line-height: 1.4; } .layer-flow-diagram { display: flex; align-items: center; gap: 6px; overflow-x: auto; padding: 10px 0; margin-bottom: 14px; } .flow-step { background: #F8FAFC; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); padding: 6px 10px; text-align: center; min-width: 80px; } .flow-step.bottleneck-active { background: var(--primary-light); border-color: var(--primary); } .flow-step.bottleneck-active .step-name { color: var(--primary); } .step-name { display: block; font-size: 10px; font-weight: 700; color: #475569; } .step-dim { font-size: 9px; color: var(--text-light); font-weight: 600; } .flow-arrow { color: var(--text-light); font-size: 10px; } .latent-vector-grid { display: grid; grid-template-columns: repeat(32, 1fr); gap: 2px; height: 50px; background: #0F172A; padding: 4px; border-radius: 6px; } .latent-cell { background: #3B82F6; border-radius: 1px; transition: opacity 0.3s ease; } .heatmap-title { font-size: 10.5px; font-weight: 600; color: var(--text-muted); margin-bottom: 6px; } /* VAE Synth Drawer */ .synth-samples-drawer { background: #F8FAFC; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); padding: 12px; margin-top: 14px; } .drawer-header { font-size: 11.5px; font-weight: 700; color: #1E293B; margin-bottom: 8px; } .drawer-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; } .drawer-thumb { aspect-ratio: 1 / 1; border-radius: var(--radius-sm); overflow: hidden; border: 1px solid var(--border-subtle); } .drawer-thumb img { width: 100%; height: 100%; object-fit: cover; } .comparison-pills-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 14px; } .comp-box { padding: 10px 12px; border-radius: var(--radius-sm); font-size: 11px; } .comp-box ul { padding-left: 16px; margin-top: 4px; line-height: 1.4; } .error-box { background: #FEF2F2; border: 1px solid #FECACA; color: #991B1B; } .success-box { background: #F0FDF4; border: 1px solid #BBF7D0; color: #166534; } .comp-title { font-weight: 700; margin-bottom: 4px; } .spatial-channels-row { display: flex; gap: 6px; flex-wrap: wrap; } .channel-chip { font-size: 10.5px; font-weight: 600; background: #EDE9FE; color: #6D28D9; padding: 4px 8px; border-radius: 12px; } /* ========================================================================== MODEL COMPARISON SECTION ========================================================================== */ .comp-gallery-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-top: 10px; } .comp-item { display: flex; flex-direction: column; background: #F8FAFC; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); padding: 10px; text-align: center; position: relative; } .comp-badge { font-size: 10.5px; font-weight: 700; padding: 3px 8px; border-radius: 10px; margin-bottom: 8px; display: inline-block; } .comp-badge.real { background: #E2E8F0; color: #334155; } .comp-badge.ae { background: var(--primary-light); color: var(--primary); } .comp-badge.vae { background: var(--accent-pink-light); color: var(--accent-pink); } .comp-badge.transformer { background: var(--accent-teal); color: #FFFFFF; } .comp-thumb-box { width: 100%; aspect-ratio: 1 / 1; border-radius: var(--radius-sm); overflow: hidden; background: #000000; margin-bottom: 8px; border: 1px solid var(--border-subtle); } .comp-thumb-box img { width: 100%; height: 100%; object-fit: cover; } .comp-metrics-card { font-size: 11px; color: var(--text-muted); display: flex; flex-direction: column; gap: 2px; } .c-metric-row { display: flex; justify-content: space-between; padding: 1px 4px; } /* Benchmark Table */ .table-responsive { overflow-x: auto; } .benchmark-table { width: 100%; border-collapse: collapse; font-size: 12.5px; } .benchmark-table th { background: #F8FAFC; color: var(--text-muted); font-weight: 700; text-align: left; padding: 10px 12px; border-bottom: 1px solid var(--border-subtle); } .benchmark-table td { padding: 12px; border-bottom: 1px solid #F1F5F9; color: #1E293B; } .benchmark-table tr.highlight-row { background: #FDF2F8; } .badge-score { font-weight: 700; padding: 3px 8px; border-radius: 6px; font-size: 11.5px; } .badge-score.green { background: #DCFCE7; color: #15803D; } .badge-score.blue { background: #DBEAFE; color: #1D4ED8; } .badge-score.pink { background: #FCE7F3; color: #BE185D; } .badge-score.orange { background: #FFEDD5; color: #C2410C; } .chart-wrapper-aug { height: 220px; position: relative; } /* ========================================================================== DATASET INFO SECTION ========================================================================== */ .dataset-class-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 20px; } .class-card { background: var(--bg-card); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); padding: 14px; cursor: pointer; transition: all 0.2s ease; } .class-card:hover { transform: translateY(-2px); border-color: var(--primary); box-shadow: var(--shadow-sm); } .class-card.active { border-color: var(--primary); background: var(--primary-light); box-shadow: 0 0 0 1px var(--primary); } .class-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; } .class-header h4 { font-size: 13px; font-weight: 700; color: #1E293B; } .c-type { font-size: 9.5px; font-weight: 700; padding: 2px 6px; border-radius: 4px; } .c-type.pathology { background: #FEE2E2; color: #DC2626; } .c-type.therapeutic { background: #E0E7FF; color: #4338CA; } .c-type.anatomical { background: #DCFCE7; color: #15803D; } .class-desc { font-size: 11px; color: var(--text-muted); line-height: 1.35; margin-bottom: 8px; } .class-meta { display: flex; justify-content: space-between; font-size: 10px; font-weight: 600; color: var(--text-light); } .dataset-samples-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; } .d-sample-thumb { aspect-ratio: 1 / 1; border-radius: var(--radius-md); overflow: hidden; border: 1px solid var(--border-subtle); box-shadow: var(--shadow-sm); } .d-sample-thumb img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s ease; } .d-sample-thumb:hover img { transform: scale(1.05); } /* ========================================================================== ABOUT SECTION ========================================================================== */ .about-body-content { display: flex; flex-direction: column; gap: 14px; } .objective-item { display: flex; gap: 12px; align-items: flex-start; } .obj-icon { width: 36px; height: 36px; border-radius: 50%; background: var(--primary-light); color: var(--primary); display: flex; align-items: center; justify-content: center; font-size: 14px; flex-shrink: 0; } .obj-text strong { font-size: 13px; color: #1E293B; display: block; margin-bottom: 2px; } .obj-text p { font-size: 12px; color: var(--text-muted); line-height: 1.4; } .tech-stack-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; } .tech-item { background: #F8FAFC; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); padding: 14px; text-align: center; } .tech-item i { font-size: 24px; margin-bottom: 6px; display: block; } .tech-item strong { font-size: 12.5px; display: block; color: #1E293B; } .tech-item span { font-size: 10.5px; color: var(--text-light); } /* Responsive adjustments */ @media (max-width: 1200px) { .row-recon-grid, .row-details-grid { grid-template-columns: 1fr; } .comp-gallery-row, .dataset-class-grid { grid-template-columns: repeat(2, 1fr); } } /* ========================================================================== VISION TRANSFORMER (ViT v2) WORKBENCH STYLES ========================================================================== */ .section-banner.tf-banner { background: linear-gradient(135deg, #0F766E 0%, #0D9488 40%, #0284C7 100%); box-shadow: 0 8px 20px -4px rgba(13, 148, 136, 0.28); } .text-teal { color: #0D9488 !important; } .header-badge.teal { color: #0D9488; background: #CCFBF1; } .model-pill.teal { background: rgba(13, 148, 136, 0.35); border-color: rgba(13, 148, 136, 0.55); } .model-pill.purple { background: rgba(139, 92, 246, 0.35); border-color: rgba(139, 92, 246, 0.55); } .upload-icon-circle.mini.teal { background: #CCFBF1; color: #0D9488; } .btn-teal { background: linear-gradient(135deg, #0D9488 0%, #0284C7 100%) !important; border-color: #0D9488 !important; color: #FFFFFF !important; box-shadow: 0 4px 14px rgba(13, 148, 136, 0.25); } .btn-teal:hover { background: linear-gradient(135deg, #0F766E 0%, #0369A1 100%) !important; transform: translateY(-1px); } /* 4-View Switcher Toolbar */ .tf-view-switcher { background: #F1F5F9; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); padding: 8px 12px; margin-bottom: 14px; } .switcher-label { font-size: 11px; font-weight: 700; color: #64748B; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 6px; display: flex; align-items: center; gap: 6px; } .switcher-buttons { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; } .tf-view-btn { font-size: 11.5px; font-weight: 600; background: #FFFFFF; border: 1px solid var(--border-subtle); color: #475569; padding: 7px 10px; border-radius: var(--radius-sm); cursor: pointer; transition: all 0.18s ease; display: flex; align-items: center; justify-content: center; gap: 6px; white-space: nowrap; } .tf-view-btn:hover { background: #E2E8F0; color: #0F172A; } .tf-view-btn.active { background: #0D9488; color: #FFFFFF; border-color: #0D9488; box-shadow: 0 2px 6px rgba(13, 148, 136, 0.25); } /* Main Preview Container */ .tf-preview-container { margin-bottom: 14px; } .tf-main-frame { aspect-ratio: 1 / 1; max-height: 290px; margin: 0 auto; border: 2px solid #0D9488; box-shadow: 0 0 16px rgba(13, 148, 136, 0.2); } .view-tag { font-size: 10px; font-weight: 700; padding: 2px 8px; border-radius: 10px; text-transform: uppercase; letter-spacing: 0.5px; } .view-tag.teal { background: #CCFBF1; color: #0F766E; } /* 4-Thumbnail Simultaneous Tray */ .tf-thumbs-tray { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 16px; } .tf-tray-item { display: flex; flex-direction: column; align-items: center; gap: 4px; cursor: pointer; } .tray-label { font-size: 10px; font-weight: 700; color: #64748B; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; } .tray-thumb { width: 100%; aspect-ratio: 1 / 1; border-radius: var(--radius-sm); overflow: hidden; border: 2px solid var(--border-subtle); background: #000000; transition: all 0.2s ease; } .tray-thumb img { width: 100%; height: 100%; object-fit: cover; } .tf-tray-item:hover .tray-thumb { border-color: #0D9488; transform: scale(1.04); } .tf-tray-item.active .tray-thumb { border-color: #0D9488; box-shadow: 0 0 10px rgba(13, 148, 136, 0.4); } .tf-tray-item.active .tray-label { color: #0D9488; font-weight: 800; } /* Card Results & Hero Diagnosis */ .card-tf-results { background: #FFFFFF; } .tf-results-body { display: flex; flex-direction: column; gap: 16px; } .tf-hero-diagnosis { display: flex; justify-content: space-between; align-items: center; background: linear-gradient(135deg, #F0FDFA 0%, #E0F2FE 100%); border: 1px solid #CCFBF1; border-radius: var(--radius-md); padding: 16px 20px; } .hero-sub { font-size: 11px; font-weight: 600; color: #64748B; text-transform: uppercase; letter-spacing: 0.5px; } .hero-class { font-size: 22px; font-weight: 800; color: #0F172A; margin: 2px 0 6px 0; letter-spacing: -0.5px; } .hero-badges { display: flex; gap: 8px; align-items: center; } .tf-hero-right { display: flex; flex-direction: column; align-items: flex-end; text-align: right; } .hero-metric-lbl { font-size: 10.5px; font-weight: 600; color: #64748B; } .hero-metric-val { font-size: 20px; font-weight: 800; color: #0D9488; } .hero-metric-device { font-size: 10.5px; font-weight: 600; color: #64748B; display: flex; align-items: center; gap: 4px; } /* 8-Class Horizontal Animated Probability Bars */ .tf-prob-section { background: #F8FAFC; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); padding: 14px 16px; } .prob-section-title { display: flex; justify-content: space-between; align-items: center; font-size: 11.5px; font-weight: 700; color: #334155; margin-bottom: 10px; } .tf-prob-bars { display: flex; flex-direction: column; gap: 8px; } .tf-prob-row { display: flex; flex-direction: column; gap: 3px; } .tf-prob-meta { display: flex; justify-content: space-between; font-size: 11px; font-weight: 600; color: #475569; } .tf-prob-row.top-prob .tf-prob-meta { color: #0D9488; font-weight: 700; } .tf-prob-track { width: 100%; height: 7px; background: #E2E8F0; border-radius: 4px; overflow: hidden; } .tf-prob-fill { height: 100%; background: #94A3B8; border-radius: 4px; transition: width 0.4s ease; } .tf-prob-fill.highlight { background: linear-gradient(90deg, #0D9488 0%, #06B6D4 100%); box-shadow: 0 0 8px rgba(13, 148, 136, 0.4); } /* Top Patches Grid */ .tf-patch-section { background: #F8FAFC; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); padding: 14px 16px; } .tf-top-patches-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; } .tf-patch-chip { background: #FFFFFF; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); padding: 8px; display: flex; flex-direction: column; gap: 4px; box-shadow: var(--shadow-sm); } .patch-hdr { display: flex; justify-content: space-between; font-size: 10.5px; font-weight: 700; } .patch-idx { color: #0D9488; } .patch-score { color: #64748B; } .patch-detail { display: flex; flex-direction: column; font-size: 9.5px; color: #94A3B8; line-height: 1.3; } /* AI Clinical Narrative Card */ .card-tf-narrative { background: #FFFFFF; } .narrative-body { padding: 18px 20px; display: flex; flex-direction: column; gap: 14px; } .narrative-quote-box { display: flex; gap: 14px; background: #F8FAFC; border-left: 4px solid #0D9488; padding: 16px; border-radius: var(--radius-sm); } .quote-icon { width: 40px; height: 40px; border-radius: 50%; background: #CCFBF1; color: #0D9488; display: flex; align-items: center; justify-content: center; font-size: 18px; flex-shrink: 0; } .narrative-text { font-size: 13.5px; color: #1E293B; line-height: 1.65; font-weight: 500; } .clinical-disclaimer { display: flex; align-items: flex-start; gap: 10px; background: #FFFBEB; border: 1px solid #FEF3C7; border-radius: var(--radius-sm); padding: 10px 14px; font-size: 11.5px; color: #92400E; line-height: 1.45; } .math-callout { display: flex; flex-direction: column; gap: 6px; background: #F1F5F9; border-radius: var(--radius-sm); padding: 10px 14px; } .math-title { font-size: 11px; font-weight: 700; color: #475569; } .math-callout code { font-family: 'Courier New', monospace; font-size: 11.5px; color: #0F766E; background: #E2E8F0; padding: 4px 8px; border-radius: 4px; overflow-x: auto; } /* Dots and highlights */ .dot.teal-dot { background: #0D9488; } .highlight-row-teal { background: rgba(13, 148, 136, 0.05); border-left: 3px solid #0D9488; }