GastroGen / frontend1 /css /style.css
Devashri26's picture
Sync from GitHub via hub-sync
c243761 verified
Raw History Blame Contribute Delete
31.1 kB
/* ==========================================================================
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;
}