Spaces:
Paused
Paused
| /* === Google Material Palette === */ | |
| :root { | |
| --google-blue: #1a73e8; | |
| --google-blue-dark: #174ea6; | |
| --google-blue-light: #4285f4; | |
| --google-purple: #9c27b0; | |
| --google-purple-dark: #7b1fa2; | |
| --google-purple-light: #e1bee7; | |
| --google-grey-900: #202124; | |
| --google-grey-700: #5f6368; | |
| --google-grey-200: #e8eaed; | |
| --google-grey-100: #f1f3f4; | |
| --google-yellow: #f9ab00; | |
| } | |
| body { | |
| background-color: var(--google-grey-100); | |
| font-family: 'Google Sans Text', sans-serif; | |
| } | |
| .elev-1 { | |
| box-shadow: 0 1px 3px rgba(60, 64, 67, 0.15); | |
| } | |
| /* Header and Banner */ | |
| .header-container { | |
| margin-top: 40px; | |
| margin-bottom: 32px; | |
| text-align: center; | |
| } | |
| .header-container h1 { | |
| font-family: 'Google Sans', sans-serif; | |
| font-weight: 500; | |
| letter-spacing: -0.03em; | |
| margin: 0 0 12px; | |
| font-size: clamp( | |
| 1.6rem, | |
| 4vw + 0.5rem, | |
| 2.75rem | |
| ); /* ~26px → 44px fluid scaling */ | |
| line-height: 1.2; /* tighter on large screens */ | |
| text-wrap: balance; /* modern browsers balance line lengths */ | |
| color: var(--google-blue-dark); | |
| } | |
| /* Ensure brand-split stays inline by default */ | |
| .brand-split { | |
| display: inline; | |
| } | |
| .banner { | |
| background: #fff; | |
| color: var(--google-grey-900); | |
| border: 1px solid var(--google-grey-200); | |
| box-shadow: 0 1px 3px rgba(60, 64, 67, 0.15); | |
| padding: 20px; | |
| } | |
| .banner-content h2 { | |
| font-family: 'Google Sans', sans-serif; | |
| font-weight: 600; | |
| font-size: 28px; | |
| margin: 0 0 16px; | |
| color: var(--google-grey-900); | |
| } | |
| .banner-section-title { | |
| font-family: 'Google Sans', sans-serif; | |
| font-weight: 600; | |
| font-size: 18px; | |
| color: var(--google-blue-dark); | |
| margin: 0 0 12px 0; | |
| } | |
| .banner-description { | |
| font-family: 'Google Sans Text', sans-serif; | |
| font-size: 16px; | |
| line-height: 1.6; | |
| color: var(--google-grey-700); | |
| margin-bottom: 12px; | |
| } | |
| .banner-description:last-child { | |
| margin-bottom: 0; | |
| } | |
| .banner-link { | |
| color: var(--google-blue-dark); | |
| text-decoration: none; | |
| } | |
| .banner-link:hover { | |
| text-decoration: underline; | |
| } | |
| .banner-note { | |
| font-size: 13px; | |
| color: var(--google-grey-600); | |
| text-align: right; | |
| margin-top: 6px; | |
| } | |
| .citation-note { | |
| font-size: 14px; | |
| color: var(--google-grey-700); | |
| background: #fafbfc; | |
| border: 1px solid var(--google-grey-200); | |
| border-radius: 8px; | |
| padding: 12px 16px; | |
| margin: 12px 0 0 0; | |
| line-height: 1.5; | |
| text-align: center; | |
| box-shadow: 0 1px 2px rgba(60, 64, 67, 0.05); | |
| } | |
| .how-to-use { | |
| background: rgba(255, 255, 255, 0.1); | |
| border-radius: 8px; | |
| padding: 20px; | |
| border-left: 4px solid rgba(255, 255, 255, 0.3); | |
| } | |
| .how-to-use h3 { | |
| margin: 0 0 15px 0; | |
| font-size: 1.2em; | |
| font-weight: 500; | |
| } | |
| .how-to-use ol { | |
| margin: 0; | |
| padding-left: 20px; | |
| } | |
| .how-to-use li { | |
| margin-bottom: 8px; | |
| line-height: 1.5; | |
| } | |
| /* Attribution block - semantic grouping */ | |
| .attribution { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| text-align: center; | |
| } | |
| /* Google Research Logo */ | |
| .google-research-logo { | |
| margin-top: 2px; | |
| margin-bottom: 12px; | |
| } | |
| .attribution .google-research-logo img { | |
| height: 1.5em; /* ~24-26px when subtitle is 16-18px */ | |
| width: auto; | |
| opacity: 1; | |
| } | |
| /* Blog link in attribution section */ | |
| .blog-link-container { | |
| margin-top: 16px; | |
| margin-bottom: 8px; | |
| } | |
| .blog-link { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| padding: 10px 18px; | |
| background: #e8f0fe; | |
| color: var(--google-blue-dark); | |
| text-decoration: none; | |
| border-radius: 20px; | |
| border: 1px solid #d2e3fc; | |
| font-family: 'Google Sans Text', sans-serif; | |
| font-size: 14px; | |
| font-weight: 500; | |
| transition: all 0.2s ease; | |
| box-shadow: 0 1px 3px rgba(26, 115, 232, 0.15); | |
| } | |
| .blog-link:hover { | |
| background: #d2e3fc; | |
| color: var(--google-blue-dark); | |
| transform: translateY(-1px); | |
| box-shadow: 0 2px 4px rgba(26, 115, 232, 0.2); | |
| text-decoration: none; | |
| } | |
| .blog-link .blog-icon { | |
| font-size: 16px; | |
| } | |
| .blog-link .external-icon { | |
| font-size: 14px; | |
| opacity: 0.8; | |
| } | |
| /* Disclaimer */ | |
| .disclaimer-container { | |
| margin-top: 8px; | |
| } | |
| .disclaimer-box { | |
| display: flex; | |
| align-items: flex-start; | |
| gap: 12px; | |
| background: #fffbeb; | |
| border: none; | |
| border-left: 4px solid var(--google-yellow); | |
| border-radius: 12px; | |
| padding: 12px 16px; | |
| font-size: 14px; | |
| line-height: 1.5; | |
| box-shadow: 0 1px 3px rgba(60, 64, 67, 0.1); | |
| } | |
| .disclaimer-box p { | |
| margin: 0; | |
| } | |
| .disclaimer-box strong { | |
| color: #495057; | |
| font-weight: 600; | |
| } | |
| .disclaimer-icon { | |
| color: var(--google-yellow); | |
| font-size: 18px; | |
| } | |
| .disclaimer-text { | |
| color: var(--google-grey-700); | |
| } | |
| /* Sample Reports */ | |
| .samples-container { | |
| background-color: #fff; | |
| border-radius: 16px; | |
| padding: 24px; | |
| margin-bottom: 25px; | |
| box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); | |
| border: 1px solid #e9ecef; | |
| } | |
| .samples-container h3 { | |
| font-family: 'Google Sans', sans-serif; | |
| font-size: 20px; | |
| font-weight: normal; | |
| margin-bottom: 6px; | |
| } | |
| .samples-description { | |
| font-size: 15px; | |
| margin-bottom: 24px; | |
| line-height: 1.6; | |
| color: var(--google-grey-700); | |
| } | |
| .samples-description strong { | |
| color: var(--google-blue-dark); | |
| font-weight: 600; | |
| } | |
| .instruction-step { | |
| margin-bottom: 6px; | |
| padding-left: 0; | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| } | |
| .step-number { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 20px; | |
| height: 20px; | |
| border-radius: 50%; | |
| background-color: #e8f0fe; | |
| color: var(--google-blue); | |
| font-size: 12px; | |
| font-weight: 600; | |
| flex-shrink: 0; | |
| } | |
| /* === SAMPLE REPORT BUTTON GRID ================================= */ | |
| .sample-buttons { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); | |
| gap: clamp(8px, 1vw, 16px); | |
| margin-top: 8px; | |
| grid-auto-flow: row; | |
| justify-content: center; | |
| } | |
| /* Tip under sample buttons */ | |
| .samples-tip { | |
| font-family: | |
| 'Google Sans', | |
| -apple-system, | |
| BlinkMacSystemFont, | |
| 'Segoe UI', | |
| Roboto, | |
| sans-serif; | |
| font-size: 14px; | |
| color: var(--google-grey-700); | |
| background-color: #f8f9fa; | |
| padding: 12px 16px; | |
| border-radius: 8px; | |
| margin-top: 8px; | |
| font-weight: 400; | |
| line-height: 1.6; | |
| } | |
| /* Desktop tip visibility */ | |
| .tip-desktop { | |
| display: block; | |
| } | |
| /* Mobile tip - show only on touch devices */ | |
| @media (hover: none) { | |
| .mobile-tip { | |
| margin: 0.75rem 1rem 1rem; | |
| font-size: 0.875rem; | |
| color: #5f6368; | |
| background: #f8f9fa; | |
| border-radius: 8px; | |
| padding: 0.75rem 1rem; | |
| line-height: 1.5; | |
| display: block; | |
| text-align: left; | |
| } | |
| .mobile-tip .icon { | |
| display: inline; | |
| font-size: 1rem; | |
| margin-right: 0.25rem; | |
| } | |
| .mobile-tip strong { | |
| color: #1a73e8; | |
| font-weight: 600; | |
| } | |
| .mobile-tip em { | |
| font-style: italic; | |
| color: #5f6368; | |
| font-size: 0.825rem; | |
| } | |
| } | |
| /* Hide mobile tip on mouse/desktop */ | |
| @media (hover: hover) { | |
| .mobile-tip { | |
| display: none; | |
| } | |
| } | |
| /* === CARD ====================================================== */ | |
| .sample-button { | |
| display: block; | |
| padding: clamp(12px, 1.2vw, 18px); | |
| border-radius: 8px; | |
| background: var(--google-grey-100); | |
| border: 1px solid var(--google-grey-200); | |
| color: var(--google-grey-900); | |
| cursor: pointer; | |
| position: relative; | |
| overflow: hidden; | |
| transition: | |
| transform 0.15s ease, | |
| box-shadow 0.15s ease; | |
| box-shadow: | |
| 0 2px 6px rgba(60, 64, 67, 0.15), | |
| 0 1px 2px rgba(60, 64, 67, 0.1); | |
| } | |
| .sample-button-content { | |
| text-align: left; | |
| } | |
| /* === TYPOGRAPHY =============================================== */ | |
| .sample-title { | |
| font-weight: 500; | |
| letter-spacing: -0.15px; | |
| font-size: clamp(0.95rem, 1.55vw, 1.1rem); | |
| line-height: 1.3; | |
| margin: 0 0 6px 0; | |
| } | |
| .sample-meta { | |
| font-size: clamp(0.72rem, 1.2vw, 0.85rem); | |
| opacity: 0.8; | |
| display: flex; | |
| justify-content: flex-start; | |
| align-items: center; | |
| } | |
| .sample-modality { | |
| padding: 0.12em 0.7em; | |
| border-radius: 14px; | |
| font-weight: 600; | |
| background: rgba(255, 255, 255, 0.2); | |
| font-size: 12px; | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| } | |
| .sample-modality.mod-ct { | |
| background: rgba(66, 133, 244, 0.15); | |
| color: var(--google-blue-dark); | |
| } | |
| .sample-modality.mod-mri { | |
| background: rgba(156, 39, 176, 0.15); | |
| color: var(--google-purple-dark); | |
| } | |
| .sample-modality.mod-xr { | |
| background: rgba(255, 152, 0, 0.15); | |
| color: #e65100; | |
| } | |
| .sample-modality.mod-us { | |
| background: rgba(0, 188, 212, 0.15); | |
| color: #00695c; | |
| } | |
| .sample-modality.mod-pet { | |
| background: rgba(255, 64, 129, 0.15); | |
| color: #ad1457; | |
| } | |
| .sample-button:hover { | |
| background: var(--google-grey-200); | |
| border-color: var(--google-blue-light); | |
| transform: translateY(-2px); | |
| box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12); | |
| } | |
| .sample-button:active { | |
| transform: none; | |
| box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); | |
| } | |
| /* === MINIMUM TOUCH SIZE ======================================= */ | |
| @supports (height: 100lvh) { | |
| .sample-button { | |
| min-height: 44px; | |
| } | |
| } | |
| /* Mobile optimization for sample buttons */ | |
| @media (max-width: 768px) { | |
| .sample-button { | |
| padding: 10px 12px; | |
| } | |
| .sample-title { | |
| font-size: clamp(0.9rem, 2.5vw, 1rem); | |
| line-height: 1.3; | |
| } | |
| .sample-meta { | |
| margin-top: 4px; | |
| } | |
| /* Hide desktop tip on mobile */ | |
| .tip-desktop { | |
| display: none; | |
| } | |
| } | |
| /* Very narrow phones - horizontal scroll */ | |
| @media (max-width: 360px) { | |
| .sample-buttons { | |
| display: flex; | |
| overflow-x: auto; | |
| scroll-snap-type: x mandatory; | |
| padding-inline: 4px; | |
| } | |
| .sample-button { | |
| flex: 0 0 80%; | |
| margin-inline: 4px; | |
| scroll-snap-align: start; | |
| } | |
| } | |
| /* Loading state */ | |
| .sample-button.loading { | |
| pointer-events: none; | |
| opacity: 0.6; | |
| } | |
| .sample-button.loading::after { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="10" stroke="%234285F4" stroke-width="2" stroke-dasharray="31.416" stroke-dashoffset="31.416"><animateTransform attributeName="transform" type="rotate" dur="1s" values="0 12 12;360 12 12" repeatCount="indefinite"/></circle></svg>') | |
| center / 24px 24px no-repeat; | |
| } | |
| /* Mobile touch device optimizations */ | |
| @media (hover: none) and (pointer: coarse) { | |
| .large-text-area { | |
| -webkit-user-select: none; | |
| user-select: none; | |
| -webkit-touch-callout: none; | |
| -webkit-tap-highlight-color: transparent; | |
| } | |
| .output-container, | |
| #prompt-output { | |
| -webkit-overflow-scrolling: touch; | |
| will-change: scroll-position; | |
| overscroll-behavior: contain; | |
| } | |
| .text-span { | |
| touch-action: manipulation; | |
| -webkit-user-select: none; | |
| user-select: none; | |
| -webkit-touch-callout: none; | |
| } | |
| } | |
| /* Text Areas */ | |
| .text-area-container { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 24px; | |
| } | |
| /* Ensure both panels handle long content consistently */ | |
| .large-text-area, | |
| .output-container { | |
| min-width: 0; /* Prevent grid overflow */ | |
| max-width: 100%; /* Stay within grid bounds */ | |
| overflow-wrap: break-word; /* Break long words */ | |
| word-break: break-word; /* Handle long headers */ | |
| } | |
| .text-area-wrapper { | |
| flex: 1; | |
| } | |
| .text-area-wrapper h2 { | |
| margin: 0 0 15px 0; | |
| color: #2c3e50; | |
| font-size: 1.3em; | |
| font-weight: 500; | |
| border-bottom: 2px solid #e9ecef; | |
| padding-bottom: 8px; | |
| } | |
| .large-text-area { | |
| width: 100%; | |
| height: clamp(300px, 50vh, 500px); | |
| min-height: 300px; | |
| padding: 15px; | |
| box-sizing: border-box; | |
| resize: vertical; | |
| border: 1px solid var(--google-grey-200); | |
| border-radius: 8px; | |
| font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace; | |
| font-size: 14px; | |
| line-height: 1.5; | |
| transition: border-color 0.3s ease; | |
| -webkit-overflow-scrolling: touch; | |
| scroll-behavior: smooth; | |
| } | |
| .large-text-area:focus { | |
| outline: none; | |
| border-color: var(--google-blue); | |
| box-shadow: 0 0 0 3px rgba(26, 115, 232, 0.2); | |
| } | |
| .output-container { | |
| width: 100%; | |
| height: clamp(300px, 50vh, 500px); | |
| min-height: 300px; | |
| resize: vertical; | |
| overflow: auto; | |
| border: 2px solid #e9ecef; | |
| border-radius: 8px; | |
| background-color: #f8f9fa; | |
| position: relative; | |
| /* Ensure container doesn't expand beyond grid bounds */ | |
| box-sizing: border-box; | |
| -webkit-overflow-scrolling: touch; | |
| scroll-behavior: smooth; | |
| } | |
| /* Loading Overlay */ | |
| .loading-overlay { | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| background: rgba(240, 248, 255, 0.85); | |
| backdrop-filter: blur(2px); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| flex-direction: column; | |
| border-radius: 8px; | |
| z-index: 10; | |
| } | |
| .loader-message { | |
| font-family: 'Google Sans', sans-serif; | |
| font-size: 15px; | |
| font-weight: 500; | |
| color: var(--google-blue-dark); | |
| display: inline-block; | |
| } | |
| .loader-text { | |
| margin-top: 24px; | |
| text-align: center; | |
| } | |
| .spinner { | |
| width: 80px; | |
| height: 80px; | |
| border: 8px solid rgba(26, 115, 232, 0.15); | |
| border-top-color: var(--google-blue-dark); | |
| border-right-color: var(--google-blue); | |
| border-radius: 50%; | |
| filter: drop-shadow(0 3px 6px rgba(26, 115, 232, 0.15)); | |
| } | |
| .sample-button.active { | |
| background: var(--google-blue); | |
| color: #fff; | |
| border-color: var(--google-blue); | |
| box-shadow: 0 2px 8px rgba(26, 115, 232, 0.3); | |
| transform: translateY(-1px); | |
| } | |
| .sample-button.active .sample-modality { | |
| background: rgba(255, 255, 255, 0.2); | |
| color: #fff; | |
| } | |
| .sample-button.active:hover { | |
| background: var(--google-blue-light); | |
| border-color: var(--google-blue-light); | |
| box-shadow: 0 3px 12px rgba(26, 115, 232, 0.4); | |
| } | |
| .output-text { | |
| width: 100%; | |
| height: 100%; | |
| padding: 15px; | |
| margin: 0; | |
| font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace; | |
| border: none; | |
| overflow: auto; | |
| white-space: normal; | |
| word-wrap: break-word; | |
| box-sizing: border-box; | |
| background-color: transparent; | |
| font-size: 14px; | |
| line-height: 1.5; | |
| } | |
| #output-text { | |
| white-space: pre-wrap; | |
| } | |
| #predict-button { | |
| padding: 12px 24px; | |
| background: var(--google-blue); | |
| color: white; | |
| border: none; | |
| border-radius: 6px; | |
| cursor: pointer; | |
| font-size: 14px; | |
| font-weight: 500; | |
| transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); | |
| box-shadow: 0 1px 3px rgba(60, 64, 67, 0.15); | |
| margin: 12px auto 8px auto; | |
| display: block; | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| #predict-button:hover { | |
| background: var(--google-blue-light); | |
| transform: translateY(-1px); | |
| box-shadow: 0 2px 8px rgba(26, 115, 232, 0.3); | |
| } | |
| #predict-button:active { | |
| transform: translateY(0); | |
| box-shadow: 0 1px 4px rgba(26, 115, 232, 0.3); | |
| } | |
| #predict-button:disabled { | |
| background: #bdc1c6; | |
| cursor: not-allowed; | |
| transform: none; | |
| box-shadow: 0 1px 2px rgba(60, 64, 67, 0.1); | |
| } | |
| .text-span { | |
| cursor: pointer; | |
| border-radius: 2px; | |
| transition: background-color 0.2s; | |
| } | |
| /* Style labels within text spans */ | |
| .text-span.has-label .label-part { | |
| font-weight: 600; | |
| color: var(--google-blue); | |
| font-family: 'Google Sans', sans-serif; | |
| pointer-events: none; /* Let hover events bubble to parent .text-span */ | |
| } | |
| .text-span.has-label .content-part { | |
| font-weight: normal; | |
| } | |
| .text-span:hover { | |
| background-color: rgba(66, 165, 245, 0.2); | |
| outline: 1px solid rgba(66, 165, 245, 0.3); | |
| } | |
| .highlight { | |
| background-color: rgba(66, 165, 245, 0.35) ; | |
| outline: 1px solid rgba(66, 165, 245, 0.5) ; | |
| } | |
| /* Input textarea selection - exactly match output highlighting */ | |
| .large-text-area::selection { | |
| background-color: rgba(66, 165, 245, 0.35) ; | |
| color: inherit ; | |
| } | |
| .large-text-area::-moz-selection { | |
| background-color: rgba(66, 165, 245, 0.35) ; | |
| color: inherit ; | |
| } | |
| #output-text-container { | |
| position: relative; | |
| } | |
| #input-text-container { | |
| position: relative; | |
| } | |
| #output-text-container .significance-minor { | |
| text-decoration: underline; | |
| text-decoration-style: solid; | |
| text-decoration-color: #fbc02d; /* subtle yellow */ | |
| text-decoration-thickness: 2px; | |
| } | |
| #output-text-container .significance-significant { | |
| text-decoration: underline; | |
| text-decoration-style: solid; | |
| text-decoration-color: #f48fb1; /* subtle light pink */ | |
| text-decoration-thickness: 2px; | |
| } | |
| /* Report Structure */ | |
| .segment-label { | |
| font-weight: bold; | |
| } | |
| /* Sub-label styling */ | |
| .segment-sublabel { | |
| font-family: 'Google Sans', sans-serif; /* align with headers */ | |
| font-weight: 600; /* stronger bold for clarity */ | |
| color: var(--google-grey-900); | |
| margin-right: 2px; | |
| white-space: nowrap; | |
| } | |
| .segment-body { | |
| margin-bottom: 12px; | |
| } | |
| .section-header { | |
| font-family: 'Google Sans', sans-serif; | |
| font-weight: 600; | |
| font-size: 1.1em; | |
| margin-top: 12px; | |
| margin-bottom: 2px; | |
| color: var(--google-blue-dark); | |
| } | |
| textarea::selection { | |
| background-color: #ffeb3b; | |
| color: #000; | |
| } | |
| .instructions { | |
| background: var(--google-grey-100); | |
| border-radius: 8px; | |
| border: 1px solid var(--google-grey-200); | |
| padding: 10px 16px; | |
| font-size: 14px; | |
| color: var(--google-grey-700); | |
| } | |
| .instructions p { | |
| margin: 0; | |
| line-height: 1.6; | |
| color: #2c3e50; | |
| font-size: 1em; | |
| } | |
| .instructions strong { | |
| color: #1565c0; | |
| font-weight: 600; | |
| } | |
| .instructions ul { | |
| margin: 15px 0; | |
| padding-left: 20px; | |
| } | |
| .instructions li { | |
| margin-bottom: 8px; | |
| line-height: 1.6; | |
| } | |
| .instructions li strong { | |
| color: #2c3e50; | |
| } | |
| .samples-container h3, | |
| .header-container h1 { | |
| font-weight: 400; | |
| } | |
| .page-wrapper { | |
| max-width: 1200px; | |
| margin: 0 auto; | |
| padding: 24px; | |
| } | |
| .card { | |
| background: #fff; | |
| border: 1px solid var(--google-grey-200); | |
| border-radius: 12px; | |
| box-shadow: 0 1px 3px rgba(60, 64, 67, 0.15); | |
| padding: 24px; | |
| } | |
| .text-area-container { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 24px; | |
| } | |
| .banner.card { | |
| padding: 24px; | |
| border-radius: 16px; | |
| margin-top: 24px; | |
| border-color: var(--google-grey-200); | |
| } | |
| .banner-content { | |
| max-width: 820px; | |
| margin: 0 auto; | |
| text-align: left; | |
| } | |
| .sub-header { | |
| margin: 0; | |
| font-family: 'Google Sans Text', sans-serif; | |
| font-size: 18px; | |
| color: var(--google-grey-700); | |
| } | |
| /* Modality color tags */ | |
| .sample-modality.ct { | |
| background: #e3f2fd; | |
| color: #1565c0; | |
| } | |
| .sample-modality.mri { | |
| background: #e8f5e9; | |
| color: #2e7d32; | |
| } | |
| .sample-modality.xr { | |
| background: #fff3e0; | |
| color: #e65100; | |
| } | |
| .sample-modality.us { | |
| background: #e0f2f1; | |
| color: #00695c; | |
| } | |
| .sample-modality.pet { | |
| background: #fce4ec; | |
| color: #ad1457; | |
| } | |
| /* keep active chip modality white when selected */ | |
| .sample-button.active .sample-modality.ct, | |
| .sample-button.active .sample-modality.mri, | |
| .sample-button.active .sample-modality.xr, | |
| .sample-button.active .sample-modality.us, | |
| .sample-button.active .sample-modality.pet { | |
| background: rgba(255, 255, 255, 0.2); | |
| color: #fff; | |
| } | |
| .primary-label { | |
| font-family: 'Google Sans Text', sans-serif; | |
| font-weight: 500; | |
| margin-top: 10px; | |
| margin-bottom: 2px; | |
| color: var(--google-blue-dark); | |
| } | |
| .finding-list { | |
| margin: 0 0 4px 0; | |
| padding-left: 0; | |
| list-style-position: inside; | |
| } | |
| .finding-list li { | |
| margin-bottom: 6px; | |
| line-height: 1.5; | |
| padding-left: 0.4em; | |
| text-indent: -0.4em; | |
| } | |
| .single-finding { | |
| margin: 0 0 6px 0; | |
| } | |
| @keyframes loaderPulse { | |
| 0%, | |
| 100% { | |
| opacity: 0.35; | |
| } | |
| 50% { | |
| opacity: 0.8; | |
| } | |
| } | |
| .source-link { | |
| display: none; | |
| } | |
| .footer-note { | |
| font-size: 13px; | |
| color: var(--google-grey-600); | |
| text-align: center; | |
| margin-top: 24px; | |
| } | |
| .footer-note .banner-link { | |
| font-weight: 500; | |
| color: var(--google-blue-dark); | |
| } | |
| .footer-note .hug-emoji { | |
| font-size: 16px; | |
| } | |
| .banner-description + .banner-description { | |
| border-top: 1px solid var(--google-grey-200); | |
| padding-top: 12px; | |
| } | |
| .output-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 2px; | |
| } | |
| .copy-button-overlay { | |
| position: absolute; | |
| bottom: 12px; | |
| right: 20px; | |
| width: 36px; | |
| height: 36px; | |
| border-radius: 50%; | |
| background-color: rgba(255, 255, 255, 0.6); | |
| border: 1px solid rgba(0, 0, 0, 0.06); | |
| box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); | |
| color: #9aa0a6; | |
| cursor: pointer; | |
| transition: all 0.3s ease; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| backdrop-filter: blur(8px); | |
| z-index: 5; | |
| opacity: 0.7; | |
| } | |
| .copy-button-overlay:hover { | |
| background-color: rgba(255, 255, 255, 0.85); | |
| box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12); | |
| color: #5f6368; | |
| opacity: 1; | |
| } | |
| .copy-button-overlay:active { | |
| transform: scale(0.98); | |
| } | |
| .copy-button-overlay.copied { | |
| background-color: rgba(230, 247, 255, 0.8); | |
| border-color: rgba(24, 144, 255, 0.3); | |
| color: #1890ff; | |
| opacity: 0.9; | |
| } | |
| .copy-button-overlay svg { | |
| width: 18px; | |
| height: 18px; | |
| stroke-width: 1.5; | |
| } | |
| .copy-button-overlay.copied svg { | |
| display: none; | |
| } | |
| .copy-button-overlay.copied::after { | |
| content: '✓'; | |
| font-size: 16px; | |
| font-weight: 500; | |
| } | |
| .copy-button-overlay:disabled { | |
| opacity: 0; | |
| pointer-events: none; | |
| } | |
| .clear-button-overlay { | |
| position: absolute; | |
| bottom: 12px; | |
| right: 20px; | |
| width: 36px; | |
| height: 36px; | |
| border-radius: 50%; | |
| background-color: rgba(255, 255, 255, 0.6); | |
| border: 1px solid rgba(0, 0, 0, 0.06); | |
| box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); | |
| color: #9aa0a6; | |
| cursor: pointer; | |
| transition: all 0.3s ease; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| backdrop-filter: blur(8px); | |
| z-index: 5; | |
| opacity: 0.7; | |
| } | |
| .clear-button-overlay:hover { | |
| background-color: rgba(255, 255, 255, 0.85); | |
| box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12); | |
| color: #5f6368; | |
| opacity: 1; | |
| } | |
| .clear-button-overlay:active { | |
| transform: scale(0.98); | |
| } | |
| .clear-button-overlay.cleared { | |
| background-color: rgba(230, 247, 255, 0.8); | |
| border-color: rgba(24, 144, 255, 0.3); | |
| color: #1890ff; | |
| opacity: 0.9; | |
| } | |
| .clear-button-overlay svg { | |
| width: 18px; | |
| height: 18px; | |
| stroke-width: 1.5; | |
| } | |
| .clear-button-overlay.cleared svg { | |
| display: none; | |
| } | |
| .clear-button-overlay.cleared::after { | |
| content: '✓'; | |
| font-size: 16px; | |
| font-weight: 500; | |
| } | |
| .clear-button-overlay:disabled { | |
| opacity: 0; | |
| pointer-events: none; | |
| } | |
| .toggle-group { | |
| display: flex; | |
| gap: 16px; | |
| align-items: center; | |
| } | |
| .cache-toggle { | |
| font-size: 13px; | |
| color: var(--google-grey-700); | |
| user-select: none; | |
| } | |
| .raw-toggle, | |
| .prompt-toggle { | |
| font-size: 13px; | |
| color: #546e7a; | |
| font-weight: 500; | |
| user-select: none; | |
| transition: color 0.2s ease; | |
| } | |
| .raw-toggle:hover, | |
| .prompt-toggle:hover { | |
| color: #37474f; | |
| } | |
| .cache-toggle input, | |
| .raw-toggle input { | |
| margin-right: 4px; | |
| } | |
| .cache-status { | |
| font-size: 11px; | |
| color: var(--google-grey-700); | |
| margin-left: 4px; | |
| opacity: 0.8; | |
| } | |
| .raw-json { | |
| font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; | |
| font-size: 12px; | |
| line-height: 1.4; | |
| background: #fafafa; | |
| border: 1px solid var(--google-grey-200); | |
| border-radius: 8px; | |
| padding: 16px; | |
| max-height: 500px; | |
| overflow-y: auto; | |
| overflow-x: hidden ; | |
| word-wrap: break-word; | |
| word-break: break-word; | |
| width: 100%; | |
| box-sizing: border-box; | |
| } | |
| /* Disable animations to prevent flicker */ | |
| .raw-json * { | |
| animation: none ; | |
| transition: none ; | |
| } | |
| /* Override JSON formatter table layout for text wrapping */ | |
| .raw-json .json-formatter-row { | |
| display: block ; | |
| width: 100% ; | |
| table-layout: auto ; | |
| } | |
| .raw-json .json-formatter-row > * { | |
| display: inline ; | |
| max-width: 100% ; | |
| } | |
| /* Force the entire JSON formatter to use block layout */ | |
| .raw-json .json-formatter-table { | |
| display: block ; | |
| width: 100% ; | |
| table-layout: fixed ; | |
| } | |
| .raw-json .json-formatter-table, | |
| .raw-json .json-formatter-table * { | |
| table-layout: fixed ; | |
| word-wrap: break-word ; | |
| overflow-wrap: break-word ; | |
| } | |
| /* Basic JSON formatter styling */ | |
| .raw-json .json-formatter-key { | |
| color: #0066cc; | |
| } | |
| .raw-json .json-formatter-string { | |
| color: #22863a; | |
| word-wrap: break-word; | |
| word-break: break-word; | |
| white-space: pre-wrap; | |
| display: inline ; | |
| max-width: 100% ; | |
| vertical-align: top ; | |
| overflow-wrap: break-word ; | |
| } | |
| .raw-json .json-formatter-number { | |
| color: #005cc5; | |
| } | |
| .raw-json .json-formatter-boolean { | |
| color: #d73a49; | |
| } | |
| .raw-json .json-formatter-null { | |
| color: #6f42c1; | |
| } | |
| .raw-json .json-formatter-toggler { | |
| color: #586069; | |
| cursor: pointer; | |
| } | |
| .raw-json .json-formatter-toggler:hover { | |
| color: #0366d6; | |
| } | |
| /* Force text wrapping for all elements */ | |
| .raw-json .json-formatter-string, | |
| .raw-json .json-formatter-key, | |
| .raw-json .json-formatter-row, | |
| .raw-json .json-formatter-row *, | |
| .raw-json .json-formatter-preview { | |
| max-width: 100% ; | |
| overflow-wrap: break-word ; | |
| word-break: break-word ; | |
| white-space: pre-wrap ; | |
| box-sizing: border-box ; | |
| min-width: 0 ; | |
| width: auto ; | |
| } | |
| /* Prevent horizontal scrolling and text cutoff */ | |
| .raw-json, | |
| .raw-json * { | |
| max-width: 100% ; | |
| word-wrap: break-word ; | |
| overflow-wrap: break-word ; | |
| hyphens: auto ; | |
| overflow-x: hidden ; | |
| } | |
| #raw-output { | |
| width: 100% ; | |
| max-width: 100% ; | |
| box-sizing: border-box ; | |
| overflow-wrap: break-word ; | |
| } | |
| .input-header, | |
| .output-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| gap: 12px; | |
| flex-wrap: nowrap; | |
| border-bottom: 2px solid #e9ecef; | |
| padding-bottom: 4px; | |
| margin-bottom: 8px; | |
| } | |
| .input-controls { | |
| display: flex; | |
| align-items: center; | |
| gap: 16px; | |
| flex-wrap: wrap; | |
| } | |
| /* Panel controls at bottom of Input/Output container */ | |
| .panel-controls { | |
| display: flex ; | |
| justify-content: center ; | |
| align-items: center ; | |
| gap: 16px ; | |
| padding: 4px 16px ; | |
| border-top: 1px solid #e9ecef ; | |
| background: #fafbfc ; | |
| border-radius: 0 0 16px 16px ; | |
| margin-top: 0px ; | |
| margin-left: auto ; | |
| margin-right: auto ; | |
| flex-wrap: wrap ; | |
| text-align: center ; | |
| width: 100% ; | |
| box-sizing: border-box ; | |
| grid-column: 1 / -1 ; | |
| } | |
| .input-header h2, | |
| .output-header h2 { | |
| margin: 0; | |
| line-height: 1.2; | |
| } | |
| .text-area-wrapper h2 { | |
| border: none; | |
| } | |
| #prompt-output { | |
| width: 100%; | |
| height: clamp(300px, 50vh, 500px); | |
| min-height: 300px; | |
| overflow: auto; | |
| border: 2px solid #e9ecef; | |
| border-radius: 8px; | |
| background: #fafafa; | |
| padding: 16px; | |
| box-sizing: border-box; | |
| font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace; | |
| font-size: 12px; | |
| line-height: 1.4; | |
| white-space: normal; | |
| word-wrap: break-word; | |
| word-break: break-word; | |
| overflow-wrap: break-word; | |
| -webkit-overflow-scrolling: touch; | |
| scroll-behavior: smooth; | |
| } | |
| /* Markdown styling for prompt output */ | |
| #prompt-output h1 { | |
| font-family: 'Google Sans', sans-serif; | |
| font-size: 18px; | |
| font-weight: 600; | |
| color: var(--google-blue-dark); | |
| margin: 0 0 16px 0; | |
| padding-bottom: 8px; | |
| border-bottom: 2px solid var(--google-grey-200); | |
| } | |
| #prompt-output h2 { | |
| font-family: 'Google Sans', sans-serif; | |
| font-size: 16px; | |
| font-weight: 500; | |
| color: var(--google-blue-dark); | |
| margin: 24px 0 12px 0; | |
| } | |
| #prompt-output h3 { | |
| font-family: 'Google Sans', sans-serif; | |
| font-size: 14px; | |
| font-weight: 500; | |
| color: var(--google-grey-700); | |
| margin: 16px 0 8px 0; | |
| } | |
| #prompt-output strong { | |
| font-weight: 600; | |
| color: var(--google-blue-dark); | |
| } | |
| #prompt-output blockquote { | |
| margin: 12px 0; | |
| padding: 8px 16px; | |
| border-left: 4px solid var(--google-blue); | |
| background: rgba(26, 115, 232, 0.05); | |
| font-style: italic; | |
| } | |
| #prompt-output code { | |
| font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace; | |
| background: rgba(0, 0, 0, 0.05); | |
| padding: 2px 4px; | |
| border-radius: 3px; | |
| font-size: 11px; | |
| } | |
| #prompt-output pre { | |
| background: #f5f5f5; | |
| border: 1px solid var(--google-grey-200); | |
| border-radius: 6px; | |
| padding: 12px; | |
| overflow-x: auto; | |
| margin: 12px 0; | |
| font-size: 11px; | |
| line-height: 1.3; | |
| word-wrap: break-word; | |
| white-space: pre-wrap; | |
| } | |
| #prompt-output pre code { | |
| background: none; | |
| padding: 0; | |
| border-radius: 0; | |
| } | |
| #prompt-output ul, | |
| #prompt-output ol { | |
| margin: 8px 0; | |
| padding-left: 20px; | |
| } | |
| #prompt-output li { | |
| margin-bottom: 4px; | |
| line-height: 1.4; | |
| } | |
| #prompt-output p { | |
| margin: 8px 0; | |
| line-height: 1.5; | |
| font-family: 'Google Sans Text', sans-serif; | |
| font-size: 13px; | |
| } | |
| .no-bold { | |
| font-weight: 400; | |
| } | |
| .model-select-container { | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| font-size: 14px; | |
| margin: 0; | |
| } | |
| .model-select-container select { | |
| padding: 6px 12px; | |
| border-radius: 6px; | |
| border: 1px solid var(--google-grey-200); | |
| font-size: 14px; | |
| background: #fff; | |
| cursor: pointer; | |
| } | |
| .model-select-container select:focus { | |
| outline: none; | |
| border-color: var(--google-blue); | |
| box-shadow: 0 0 0 3px rgba(26, 115, 232, 0.2); | |
| } | |
| .model-select-container label { | |
| font-weight: 500; | |
| color: var(--google-grey-700); | |
| } | |
| .banner-divider { | |
| border: none; | |
| border-top: 1px solid var(--google-grey-200); | |
| margin: 24px 0 18px 0; | |
| } | |
| /* Interface Options Panel */ | |
| .interface-options-panel { | |
| margin: 16px 0; | |
| padding: 16px ; /* Override default card padding for more compact layout */ | |
| } | |
| .interface-options-header { | |
| cursor: pointer; | |
| transition: background-color 0.2s ease; | |
| border-radius: 8px; | |
| padding: 4px; | |
| margin: -4px; | |
| } | |
| .interface-options-header:hover { | |
| background-color: var(--google-grey-100); | |
| } | |
| .interface-options-title { | |
| font-family: 'Google Sans', sans-serif; | |
| font-size: 20px; | |
| font-weight: normal; | |
| margin: 0 0 6px 0; | |
| color: var(--google-grey-900); | |
| } | |
| .interface-options-summary { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| font-size: 13px; | |
| color: var(--google-grey-700); | |
| margin-bottom: 4px; | |
| } | |
| .expand-icon { | |
| color: var(--google-blue-dark); | |
| transition: | |
| transform 0.3s ease, | |
| color 0.2s ease, | |
| background-color 0.2s ease; | |
| font-size: 20px; | |
| cursor: pointer; | |
| opacity: 0.9; | |
| padding: 3px; | |
| border-radius: 50%; | |
| background-color: transparent; | |
| } | |
| .expand-icon:hover { | |
| color: var(--google-blue); | |
| opacity: 1; | |
| background-color: rgba(66, 133, 244, 0.1); | |
| transform: scale(1.05); | |
| } | |
| .expand-icon.expanded { | |
| transform: rotate(180deg); | |
| } | |
| .expand-icon.expanded:hover { | |
| transform: rotate(180deg) scale(1.05); | |
| } | |
| .interface-options-content { | |
| margin-top: 10px; | |
| transition: all 0.3s ease; | |
| } | |
| .interface-options-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); | |
| gap: 14px; | |
| margin-bottom: 10px; | |
| } | |
| .interface-option { | |
| padding: 12px; | |
| border: 1px solid var(--google-grey-200); | |
| border-radius: 8px; | |
| background: #fff; | |
| transition: border-color 0.2s ease; | |
| } | |
| .interface-option:hover { | |
| border-color: var(--google-blue-light); | |
| } | |
| .option-header { | |
| display: flex; | |
| align-items: center; | |
| margin-bottom: 6px; | |
| } | |
| .option-icon { | |
| font-size: 18px; | |
| color: var(--google-blue); | |
| margin-right: 6px; | |
| } | |
| .option-header strong { | |
| font-family: 'Google Sans', sans-serif; | |
| font-size: 14px; | |
| color: var(--google-grey-900); | |
| } | |
| .option-description { | |
| font-size: 13px; | |
| color: var(--google-grey-700); | |
| line-height: 1.3; | |
| margin: 0; | |
| } | |
| .interface-options-note { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| padding: 8px 12px; | |
| background: var(--google-grey-100); | |
| border-radius: 6px; | |
| font-size: 12px; | |
| color: var(--google-grey-700); | |
| } | |
| .note-icon { | |
| font-size: 16px; | |
| color: var(--google-blue); | |
| margin-right: 6px; | |
| } | |
| /* Clinical Significance Legend */ | |
| .clinical-significance-legend { | |
| margin: 0 0 4px 0; | |
| padding: 6px 12px; | |
| background: #fff; | |
| border: 1px solid var(--google-grey-200); | |
| border-radius: 6px; | |
| display: flex; | |
| justify-content: flex-end; | |
| align-items: center; | |
| gap: 16px; | |
| font-size: 12px; | |
| } | |
| .legend-title { | |
| font-weight: 600; | |
| color: var(--google-grey-700); | |
| font-size: 12px; | |
| } | |
| .legend-item { | |
| display: inline-flex; | |
| align-items: center; | |
| color: var(--google-grey-700); | |
| font-weight: 500; | |
| } | |
| .legend-line { | |
| display: inline-block; | |
| width: 18px; | |
| height: 2px; | |
| border-radius: 1px; | |
| margin-right: 4px; | |
| } | |
| .legend-line.minor { | |
| background-color: #fbc02d; | |
| } | |
| .legend-line.major { | |
| background-color: #f48fb1; | |
| } | |
| .legend-line.grounding { | |
| background-color: rgba(66, 165, 245, 0.7); | |
| border: 1px solid rgba(66, 165, 245, 0.8); | |
| } | |
| .action-bar { | |
| margin-top: 16px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 16px; | |
| position: relative; | |
| } | |
| .action-bar #predict-button { | |
| margin: 0; | |
| } | |
| /* Social sharing buttons */ | |
| /* Top header share placement */ | |
| .share-top { | |
| display: none; | |
| align-items: center; | |
| gap: 8px; | |
| font-size: 14px; | |
| margin: 8px 0 24px 0; | |
| justify-content: center; | |
| color: var(--google-grey-700); | |
| } | |
| /* Bottom share placement */ | |
| .share-bottom { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| font-size: 12px; | |
| margin: 48px 0 8px 0; | |
| justify-content: center; | |
| flex-wrap: wrap; | |
| color: var(--google-grey-600); | |
| opacity: 0.85; | |
| } | |
| /* Bottom share button styling */ | |
| .share-bottom .shr-btn { | |
| width: 24px; | |
| height: 24px; | |
| background: transparent; | |
| border: none; | |
| opacity: 0.7; | |
| } | |
| .share-bottom .shr-btn svg { | |
| width: 18px; | |
| height: 18px; | |
| } | |
| .share-bottom .shr-btn:hover { | |
| background: #f8f9fa; | |
| opacity: 1; | |
| transform: none; | |
| box-shadow: none; | |
| } | |
| /* Common share button styling */ | |
| .shr-btn { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 32px; | |
| height: 32px; | |
| border-radius: 50%; | |
| background: #f8f9fa; | |
| color: #5f6368; | |
| transition: all 0.2s ease; | |
| text-decoration: none; | |
| border: 1px solid #e8eaed; | |
| } | |
| .shr-btn:hover { | |
| background: #e8f0fe; | |
| transform: translateY(-1px); | |
| box-shadow: 0 2px 8px rgba(66, 133, 244, 0.2); | |
| } | |
| .shr-btn:focus { | |
| outline: 2px solid var(--google-blue); | |
| outline-offset: 2px; | |
| } | |
| .shr-btn.shr-x { | |
| color: #1da1f2; | |
| } | |
| .shr-btn.shr-x:hover { | |
| background: #e3f2fd; | |
| color: #1976d2; | |
| } | |
| .shr-btn.shr-li { | |
| color: #0a66c2; | |
| } | |
| .shr-btn.shr-li:hover { | |
| background: #e3f2fd; | |
| color: #1565c0; | |
| } | |
| /* Mobile-only toggles - hidden on desktop */ | |
| .mobile-toggle { | |
| display: none; | |
| } | |
| /* Mobile optimizations */ | |
| @media (max-width: 768px) { | |
| .share-bottom { | |
| margin-top: 20px; | |
| } | |
| .shr-btn { | |
| width: 28px; | |
| height: 28px; | |
| } | |
| .shr-btn svg { | |
| width: 16px; | |
| height: 16px; | |
| } | |
| /* Center Input and Output headers on mobile */ | |
| .input-header, | |
| .output-header { | |
| justify-content: center; | |
| text-align: center; | |
| } | |
| /* Mobile panel controls - 2-column grid layout */ | |
| .panel-controls { | |
| display: grid ; | |
| grid-template-columns: repeat(2, 1fr); | |
| column-gap: 8px; | |
| row-gap: 8px; | |
| padding: 12px 16px; | |
| justify-items: stretch; | |
| align-items: center; | |
| border-top: 1px solid #e9ecef; | |
| background: #fafbfc; | |
| } | |
| /* Grid item styling for all controls */ | |
| .panel-controls .model-select-container, | |
| .panel-controls .cache-toggle, | |
| .panel-controls .prompt-toggle.mobile-toggle, | |
| .panel-controls .raw-toggle.mobile-toggle { | |
| font-size: 12px ; | |
| color: var(--google-grey-700) ; | |
| font-weight: normal ; | |
| user-select: none; | |
| display: flex; | |
| align-items: center; | |
| gap: 4px; | |
| transition: none ; | |
| text-decoration: none ; | |
| } | |
| /* Hide desktop header toggles on mobile */ | |
| .input-header .prompt-toggle, | |
| .output-header .raw-toggle { | |
| display: none; | |
| } | |
| /* Hide cache status text on mobile */ | |
| .cache-status { | |
| display: none; | |
| } | |
| /* Standardized checkbox sizing */ | |
| .panel-controls label input { | |
| width: 16px; | |
| height: 16px; | |
| margin-right: 4px ; | |
| } | |
| /* Uniform checkbox appearance */ | |
| .panel-controls .cache-toggle input, | |
| .panel-controls .prompt-toggle.mobile-toggle input, | |
| .panel-controls .raw-toggle.mobile-toggle input { | |
| appearance: auto; | |
| margin: 0 4px 0 0 ; | |
| padding: 0; | |
| border: none; | |
| background: none; | |
| width: 16px ; | |
| height: 16px ; | |
| } | |
| /* Remove hover effects on mobile */ | |
| .panel-controls .cache-toggle:hover, | |
| .panel-controls .prompt-toggle.mobile-toggle:hover, | |
| .panel-controls .raw-toggle.mobile-toggle:hover { | |
| color: var(--google-grey-700) ; | |
| transition: none ; | |
| transform: none ; | |
| } | |
| /* Mobile disclaimer styling */ | |
| .disclaimer-container { | |
| margin-top: 24px; | |
| } | |
| .disclaimer-box { | |
| font-size: 12px ; | |
| padding: 10px 14px ; | |
| background: #fafbfc ; | |
| border-left: 3px solid #e8c547 ; | |
| box-shadow: 0 1px 2px rgba(60, 64, 67, 0.05) ; | |
| border-radius: 8px ; | |
| gap: 10px ; | |
| } | |
| .disclaimer-icon { | |
| font-size: 16px ; | |
| color: #e8c547 ; | |
| } | |
| .disclaimer-text { | |
| color: #6b7280 ; | |
| line-height: 1.4 ; | |
| } | |
| /* Mobile Google Research logo */ | |
| .google-research-logo { | |
| margin-top: 2px ; | |
| margin-bottom: 20px ; | |
| } | |
| .attribution .google-research-logo img { | |
| height: 1.4em ; /* ~21-22px when subtitle is 15-16px */ | |
| opacity: 1 ; | |
| } | |
| } | |
| /* Small mobile devices - tighter logo scaling */ | |
| @media (max-width: 480px) { | |
| .attribution .google-research-logo img { | |
| height: 1.3em ; /* ~20px, prevents headline competition */ | |
| } | |
| } | |
| /* Print styles - ensure logo visibility */ | |
| @media print { | |
| .attribution .google-research-logo img { | |
| opacity: 1 ; | |
| } | |
| } | |
| /* Position legend on the right - desktop only */ | |
| @media (min-width: 769px) { | |
| .clinical-significance-legend { | |
| position: absolute; | |
| right: 0; | |
| font-size: 0.8em; | |
| } | |
| } | |
| /* === MOBILE RESPONSIVE OPTIMIZATIONS === */ | |
| /* Mobile breakpoint for tablets and phones */ | |
| @media (max-width: 768px) { | |
| /* Smaller citation note on mobile */ | |
| .citation-note { | |
| font-size: 12px; | |
| padding: 8px 14px; | |
| margin: 10px 0 0 0; | |
| } | |
| /* Page wrapper adjustments for mobile */ | |
| .page-wrapper { | |
| padding: 16px; | |
| max-width: 100%; | |
| } | |
| /* Header optimization for mobile */ | |
| .header-container h1 { | |
| margin-bottom: 8px; | |
| margin-top: 1.2rem; /* Reduce top margin to keep content above fold */ | |
| } | |
| } | |
| /* Optional forced break for perfect balance on very narrow screens */ | |
| @media (max-width: 430px) { | |
| .brand-split { | |
| display: block; /* Forces line break on very narrow screens */ | |
| } | |
| .sub-header { | |
| font-size: 16px; | |
| } | |
| /* Card padding optimization for mobile */ | |
| .card { | |
| padding: 16px; | |
| border-radius: 8px; | |
| } | |
| .banner.card { | |
| padding: 16px; | |
| border-radius: 8px; | |
| margin-top: 16px; | |
| } | |
| /* Keep side-by-side but optimize for mobile */ | |
| .text-area-container { | |
| grid-template-columns: 1fr 1fr ; | |
| gap: 12px ; | |
| } | |
| .large-text-area { | |
| height: clamp(300px, 55vh, 450px); | |
| min-height: 300px; | |
| font-size: 13px ; | |
| } | |
| .output-container { | |
| height: clamp(300px, 55vh, 450px); | |
| min-height: 300px; | |
| } | |
| .output-text { | |
| font-size: 13px ; | |
| } | |
| #prompt-output { | |
| height: clamp(300px, 55vh, 450px); | |
| min-height: 300px; | |
| } | |
| /* Compact tip text for mobile */ | |
| .samples-tip { | |
| font-size: 12px ; | |
| padding: 8px 12px ; | |
| margin-top: 12px ; | |
| line-height: 1.4 ; | |
| } | |
| .output-container, | |
| .large-text-area, | |
| #prompt-output { | |
| -webkit-overflow-scrolling: touch ; | |
| scroll-behavior: smooth ; | |
| transform: translateZ(0) ; | |
| -webkit-transform: translateZ(0) ; | |
| } | |
| /* Mobile highlighting and touch interactions */ | |
| .text-span { | |
| cursor: pointer ; | |
| padding: 2px 1px ; | |
| margin: 1px 0 ; | |
| border-radius: 3px ; | |
| transition: all 0.2s ease ; | |
| /* Increase touch target size slightly */ | |
| min-height: 18px ; | |
| display: inline ; | |
| white-space: normal ; /* ensure wrapping inside span */ | |
| overflow-wrap: anywhere ; /* long words like "FDG/CT" */ | |
| word-break: break-word ; /* safety net */ | |
| position: relative ; | |
| touch-action: manipulation ; | |
| } | |
| .text-span:hover, | |
| .text-span:active { | |
| background-color: rgba(66, 165, 245, 0.2) ; | |
| outline: 1px solid rgba(66, 165, 245, 0.3) ; | |
| transform: none ; /* Disable transform on mobile */ | |
| } | |
| /* On mobile, add subtle visual cue that elements are tappable */ | |
| @media (hover: none) and (pointer: coarse) { | |
| .text-span { | |
| position: relative; | |
| } | |
| .text-span:active { | |
| transform: scale(0.98) ; | |
| transition: transform 0.1s ease ; | |
| } | |
| } | |
| .text-span.highlight { | |
| background-color: rgba(66, 165, 245, 0.35) ; | |
| outline: 1px solid rgba(66, 165, 245, 0.5) ; | |
| font-weight: 500 ; | |
| } | |
| /* Input textarea selection - exactly match output highlighting */ | |
| .large-text-area::selection { | |
| background-color: rgba(66, 165, 245, 0.35) ; | |
| color: inherit ; | |
| } | |
| .large-text-area::-moz-selection { | |
| background-color: rgba(66, 165, 245, 0.35) ; | |
| color: inherit ; | |
| } | |
| /* Header adjustments for mobile - make more compact */ | |
| .input-header, | |
| .output-header { | |
| flex-direction: row ; | |
| flex-wrap: wrap ; | |
| align-items: center ; | |
| gap: 6px ; | |
| margin-bottom: 6px ; | |
| } | |
| .input-header h2, | |
| .output-header h2 { | |
| font-size: 1em ; | |
| margin: 0 ; | |
| } | |
| /* Compact toggles for mobile headers */ | |
| .prompt-toggle, | |
| .raw-toggle { | |
| font-size: 10px ; | |
| } | |
| .prompt-toggle label, | |
| .raw-toggle label { | |
| font-size: 10px ; | |
| } | |
| /* Make toggle labels specifically smaller */ | |
| .prompt-toggle, | |
| .raw-toggle { | |
| color: var(--google-grey-700) ; | |
| font-weight: 400 ; | |
| } | |
| /* Control panels optimization for mobile */ | |
| .panel-controls { | |
| flex-direction: row ; | |
| flex-wrap: wrap ; | |
| justify-content: center ; | |
| gap: 8px ; | |
| padding: 8px ; | |
| } | |
| /* ========== Mobile layout for Process button + legend ========== */ | |
| .action-bar { | |
| display: flex; /* already in your base CSS */ | |
| flex-direction: column; /* vertical stack */ | |
| align-items: center; /* centre both items */ | |
| gap: 32px; | |
| margin-top: 24px; | |
| } | |
| /* Process button - REDUCED SIZE FOR MOBILE */ | |
| #predict-button { | |
| /* width 100% on small screens, but <=200px as you had */ | |
| width: 100%; | |
| max-width: 180px; | |
| padding: 10px 16px; | |
| font-size: 14px; | |
| /* no position, no z-index, no order change needed */ | |
| } | |
| /* Legend – full-width, centred text */ | |
| .clinical-significance-legend { | |
| display: flex; /* keep the flex row */ | |
| flex-wrap: wrap; | |
| justify-content: center; | |
| gap: 8px; | |
| width: 100%; | |
| max-width: 320px; | |
| text-align: center; /* labels do not hug the left */ | |
| font-size: 0.75em; /* you already tested this */ | |
| /* Normal flow item – no position / top / left / z-index */ | |
| } | |
| .legend-item { | |
| font-size: 1em; | |
| } | |
| /* Interface options panel for mobile */ | |
| .interface-options-grid { | |
| grid-template-columns: 1fr ; | |
| gap: 12px ; | |
| } | |
| .interface-option { | |
| padding: 12px ; | |
| } | |
| /* Mobile toggle standardization */ | |
| .cache-toggle, | |
| .raw-toggle, | |
| .prompt-toggle, | |
| .mobile-toggle { | |
| font-size: 12px ; | |
| color: var(--google-grey-700) ; | |
| font-weight: normal ; | |
| transition: none ; | |
| } | |
| .model-select-container { | |
| text-align: center ; | |
| } | |
| .model-select-container label { | |
| font-size: 12px ; | |
| } | |
| #model-select { | |
| padding: 6px ; | |
| font-size: 12px ; | |
| } | |
| /* Cache status text */ | |
| .cache-status { | |
| font-size: 11px ; | |
| } | |
| } | |
| /* Smaller mobile phones */ | |
| @media (max-width: 480px) { | |
| /* Even smaller citation note on small phones */ | |
| .citation-note { | |
| font-size: 11px; | |
| padding: 6px 12px; | |
| } | |
| .page-wrapper { | |
| padding: 8px; | |
| } | |
| .header-container h1 { | |
| font-size: 22px; | |
| } | |
| .card { | |
| padding: 8px; | |
| } | |
| /* Even more compact for very small screens */ | |
| .text-area-container { | |
| gap: 8px ; | |
| } | |
| .large-text-area, | |
| .output-container, | |
| #prompt-output { | |
| height: clamp(250px, 50vh, 400px); | |
| min-height: 250px; | |
| } | |
| .large-text-area { | |
| font-size: 12px ; | |
| } | |
| .output-text { | |
| font-size: 12px ; | |
| } | |
| /* Even more compact tip for very small screens */ | |
| .samples-tip { | |
| font-size: 11px ; | |
| padding: 6px 10px ; | |
| margin-top: 8px ; | |
| line-height: 1.3 ; | |
| } | |
| /* Smaller button for very small screens */ | |
| #predict-button { | |
| max-width: 160px ; | |
| padding: 8px 14px ; | |
| font-size: 13px ; | |
| } | |
| /* Tighter spacing for very small screens */ | |
| .action-bar { | |
| gap: 28px; /* slightly smaller gap for tiny screens */ | |
| margin-top: 20px; | |
| } | |
| .clinical-significance-legend { | |
| font-size: 0.65em; /* smaller text for tiny screens */ | |
| max-width: 300px; /* slightly narrower */ | |
| } | |
| .input-header h2, | |
| .output-header h2 { | |
| font-size: 0.9em ; | |
| } | |
| /* Extra small toggle labels for tiny screens */ | |
| .prompt-toggle, | |
| .raw-toggle { | |
| font-size: 9px ; | |
| } | |
| .prompt-toggle label, | |
| .raw-toggle label { | |
| font-size: 9px ; | |
| } | |
| } | |
| /* Simple Error Message Styling */ | |
| .error-message-simple { | |
| background-color: #fef2f2; | |
| border: 1px solid #fecaca; | |
| border-radius: 8px; | |
| padding: 24px; | |
| margin: 16px 0; | |
| text-align: center; | |
| animation: fadeIn 0.3s ease-in; | |
| } | |
| .error-message-simple h3 { | |
| color: #991b1b; | |
| margin: 0 0 16px 0; | |
| font-size: 1.35rem; | |
| font-weight: 600; | |
| font-family: 'Google Sans', sans-serif; | |
| } | |
| .error-message-simple p { | |
| margin: 0 0 12px 0; | |
| line-height: 1.6; | |
| color: #7f1d1d; | |
| } | |
| .error-message-simple strong { | |
| color: #991b1b; | |
| font-weight: 600; | |
| } | |
| .error-message-simple .suggestion { | |
| color: #92400e; | |
| font-style: italic; | |
| margin-bottom: 20px; | |
| } | |
| .error-message-simple .deploy-note { | |
| background-color: #fef3c7; | |
| border-radius: 6px; | |
| padding: 12px; | |
| margin-top: 16px; | |
| font-size: 0.9rem; | |
| color: #78350f; | |
| } | |
| .error-message-simple .deploy-note strong { | |
| color: #92400e; | |
| } | |
| @keyframes fadeIn { | |
| from { | |
| opacity: 0; | |
| transform: translateY(-10px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| /* Copy and clear button overlays always use light mode styling */ | |
| /* Error messages always use light mode styling */ | |