aprs.me/assets/css/mobile.css
Graham McIntire b8d2095346
Fix UI issues: popup positioning, trail/cluster sync, CSS cleanup
- Remove CSS `bottom: 50px !important` on popups that pushed them too
  high above markers
- Hide trails when markers are clustered (zoom < 11) so trails don't
  point to invisible markers inside cluster bubbles
- Fix locate button overlap with zoom controls and keep it always
  light mode
- Remove duplicate slideover/toggle CSS from layout files (single
  source of truth in component)
- Remove dead CSS classes and standardize breakpoints to 1024px
- Add isDestroyed guards on async callbacks to prevent race conditions
- Escape callsigns in marker HTML to prevent XSS
- Replace Leaflet _container private API with getContainer()
- Clean up about page placeholder text
2026-02-20 09:46:45 -06:00

98 lines
2.1 KiB
CSS

/* 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;
}