TerraEye / io-app-front /src /components /AdvancedAnalysisModal /AdvancedAnalysisModal.module.css
janpiechota's picture
error handling for advanced analysis
a17b0ec
.modalContent {
background-color: rgba(15, 15, 18, 0.95) !important;
backdrop-filter: blur(40px) saturate(180%) !important;
border: 1px solid rgba(255, 255, 255, 0.08) !important;
border-radius: 16px !important;
color: white !important;
box-shadow: 0 24px 80px rgba(0, 0, 0, 0.8) !important;
}
.modalHeader {
background: linear-gradient(to bottom, rgba(15, 15, 18, 0.95), rgba(15, 15, 18, 0.8)) !important;
backdrop-filter: blur(40px) saturate(180%) !important;
padding: 24px 32px !important;
position: sticky;
top: 0;
z-index: 1000;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.modalBody { background: transparent !important; padding: 0 32px 32px 32px !important; }
.modalTitle { font-size: 1.25rem; font-weight: 700; letter-spacing: 0.5px; color: white; }
.dualLayout {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 32px;
align-items: start;
}
.modelColumn {
background-color: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: 12px;
padding: 24px;
height: 100%;
}
.columnHeader {
text-align: center;
font-size: 1.1rem;
font-weight: 700;
text-transform: uppercase;
color: rgba(255, 255, 255, 0.9);
margin-bottom: 24px;
padding-bottom: 12px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.imagesGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 20px;
}
.imageCard {
text-align: center;
background: rgba(0, 0, 0, 0.2);
padding: 12px;
border-radius: 10px;
transition: transform 0.2s ease;
}
.imageCard:hover {
background: rgba(255, 255, 255, 0.03);
}
.cardTitle {
font-size: 0.85rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 10px;
}
.cardFrame {
width: 100%;
background-color: #000;
border-radius: 8px;
border-width: 2px;
border-style: solid;
overflow: hidden;
box-shadow: 0 4px 20px rgba(0,0,0,0.4);
}
.cardImg {
width: 100%;
height: auto;
object-fit: contain;
display: block;
}
.cardSubtitle {
margin-top: 8px;
font-size: 0.75rem;
color: rgba(255, 255, 255, 0.5);
}
.masksSection {
grid-column: 1 / -1;
background-color: rgba(255, 255, 255, 0.02);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: 12px;
padding: 24px;
margin-top: 10px;
}
.masksHeader {
text-align: center;
font-size: 1rem;
font-weight: 600;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 20px;
text-transform: uppercase;
}
.masksGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 16px;
}
.maskCard {
border: 1px solid;
border-radius: 8px;
overflow: hidden;
background: rgba(0, 0, 0, 0.3);
display: flex;
flex-direction: column;
}
.maskTitleBar {
padding: 8px 12px;
font-size: 0.8rem;
font-weight: 700;
color: white;
}
.maskImg {
width: 100%;
aspect-ratio: 1 / 1;
object-fit: contain;
background: #000;
}
.maskInfo {
padding: 10px;
}
.maskDesc {
font-size: 0.75rem;
color: rgba(255, 255, 255, 0.6);
margin-bottom: 6px;
}
.maskFormula {
font-family: monospace;
font-size: 0.7rem;
color: #4dabf7;
background: rgba(255, 255, 255, 0.05);
padding: 4px;
border-radius: 4px;
display: inline-block;
}
.metricsSection {
grid-column: 1 / -1;
background-color: rgba(255, 255, 255, 0.02);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: 12px;
padding: 24px;
margin-top: 20px;
}
.metricsSubsection {
margin-bottom: 32px;
}
.metricsSubsection:not(:last-child) {
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
padding-bottom: 32px;
}
.metricsHeader {
text-align: center;
font-size: 0.95rem;
font-weight: 600;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 20px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.mainMetricsGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
gap: 12px;
margin-bottom: 24px;
}
.metricCard {
border: 1px solid;
border-radius: 8px;
padding: 16px;
background: rgba(0, 0, 0, 0.2);
text-align: center;
transition: all 0.2s ease;
}
.metricCard:hover {
background: rgba(255, 255, 255, 0.05);
transform: translateY(-2px);
}
.metricLabel {
font-size: 0.75rem;
color: rgba(255, 255, 255, 0.6);
text-transform: uppercase;
letter-spacing: 0.3px;
margin-bottom: 8px;
font-weight: 500;
}
.metricValueContainer {
display: flex;
justify-content: center;
align-items: baseline;
gap: 4px;
}
.metricValueText {
font-size: 1.5rem;
font-weight: 700;
}
.metricUnit {
font-size: 0.8rem;
font-weight: 500;
}
.classDetailsSection {
margin-top: 24px;
border-top: 1px solid rgba(255, 255, 255, 0.06);
padding-top: 20px;
}
.classDetailsHeader {
font-size: 0.85rem;
font-weight: 600;
color: rgba(255, 255, 255, 0.7);
text-transform: uppercase;
letter-spacing: 0.3px;
margin-bottom: 16px;
}
.classDetailsGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 12px;
}
.classMetricCard {
background: rgba(255, 255, 255, 0.04);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: 8px;
padding: 12px;
}
.classMetricName {
font-size: 0.8rem;
font-weight: 700;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 8px;
text-transform: uppercase;
}
.classMetricValues {
display: flex;
flex-direction: column;
gap: 4px;
}
.classMetricRow {
display: flex;
justify-content: space-between;
font-size: 0.75rem;
color: rgba(255, 255, 255, 0.6);
}
.metricValue {
color: rgba(255, 255, 255, 0.9);
font-weight: 600;
}
.startAnalysisButton {
transition: transform 0.5s cubic-bezier(0.25, 1, 0.5, 1), background-color 0.4s ease;
will-change: transform;
transform: scale(1);
}
.startAnalysisButton:hover {
transform: scale(1.02);
}
.startAnalysisButton:active {
transform: scale(0.96);
transition-duration: 0.1s;
}
.errorBox {
display: flex;
align-items: center;
gap: 10px;
padding: 12px;
border-radius: 8px;
background-color: rgba(255, 0, 0, 0.1);
border: 1px solid rgba(255, 0, 0, 0.2);
color: #ff8787;
backdrop-filter: blur(10px);
margin-bottom: 8px;
}