rad_explain / static /css /style.css
lirony's picture
Initial commit
352a4b6
/**
* Copyright 2025 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* Basic Reset & Body Style */
html {
height: 100%;
--image-fixed-width: 280px;
}
body {
font-family: sans-serif;
line-height: 1.6;
background-color: #f4f4f4;
color: #333;
margin: 0;
display: flex;
flex-direction: column;
user-select: none;
}
.main {
display: none; /*display: grid;*/
grid-template-columns: 1fr minmax(500px, 800px) minmax(300px, 1fr);
grid-template-rows: auto;
column-gap: 20px;
row-gap: 10px;
padding: 30px;
}
h1,
h2 {
color: #333;
}
.page-header h1 {
margin: 0;
}
.container {
display: flex;
flex-wrap: wrap;
gap: 25px;
padding: 20px;
flex-grow: 1;
justify-content: center;
}
/* Top Navigation Styles */
.top-navigation {
display: flex;
align-items: center;
padding-top: 30px;
gap: 15px; /* Space between back button and case tabs */
border-bottom: 1px solid #E0E0E0; /* Optional: a subtle separator */
margin-bottom: 10px;
align-items: flex-start;
justify-content: center;
}
.nav-button {
display: inline-flex; /* Changed from inline-flex on parent to allow direct styling */
justify-content: center;
align-items: center;
cursor: pointer;
user-select: none;
}
.nav-button-inner {
overflow: hidden;
border-radius: 100px; /* Very rounded corners */
outline: 1px solid #C4C7C5; /* Outline color */
outline-offset: -1px; /* Outline inside */
display: flex;
justify-content: center;
align-items: center;
padding: 6px 12px;
gap: 8px; /* Increased gap slightly for better visual separation */
transition: background-color 0.2s ease;
}
.nav-button-icon {
font-size: 20px; /* Icon size */
color: #444746; /* Icon color */
display: flex;
align-items: center;
justify-content: center;
}
.nav-button-text {
color: #444746; /* Text color */
font-size: 14px;
font-family: 'Google Sans Text', sans-serif;
font-weight: 500;
line-height: 20px;
white-space: nowrap;
}
.nav-button-case.active .nav-button-inner,
.nav-button:hover .nav-button-inner {
background-color: rgba(68, 71, 70, 0.10); /* Focused/hover background */
}
.nav-button-info {
color: #004A77;
margin: 0 20px;
}
/* Column Styles */
.report-section,
.image-section,
.explanation-section {
position: relative;
float: right;
}
.image-section {
justify-content: center;
display: flex;
flex-direction: column;
justify-self: end;
}
.report-section {
flex: 1;
max-width: 800px;
}
.image-header {
text-align: center;
color: black;
font-size: 22px;
font-family: Google Sans;
font-weight: 400;
line-height: 28px;
word-wrap: break-word;
margin: 5px;
}
.case-selector-tabs-container {
display: grid;
justify-content: center;
align-items: center;
grid-template-columns: min-content auto;
column-gap: 20px;
row-gap: 10px;
padding-left: 20px;
white-space: nowrap;
}
.case-selector-tabs-modality-container {
display: flex;
align-items: center;
width: 100%;
justify-content: flex-start;
}
.case-selector-tabs {
display: flex;
flex-wrap: wrap;
}
/* Report Text & Sentences */
.report-text-area {
padding: 30px;
overflow-y: auto;
background-color: #fdfdfd;
border-radius: 28px;
border: 2px solid #E9E9E9;
}
/* Styles for clickable sentences within the report text area */
.report-sentence {
cursor: pointer;
padding: 2px 0;
transition: background-color 0.2s ease;
border-radius: 14.272px;
border: 1.359px solid #F1E161;
}
.report-sentence:hover {
background: #F1E161;
mix-blend-mode: multiply;
}
.report-sentence.selected-sentence {
background: #F1E161;
mix-blend-mode: multiply;
}
/* Image Section */
.image-container {
position: relative;
border: 1px solid #ccc;
min-height: 100px;
display: flex;
flex-direction: column;
background-color: #f0f0f0;
margin: 0 auto; /* Keep auto margin for centering if desired */
width: var(--image-fixed-width);
}
.image-container img {
display: block;
max-width: 100%;
height: auto;
}
#report-image {
width: var(--image-fixed-width);
min-width: var(--image-fixed-width); /* Ensure min-width also uses the variable if it's meant to be the same */
}
#image-loading {
width: var(--image-fixed-width);
}
/* Note specific to CT images, displayed under the image */
#ct-image-note {
display: none; /* Initially hidden, controlled by JavaScript */
text-align: center;
margin-top: 10px;
font-size: 0.9em;
color: #555;
padding: 0 10px; /* Add some padding so text doesn't touch edges if it wraps */
word-wrap: break-word; /* Ensures text wraps to prevent overflow */
width: var(--image-fixed-width); /* Same width as the image */
}
.marker {
position: absolute;
transform: translate(-50%, -50%);
pointer-events: none;
display: none;
transition: top 0.3s ease-in-out, left 0.3s ease-in-out;
width: max-content;
}
/* Explanation Section */
.explanation-box {
border: 1px solid #eee;
min-height: 50px;
background-color: #F1E161;
box-shadow: 0px 5px 5px 0px rgba(0, 0, 0, 0.25);
position: absolute;
left: -20px;
top: 0px;
width: 300px;
transition: top 0.3s ease-in-out, background-color 0.3s ease, height 0.3s ease;
}
.explanation-header {
font-size: 22px;
font-style: normal;
font-weight: 400;
padding: 10px 10px 0;
}
.loading .explanation-header {
display: none;
}
/* New style for the content wrapper inside explanation-box */
#explanation-content {
padding: 10px;
overflow-y: auto;
height: 100%;
box-sizing: border-box;
}
/* Style for when the box is loading */
.explanation-box.loading {
background-color: #cfcfcf;
}
/* Adjust #explanation-loading (the div element) to be an overlay */
#explanation-loading {
display: none;
font-style: italic;
color: #777;
text-align: center;
padding: 10px;
}
/* Show #explanation-loading when its parent #explanation-output (which is .explanation-box) has class 'loading' */
#explanation-output.loading > #explanation-loading {
display: flex;
}
/* Utility Classes */
.error-message {
color: #d9534f;
background-color: #f2dede;
border: 1px solid #ebccd1;
padding: 10px;
border-radius: 4px;
margin-top: 10px;
text-align: center;
}
/* Responsive Adjustments (Optional) */
@media (max-width: 768px) {
.container {
flex-direction: column;
}
}
/* Info Page Styles */
.info {
flex-grow: 1;
display: flex;
justify-content: center;
align-items: center;
}
.info-page-container {
display: flex;
flex-direction: row-reverse;
flex-wrap: wrap;
align-items: center;
justify-content: center;
gap: 40px;
padding: 40px;
background-color: #fff;
max-width: 1200px;
margin: 20px auto;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
box-sizing: border-box;
}
.info-content {
flex: 1;
min-width: 350px;
max-width: 600px;
display: flex;
flex-direction: column;
gap: 20px;
font-size: 18px;
}
.info-header {
margin-bottom: 10px;
}
.info-title-med,
.info-title-demo {
font-family: 'Google Sans', sans-serif;
font-size: 48px;
font-weight: 400;
}
#info-button .nav-button-inner{
background-color: #C2E7FF;
}
.info-title-demo {
color: #969696;
margin-left: 10px;
}
.info-subtitle-demo {
color: #969696;
font-size: 28px;
}
.info-text {
font-family: 'Google Sans', sans-serif;
line-height: 1.6;
color: #333;
}
.info-button {
font-family: 'Google Sans Text', sans-serif;
background-color: #0B57D0;
color: white;
font-size: 14px;
font-weight: 500;
padding: 12px 24px;
border: none;
border-radius: 100px;
cursor: pointer;
text-align: center;
transition: background-color 0.3s ease;
align-self: flex-start;
}
/* Hover state for the button */
.info-button:hover {
background-color: #0a4db8;
/* Darker blue on hover */
}
.info-disclaimer-box {
border: 1px solid #CDCDCD;
border-radius: 15px;
padding: 15px 20px;
margin-top: 20px;
}
.info-disclaimer-text {
font-family: 'Google Sans', sans-serif;
color: #333;
line-height: 1.5;
margin: 0;
font-size: 14px;
}
.info-disclaimer-title {
border-radius: 14.272px;
border: 1.359px solid #F1E161;
background: #F1E161;
mix-blend-mode: multiply;
}
.info-disclaimer-link {
color: #0B57D0;
font-weight: 500;
text-decoration: none;
}
.info-disclaimer-link:hover {
text-decoration: underline;
}
.info-image-container {
flex: 1;
min-width: 300px;
max-width: 500px;
display: flex;
justify-content: center;
align-items: center;
}
.info-image {
max-width: 100%;
height: auto;
border-radius: 8px;
}
/* Responsive adjustments for info page */
@media (max-width: 768px) {
.info-page-container {
flex-direction: column;
padding: 20px;
margin: 10px;
}
.info-content {
max-width: 100%;
align-items: center;
text-align: center;
}
.info-button {
align-self: center;
}
.info-header {
text-align: center;
}
.info-title-med,
.info-title-demo {
font-size: 36px;
}
.info-text {
font-size: 16px;
}
}
/* --- Immersive Info Dialog Styles --- */
.dialog-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.6); /* Semi-transparent backdrop */
display: flex;
align-items: center;
justify-content: center;
z-index: 1000; /* Ensure it's on top */
opacity: 0;
visibility: hidden;
transition: opacity 0.3s ease, visibility 0.3s ease;
}
.dialog-overlay.active {
opacity: 1;
visibility: visible;
}
.dialog-box {
background: #fff;
border-radius: 12px;
box-shadow: 0 8px 30px rgba(0,0,0,0.15);
width: 85%;
max-width: 800px; /* Adjust for desired largeness */
max-height: 85vh; /* Ensure it fits vertically and allows scrolling */
position: relative;
display: flex;
flex-direction: column;
overflow: hidden; /* Important for border-radius with scrollable content */
transform: scale(0.95);
transition: transform 0.3s ease;
}
.dialog-overlay.active .dialog-box {
transform: scale(1);
}
.dialog-title-text {
padding: 24px 24px 16px 24px;
margin: 0;
font-size: 1.6rem; /* Adjust as needed */
font-weight: 500; /* Using Google Sans weight */
color: #202124; /* Dark grey text color */
border-bottom: 1px solid #e0e0e0; /* Subtle separator */
flex-shrink: 0; /* Prevent title from shrinking */
}
.dialog-body-scrollable {
padding: 16px 24px 24px 24px;
overflow-y: auto; /* Enable scrolling for TBD content */
flex-grow: 1; /* Allow body to take available space */
color: #3c4043; /* Standard body text color */
line-height: 1.6;
}
.dialog-close-btn {
position: absolute;
top: 12px;
right: 12px;
background: transparent;
border: none;
cursor: pointer;
padding: 10px; /* Increase clickable area */
line-height: 0; /* Helps align icon if it's just an icon */
border-radius: 50%;
transition: background-color 0.2s ease-in-out;
z-index: 10; /* Ensure close button is above title/body */
}
.dialog-close-btn:hover {
background-color: rgba(0,0,0,0.08);
}
.dialog-close-btn .material-symbols-outlined {
font-size: 24px; /* Standard Material Icon size */
color: #5f6368; /* Standard icon color */
display: block; /* Better for layout */
}
.hf-logo {
vertical-align: middle;
width: 30px;
}
.floating-disclaimer {
padding: 5px 10px;
margin-top: 10px;
color: #333;
display: flex;
align-items: center;
font-size: 12px;
background-color: lightcyan;
text-align: justify;
}
.disclaimer-icon {
vertical-align: middle;
margin-right: 10px;
font-weight: 300 !important;
}
.nav-button-back {
/*justify-self: start;
margin-left: 30px;*/
}