infravision-ai-api / frontend /src /styles /mobile-responsive.css
github-actions
Auto deploy
c46c987
Raw
History Blame Contribute Delete
13.3 kB
/* ================================================ */
/* MOBILE RESPONSIVE STYLES FOR INFRAVISION AI */
/* ================================================ */
/* Mobile Breakpoints:
- Small (< 480px): Phones
- Medium (480-768px): Tablets (portrait)
- Large (768-1024px): Tablets (landscape)
- XL (> 1024px): Desktop
*/
/* ================================================ */
/* SMALL DEVICES (< 480px) - PHONES */
/* ================================================ */
@media (max-width: 479px) {
/* Base Adjustments */
html {
font-size: 14px;
}
body {
overflow-x: hidden;
}
/* App Container */
.app-container {
padding: 0;
}
/* Hero Section */
.hero-section {
min-height: auto;
padding: 1rem 0;
background-size: 20px 20px, 20px 20px, 15px 15px, 15px 15px;
display: flex;
align-items: stretch;
justify-content: center;
}
.hero-overlay {
display: none;
}
.hero-content {
grid-template-columns: 1fr;
gap: 1.5rem;
padding: 1rem;
max-width: 100%;
width: 100%;
overflow: hidden;
}
.hero-title {
font-size: 2rem;
gap: 0.5rem;
margin-bottom: 1rem;
text-shadow: 0 2px 10px rgba(59, 130, 246, 0.3);
}
.hero-subtitle {
font-size: 0.95rem;
margin-bottom: 1rem;
line-height: 1.4;
}
.hero-features {
gap: 1rem;
}
.hero-feature {
display: flex;
flex-direction: row;
align-items: flex-start;
gap: 0.75rem;
padding: 1rem;
overflow: visible;
}
.hero-feature h3 {
font-size: 1rem;
margin: 0 0 0.25rem 0;
word-wrap: break-word;
word-break: break-word;
line-height: 1.2;
}
.hero-feature p {
font-size: 0.85rem;
margin: 0;
word-wrap: break-word;
word-break: break-word;
line-height: 1.3;
}
.feature-icon {
min-width: 32px;
width: 32px;
height: 32px;
flex-shrink: 0;
}
.feature-icon svg {
width: 32px;
height: 32px;
}
.hero-visual {
display: none;
}
/* Status Bar */
.status-bar {
display: flex;
flex-direction: column;
gap: 0.75rem;
padding: 0.75rem;
width: 100%;
overflow: visible;
}
.status-item {
font-size: 0.75rem;
padding: 0.75rem;
word-wrap: break-word;
word-break: break-word;
white-space: normal;
overflow: visible;
}
/* Content Area */
.content-area {
padding: 1rem;
}
.content-area h1,
.content-area h2 {
font-size: 1.5rem;
margin-bottom: 1rem;
}
.content-area h3 {
font-size: 1.1rem;
margin-bottom: 0.75rem;
}
/* Tab Navigation */
.tab-navigation {
padding: 0.5rem;
gap: 0.5rem;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.tab-button {
padding: 0.5rem 1rem;
font-size: 0.85rem;
white-space: nowrap;
flex-shrink: 0;
}
/* Metric Cards */
.metric-card {
padding: 1rem;
gap: 0.75rem;
}
.metric-icon {
width: 40px;
height: 40px;
min-width: 40px;
}
.metric-icon svg {
width: 18px;
height: 18px;
}
.metric-content {
gap: 0.25rem;
}
.metric-title {
font-size: 0.8rem;
}
.metric-value {
font-size: 0.95rem;
}
.metric-subtitle {
font-size: 0.75rem;
}
/* Metric Grid */
.metrics-grid {
grid-template-columns: 1fr;
gap: 0.75rem;
}
/* Buttons */
.btn,
.btn-primary,
.btn-secondary {
padding: 0.65rem 1rem;
font-size: 0.9rem;
width: 100%;
}
.btn-group {
flex-direction: column;
}
.btn-group > button {
width: 100%;
}
/* Forms */
.form-group {
margin-bottom: 1rem;
}
label {
font-size: 0.85rem;
margin-bottom: 0.3rem;
}
input,
select,
textarea {
padding: 0.65rem;
font-size: 0.9rem;
}
/* Image Preview */
.image-preview,
.preview-container {
max-width: 100%;
height: auto;
max-height: 300px;
}
/* Upload Area */
.upload-area {
padding: 1.5rem 1rem;
gap: 1rem;
}
.upload-icon {
font-size: 36px;
}
.upload-text-main {
font-size: 0.95rem;
}
.upload-text-sub {
font-size: 0.75rem;
}
/* Alert Messages */
.alert {
padding: 0.75rem;
font-size: 0.85rem;
}
/* Badge */
.badge {
padding: 0.3rem 0.6rem;
font-size: 0.75rem;
}
/* Image Grid */
.image-grid {
grid-template-columns: 1fr;
gap: 0.75rem;
}
.image-card {
max-height: 300px;
}
/* Settings Panel */
.settings-panel {
padding: 1rem;
}
.setting-item {
margin-bottom: 1rem;
}
/* 3D Canvas */
.canvas-container {
height: 300px;
border-radius: 8px;
margin: 1rem 0;
}
/* Model Info */
.model-info-grid {
grid-template-columns: 1fr;
gap: 0.75rem;
padding: 0.75rem;
margin-top: 1rem;
}
/* Dropdowns and Menus */
.dropdown-menu {
position: fixed;
left: 0;
right: 0;
max-height: 50vh;
border-radius: 12px 12px 0 0;
}
/* Modals */
.modal {
padding: 1rem;
max-width: 95vw;
}
.modal-header {
font-size: 1.25rem;
}
.modal-body {
font-size: 0.9rem;
}
/* Charts and Data Viz */
.chart-container {
height: 250px;
}
svg {
max-width: 100%;
height: auto;
}
/* Loader */
.loader {
width: 30px;
height: 30px;
}
/* Animations - Reduce on mobile for performance */
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
}
/* ================================================ */
/* MEDIUM DEVICES (480px - 768px) - TABLETS */
/* ================================================ */
@media (min-width: 480px) and (max-width: 767px) {
/* Base Adjustments */
html {
font-size: 15px;
}
/* App Container */
.app-container {
padding: 0;
}
/* Hero Section */
.hero-section {
min-height: auto;
padding: 2rem 0;
}
.hero-content {
grid-template-columns: 1fr;
gap: 2rem;
padding: 1.5rem;
}
.hero-title {
font-size: 2.5rem;
}
.hero-subtitle {
font-size: 1.1rem;
margin-bottom: 1.5rem;
}
.hero-visual {
display: none;
}
.floating-elements {
display: none;
}
/* Content Area */
.content-area {
padding: 1.5rem;
}
.content-area h1,
.content-area h2 {
font-size: 1.75rem;
}
.content-area h3 {
font-size: 1.2rem;
}
/* Tab Navigation */
.tab-navigation {
padding: 0.75rem;
gap: 0.5rem;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.tab-button {
padding: 0.6rem 1.2rem;
font-size: 0.9rem;
white-space: nowrap;
}
/* Metric Cards */
.metric-card {
padding: 1.25rem;
}
.metrics-grid {
grid-template-columns: repeat(2, 1fr);
gap: 1rem;
}
/* Forms */
input,
select,
textarea {
font-size: 1rem;
padding: 0.75rem;
}
/* Image Preview */
.image-preview,
.preview-container {
max-height: 400px;
}
/* Image Grid */
.image-grid {
grid-template-columns: repeat(2, 1fr);
gap: 1rem;
}
/* 3D Canvas */
.canvas-container {
height: 400px;
}
/* Model Info */
.model-info-grid {
grid-template-columns: repeat(2, 1fr);
gap: 1rem;
}
/* Buttons */
.btn,
.btn-primary,
.btn-secondary {
padding: 0.75rem 1.5rem;
font-size: 0.95rem;
}
}
/* ================================================ */
/* LARGE DEVICES (768px - 1024px) - LANDSCAPE TAB */
/* ================================================ */
@media (min-width: 768px) and (max-width: 1023px) {
/* Hero Content */
.hero-content {
grid-template-columns: 1fr 1fr;
gap: 2rem;
padding: 2rem;
}
.hero-title {
font-size: 3rem;
}
.hero-subtitle {
font-size: 1.2rem;
}
.floating-elements {
height: 300px;
}
/* Content Area */
.content-area {
padding: 2rem;
}
/* Metric Cards - 3 columns on tablet landscape */
.metrics-grid {
grid-template-columns: repeat(3, 1fr);
gap: 1.5rem;
}
/* Image Grid */
.image-grid {
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
}
/* 3D Canvas */
.canvas-container {
height: 500px;
}
.model-info-grid {
grid-template-columns: repeat(3, 1fr);
gap: 1.25rem;
}
/* Buttons */
.btn,
.btn-primary,
.btn-secondary {
padding: 0.75rem 2rem;
font-size: 0.95rem;
}
}
/* ================================================ */
/* XL DEVICES (1024px+) - DESKTOP */
/* ================================================ */
@media (min-width: 1024px) {
/* Desktop styles - mostly keep defaults */
.hero-content {
grid-template-columns: 1fr 1fr;
gap: 4rem;
}
.hero-title {
font-size: 4.5rem;
}
.metrics-grid {
grid-template-columns: repeat(4, 1fr);
gap: 2rem;
}
.image-grid {
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
}
.canvas-container {
height: 700px;
}
.model-info-grid {
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
}
/* ================================================ */
/* TOUCH DEVICE OPTIMIZATIONS */
/* ================================================ */
@media (hover: none) and (pointer: coarse) {
/* Increase touch target sizes */
button,
.btn,
.tab-button,
input[type="button"],
input[type="submit"] {
min-height: 44px;
min-width: 44px;
}
/* Reduce hover effects on touch devices */
.metric-card:hover,
.hero-feature:hover,
.floating-card:hover {
transform: none;
}
/* Better spacing for touch */
.tab-navigation {
gap: 0.75rem;
}
/* Optimize scrolling */
.content-area {
-webkit-touch-callout: none;
}
}
/* ================================================ */
/* LANDSCAPE MODE OPTIMIZATIONS */
/* ================================================ */
@media (orientation: landscape) and (max-height: 600px) {
.hero-section {
min-height: auto;
padding: 1rem 0;
}
.hero-content {
gap: 1rem;
padding: 1rem;
}
.hero-title {
font-size: 1.75rem;
margin-bottom: 0.5rem;
}
.hero-subtitle {
font-size: 0.9rem;
margin-bottom: 0.75rem;
}
.hero-features {
display: none;
}
.floating-elements {
display: none;
}
.content-area {
padding: 1rem;
}
.canvas-container {
height: 300px;
}
.metrics-grid {
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 0.75rem;
}
}
/* ================================================ */
/* MODERN VIEWPORT OPTIMIZATION */
/* ================================================ */
@supports (viewport-fit: cover) {
body {
padding-left: env(safe-area-inset-left);
padding-right: env(safe-area-inset-right);
padding-top: env(safe-area-inset-top);
padding-bottom: env(safe-area-inset-bottom);
}
}
/* ================================================ */
/* KEYBOARD SAFE AREAS (Mobile Keyboards) */
/* ================================================ */
@media (max-height: 500px) and (orientation: landscape) {
input,
textarea,
select {
font-size: 16px; /* Prevents zoom on iOS */
}
}
/* ================================================ */
/* 9-IMAGE UNIFIED GRID RESPONSIVE STYLES */
/* ================================================ */
/* Mobile Phones (< 480px) - Single Column */
@media (max-width: 479px) {
.image-grid-unified {
grid-template-columns: 1fr !important;
gap: 1rem !important;
}
.image-card img {
height: 200px !important;
}
}
/* Tablets Portrait (480-768px) - 2 Columns */
@media (min-width: 480px) and (max-width: 767px) {
.image-grid-unified {
grid-template-columns: repeat(2, 1fr) !important;
gap: 1.25rem !important;
}
.image-card img {
height: 250px !important;
}
}
/* Tablets Landscape (768-1024px) - 3 Columns */
@media (min-width: 768px) and (max-width: 1023px) {
.image-grid-unified {
grid-template-columns: repeat(3, 1fr) !important;
gap: 1.5rem !important;
}
.image-card img {
height: 280px !important;
}
}
/* Desktop (> 1024px) - 3 Columns */
@media (min-width: 1024px) {
.image-grid-unified {
grid-template-columns: repeat(3, 1fr) !important;
gap: 1.5rem !important;
}
.image-card img {
height: 300px !important;
}
}
/* Image Card Responsive Adjustments */
.image-card-title {
font-size: 0.95rem;
word-wrap: break-word;
word-break: break-word;
line-height: 1.3;
}
@media (max-width: 479px) {
.image-card {
padding: 0.75rem !important;
}
.image-card-title {
font-size: 0.85rem;
margin-bottom: 0.75rem !important;
}
.image-card img {
border-radius: var(--border-radius) !important;
}
}
/* ================================================ */
/* PRINT STYLES */
/* ================================================ */
@media print {
.tab-navigation,
.floating-elements,
.hero-visual {
display: none;
}
.content-area {
padding: 0;
box-shadow: none;
}
* {
box-shadow: none !important;
text-shadow: none !important;
}
}