/* ActaLog Main Styles */ /* Reset and base styles */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; /* Prevent horizontal overflow at the root level */ overflow-x: hidden; /* Use dvh for proper mobile viewport handling */ height: 100%; } body { /* Use 100% height instead of 100vh to work better with mobile browsers */ min-height: 100%; height: 100%; color: var(--v-theme-on-background); background-color: var(--v-theme-background); transition: color 0.3s, background-color 0.3s; line-height: 1.6; /* Prevent horizontal overflow */ overflow-x: hidden; /* Handle safe areas for notched devices */ padding-left: env(safe-area-inset-left); padding-right: env(safe-area-inset-right); } /* Typography */ h1 { font-size: 2rem; font-weight: 500; } h2 { font-size: 1.75rem; font-weight: 500; } h3 { font-size: 1.5rem; font-weight: 500; } h4 { font-size: 1.25rem; font-weight: 500; } h5 { font-size: 1.125rem; font-weight: 500; } h6 { font-size: 1rem; font-weight: 500; } /* Utilities */ .text-center { text-align: center; } .text-left { text-align: left; } .text-right { text-align: right; } .mt-1 { margin-top: 0.5rem; } .mt-2 { margin-top: 1rem; } .mt-3 { margin-top: 1.5rem; } .mt-4 { margin-top: 2rem; } .mb-1 { margin-bottom: 0.5rem; } .mb-2 { margin-bottom: 1rem; } .mb-3 { margin-bottom: 1.5rem; } .mb-4 { margin-bottom: 2rem; } .p-1 { padding: 0.5rem; } .p-2 { padding: 1rem; } .p-3 { padding: 1.5rem; } .p-4 { padding: 2rem; } /* Custom card styling - removed borders for cleaner modern look */ /* Cards now rely on elevation/shadow and background contrast */ /* Custom scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: rgba(var(--v-theme-on-surface), 0.05); } ::-webkit-scrollbar-thumb { background: rgba(var(--v-theme-on-surface), 0.3); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: rgba(var(--v-theme-on-surface), 0.5); } /* Bottom navigation spacing fix for mobile */ .v-bottom-navigation { padding-bottom: env(safe-area-inset-bottom); } /* ============================================ Mobile PWA View Wrapper Styles ============================================ */ /* Standard view wrapper - use this class on the root div of each view */ .mobile-view-wrapper { background: rgb(var(--v-theme-background)); min-height: 100%; /* Let the wrapper fill available space but not overflow */ max-width: 100vw; overflow-x: hidden; } /* Content container inside view wrapper */ .mobile-content { padding: 16px; padding-bottom: calc(16px + env(safe-area-inset-bottom)); max-width: 100%; overflow-x: hidden; } /* Prevent text overflow globally */ .v-card, .v-list-item, .v-chip, .text-body-1, .text-body-2, .text-caption, .text-subtitle-1, .text-subtitle-2 { word-break: break-word; overflow-wrap: break-word; } /* Handle pre-formatted text that might overflow */ pre, code, .pre-wrap { white-space: pre-wrap; word-break: break-word; overflow-wrap: break-word; max-width: 100%; overflow-x: auto; } /* ============================================ Mobile Data Table Fixes ============================================ */ /* Make data tables scrollable on mobile */ .v-data-table { max-width: 100%; } .v-data-table__wrapper { overflow-x: auto; -webkit-overflow-scrolling: touch; } /* Ensure table cells don't force width */ .v-data-table th, .v-data-table td { white-space: nowrap; } /* Allow text wrapping in specific columns */ .v-data-table .wrap-text { white-space: normal; word-break: break-word; } /* Mobile-friendly table on small screens */ @media (max-width: 600px) { /* Reduce table padding on mobile */ .v-data-table th, .v-data-table td { padding: 8px 12px !important; } /* Make v-container use less padding on mobile */ .v-container { padding: 12px !important; } /* Reduce card padding on mobile */ .v-card-text { padding: 12px !important; } .v-card-title { padding: 12px !important; font-size: 1rem !important; } /* Stack buttons on mobile if needed */ .mobile-stack-buttons { flex-direction: column !important; gap: 8px !important; } .mobile-stack-buttons > * { width: 100% !important; min-width: unset !important; } } /* Fade transition */ .fade-enter-active, .fade-leave-active { transition: opacity 0.3s ease; } .fade-enter-from, .fade-leave-to { opacity: 0; } /* Loading spinner */ .loading-container { display: flex; justify-content: center; align-items: center; min-height: 200px; } /* ============================================ Accessibility Fixes ============================================ */ /* Fix color contrast for Vuetify form labels (WCAG 2.1 AA requires 4.5:1) Default Vuetify label colors have insufficient contrast, #666666 has 5.74:1 */ /* Override Vuetify's label opacity to ensure full contrast */ .v-label { opacity: 1 !important; color: #666666 !important; } .v-field-label { opacity: 1 !important; color: #666666 !important; } /* Target all field variants with high specificity */ .v-application .v-field .v-field-label, .v-application .v-input .v-label, .v-theme--light .v-field-label, .v-theme--light .v-label { opacity: 1 !important; color: #666666 !important; } /* Dark theme labels also need sufficient contrast */ .v-theme--dark .v-field-label, .v-theme--dark .v-label { opacity: 1 !important; color: #b3b3b3 !important; } /* Ensure placeholder text also has sufficient contrast */ .v-field input::placeholder, .v-field textarea::placeholder { color: #666666 !important; opacity: 1; } /* Fix touch target size for icon buttons (WCAG 2.2 requires 24x24px minimum) Password toggle and other appended icons */ .v-field__append-inner .v-icon, .v-field__prepend-inner .v-icon, .v-input__append .v-icon, .v-input__prepend .v-icon { min-width: 24px !important; min-height: 24px !important; font-size: 24px !important; } /* Ensure clickable icons have adequate touch area */ .v-field__append-inner, .v-field__prepend-inner { min-width: 40px; min-height: 40px; display: flex; align-items: center; justify-content: center; }