- 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
98 lines
2.1 KiB
CSS
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;
|
|
}
|