/* Mobile-specific optimizations for APRS.me */ /* Prevent iOS bounce scrolling on the map */ html, body { overscroll-behavior: none; -webkit-overflow-scrolling: touch; } /* Ensure map takes full height on mobile */ @media (max-width: 1023px) { #map { height: calc(100vh - 56px); height: calc(100dvh - 56px); /* Dynamic viewport height for mobile browsers */ touch-action: pan-x pan-y; } /* Larger touch targets for mobile controls */ .leaflet-control-zoom a, .leaflet-control-layers-toggle, .leaflet-control button { width: 44px !important; height: 44px !important; line-height: 44px !important; font-size: 20px !important; } .leaflet-popup-content { max-width: 90vw; max-height: 50vh; overflow-y: auto; -webkit-overflow-scrolling: touch; } /* Mobile-friendly buttons */ button { min-height: 44px; } /* Improve dropdown menus on mobile */ select { font-size: 16px; /* Prevent zoom on iOS */ padding: 12px; min-height: 44px; } /* Safe area insets for devices with notches */ #map { padding-bottom: env(safe-area-inset-bottom); } } /* Landscape mode optimizations */ @media (max-width: 1023px) and (orientation: landscape) { #map { height: calc(100vh - 40px); height: calc(100dvh - 40px); } .leaflet-control-zoom { transform: scale(0.9); } } /* High DPI screen optimizations */ @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { .leaflet-tile { image-rendering: -webkit-optimize-contrast; image-rendering: crisp-edges; } } /* Disable hover effects on touch devices */ @media (hover: none) { .leaflet-interactive:hover { stroke-opacity: 1; fill-opacity: 0.2; } } /* Improve form inputs on mobile - prevent zoom on iOS */ input[type="text"], input[type="email"], input[type="search"], input[type="tel"], input[type="url"], input[type="password"], textarea { font-size: 16px; -webkit-appearance: none; -moz-appearance: none; appearance: none; } /* Better focus states for accessibility */ :focus { outline: 3px solid #6366f1; outline-offset: 2px; }