/* =============================================================================
   MAPPA METEOROLOGICA INTERATTIVA - STYLES
   ============================================================================= */

/* CSS Variables for theming */
:root {
    --primary-color: #2196F3;
    --secondary-color: #FFC107;
    --success-color: #4CAF50;
    --warning-color: #FF9800;
    --error-color: #F44336;
    --info-color: #2196F3;

    --bg-primary: #ffffff;
    --bg-secondary: #f5f5f5;
    --bg-dark: #263238;
    --text-primary: #212121;
    --text-secondary: #757575;
    --border-color: #e0e0e0;

    --panel-width: 320px;
    --header-height: 60px;
    --border-radius: 8px;
    --shadow: 0 2px 8px rgba(0,0,0,0.15);
    --transition: all 0.3s ease;

    /* === MOBILE UI DESIGN SYSTEM === */

    /* Spacing System (8px base) */
    --space-xs: 4px;
    --space-sm: 8px;
    --space-md: 16px;
    --space-lg: 24px;
    --space-xl: 32px;

    /* Safe Areas (notch, gesture bar) */
    --safe-top: env(safe-area-inset-top, 0px);
    --safe-bottom: env(safe-area-inset-bottom, 0px);
    --safe-left: env(safe-area-inset-left, 0px);
    --safe-right: env(safe-area-inset-right, 0px);

    /* Mobile Dimensions */
    --tab-bar-height: 56px;  /* Overridden to 48px on mobile */
    --timeline-height: 48px; /* Overridden to 0px on mobile (floating pill) */
    --header-height-mobile: 44px;
    --sheet-handle-height: 24px;
    --sheet-header-height: 48px;

    /* Sheet Snap Points */
    --sheet-peek: 30vh;
    --sheet-half: 60vh;
    --sheet-full: calc(100vh - var(--header-height-mobile) - var(--safe-top));

    /* Animations (Material Design 3) */
    --ease-standard: cubic-bezier(0.2, 0, 0, 1);
    --ease-decelerate: cubic-bezier(0, 0, 0, 1);
    --ease-accelerate: cubic-bezier(0.3, 0, 1, 1);
    --duration-short: 150ms;
    --duration-medium: 300ms;
    --duration-long: 500ms;

    /* Touch Targets (min 44x44 per Apple HIG) */
    --touch-target-min: 44px;
    --touch-target-comfortable: 48px;

    /* Z-Index Scale */
    --z-map: 1;
    --z-timeline: 200;
    --z-legend: 960; /* Sopra la timeline mobile (950) */
    --z-sheet-backdrop: 800;
    --z-sheet: 900;
    --z-tab-bar: 1000;
    --z-header: 1100;
    --z-modal: 1200;

    /* === PREMIUM PALETTE 2.0 === */

    /* Brand Gradient */
    --gradient-primary: linear-gradient(135deg, #1a73e8 0%, #00c6ff 100%);
    --gradient-header: linear-gradient(180deg, rgba(26,115,232,0.95) 0%, rgba(0,198,255,0.85) 100%);
    --gradient-header-dark: linear-gradient(180deg, rgba(15,23,42,0.98) 0%, rgba(30,41,59,0.95) 100%);

    /* Tab Colors - Vivaci e Distintivi */
    --accent-primary: #2196F3;
    --accent-radar: #00E676;      /* Verde brillante */
    --accent-satellite: #E040FB;  /* Viola vivace */
    --accent-stations: #FF6D00;   /* Arancione intenso */
    --accent-settings: #78909C;

    /* Glow Effects */
    --glow-radar: 0 0 20px rgba(0, 230, 118, 0.4);
    --glow-satellite: 0 0 20px rgba(224, 64, 251, 0.4);
    --glow-stations: 0 0 20px rgba(255, 109, 0, 0.4);
    --glow-primary: 0 0 20px rgba(33, 150, 243, 0.4);

    /* Mobile Light Theme */
    --sheet-bg: rgba(255, 255, 255, 0.95);
    --tab-bar-bg: rgba(255, 255, 255, 0.92);
    --tab-inactive: #9ca3af;
    --tab-active: var(--accent-primary);
    --divider: rgba(0, 0, 0, 0.08);

    /* Glass Effect */
    --glass-bg: rgba(255, 255, 255, 0.08);
    --glass-border: rgba(255, 255, 255, 0.18);
    --glass-blur: 20px;
}

/* Reset and base styles */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
    font-size: 14px;
    line-height: 1.5;
    color: var(--text-primary);
    background-color: var(--bg-secondary);
}

/* Overflow hidden solo per la mappa principale, non per le pagine di form */
body.map-page {
    overflow: hidden;
}

/* =============================================================================
   LOADING SCREEN
   ============================================================================= */

/* Loading screen discreto - posizionato in basso, trasparente */
.loading-screen {
    position: fixed;
    bottom: 100px;
    left: 50%;
    transform: translateX(-50%);
    background: rgba(0, 0, 0, 0.75);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 10000;
    color: white;
    transition: opacity 0.3s ease, transform 0.3s ease;
    padding: 12px 24px;
    border-radius: 30px;
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
    gap: 12px;
}

.loading-content {
    display: flex;
    align-items: center;
    gap: 12px;
    font-size: 14px;
    font-weight: 500;
}

.loading-spinner {
    width: 20px;
    height: 20px;
    border: 2px solid rgba(255,255,255,0.3);
    border-top: 2px solid white;
    border-radius: 50%;
    animation: spin 0.8s linear infinite;
    flex-shrink: 0;
}

@keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

.loading-screen.hidden {
    opacity: 0;
    transform: translateX(-50%) translateY(20px);
    pointer-events: none;
}

/* =============================================================================
   LAYOUT FULLSCREEN MAP
   ============================================================================= */

.app-container {
    display: block;
    height: 100vh;
    width: 100vw;
    position: relative;
}

/* Header come overlay */
.app-header {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: var(--header-height);
    background: rgba(255, 255, 255, 0.95);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    border-bottom: 1px solid var(--border-color);
    box-shadow: var(--shadow);
    z-index: 1000;
}

.header-content {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 100%;
    padding: 0 20px;
    max-width: 100%;
}

.app-header h1 {
    font-size: 20px;
    font-weight: 600;
    color: var(--primary-color);
    display: flex;
    align-items: center;
    gap: 10px;
}

/* Titolo: versione breve "meteo.sm" su desktop, completa nascosta */
.app-header h1 .header-title-short {
    display: inline;
}

.app-header h1 .header-title-full {
    display: none;
}

/* === LOGO HEADER ANIMATO (Desktop + Mobile) === */
@keyframes logo-breathe {
    0%, 100% {
        transform: scale(1);
        filter: drop-shadow(0 0 6px rgba(255, 255, 255, 0.3))
                drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));
    }
    50% {
        transform: scale(1.05);
        filter: drop-shadow(0 0 12px rgba(255, 255, 255, 0.5))
                drop-shadow(0 4px 8px rgba(0, 0, 0, 0.3));
    }
}

.header-logo {
    width: 50px;
    height: 50px;
    flex-shrink: 0;
    object-fit: contain;
    border-radius: 50%;
    /* Animazione pulse sottile */
    animation: logo-breathe 4s ease-in-out infinite;
    /* Glow effect — box-shadow invece di filter drop-shadow per evitare repaint continui con animation */
    box-shadow: 0 0 8px rgba(255, 255, 255, 0.4),
                0 2px 4px rgba(0, 0, 0, 0.3);
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.header-logo:hover {
    transform: scale(1.1) rotate(5deg);
    box-shadow: 0 0 12px rgba(255, 255, 255, 0.6),
                0 4px 8px rgba(0, 0, 0, 0.4);
}

.beta-tag {
    background: var(--secondary-color);
    color: white;
    font-size: 11px;
    padding: 2px 6px;
    border-radius: 4px;
    font-weight: 500;
}

.header-actions {
    display: flex;
    gap: 10px;
    align-items: center;
}

/* Data Status Badge */
.data-status-badge {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 4px 10px;
    border-radius: 12px;
    font-size: 11px;
    font-weight: 600;
    cursor: default;
    transition: all 0.3s ease;
    background: rgba(76, 175, 80, 0.1);
    color: #2e7d32;
    border: 1px solid rgba(76, 175, 80, 0.3);
}

.data-status-badge .status-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #4caf50;
    animation: status-pulse 2s ease-in-out infinite;
}

.data-status-badge.status-stale {
    background: rgba(255, 152, 0, 0.1);
    color: #e65100;
    border-color: rgba(255, 152, 0, 0.3);
}

.data-status-badge.status-stale .status-dot {
    background: #ff9800;
    animation: none;
}

.data-status-badge.status-offline {
    background: rgba(244, 67, 54, 0.1);
    color: #c62828;
    border-color: rgba(244, 67, 54, 0.3);
}

.data-status-badge.status-offline .status-dot {
    background: #f44336;
    animation: none;
}

@keyframes status-pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.4; }
}

[data-theme="dark"] .data-status-badge {
    background: rgba(76, 175, 80, 0.15);
    color: #81c784;
    border-color: rgba(76, 175, 80, 0.3);
}

[data-theme="dark"] .data-status-badge.status-stale {
    background: rgba(255, 152, 0, 0.15);
    color: #ffb74d;
    border-color: rgba(255, 152, 0, 0.3);
}

[data-theme="dark"] .data-status-badge.status-offline {
    background: rgba(244, 67, 54, 0.15);
    color: #ef5350;
    border-color: rgba(244, 67, 54, 0.3);
}

/* =============================================================================
   ADMIN DROPDOWN MENU (Desktop)
   ============================================================================= */

.admin-dropdown {
    position: relative;
}

.admin-dropdown-menu {
    position: absolute;
    top: 100%;
    right: 0;
    margin-top: 8px;
    min-width: 220px;
    background: rgba(255, 255, 255, 0.98);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    border: 1px solid var(--border-color);
    border-radius: 12px;
    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);
    z-index: 1100;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-10px);
    transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s;
    overflow: hidden;
}

.admin-dropdown-menu.show {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}

.admin-dropdown-menu .dropdown-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 16px;
    color: var(--text-primary);
    text-decoration: none;
    font-size: 14px;
    transition: background 0.15s ease;
    border: none;
    background: none;
    width: 100%;
    text-align: left;
    cursor: pointer;
}

.admin-dropdown-menu .dropdown-item:hover {
    background: rgba(33, 150, 243, 0.1);
}

.admin-dropdown-menu .dropdown-item i {
    width: 18px;
    text-align: center;
    color: var(--primary-color);
}

.admin-dropdown-menu .dropdown-divider {
    height: 1px;
    background: var(--border-color);
    margin: 4px 0;
}

/* Dark mode dropdown */
[data-theme="dark"] .admin-dropdown-menu {
    background: rgba(30, 41, 59, 0.98);
    border-color: rgba(255, 255, 255, 0.1);
}

[data-theme="dark"] .admin-dropdown-menu .dropdown-item {
    color: #e2e8f0;
}

[data-theme="dark"] .admin-dropdown-menu .dropdown-item:hover {
    background: rgba(100, 181, 246, 0.15);
}

[data-theme="dark"] .admin-dropdown-menu .dropdown-item i {
    color: #64B5F6;
}

[data-theme="dark"] .admin-dropdown-menu .dropdown-divider {
    background: rgba(255, 255, 255, 0.1);
}

/* Main content area - ora occupa tutto lo schermo */
.app-container main {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

/* =============================================================================
   CONTROL PANEL COME OVERLAY
   ============================================================================= */

.control-panel {
    position: absolute;
    top: var(--header-height);
    left: 0;
    width: var(--panel-width);
    height: calc(100vh - var(--header-height));
    background: rgba(255, 255, 255, 0.95);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    border-right: 1px solid var(--border-color);
    display: flex;
    flex-direction: column;
    transition: var(--transition);
    z-index: 900;
    box-shadow: var(--shadow);
    transform: translateX(0);
}

.control-panel.collapsed {
    transform: translateX(-100%);
}

.panel-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 15px 20px;
    border-bottom: 1px solid var(--border-color);
    background: rgba(248, 250, 252, 0.9);
}

.panel-header h3 {
    font-size: 16px;
    font-weight: 600;
    color: var(--text-primary);
    display: flex;
    align-items: center;
    gap: 8px;
}

.panel-content {
    flex: 1;
    padding: 20px;
    overflow-y: auto;
}

.control-group {
    margin-bottom: 24px;
}

.control-group label,
.control-group .control-label {
    display: block;
    font-weight: 600;
    margin-bottom: 8px;
    color: var(--text-primary);
    font-size: 13px;
}

.form-control {
    width: 100%;
    padding: 10px 12px;
    border: 1px solid var(--border-color);
    border-radius: var(--border-radius);
    font-size: 14px;
    background: var(--bg-primary);
    transition: var(--transition);
}

.form-control:focus {
    outline: none;
    border-color: var(--primary-color);
    box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);
}

/* Wind Unit Toggle Buttons */
.wind-unit-toggle {
    display: flex;
    gap: 0;
    border-radius: var(--border-radius);
    overflow: hidden;
    border: 1px solid var(--border-color);
}

.wind-unit-btn {
    flex: 1;
    padding: 8px 12px;
    border: none;
    background: var(--bg-primary);
    color: var(--text-secondary);
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    transition: var(--transition);
    border-right: 1px solid var(--border-color);
}

.wind-unit-btn:last-child {
    border-right: none;
}

.wind-unit-btn:hover {
    background: var(--bg-secondary);
    color: var(--text-primary);
}

.wind-unit-btn.active {
    background: var(--primary-color);
    color: white;
}

.wind-unit-btn.active:hover {
    background: #1976D2;
}

/* Layer toggles */
.layer-toggle {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 4px;
    padding: 4px 8px;
    border-radius: var(--border-radius);
    transition: var(--transition);
}

.layer-toggle:hover {
    background: var(--bg-secondary);
}

.layer-toggle label {
    margin: 0;
    font-weight: normal;
    cursor: pointer;
    flex: 1;
    font-size: 13px;
}

.layer-toggle label.layer-toggle-switch {
    flex: 0 0 44px;
}

/* =============================================================================
   SWITCH SLIDER PROFESSIONALI - iOS/Android Style
   ============================================================================= */

/* Layer Toggle Switch - dimensioni maggiorate per migliore usabilità */
.layer-toggle-switch {
    position: relative;
    width: 44px;
    height: 24px;
    flex-shrink: 0;
    display: inline-block;
}

.layer-toggle-switch input {
    opacity: 0;
    width: 0;
    height: 0;
    position: absolute;
}

.layer-toggle-slider {
    position: absolute;
    cursor: pointer;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: rgba(120, 120, 128, 0.32);
    transition: background-color 0.25s cubic-bezier(0.4, 0, 0.2, 1);
    border-radius: 12px;
}

/* Pallino switch - più grande e con ombra più definita */
.layer-toggle-slider:before {
    position: absolute;
    content: "";
    height: 20px;
    width: 20px;
    left: 2px;
    bottom: 2px;
    background-color: #fff;
    transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1),
                box-shadow 0.25s cubic-bezier(0.4, 0, 0.2, 1);
    border-radius: 50%;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2),
                0 1px 2px rgba(0, 0, 0, 0.1);
}

/* Stato ON - colore vivace */
.layer-toggle-switch input:checked + .layer-toggle-slider {
    background-color: #34C759; /* Verde iOS Success */
}

.layer-toggle-switch input:checked + .layer-toggle-slider:before {
    transform: translateX(20px);
}

/* Focus state per accessibilità */
.layer-toggle-switch input:focus + .layer-toggle-slider {
    box-shadow: 0 0 0 3px rgba(52, 199, 89, 0.3);
}

/* Hover effect */
.layer-toggle-switch:hover .layer-toggle-slider {
    background-color: rgba(120, 120, 128, 0.48);
}

.layer-toggle-switch:hover input:checked + .layer-toggle-slider {
    background-color: #30B854;
}

/* Active/Press effect */
.layer-toggle-switch:active .layer-toggle-slider:before {
    width: 24px;
}

.layer-toggle-switch:active input:checked + .layer-toggle-slider:before {
    transform: translateX(16px);
}

/* Disabled state for layer toggles */
.layer-toggle.disabled {
    opacity: 0.5;
    pointer-events: none;
}

.layer-toggle.disabled .layer-toggle-slider {
    background-color: #ccc;
    cursor: not-allowed;
}

/* Disabled state for fonte toggle list */
.fonte-toggle-list.disabled {
    opacity: 0.5;
    pointer-events: none;
}

.fonte-toggle-list.disabled .fonte-toggle-item {
    cursor: not-allowed;
}

/* Disabled buttons */
.fonte-toggle-header .btn-xs:disabled,
.fonte-toggle-header .btn-outline:disabled {
    opacity: 0.5;
    cursor: not-allowed;
    pointer-events: none;
}

/* Disabled search input */
.fonte-search-input:disabled {
    opacity: 0.5;
    cursor: not-allowed;
    background-color: #f0f0f0;
}

/* Statistics display */
.stats-display {
    background: rgba(248, 250, 252, 0.9);
    padding: 12px;
    border-radius: var(--border-radius);
    border: 1px solid var(--border-color);
}

.stat-item {
    display: flex;
    justify-content: space-between;
    margin-bottom: 6px;
    font-size: 12px;
}

.stat-item:last-child {
    margin-bottom: 0;
}

.stat-label {
    color: var(--text-secondary);
}

.stat-value {
    font-weight: 600;
    color: var(--primary-color);
}

/* =============================================================================
   LOCATION SEARCH
   ============================================================================= */

.location-search-container {
    position: relative;
}

.location-search-container .form-control {
    padding-right: 40px;
}

.search-btn {
    position: absolute;
    right: 6px;
    top: 50%;
    transform: translateY(-50%);
    background: var(--primary-color);
    border: none;
    border-radius: 4px;
    width: 32px;
    height: 28px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    cursor: pointer;
    transition: var(--transition);
}

.search-btn:hover {
    background: #1976D2;
    transform: translateY(-50%) scale(1.05);
}

.search-suggestions {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    background: var(--bg-primary);
    border: 1px solid var(--border-color);
    border-top: none;
    border-radius: 0 0 var(--border-radius) var(--border-radius);
    box-shadow: 0 4px 12px rgba(0,0,0,0.15);
    max-height: 200px;
    overflow-y: auto;
    z-index: 1000;
    display: none;
}

.search-suggestions.show {
    display: block;
}

.suggestion-item {
    padding: 12px 16px;
    cursor: pointer;
    border-bottom: 1px solid var(--border-color);
    transition: var(--transition);
    display: flex;
    align-items: center;
    gap: 10px;
}

.suggestion-item:last-child {
    border-bottom: none;
}

.suggestion-item:hover,
.suggestion-item.selected {
    background: var(--bg-secondary);
}

.suggestion-icon {
    color: var(--text-secondary);
    font-size: 12px;
    width: 16px;
    text-align: center;
}

.suggestion-text {
    flex: 1;
}

.suggestion-name {
    font-weight: 500;
    color: var(--text-primary);
}

.suggestion-details {
    font-size: 12px;
    color: var(--text-secondary);
    margin-top: 2px;
}

.search-loading {
    padding: 12px 16px;
    text-align: center;
    color: var(--text-secondary);
    font-size: 12px;
}

.search-no-results {
    padding: 12px 16px;
    text-align: center;
    color: var(--text-secondary);
    font-size: 12px;
}

/* Search sections: Recenti & Preferiti */
.search-section-header {
    padding: 8px 16px 4px;
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--text-secondary);
    display: flex;
    align-items: center;
    gap: 6px;
    border-top: 1px solid var(--border-color);
}

.search-section-header:first-child {
    border-top: none;
}

.search-section-header i {
    font-size: 10px;
}

.suggestion-distance {
    font-size: 11px;
    color: var(--text-secondary);
    white-space: nowrap;
    padding: 2px 6px;
    background: var(--bg-secondary);
    border-radius: 8px;
    flex-shrink: 0;
}

.suggestion-fav-btn {
    background: none;
    border: none;
    color: var(--text-secondary);
    cursor: pointer;
    padding: 4px 6px;
    font-size: 14px;
    flex-shrink: 0;
    transition: color 0.2s;
    opacity: 0.5;
}

.suggestion-fav-btn:hover,
.suggestion-fav-btn.active {
    color: #f9a825;
    opacity: 1;
}

.suggestion-remove {
    background: none;
    border: none;
    color: var(--text-secondary);
    cursor: pointer;
    padding: 4px 6px;
    font-size: 11px;
    flex-shrink: 0;
    opacity: 0.4;
    transition: opacity 0.2s;
}

.suggestion-remove:hover {
    opacity: 1;
    color: var(--error-color, #f44336);
}

/* =============================================================================
   MAP CONTAINER - FULLSCREEN
   ============================================================================= */

.map-container {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 1;
}

.map {
    width: 100%;
    height: 100%;
}

/* Map overlays */
.map-overlays {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    pointer-events: none;
    z-index: 100;
}

.map-overlays > * {
    pointer-events: auto;
}

/* Legend */
.legend {
    position: absolute;
    bottom: 20px;
    left: 20px;
    background: rgba(255, 255, 255, 0.95);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    padding: 15px;
    border-radius: var(--border-radius);
    box-shadow: var(--shadow);
    min-width: 200px;
    max-width: 300px;
}

.legend h4 {
    font-size: 14px;
    font-weight: 600;
    margin-bottom: 10px;
    color: var(--text-primary);
    display: flex;
    align-items: center;
    gap: 8px;
}

.legend-content {
    font-size: 12px;
}

.legend-item {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 6px;
}

.legend-color {
    width: 16px;
    height: 16px;
    border-radius: 50%;
    border: 1px solid rgba(0,0,0,0.2);
}

/* Legend toggle button (mobile only) */
.legend-toggle-btn {
    display: none; /* Nascosto su desktop */
    position: absolute;
    bottom: 160px;
    left: 10px;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.95);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    border: none;
    box-shadow: 0 2px 8px rgba(0,0,0,0.2);
    cursor: pointer;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    color: var(--primary-color);
    z-index: 500;
    transition: transform 0.2s, box-shadow 0.2s;
}

.legend-toggle-btn:hover {
    transform: scale(1.05);
    box-shadow: 0 4px 12px rgba(0,0,0,0.25);
}

.legend-toggle-btn:active {
    transform: scale(0.95);
}

/* Legend modal (mobile) */
.legend-modal {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0,0,0,0.5);
    z-index: 2000;
    align-items: flex-end;
    justify-content: center;
}

.legend-modal.show {
    display: flex;
}

.legend-modal-content {
    background: white;
    border-radius: 16px 16px 0 0;
    width: 100%;
    max-height: 60vh;
    overflow-y: auto;
    padding: 16px;
    animation: slideUp 0.3s ease;
}

@keyframes slideUp {
    from {
        transform: translateY(100%);
    }
    to {
        transform: translateY(0);
    }
}

.legend-modal-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 12px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--border-color);
}

.legend-modal-header span {
    font-weight: 600;
    font-size: 16px;
}

.legend-close-btn {
    background: none;
    border: none;
    font-size: 24px;
    cursor: pointer;
    color: var(--text-secondary);
    padding: 0;
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* Scale control */
.map-scale {
    position: absolute;
    bottom: 20px;
    right: 20px;
}

/* Coordinates */
.coordinates {
    position: absolute;
    top: 10px;
    right: 10px;
    background: rgba(0, 0, 0, 0.8);
    color: white;
    padding: 8px 12px;
    border-radius: var(--border-radius);
    font-size: 11px;
    font-family: monospace;
}

/* Coordinate Tooltip che segue il mouse */
.coordinate-tooltip {
    position: absolute;
    background: rgba(0, 0, 0, 0.85);
    color: white;
    padding: 6px 10px;
    border-radius: 4px;
    font-size: 12px;
    font-family: monospace;
    font-weight: bold;
    white-space: nowrap;
    pointer-events: none;
    z-index: 1000;
    backdrop-filter: blur(3px);
    -webkit-backdrop-filter: blur(3px);
    border: 1px solid rgba(255, 255, 255, 0.2);
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
    transition: opacity 0.2s ease;
    opacity: 0;
    transform: translate(-50%, -100%);
    margin-top: -10px;
}

.coordinate-tooltip.show {
    opacity: 1;
}

.coordinate-tooltip::after {
    /* Freccia che punta verso il basso */
    content: '';
    position: absolute;
    top: 100%;
    left: 50%;
    margin-left: -4px;
    border: 4px solid transparent;
    border-top-color: rgba(0, 0, 0, 0.85);
}

/* Zoom Level Indicator */
.zoom-indicator {
    position: absolute;
    bottom: 20px;
    right: 120px;
    background: rgba(68, 68, 68, 0.9);
    color: white;
    padding: 4px 8px;
    border-radius: var(--border-radius);
    font-size: 10px;
    font-family: monospace;
    font-weight: bold;
    border: 1px solid rgba(255, 255, 255, 0.3);
    backdrop-filter: blur(5px);
    -webkit-backdrop-filter: blur(5px);
    transition: all 0.2s ease;
}

.zoom-indicator:hover {
    background: rgba(68, 68, 68, 1);
    border-color: rgba(255, 255, 255, 0.5);
}

/* =============================================================================
   BUTTONS
   ============================================================================= */

.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    padding: 8px 16px;
    border: none;
    border-radius: var(--border-radius);
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
    transition: var(--transition);
    text-decoration: none;
    min-height: 36px;
}

.btn:hover {
    transform: translateY(-1px);
    box-shadow: 0 4px 12px rgba(0,0,0,0.15);
}

.btn:active {
    transform: translateY(0);
}

.btn-primary {
    background: var(--primary-color);
    color: white;
}

.btn-primary:hover {
    background: #1976D2;
}

.btn-secondary {
    background: var(--bg-secondary);
    color: var(--text-primary);
    border: 1px solid var(--border-color);
}

.btn-secondary:hover {
    background: var(--border-color);
}

.btn-sm {
    padding: 6px 12px;
    font-size: 12px;
    min-height: 32px;
}

.btn-block {
    width: 100%;
}

/* =============================================================================
   MODALS
   ============================================================================= */

.modal {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 2000;
    opacity: 0;
    visibility: hidden;
    transition: var(--transition);
}

.modal.show {
    opacity: 1;
    visibility: visible;
}

.modal-content {
    background: var(--bg-primary);
    border-radius: var(--border-radius);
    box-shadow: 0 10px 30px rgba(0,0,0,0.3);
    max-width: 90vw;
    max-height: 90vh;
    width: 600px;
    display: flex;
    flex-direction: column;
    transform: scale(0.9);
    transition: var(--transition);
}

.modal.show .modal-content {
    transform: scale(1);
}

.modal-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 20px 24px;
    border-bottom: 1px solid var(--border-color);
}

.modal-header h3 {
    font-size: 18px;
    font-weight: 600;
    color: var(--text-primary);
}

.modal-body {
    flex: 1;
    padding: 24px;
    overflow-y: auto;
}

/* Geolocation modal */
.geo-modal-content { max-width: 400px; text-align: center; }
.geo-modal-icon { font-size: 48px; color: var(--primary-color); margin: 16px 0; }
.geo-modal-icon i { animation: pulse-geo 2s ease-in-out infinite; }
@keyframes pulse-geo {
    0%, 100% { transform: scale(1); opacity: .8; }
    50% { transform: scale(1.1); opacity: 1; }
}
.geo-privacy-note {
    font-size: 12px;
    color: var(--text-secondary);
    background: var(--bg-secondary);
    padding: 10px 14px;
    border-radius: var(--border-radius);
    margin: 12px 0;
}
.geo-privacy-note i { color: var(--success-color); margin-right: 4px; }
.geo-modal-actions { display: flex; gap: 12px; justify-content: center; margin-top: 20px; }
.geo-modal-actions .btn { flex: 1; max-width: 160px; padding: 10px 20px; }
[data-theme="dark"] .geo-privacy-note { background: rgba(255,255,255,0.05); }

/* Heatmap interpolated layer controls */
.heatmap-opacity-control { margin: 12px 0; }
.heatmap-opacity-control label {
    display: flex; justify-content: space-between; align-items: center;
    font-size: 13px; margin-bottom: 6px;
}
.heatmap-timestamp {
    display: flex; align-items: center; justify-content: center; gap: 8px;
    font-size: 12px; color: var(--text-secondary);
    padding: 8px 12px; border-radius: 6px; margin-top: 8px;
    background: linear-gradient(135deg, rgba(76,175,80,0.08), rgba(76,175,80,0.03));
    border: 1px solid rgba(76,175,80,0.15);
}
[data-theme="dark"] .heatmap-timestamp {
    background: linear-gradient(135deg, rgba(76,175,80,0.15), rgba(76,175,80,0.05));
    border-color: rgba(76,175,80,0.25);
}

/* Station info */
.station-info {
    margin-bottom: 20px;
}

.info-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 16px;
    margin-bottom: 16px;
}

.info-item {
    background: var(--bg-secondary);
    padding: 12px;
    border-radius: var(--border-radius);
}

.info-label {
    font-size: 12px;
    color: var(--text-secondary);
    margin-bottom: 4px;
}

.info-value {
    font-size: 16px;
    font-weight: 600;
    color: var(--text-primary);
}

/* Chart container */
.station-chart {
    height: 300px;
    position: relative;
}

/* Info modal content */
.info-content h4 {
    color: var(--primary-color);
    margin-bottom: 10px;
}

.info-content h5 {
    margin: 16px 0 8px;
    color: var(--text-primary);
}

.info-content ul {
    margin-left: 20px;
    margin-bottom: 16px;
}

.tech-tag {
    display: inline-block;
    background: var(--primary-color);
    color: white;
    padding: 4px 8px;
    border-radius: 4px;
    font-size: 12px;
    margin: 2px;
}

.copyright {
    margin-top: 20px;
    padding-top: 16px;
    border-top: 1px solid var(--border-color);
    text-align: center;
    color: var(--text-secondary);
}

/* =============================================================================
   TOAST NOTIFICATIONS
   ============================================================================= */

.toast-container {
    position: fixed;
    top: 80px;
    right: 20px;
    z-index: 3000;
    max-width: 400px;
}

.toast {
    background: var(--bg-primary);
    border: 1px solid var(--border-color);
    border-radius: var(--border-radius);
    box-shadow: var(--shadow);
    padding: 16px;
    margin-bottom: 10px;
    display: flex;
    align-items: flex-start;
    gap: 12px;
    transform: translateX(100%);
    transition: var(--transition);
}

.toast.show {
    transform: translateX(0);
}

.toast.success {
    border-left: 4px solid var(--success-color);
}

.toast.warning {
    border-left: 4px solid var(--warning-color);
}

.toast.error {
    border-left: 4px solid var(--error-color);
}

.toast.info {
    border-left: 4px solid var(--info-color);
}

/* Info Icon Tooltip per Switch */
.switch-info-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    margin-left: 6px;
    font-size: 11px;
    color: var(--text-secondary);
    background: var(--bg-tertiary, rgba(128, 128, 128, 0.2));
    border-radius: 50%;
    cursor: help;
    transition: all 0.2s ease;
    position: relative;
    vertical-align: middle;
}

.switch-info-icon:hover {
    color: var(--primary-color);
    background: var(--primary-color-alpha, rgba(52, 152, 219, 0.2));
    transform: scale(1.1);
}

.switch-info-icon .info-tooltip {
    position: absolute;
    bottom: calc(100% + 8px);
    right: -8px;
    left: auto;
    transform: none;
    background: var(--popup-bg, #1a1a2e);
    color: var(--text-primary, #fff);
    padding: 10px 12px;
    border-radius: 8px;
    font-size: 12px;
    line-height: 1.5;
    width: 220px;
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
    opacity: 0;
    visibility: hidden;
    transition: all 0.2s ease;
    z-index: 1000;
    pointer-events: none;
    text-align: left;
    font-weight: normal;
}

.switch-info-icon .info-tooltip::after {
    content: '';
    position: absolute;
    top: 100%;
    right: 12px;
    left: auto;
    transform: none;
    border: 6px solid transparent;
    border-top-color: var(--popup-bg, #1a1a2e);
}

.switch-info-icon:hover .info-tooltip {
    opacity: 1;
    visibility: visible;
}

.switch-info-icon .info-tooltip strong {
    display: block;
    margin-bottom: 4px;
    color: var(--primary-color);
    font-size: 13px;
}

/* Posizionamento alternativo per tooltip troppo a sinistra */
.switch-info-icon.tooltip-right .info-tooltip {
    left: 0;
    transform: translateX(0);
}

.switch-info-icon.tooltip-right .info-tooltip::after {
    left: 16px;
    transform: none;
}

.toast-icon {
    font-size: 18px;
    margin-top: 2px;
}

.toast-content {
    flex: 1;
}

.toast-title {
    font-weight: 600;
    margin-bottom: 4px;
}

.toast-message {
    font-size: 13px;
    color: var(--text-secondary);
}

.toast-close {
    background: none;
    border: none;
    font-size: 16px;
    cursor: pointer;
    color: var(--text-secondary);
    padding: 0;
    margin-left: 8px;
}

/* =============================================================================
   RESPONSIVE DESIGN
   ============================================================================= */

@media (max-width: 768px) {
    :root {
        --panel-width: 100vw;
        --header-height: 50px;
        --timeline-height: 0px;  /* Timeline è floating pill su mobile, non occupa spazio fisso */
        --tab-bar-height: 48px;  /* Compact tab bar Material 3 */
    }

    /* Header compatto su mobile */
    .app-header h1 {
        font-size: 14px;
        white-space: nowrap;
    }

    /* Titolo abbreviato su mobile */
    .app-header h1 .header-title-full {
        display: none;
    }

    .app-header h1 .header-title-short {
        display: inline;
    }

    .beta-tag {
        display: none;
    }

    .header-content {
        padding: 0 10px;
    }

    .header-actions {
        gap: 6px;
    }

    .header-actions .btn {
        padding: 6px 10px;
        font-size: 12px;
    }

    .data-status-badge .status-text {
        display: none;
    }

    .data-status-badge {
        padding: 6px;
        border-radius: 50%;
    }

    .control-panel {
        position: fixed;
        top: 0;
        left: 0;
        width: 100vw;
        height: 100vh;
        z-index: 1100;
        transform: translateX(-100%);
        background: var(--bg-primary);
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
    }

    .control-panel.show {
        transform: translateX(0);
    }

    .panel-content {
        padding: 16px;
        padding-top: calc(var(--header-height) + 16px);
    }

    /* Su mobile: nascondi legenda desktop, mostra bottone */
    .legend.legend-desktop {
        display: none;
    }

    .legend-toggle-btn {
        display: flex;
    }

    .legend-item {
        margin-bottom: 4px;
        font-size: 12px;
    }

    .legend-color {
        width: 14px;
        height: 14px;
    }

    .coordinates {
        top: 10px;
        right: 10px;
        font-size: 11px;
    }

    .zoom-indicator {
        bottom: 60px;
        right: 10px;
        font-size: 10px;
        padding: 4px 8px;
    }

    .modal-content {
        width: 95vw;
        margin: 20px;
    }

    .modal-body {
        padding: 16px;
    }

    /* Controlli mappa MapLibre su mobile - sposta sotto header */
    .maplibregl-ctrl-top-right {
        top: 60px !important;
        right: 8px !important;
    }

    .maplibregl-ctrl-top-left {
        top: 60px !important;
        left: 8px !important;
    }

    /* Bottoni zoom più grandi su mobile per touch */
    .maplibregl-ctrl-group button {
        width: 36px !important;
        height: 36px !important;
    }
}

@media (max-width: 480px) {
    .info-grid {
        grid-template-columns: 1fr;
    }
    
    .station-chart {
        height: 250px;
    }
}

/* =============================================================================
   MAPLIBRE CUSTOMIZATIONS
   ============================================================================= */

.maplibregl-popup {
    max-width: 320px;
}

.maplibregl-popup-content {
    padding: 16px;
    border-radius: var(--border-radius);
    box-shadow: var(--shadow);
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
    font-size: 14px;
    line-height: 1.5;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-rendering: optimizeLegibility;
}

.maplibregl-popup-close-button {
    font-size: 20px;
    padding: 4px;
}

.maplibregl-ctrl-group {
    border-radius: var(--border-radius);
    box-shadow: var(--shadow);
}

.maplibregl-ctrl-group button {
    border-radius: 0;
}

.maplibregl-ctrl-group button:first-child {
    border-top-left-radius: var(--border-radius);
    border-top-right-radius: var(--border-radius);
}

.maplibregl-ctrl-group button:last-child {
    border-bottom-left-radius: var(--border-radius);
    border-bottom-right-radius: var(--border-radius);
}

/* =============================================================================
   ANIMATIONS
   ============================================================================= */

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

@keyframes slideInRight {
    from { transform: translateX(100%); }
    to { transform: translateX(0); }
}

@keyframes pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.7; }
}

.fade-in {
    animation: fadeIn 0.3s ease;
}

.slide-in-right {
    animation: slideInRight 0.3s ease;
}

.pulse {
    animation: pulse 2s infinite;
}

/* =============================================================================
   UTILITY CLASSES
   ============================================================================= */

.hidden {
    display: none !important;
}

.text-center {
    text-align: center;
}

.text-muted {
    color: var(--text-secondary);
}

.font-weight-bold {
    font-weight: 600;
}

.margin-bottom {
    margin-bottom: 16px;
}

.no-scroll {
    overflow: hidden;
}

/* =============================================================================
   ADMIN TOOLS
   ============================================================================= */

.admin-tools {
    margin-top: 8px;
}

.admin-tools .btn {
    text-align: left;
    justify-content: flex-start;
}

.admin-tools small {
    display: block;
    line-height: 1.3;
    font-size: 11px;
}

/* =============================================================================
   POPUP LAST OBSERVATION STYLES
   ============================================================================= */

.last-obs-data {
    line-height: 1.5;
}

.last-obs-timestamp {
    border-bottom: 1px solid #dee2e6;
    padding-bottom: 4px;
    margin-bottom: 4px;
}

.last-obs-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 4px 16px;
    margin-left: 4px;
}

.last-obs-param {
    white-space: nowrap;
}

/* =============================================================================
   POPUP STATION CHARTS STYLES
   ============================================================================= */

.station-popup .popup-actions {
    border-top: 1px solid #e9ecef;
    padding-top: 0.75rem;
    margin-top: 0.75rem;
    text-align: center;
}

.station-popup .popup-actions .btn {
    border-radius: 20px;
    font-weight: 500;
    text-decoration: none;
    transition: all 0.2s ease;
    font-size: 0.875rem;
    padding: 0.375rem 1rem;
}

.station-popup .popup-actions .btn:hover {
    transform: translateY(-1px);
    box-shadow: 0 2px 8px rgba(0,0,0,0.15);
    text-decoration: none;
}

.station-popup .popup-actions .btn-primary {
    background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
    border: none;
    color: white;
}

.station-popup .popup-actions .btn-primary:hover {
    background: linear-gradient(135deg, #3d8bfe 0%, #0dd6e8 100%);
}

/* =============================================================================
   STATION CHARTS - ECharts Styles Professionali
   ============================================================================= */

.parameter-card {
    background: #FFFFFF;
    border: 1px solid #E2E8F0;
    border-radius: 12px;
    margin-bottom: 24px;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
    overflow: hidden;
    transition: all 0.3s ease;
}

.parameter-card:hover {
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
    transform: translateY(-2px);
}

.parameter-header {
    background: linear-gradient(135deg, #F7FAFC 0%, #EDF2F7 100%);
    padding: 20px 24px;
    border-bottom: 1px solid #E2E8F0;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.parameter-header h5 {
    margin: 0;
    color: #1A202C;
    font-size: 18px;
    font-weight: 700;
    letter-spacing: -0.025em;
}

.parameter-stats {
    display: flex;
    gap: 20px;
    margin-top: 6px;
}

.parameter-stats span {
    font-size: 13px;
    color: #4A5568;
    display: flex;
    align-items: center;
    gap: 6px;
    font-weight: 500;
}

.aggregation-badge {
    display: inline-block;
    padding: 4px 8px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.aggregation-inst {
    background: linear-gradient(135deg, #EBF8FF 0%, #BEE3F8 100%);
    color: #2B6CB0;
    border: 1px solid #90CDF4;
}

.aggregation-avg {
    background: linear-gradient(135deg, #FAF5FF 0%, #E9D8FD 100%);
    color: #6B46C1;
    border: 1px solid #C4B5FD;
}

.aggregation-max {
    background: linear-gradient(135deg, #FFF5F5 0%, #FED7D7 100%);
    color: #C53030;
    border: 1px solid #FC8181;
}

.aggregation-min {
    background: linear-gradient(135deg, #F0FFF4 0%, #C6F6D5 100%);
    color: #2F855A;
    border: 1px solid #9AE6B4;
}

.aggregation-acc {
    background: linear-gradient(135deg, #FFFAF0 0%, #FEEBC8 100%);
    color: #C05621;
    border: 1px solid #F6AD55;
}

.aggregation-sum {
    background: linear-gradient(135deg, #E0F2F1 0%, #B2DFDB 100%);
    color: #00796B;
    border: 1px solid #80CBC4;
}

.aggregation-gspdd {
    background: linear-gradient(135deg, #FCE4EC 0%, #F8BBD0 100%);
    color: #C2185B;
    border: 1px solid #F48FB1;
}

.source-legend {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    margin-bottom: 20px;
    padding: 16px 20px;
    background: linear-gradient(135deg, #F8FAFC 0%, #F1F5F9 100%);
    border-radius: 8px;
    border: 1px solid #E2E8F0;
}

.source-item {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    color: #2D3748;
    font-weight: 500;
    padding: 4px 8px;
    background: rgba(255, 255, 255, 0.7);
    border-radius: 6px;
    border: 1px solid rgba(226, 232, 240, 0.5);
}

.source-color {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    border: 2px solid rgba(255, 255, 255, 0.8);
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}

.chart-container {
    position: relative;
    background: #FFFFFF;
    border-radius: 8px;
    padding: 8px;
}

/* ECharts responsive adjustments */
@media (max-width: 768px) {
    .parameter-header {
        flex-direction: column;
        align-items: flex-start;
        gap: 12px;
    }
    
    .parameter-stats {
        flex-wrap: wrap;
        gap: 8px;
    }
    
    .source-legend {
        padding: 8px 12px;
        gap: 8px;
    }
    
    .chart-container > div {
        height: 300px !important;
    }
}

@media (max-width: 480px) {
    .parameter-card {
        margin-bottom: 16px;
    }
    
    .parameter-header {
        padding: 12px 16px;
    }
    
    .parameter-header h5 {
        font-size: 14px;
    }
    
    .chart-container > div {
        height: 250px !important;
    }
}

/* Chart Navigation Help */
.chart-navigation-help {
    text-align: center;
    margin-bottom: 12px;
    padding: 10px 16px;
    background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
    border-radius: 8px;
    border: 1px solid #dee2e6;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}

.chart-navigation-help small {
    font-size: 0.85rem;
    color: #6c757d;
    font-weight: 500;
}

.chart-navigation-help .fas {
    color: #007bff;
}

.chart-navigation-help strong {
    color: #495057;
}

/* =============================================================================
   TIME SLIDERS (Slider A & B)
   ============================================================================= */

/* Slider container */
.time-slider {
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: linear-gradient(to right, #e0e0e0 0%, #2196F3 100%);
    outline: none;
    opacity: 0.9;
    transition: opacity 0.2s;
    cursor: pointer;
    margin: 8px 0;
}

.time-slider:hover {
    opacity: 1;
}

/* Webkit browsers (Chrome, Safari, Edge) */
.time-slider::-webkit-slider-thumb {
    appearance: none;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: #2196F3;
    cursor: pointer;
    box-shadow: 0 2px 6px rgba(33, 150, 243, 0.4);
    transition: all 0.2s ease;
}

.time-slider::-webkit-slider-thumb:hover {
    background: #1976D2;
    transform: scale(1.15);
    box-shadow: 0 3px 8px rgba(33, 150, 243, 0.6);
}

/* Firefox */
.time-slider::-moz-range-thumb {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: #2196F3;
    cursor: pointer;
    border: none;
    box-shadow: 0 2px 6px rgba(33, 150, 243, 0.4);
    transition: all 0.2s ease;
}

.time-slider::-moz-range-thumb:hover {
    background: #1976D2;
    transform: scale(1.15);
    box-shadow: 0 3px 8px rgba(33, 150, 243, 0.6);
}

/* Time display values */
.time-display {
    text-align: center;
    margin: 8px 0;
    padding: 8px 12px;
    background: linear-gradient(135deg, #f5f5f5 0%, #e8e8e8 100%);
    border-radius: 6px;
    border: 1px solid #e0e0e0;
}

.time-value {
    font-weight: 600;
    color: #2196F3;
    font-size: 14px;
}

/* Slider row (for Slider B sub-sliders) - Legacy */
.slider-row {
    margin-bottom: 12px;
}

.slider-label {
    display: block;
    font-size: 13px;
    font-weight: 500;
    color: var(--text-secondary);
    margin-bottom: 4px;
}

/* =============================================================================
   DUAL RANGE SLIDER
   ============================================================================= */

.range-slider-labels {
    display: flex;
    justify-content: space-between;
    margin-bottom: 8px;
    font-size: 13px;
}

.range-slider-labels .time-value {
    background: linear-gradient(135deg, #E3F2FD 0%, #BBDEFB 100%);
    padding: 4px 10px;
    border-radius: 12px;
    font-size: 12px;
    font-weight: 600;
    color: #1565C0;
    border: 1px solid #90CAF9;
}

.range-slider-container {
    position: relative;
    height: 24px;
    margin: 12px 0 16px 0;
}

.range-slider-track {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 100%;
    height: 8px;
    background: #e0e0e0;
    border-radius: 4px;
}

.range-slider-range {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    height: 8px;
    background: linear-gradient(90deg, #2196F3, #1976D2);
    border-radius: 4px;
    pointer-events: none;
}

.range-slider-input {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    -webkit-appearance: none;
    appearance: none;
    background: transparent;
    pointer-events: none;
    margin: 0;
    padding: 0;
}

.range-slider-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: #2196F3;
    cursor: pointer;
    pointer-events: auto;
    box-shadow: 0 2px 8px rgba(33, 150, 243, 0.4);
    border: 3px solid white;
    transition: all 0.2s ease;
}

.range-slider-input::-webkit-slider-thumb:hover {
    background: #1976D2;
    transform: scale(1.15);
    box-shadow: 0 3px 12px rgba(33, 150, 243, 0.6);
}

.range-slider-input::-webkit-slider-thumb:active {
    transform: scale(1.2);
}

.range-slider-input::-moz-range-thumb {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: #2196F3;
    cursor: pointer;
    pointer-events: auto;
    box-shadow: 0 2px 8px rgba(33, 150, 243, 0.4);
    border: 3px solid white;
    transition: all 0.2s ease;
}

.range-slider-input::-moz-range-thumb:hover {
    background: #1976D2;
    transform: scale(1.15);
    box-shadow: 0 3px 12px rgba(33, 150, 243, 0.6);
}

/* Thumb differenziati: start (sinistra) più scuro */
#windowStartSlider::-webkit-slider-thumb {
    background: #1565C0;
}

#windowStartSlider::-moz-range-thumb {
    background: #1565C0;
}

/* Time window summary */
.time-window-summary {
    text-align: center;
    margin-top: 12px;
    padding: 10px 14px;
    background: linear-gradient(135deg, #E3F2FD 0%, #BBDEFB 100%);
    border-radius: 6px;
    border: 1px solid #90CAF9;
    font-size: 13px;
    color: #1565C0;
    font-weight: 500;
}

.time-window-summary strong {
    color: #0D47A1;
    font-weight: 700;
}
/* Pulsante Applica Filtro Temporale */
.btn-apply-time-filter {
    width: 100%;
    margin-top: 12px;
    padding: 10px 16px;
    font-weight: 600;
    background: linear-gradient(135deg, #2196F3 0%, #1976D2 100%);
    color: white;
    border: none;
    border-radius: 6px;
    cursor: pointer;
    transition: all 0.3s ease;
    box-shadow: 0 2px 6px rgba(33, 150, 243, 0.3);
}

.btn-apply-time-filter:hover {
    background: linear-gradient(135deg, #1976D2 0%, #1565C0 100%);
    box-shadow: 0 4px 12px rgba(33, 150, 243, 0.5);
    transform: translateY(-2px);
}

.btn-apply-time-filter:active {
    transform: translateY(0);
    box-shadow: 0 2px 4px rgba(33, 150, 243, 0.3);
}

.btn-apply-time-filter:disabled {
    background: #BDBDBD;
    cursor: not-allowed;
    box-shadow: none;
    transform: none;
}

/* Badge Modifiche Pending */
.time-filter-pending-badge {
    margin-top: 8px;
    padding: 8px 12px;
    background: linear-gradient(135deg, #FFA726 0%, #FB8C00 100%);
    color: white;
    border-radius: 6px;
    font-size: 12px;
    font-weight: 600;
    text-align: center;
    animation: pulse 2s infinite;
}

/* =============================================================================
   COMPACT TIMELINE BAR - Bottom of Map
   ============================================================================= */

/* ===== Timeline Scrubber (drag-anywhere) ===== */

/* Base bar — barra in basso */
.tl-bar {
    position: absolute;
    bottom: 0;
    left: var(--panel-width, 380px);
    right: 0;
    height: 56px;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 0 12px;
    background: rgba(15, 23, 42, 0.85);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    z-index: 200;
    user-select: none;
    transition: box-shadow 0.3s ease;
}

/* Data-updated feedback */
.tl-bar.data-updated {
    box-shadow: 0 0 20px rgba(59, 130, 246, 0.6),
                inset 0 0 10px rgba(59, 130, 246, 0.2);
    animation: tl-pulse 1s ease-out;
}

@keyframes tl-pulse {
    0% {
        box-shadow: 0 0 30px rgba(59, 130, 246, 0.8),
                    inset 0 0 15px rgba(59, 130, 246, 0.4);
    }
    100% {
        box-shadow: 0 0 0 rgba(59, 130, 246, 0);
    }
}

/* Desktop immersive: floating pill centered */
body.ui-immersive .tl-bar {
    position: fixed;
    bottom: 16px;
    left: 50%;
    right: auto;
    transform: translateX(-50%);
    width: 640px;
    max-width: calc(100vw - 32px);
    height: 48px;
    border-radius: 24px;
    border: 1px solid rgba(255,255,255,0.1);
    box-shadow: 0 4px 24px rgba(0,0,0,0.3);
    transition: transform 120ms ease-out, box-shadow 120ms ease-out;
}
/* W-CTP TASK 1.3: Micro-scale hover — desktop only, nearly imperceptible */
@media (hover: hover) {
    body.ui-immersive .tl-bar:hover {
        transform: translateX(-50%) scale(1.008);
        box-shadow: 0 6px 28px rgba(0,0,0,0.35);
    }
}

/* Play button */
.tl-play {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    border: none;
    background: var(--accent, #3b82f6);
    color: white;
    cursor: pointer;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    transition: background 0.2s, transform 0.15s;
}
.tl-play:hover { background: #2563eb; transform: scale(1.05); }
.tl-play.playing { background: #f59e0b; }
.tl-play.playing .fa-spinner { font-size: 16px; }

/* Scrubber — drag-anywhere surface */
.tl-scrubber {
    flex: 1;
    height: 100%;
    position: relative;
    overflow: hidden;
    cursor: grab;
    touch-action: none;
    /* UX95 TASK 1: Premium edge fade — smooth cosine-like gradient */
    -webkit-mask-image: linear-gradient(to right,
        transparent 0%, rgba(0,0,0,0.08) 3%, rgba(0,0,0,0.4) 8%, black 15%,
        black 85%, rgba(0,0,0,0.4) 92%, rgba(0,0,0,0.08) 97%, transparent 100%);
    mask-image: linear-gradient(to right,
        transparent 0%, rgba(0,0,0,0.08) 3%, rgba(0,0,0,0.4) 8%, black 15%,
        black 85%, rgba(0,0,0,0.4) 92%, rgba(0,0,0,0.08) 97%, transparent 100%);
}
.tl-scrubber.dragging { cursor: grabbing; }

/* Track — scorre orizzontalmente sotto l'hairline */
.tl-track {
    position: absolute;
    top: 0;
    bottom: 0;
    white-space: nowrap;
    display: flex;
    align-items: center;
    will-change: transform;
    transition: none;
}
/* W-CTP TASK 1.1: Subtle inner vignette for material depth */
.tl-scrubber::after {
    content: "";
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: 1;
    background: radial-gradient(
        ellipse at center,
        rgba(0,0,0,0) 60%,
        rgba(0,0,0,0.06) 100%
    );
}

/* W-CTP TASK 7: Micro overshoot — easeOutBack c1=1.2, 1-2px overshoot */
.tl-track.snapping {
    transition: transform 160ms cubic-bezier(0.34, 1.2, 0.64, 1);
}

/* Singolo tick nel track — gerarchico: minor 5min, medium 30min, major 60min */
.tl-tick {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    width: 24px;
    flex-shrink: 0;
    position: relative;
}
/* W-CTP TASK 3: Tick refinement — reduced visual noise */
.tl-tick::before {
    content: '';
    width: 1px;
    height: 10px;
    background: rgba(255,255,255,0.14);
    opacity: 0.7;
}
.tl-tick.medium::before {
    height: 14px;
    background: rgba(255,255,255,0.30);
    opacity: 0.85;
}
.tl-tick.major::before {
    height: 20px;
    width: 1.5px;
    background: rgba(255,255,255,0.50);
    opacity: 1;
}
.tl-tick-label {
    font-size: 9px;
    color: rgba(255,255,255,0.5);
    margin-top: 2px;
    position: absolute;
    top: calc(50% + 10px);
    white-space: nowrap;
}
.tl-tick.major .tl-tick-label { color: rgba(255,255,255,0.75); font-weight: 500; }
.tl-tick.medium .tl-tick-label { color: rgba(255,255,255,0.5); font-weight: 400; font-size: 8px; }

/* Hairline fissa al centro — premium glow */
.tl-hairline {
    position: absolute;
    left: calc(50% - 1px);
    top: 4px;
    bottom: 4px;
    width: 2px;
    background: var(--accent, #3b82f6);
    border-radius: 1px;
    z-index: 2;
    pointer-events: none;
    /* W-CTP TASK 1.2: Softer, more elegant glow */
    box-shadow: 0 0 6px rgba(90,160,255,0.45),
                0 0 14px rgba(90,160,255,0.25);
}

/* W-CTP TASK 4: Snap pulse — brief glow burst when snapping completes */
@keyframes tlPulse {
    0%   { box-shadow: 0 0 8px rgba(90,160,255,0.7), 0 0 20px rgba(90,160,255,0.35); }
    100% { box-shadow: 0 0 6px rgba(90,160,255,0.45), 0 0 14px rgba(90,160,255,0.25); }
}
.tl-hairline.tl-pulse {
    animation: tlPulse 280ms ease-out forwards;
}

/* UX95 TASK 2: Hairline reactive during drag — enhanced glow + micro scale */
.tl-hairline {
    transition: box-shadow 0.2s ease, transform 0.2s ease;
}
.tl-bar.tl-dragging .tl-hairline {
    box-shadow: 0 0 8px rgba(90,160,255,0.65),
                0 0 18px rgba(90,160,255,0.30);
    transform: scaleY(1.06);
}
body.light-theme .tl-bar.tl-dragging .tl-hairline,
[data-theme="light"] .tl-bar.tl-dragging .tl-hairline {
    box-shadow: 0 0 8px rgba(90,160,255,0.55),
                0 0 18px rgba(90,160,255,0.22);
}

/* Radar latency zone — inside track, scrolls with ticks */
/* W-CTP TASK 5: Refined from orange to subtle blue-navy */
.tl-latency-zone {
    position: absolute;
    top: 0;
    bottom: 0;
    background: linear-gradient(to right,
        transparent 0%,
        rgba(100, 140, 200, 0.08) 40%,
        rgba(80, 120, 180, 0.14) 100%
    );
    pointer-events: none;
    z-index: 1;
}

/* Timestamp display */
.tl-timestamp {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    flex-shrink: 0;
    min-width: 80px;
    line-height: 1.1;
}
.tl-time-row {
    display: flex;
    align-items: baseline;
    gap: 6px;
}
.tl-time {
    font-size: 28px;
    font-weight: 600;
    color: white;
    font-variant-numeric: tabular-nums;
    letter-spacing: -0.5px;
    line-height: 1;
}
.tl-date {
    font-size: 10px;
    color: rgba(255,255,255,0.6);
    margin-top: 1px;
    font-weight: 400;  /* W-CTP TASK 2: weaker than time */
    opacity: 0.75;
}

/* Sync badge */
.sync-badge {
    display: inline-flex;
    align-items: center;
    font-size: 9px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: rgba(255,255,255,0.85);
    background: rgba(33,150,243,0.3);
    padding: 1px 6px;
    border-radius: 3px;
    line-height: 1.4;
    margin-left: 4px;
}

/* Speed control */
.tl-speed {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-shrink: 0;
}
.tl-speed span {
    font-size: 12px;
    color: rgba(255,255,255,0.7);
    min-width: 24px;
}
.tl-speed input[type="range"] {
    width: 60px;
    height: 4px;
    -webkit-appearance: none;
    appearance: none;
    background: rgba(255,255,255,0.2);
    border-radius: 2px;
    outline: none;
}
.tl-speed input[type="range"]::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 12px;
    height: 12px;
    background: #3b82f6;
    border-radius: 50%;
    cursor: pointer;
}

/* Follow Real Time Toggle Button */
.follow-realtime-btn {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 6px 12px;
    background: rgba(255,255,255,0.1);
    border: 1px solid rgba(255,255,255,0.2);
    border-radius: 16px;
    color: rgba(255,255,255,0.6);
    font-size: 11px;
    cursor: pointer;
    transition: all 0.2s ease;
    flex-shrink: 0;
}
.follow-realtime-btn:hover {
    background: rgba(255,255,255,0.15);
    color: rgba(255,255,255,0.8);
}
.follow-realtime-btn.active {
    background: rgba(76, 175, 80, 0.3);
    border-color: rgba(76, 175, 80, 0.6);
    color: #4CAF50;
}
.follow-realtime-btn.active i {
    animation: spin-slow 2s linear infinite;
}
.follow-realtime-btn i { font-size: 12px; }
.follow-realtime-label {
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}
.live-countdown {
    font-size: 10px;
    font-weight: 400;
    opacity: 0.7;
    font-family: 'SF Mono', 'Consolas', monospace;
    min-width: 28px;
    text-align: right;
}
.live-countdown:empty { display: none; }

@keyframes spin-slow {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}

/* Screen-reader only hidden range */
.tl-sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    white-space: nowrap;
}

/* Adjust map container to make room for timeline bar */
.map-container {
    bottom: 0 !important;
}
.map-container .map {
    height: calc(100% - 56px) !important;
}
body.ui-immersive .map-container .map {
    height: 100% !important;
}

/* Adjust legend position to be above timeline */
.legend {
    bottom: 70px !important;
}
body.ui-immersive .legend {
    bottom: 16px !important;
}

/* Light theme */
body.light-theme .tl-bar,
[data-theme="light"] .tl-bar {
    background: rgba(255,255,255,0.9);
}
body.light-theme .tl-time,
[data-theme="light"] .tl-time { color: #1e293b; }
body.light-theme .tl-date,
[data-theme="light"] .tl-date { color: rgba(0,0,0,0.5); }
body.light-theme .tl-tick::before,
[data-theme="light"] .tl-tick::before { background: rgba(0,0,0,0.12); }
body.light-theme .tl-tick.medium::before,
[data-theme="light"] .tl-tick.medium::before { background: rgba(0,0,0,0.25); }
body.light-theme .tl-tick.major::before,
[data-theme="light"] .tl-tick.major::before { background: rgba(0,0,0,0.40); }
body.light-theme .tl-tick-label,
[data-theme="light"] .tl-tick-label { color: rgba(0,0,0,0.4); }
body.light-theme .tl-tick.major .tl-tick-label,
[data-theme="light"] .tl-tick.major .tl-tick-label { color: rgba(0,0,0,0.6); }
body.light-theme .tl-tick.medium .tl-tick-label,
[data-theme="light"] .tl-tick.medium .tl-tick-label { color: rgba(0,0,0,0.45); }
body.light-theme .tl-hairline,
[data-theme="light"] .tl-hairline {
    box-shadow: 0 0 6px rgba(59, 130, 246, 0.35),
                0 0 12px rgba(59, 130, 246, 0.12);
}
[data-theme="light"] .follow-realtime-btn {
    background: rgba(0,0,0,0.05);
    border-color: rgba(0,0,0,0.15);
    color: rgba(0,0,0,0.5);
}

/* Mobile Responsive */
@media (max-width: 768px) {
    .tl-bar {
        height: 52px;
        padding: 0 10px;
        gap: 6px;
    }
    .tl-play {
        width: 40px;
        height: 40px;
        font-size: 13px;
    }
    .tl-tick { width: 18px; }
    .tl-track.snapping { transition-duration: 190ms; } /* UX95 TASK 3 */
    .tl-time { font-size: 20px; }
    .tl-speed, .tl-date, .follow-realtime-label { display: none; }
    .follow-realtime-btn { padding: 6px 8px; }
    .map-container .map {
        height: calc(100% - 48px) !important;
    }
    .legend {
        bottom: 60px !important;
    }
}

@media (max-width: 480px) {
    .follow-realtime-btn { display: none; }
    .tl-bar { padding: 0 6px; }
    .sync-badge { display: none !important; }
    /* W-CTP TASK 3: thin labels on small screens via JS class */
    .tl-tick.label-thin .tl-tick-label { display: none; }
}

/* =============================================================================
   CUSTOM SELECT DROPDOWN WITH ICONS
   ============================================================================= */

.custom-select-wrapper {
    position: relative;
    width: 100%;
    font-size: 13px;
}

.custom-select-trigger {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 12px;
    background: white;
    border: 1px solid var(--border-color);
    border-radius: var(--border-radius);
    cursor: pointer;
    transition: var(--transition);
}

.custom-select-trigger:hover {
    border-color: var(--primary-color);
}

.custom-select-wrapper.open .custom-select-trigger {
    border-color: var(--primary-color);
    border-bottom-left-radius: 0;
    border-bottom-right-radius: 0;
}

.custom-select-trigger .selected-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    height: 18px;
    flex-shrink: 0;
}

.custom-select-trigger .selected-icon img {
    width: 20px;
    height: 14px;
    object-fit: cover;
    border-radius: 2px;
    box-shadow: 0 1px 2px rgba(0,0,0,0.1);
}

/* Square/circular logos in trigger */
.custom-select-trigger .selected-icon img.icon-square {
    width: 18px;
    height: 18px;
    object-fit: contain;
    border-radius: 3px;
}

.custom-select-trigger .selected-text {
    flex: 1;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.custom-select-trigger i.fa-chevron-down {
    font-size: 10px;
    color: var(--text-secondary);
    transition: transform 0.2s ease;
}

.custom-select-wrapper.open .custom-select-trigger i.fa-chevron-down {
    transform: rotate(180deg);
}

.custom-select-options {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    max-height: 300px;
    overflow-y: auto;
    background: white;
    border: 1px solid var(--primary-color);
    border-top: none;
    border-bottom-left-radius: var(--border-radius);
    border-bottom-right-radius: var(--border-radius);
    box-shadow: var(--shadow);
    z-index: 1000;
    display: none;
}

.custom-select-wrapper.open .custom-select-options {
    display: block;
}

/* Scrollbar styling for dropdown */
.custom-select-options::-webkit-scrollbar {
    width: 6px;
}

.custom-select-options::-webkit-scrollbar-track {
    background: var(--bg-secondary);
}

.custom-select-options::-webkit-scrollbar-thumb {
    background: var(--border-color);
    border-radius: 3px;
}

.custom-select-options::-webkit-scrollbar-thumb:hover {
    background: var(--text-secondary);
}

/* =============================================================================
   FONTE DATI MULTI-TOGGLE SWITCHES
   ============================================================================= */

/* Search box */
.fonte-search-box {
    position: relative;
    margin-bottom: 10px;
}

.fonte-search-icon {
    position: absolute;
    left: 10px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--text-muted);
    font-size: 12px;
    pointer-events: none;
}

.fonte-search-input {
    width: 100%;
    padding: 8px 32px 8px 32px;
    border: 1px solid var(--border-color);
    border-radius: 6px;
    background: var(--bg-primary);
    color: var(--text-primary);
    font-size: 13px;
    transition: border-color 0.2s, box-shadow 0.2s;
}

.fonte-search-input:focus {
    outline: none;
    border-color: var(--primary-color);
    box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
}

.fonte-search-input::placeholder {
    color: var(--text-muted);
}

.fonte-search-clear {
    position: absolute;
    right: 6px;
    top: 50%;
    transform: translateY(-50%);
    background: none;
    border: none;
    color: var(--text-muted);
    cursor: pointer;
    padding: 4px 6px;
    border-radius: 4px;
    font-size: 11px;
    opacity: 0;
    transition: opacity 0.2s, color 0.2s;
}

.fonte-search-box:has(.fonte-search-input:not(:placeholder-shown)) .fonte-search-clear {
    opacity: 1;
}

.fonte-search-clear:hover {
    color: var(--text-primary);
    background: var(--bg-secondary);
}

/* Hidden items when searching */
.fonte-toggle-item.hidden-by-search {
    display: none !important;
}

/* No results message */
.fonte-no-results {
    padding: 20px;
    text-align: center;
    color: var(--text-muted);
    font-size: 13px;
}

.fonte-toggle-header {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 10px;
    align-items: center;
}

/* Separator between selection and sort buttons */
.fonte-sort-separator {
    width: 1px;
    height: 20px;
    background: var(--border-color);
    margin: 0 4px;
}

/* Sort buttons */
.fonte-sort-btn {
    padding: 4px 8px !important;
}

.fonte-sort-btn.active {
    background: var(--primary-color) !important;
    border-color: var(--primary-color) !important;
    color: white !important;
}

.fonte-sort-btn:not(.active):hover {
    background: var(--bg-secondary);
}

.fonte-toggle-header .btn-xs {
    padding: 4px 10px;
    font-size: 11px;
    border-radius: 4px;
}

.fonte-toggle-header .btn-outline {
    background: transparent;
    border: 1px solid var(--border-color);
    color: var(--text-secondary);
}

.fonte-toggle-header .btn-outline:hover {
    background: var(--bg-secondary);
    border-color: var(--primary-color);
    color: var(--primary-color);
}

/* Fonte Dati Collapsible Panel */
.fonte-collapsible {
    padding: 0 !important;
}

.fonte-collapse-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px;
    cursor: pointer;
    border-radius: 8px;
    transition: background-color 0.2s;
}

.fonte-collapse-header:hover {
    background-color: rgba(0, 0, 0, 0.05);
}

.fonte-collapse-header .control-label {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0;
}

.fonte-counter {
    font-size: 11px;
    color: var(--text-secondary);
    font-weight: normal;
}

.fonte-collapse-icon {
    transition: transform 0.3s ease;
    color: var(--text-secondary);
}

.fonte-collapsible.expanded .fonte-collapse-icon {
    transform: rotate(180deg);
}

.fonte-collapse-content {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.3s ease, padding 0.3s ease;
    padding: 0 12px;
}

.fonte-collapsible.expanded .fonte-collapse-content {
    max-height: 450px;
    padding: 0 12px 12px 12px;
}

/* Disabled state for fonte collapsible */
.fonte-collapsible.disabled {
    opacity: 0.5;
}

.fonte-collapsible.disabled .fonte-collapse-header {
    cursor: not-allowed;
    pointer-events: none;
}

/* Ensure fonte-toggle-list scrolls within expanded content */
.fonte-collapsible.expanded .fonte-toggle-list {
    max-height: 200px;
    overflow-y: auto;
}

.fonte-toggle-list {
    max-height: 200px;
    overflow-y: auto;
    border: 1px solid var(--border-color);
    border-radius: 8px;
    background: var(--bg-primary);
}

.fonte-toggle-loading {
    padding: 20px;
    text-align: center;
    color: var(--text-secondary);
}

.fonte-toggle-item {
    display: flex;
    align-items: center;
    padding: 8px 12px;
    border-bottom: 1px solid var(--border-color);
    transition: background-color 0.15s ease;
}

.fonte-toggle-item:last-child {
    border-bottom: none;
}

.fonte-toggle-item:hover {
    background-color: var(--bg-secondary);
}

.fonte-toggle-item.disabled {
    opacity: 0.5;
}

/* Toggle Switch - Fonti Dati (compatto, stesso stile iOS) */
.fonte-toggle-switch {
    position: relative;
    width: 40px;
    height: 22px;
    flex-shrink: 0;
    margin-right: 10px;
    display: inline-block;
}

.fonte-toggle-switch input {
    opacity: 0;
    width: 0;
    height: 0;
    position: absolute;
}

.fonte-toggle-slider {
    position: absolute;
    cursor: pointer;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: rgba(120, 120, 128, 0.32);
    transition: background-color 0.25s cubic-bezier(0.4, 0, 0.2, 1);
    border-radius: 11px;
}

.fonte-toggle-slider:before {
    position: absolute;
    content: "";
    height: 18px;
    width: 18px;
    left: 2px;
    bottom: 2px;
    background-color: #fff;
    transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1),
                box-shadow 0.25s cubic-bezier(0.4, 0, 0.2, 1);
    border-radius: 50%;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2),
                0 1px 2px rgba(0, 0, 0, 0.1);
}

.fonte-toggle-switch input:checked + .fonte-toggle-slider {
    background-color: #34C759; /* Verde iOS */
}

.fonte-toggle-switch input:checked + .fonte-toggle-slider:before {
    transform: translateX(18px);
}

.fonte-toggle-switch input:focus + .fonte-toggle-slider {
    box-shadow: 0 0 0 3px rgba(52, 199, 89, 0.3);
}

/* Hover e active states per fonte toggle */
.fonte-toggle-switch:hover .fonte-toggle-slider {
    background-color: rgba(120, 120, 128, 0.48);
}

.fonte-toggle-switch:hover input:checked + .fonte-toggle-slider {
    background-color: #30B854;
}

/* Icon and label */
.fonte-toggle-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 20px;
    flex-shrink: 0;
    margin-right: 8px;
}

.fonte-toggle-icon img {
    width: 20px;
    height: 14px;
    object-fit: cover;
    border-radius: 2px;
}

.fonte-toggle-icon img.icon-square {
    width: 18px;
    height: 18px;
    object-fit: contain;
    border-radius: 3px;
}

.fonte-toggle-label {
    flex: 1;
    font-size: 13px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.fonte-toggle-count {
    font-size: 11px;
    color: var(--text-secondary);
    background: var(--bg-secondary);
    padding: 2px 6px;
    border-radius: 10px;
    margin-left: 8px;
}

/* Scrollbar for toggle list */
.fonte-toggle-list::-webkit-scrollbar {
    width: 6px;
}

.fonte-toggle-list::-webkit-scrollbar-track {
    background: var(--bg-secondary);
}

.fonte-toggle-list::-webkit-scrollbar-thumb {
    background: var(--border-color);
    border-radius: 3px;
}

.fonte-toggle-list::-webkit-scrollbar-thumb:hover {
    background: var(--text-secondary);
}

/* =============================================================================
   LAYER SATELLITARI EUMETSAT
   ============================================================================= */

.satellite-options {
    padding: 12px;
    background: rgba(0, 0, 0, 0.03);
    border-radius: 8px;
    margin-top: 10px;
    border: 1px solid var(--border-color);
}

.satellite-options select {
    font-size: 13px;
}

.satellite-options optgroup {
    font-weight: 600;
    color: var(--text-primary);
}

.satellite-options option {
    padding: 4px 8px;
}

/* ==========================================================================
   CLOUD OVERLAY V4 CONTROLS
   ========================================================================== */

.cloud-overlay-options {
    margin-top: 8px;
}

.cloud-opacity-control {
    margin: 8px 0;
}

.cloud-opacity-control label {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 13px;
    margin-bottom: 6px;
}

.cloud-opacity-control input[type="range"] {
    width: 100%;
    height: 6px;
    -webkit-appearance: none;
    appearance: none;
    background: var(--bg-secondary);
    border-radius: 3px;
    cursor: pointer;
}

.cloud-opacity-control input[type="range"]::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 16px;
    height: 16px;
    background: var(--primary-color);
    border-radius: 50%;
    cursor: pointer;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}

.cloud-opacity-control input[type="range"]::-moz-range-thumb {
    width: 16px;
    height: 16px;
    background: var(--primary-color);
    border-radius: 50%;
    cursor: pointer;
    border: none;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}

/* Timelapse controls */
.cloud-timelapse-control {
    margin: 10px 0;
    padding: 8px;
    background: var(--bg-secondary);
    border-radius: 8px;
}

.timelapse-row {
    display: flex;
    align-items: center;
    gap: 8px;
}

.btn-play {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    border: none;
    background: var(--primary-color);
    color: #fff;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    flex-shrink: 0;
    transition: background 0.2s, transform 0.15s;
}

.btn-play:hover {
    background: var(--primary-hover);
    transform: scale(1.1);
}

.btn-play.playing {
    background: #ff5722;
}

.timelapse-slider {
    flex: 1;
    height: 4px;
    -webkit-appearance: none;
    appearance: none;
    background: var(--bg-tertiary, #444);
    border-radius: 2px;
    cursor: pointer;
}

.timelapse-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 14px;
    height: 14px;
    background: var(--primary-color);
    border-radius: 50%;
    cursor: pointer;
}

.timelapse-slider::-moz-range-thumb {
    width: 14px;
    height: 14px;
    background: var(--primary-color);
    border-radius: 50%;
    cursor: pointer;
    border: none;
}

.timelapse-slider:disabled {
    opacity: 0.5;
    cursor: default;
}

.timelapse-time {
    font-size: 11px;
    color: var(--text-secondary);
    white-space: nowrap;
    min-width: 65px;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.timelapse-speed-row {
    display: flex;
    align-items: center;
    gap: 4px;
    margin-top: 6px;
    font-size: 11px;
    color: var(--text-secondary);
}

.speed-btn {
    padding: 2px 8px;
    border-radius: 4px;
    border: 1px solid var(--border-color);
    background: transparent;
    color: var(--text-secondary);
    cursor: pointer;
    font-size: 11px;
    transition: all 0.15s;
}

.speed-btn.active {
    background: var(--primary-color);
    color: #fff;
    border-color: var(--primary-color);
}

.speed-btn:hover:not(.active) {
    background: var(--bg-tertiary, #444);
}

/* Cloud extra controls (temp toggle) */
.cloud-extra-controls {
    margin: 8px 0;
}

/* Storm Mode button */
.cloud-storm-control {
    margin: 8px 0;
}

.btn-storm {
    width: 100%;
    padding: 8px 12px;
    border: 2px solid #ff9800;
    border-radius: 8px;
    background: linear-gradient(135deg, rgba(255, 152, 0, 0.1), rgba(255, 87, 34, 0.1));
    color: #ff9800;
    cursor: pointer;
    font-weight: 600;
    font-size: 13px;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    transition: all 0.2s;
}

.btn-storm:hover {
    background: linear-gradient(135deg, rgba(255, 152, 0, 0.2), rgba(255, 87, 34, 0.2));
    transform: translateY(-1px);
    box-shadow: 0 2px 8px rgba(255, 152, 0, 0.3);
}

.btn-storm.active {
    background: linear-gradient(135deg, #ff9800, #ff5722);
    color: #fff;
    border-color: transparent;
    box-shadow: 0 2px 12px rgba(255, 87, 34, 0.4);
}

.btn-storm .fa-bolt {
    font-size: 14px;
}

/* Cloud timestamp */
.cloud-timestamp {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    font-size: 12px;
    color: var(--text-secondary);
    padding: 6px 12px;
    background: linear-gradient(135deg, rgba(0, 123, 255, 0.08), rgba(0, 123, 255, 0.03));
    border-radius: 6px;
    margin-top: 6px;
}

/* LIVE badge */
.badge-live {
    font-size: 9px;
    font-weight: 700;
    background: #4CAF50;
    color: #fff;
    padding: 1px 5px;
    border-radius: 3px;
    animation: pulse-live 2s infinite;
    margin-left: 6px;
}

@keyframes pulse-live {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.5; }
}

/* Cloud-top temperature popup */
.cloud-temp-popup .maplibregl-popup-content {
    background: var(--bg-primary, #1e1e2e);
    border: 1px solid var(--border-color, #333);
    border-radius: 10px;
    padding: 12px;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
    color: var(--text-primary, #eee);
}

.cloud-temp-popup .maplibregl-popup-tip {
    border-top-color: var(--bg-primary, #1e1e2e);
}

.cloud-temp-title {
    font-weight: 600;
    font-size: 14px;
    margin-bottom: 8px;
    display: flex;
    align-items: center;
    gap: 6px;
}

.cloud-temp-grid {
    display: grid;
    grid-template-columns: auto auto;
    gap: 4px 12px;
    font-size: 12px;
}

.cloud-temp-label {
    color: var(--text-secondary, #aaa);
}

.cloud-temp-value {
    font-weight: 600;
    text-align: right;
}

.cloud-temp-detail {
    font-size: 12px;
    color: var(--text-secondary, #aaa);
}

.cloud-temp-loading {
    text-align: center;
    padding: 8px;
    color: var(--text-secondary, #aaa);
}

.satellite-opacity-control {
    margin: 12px 0;
}

.satellite-opacity-control label {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 13px;
    margin-bottom: 6px;
}

.satellite-opacity-control input[type="range"] {
    width: 100%;
    height: 6px;
    -webkit-appearance: none;
    appearance: none;
    background: var(--bg-secondary);
    border-radius: 3px;
    cursor: pointer;
}

.satellite-opacity-control input[type="range"]::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 16px;
    height: 16px;
    background: var(--primary-color);
    border-radius: 50%;
    cursor: pointer;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
    transition: transform 0.15s ease;
}

.satellite-opacity-control input[type="range"]::-webkit-slider-thumb:hover {
    transform: scale(1.15);
}

.satellite-opacity-control input[type="range"]::-moz-range-thumb {
    width: 16px;
    height: 16px;
    background: var(--primary-color);
    border-radius: 50%;
    cursor: pointer;
    border: none;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}

.satellite-timestamp {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    font-size: 12px;
    color: var(--text-secondary);
    padding: 8px 12px;
    background: linear-gradient(135deg, rgba(0, 123, 255, 0.08), rgba(0, 123, 255, 0.03));
    border-radius: 6px;
    border: 1px solid rgba(0, 123, 255, 0.15);
    margin-top: 8px;
}

.satellite-timestamp i {
    color: var(--primary-color);
    font-size: 14px;
}

.satellite-timestamp span {
    font-family: 'Monaco', 'Consolas', monospace;
    font-weight: 500;
    letter-spacing: 0.5px;
}

/* Indicatori disponibilita satellite */
.satellite-unavailable {
    color: #dc3545;
    font-size: 11px;
    font-weight: 600;
}

.satellite-offset {
    color: #ffc107;
    font-size: 11px;
    font-weight: 500;
}

/* Satellite Sync Control - Toggle per sincronizzazione con radar */
.satellite-sync-control {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 12px;
    padding: 10px 12px;
    background: linear-gradient(135deg, rgba(156, 39, 176, 0.08), rgba(156, 39, 176, 0.03));
    border-radius: 6px;
    border: 1px solid rgba(156, 39, 176, 0.2);
}

.satellite-sync-control label {
    font-size: 12px;
    color: var(--text-secondary);
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 5px;
}

.satellite-sync-control label i {
    color: #9c27b0;
}

/* Sync Toggle Switch - versione compatta */
.sync-toggle-switch {
    position: relative;
    width: 36px;
    height: 20px;
    flex-shrink: 0;
    display: inline-block;
}

.sync-toggle-switch input {
    opacity: 0;
    width: 0;
    height: 0;
    position: absolute;
}

.sync-toggle-slider {
    position: absolute;
    cursor: pointer;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: rgba(120, 120, 128, 0.32);
    transition: background-color 0.25s cubic-bezier(0.4, 0, 0.2, 1);
    border-radius: 10px;
}

.sync-toggle-slider:before {
    position: absolute;
    content: "";
    height: 16px;
    width: 16px;
    left: 2px;
    bottom: 2px;
    background-color: white;
    transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
    border-radius: 50%;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}

.sync-toggle-switch input:checked + .sync-toggle-slider {
    background-color: #9c27b0;
}

.sync-toggle-switch input:checked + .sync-toggle-slider:before {
    transform: translateX(16px);
}

.sync-toggle-switch input:focus + .sync-toggle-slider {
    box-shadow: 0 0 0 3px rgba(156, 39, 176, 0.3);
}

/* Sync Status Indicator */
.sync-status {
    font-size: 10px;
    padding: 2px 6px;
    border-radius: 4px;
    margin-left: auto;
}

.sync-status.loading {
    background: rgba(33, 150, 243, 0.2);
    color: #2196F3;
}

.sync-status.synced {
    background: rgba(76, 175, 80, 0.2);
    color: #4CAF50;
}

.sync-status.error {
    background: rgba(244, 67, 54, 0.2);
    color: #f44336;
}

/* Beta Badge */
.beta-badge {
    font-size: 9px;
    font-weight: 600;
    background: linear-gradient(135deg, #ff6b35, #f7931e);
    color: white;
    padding: 1px 4px;
    border-radius: 3px;
    margin-left: 4px;
    vertical-align: middle;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

/* Toggle disabilitato */
.sync-toggle-switch input:disabled + .sync-toggle-slider {
    background-color: #555;
    opacity: 0.5;
    cursor: not-allowed;
}

.satellite-sync-control:has(input:disabled) label {
    opacity: 0.6;
    cursor: not-allowed;
}

/* Indicatore immagine sintetica */
.synthetic-indicator {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 10px;
    color: #9c27b0;
    margin-left: 8px;
}

.synthetic-indicator i {
    font-size: 10px;
}

/* Indicatore satellite attivo nella mappa */
.satellite-active-indicator {
    position: absolute;
    top: 10px;
    right: 10px;
    background: rgba(0, 0, 0, 0.7);
    color: white;
    padding: 6px 12px;
    border-radius: 4px;
    font-size: 11px;
    display: flex;
    align-items: center;
    gap: 6px;
    z-index: 100;
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
}

.satellite-active-indicator i {
    color: #00d4ff;
    animation: satellite-pulse 2s ease-in-out infinite;
}

@keyframes satellite-pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.5; }
}

/* Stile per le option con icone emoji */
.satellite-options select option[value*="hrv"],
.satellite-options select option[value*="vis"],
.satellite-options select option[value*="natural"],
.satellite-options select option[value*="daymicrophysics"],
.satellite-options select option[value*="snow"],
.satellite-options select option[value*="truecolor"] {
    color: #f39c12;
}

.satellite-options select option[value*="li:"],
.satellite-options select option[value*="lightning"] {
    color: #9b59b6;
}

.satellite-options select option[value*="fire"] {
    color: #e74c3c;
}

/* ===== Lightning Layer Styles ===== */
.lightning-options {
    padding: 12px;
    background: linear-gradient(135deg, rgba(255, 204, 0, 0.1) 0%, rgba(255, 102, 0, 0.1) 100%);
    border-radius: 8px;
    margin-top: 10px;
    border: 1px solid rgba(255, 204, 0, 0.3);
}

.lightning-stats {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 14px;
    font-weight: 600;
    color: var(--text-primary);
    margin-bottom: 8px;
}

.lightning-stats i {
    font-size: 16px;
    animation: lightning-pulse 2s ease-in-out infinite;
}

@keyframes lightning-pulse {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: 0.6; transform: scale(1.2); }
}

#lightningCount {
    font-size: 18px;
    font-weight: 700;
    color: #ff9900;
}

#lightningCount.flash-update {
    animation: flash-count-update 0.6s ease-out;
}

@keyframes flash-count-update {
    0% { transform: scale(1.4); color: #ffffff; }
    50% { transform: scale(1.1); color: #ffdd44; }
    100% { transform: scale(1); color: #ff9900; }
}

/* Lightning freshness indicator */
.lightning-freshness {
    display: inline-block;
    font-size: 11px;
    font-weight: 600;
    padding: 2px 8px;
    border-radius: 10px;
    margin-left: 6px;
    vertical-align: middle;
}

.lightning-freshness.fresh-green {
    background: rgba(76, 175, 80, 0.2);
    color: #4CAF50;
    border: 1px solid rgba(76, 175, 80, 0.4);
}

.lightning-freshness.fresh-yellow {
    background: rgba(255, 193, 7, 0.2);
    color: #FFC107;
    border: 1px solid rgba(255, 193, 7, 0.4);
}

.lightning-freshness.fresh-red {
    background: rgba(244, 67, 54, 0.2);
    color: #F44336;
    border: 1px solid rgba(244, 67, 54, 0.4);
}

/* Lightning live info — compact bar above legend */
.lightning-live-info {
    position: fixed;
    bottom: 42px;
    right: 8px;
    z-index: 961;
    display: flex;
    align-items: center;
    gap: 5px;
    font-size: 12px;
    font-weight: 600;
    color: #fff;
    text-shadow: 0 1px 3px rgba(0,0,0,0.9), 0 0 6px rgba(0,0,0,0.5);
    pointer-events: none;
    white-space: nowrap;
}

.lightning-live-info i {
    color: #7DF0FF;
    animation: lightning-pulse 2s ease-in-out infinite;
}

.lightning-time-range {
    font-size: 10px;
    opacity: 0.65;
}

/* Lightning popup */
.lightning-popup {
    font-size: 12px;
    line-height: 1.5;
}

.lightning-popup strong {
    color: #ff9900;
}

/* =============================================================================
   SATELLITE LOADING INDICATOR
   ============================================================================= */

.satellite-loading-indicator {
    position: absolute;
    bottom: 90px;
    right: 20px;
    background: rgba(0, 0, 0, 0.75);
    color: white;
    padding: 10px 18px;
    border-radius: 24px;
    font-size: 13px;
    display: none;
    align-items: center;
    gap: 10px;
    z-index: 500;
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}

.satellite-loading-indicator.visible {
    display: flex;
}

.satellite-loading-spinner {
    width: 16px;
    height: 16px;
    border: 2px solid rgba(255, 255, 255, 0.3);
    border-top-color: white;
    border-radius: 50%;
    animation: spin 0.8s linear infinite;
}

/* =============================================================================
   RADAR LAYER CONTROLS
   ============================================================================= */

.radar-options {
    margin-top: 10px;
    padding: 10px;
    background: var(--bg-secondary);
    border-radius: 6px;
    border: 1px solid var(--border-color);
}

.radar-opacity-control {
    margin-bottom: 8px;
}

.radar-opacity-control label {
    display: flex;
    justify-content: space-between;
    font-size: 12px;
    color: var(--text-secondary);
    margin-bottom: 4px;
}

.radar-timestamp {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    color: var(--text-secondary);
}

.radar-timestamp i {
    color: var(--primary-color);
}

.radar-unavailable {
    color: #f44336;
    font-size: 11px;
    font-weight: 500;
}

.radar-offset {
    font-size: 11px;
    font-weight: 500;
}

.radar-offset-green {
    color: #4caf50;
}

.radar-offset-yellow {
    color: #ff9800;
}

.radar-offset-red {
    color: #f44336;
}

/* Radar Partial Badge (DPC-only frame) */
.radar-partial-badge {
    display: inline-block;
    font-size: 10px;
    font-weight: 600;
    color: #fff;
    background: #d97706;
    padding: 1px 6px;
    border-radius: 8px;
    margin-left: 6px;
    vertical-align: middle;
    animation: radar-partial-pulse 2s ease-in-out infinite;
}
@keyframes radar-partial-pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.6; }
}

/* Radar Loading Indicator */
.radar-loading-indicator {
    position: absolute;
    bottom: 90px;
    left: 20px;
    background: rgba(0, 80, 0, 0.85);
    color: white;
    padding: 10px 18px;
    border-radius: 24px;
    font-size: 13px;
    display: none;
    align-items: center;
    gap: 10px;
    z-index: 500;
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}

.radar-loading-indicator.visible {
    display: flex;
}

.radar-loading-spinner {
    width: 16px;
    height: 16px;
    border: 2px solid rgba(255, 255, 255, 0.3);
    border-top-color: #4caf50;
    border-radius: 50%;
    animation: spin 0.8s linear infinite;
}

/* =============================================================================
   ANIMATION CONTROLS
   ============================================================================= */

/* Animation Toggle */
.animation-toggle-wrapper {
    flex-shrink: 0;
    margin-right: 8px;
}

.animation-toggle {
    display: flex;
    align-items: center;
    gap: 6px;
    cursor: pointer;
    padding: 6px 10px;
    background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
    border-radius: 16px;
    border: 1px solid #dee2e6;
    transition: all 0.2s ease;
    user-select: none;
}

.animation-toggle:hover {
    background: linear-gradient(135deg, #e9ecef 0%, #dee2e6 100%);
    border-color: #ced4da;
}

.animation-toggle input {
    display: none;
}

.animation-toggle .animation-toggle-slider {
    width: 32px;
    height: 18px;
    background: #adb5bd;
    border-radius: 9px;
    position: relative;
    transition: all 0.3s ease;
}

.animation-toggle .animation-toggle-slider::after {
    content: '';
    position: absolute;
    width: 14px;
    height: 14px;
    background: white;
    border-radius: 50%;
    top: 2px;
    left: 2px;
    transition: all 0.3s ease;
    box-shadow: 0 1px 3px rgba(0,0,0,0.2);
}

.animation-toggle input:checked + .animation-toggle-slider {
    background: linear-gradient(135deg, #2196F3 0%, #1976D2 100%);
}

.animation-toggle input:checked + .animation-toggle-slider::after {
    left: 16px;
}

.animation-toggle i {
    color: #6c757d;
    font-size: 13px;
    transition: color 0.2s;
}

.animation-toggle input:checked ~ i {
    color: #2196F3;
}

/* Animation Controls Container */
.animation-controls {
    display: none;
    align-items: center;
    gap: 8px;
    padding: 6px 12px;
    background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%);
    border-radius: 18px;
    border: 1px solid #90caf9;
    flex-shrink: 0;
    box-shadow: 0 2px 8px rgba(33, 150, 243, 0.15);
}

.animation-controls.active {
    display: flex;
}

/* Animation Buttons */
.anim-btn {
    width: 34px;
    height: 34px;
    border-radius: 50%;
    border: none;
    background: linear-gradient(135deg, #2196F3 0%, #1976D2 100%);
    color: white;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    box-shadow: 0 2px 6px rgba(33, 150, 243, 0.4);
    transition: all 0.2s ease;
}

.anim-btn:hover {
    transform: scale(1.08);
    box-shadow: 0 4px 12px rgba(33, 150, 243, 0.5);
}

.anim-btn:active {
    transform: scale(0.95);
}

.anim-btn.playing {
    background: linear-gradient(135deg, #f44336 0%, #d32f2f 100%);
    box-shadow: 0 2px 6px rgba(244, 67, 54, 0.4);
}

.anim-btn.playing:hover {
    box-shadow: 0 4px 12px rgba(244, 67, 54, 0.5);
}

.anim-btn-sm {
    width: 28px;
    height: 28px;
    font-size: 11px;
    background: linear-gradient(135deg, #64b5f6 0%, #42a5f5 100%);
    box-shadow: 0 2px 4px rgba(66, 165, 245, 0.3);
}

.anim-btn-sm.active {
    background: linear-gradient(135deg, #4caf50 0%, #388e3c 100%);
    box-shadow: 0 2px 4px rgba(76, 175, 80, 0.3);
}

/* Frame Indicator */
.anim-frame-indicator {
    font-size: 11px;
    font-weight: 600;
    color: #1565c0;
    min-width: 48px;
    text-align: center;
    background: rgba(255,255,255,0.7);
    padding: 3px 8px;
    border-radius: 10px;
}

/* Progress Bar */
.anim-progress-wrapper {
    position: relative;
    width: 100px;
    height: 22px;
    flex-shrink: 0;
}

.anim-progress-bar {
    position: absolute;
    left: 0;
    top: 9px;
    height: 4px;
    background: linear-gradient(90deg, #2196F3, #64b5f6);
    border-radius: 2px;
    width: 0%;
    transition: width 0.1s linear;
    pointer-events: none;
}

.anim-frame-slider {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 22px;
    -webkit-appearance: none;
    appearance: none;
    background: transparent;
    cursor: pointer;
}

.anim-frame-slider::-webkit-slider-track {
    height: 4px;
    background: rgba(0,0,0,0.1);
    border-radius: 2px;
}

.anim-frame-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 14px;
    height: 14px;
    background: #1976D2;
    border-radius: 50%;
    margin-top: -5px;
    box-shadow: 0 1px 4px rgba(0,0,0,0.3);
    cursor: grab;
}

.anim-frame-slider::-webkit-slider-thumb:active {
    cursor: grabbing;
    transform: scale(1.1);
}

.anim-frame-slider::-moz-range-track {
    height: 4px;
    background: rgba(0,0,0,0.1);
    border-radius: 2px;
}

.anim-frame-slider::-moz-range-thumb {
    width: 14px;
    height: 14px;
    background: #1976D2;
    border-radius: 50%;
    border: none;
    box-shadow: 0 1px 4px rgba(0,0,0,0.3);
    cursor: grab;
}

/* Timestamp Display */
.anim-timestamp {
    font-size: 11px;
    font-weight: 600;
    color: #1565c0;
    min-width: 80px;
    text-align: center;
    background: rgba(255,255,255,0.8);
    padding: 3px 8px;
    border-radius: 10px;
}

/* Speed Control */
.anim-speed-control {
    display: flex;
    align-items: center;
    gap: 4px;
    padding-left: 8px;
    border-left: 1px solid rgba(25, 118, 210, 0.2);
}

.anim-speed-control i {
    color: #1976D2;
    font-size: 11px;
}

.anim-speed-slider {
    width: 50px;
    height: 4px;
    -webkit-appearance: none;
    background: rgba(0,0,0,0.1);
    border-radius: 2px;
    cursor: pointer;
}

.anim-speed-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 12px;
    height: 12px;
    background: #1976D2;
    border-radius: 50%;
    cursor: pointer;
}

.anim-speed-slider::-moz-range-thumb {
    width: 12px;
    height: 12px;
    background: #1976D2;
    border-radius: 50%;
    border: none;
    cursor: pointer;
}

.anim-speed-value {
    font-size: 10px;
    font-weight: 600;
    color: #1565c0;
    min-width: 22px;
}

/* Limit Indicator */
.anim-limit-indicator {
    font-size: 9px;
    color: #6c757d;
    padding: 3px 8px;
    background: rgba(255,255,255,0.7);
    border-radius: 10px;
    white-space: nowrap;
}

.anim-limit-indicator.admin {
    color: #4caf50;
    background: rgba(76, 175, 80, 0.1);
    border: 1px solid rgba(76, 175, 80, 0.3);
}

/* Responsive Animation Controls */
@media (max-width: 1200px) {
    .animation-controls {
        flex-wrap: wrap;
        padding: 8px 10px;
        gap: 6px;
    }

    .anim-progress-wrapper {
        width: 80px;
    }

    .anim-timestamp {
        min-width: 70px;
    }
}

@media (max-width: 900px) {
    .animation-controls {
        order: -1;
        width: 100%;
        justify-content: center;
        margin-bottom: 8px;
    }

    .anim-limit-indicator {
        display: none;
    }

    .anim-speed-control {
        border-left: none;
        padding-left: 0;
    }
}

@media (max-width: 600px) {
    .animation-toggle-wrapper {
        margin-right: 4px;
    }

    .animation-toggle {
        padding: 4px 8px;
    }

    .animation-controls {
        padding: 6px 8px;
        gap: 4px;
    }

    .anim-btn {
        width: 30px;
        height: 30px;
        font-size: 12px;
    }

    .anim-btn-sm {
        width: 24px;
        height: 24px;
        font-size: 10px;
    }

    .anim-progress-wrapper {
        width: 60px;
    }

    .anim-frame-indicator,
    .anim-timestamp {
        font-size: 10px;
        padding: 2px 6px;
    }

    .anim-speed-control {
        display: none;
    }
}

/* =============================================================================
   STATION DETAIL SIDEBAR
   ============================================================================= */

.station-detail-sidebar {
    position: fixed;
    top: 0;
    right: 0;
    width: 720px;
    max-width: 95vw;
    height: 100vh;
    background: var(--bg-primary);
    box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);
    z-index: 2000;
    display: flex;
    flex-direction: column;
    transform: translateX(100%);
    transition: transform 0.3s ease;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}

.station-detail-sidebar.open {
    transform: translateX(0);
}

/* Hero Section */
.sidebar-hero {
    position: relative;
    padding: 20px;
    background: linear-gradient(135deg, #1976d2, #1565c0);
    color: white;
    flex-shrink: 0;
}
.hero-top-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 6px;
}
.hero-station-name {
    font-size: 18px;
    font-weight: 700;
    margin: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    flex: 1;
    margin-right: 12px;
}
.sidebar-close-btn {
    background: rgba(255, 255, 255, 0.2);
    border: none;
    color: white;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.2s;
    flex-shrink: 0;
}
.sidebar-close-btn:hover {
    background: rgba(255, 255, 255, 0.3);
}
.hero-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 12px;
    font-size: 12px;
    opacity: 0.9;
    margin-bottom: 12px;
}
.hero-meta-item {
    display: flex;
    align-items: center;
    gap: 4px;
}
.hero-qc-badge {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 10px;
    font-size: 11px;
    font-weight: 600;
}
.qc-tier1 { background: rgba(76, 175, 80, 0.3); }
.qc-tier2 { background: rgba(255, 193, 7, 0.3); }
.qc-tier3 { background: rgba(255, 255, 255, 0.2); }
.hero-condition {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-top: 4px;
    flex-wrap: wrap;
}
.hero-weather-icon {
    flex-shrink: 0;
    width: 56px;
    height: 56px;
}
.hero-main-value {
    display: flex;
    align-items: baseline;
    gap: 6px;
}
.hero-weather-label {
    width: 100%;
    font-size: 13px;
    opacity: 0.8;
    margin-top: -4px;
    font-weight: 500;
}
.hero-icon { font-size: 28px; }
.hero-value {
    font-size: 42px;
    font-weight: 300;
    letter-spacing: -1px;
    line-height: 1;
}
.hero-unit {
    font-size: 18px;
    opacity: 0.85;
}
.hero-no-data {
    font-size: 14px;
    opacity: 0.7;
    margin-top: 8px;
}

/* Weather Icon Animations */
.wi-sun-rays { animation: wi-rotate 20s linear infinite; transform-origin: 28px 28px; }
.weather-icon--few_clouds .wi-sun-rays { transform-origin: 22px 20px; }
@keyframes wi-rotate { to { transform: rotate(360deg); } }

.wi-drop { animation: wi-fall 1.5s ease-in infinite; }
.wi-drop-1 { animation-delay: 0s; }
.wi-drop-2 { animation-delay: 0.3s; }
.wi-drop-3 { animation-delay: 0.6s; }
.wi-drop-4 { animation-delay: 0.15s; }
.wi-drop-5 { animation-delay: 0.45s; }
@keyframes wi-fall {
    0% { opacity: 0; transform: translateY(-4px); }
    20% { opacity: 1; }
    100% { opacity: 0; transform: translateY(6px); }
}

.wi-flake { animation: wi-snow 2s ease-in-out infinite; }
.wi-flake-1 { animation-delay: 0s; }
.wi-flake-2 { animation-delay: 0.5s; }
.wi-flake-3 { animation-delay: 1s; }
.wi-flake-4 { animation-delay: 0.3s; }
.wi-flake-5 { animation-delay: 0.8s; }
@keyframes wi-snow {
    0% { opacity: 0; transform: translateY(-4px) translateX(0); }
    50% { opacity: 1; transform: translateY(2px) translateX(3px); }
    100% { opacity: 0; transform: translateY(6px) translateX(-2px); }
}

.wi-fog-line { animation: wi-fog-pulse 3s ease-in-out infinite; }
.wi-fog-1 { animation-delay: 0s; }
.wi-fog-2 { animation-delay: 0.5s; }
.wi-fog-3 { animation-delay: 1s; }
.wi-fog-4 { animation-delay: 1.5s; }
@keyframes wi-fog-pulse {
    0%, 100% { opacity: 0.4; }
    50% { opacity: 0.9; }
}

.wi-wind-line { animation: wi-wind-flow 2s ease-in-out infinite; }
.wi-wind-1 { animation-delay: 0s; }
.wi-wind-2 { animation-delay: 0.4s; }
.wi-wind-3 { animation-delay: 0.8s; }
@keyframes wi-wind-flow {
    0% { stroke-dasharray: 0 60; stroke-dashoffset: 0; opacity: 0.3; }
    50% { stroke-dasharray: 40 20; opacity: 1; }
    100% { stroke-dasharray: 0 60; stroke-dashoffset: -60; opacity: 0.3; }
}

/* Lightning bolt flash animation */
.wi-bolt { animation: wi-bolt-pulse 2.5s ease-in-out infinite; }
@keyframes wi-bolt-pulse {
    0%, 70%, 100% { opacity: 1; }
    75% { opacity: 0.2; }
    85% { opacity: 0.15; }
}

/* Freezing rain ice crystal pulse */
.wi-ice { animation: wi-ice-pulse 2s ease-in-out infinite; }
@keyframes wi-ice-pulse {
    0%, 100% { opacity: 0.6; transform: scale(1); }
    50% { opacity: 1; transform: scale(1.15); }
}

/* Hero weather icon crossfade for enrichment */
.hero-weather-icon { transition: opacity 0.2s ease; }
.hero-weather-icon--fading { opacity: 0; }

.hero-actions {
    position: absolute;
    bottom: 16px;
    right: 20px;
    display: flex;
    gap: 8px;
}
.hero-action-btn {
    background: rgba(255, 255, 255, 0.2);
    border: none;
    color: white;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    transition: background 0.2s;
}
.hero-action-btn:hover {
    background: rgba(255, 255, 255, 0.35);
}
.hero-action-btn.active {
    background: rgba(255, 255, 255, 0.4);
}
.hero-action-btn.push-active {
    color: #ffd600;
    background: rgba(255, 214, 0, 0.25);
}

/* Derived Conditions (feels-like, dew point, sunrise/sunset) */
.derived-conditions-section {
    padding: 0 !important;
}
.derived-conditions-grid {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    padding: 12px 20px;
}
.derived-card {
    display: flex;
    align-items: center;
    gap: 8px;
    background: var(--bg-secondary, #f8f9fa);
    border-radius: 10px;
    padding: 10px 12px;
    border: 1px solid var(--border-color, #e0e0e0);
    flex: 1 1 140px;
    min-width: 0;
}
.derived-card--wide {
    flex: 1 1 100%;
}
.derived-card-icon {
    flex-shrink: 0;
    width: 28px;
    height: 28px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px;
    background: var(--bg-tertiary, #e9ecef);
    color: var(--text-secondary, #64748b);
    font-size: 13px;
}
.derived-card--feels-like .derived-card-icon { color: #f59e0b; background: rgba(245,158,11,0.12); }
.derived-card--dew-point .derived-card-icon { color: #3b82f6; background: rgba(59,130,246,0.12); }
.derived-card--sun .derived-card-icon { color: #f59e0b; background: rgba(245,158,11,0.12); }
.derived-card-body {
    flex: 1;
    min-width: 0;
}
.derived-card-label {
    font-size: 11px;
    color: var(--text-secondary, #64748b);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    line-height: 1;
}
.derived-card-value {
    font-size: 18px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--text-primary, #1e293b);
}
.derived-card-diff {
    font-size: 12px;
    font-weight: 500;
    color: var(--text-secondary, #64748b);
    margin-left: 2px;
}
.derived-card-tag {
    display: inline-block;
    font-size: 10px;
    font-weight: 600;
    padding: 1px 6px;
    border-radius: 4px;
    margin-top: 2px;
    line-height: 1.4;
}
.derived-card-tag.fl-cold { background: #dbeafe; color: #1e40af; }
.derived-card-tag.fl-cool { background: #e0f2fe; color: #0369a1; }
.derived-card-tag.fl-neutral { background: #f0fdf4; color: #166534; }
.derived-card-tag.fl-warm { background: #fef3c7; color: #92400e; }
.derived-card-tag.fl-hot { background: #fee2e2; color: #991b1b; }
.derived-card-tag.dp-dry { background: #f0fdf4; color: #166534; }
.derived-card-tag.dp-comfort { background: #dbeafe; color: #1e40af; }
.derived-card-tag.dp-humid { background: #fef3c7; color: #92400e; }
.derived-card-tag.dp-oppressive { background: #fee2e2; color: #991b1b; }

/* Sunrise/Sunset row */
.derived-sun-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 6px;
    font-size: 14px;
    font-weight: 600;
    color: var(--text-primary, #1e293b);
}
.derived-sun-time {
    white-space: nowrap;
}
.derived-sun-time i { font-size: 10px; margin-right: 2px; }
.derived-sun-length {
    font-size: 11px;
    font-weight: 500;
    color: var(--text-secondary, #64748b);
}
.derived-sun-progress {
    margin-top: 6px;
}
.derived-sun-bar {
    position: relative;
    height: 4px;
    border-radius: 2px;
    background: var(--border-color, #e0e0e0);
    overflow: visible;
}
.derived-sun-fill {
    height: 100%;
    border-radius: 2px;
    background: linear-gradient(90deg, #f59e0b, #fbbf24, #ef4444);
}
.derived-sun-dot {
    position: absolute;
    top: 50%;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: #fbbf24;
    border: 2px solid #fff;
    box-shadow: 0 0 4px rgba(251,191,36,0.5);
    transform: translate(-50%, -50%);
}
.derived-sun-label {
    font-size: 11px;
    color: var(--text-secondary, #64748b);
    margin-top: 4px;
    text-align: center;
}

/* Dark mode derived conditions */
[data-theme="dark"] .derived-card-tag.fl-cold { background: rgba(59,130,246,0.2); color: #93c5fd; }
[data-theme="dark"] .derived-card-tag.fl-cool { background: rgba(14,165,233,0.2); color: #7dd3fc; }
[data-theme="dark"] .derived-card-tag.fl-neutral { background: rgba(34,197,94,0.2); color: #86efac; }
[data-theme="dark"] .derived-card-tag.fl-warm { background: rgba(245,158,11,0.2); color: #fcd34d; }
[data-theme="dark"] .derived-card-tag.fl-hot { background: rgba(239,68,68,0.2); color: #fca5a5; }
[data-theme="dark"] .derived-card-tag.dp-dry { background: rgba(34,197,94,0.2); color: #86efac; }
[data-theme="dark"] .derived-card-tag.dp-comfort { background: rgba(59,130,246,0.2); color: #93c5fd; }
[data-theme="dark"] .derived-card-tag.dp-humid { background: rgba(245,158,11,0.2); color: #fcd34d; }
[data-theme="dark"] .derived-card-tag.dp-oppressive { background: rgba(239,68,68,0.2); color: #fca5a5; }
[data-theme="dark"] .derived-sun-dot { border-color: var(--bg-primary, #1e1e2e); }
[data-theme="dark"] .ft-night { background: rgba(15,23,42,0.3); }

/* Metric Cards */
.metric-cards-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
    gap: 10px;
    padding: 16px 20px;
}
.metric-card {
    background: var(--bg-secondary, #f8f9fa);
    border-radius: 10px;
    padding: 12px;
    border: 1px solid var(--border-color, #e0e0e0);
}
.metric-card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 4px;
}
.metric-card-label {
    font-size: 11px;
    color: var(--text-secondary, #666);
    text-transform: uppercase;
    letter-spacing: 0.3px;
    font-weight: 600;
}
.metric-trend {
    font-size: 10px;
    font-weight: 700;
}
.trend-up { color: #ef4444; }
.trend-down { color: #3b82f6; }
.trend-stable { color: #9ca3af; }
.metric-val {
    font-size: 24px;
    font-weight: 600;
    color: var(--text-primary, #1a1a2e);
    line-height: 1.1;
}
.metric-unit {
    font-size: 12px;
    font-weight: 400;
    color: var(--text-secondary, #666);
    margin-left: 2px;
}
.metric-card-actions {
    display: flex;
    align-items: center;
    gap: 6px;
}
.metric-expand-btn {
    background: none;
    border: none;
    cursor: pointer;
    padding: 2px 4px;
    font-size: 10px;
    color: var(--text-secondary, #999);
    opacity: 0.5;
    transition: opacity 0.15s, color 0.15s;
    border-radius: 4px;
}
.metric-expand-btn:hover {
    opacity: 1;
    color: var(--primary, #1a73e8);
}
.metric-card--expanded .metric-expand-btn {
    opacity: 1;
    color: var(--primary, #1a73e8);
}
.metric-card-spark {
    height: 32px;
    margin-top: 6px;
}
.metric-card--expanded {
    grid-column: 1 / -1;
}
.metric-inline-chart {
    margin-top: 8px;
    border-radius: 6px;
    overflow: hidden;
}
.metric-inline-chart canvas {
    display: block;
    width: 100%;
    border-radius: 6px;
}
.metric-chart-loading, .metric-chart-empty {
    text-align: center;
    padding: 20px 0;
    font-size: 12px;
    color: var(--text-secondary, #999);
}
/* Wind Rose Metric Card */
.metric-card--wind {
    grid-column: span 2;
}
.metric-wind-body {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-top: 2px;
}
.metric-wind-rose {
    flex-shrink: 0;
    width: 70px;
    height: 70px;
}
.wind-rose-canvas { display: block; }
.metric-wind-info {
    flex: 1;
    min-width: 0;
}
.metric-wind-dir {
    display: flex;
    align-items: baseline;
    gap: 4px;
    margin-top: 2px;
}
.metric-wind-dir-label {
    font-size: 14px;
    font-weight: 700;
    color: var(--text-primary, #1a1a2e);
}
.metric-wind-dir-deg {
    font-size: 11px;
    color: var(--text-secondary, #666);
}

/* Forecast Mini Timeline */
.forecast-timeline-scroll {
    display: flex;
    overflow-x: auto;
    gap: 0;
    padding: 6px 16px 10px;
    scrollbar-width: thin;
    scroll-behavior: smooth;
    -webkit-overflow-scrolling: touch;
}
.forecast-timeline-scroll::-webkit-scrollbar { height: 3px; }
.forecast-timeline-scroll::-webkit-scrollbar-track { background: transparent; }
.forecast-timeline-scroll::-webkit-scrollbar-thumb { background: var(--border-color, #e0e0e0); border-radius: 2px; }
.ft-hour {
    flex: 0 0 38px;
    text-align: center;
    padding: 2px 0;
    position: relative;
}
.ft-night {
    background: rgba(15,23,42,0.08);
    border-radius: 6px;
}
.ft-day {
    font-size: 8px;
    font-weight: 700;
    text-transform: uppercase;
    color: var(--text-secondary, #64748b);
    letter-spacing: 0.3px;
    margin-bottom: 1px;
}
.ft-time {
    font-size: 10px;
    font-weight: 600;
    color: var(--text-secondary, #64748b);
}
.ft-icon-wrap {
    position: relative;
    height: 26px;
    display: flex;
    align-items: center;
    justify-content: center;
}
.ft-icon {
    width: 22px;
    height: 22px;
}
.ft-prec-bar {
    position: absolute;
    right: 2px;
    bottom: 0;
    width: 4px;
    height: 18px;
    background: rgba(96,165,250,0.15);
    border-radius: 2px;
    overflow: hidden;
}
.ft-prec-fill {
    position: absolute;
    bottom: 0;
    width: 100%;
    background: #60a5fa;
    border-radius: 2px;
}
.ft-temp {
    font-size: 12px;
    font-weight: 700;
    color: var(--text-primary, #1e293b);
    margin-top: 1px;
}

/* Meteogram */
.meteogram-container {
    padding: 0 20px 8px;
}
.meteogram-container canvas {
    display: block;
    width: 100%;
    border-radius: 8px;
    background: var(--bg-secondary, #f8f9fa);
}

/* Nearby Stations */
.nearby-stations-list {
    padding: 0 20px;
}
.nearby-station-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 0;
    border-bottom: 1px solid var(--border-color, #e0e0e0);
    cursor: pointer;
    transition: background 0.15s;
}
.nearby-station-item:last-child { border-bottom: none; }
.nearby-station-item:hover {
    background: var(--bg-secondary, #f5f5f5);
    margin: 0 -20px;
    padding: 10px 20px;
}
.nearby-station-info {
    flex: 1;
    min-width: 0;
}
.nearby-name {
    font-size: 13px;
    font-weight: 500;
    color: var(--text-primary, #1a1a2e);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.nearby-detail {
    font-size: 11px;
    color: var(--text-secondary, #666);
    margin-top: 2px;
}
.nearby-arrow {
    color: var(--text-secondary, #999);
    font-size: 12px;
    margin-left: 8px;
    flex-shrink: 0;
}

.sources-content {
    font-size: 12px;
    color: var(--text-secondary, #666);
    line-height: 1.5;
}
.sources-content a {
    color: var(--primary, #1a73e8);
}

.sidebar-content {
    flex: 1;
    overflow-y: auto;
    padding: 0;
}

.sidebar-section {
    padding: 16px 0;
}

.sidebar-section h4 {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-secondary);
    margin: 0 20px 12px 20px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.sidebar-footer {
    padding: 16px 20px;
    background: #f8f9fa;
    border-top: 1px solid var(--border-color);
    flex-shrink: 0;
}

.btn-block {
    display: block;
    width: 100%;
    text-align: center;
}

/* =============================================================================
   PARAMETERS TABLE
   ============================================================================= */

.params-table-container {
    overflow-x: auto;
    overflow-y: visible;
    margin: 0;
    max-width: 100%;
}

.params-table {
    width: 100%;
    min-width: 650px;
    border-collapse: collapse;
    font-size: 11px;
    table-layout: auto;
}

.params-table th,
.params-table td {
    padding: 6px 8px;
    text-align: left;
    border-bottom: 1px solid #eee;
    white-space: nowrap;
}

.params-table th {
    background: #f5f7f9;
    font-weight: 600;
    color: #555;
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    position: sticky;
    top: 0;
    z-index: 1;
    cursor: pointer;
    user-select: none;
    transition: background 0.2s;
}

.params-table th:hover {
    background: #e8eaed;
}

.params-table th.sortable::after {
    content: ' ↕';
    opacity: 0.3;
    font-size: 9px;
}

.params-table th.sort-asc::after {
    content: ' ↑';
    opacity: 1;
    color: #1976d2;
}

.params-table th.sort-desc::after {
    content: ' ↓';
    opacity: 1;
    color: #1976d2;
}

.params-table tbody tr:hover {
    background: #f8fafc;
}

.params-table tbody tr:last-child td {
    border-bottom: none;
}

/* Parameter name column */
.param-name-cell {
    display: flex;
    align-items: center;
    gap: 8px;
    font-weight: 500;
}

.param-icon {
    font-size: 14px;
    width: 20px;
    text-align: center;
}

/* Value column */
.param-value {
    font-weight: 600;
    color: #1565c0;
}

.param-unit {
    font-weight: 400;
    color: #888;
    margin-left: 2px;
}

/* Aggregation type badge */
.agg-badge {
    display: inline-block;
    padding: 2px 6px;
    border-radius: 4px;
    font-size: 10px;
    font-weight: 500;
    text-transform: uppercase;
}

.agg-badge.inst { background: #e3f2fd; color: #1565c0; }
.agg-badge.avg { background: #fff3e0; color: #ef6c00; }
.agg-badge.max { background: #ffebee; color: #c62828; }
.agg-badge.min { background: #e8f5e9; color: #2e7d32; }
.agg-badge.acc { background: #f3e5f5; color: #7b1fa2; }
.agg-badge.sum { background: #fce4ec; color: #c2185b; }

/* Period column */
.period-cell {
    color: #666;
    font-size: 11px;
}

/* Level column */
.level-cell {
    color: #888;
    font-size: 11px;
}

/* Timestamp column */
.timestamp-cell {
    color: #666;
    font-size: 11px;
}

.timestamp-ago {
    color: #999;
    font-size: 10px;
}

/* =============================================================================
   SPARKLINE
   ============================================================================= */

.sparkline-cell {
    padding: 4px 8px !important;
}

.sparkline-container {
    width: 80px;
    height: 24px;
    position: relative;
}

.sparkline-canvas {
    width: 100%;
    height: 100%;
}

.sparkline-no-data {
    color: #ccc;
    font-size: 10px;
    font-style: italic;
}

/* =============================================================================
   SIDEBAR RESPONSIVE
   ============================================================================= */

@media (max-width: 800px) {
    .station-detail-sidebar {
        width: 100vw;
        max-width: 100vw;
    }

    .hero-value { font-size: 36px; }
    .hero-station-name { font-size: 16px; }

    .metric-cards-grid {
        grid-template-columns: repeat(2, 1fr);
        padding: 12px 16px;
    }
    .metric-val { font-size: 20px; }

    .params-table th,
    .params-table td {
        padding: 4px 6px;
        font-size: 11px;
    }

    .sparkline-container {
        width: 60px;
        height: 20px;
    }

    .meteogram-container { padding: 0 16px 8px; }
    .nearby-stations-list { padding: 0 16px; }
}

/* =============================================================================
   FORM VALIDATION ERRORS
   ============================================================================= */

/* Evidenziazione campi input con errore */
.field-error {
    border-color: #dc2626 !important;
    box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.2) !important;
    animation: shake 0.4s ease-in-out;
}

/* Evidenziazione checkbox con errore */
.checkbox-error {
    background: rgba(220, 38, 38, 0.08) !important;
    border-radius: 6px;
    padding: 8px !important;
    margin: -8px !important;
    border: 1px solid rgba(220, 38, 38, 0.3) !important;
    animation: shake 0.4s ease-in-out;
}

.checkbox-error label {
    color: #dc2626 !important;
}

/* Animazione shake per attirare l'attenzione */
@keyframes shake {
    0%, 100% { transform: translateX(0); }
    20% { transform: translateX(-6px); }
    40% { transform: translateX(6px); }
    60% { transform: translateX(-4px); }
    80% { transform: translateX(4px); }
}

/* =============================================================================
   LEGENDA VERTICALE GRADIENTE (STILE GRADIENTE VERTICALE)
   ============================================================================= */

.legend-vertical {
    position: absolute;
    right: 20px;
    top: 50%;
    transform: translateY(-50%);
    background: rgba(0, 0, 0, 0.75);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    border-radius: 12px;
    padding: 12px 10px;
    z-index: 500;
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    min-width: 50px;
    border: 1px solid rgba(255, 255, 255, 0.1);
    transition: opacity 0.3s ease, transform 0.3s ease;
}

.legend-vertical.hidden {
    opacity: 0;
    transform: translateY(-50%) translateX(20px);
    pointer-events: none;
}

/* Valore massimo in alto */
.legend-vertical .legend-value-max {
    color: white;
    font-size: 11px;
    font-weight: 600;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
    margin-bottom: 2px;
}

/* Barra gradiente verticale */
.legend-vertical .legend-gradient-bar {
    width: 16px;
    height: 200px;
    border-radius: 8px;
    box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.3), 0 2px 8px rgba(0, 0, 0, 0.2);
    border: 1px solid rgba(255, 255, 255, 0.2);
    position: relative;
}

/* Tacche laterali con valori */
.legend-vertical .legend-ticks {
    position: absolute;
    left: calc(100% + 6px);
    top: 0;
    bottom: 0;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    pointer-events: none;
}

.legend-vertical .legend-tick {
    color: rgba(255, 255, 255, 0.9);
    font-size: 9px;
    font-weight: 500;
    white-space: nowrap;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8);
    transform: translateY(-50%);
    display: flex;
    align-items: center;
    gap: 3px;
}

.legend-vertical .legend-tick::before {
    content: '';
    width: 4px;
    height: 1px;
    background: rgba(255, 255, 255, 0.5);
}

/* Valore minimo in basso */
.legend-vertical .legend-value-min {
    color: white;
    font-size: 11px;
    font-weight: 600;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
    margin-top: 2px;
}

/* Unità di misura */
.legend-vertical .legend-unit {
    color: rgba(255, 255, 255, 0.7);
    font-size: 10px;
    font-weight: 500;
    margin-top: 4px;
    padding-top: 6px;
    border-top: 1px solid rgba(255, 255, 255, 0.2);
}

/* Indicatori speciali sotto la barra */
.legend-vertical .legend-special {
    display: flex;
    flex-direction: column;
    gap: 4px;
    margin-top: 8px;
    padding-top: 8px;
    border-top: 1px solid rgba(255, 255, 255, 0.15);
    width: 100%;
}

.legend-vertical .legend-special-item {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 9px;
    color: rgba(255, 255, 255, 0.8);
}

.legend-vertical .legend-special-color {
    width: 12px;
    height: 12px;
    border-radius: 50%;
    border: 1px solid rgba(255, 255, 255, 0.3);
    flex-shrink: 0;
}

/* Gradienti per ogni parametro */
.legend-gradient-temperature {
    background: linear-gradient(to bottom,
        #8B0000 0%,      /* +45°C - Rosso scuro */
        #FF0000 13%,     /* +33°C - Rosso */
        #FFA500 27%,     /* +24°C - Arancione */
        #FFFF00 40%,     /* +18°C - Giallo */
        #32CD32 47%,     /* +12°C - Verde */
        #00FFFF 53%,     /* +6°C - Ciano */
        #87CEEB 60%,     /* 0°C - Azzurro */
        #0000FF 73%,     /* -12°C - Blu */
        #9400D3 87%,     /* -24°C - Viola */
        #800080 100%     /* -30°C - Viola scuro */
    );
}

.legend-gradient-humidity {
    background: linear-gradient(to bottom,
        #000080 0%,      /* 100% - Blu navy */
        #0000FF 20%,     /* 80% - Blu */
        #4169E1 35%,     /* 65% - Blu reale */
        #87CEEB 50%,     /* 50% - Azzurro */
        #FFFACD 65%,     /* 35% - Giallo chiaro */
        #DEB887 80%,     /* 20% - Beige */
        #8B4513 100%     /* 0% - Marrone */
    );
}

.legend-gradient-wind {
    /* Scala colori da colors_wind_10m.gs AROME-HD */
    background: linear-gradient(to bottom,
        #FF4BFF 0%,      /* 117 km/h - Magenta */
        #FF99FF 8%,      /* 102 km/h - Rosa */
        #A50000 17%,     /* 88 km/h - Rosso scuro */
        #FF4621 26%,     /* 75 km/h - Arancione/rosso */
        #FF9900 35%,     /* 62 km/h - Arancione */
        #FFBD12 44%,     /* 50 km/h - Giallo */
        #34AC2B 53%,     /* 39 km/h - Verde scuro */
        #54D557 62%,     /* 28 km/h - Verde */
        #A9E688 71%,     /* 19 km/h - Verde chiaro */
        #C2E1FF 80%,     /* 12 km/h - Celeste */
        #D6EBFF 89%,     /* 5 km/h - Celeste chiaro */
        #EAF5FF 95%,     /* 2 km/h - Celeste pallido */
        #FFFFFF 100%     /* 0 km/h - Bianco */
    );
}

.legend-gradient-precipitation {
    background: linear-gradient(to bottom,
        #4B0082 0%,      /* >50mm - Viola scuro */
        #8B00FF 15%,     /* 30mm - Viola */
        #FF0000 30%,     /* 20mm - Rosso */
        #FF6600 45%,     /* 10mm - Arancione */
        #FFFF00 60%,     /* 5mm - Giallo */
        #00FF00 75%,     /* 2mm - Verde */
        #90EE90 90%,     /* 0.5mm - Verde chiaro */
        #FFFFFF 100%     /* 0mm - Bianco */
    );
}

.legend-gradient-pressure {
    background: linear-gradient(to bottom,
        #FF0000 0%,      /* >1040 hPa - Rosso */
        #FFA500 20%,     /* 1030 hPa - Arancione */
        #FFFF00 35%,     /* 1020 hPa - Giallo */
        #90EE90 50%,     /* 1013 hPa - Verde chiaro */
        #00BFFF 65%,     /* 1000 hPa - Azzurro */
        #0000FF 80%,     /* 990 hPa - Blu */
        #800080 100%     /* <980 hPa - Viola */
    );
}

.legend-gradient-snow {
    background: linear-gradient(to bottom,
        #0000CD 0%,      /* >200cm */
        #4169E1 20%,     /* 150cm */
        #6495ED 35%,     /* 100cm */
        #87CEEB 50%,     /* 50cm */
        #B0E0E6 65%,     /* 20cm */
        #E0FFFF 80%,     /* 5cm */
        #FFFFFF 100%     /* 0cm */
    );
}

.legend-gradient-radiation {
    background: linear-gradient(to bottom,
        #FF0000 0%,      /* >1000 W/m² */
        #FF6600 15%,     /* 800 W/m² */
        #FFA500 30%,     /* 600 W/m² */
        #FFD700 45%,     /* 400 W/m² */
        #FFFF00 60%,     /* 200 W/m² */
        #FFFACD 80%,     /* 50 W/m² */
        #FFFFFF 100%     /* 0 W/m² */
    );
}

.legend-gradient-water-temperature {
    background: linear-gradient(to bottom,
        #FF0000 0%,      /* >30°C */
        #FF6600 15%,     /* 28°C */
        #FFA500 25%,     /* 25°C */
        #00BFFF 50%,     /* 18°C */
        #0080FF 70%,     /* 10°C */
        #0000FF 85%,     /* 5°C */
        #000080 100%     /* 0°C */
    );
}

.legend-gradient-pm {
    background: linear-gradient(to bottom,
        #7E0023 0%,      /* >150 - Hazardous */
        #8F3F97 15%,     /* 150 - Very Unhealthy */
        #FF0000 30%,     /* 100 - Unhealthy */
        #FF7E00 50%,     /* 50 - Unhealthy Sensitive */
        #FFFF00 70%,     /* 25 - Moderate */
        #00E400 90%,     /* 10 - Good */
        #00E400 100%     /* 0 - Good */
    );
}

.legend-gradient-active {
    background: linear-gradient(to bottom,
        #CCCCCC 0%,      /* Inattive */
        #808080 25%,     /* Poco attive */
        #FF8C00 50%,     /* Moderate */
        #FFD700 75%,     /* Attive */
        #00C851 100%     /* Molto attive */
    );
}

.legend-gradient-visibility {
    background: linear-gradient(to bottom,
        #87CEEB 0%,      /* 50+ km - Cristallina */
        #32CD32 20%,     /* 20 km - Ottima */
        #FFFF00 40%,     /* 5 km - Moderata */
        #FFA500 55%,     /* 2 km - Ridotta */
        #FF0000 70%,     /* 0.5 km - Foschia */
        #9400D3 85%,     /* 0.2 km - Nebbia */
        #4A0080 100%     /* 0 km - Nebbia fitta */
    );
}

.legend-gradient-cloud {
    background: linear-gradient(to bottom,
        #708090 0%,      /* 8 oktas - Coperto */
        #4169E1 25%,     /* 6 oktas - Molto nuvoloso */
        #87CEEB 50%,     /* 4 oktas - Parzialmente nuvoloso */
        #FFFF00 75%,     /* 2 oktas - Poco nuvoloso */
        #FFD700 100%     /* 0 oktas - Sereno */
    );
}

.legend-gradient-uv {
    background: linear-gradient(to bottom,
        #6600CC 0%,      /* 11+ - Estremo */
        #8C0080 15%,     /* 10 - Estremo */
        #D90000 30%,     /* 8 - Molto alto */
        #E65C00 45%,     /* 6 - Alto */
        #E6B800 60%,     /* 4 - Moderato */
        #8FC600 80%,     /* 2 - Basso */
        #3EA72D 100%     /* 0 - Basso */
    );
}

.legend-gradient-sealevel {
    background: linear-gradient(to bottom,
        #00008B 0%,      /* +1.5m - Alta marea */
        #0000CD 25%,     /* +1.0m */
        #87CEEB 45%,     /* +0.2m */
        #E0FFFF 50%,     /* 0m - Livello medio */
        #F5DEB3 65%,     /* -0.5m */
        #CD853F 85%,     /* -1.0m */
        #8B4513 100%     /* -1.5m - Bassa marea */
    );
}

.legend-gradient-wave {
    background: linear-gradient(to bottom,
        #8B0000 0%,      /* 14m - Tempestoso */
        #FF4500 15%,     /* 9m - Grosso */
        #FFA500 30%,     /* 6m - Molto agitato */
        #FFFF00 45%,     /* 4m - Agitato */
        #32CD32 55%,     /* 2.5m - Molto mosso */
        #4169E1 70%,     /* 1.25m - Mosso */
        #87CEEB 85%,     /* 0.5m - Poco mosso */
        #E0FFFF 100%     /* 0m - Calmo */
    );
}

/* Responsive: su schermi piccoli, la legenda va in basso */
@media (max-width: 768px) {
    .legend-vertical {
        right: 10px;
        top: auto;
        bottom: 180px;
        transform: none;
        flex-direction: row;
        padding: 8px 12px;
        min-width: auto;
        gap: 8px;
    }

    .legend-vertical .legend-gradient-bar {
        width: 150px;
        height: 14px;
        border-radius: 7px;
    }

    .legend-vertical .legend-value-max,
    .legend-vertical .legend-value-min {
        font-size: 10px;
        margin: 0;
    }

    .legend-vertical .legend-ticks {
        display: none;
    }

    .legend-vertical .legend-unit {
        margin: 0;
        padding: 0;
        border: none;
        margin-left: 4px;
    }

    .legend-vertical .legend-special {
        display: none;
    }

    /* Ruota i gradienti per layout orizzontale */
    .legend-gradient-temperature,
    .legend-gradient-humidity,
    .legend-gradient-wind,
    .legend-gradient-precipitation,
    .legend-gradient-pressure,
    .legend-gradient-snow,
    .legend-gradient-radiation,
    .legend-gradient-water-temperature,
    .legend-gradient-pm,
    .legend-gradient-active,
    .legend-gradient-visibility,
    .legend-gradient-cloud,
    .legend-gradient-uv,
    .legend-gradient-sealevel,
    .legend-gradient-wave {
        background-size: 100% 100%;
    }

    .legend-vertical .legend-gradient-bar.legend-gradient-temperature {
        background: linear-gradient(to right,
            #800080, #9400D3, #0000FF, #87CEEB, #00FFFF, #32CD32, #FFFF00, #FFA500, #FF0000, #8B0000
        );
    }

    .legend-vertical .legend-gradient-bar.legend-gradient-humidity {
        background: linear-gradient(to right,
            #8B4513, #DEB887, #FFFACD, #87CEEB, #4169E1, #000080
        );
    }

    .legend-vertical .legend-gradient-bar.legend-gradient-wind {
        background: linear-gradient(to right,
            #E6F3FF, #CCE7FF, #66C2FF, #0099FF, #0066CC, #003399, #FF6600, #FF0000
        );
    }

    .legend-vertical .legend-gradient-bar.legend-gradient-visibility {
        background: linear-gradient(to right,
            #4A0080, #9400D3, #FF0000, #FFA500, #FFFF00, #32CD32, #87CEEB
        );
    }

    .legend-vertical .legend-gradient-bar.legend-gradient-cloud {
        background: linear-gradient(to right,
            #FFD700, #FFFF00, #87CEEB, #4169E1, #708090
        );
    }

    .legend-vertical .legend-gradient-bar.legend-gradient-uv {
        background: linear-gradient(to right,
            #3EA72D, #8FC600, #E6B800, #E65C00, #D90000, #8C0080, #6600CC
        );
    }

    .legend-vertical .legend-gradient-bar.legend-gradient-sealevel {
        background: linear-gradient(to right,
            #8B4513, #CD853F, #F5DEB3, #E0FFFF, #87CEEB, #0000CD, #00008B
        );
    }

    .legend-vertical .legend-gradient-bar.legend-gradient-wave {
        background: linear-gradient(to right,
            #E0FFFF, #87CEEB, #4169E1, #32CD32, #FFFF00, #FFA500, #FF4500, #8B0000
        );
    }
}

/* Nascondi la legenda vecchia quando c'è quella nuova verticale */
.legend.legend-desktop.legend-hidden {
    display: none !important;
}

/* =============================================================================
   DARK MODE - TEMA SCURO
   ============================================================================= */

/* CSS Custom Properties per i colori (Light Mode default) */
:root {
    /* Colori primari */
    --bg-primary: #f5f5f5;
    --bg-secondary: #ffffff;
    --bg-tertiary: #f0f0f0;
    --bg-overlay: rgba(255, 255, 255, 0.95);

    /* Testo */
    --text-primary: #333333;
    --text-secondary: #666666;
    --text-muted: #888888;
    --text-inverse: #ffffff;

    /* Bordi */
    --border-color: #dddddd;
    --border-light: #eeeeee;

    /* Pannelli e cards */
    --panel-bg: #ffffff;
    --panel-header-bg: #f8f9fa;
    --card-bg: #ffffff;
    --card-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);

    /* Header */
    --header-bg: linear-gradient(135deg, #1e3a5f 0%, #2c5282 100%);
    --header-text: #ffffff;

    /* Input e form */
    --input-bg: #ffffff;
    --input-border: #cccccc;
    --input-focus-border: #4299e1;

    /* Bottoni */
    --btn-secondary-bg: rgba(255, 255, 255, 0.15);
    --btn-secondary-hover: rgba(255, 255, 255, 0.25);

    /* Overlay e popup */
    --popup-bg: #ffffff;
    --popup-border: #dddddd;
    --modal-overlay: rgba(0, 0, 0, 0.5);

    /* Sidebar */
    --sidebar-bg: #ffffff;
    --sidebar-header-bg: #f8f9fa;

    /* Timeline */
    --timeline-bg: rgba(255, 255, 255, 0.95);
    --timeline-track: #e0e0e0;

    /* Scrollbar */
    --scrollbar-track: #f1f1f1;
    --scrollbar-thumb: #c1c1c1;
    --scrollbar-thumb-hover: #a8a8a8;

    /* Toast */
    --toast-bg: #333333;
    --toast-text: #ffffff;

    /* Legenda verticale */
    --legend-bg: rgba(0, 0, 0, 0.75);
    --legend-text: #ffffff;
}

/* Dark Mode Colors */
[data-theme="dark"] {
    /* Colori primari */
    --bg-primary: #1a1a2e;
    --bg-secondary: #16213e;
    --bg-tertiary: #0f3460;
    --bg-overlay: rgba(22, 33, 62, 0.95);

    /* Testo */
    --text-primary: #e8e8e8;
    --text-secondary: #b8b8b8;
    --text-muted: #888888;
    --text-inverse: #1a1a2e;

    /* Bordi */
    --border-color: #2a3f5f;
    --border-light: #1e3050;

    /* Pannelli e cards */
    --panel-bg: #16213e;
    --panel-header-bg: #1a2744;
    --card-bg: #1e2a4a;
    --card-shadow: 0 2px 12px rgba(0, 0, 0, 0.4);

    /* Header */
    --header-bg: linear-gradient(135deg, #0d1b2a 0%, #1b263b 100%);
    --header-text: #ffffff;

    /* Input e form */
    --input-bg: #1e2a4a;
    --input-border: #2a3f5f;
    --input-focus-border: #4299e1;

    /* Bottoni */
    --btn-secondary-bg: rgba(255, 255, 255, 0.1);
    --btn-secondary-hover: rgba(255, 255, 255, 0.2);

    /* Overlay e popup */
    --popup-bg: #1e2a4a;
    --popup-border: #2a3f5f;
    --modal-overlay: rgba(0, 0, 0, 0.7);

    /* Sidebar */
    --sidebar-bg: #16213e;
    --sidebar-header-bg: #1a2744;

    /* Timeline */
    --timeline-bg: rgba(22, 33, 62, 0.95);
    --timeline-track: #2a3f5f;

    /* Scrollbar */
    --scrollbar-track: #1a2744;
    --scrollbar-thumb: #3a5070;
    --scrollbar-thumb-hover: #4a6080;

    /* Toast */
    --toast-bg: #1e2a4a;
    --toast-text: #e8e8e8;

    /* Legenda verticale */
    --legend-bg: rgba(22, 33, 62, 0.9);
    --legend-text: #e8e8e8;

    /* Mobile UI Dark Theme */
    --sheet-bg: rgba(15, 23, 42, 0.98);
    --tab-bar-bg: rgba(15, 23, 42, 0.98);
    --tab-inactive: #64748b;
    --tab-active: #60a5fa;
    --divider: rgba(255, 255, 255, 0.1);

    /* === PREMIUM DARK PALETTE === */
    --gradient-header-dark: linear-gradient(180deg, rgba(15, 23, 42, 0.98) 0%, rgba(30, 41, 59, 0.95) 100%);
    --glass-bg-dark: rgba(15, 23, 42, 0.85);
    --glass-border-dark: rgba(255, 255, 255, 0.1);

    /* Glow effects in dark mode - più intensi */
    --glow-radar: 0 0 24px rgba(0, 230, 118, 0.5);
    --glow-satellite: 0 0 24px rgba(224, 64, 251, 0.5);
    --glow-stations: 0 0 24px rgba(255, 109, 0, 0.5);
    --glow-settings: 0 0 24px rgba(96, 165, 250, 0.5);
}

/* Applicazione variabili CSS agli elementi */

/* Body e container principale */
[data-theme="dark"] body.map-page {
    background-color: var(--bg-primary);
    color: var(--text-primary);
}

/* Header */
[data-theme="dark"] .app-header {
    background: var(--header-bg);
    border-bottom-color: var(--border-color);
}

/* Pannello controlli */
[data-theme="dark"] .control-panel {
    background: var(--panel-bg);
    border-color: var(--border-color);
    box-shadow: var(--card-shadow);
}

[data-theme="dark"] .panel-header {
    background: var(--panel-header-bg);
    border-bottom-color: var(--border-color);
}

[data-theme="dark"] .panel-header h3 {
    color: var(--text-primary);
}

[data-theme="dark"] .control-group label {
    color: var(--text-primary);
}

[data-theme="dark"] .control-group .help-text {
    color: var(--text-muted);
}

/* Form controls */
[data-theme="dark"] .form-control,
[data-theme="dark"] select.form-control,
[data-theme="dark"] input[type="text"],
[data-theme="dark"] input[type="search"] {
    background-color: var(--input-bg);
    border-color: var(--input-border);
    color: var(--text-primary);
}

[data-theme="dark"] .form-control:focus {
    border-color: var(--input-focus-border);
    box-shadow: 0 0 0 3px rgba(66, 153, 225, 0.25);
}

[data-theme="dark"] .form-control option {
    background-color: var(--input-bg);
    color: var(--text-primary);
}

[data-theme="dark"] .form-control optgroup {
    background-color: var(--input-bg);
    color: var(--text-secondary);
    font-weight: 600;
}

/* Checkbox e switch */
[data-theme="dark"] .control-group input[type="checkbox"] + label,
[data-theme="dark"] .control-group .switch-label {
    color: var(--text-secondary);
}

/* Control groups */
[data-theme="dark"] .control-group {
    border-bottom-color: var(--border-light);
}

/* Fonte dati toggle list */
[data-theme="dark"] .fonte-toggle-item {
    background: var(--card-bg);
    border-color: var(--border-color);
    color: var(--text-primary);
}

[data-theme="dark"] .fonte-toggle-item:hover {
    background: var(--bg-tertiary);
}

[data-theme="dark"] .fonte-toggle-item .fonte-name {
    color: var(--text-primary);
}

[data-theme="dark"] .fonte-toggle-item .fonte-count {
    color: var(--text-muted);
    background: var(--bg-tertiary);
}

/* Fonte search */
[data-theme="dark"] .fonte-search-container input {
    background-color: var(--input-bg);
    border-color: var(--input-border);
    color: var(--text-primary);
}

[data-theme="dark"] .fonte-search-container input::placeholder {
    color: var(--text-muted);
}

/* Bottoni header */
[data-theme="dark"] .header-actions .btn-secondary {
    background: var(--btn-secondary-bg);
    color: var(--header-text);
}

[data-theme="dark"] .header-actions .btn-secondary:hover {
    background: var(--btn-secondary-hover);
}

/* Dark mode button animation */
#darkModeBtn {
    transition: transform 0.3s ease, background-color 0.3s ease;
}

#darkModeBtn:hover {
    transform: rotate(15deg);
}

[data-theme="dark"] #darkModeBtn:hover {
    transform: rotate(-15deg);
}

#darkModeIcon {
    transition: transform 0.5s ease;
}

[data-theme="dark"] #darkModeIcon {
    transform: rotate(360deg);
}

/* Timeline */
[data-theme="dark"] .timeline-bar {
    background: linear-gradient(to top, rgba(22, 33, 62, 0.97), rgba(22, 33, 62, 0.92));
    box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.3);
}

[data-theme="dark"] .timeline-container {
    background: var(--timeline-bg);
    border-color: var(--border-color);
}

[data-theme="dark"] .timeline-container::before {
    background: linear-gradient(to right, var(--timeline-bg), transparent);
}

[data-theme="dark"] .timeline-container::after {
    background: linear-gradient(to left, var(--timeline-bg), transparent);
}

[data-theme="dark"] .time-display {
    color: var(--text-primary);
}

[data-theme="dark"] .timeline-slider {
    background: var(--timeline-track);
}

[data-theme="dark"] .timeline-slider::-webkit-slider-thumb {
    background: #4299e1;
    box-shadow: 0 0 8px rgba(66, 153, 225, 0.5);
}

[data-theme="dark"] .timeline-slider::-moz-range-thumb {
    background: #4299e1;
    box-shadow: 0 0 8px rgba(66, 153, 225, 0.5);
}

[data-theme="dark"] .time-button,
[data-theme="dark"] .quick-time-btn {
    background: var(--card-bg);
    color: var(--text-primary);
    border-color: var(--border-color);
}

[data-theme="dark"] .time-button:hover,
[data-theme="dark"] .quick-time-btn:hover {
    background: var(--bg-tertiary);
}

[data-theme="dark"] .time-button.active,
[data-theme="dark"] .quick-time-btn.active {
    background: #4299e1;
    color: #ffffff;
}

[data-theme="dark"] .timeline-marks span {
    color: var(--text-muted);
}

/* Timeline preset buttons */
[data-theme="dark"] .preset-btn {
    background: var(--card-bg);
    color: var(--text-primary);
    border-color: var(--border-color);
}

[data-theme="dark"] .preset-btn:hover {
    background: var(--bg-tertiary);
    border-color: var(--border-color);
}

[data-theme="dark"] .preset-btn.active {
    background: linear-gradient(135deg, #4299e1 0%, #3182ce 100%);
    color: #ffffff;
    border-color: #3182ce;
}

/* Timeline display e ticks */
[data-theme="dark"] .timeline-display {
    color: var(--text-primary);
}

[data-theme="dark"] .timeline-ticks span {
    color: var(--text-muted);
}

[data-theme="dark"] .time-current {
    color: var(--text-primary);
}

[data-theme="dark"] .tolerance-control label {
    color: var(--text-secondary);
}

[data-theme="dark"] #toleranceSlider {
    background: var(--timeline-track);
}

[data-theme="dark"] #toleranceValue {
    color: var(--text-secondary);
}

/* Timeline presets container */
[data-theme="dark"] .timeline-presets {
    border-color: var(--border-color);
}

/* Sidebar dettagli stazione */
[data-theme="dark"] .station-details {
    background: var(--sidebar-bg);
    border-color: var(--border-color);
    box-shadow: var(--card-shadow);
}

[data-theme="dark"] .station-details .detail-header {
    background: var(--sidebar-header-bg);
    border-bottom-color: var(--border-color);
}

[data-theme="dark"] .station-details .detail-header h3 {
    color: var(--text-primary);
}

[data-theme="dark"] .station-details .close-btn {
    color: var(--text-secondary);
}

[data-theme="dark"] .station-details .close-btn:hover {
    color: var(--text-primary);
}

[data-theme="dark"] .station-details .detail-content {
    color: var(--text-primary);
}

/* Tabella dati stazione */
[data-theme="dark"] .station-details table {
    color: var(--text-primary);
}

[data-theme="dark"] .station-details table th {
    background: var(--panel-header-bg);
    color: var(--text-primary);
    border-color: var(--border-color);
}

[data-theme="dark"] .station-details table td {
    border-color: var(--border-color);
    color: var(--text-secondary);
}

[data-theme="dark"] .station-details table tr:hover td {
    background: var(--card-bg);
}

/* Legenda verticale */
[data-theme="dark"] .legend-vertical {
    background: var(--legend-bg);
}

[data-theme="dark"] .legend-vertical .legend-value-max,
[data-theme="dark"] .legend-vertical .legend-value-min,
[data-theme="dark"] .legend-vertical .legend-unit,
[data-theme="dark"] .legend-vertical .legend-tick {
    color: var(--legend-text);
}

[data-theme="dark"] .legend-vertical .legend-special span {
    color: var(--legend-text);
}

/* Toast notifications */
[data-theme="dark"] .toast {
    background: var(--toast-bg);
    color: var(--toast-text);
    border-color: var(--border-color);
}

/* Modal */
[data-theme="dark"] .modal-overlay {
    background: var(--modal-overlay);
}

[data-theme="dark"] .modal-content,
[data-theme="dark"] .info-modal-content {
    background: var(--popup-bg);
    color: var(--text-primary);
    border-color: var(--border-color);
}

[data-theme="dark"] .modal-header,
[data-theme="dark"] .info-modal-header {
    background: var(--panel-header-bg);
    border-bottom-color: var(--border-color);
    color: var(--text-primary);
}

[data-theme="dark"] .modal-body {
    color: var(--text-secondary);
}

/* Loading screen */
[data-theme="dark"] .loading-screen {
    background: var(--bg-overlay);
}

[data-theme="dark"] .loading-content {
    color: var(--text-primary);
}

[data-theme="dark"] .loading-spinner {
    border-color: var(--border-color);
    border-top-color: #4299e1;
}

/* Coordinate display */
[data-theme="dark"] .coordinate-display,
[data-theme="dark"] .zoom-display {
    background: var(--bg-overlay);
    color: var(--text-primary);
    border-color: var(--border-color);
}

/* Scrollbar dark mode */
[data-theme="dark"] ::-webkit-scrollbar {
    width: 10px;
    height: 10px;
}

[data-theme="dark"] ::-webkit-scrollbar-track {
    background: var(--scrollbar-track);
}

[data-theme="dark"] ::-webkit-scrollbar-thumb {
    background: var(--scrollbar-thumb);
    border-radius: 5px;
}

[data-theme="dark"] ::-webkit-scrollbar-thumb:hover {
    background: var(--scrollbar-thumb-hover);
}

/* Legend modal mobile */
[data-theme="dark"] .legend-modal {
    background: var(--modal-overlay);
}

[data-theme="dark"] .legend-modal-content {
    background: var(--popup-bg);
    color: var(--text-primary);
}

[data-theme="dark"] .legend-modal-header {
    background: var(--panel-header-bg);
    border-bottom-color: var(--border-color);
}

/* Legend toggle button */
[data-theme="dark"] .legend-toggle-btn {
    background: var(--card-bg);
    color: var(--text-primary);
    border-color: var(--border-color);
}

/* Animation controller */
[data-theme="dark"] .animation-toggle {
    background: var(--card-bg);
    border-color: var(--border-color);
}

[data-theme="dark"] .animation-toggle:hover {
    background: var(--bg-tertiary);
}

[data-theme="dark"] .animation-toggle.active {
    background: #4299e1;
}

/* Offset selector */
[data-theme="dark"] .offset-selector select {
    background: var(--input-bg);
    color: var(--text-primary);
    border-color: var(--border-color);
}

/* MapLibre controls dark mode */
[data-theme="dark"] .maplibregl-ctrl-group {
    background: var(--card-bg);
    border-color: var(--border-color);
    box-shadow: var(--card-shadow);
}

[data-theme="dark"] .maplibregl-ctrl-group button {
    background-color: transparent;
}

[data-theme="dark"] .maplibregl-ctrl-group button:hover {
    background-color: var(--bg-tertiary);
}

[data-theme="dark"] .maplibregl-ctrl-group button + button {
    border-top-color: var(--border-color);
}

/* MapLibre zoom icons */
[data-theme="dark"] .maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon {
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e8e8e8' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5s1.5-.75 1.5-1.5v-3h3c.75 0 1.5-.75 1.5-1.5s-.75-1.5-1.5-1.5h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E");
}

[data-theme="dark"] .maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon {
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e8e8e8' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5s.75 1.5 1.5 1.5h9c.75 0 1.5-.75 1.5-1.5s-.75-1.5-1.5-1.5h-9z'/%3E%3C/svg%3E");
}

[data-theme="dark"] .maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon {
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e8e8e8' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath fill='%23aaa' d='M10.5 16l4 8 4-8h-8z'/%3E%3C/svg%3E");
}

/* MapLibre attribution */
[data-theme="dark"] .maplibregl-ctrl-attrib {
    background-color: rgba(22, 33, 62, 0.8);
    color: var(--text-muted);
}

[data-theme="dark"] .maplibregl-ctrl-attrib a {
    color: #4299e1;
}

/* Scale control */
[data-theme="dark"] .maplibregl-ctrl-scale {
    background-color: rgba(22, 33, 62, 0.8);
    border-color: var(--text-muted);
    color: var(--text-primary);
}

/* Popup MapLibre */
[data-theme="dark"] .maplibregl-popup-content {
    background: var(--popup-bg);
    color: var(--text-primary);
    box-shadow: var(--card-shadow);
}

[data-theme="dark"] .maplibregl-popup-anchor-top .maplibregl-popup-tip {
    border-bottom-color: var(--popup-bg);
}

[data-theme="dark"] .maplibregl-popup-anchor-bottom .maplibregl-popup-tip {
    border-top-color: var(--popup-bg);
}

[data-theme="dark"] .maplibregl-popup-anchor-left .maplibregl-popup-tip {
    border-right-color: var(--popup-bg);
}

[data-theme="dark"] .maplibregl-popup-anchor-right .maplibregl-popup-tip {
    border-left-color: var(--popup-bg);
}

[data-theme="dark"] .maplibregl-popup-close-button {
    color: var(--text-secondary);
}

[data-theme="dark"] .maplibregl-popup-close-button:hover {
    color: var(--text-primary);
    background-color: var(--bg-tertiary);
}

/* Transizione smooth per il cambio tema */
body.map-page,
.app-header,
.control-panel,
.panel-header,
.station-details,
.timeline-container,
.legend-vertical,
.form-control,
.toast,
.modal-content,
.info-modal-content {
    transition: background-color 0.3s ease,
                border-color 0.3s ease,
                color 0.3s ease,
                box-shadow 0.3s ease;
}

/* =============================================================================
   WIND PARTICLES ANIMATION
   ============================================================================= */

/* Canvas overlay per animazione vento */
#wind-particles-canvas {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
    z-index: 10;
}

/* Controlli animazione vento nel pannello */
#windAnimationGroup {
    border-top: 1px solid var(--border-color);
    padding-top: 15px;
    margin-top: 10px;
}

#windAnimationGroup .control-label {
    color: var(--primary-color);
    font-weight: 600;
}

#windAnimationGroup .control-label i {
    margin-right: 6px;
}

/* Opzioni particelle (sliders) - Pannello Ventusky-style */
.wind-particles-options {
    margin-top: 12px;
    padding: 12px;
    background: var(--bg-secondary);
    border-radius: var(--border-radius);
    border: 1px solid var(--border-color);
    max-height: 400px;
    overflow-y: auto;
}

/* Preset row con separatore */
.wind-particles-options .wind-preset-row {
    margin-bottom: 12px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--border-color);
}

.wind-particles-options .wind-preset-row label {
    display: block;
    margin-bottom: 6px;
    font-weight: 500;
}

.wind-particles-options .wind-preset-row select,
.wind-particles-options .slider-control select {
    width: 100%;
    padding: 6px 10px;
    border-radius: 4px;
    border: 1px solid var(--border-color);
    background: var(--bg-primary);
    color: var(--text-primary);
    font-size: 13px;
    cursor: pointer;
}

.wind-particles-options .wind-preset-row select:focus,
.wind-particles-options .slider-control select:focus {
    outline: none;
    border-color: var(--primary-color);
    box-shadow: 0 0 0 2px rgba(var(--primary-rgb), 0.2);
}

.wind-particles-options .slider-control {
    margin-bottom: 10px;
}

.wind-particles-options .slider-control:last-child {
    margin-bottom: 0;
}

.wind-particles-options label {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 12px;
    color: var(--text-secondary);
    margin-bottom: 4px;
}

.wind-particles-options label span {
    font-weight: 600;
    color: var(--text-primary);
}

.wind-particles-options input[type="range"] {
    width: 100%;
    height: 6px;
    border-radius: 3px;
    background: var(--border-color);
    outline: none;
    -webkit-appearance: none;
    cursor: pointer;
}

.wind-particles-options input[type="range"]::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 16px;
    height: 16px;
    border-radius: 50%;
    background: var(--primary-color);
    cursor: pointer;
    border: 2px solid white;
    box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}

.wind-particles-options input[type="range"]::-moz-range-thumb {
    width: 16px;
    height: 16px;
    border-radius: 50%;
    background: var(--primary-color);
    cursor: pointer;
    border: 2px solid white;
    box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}

/* Dark mode stili wind particles */
[data-theme="dark"] #windAnimationGroup {
    border-top-color: var(--border-color);
}

[data-theme="dark"] .wind-particles-options {
    background: var(--bg-tertiary);
    border-color: var(--border-color);
}

[data-theme="dark"] .wind-particles-options label span {
    color: var(--text-primary);
}

[data-theme="dark"] .wind-particles-options input[type="range"] {
    background: var(--bg-secondary);
}

[data-theme="dark"] .wind-particles-options input[type="range"]::-webkit-slider-thumb {
    border-color: var(--bg-tertiary);
}

[data-theme="dark"] .wind-particles-options input[type="range"]::-moz-range-thumb {
    border-color: var(--bg-tertiary);
}

[data-theme="dark"] .wind-particles-options .wind-preset-row select,
[data-theme="dark"] .wind-particles-options .slider-control select {
    background: var(--bg-secondary);
    border-color: var(--border-color);
    color: var(--text-primary);
}

[data-theme="dark"] .wind-particles-options .wind-preset-row {
    border-bottom-color: var(--border-color);
}

/* =============================================================================
   MERGE SELECTION PANEL (solo marco)
   ============================================================================= */

.merge-selection-panel {
    position: fixed;
    top: 80px;
    right: 20px;
    width: 300px;
    background: var(--bg-primary);
    border-radius: var(--border-radius);
    box-shadow: 0 4px 20px rgba(0,0,0,0.25);
    z-index: 1100;
    overflow: hidden;
    border: 2px solid #dc3545;
}

.merge-panel-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 12px 16px;
    background: linear-gradient(135deg, #dc3545, #c82333);
    color: white;
}

.merge-panel-header h5 {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    display: flex;
    align-items: center;
    gap: 8px;
}

.merge-panel-close {
    background: rgba(255,255,255,0.2);
    border: none;
    color: white;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.2s;
}

.merge-panel-close:hover {
    background: rgba(255,255,255,0.3);
}

.merge-panel-body {
    padding: 16px;
}

.merge-instructions {
    font-size: 13px;
    color: var(--text-secondary);
    margin: 0 0 12px 0;
    text-align: center;
}

.merge-selected-list {
    min-height: 60px;
}

.merge-no-selection {
    text-align: center;
    color: var(--text-secondary);
    font-style: italic;
    padding: 20px 0;
    font-size: 13px;
}

.merge-station-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 12px;
    background: var(--bg-secondary);
    border-radius: 6px;
    margin-bottom: 8px;
}

.merge-station-item:last-child {
    margin-bottom: 0;
}

.merge-station-info {
    display: flex;
    align-items: center;
    gap: 10px;
    flex: 1;
    min-width: 0;
}

.merge-station-num {
    width: 24px;
    height: 24px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    font-weight: bold;
    color: white;
    flex-shrink: 0;
}

.merge-station-item:first-child .merge-station-num {
    background: #667eea;
}

.merge-station-item:last-child .merge-station-num {
    background: #28a745;
}

.merge-station-details {
    flex: 1;
    min-width: 0;
}

.merge-station-details strong {
    display: block;
    font-size: 13px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.merge-station-details small {
    display: block;
    font-size: 11px;
    color: var(--text-secondary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.merge-station-remove {
    background: transparent;
    border: none;
    color: #dc3545;
    cursor: pointer;
    padding: 4px;
    border-radius: 4px;
    transition: background 0.2s;
}

.merge-station-remove:hover {
    background: rgba(220, 53, 69, 0.1);
}

.merge-panel-footer {
    display: flex;
    gap: 10px;
    padding: 12px 16px;
    background: var(--bg-secondary);
    border-top: 1px solid var(--border-color);
}

.merge-panel-footer .btn {
    flex: 1;
}

/* Cursore a croce quando in modalità selezione merge */
body.merge-selection-active #map {
    cursor: crosshair;
}

/* Dark mode per merge panel */
[data-theme="dark"] .merge-selection-panel {
    background: var(--bg-primary);
    border-color: #dc3545;
}

[data-theme="dark"] .merge-station-item {
    background: var(--bg-tertiary);
}

[data-theme="dark"] .merge-panel-footer {
    background: var(--bg-tertiary);
    border-top-color: var(--border-color);
}

/* =============================================================================
   USER LOCATION MARKER (global - blue pulsing dot)
   ============================================================================= */

.user-location-marker {
    width: 24px;
    height: 24px;
    position: relative;
}

.user-location-dot {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 14px;
    height: 14px;
    background: #2196F3;
    border: 3px solid white;
    border-radius: 50%;
    box-shadow: 0 2px 6px rgba(0,0,0,0.3);
    z-index: 2;
}

.user-location-pulse {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 40px;
    height: 40px;
    background: rgba(33, 150, 243, 0.3);
    border-radius: 50%;
    animation: user-location-pulse 2s ease-out infinite;
}

@keyframes user-location-pulse {
    0% {
        transform: translate(-50%, -50%) scale(0.5);
        opacity: 1;
    }
    100% {
        transform: translate(-50%, -50%) scale(1.5);
        opacity: 0;
    }
}

/* =============================================================================
   MOBILE UI - TAB BAR, BOTTOM SHEET, CHIPS
   iOS/Android Native Feel - Professional Mobile-First Interface
   ============================================================================= */

/* Hide mobile components on desktop */
.mobile-tab-bar,
.mobile-bottom-sheet,
.sheet-backdrop {
    display: none;
}

@media (max-width: 768px) {
    /* ==========================================================================
       TAB BAR - iOS/Android Native Feel
       ========================================================================== */

    .mobile-tab-bar {
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        height: calc(var(--tab-bar-height) + var(--safe-bottom));
        padding-bottom: var(--safe-bottom);
        background: var(--tab-bar-bg);
        backdrop-filter: saturate(180%) blur(20px);
        -webkit-backdrop-filter: saturate(180%) blur(20px);
        display: flex;
        justify-content: space-around;
        align-items: center;
        z-index: var(--z-tab-bar);
        border-top: 0.5px solid var(--divider);
        overscroll-behavior: none;
    }

    .tab-item {
        flex: 1;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        height: var(--tab-bar-height);
        padding: 4px 0;
        background: transparent;
        border: none;
        color: var(--tab-inactive);
        cursor: pointer;
        position: relative;
        -webkit-tap-highlight-color: transparent;
        transition: color var(--duration-short) var(--ease-standard);
        gap: 2px;
    }

    .tab-icon {
        font-size: 20px;
        height: 24px;
        display: flex;
        align-items: center;
        justify-content: center;
        border-radius: 16px;
        padding: 2px 0;
        transition: transform var(--duration-short) var(--ease-decelerate),
                    background var(--duration-medium) var(--ease-standard),
                    padding var(--duration-medium) var(--ease-standard);
    }

    .tab-label {
        font-size: 10px;
        font-weight: 500;
        letter-spacing: 0.02em;
        max-height: 12px;
        overflow: hidden;
        transition: max-height 0.2s ease, opacity 0.2s ease;
    }

    /* Material 3: label hidden on inactive tabs */
    .tab-item:not(.active) .tab-label {
        max-height: 0;
        opacity: 0;
    }

    /* Active state */
    .tab-item.active {
        color: var(--tab-active);
    }

    .tab-item.active .tab-icon {
        transform: scale(1.08);
        padding: 2px 16px;
    }

    /* === COLORI DISTINTIVI PER CATEGORIA CON GLOW + PILL BG === */
    .tab-item[data-tab="radar"].active {
        color: var(--accent-radar);
    }
    .tab-item[data-tab="radar"].active .tab-icon {
        filter: drop-shadow(0 0 8px rgba(0, 230, 118, 0.6));
        background: rgba(0, 230, 118, 0.15);
    }

    .tab-item[data-tab="satellite"].active {
        color: var(--accent-satellite);
    }
    .tab-item[data-tab="satellite"].active .tab-icon {
        filter: drop-shadow(0 0 8px rgba(224, 64, 251, 0.6));
        background: rgba(224, 64, 251, 0.15);
    }

    .tab-item[data-tab="stations"].active {
        color: var(--accent-stations);
    }
    .tab-item[data-tab="stations"].active .tab-icon {
        filter: drop-shadow(0 0 8px rgba(255, 109, 0, 0.6));
        background: rgba(255, 109, 0, 0.15);
    }

    .tab-item[data-tab="settings"].active {
        color: var(--accent-settings);
    }
    .tab-item[data-tab="settings"].active .tab-icon {
        filter: drop-shadow(0 0 8px rgba(96, 165, 250, 0.6));
        background: rgba(96, 165, 250, 0.15);
    }

    /* Legacy .tab-indicator — hidden, replaced by pill on .tab-icon */
    .tab-indicator {
        display: none;
    }

    /* Press feedback */
    .tab-item:active .tab-icon {
        transform: scale(0.92);
    }

    /* ==========================================================================
       BOTTOM SHEET - Fluid Gesture-Driven
       ========================================================================== */

    .mobile-bottom-sheet {
        position: fixed;
        left: 0;
        right: 0;
        bottom: calc(var(--tab-bar-height) + var(--safe-bottom) + var(--timeline-height));
        height: var(--sheet-full);
        /* === GLASS EFFECT PREMIUM === */
        background: var(--glass-bg, rgba(255, 255, 255, 0.85));
        backdrop-filter: saturate(180%) blur(var(--glass-blur, 20px));
        -webkit-backdrop-filter: saturate(180%) blur(var(--glass-blur, 20px));
        border: 1px solid var(--glass-border, rgba(255, 255, 255, 0.18));
        border-bottom: none;
        border-radius: 20px 20px 0 0;
        box-shadow: 0 -8px 40px rgba(0, 0, 0, 0.15),
                    inset 0 1px 0 rgba(255, 255, 255, 0.4);
        z-index: var(--z-sheet);
        display: flex;
        flex-direction: column;
        transform: translateY(100%);
        transition: transform 0.4s cubic-bezier(0.32, 0.72, 0, 1),
                    border-radius 0.2s ease;
        will-change: transform;
        touch-action: none;
        overscroll-behavior: contain;
    }

    /* Sheet States */
    .mobile-bottom-sheet[data-state="closed"] {
        transform: translateY(calc(100% + 120px));
        pointer-events: none;
    }

    .mobile-bottom-sheet[data-state="peek"] {
        transform: translateY(calc(100% - var(--sheet-peek)));
        pointer-events: auto;
    }

    .mobile-bottom-sheet[data-state="half"] {
        transform: translateY(calc(100% - var(--sheet-half)));
        pointer-events: auto;
    }

    .mobile-bottom-sheet[data-state="full"] {
        transform: translateY(calc(100% - var(--sheet-full)));
        pointer-events: auto;
        border-radius: 0;
    }

    /* Disable transition during drag */
    .mobile-bottom-sheet.dragging {
        transition: none !important;
    }

    /* Drag Handle */
    .sheet-drag-handle {
        height: var(--sheet-handle-height);
        display: flex;
        align-items: center;
        justify-content: center;
        cursor: grab;
        flex-shrink: 0;
        padding: 12px 0;
        margin: -12px 0;
    }

    .sheet-drag-handle:active {
        cursor: grabbing;
    }

    .sheet-handle-bar {
        width: 36px;
        height: 4px;
        background: var(--divider);
        border-radius: 2px;
        transition: width var(--duration-short) var(--ease-standard),
                    background var(--duration-short);
    }

    .mobile-bottom-sheet.dragging .sheet-handle-bar {
        width: 48px;
        background: var(--accent-primary);
    }

    /* Sheet Header */
    .sheet-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 0 var(--space-md) var(--space-sm);
        flex-shrink: 0;
    }

    .sheet-title {
        font-size: 20px;
        font-weight: 600;
        color: var(--text-primary);
        margin: 0;
    }

    .sheet-close-btn {
        width: var(--touch-target-min);
        height: var(--touch-target-min);
        border-radius: 50%;
        background: var(--bg-secondary);
        border: none;
        color: var(--text-secondary);
        display: flex;
        align-items: center;
        justify-content: center;
        cursor: pointer;
        transition: background var(--duration-short),
                    transform var(--duration-short);
    }

    .sheet-close-btn:active {
        transform: scale(0.9);
        background: var(--divider);
    }

    /* Sheet Content */
    .sheet-content {
        flex: 1;
        overflow-y: auto;
        overflow-x: hidden;
        -webkit-overflow-scrolling: touch;
        overscroll-behavior-y: contain;
        scroll-behavior: smooth;
        padding-bottom: calc(var(--timeline-height) + 16px);
    }

    /* Lock scroll when sheet is at peek */
    .mobile-bottom-sheet[data-state="peek"] .sheet-content {
        overflow: hidden;
    }

    .sheet-panel {
        padding: var(--space-md);
        padding-bottom: calc(var(--space-lg) + var(--safe-bottom));
    }

    /* Panel Sections */
    .panel-section {
        margin-bottom: var(--space-lg);
    }

    .panel-section:last-child {
        margin-bottom: 0;
    }

    .section-title {
        font-size: 13px;
        font-weight: 600;
        color: var(--text-secondary);
        text-transform: uppercase;
        letter-spacing: 0.08em;
        margin: 0 0 var(--space-sm);
        display: flex;
        align-items: center;
        gap: var(--space-sm);
    }

    .section-title i {
        font-size: 14px;
        opacity: 0.7;
    }

    /* Collapsible Sections */
    .panel-section.collapsible .section-content {
        max-height: 500px;
        overflow: hidden;
        transition: max-height var(--duration-medium) var(--ease-standard);
    }

    .panel-section.collapsible[data-collapsed="true"] .section-content {
        max-height: 0;
    }

    .panel-section.collapsible[data-collapsed="true"] .toggle-icon {
        transform: rotate(-90deg);
    }

    .section-toggle {
        cursor: pointer;
        user-select: none;
    }

    .toggle-icon {
        margin-left: auto;
        transition: transform var(--duration-short);
    }

    /* ==========================================================================
       CHIP GROUP - Layer Selection
       ========================================================================== */

    .chip-group {
        display: flex;
        gap: var(--space-sm);
        overflow-x: auto;
        padding: var(--space-xs) 0;
        margin: 0 calc(-1 * var(--space-md));
        padding-left: var(--space-md);
        padding-right: var(--space-md);
        scroll-snap-type: x mandatory;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
    }

    .chip-group::-webkit-scrollbar {
        display: none;
    }

    .chip-group-wrap {
        flex-wrap: wrap;
        overflow-x: visible;
        margin: 0;
        padding-left: 0;
        padding-right: 0;
    }

    /* Gap 4: Group labels for parameter chips */
    .chip-group-label {
        display: block;
        width: 100%;
        font-size: 10px;
        font-weight: 600;
        text-transform: uppercase;
        letter-spacing: 0.5px;
        color: var(--text-secondary, #888);
        margin: 6px 0 2px 2px;
        line-height: 1;
    }
    .chip-group-label:first-child {
        margin-top: 0;
    }

    /* Gap 12: Geocoding results for mobile */
    .mobile-geo-results {
        margin-top: 8px;
    }
    .mobile-geo-item {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 10px 8px;
        border-bottom: 1px solid var(--border-color, rgba(255,255,255,0.08));
        cursor: pointer;
        border-radius: 8px;
        transition: background 0.15s;
    }
    .mobile-geo-item:hover, .mobile-geo-item:active {
        background: var(--glass-bg, rgba(255,255,255,0.08));
    }
    .mobile-geo-item i {
        color: var(--primary, #1a73e8);
        font-size: 14px;
        flex-shrink: 0;
    }
    .mobile-geo-item strong {
        font-size: 13px;
    }
    .mobile-geo-item small {
        color: var(--text-secondary, #888);
        font-size: 11px;
    }

    .chip {
        display: inline-flex;
        align-items: center;
        gap: var(--space-xs);
        padding: var(--space-sm) var(--space-md);
        background: var(--glass-bg, rgba(255, 255, 255, 0.12));
        backdrop-filter: blur(8px);
        -webkit-backdrop-filter: blur(8px);
        border: 1.5px solid var(--glass-border, rgba(255, 255, 255, 0.15));
        border-radius: 24px;
        font-size: 14px;
        font-weight: 500;
        color: var(--text-primary);
        white-space: nowrap;
        cursor: pointer;
        scroll-snap-align: start;
        transition: all var(--duration-medium) var(--ease-decelerate);
        -webkit-tap-highlight-color: transparent;
        position: relative;
        overflow: hidden;
        flex-shrink: 0;  /* Impedisce compressione - permette scroll orizzontale */
    }

    /* Shimmer effect on tap */
    .chip::before {
        content: '';
        position: absolute;
        top: 0;
        left: -100%;
        width: 100%;
        height: 100%;
        background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent);
        transition: left 0.5s ease;
    }

    .chip:active::before {
        left: 100%;
    }

    .chip:active {
        transform: scale(0.95);
    }

    .chip.selected {
        background: var(--accent-primary);
        color: white;
        border-color: var(--accent-primary);
        box-shadow: 0 4px 16px rgba(26, 115, 232, 0.35);
        transform: translateY(-1px);
    }

    /* Chip disabled - dati non disponibili */
    .chip.chip-disabled,
    .chip:disabled {
        opacity: 0.45;
        cursor: not-allowed;
        background: var(--glass-bg, rgba(128, 128, 128, 0.15));
        border-color: rgba(128, 128, 128, 0.2);
        color: var(--text-secondary, #666);
        pointer-events: auto; /* Permetti hover per mostrare tooltip */
    }

    .chip.chip-disabled:active,
    .chip:disabled:active {
        transform: none;
        box-shadow: none;
    }

    /* Categoria-specific chip colors when selected */
    .chip.selected[data-type="radar"] {
        background: var(--accent-radar);
        border-color: var(--accent-radar);
        box-shadow: var(--glow-radar, 0 4px 20px rgba(0, 230, 118, 0.4));
    }

    .chip.selected[data-type="satellite"] {
        background: var(--accent-satellite);
        border-color: var(--accent-satellite);
        box-shadow: var(--glow-satellite, 0 4px 20px rgba(224, 64, 251, 0.4));
    }

    .chip .chip-icon {
        font-size: 14px;
        transition: transform var(--duration-short) var(--ease-decelerate);
    }

    .chip.selected .chip-icon {
        transform: scale(1.1);
    }

    /* ==========================================================================
       QUICK ACTIONS GRID
       ========================================================================== */

    .quick-actions {
        display: grid;
        grid-template-columns: repeat(4, 1fr);
        gap: var(--space-sm);
    }

    .quick-action {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: var(--space-xs);
        padding: var(--space-md) var(--space-sm);
        background: var(--glass-bg, rgba(255, 255, 255, 0.08));
        backdrop-filter: blur(8px);
        -webkit-backdrop-filter: blur(8px);
        border: 1px solid var(--glass-border, rgba(255, 255, 255, 0.1));
        border-radius: 16px;
        font-size: 11px;
        font-weight: 500;
        color: var(--text-secondary);
        cursor: pointer;
        transition: all var(--duration-medium) var(--ease-decelerate);
        -webkit-tap-highlight-color: transparent;
        position: relative;
        overflow: hidden;
    }

    .quick-action i {
        font-size: 22px;
        color: var(--accent-primary);
        transition: transform var(--duration-short) var(--ease-decelerate);
    }

    .quick-action:active {
        transform: scale(0.92);
        background: rgba(26, 115, 232, 0.15);
        border-color: var(--accent-primary);
    }

    .quick-action:active i {
        transform: scale(1.15);
    }

    /* Ripple effect */
    .quick-action::after {
        content: '';
        position: absolute;
        top: 50%;
        left: 50%;
        width: 0;
        height: 0;
        border-radius: 50%;
        background: rgba(26, 115, 232, 0.3);
        transform: translate(-50%, -50%);
        transition: width 0.4s, height 0.4s, opacity 0.4s;
        opacity: 0;
    }

    .quick-action:active::after {
        width: 150%;
        height: 150%;
        opacity: 1;
    }

    /* ==========================================================================
       TOGGLE ROW & LIST
       ========================================================================== */

    .toggle-row {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: var(--space-sm) 0;
        min-height: var(--touch-target-min);
    }

    .toggle-list {
        display: flex;
        flex-direction: column;
        gap: var(--space-xs);
    }

    /* ==========================================================================
       MOBILE SEARCH BOX
       ========================================================================== */

    .mobile-search-input {
        width: 100%;
        padding: 12px 16px 12px 44px;
        background: var(--bg-secondary);
        border: 1.5px solid transparent;
        border-radius: 12px;
        font-size: 16px; /* Prevent iOS zoom */
        color: var(--text-primary);
        transition: all var(--duration-short);
    }

    .mobile-search-input:focus {
        outline: none;
        border-color: var(--accent-primary);
        background: var(--bg-primary);
    }

    .mobile-search-box {
        position: relative;
    }

    .mobile-search-box::before {
        content: '\f002'; /* FontAwesome search icon */
        font-family: 'Font Awesome 5 Free', 'Font Awesome 6 Free';
        font-weight: 900;
        position: absolute;
        left: 16px;
        top: 50%;
        transform: translateY(-50%);
        color: var(--text-secondary);
        font-size: 14px;
        pointer-events: none;
    }

    /* ==========================================================================
       BACKDROP OVERLAY
       ========================================================================== */

    .sheet-backdrop {
        position: fixed;
        inset: 0;
        background: rgba(0, 0, 0, 0.5);
        z-index: var(--z-sheet-backdrop);
        opacity: 0;
        visibility: hidden;
        transition: opacity var(--duration-medium), visibility var(--duration-medium);
        -webkit-tap-highlight-color: transparent;
        display: block;
    }

    .sheet-backdrop.visible {
        opacity: 1;
        visibility: visible;
    }

    /* ==========================================================================
       MOBILE LAYOUT ADJUSTMENTS
       ========================================================================== */

    /* ==========================================================================
       MOBILE TIMELINE - Floating pill scrubber
       ========================================================================== */

    .tl-bar {
        position: fixed !important;
        left: 16px !important;
        right: 16px !important;
        /* UX95 TASK 4: safe area + breathing space */
        bottom: calc(env(safe-area-inset-bottom, 0px) + var(--safe-bottom, 0px) + 14px) !important;
        height: 48px !important;
        z-index: var(--z-timeline) !important;

        /* Compact pill — centered via margin auto */
        max-width: 160px !important;
        margin: 0 auto !important;

        /* Glass pill — W-CTP TASK 6: lighter blur for mobile performance */
        background: rgba(0, 0, 0, 0.70) !important;
        backdrop-filter: saturate(150%) blur(4px) !important;
        -webkit-backdrop-filter: saturate(150%) blur(4px) !important;
        border: 1px solid rgba(255, 255, 255, 0.12) !important;
        border-radius: 24px !important;
        padding: 0 14px !important;
        padding-bottom: env(safe-area-inset-bottom, 0px) !important;
        gap: 10px !important;
        box-shadow: 0 4px 16px rgba(0,0,0,0.3), 0 1px 3px rgba(0,0,0,0.2) !important;
        overflow: hidden !important;

        /* Hidden by default, shown by JS when animation active */
        opacity: 0 !important;
        pointer-events: none !important;
        transform: translateY(8px) !important;
        transition: opacity 0.25s ease, transform 0.25s ease,
                    max-width 0.35s cubic-bezier(0.32, 0.72, 0, 1) !important;
    }

    /* Always expanded when an animation layer is active */
    .tl-bar.animation-active {
        max-width: 600px !important;
    }

    /* Visible when animation active */
    .tl-bar.animation-active {
        opacity: 1 !important;
        pointer-events: none !important;
        transform: translateY(0) !important;
    }

    .tl-bar.animation-active > * {
        pointer-events: auto;
    }

    /* Hidden when sheet full */
    .tl-bar.sheet-open {
        opacity: 0 !important;
        pointer-events: none !important;
        transform: translateY(20px) !important;
    }

    /* Play button inside pill — 44px touch target */
    .tl-bar .tl-play {
        width: 32px !important;
        height: 32px !important;
        min-width: 32px !important;
        background: rgba(255, 255, 255, 0.15) !important;
        border: none !important;
        border-radius: 50% !important;
        color: white !important;
        font-size: 11px !important;
        /* Expand touch target to 44px without increasing visual size */
        position: relative !important;
    }
    .tl-bar .tl-play::after {
        content: '';
        position: absolute;
        top: -6px; right: -6px; bottom: -6px; left: -6px;
    }
    .tl-bar .tl-play:active { transform: scale(0.9); }

    /* ==========================================================================
       MOBILE LOCATE BUTTON - Floating geolocation
       ========================================================================== */

    .mobile-locate-btn {
        position: fixed;
        right: 12px;
        bottom: calc(var(--safe-bottom) + 16px);
        width: 44px;
        height: 44px;
        background: rgba(255, 255, 255, 0.95);
        border: none;
        border-radius: 50%;
        color: #333;
        font-size: 18px;
        z-index: 970;  /* Above mapLegend (z-legend=960) */
        box-shadow: 0 2px 8px rgba(0,0,0,0.25);
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        transition: all 0.2s ease;
        -webkit-tap-highlight-color: transparent;
    }

    .mobile-locate-btn:active {
        transform: scale(0.9);
        background: rgba(240, 240, 240, 0.95);
    }

    .mobile-locate-btn.locating {
        animation: pulse-locate 1.5s infinite;
    }

    .mobile-locate-btn.located {
        color: #2196F3;
    }

    @keyframes pulse-locate {
        0%, 100% { box-shadow: 0 2px 8px rgba(0,0,0,0.25); }
        50% { box-shadow: 0 2px 16px rgba(33, 150, 243, 0.5); }
    }

    [data-theme="dark"] .mobile-locate-btn {
        background: rgba(50, 50, 50, 0.95);
        color: #fff;
    }

    [data-theme="dark"] .mobile-locate-btn.located {
        color: #64B5F6;
    }

    /* Timestamp — integrated in pill */
    .tl-bar .tl-timestamp {
        gap: 0 !important;
        white-space: nowrap !important;
        flex-direction: row !important;
        align-items: baseline !important;
    }
    .tl-bar .tl-time-row {
        gap: 4px !important;
    }
    .tl-bar .tl-time {
        color: var(--accent-primary, #FFB400) !important;
        font-weight: 700 !important;
        font-size: 16px !important;
        letter-spacing: 0.3px !important; /* UX95 TASK 4: clarity */
    }
    .tl-bar .tl-date {
        color: rgba(255, 255, 255, 0.7) !important;
        font-size: 10px !important;
        display: inline !important;
        margin-left: 4px !important;
    }

    /* Scrubber area mobile — UX95 TASK 4: taller for touch */
    .tl-bar .tl-scrubber {
        height: 40px !important;
    }
    .tl-bar .tl-tick { width: 18px !important; }

    /* Hide elements not needed on mobile pill */
    .tl-bar .tl-speed,
    .tl-bar .follow-realtime-btn {
        display: none !important;
    }

    /* Speed control when visible (during playback) */
    .tl-bar .tl-speed.visible {
        display: flex !important;
        background: rgba(255,255,255,0.15) !important;
        padding: 2px 8px !important;
        border-radius: 10px !important;
        font-size: 11px !important;
        color: white !important;
    }

    /* Adjust map container - NO height restriction, let it be full */
    /* IMPORTANT: z-index auto prevents stacking context that would trap timeline */
    .map-container {
        height: 100% !important;
        z-index: auto !important;
    }

    .map-container .map {
        height: 100% !important;
    }

    /* Hide desktop control panel completely on mobile */
    .control-panel,
    .control-panel.show,
    .control-panel.collapsed {
        display: none !important;
        transform: none !important;
        visibility: hidden !important;
    }

    /* Hide MapLibre zoom controls on mobile (pinch-to-zoom is used instead) */
    .maplibregl-ctrl-top-right .maplibregl-ctrl-group {
        display: none !important;
    }

    /* Adjust legend position - fixed per uscire dal contesto di stacking di .map-overlays */
    .legend-vertical {
        position: fixed !important;
        bottom: calc(var(--safe-bottom) + 12px) !important;
        left: 12px !important;
        right: auto !important;
        max-width: 50px;
        z-index: var(--z-legend) !important;
        transition: bottom 0.25s ease !important;
    }

    /* Mobile header - PREMIUM GRADIENT */
    .app-header {
        height: var(--header-height-mobile);
        padding-top: var(--safe-top);
        z-index: var(--z-header);
        /* === GRADIENT PREMIUM HEADER === */
        background: var(--gradient-header, linear-gradient(180deg, rgba(26,115,232,0.95) 0%, rgba(0,198,255,0.85) 100%)) !important;
        backdrop-filter: saturate(180%) blur(12px);
        -webkit-backdrop-filter: saturate(180%) blur(12px);
        border-bottom: 1px solid rgba(255, 255, 255, 0.15);
        box-shadow: 0 2px 20px rgba(0, 0, 0, 0.15);
    }

    [data-theme="dark"] .app-header {
        background: var(--gradient-header-dark, linear-gradient(180deg, rgba(15,23,42,0.98) 0%, rgba(30,41,59,0.95) 100%)) !important;
        border-bottom: 1px solid rgba(255, 255, 255, 0.08);
    }

    .app-header .header-content {
        padding: 0 12px;
    }

    /* === LOGO ANIMATO HEADER === */
    .header-logo {
        width: 38px;
        height: 38px;
        margin-right: 10px;
        flex-shrink: 0;
        border-radius: 50%;
        /* Animazione pulse sottile */
        animation: logo-breathe 4s ease-in-out infinite;
        /* Glow effect */
        filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.4))
                drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));
        transition: transform 0.3s ease, filter 0.3s ease;
    }

    .header-logo:hover {
        transform: scale(1.1) rotate(5deg);
        filter: drop-shadow(0 0 12px rgba(255, 255, 255, 0.6))
                drop-shadow(0 4px 8px rgba(0, 0, 0, 0.4));
    }

    /* @keyframes logo-breathe è definito globalmente sopra */

    /* Login button mobile - solo icona */
    #loginBtn {
        padding: 8px 12px !important;
        font-size: 14px !important;
    }

    #loginBtn span {
        display: none !important;
    }

    .app-header h1 {
        font-size: 18px;
        font-weight: 700;
        display: flex;
        align-items: center;
        color: white;
        text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
        letter-spacing: -0.5px;
    }

    .app-header h1 .header-title-full {
        display: none;
    }

    .app-header h1 .header-title-short {
        display: inline;
        font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
        background: linear-gradient(135deg, #fff 0%, rgba(255,255,255,0.85) 100%);
        -webkit-background-clip: text;
        -webkit-text-fill-color: transparent;
        background-clip: text;
    }

    /* Hide hamburger menu button on mobile (controls are in bottom sheet) */
    #togglePanelBtn {
        display: none !important;
    }

    /* Hide non-essential header buttons on mobile */
    .app-header .header-actions .btn-secondary:not(#darkModeToggle):not(.geolocate-btn) {
        display: none;
    }

    /* Hide admin-only elements on mobile (header links, coordinates box) */
    /* Exception: keep logout button and bottom sheet admin section visible */
    .app-header .admin-only:not(#logoutBtn),
    .app-header .marco-only,
    #coordinates.admin-only {
        display: none !important;
    }

    /* Adjust header actions gap */
    .app-header .header-actions {
        gap: 6px;
    }

    /* Main content starts below mobile header */
    .app-container main {
        top: var(--header-height-mobile);
        padding-top: var(--safe-top);
    }

    /* Map controls (zoom, compass) positioned above timeline */
    .maplibregl-ctrl-top-right {
        top: calc(var(--header-height-mobile) + var(--safe-top) + 10px) !important;
    }

    .maplibregl-ctrl-bottom-right {
        bottom: calc(var(--tab-bar-height) + var(--timeline-height) + var(--safe-bottom) + 10px) !important;
    }

    .maplibregl-ctrl-bottom-left {
        bottom: calc(var(--tab-bar-height) + var(--timeline-height) + var(--safe-bottom) + 10px) !important;
    }

    /* Loading screen adjustment */
    .loading-screen {
        bottom: calc(var(--tab-bar-height) + var(--timeline-height) + var(--safe-bottom) + 20px);
    }

    /* Attribution smaller on mobile */
    .maplibregl-ctrl-attrib {
        font-size: 9px !important;
    }

    /* Station popup width on mobile */
    .maplibregl-popup-content {
        max-width: calc(100vw - 40px) !important;
        width: auto !important;
    }

    /* Sidebar hidden on mobile (content in bottom sheet) */
    .station-sidebar {
        display: none !important;
    }

    /* ==========================================================================
       FONTI FILTER MOBILE
       ========================================================================== */

    .mobile-fonti-list {
        display: flex;
        flex-direction: column;
        gap: var(--space-xs);
    }

    .mobile-fonte-item {
        display: flex;
        align-items: center;
        gap: var(--space-sm);
        padding: var(--space-sm) 0;
        min-height: var(--touch-target-min);
    }

    .mobile-fonte-item input[type="checkbox"] {
        width: 20px;
        height: 20px;
        accent-color: var(--accent-primary);
    }

    .mobile-fonte-item label {
        flex: 1;
        font-size: 14px;
        color: var(--text-primary);
    }

    .mobile-fonte-item .fonte-count {
        font-size: 12px;
        color: var(--text-secondary);
        background: var(--bg-secondary);
        padding: 2px 8px;
        border-radius: 10px;
    }
}

/* =============================================================================
   DARK MODE OVERRIDES FOR MOBILE UI
   ============================================================================= */

@media (max-width: 768px) {
    [data-theme="dark"] .mobile-tab-bar {
        background: var(--tab-bar-bg);
        border-top-color: var(--divider);
    }

    [data-theme="dark"] .tab-item {
        color: var(--tab-inactive);
    }

    [data-theme="dark"] .tab-item.active {
        color: var(--tab-active);
    }

    /* Dark mode timeline pill */
    [data-theme="dark"] .tl-bar.animation-active {
        background: rgba(15, 23, 42, 0.8) !important;
        border-color: rgba(255, 255, 255, 0.08) !important;
    }

    [data-theme="dark"] .mobile-bottom-sheet {
        background: var(--glass-bg-dark, rgba(15, 23, 42, 0.92));
        border-color: var(--glass-border-dark, rgba(255, 255, 255, 0.08));
        box-shadow: 0 -8px 48px rgba(0, 0, 0, 0.5),
                    inset 0 1px 0 rgba(255, 255, 255, 0.05);
    }

    [data-theme="dark"] .sheet-handle-bar {
        background: rgba(255, 255, 255, 0.2);
    }

    [data-theme="dark"] .mobile-bottom-sheet.dragging .sheet-handle-bar {
        background: var(--accent-primary);
    }

    [data-theme="dark"] .sheet-title {
        color: var(--text-primary);
    }

    [data-theme="dark"] .sheet-close-btn {
        background: rgba(255, 255, 255, 0.08);
        color: var(--text-secondary);
        border: 1px solid rgba(255, 255, 255, 0.1);
    }

    [data-theme="dark"] .sheet-close-btn:active {
        background: rgba(255, 255, 255, 0.15);
    }

    /* Dark mode chip */
    [data-theme="dark"] .chip {
        background: rgba(255, 255, 255, 0.08);
        border-color: rgba(255, 255, 255, 0.12);
    }

    [data-theme="dark"] .chip.selected {
        box-shadow: 0 4px 20px rgba(96, 165, 250, 0.3);
    }

    /* Dark mode quick actions */
    [data-theme="dark"] .quick-action {
        background: rgba(255, 255, 255, 0.05);
        border-color: rgba(255, 255, 255, 0.08);
    }

    [data-theme="dark"] .quick-action i {
        color: var(--tab-active);
    }

    [data-theme="dark"] .quick-action:active {
        background: rgba(96, 165, 250, 0.15);
        border-color: var(--tab-active);
    }

    [data-theme="dark"] .mobile-search-input {
        background: var(--bg-tertiary, #2a2a2a);
        color: var(--text-primary);
    }

    [data-theme="dark"] .mobile-search-input::placeholder {
        color: var(--text-secondary);
    }

    [data-theme="dark"] .section-title {
        color: var(--text-secondary);
    }

    /* === ADMIN LINKS GRID IN BOTTOM SHEET === */
    .admin-links-grid {
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        gap: var(--space-sm);
    }

    .admin-link-card {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: var(--space-xs);
        padding: var(--space-md) var(--space-sm);
        background: var(--bg-secondary, rgba(255,255,255,0.08));
        border: 1px solid var(--divider, rgba(255,255,255,0.1));
        border-radius: 12px;
        font-size: 11px;
        font-weight: 500;
        color: var(--text-secondary, #aaa);
        text-decoration: none;
        text-align: center;
        transition: all var(--duration-short) var(--ease-standard);
        -webkit-tap-highlight-color: transparent;
    }

    .admin-link-card i {
        font-size: 20px;
        color: var(--accent-primary, #4a9eff);
    }

    .admin-link-card:active {
        transform: scale(0.95);
        background: var(--accent-primary);
        color: white;
    }

    .admin-link-card:active i {
        color: white;
    }

    [data-theme="dark"] .admin-link-card {
        background: rgba(255,255,255,0.05);
        border-color: rgba(255,255,255,0.1);
    }

    [data-theme="dark"] .admin-link-card:active {
        background: var(--accent-primary);
    }
}

/* =========================================================================
   KEYBOARD SHORTCUTS - Toast e Help Overlay
   ========================================================================= */

/* Toast notification per feedback shortcuts */
.shortcut-toast {
    position: fixed;
    bottom: 100px;
    left: 50%;
    transform: translateX(-50%) translateY(20px);
    background: rgba(0, 0, 0, 0.85);
    color: white;
    padding: 12px 24px;
    border-radius: 8px;
    font-size: 16px;
    font-weight: 500;
    z-index: 10000;
    opacity: 0;
    transition: all 0.3s ease;
    pointer-events: none;
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
}

.shortcut-toast.visible {
    opacity: 1;
    transform: translateX(-50%) translateY(0);
}

/* Help Overlay */
.keyboard-help-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.7);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 10001;
    backdrop-filter: blur(5px);
    -webkit-backdrop-filter: blur(5px);
}

.keyboard-help-content {
    background: var(--bg-primary, #1a1a2e);
    border-radius: 16px;
    max-width: 600px;
    width: 90%;
    max-height: 80vh;
    overflow: hidden;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
    border: 1px solid rgba(255, 255, 255, 0.1);
}

.keyboard-help-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 20px 24px;
    background: linear-gradient(135deg, #667eea, #764ba2);
    color: white;
}

.keyboard-help-header h3 {
    margin: 0;
    font-size: 20px;
    font-weight: 600;
}

.keyboard-help-close {
    background: rgba(255, 255, 255, 0.2);
    border: none;
    color: white;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    cursor: pointer;
    font-size: 16px;
    transition: background 0.2s;
}

.keyboard-help-close:hover {
    background: rgba(255, 255, 255, 0.3);
}

.keyboard-help-body {
    padding: 20px 24px;
    max-height: 50vh;
    overflow-y: auto;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 20px;
}

.shortcut-category h4 {
    color: var(--accent-primary, #667eea);
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin: 0 0 12px 0;
    padding-bottom: 8px;
    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

.shortcut-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.shortcut-item {
    display: flex;
    align-items: center;
    gap: 12px;
}

.shortcut-item kbd {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 32px;
    height: 28px;
    padding: 0 8px;
    background: linear-gradient(180deg, #3a3a4a, #2a2a3a);
    border: 1px solid rgba(255, 255, 255, 0.15);
    border-radius: 6px;
    color: white;
    font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
    font-size: 12px;
    font-weight: 500;
    box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3);
}

.shortcut-item span {
    color: var(--text-secondary, #b0b0b0);
    font-size: 13px;
}

.keyboard-help-footer {
    padding: 16px 24px;
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    color: var(--text-secondary, #888);
    font-size: 12px;
}

.keyboard-help-footer kbd {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 24px;
    height: 22px;
    padding: 0 6px;
    background: linear-gradient(180deg, #3a3a4a, #2a2a3a);
    border: 1px solid rgba(255, 255, 255, 0.15);
    border-radius: 4px;
    color: white;
    font-family: monospace;
    font-size: 11px;
    margin: 0 4px;
}

/* =========================================================================
   LEGENDA RADAR/SATELLITE
   ========================================================================= */

#mapLegend {
    position: absolute;
    bottom: 64px;
    right: 12px;
    background: rgba(20, 20, 40, 0.88);
    border-radius: 10px;
    padding: 10px 12px;
    z-index: 100;
    min-width: 140px;
    max-width: 340px;
    box-shadow: 0 4px 24px rgba(0, 0, 0, 0.4);
    border: 1px solid rgba(255, 255, 255, 0.12);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    transition: opacity 0.25s ease, transform 0.25s ease;
}

.legend-title {
    font-size: 11px;
    font-weight: 600;
    color: var(--text-primary, white);
    margin-bottom: 8px;
    letter-spacing: 0.3px;
}

/* Badge tipo immagine satellite (desktop legenda) */
.legend-img-type {
    font-size: 9px;
    font-weight: 500;
    padding: 2px 6px;
    border-radius: 4px;
    margin: -4px 0 6px;
    letter-spacing: 0.2px;
}
.legend-img-pct {
    opacity: 0.7;
    font-size: 8px;
}
.legend-img-interpolated {
    background: rgba(255,193,7,0.18);
    color: #ffc107;
}
.legend-img-extrapolated {
    background: rgba(255,152,0,0.18);
    color: #ff9800;
}

/* Badge tipo immagine satellite (mobile strip) */
.strip-img-type {
    position: absolute;
    right: 4px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 8px;
    font-weight: 600;
    padding: 1px 4px;
    border-radius: 2px;
    letter-spacing: 0.2px;
    pointer-events: none;
}
.strip-img-interpolated {
    background: rgba(255,193,7,0.3);
    color: #ffc107;
}
.strip-img-extrapolated {
    background: rgba(255,152,0,0.3);
    color: #ff9800;
}

.legend-gradient {
    height: 12px;
    border-radius: 4px;
    margin-bottom: 6px;
}

.legend-labels {
    display: flex;
    justify-content: space-between;
    font-size: 10px;
    color: var(--text-secondary, #aaa);
}

.legend-item {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 4px;
    font-size: 11px;
}

.legend-color {
    width: 16px;
    height: 16px;
    border-radius: 3px;
    border: 1px solid rgba(255, 255, 255, 0.2);
}

.legend-toggle {
    position: absolute;
    top: 8px;
    right: 8px;
    background: none;
    border: none;
    color: var(--text-secondary);
    cursor: pointer;
    font-size: 12px;
    padding: 2px;
}

.legend-toggle:hover {
    color: var(--text-primary);
}

/* Old gradient backgrounds removed — now using segmented bars via JS */

/* Legenda sezioni */
.legend-section {
    margin-bottom: 12px;
    padding-bottom: 12px;
    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

.legend-section:last-child {
    margin-bottom: 0;
    padding-bottom: 0;
    border-bottom: none;
}

.legend-items {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.legend-desc-toggle {
    display: block;
    width: 100%;
    margin-top: 8px;
    padding: 4px 8px;
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid rgba(255, 255, 255, 0.1);
    border-radius: 4px;
    color: var(--text-secondary);
    font-size: 10px;
    cursor: pointer;
    text-align: left;
    transition: all 0.2s;
}

.legend-desc-toggle:hover {
    background: rgba(255, 255, 255, 0.1);
    color: var(--text-primary);
}

.legend-description {
    display: none;
    margin-top: 8px;
    padding: 8px;
    background: rgba(0, 0, 0, 0.2);
    border-radius: 4px;
}

.legend-description.expanded {
    display: block;
}

.legend-desc-item {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 4px;
    font-size: 10px;
}

.legend-desc-item:last-child {
    margin-bottom: 0;
}

/* === SEGMENTED LEGEND BAR === */
.legend-segments {
    display: flex;
    height: 14px;
    border-radius: 3px;
    overflow: hidden;
    margin-bottom: 4px;
    border: 1px solid rgba(255, 255, 255, 0.08);
    /* Sfondo scuro simile alla mappa — i colori rgba si compongono come sulla mappa */
    background: #1a1a2e;
}

.legend-seg {
    flex: 1;
    min-width: 0;
    border-right: 1px solid rgba(0, 0, 0, 0.25);
}

.legend-seg:last-child {
    border-right: none;
}

.legend-seg-labels {
    display: flex;
    justify-content: space-between;
    padding: 0 1px;
}

.legend-seg-label {
    flex: 1;
    text-align: center;
    font-size: 9px;
    color: rgba(255, 255, 255, 0.65);
    line-height: 1.3;
    min-width: 0;
}

.legend-seg-labels .legend-seg-label:last-child {
    text-align: right;
    flex: none;
    width: auto;
    padding-right: 1px;
}

/* Show only every other label when space is tight */
.legend-seg-labels .legend-seg-label:nth-child(even) {
    /* Visible by default; hidden on mobile if needed */
}

#mapLegend.minimized .legend-content {
    display: none;
}

#mapLegend.minimized {
    min-width: auto;
    padding: 8px;
}

#mapLegend.minimized .legend-toggle {
    position: static;
}

/* === #mapLegend Mobile Overrides === */
@media (max-width: 768px) {
    /* Hide box legend on mobile — replaced by bottom strip */
    #mapLegend {
        display: none !important;
    }
}

/* === Map Legend Strip (mobile only) === */
#mapLegendStrip {
    display: none;
}

@media (max-width: 768px) {
    #mapLegendStrip {
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        z-index: 960;
        display: flex;
        flex-direction: column;
    }

    .legend-strip-row {
        position: relative;
        width: 100%;
        height: 26px;
        display: flex;
        align-items: center;
        /* background-color + background-image set by JS inline */
    }

    .legend-strip-row > span {
        display: inline-block;
        color: #fff;
        font-size: 10px;
        font-weight: 600;
        text-align: center;
        line-height: 26px;
        text-shadow: 0 1px 2px rgba(0, 0, 0, 0.9), 0 0 4px rgba(0, 0, 0, 0.6);
    }

    /* Unit label (e.g. "dBZ") — small overlay top-left */
    .strip-unit {
        position: absolute;
        left: 2px;
        top: 0;
        font-size: 7px;
        font-style: normal;
        font-weight: 600;
        color: rgba(255, 255, 255, 0.5);
        text-shadow: 0 1px 2px rgba(0, 0, 0, 0.9);
        z-index: 1;
        pointer-events: none;
        line-height: 12px;
    }

    /* Attribution row inside the strip */
    .legend-strip-attrib {
        width: 100%;
        text-align: right;
        font-size: 8px;
        line-height: 14px;
        color: rgba(255, 255, 255, 0.5);
        padding: 0 6px;
        background: rgba(10, 10, 20, 0.8);
    }
    .legend-strip-attrib a {
        color: rgba(255, 255, 255, 0.6);
        text-decoration: none;
    }

    /* Hide MapLibre built-in attribution when strip has its own */
    body.has-legend-strip .maplibregl-ctrl-attrib {
        display: none !important;
    }

    /* Push timeline up when strip is visible (26px per legend row + 14px attrib) — UX95 TASK 4 */
    body.has-legend-strip .tl-bar {
        bottom: calc(env(safe-area-inset-bottom, 0px) + var(--safe-bottom, 0px) + 26px * var(--legend-strip-rows, 1) + 14px + 6px) !important;
    }

    /* === Hide redundant mobile elements === */
    .mobile-locate-btn { display: none !important; }
    #legendToggleBtn { display: none !important; }
    #zoomIndicator { display: none !important; }
    .maplibregl-ctrl-scale { display: none !important; }
}

/* =============================================================================
   ANIMATION PRELOADER PROGRESS
   ============================================================================= */

.preload-progress-container {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.7);
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: var(--z-modal, 1200);
    opacity: 0;
    transition: opacity 0.3s ease;
}

.preload-progress-container.visible {
    opacity: 1;
}

.preload-progress-content {
    background: linear-gradient(145deg, #1e293b 0%, #0f172a 100%);
    border-radius: 16px;
    padding: 24px 32px;
    min-width: 320px;
    max-width: 400px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5),
                0 0 40px rgba(33, 150, 243, 0.2);
    border: 1px solid rgba(255, 255, 255, 0.1);
}

.preload-progress-header {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 20px;
}

.preload-icon {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: linear-gradient(135deg, #2196F3, #00BCD4);
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    font-size: 18px;
    animation: preload-pulse 2s ease-in-out infinite;
}

@keyframes preload-pulse {
    0%, 100% { transform: scale(1); opacity: 1; }
    50% { transform: scale(1.05); opacity: 0.9; }
}

.preload-title {
    flex: 1;
    font-size: 16px;
    font-weight: 600;
    color: white;
}

.preload-cancel {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.1);
    border: none;
    color: rgba(255, 255, 255, 0.7);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.2s;
}

.preload-cancel:hover {
    background: rgba(244, 67, 54, 0.3);
    color: #F44336;
}

.preload-progress-bar-wrapper {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 12px;
}

.preload-progress-bar {
    flex: 1;
    height: 8px;
    background: rgba(255, 255, 255, 0.1);
    border-radius: 4px;
    overflow: hidden;
}

.preload-progress-fill {
    height: 100%;
    width: 0%;
    background: linear-gradient(90deg, #2196F3, #00BCD4, #4CAF50);
    background-size: 200% 100%;
    border-radius: 4px;
    transition: width 0.3s ease;
    animation: preload-shimmer 2s linear infinite;
}

@keyframes preload-shimmer {
    0% { background-position: 200% 0; }
    100% { background-position: -200% 0; }
}

.preload-progress-text {
    font-size: 14px;
    font-weight: 600;
    color: #4CAF50;
    min-width: 40px;
    text-align: right;
}

.preload-progress-stats {
    font-size: 12px;
    color: rgba(255, 255, 255, 0.6);
    text-align: center;
}

.preload-progress-stats .preload-speed {
    color: rgba(255, 255, 255, 0.4);
}

/* Mobile adjustments */
@media (max-width: 768px) {
    .preload-progress-content {
        min-width: 280px;
        max-width: calc(100vw - 32px);
        padding: 20px 24px;
    }
}

/* =============================================================================
   SOURCE ATTRIBUTION BADGES
   ============================================================================= */
.source-badge {
    display: inline-flex;
    align-items: center;
    gap: 3px;
    padding: 1px 6px;
    border-radius: 10px;
    font-size: 11px;
    line-height: 1.4;
    white-space: nowrap;
    margin: 1px 0;
}
.source-badge i { font-size: 9px; }
.source-t1 { background: #e8f5e9; color: #2e7d32; }
.source-t2 { background: #e3f2fd; color: #1565c0; }
.source-t3 { background: #f3e5f5; color: #7b1fa2; }
.source-na { color: #999; font-style: italic; font-size: 11px; }

/* Sidebar: sezione fonti dedicata */
.sidebar-sources-section {
    margin-top: 8px;
    padding-top: 8px;
    border-top: 1px solid var(--border-color);
}
.sidebar-sources-label {
    font-weight: 600;
    margin-bottom: 4px;
    font-size: 11px;
    color: var(--text-secondary);
}
.sidebar-sources-label i { width: 14px; color: #666; }
.source-detail-list {
    display: flex;
    flex-direction: column;
    gap: 3px;
}
.source-detail-item {
    display: flex;
    align-items: center;
    gap: 5px;
    font-size: 11.5px;
}
.source-detail-item i { font-size: 10px; }
.source-detail-item .source-name { font-weight: 500; }
.source-detail-item .source-license {
    font-size: 10px;
    padding: 0 5px;
    background: #f5f5f5;
    border-radius: 8px;
    color: #666;
    margin-left: 4px;
}
.source-info-link {
    display: inline-block;
    margin-top: 5px;
    font-size: 10.5px;
    color: #1976d2;
    text-decoration: none;
}
.source-info-link:hover { text-decoration: underline; }

/* Dark mode */
[data-theme="dark"] .source-t1 { background: #1b5e20; color: #a5d6a7; }
[data-theme="dark"] .source-t2 { background: #0d47a1; color: #90caf9; }
[data-theme="dark"] .source-t3 { background: #4a148c; color: #ce93d8; }
[data-theme="dark"] .source-detail-item .source-license { background: #333; color: #aaa; }
[data-theme="dark"] .source-info-link { color: #64b5f6; }
[data-theme="dark"] .sidebar-sources-label i { color: #aaa; }

/* Dark mode: Immersive Sidebar */
[data-theme="dark"] .sidebar-hero {
    background: linear-gradient(135deg, #0d1b2a, #1b263b);
}
[data-theme="dark"] .hero-action-btn {
    background: rgba(255, 255, 255, 0.12);
}
[data-theme="dark"] .hero-action-btn:hover {
    background: rgba(255, 255, 255, 0.22);
}
[data-theme="dark"] .meteogram-container canvas {
    background: #1e1e2e;
}

/* =============================================================================
   DATA ATTRIBUTION FOOTER (on map, bottom-left)
   ============================================================================= */
.data-attribution {
    position: absolute;
    bottom: 4px;
    left: 4px;
    z-index: 2;
    background: rgba(255, 255, 255, 0.75);
    padding: 2px 6px;
    border-radius: 3px;
    font-size: 10px;
    line-height: 1.3;
    color: #333;
    max-width: 50vw;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    pointer-events: auto;
}
.data-attribution-link {
    margin-left: 4px;
    color: #1565c0;
    text-decoration: none;
    font-weight: 600;
}
.data-attribution-link:hover {
    text-decoration: underline;
}
.attribution-skeleton {
    display: inline-block;
    width: 140px;
    height: 10px;
    vertical-align: middle;
}
[data-theme="dark"] .data-attribution {
    background: rgba(22, 33, 62, 0.8);
    color: #b0bec5;
}
[data-theme="dark"] .data-attribution-link {
    color: #64b5f6;
}
@media (max-width: 768px) {
    .data-attribution {
        font-size: 9px;
        max-width: 70vw;
    }
}

/* ============================================================
   STATION HOVER TOOLTIP
   ============================================================ */
#stationHoverTooltip {
    position: fixed;
    pointer-events: none;
    background: rgba(255, 255, 255, 0.97);
    border: 1px solid #ddd;
    border-radius: 8px;
    padding: 8px 12px;
    font-size: 12px;
    line-height: 1.4;
    box-shadow: 0 4px 16px rgba(0,0,0,0.15);
    z-index: 9999;
    display: none;
    max-width: 260px;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.tooltip-name {
    font-weight: 600;
    font-size: 12px;
    color: #1a1a1a;
    margin-bottom: 4px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 230px;
}
.tooltip-value {
    font-size: 20px;
    font-weight: 700;
    color: #1565c0;
    line-height: 1.2;
}
.tooltip-unit {
    font-size: 13px;
    font-weight: 400;
    color: #666;
}
.tooltip-time {
    font-size: 11px;
    color: #888;
    margin-top: 2px;
}
.tooltip-source {
    font-size: 10px;
    color: #999;
    margin-top: 3px;
    border-top: 1px solid #eee;
    padding-top: 3px;
}
.tooltip-qc-fail {
    display: inline-block;
    background: #fff3e0;
    color: #e65100;
    font-size: 10px;
    padding: 1px 5px;
    border-radius: 8px;
    margin-left: 4px;
}
.tooltip-locked {
    color: #999;
    font-style: italic;
    font-size: 13px;
}
.tooltip-no-data {
    color: #bbb;
    font-style: italic;
    font-size: 12px;
}
/* Dark mode */
[data-theme="dark"] #stationHoverTooltip {
    background: rgba(30, 41, 59, 0.97);
    border-color: #475569;
    box-shadow: 0 4px 16px rgba(0,0,0,0.4);
}
[data-theme="dark"] .tooltip-name { color: #e2e8f0; }
[data-theme="dark"] .tooltip-value { color: #60a5fa; }
[data-theme="dark"] .tooltip-unit { color: #94a3b8; }
[data-theme="dark"] .tooltip-time { color: #64748b; }
[data-theme="dark"] .tooltip-source { color: #64748b; border-top-color: #334155; }
[data-theme="dark"] .tooltip-qc-fail { background: #431407; color: #fb923c; }

/* ============================================================
   SKELETON LOADING
   ============================================================ */
@keyframes skeleton-shimmer {
    0% { background-position: -200% 0; }
    100% { background-position: 200% 0; }
}

.skeleton {
    background: linear-gradient(90deg, #e0e0e0 25%, #f0f0f0 50%, #e0e0e0 75%);
    background-size: 200% 100%;
    animation: skeleton-shimmer 1.5s ease-in-out infinite;
    border-radius: 4px;
}

/* Skeleton per la lista fonti dati */
.fonte-skeleton-item {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 0;
}
.fonte-skeleton-toggle {
    width: 36px;
    height: 20px;
    border-radius: 10px;
}
.fonte-skeleton-text {
    height: 14px;
    flex: 1;
}
.fonte-skeleton-count {
    width: 28px;
    height: 14px;
}

/* Overlay stazioni loading sulla mappa */
.map-stations-loading {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 12px;
    z-index: 400;
    pointer-events: none;
    transition: opacity 0.4s ease;
}
.map-stations-loading.hidden {
    opacity: 0;
}
.map-stations-loading-dots {
    display: flex;
    gap: 6px;
}
.map-stations-loading-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #1565c0;
    animation: station-dot-pulse 1.4s ease-in-out infinite;
}
.map-stations-loading-dot:nth-child(2) { animation-delay: 0.2s; }
.map-stations-loading-dot:nth-child(3) { animation-delay: 0.4s; }
@keyframes station-dot-pulse {
    0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
    40% { transform: scale(1); opacity: 1; }
}
.map-stations-loading-text {
    font-size: 12px;
    color: #666;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    background: rgba(255,255,255,0.85);
    padding: 4px 12px;
    border-radius: 12px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.map-stations-loading-subtext {
    font-size: 10px;
    color: #999;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    text-align: center;
    margin-top: -8px;
}

/* Dark mode skeleton */
[data-theme="dark"] .skeleton {
    background: linear-gradient(90deg, #334155 25%, #475569 50%, #334155 75%);
    background-size: 200% 100%;
    animation: skeleton-shimmer 1.5s ease-in-out infinite;
}
[data-theme="dark"] .map-stations-loading-dot {
    background: #60a5fa;
}
[data-theme="dark"] .map-stations-loading-text {
    color: #94a3b8;
    background: rgba(30, 41, 59, 0.85);
}
[data-theme="dark"] .map-stations-loading-subtext {
    color: #666;
}

/* =============================================================================
   DATA FRESHNESS INDICATOR IN TOOLTIP
   ============================================================================= */
.tooltip-freshness {
    font-size: 10px;
    padding: 1px 6px;
    border-radius: 3px;
    margin-top: 2px;
    display: inline-block;
}
.tooltip-freshness.fresh { background: rgba(76,175,80,0.25); color: #4CAF50; }
.tooltip-freshness.recent { background: rgba(255,193,7,0.25); color: #F9A825; }
.tooltip-freshness.stale { background: rgba(120,144,156,0.25); color: #546E7A; }
.tooltip-freshness.old { background: rgba(176,190,197,0.25); color: #78909C; }

[data-theme="dark"] .tooltip-freshness.fresh { background: rgba(76,175,80,0.3); color: #81C784; }
[data-theme="dark"] .tooltip-freshness.recent { background: rgba(255,193,7,0.3); color: #FFD54F; }
[data-theme="dark"] .tooltip-freshness.stale { background: rgba(120,144,156,0.3); color: #90A4AE; }
[data-theme="dark"] .tooltip-freshness.old { background: rgba(176,190,197,0.3); color: #B0BEC5; }

/* =============================================================================
   INTERPOLATED DATA SECTION IN SIDEBAR
   ============================================================================= */
#interpolatedSection h4 {
    color: var(--primary-color);
    margin-bottom: 12px;
}

.interp-time {
    font-size: 12px;
    color: var(--text-secondary);
    margin-bottom: 10px;
    padding: 6px 10px;
    background: rgba(33, 150, 243, 0.08);
    border-radius: 6px;
    border-left: 3px solid var(--primary-color);
}

.interp-params-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.interp-param-row {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 6px 8px;
    border-radius: 4px;
    background: var(--bg-secondary);
}

.interp-param-name {
    font-weight: 600;
    font-size: 12px;
    min-width: 40px;
    color: var(--text-primary);
}

.interp-param-value {
    font-size: 14px;
    font-weight: 500;
    min-width: 70px;
}

.interp-param-meta {
    display: flex;
    gap: 4px;
    flex-wrap: wrap;
    margin-left: auto;
}

.interp-confidence {
    font-size: 10px;
    font-weight: 600;
    padding: 1px 5px;
    border-radius: 3px;
}
.interp-confidence.high { background: rgba(76,175,80,0.2); color: #4CAF50; }
.interp-confidence.medium { background: rgba(255,193,7,0.2); color: #F57F17; }
.interp-confidence.low { background: rgba(244,67,54,0.2); color: #E53935; }

.interp-badge {
    font-size: 9px;
    padding: 1px 5px;
    border-radius: 3px;
    background: rgba(0,0,0,0.06);
    color: var(--text-secondary);
}
.interp-badge.extrap {
    background: rgba(255,152,0,0.2);
    color: #E65100;
}

[data-theme="dark"] .interp-param-row { background: rgba(255,255,255,0.05); }
[data-theme="dark"] .interp-time { background: rgba(33,150,243,0.15); }
[data-theme="dark"] .interp-badge { background: rgba(255,255,255,0.08); }
[data-theme="dark"] .interp-confidence.high { background: rgba(76,175,80,0.3); color: #81C784; }
[data-theme="dark"] .interp-confidence.medium { background: rgba(255,193,7,0.3); color: #FFD54F; }
[data-theme="dark"] .interp-confidence.low { background: rgba(244,67,54,0.3); color: #EF5350; }
[data-theme="dark"] .interp-badge.extrap { background: rgba(255,152,0,0.3); color: #FFB74D; }

/* =============================================================================
   CONFRONTO STAZIONI (Shift+click)
   ============================================================================= */

.comparison-panel {
    position: fixed;
    bottom: 0;
    left: var(--panel-width);
    right: 0;
    z-index: 1500;
    background: var(--card-bg, #fff);
    border-top: 1px solid var(--border-color, #e0e0e0);
    box-shadow: 0 -4px 16px rgba(0,0,0,0.12);
    max-height: 45vh;
    display: flex;
    flex-direction: column;
    transition: max-height 0.3s ease;
}
.comparison-panel.collapsed {
    max-height: 44px;
    overflow: hidden;
}

.comparison-header {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 8px 16px;
    min-height: 44px;
    border-bottom: 1px solid var(--border-color, #e0e0e0);
    flex-shrink: 0;
}

.comparison-title {
    font-weight: 600;
    font-size: 13px;
    white-space: nowrap;
    display: flex;
    align-items: center;
    gap: 8px;
    color: var(--text-primary);
}
.comparison-title i {
    color: #667eea;
}

.comparison-count {
    font-size: 11px;
    font-weight: 500;
    background: rgba(102,126,234,0.12);
    color: #667eea;
    padding: 2px 8px;
    border-radius: 10px;
}

.comparison-chips {
    display: flex;
    gap: 6px;
    flex: 1;
    overflow-x: auto;
    scrollbar-width: none;
    -ms-overflow-style: none;
    padding: 2px 0;
}
.comparison-chips::-webkit-scrollbar { display: none; }

.comparison-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 3px 10px 3px 8px;
    border: 2px solid;
    border-radius: 16px;
    font-size: 12px;
    font-weight: 500;
    white-space: nowrap;
    background: var(--card-bg, #fff);
    color: var(--text-primary);
}

.comparison-chip-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    flex-shrink: 0;
}

.comparison-chip-remove {
    background: none;
    border: none;
    cursor: pointer;
    padding: 0 0 0 2px;
    font-size: 10px;
    color: var(--text-secondary);
    opacity: 0.6;
    transition: opacity 0.15s;
}
.comparison-chip-remove:hover {
    opacity: 1;
    color: #ef5350;
}

.comparison-actions {
    display: flex;
    gap: 4px;
    flex-shrink: 0;
}

.comparison-btn {
    background: none;
    border: none;
    cursor: pointer;
    width: 28px;
    height: 28px;
    border-radius: 6px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--text-secondary);
    transition: background 0.15s, color 0.15s;
}
.comparison-btn:hover {
    background: rgba(0,0,0,0.06);
    color: var(--text-primary);
}

.comparison-body {
    overflow-y: auto;
    padding: 12px 16px;
    flex: 1;
}

.comparison-charts {
    display: flex;
    gap: 12px;
    overflow-x: auto;
    padding-bottom: 4px;
    scrollbar-width: thin;
}

.comparison-chart-card {
    min-width: 280px;
    background: var(--bg-secondary, #f0f2f5);
    border-radius: 8px;
    padding: 8px;
    flex-shrink: 0;
}

.comparison-chart-title {
    font-size: 11px;
    font-weight: 600;
    color: var(--text-secondary);
    margin-bottom: 4px;
    text-transform: uppercase;
    letter-spacing: 0.3px;
}

.comparison-chart-canvas {
    display: block;
    border-radius: 4px;
}

.comparison-loading, .comparison-empty {
    text-align: center;
    padding: 20px;
    color: var(--text-secondary);
    font-size: 13px;
}

.comparison-footer {
    padding: 8px 0 0;
    text-align: right;
}

/* Dark theme */
[data-theme="dark"] .comparison-panel {
    background: var(--card-bg, #1e1e2e);
    border-top-color: rgba(255,255,255,0.08);
    box-shadow: 0 -4px 16px rgba(0,0,0,0.4);
}
[data-theme="dark"] .comparison-header {
    border-bottom-color: rgba(255,255,255,0.08);
}
[data-theme="dark"] .comparison-chip {
    background: rgba(255,255,255,0.05);
}
[data-theme="dark"] .comparison-btn:hover {
    background: rgba(255,255,255,0.08);
}
[data-theme="dark"] .comparison-chart-card {
    background: rgba(255,255,255,0.04);
}

/* Mobile */
@media (max-width: 768px) {
    .comparison-panel {
        left: 0;
        bottom: 12px; /* Fullscreen mobile, no tab bar */
        max-height: 40vh;
    }
    .comparison-header {
        padding: 6px 12px;
        gap: 8px;
        flex-wrap: wrap;
    }
    .comparison-chips {
        order: 3;
        width: 100%;
        flex: unset;
    }
    .comparison-body {
        padding: 8px 12px;
    }
    .comparison-charts {
        flex-direction: column;
    }
    .comparison-chart-card {
        min-width: 100%;
    }
}

/* ==========================================================================
   FASE 5 — Quick Layer Toggles (Bottom Sheet)
   ========================================================================== */
.sheet-quick-toggles {
    display: flex; gap: 8px; padding: 0 16px 8px;
    overflow-x: auto; -webkit-overflow-scrolling: touch; flex-shrink: 0;
}
.quick-toggle {
    display: flex; align-items: center; gap: 5px;
    padding: 6px 12px; border-radius: 20px;
    border: 1.5px solid var(--divider, #e0e0e0); background: transparent;
    color: var(--text-secondary, #666); font-size: 12px; font-weight: 500;
    white-space: nowrap; cursor: pointer; transition: all 0.2s;
    -webkit-tap-highlight-color: transparent;
}
.quick-toggle.active, .quick-toggle[aria-pressed="true"] {
    background: var(--accent-primary, #1a73e8); color: #fff;
    border-color: var(--accent-primary, #1a73e8);
}
.quick-toggle i { font-size: 13px; }
.quick-toggle:active { transform: scale(0.95); }

/* ==========================================================================
   FASE 5 — Peek Content (nearby station + search)
   ========================================================================== */
.sheet-peek-content { padding: 0 16px 8px; }
.peek-search-bar {
    display: flex; align-items: center; gap: 8px;
    background: var(--bg-tertiary, #f5f5f5); border-radius: 12px; padding: 10px 14px; margin-bottom: 8px;
}
.peek-search-bar i { color: var(--text-muted, #999); font-size: 14px; }
.peek-search-bar input {
    flex: 1; border: none; background: transparent; color: var(--text-primary, #333);
    font-size: 15px; outline: none;
}
[data-theme="dark"] .peek-search-bar { background: var(--bg-tertiary, #2a2a2a); }
.peek-station-card {
    display: flex; align-items: center; justify-content: space-between;
    padding: 10px 14px; background: var(--bg-secondary, #f9f9f9); border-radius: 12px; cursor: pointer;
}
.peek-station-card:empty { display: none; }
.peek-name { font-size: 13px; font-weight: 600; }
.peek-value { font-size: 22px; font-weight: 700; color: var(--accent-primary, #1a73e8); }
.peek-meta { font-size: 11px; color: var(--text-muted, #999); }

/* Hide quick toggles and peek on desktop */
@media (min-width: 769px) {
    .sheet-quick-toggles, .sheet-peek-content { display: none !important; }
}

/* =============================================================================
   DESKTOP FEATURE PARITY — Gap 1, 2, 3
   ============================================================================= */

/* Gap 1: Geolocation button states */
#geolocateBtn { transition: color 0.3s, background-color 0.3s; }
#geolocateBtn.locating { animation: pulse-geolocate 1.5s infinite; }
#geolocateBtn.located { color: #2196F3; }
[data-theme="dark"] #geolocateBtn.located { color: #64b5f6; }
@keyframes pulse-geolocate {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.4; }
}

/* Gap 2: Desktop Quick Toggles (floating on map) */
.desktop-quick-toggles {
    position: absolute;
    top: 12px;
    left: 12px;
    display: flex;
    gap: 6px;
    z-index: 10;
    pointer-events: auto;
}
.dqt-btn {
    width: 38px;
    height: 38px;
    border-radius: 8px;
    border: 1px solid rgba(255,255,255,0.15);
    background: rgba(30,30,50,0.7);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    color: rgba(255,255,255,0.7);
    cursor: pointer;
    transition: all 0.2s;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 15px;
    padding: 0;
}
.dqt-btn.active {
    background: var(--accent-primary, #1a73e8);
    color: #fff;
    border-color: transparent;
    box-shadow: 0 2px 8px rgba(26,115,232,0.4);
}
.dqt-btn:hover { background: rgba(50,50,80,0.85); }
.dqt-btn.active:hover { background: #1565c0; }

/* Hide desktop quick toggles on mobile (mobile uses bottom sheet toggles) */
@media (max-width: 768px) {
    .desktop-quick-toggles { display: none !important; }
}

/* Gap 3: Station Search */
.station-search-container {
    position: relative;
    display: flex;
    align-items: center;
}
.station-search-container .form-control {
    padding-right: 32px;
}
.search-clear-btn {
    position: absolute;
    right: 8px;
    background: none;
    border: none;
    color: rgba(255,255,255,0.5);
    cursor: pointer;
    padding: 4px;
    font-size: 13px;
    line-height: 1;
    transition: color 0.2s;
}
.search-clear-btn:hover {
    color: rgba(255,255,255,0.8);
}
[data-theme="light"] .search-clear-btn { color: rgba(0,0,0,0.4); }
[data-theme="light"] .search-clear-btn:hover { color: rgba(0,0,0,0.7); }

/* =============================================================================
   IMMERSIVE UI — Desktop Only (≥769px)
   All conditioned on body.ui-immersive — without the class, everything stays classic.
   Mobile (≤768px) NEVER gets .ui-immersive so these rules never apply on mobile.
   ============================================================================= */

/* --- Glass variable used throughout immersive UI --- */
:root {
    --ui-glass: rgba(0, 0, 0, 0.55);
    --ui-glass-border: rgba(255, 255, 255, 0.1);
    --ui-glass-blur: 20px;
    --ui-radius: 16px;
    --ui-sidebar-w: 72px;
    --ui-transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
[data-theme="light"] {
    --ui-glass: rgba(255, 255, 255, 0.75);
    --ui-glass-border: rgba(0, 0, 0, 0.08);
}

/* --- All immersive components hidden by default --- */
.floating-logo, .floating-actions, .floating-search,
.param-sidebar, .layer-settings-panel { display: none; }

/* --- Desktop: hide classic layout immediately (no FOUC) --- */
@media (min-width: 769px) {
    .app-header { display: none !important; }
    .control-panel { display: none !important; }
    .desktop-quick-toggles { display: none !important; }
    .floating-logo { display: flex; }
    .floating-actions { display: flex; }
    .floating-search { display: flex; }
    .param-sidebar { display: flex; }
}

/* Legacy selectors kept for JS compatibility */
body.ui-immersive .floating-logo { display: flex; }
body.ui-immersive .floating-actions { display: flex; }
body.ui-immersive .floating-search { display: flex; }
body.ui-immersive .param-sidebar { display: flex; }

body.ui-immersive .app-header { display: none !important; }
body.ui-immersive .control-panel { display: none !important; }
body.ui-immersive .desktop-quick-toggles { display: none !important; }

/* In immersive mode, tl-bar uses pill style via CSS (no hide needed) */


/* --- Mobile override: immersive UI --- */
@media (max-width: 768px) {
    /* Hide desktop immersive components on mobile */
    body.ui-immersive .floating-logo,
    body.ui-immersive .floating-actions,
    body.ui-immersive .floating-search,
    body.ui-immersive .param-sidebar,
    body.ui-immersive .layer-settings-panel { display: none !important; }
    body.ui-immersive .desktop-quick-toggles { display: none !important; }

    /* === MOBILE: Fullscreen immersive map === */
    .app-header { display: none !important; }
    .control-panel { display: none !important; }
    .mobile-tab-bar { display: none !important; }

    /* Map fullscreen */
    .map-container {
        top: 0 !important;
        height: 100dvh !important;
    }
    .map-container .map {
        height: 100% !important;
    }

    /* MapLibre controls: adjust for no header */
    .maplibregl-ctrl-top-right {
        top: 64px !important;
    }
    .maplibregl-ctrl-top-left {
        top: 64px !important;
    }
}

/* =============================================================================
   FLOATING LOGO (centered top)
   ============================================================================= */
.floating-logo {
    position: fixed;
    top: 16px;
    left: 50%;
    transform: translateX(-50%);
    z-index: 1100;
    align-items: center;
    gap: 0;
    flex-direction: column;
    pointer-events: auto;
}
.floating-logo a {
    width: 52px;
    height: 52px;
    border-radius: 50%;
    background: var(--ui-glass);
    backdrop-filter: blur(var(--ui-glass-blur));
    -webkit-backdrop-filter: blur(var(--ui-glass-blur));
    border: 1px solid var(--ui-glass-border);
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 4px 20px rgba(0,0,0,0.3);
    transition: transform 0.3s, box-shadow 0.3s;
}
.floating-logo a:hover {
    transform: scale(1.08);
    box-shadow: 0 6px 28px rgba(0,0,0,0.4);
}
.floating-logo-img {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    animation: logo-breathe 4s ease-in-out infinite;
}
.floating-live-badge {
    font-size: 9px;
    font-weight: 700;
    color: #fff;
    background: #4caf50;
    padding: 1px 6px;
    border-radius: 6px;
    margin-top: 4px;
    letter-spacing: 0.5px;
    text-transform: uppercase;
    animation: status-pulse 2s ease-in-out infinite;
}

/* =============================================================================
   FLOATING SEARCH (top-left)
   ============================================================================= */
.floating-search {
    position: fixed;
    top: 16px;
    left: 16px;
    z-index: 1100;
    align-items: center;
    background: var(--ui-glass);
    backdrop-filter: blur(var(--ui-glass-blur));
    -webkit-backdrop-filter: blur(var(--ui-glass-blur));
    border: 1px solid var(--ui-glass-border);
    border-radius: 22px;
    padding: 0 16px;
    height: 44px;
    width: 300px;
    gap: 10px;
    box-shadow: 0 4px 20px rgba(0,0,0,0.2);
    transition: width var(--ui-transition), box-shadow var(--ui-transition);
}
.floating-search:focus-within {
    width: 380px;
    box-shadow: 0 6px 28px rgba(0,0,0,0.35);
}
.floating-search-icon {
    color: rgba(255,255,255,0.6);
    font-size: 14px;
    flex-shrink: 0;
}
[data-theme="light"] .floating-search-icon { color: rgba(0,0,0,0.45); }
.floating-search-input {
    flex: 1;
    border: none;
    background: transparent;
    color: #fff;
    font-size: 14px;
    outline: none;
}
.floating-search-input::placeholder { color: rgba(255,255,255,0.5); }
[data-theme="light"] .floating-search-input { color: #212121; }
[data-theme="light"] .floating-search-input::placeholder { color: rgba(0,0,0,0.4); }
.floating-search-suggestions {
    position: absolute;
    top: 52px;
    left: 0;
    right: 0;
    background: var(--ui-glass);
    backdrop-filter: blur(var(--ui-glass-blur));
    -webkit-backdrop-filter: blur(var(--ui-glass-blur));
    border: 1px solid var(--ui-glass-border);
    border-radius: var(--ui-radius);
    max-height: 300px;
    overflow-y: auto;
    display: none;
    box-shadow: 0 8px 32px rgba(0,0,0,0.3);
}
.floating-search-suggestions.show { display: block; }
.floating-search-suggestions .suggestion-item {
    padding: 10px 16px;
    cursor: pointer;
    color: #fff;
    font-size: 13px;
    border-bottom: 1px solid rgba(255,255,255,0.06);
    transition: background 0.15s;
}
.floating-search-suggestions .suggestion-item:hover,
.floating-search-suggestions .suggestion-item.selected {
    background: rgba(255,255,255,0.1);
}
[data-theme="light"] .floating-search-suggestions .suggestion-item { color: #212121; }
[data-theme="light"] .floating-search-suggestions .suggestion-item:hover { background: rgba(0,0,0,0.06); }

/* =============================================================================
   FLOATING ACTIONS (top-right)
   ============================================================================= */
.floating-actions {
    position: fixed;
    top: 16px;
    right: calc(var(--ui-sidebar-w) + 16px);
    z-index: 1100;
    align-items: center;
    gap: 2px;
    background: var(--ui-glass);
    backdrop-filter: blur(var(--ui-glass-blur));
    -webkit-backdrop-filter: blur(var(--ui-glass-blur));
    border: 1px solid var(--ui-glass-border);
    border-radius: 22px;
    padding: 4px 6px;
    box-shadow: 0 4px 20px rgba(0,0,0,0.2);
}
.fa-btn {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    border: none;
    background: transparent;
    color: rgba(255,255,255,0.8);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    transition: background 0.2s, color 0.2s;
}
.fa-btn:hover {
    background: rgba(255,255,255,0.12);
    color: #fff;
}
[data-theme="light"] .fa-btn { color: rgba(0,0,0,0.6); }
[data-theme="light"] .fa-btn:hover { background: rgba(0,0,0,0.08); color: #000; }
.fa-auth-slot { display: none; }
body.ui-immersive .fa-auth-slot { display: block; }
.fa-auth-wrapper { position: relative; }
.fa-auth-dropdown {
    display: none;
    position: absolute;
    top: 100%;
    right: 0;
    margin-top: 6px;
    min-width: 180px;
    background: rgba(20, 30, 55, 0.95);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    border-radius: 10px;
    padding: 8px 0;
    box-shadow: 0 8px 32px rgba(0,0,0,0.4);
    z-index: 1100;
}
.fa-auth-wrapper.open .fa-auth-dropdown { display: block; }
.fa-auth-dropdown-name {
    padding: 8px 14px;
    font-weight: 600;
    color: #fff;
    font-size: 13px;
    border-bottom: 1px solid rgba(255,255,255,0.1);
    margin-bottom: 4px;
}
.fa-auth-dropdown a, .fa-auth-dropdown button {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
    padding: 7px 14px;
    color: rgba(255,255,255,0.85);
    font-size: 13px;
    background: none;
    border: none;
    cursor: pointer;
    text-decoration: none;
    white-space: nowrap;
}
.fa-auth-dropdown a:hover, .fa-auth-dropdown button:hover {
    background: rgba(255,255,255,0.1);
    color: #fff;
}
.fa-auth-dropdown hr {
    border: none;
    border-top: 1px solid rgba(255,255,255,0.1);
    margin: 4px 0;
}
[data-theme="light"] .fa-auth-dropdown {
    background: rgba(255, 255, 255, 0.95);
    box-shadow: 0 8px 32px rgba(0,0,0,0.15);
}
[data-theme="light"] .fa-auth-dropdown-name { color: #212121; }
[data-theme="light"] .fa-auth-dropdown a,
[data-theme="light"] .fa-auth-dropdown button { color: rgba(0,0,0,0.75); }
[data-theme="light"] .fa-auth-dropdown a:hover,
[data-theme="light"] .fa-auth-dropdown button:hover { background: rgba(0,0,0,0.06); color: #000; }
[data-theme="light"] .fa-auth-dropdown hr { border-top-color: rgba(0,0,0,0.1); }

/* =============================================================================
   PARAMETER SIDEBAR (right, 72px)
   ============================================================================= */
.param-sidebar {
    position: fixed;
    top: 0;
    right: 0;
    width: var(--ui-sidebar-w);
    height: 100vh;
    background: transparent;
    border: none;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    box-shadow: none;
    gap: 0;
    padding: 0;
    pointer-events: none;
}
.param-sidebar-items,
.param-sidebar-extra {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    padding: 6px 0;
    pointer-events: auto;
}
.ps-divider {
    width: 28px;
    height: 1px;
    background: rgba(255,255,255,0.2);
    margin: 2px 0;
}
[data-theme="light"] .ps-divider { background: rgba(0,0,0,0.1); }
.ps-btn {
    width: 46px;
    height: 46px;
    border-radius: 50%;
    border: 1px solid rgba(255,255,255,0.12);
    background: rgba(0,0,0,0.45);
    backdrop-filter: blur(16px) saturate(1.2);
    -webkit-backdrop-filter: blur(16px) saturate(1.2);
    color: rgba(255,255,255,0.9);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 17px;
    transition: all 0.25s;
    position: relative;
    box-shadow: 0 2px 8px rgba(0,0,0,0.25);
}
.ps-btn:hover {
    background: rgba(0,0,0,0.55);
    border-color: rgba(255,255,255,0.25);
    color: #fff;
    transform: scale(1.08);
    box-shadow: 0 4px 14px rgba(0,0,0,0.35);
}
[data-theme="light"] .ps-btn {
    background: rgba(255,255,255,0.75);
    backdrop-filter: blur(16px);
    -webkit-backdrop-filter: blur(16px);
    border-color: rgba(0,0,0,0.08);
    color: rgba(0,0,0,0.65);
    box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
[data-theme="light"] .ps-btn:hover {
    background: rgba(255,255,255,0.88);
    border-color: rgba(0,0,0,0.15);
    color: rgba(0,0,0,0.85);
    box-shadow: 0 4px 14px rgba(0,0,0,0.15);
}
.ps-btn.active {
    background: var(--ps-color, #2196F3);
    color: #fff;
    border-color: rgba(255,255,255,0.3);
    box-shadow: 0 0 16px color-mix(in srgb, var(--ps-color, #2196F3) 50%, transparent);
    transform: scale(1.1);
}
[data-theme="light"] .ps-btn.active {
    color: #fff;
    border-color: rgba(0,0,0,0.1);
}
/* Tooltip */
.ps-tooltip {
    position: absolute;
    right: calc(100% + 10px);
    top: 50%;
    transform: translateY(-50%);
    background: rgba(0,0,0,0.85);
    color: #fff;
    font-size: 12px;
    font-weight: 500;
    padding: 4px 10px;
    border-radius: 6px;
    white-space: nowrap;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.2s;
}
.ps-btn:hover .ps-tooltip { opacity: 1; }
[data-theme="light"] .ps-tooltip { background: rgba(50,50,50,0.9); }

/* Wind mode PRO pill */
.wind-mode-pill {
    position: absolute;
    right: calc(100% + 6px);
    width: auto;
    height: 24px;
    padding: 0 8px;
    border: 1px solid rgba(0, 176, 255, 0.4);
    border-radius: 12px;
    background: rgba(0, 176, 255, 0.12);
    backdrop-filter: blur(8px);
    color: rgba(0, 176, 255, 0.7);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.5px;
    cursor: pointer;
    transition: all 0.2s ease;
    white-space: nowrap;
    min-width: 44px;
    min-height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
}
.wind-mode-pill[aria-pressed="true"] {
    background: rgba(0, 176, 255, 0.25);
    border-color: #00B0FF;
    color: #00B0FF;
    box-shadow: 0 0 8px rgba(0, 176, 255, 0.3);
}
.wind-mode-pill:hover {
    background: rgba(0, 176, 255, 0.3);
    color: #00B0FF;
}
[data-theme="light"] .wind-mode-pill {
    background: rgba(0, 140, 210, 0.1);
    border-color: rgba(0, 140, 210, 0.3);
    color: rgba(0, 140, 210, 0.7);
}
[data-theme="light"] .wind-mode-pill[aria-pressed="true"] {
    background: rgba(0, 140, 210, 0.2);
    border-color: #008CD2;
    color: #008CD2;
}
/* Wind badge "10 m" inside PRO pill — visible only when PRO active */
.wind-badge {
    display: none;
    font-weight: 600;
    letter-spacing: -0.3px;
    align-items: baseline;
    gap: 2px;
    margin-left: 5px;
}
.wind-mode-pill[aria-pressed="true"] .wind-badge {
    display: inline-flex;
}
.wind-height-value {
    font-size: 13px;
}
.wind-height-unit {
    font-size: 11px;
    opacity: 0.85;
}
.wind-separator {
    opacity: 0.5;
    margin: 0 4px;
}
.wind-quality {
    font-size: 11px;
    opacity: 0.75;
}

/* Param sidebar flyout submenu */
.ps-submenu {
    position: fixed;
    right: calc(var(--ui-sidebar-w) + 8px);
    display: flex;
    align-items: center;
    opacity: 0;
    transform: translateX(10px);
    transition: opacity 0.2s, transform 0.2s;
    pointer-events: none;
    z-index: 1051;
}
.ps-submenu.open {
    opacity: 1;
    transform: translateX(0);
    pointer-events: auto;
}
.ps-submenu-pills {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 8px;
    max-height: 70vh;
    overflow-y: auto;
    background: rgba(0,0,0,0.75);
    backdrop-filter: blur(16px);
    -webkit-backdrop-filter: blur(16px);
    border-radius: 12px;
    border: 1px solid rgba(255,255,255,0.12);
    box-shadow: 0 4px 20px rgba(0,0,0,0.3);
    min-width: 120px;
}
[data-theme="light"] .ps-submenu-pills {
    background: rgba(255,255,255,0.9);
    border-color: rgba(0,0,0,0.08);
    box-shadow: 0 4px 20px rgba(0,0,0,0.12);
}
.ps-pill {
    height: 30px;
    padding: 0 14px;
    border-radius: 8px;
    border: 1px solid rgba(255,255,255,0.15);
    background: rgba(255,255,255,0.08);
    color: rgba(255,255,255,0.85);
    font-size: 12px;
    font-weight: 500;
    cursor: pointer;
    white-space: nowrap;
    transition: all 0.15s;
    font-family: inherit;
    text-align: left;
}
.ps-pill:hover { background: rgba(255,255,255,0.18); }
.ps-pill.active {
    background: var(--accent-primary, #1a73e8);
    color: #fff;
    border-color: transparent;
}
.ps-pill.ps-pill-none {
    color: rgba(255,255,255,0.5);
    border-style: dashed;
}
.ps-pill.ps-pill-more {
    color: rgba(255,255,255,0.5);
    font-size: 14px;
    letter-spacing: 2px;
}
[data-theme="light"] .ps-pill {
    border-color: rgba(0,0,0,0.1);
    background: rgba(0,0,0,0.04);
    color: rgba(0,0,0,0.7);
}
[data-theme="light"] .ps-pill:hover { background: rgba(0,0,0,0.08); }
[data-theme="light"] .ps-pill.active { color: #fff; }
[data-theme="light"] .ps-pill.ps-pill-none { color: rgba(0,0,0,0.4); }
[data-theme="light"] .ps-pill.ps-pill-more { color: rgba(0,0,0,0.4); }
.ps-pill-header {
    padding: 6px 14px 2px;
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: rgba(255,255,255,0.4);
    pointer-events: none;
}
.ps-pill-header:first-child { padding-top: 4px; }
[data-theme="light"] .ps-pill-header { color: rgba(0,0,0,0.4); }

/* Grid mode for param flyout (2 columns like mobile) */
.ps-submenu-pills.ps-submenu-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 5px;
    padding: 10px;
    max-height: 70vh;
    overflow-y: auto;
    min-width: 280px;
}
.ps-pill.ps-pill-grid {
    display: flex;
    align-items: center;
    height: 34px;
    padding: 0 10px;
    border-radius: 10px;
    font-size: 12px;
    gap: 7px;
    justify-content: flex-start;
    overflow: hidden;
}
.ps-pill-grid .ps-pill-icon {
    font-size: 13px;
    width: 16px;
    text-align: center;
    flex-shrink: 0;
    color: var(--pill-color, rgba(255,255,255,0.6));
}
.ps-pill-grid.active .ps-pill-icon { color: #fff; }
.ps-pill-grid .ps-pill-label {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    line-height: 1.2;
}
.ps-pill-none.ps-pill-none-grid {
    grid-column: 1 / -1;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    height: 32px;
    margin-top: 2px;
}
.ps-pill-none-grid .ps-pill-icon {
    font-size: 12px;
    color: rgba(255,255,255,0.4);
}
[data-theme="light"] .ps-pill-grid .ps-pill-icon {
    color: var(--pill-color, rgba(0,0,0,0.5));
}
[data-theme="light"] .ps-pill-grid.active .ps-pill-icon { color: #fff; }
[data-theme="light"] .ps-pill-none-grid .ps-pill-icon {
    color: rgba(0,0,0,0.3);
}

/* =============================================================================
   LAYER SETTINGS PANEL (slide-in)
   ============================================================================= */
.layer-settings-panel {
    position: fixed;
    top: 0;
    right: var(--ui-sidebar-w);
    width: 340px;
    height: 100vh;
    background: var(--ui-glass);
    backdrop-filter: blur(24px);
    -webkit-backdrop-filter: blur(24px);
    border-left: 1px solid var(--ui-glass-border);
    z-index: 1040;
    transform: translateX(100%);
    transition: transform var(--ui-transition);
    display: none;
    flex-direction: column;
    box-shadow: -4px 0 32px rgba(0,0,0,0.25);
}
.layer-settings-panel.open { display: flex; transform: translateX(0); }
body.ui-immersive .layer-settings-panel.open { display: flex; }
.lsp-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 20px;
    border-bottom: 1px solid rgba(255,255,255,0.08);
}
.lsp-header h4 { color: #fff; font-size: 15px; font-weight: 600; margin: 0; display: flex; align-items: center; gap: 8px; }
[data-theme="light"] .lsp-header h4 { color: #212121; }
[data-theme="light"] .lsp-header { border-bottom-color: rgba(0,0,0,0.08); }
.lsp-close {
    background: rgba(255,255,255,0.1);
    border: none;
    color: rgba(255,255,255,0.8);
    cursor: pointer;
    font-size: 16px;
    padding: 6px 8px;
    border-radius: 6px;
    transition: background 0.2s;
}
.lsp-close:hover {
    background: rgba(255,255,255,0.2);
    color: #fff;
}
[data-theme="light"] .lsp-close { color: rgba(0,0,0,0.5); }
.lsp-content {
    flex: 1;
    padding: 12px 16px;
    overflow-y: auto;
}
.lsp-section {
    margin-bottom: 20px;
}
.lsp-section h5 {
    color: rgba(255,255,255,0.9);
    font-size: 12px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 10px;
    display: flex;
    align-items: center;
    gap: 6px;
}
[data-theme="light"] .lsp-section h5 { color: rgba(0,0,0,0.7); }
.lsp-select {
    width: 100%;
    padding: 8px 10px;
    border: 1px solid rgba(255,255,255,0.1);
    border-radius: 8px;
    background: rgba(255,255,255,0.06);
    color: #fff;
    font-size: 13px;
    margin-bottom: 8px;
    outline: none;
}
.lsp-select option { background: #1e293b; color: #fff; }
[data-theme="light"] .lsp-select {
    background: rgba(0,0,0,0.04);
    border-color: rgba(0,0,0,0.12);
    color: #212121;
}
[data-theme="light"] .lsp-select option { background: #fff; color: #212121; }
.lsp-slider-row {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 6px;
}
.lsp-slider-row label {
    color: rgba(255,255,255,0.7);
    font-size: 12px;
    flex-shrink: 0;
    width: 55px;
}
[data-theme="light"] .lsp-slider-row label { color: rgba(0,0,0,0.6); }
.lsp-range {
    flex: 1;
    height: 4px;
    -webkit-appearance: none;
    appearance: none;
    background: rgba(255,255,255,0.15);
    border-radius: 2px;
    outline: none;
}
.lsp-range::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: #fff;
    cursor: pointer;
    box-shadow: 0 1px 4px rgba(0,0,0,0.3);
}
[data-theme="light"] .lsp-range { background: rgba(0,0,0,0.12); }
[data-theme="light"] .lsp-range::-webkit-slider-thumb { background: #1a73e8; }
.lsp-range-val {
    color: rgba(255,255,255,0.6);
    font-size: 11px;
    width: 32px;
    text-align: right;
}
[data-theme="light"] .lsp-range-val { color: rgba(0,0,0,0.5); }
.lsp-toggle-row {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 5px 0;
    color: rgba(255,255,255,0.8);
    font-size: 13px;
}
[data-theme="light"] .lsp-toggle-row { color: rgba(0,0,0,0.7); }
/* Mini toggle switch */
.lsp-switch {
    position: relative;
    width: 36px;
    height: 20px;
    flex-shrink: 0;
}
.lsp-switch input { opacity: 0; width: 0; height: 0; }
.lsp-slider {
    position: absolute;
    cursor: pointer;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(255,255,255,0.15);
    border-radius: 10px;
    transition: 0.3s;
}
.lsp-slider:before {
    content: "";
    position: absolute;
    height: 16px;
    width: 16px;
    left: 2px;
    bottom: 2px;
    background: white;
    border-radius: 50%;
    transition: 0.3s;
}
.lsp-switch input:checked + .lsp-slider { background: #4caf50; }
.lsp-switch input:checked + .lsp-slider:before { transform: translateX(16px); }
[data-theme="light"] .lsp-slider { background: rgba(0,0,0,0.15); }
.lsp-input {
    width: 100%;
    padding: 8px 10px;
    border: 1px solid rgba(255,255,255,0.1);
    border-radius: 8px;
    background: rgba(255,255,255,0.06);
    color: #fff;
    font-size: 13px;
    outline: none;
}
.lsp-input::placeholder { color: rgba(255,255,255,0.4); }
[data-theme="light"] .lsp-input {
    background: rgba(0,0,0,0.04);
    border-color: rgba(0,0,0,0.12);
    color: #212121;
}
[data-theme="light"] .lsp-input::placeholder { color: rgba(0,0,0,0.35); }

/* Fonte list inside settings panel */
.lsp-fonte-counter {
    font-weight: 400;
    font-size: 11px;
    opacity: 0.6;
    text-transform: none;
    letter-spacing: 0;
}
.lsp-fonte-search {
    position: relative;
    margin-bottom: 8px;
}
.lsp-fonte-search-icon {
    position: absolute;
    left: 8px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 11px;
    opacity: 0.4;
    pointer-events: none;
}
.lsp-fonte-search .lsp-input {
    padding-left: 28px;
    padding-right: 28px;
    font-size: 12px;
    height: 32px;
}
.lsp-fonte-search-clear {
    position: absolute;
    right: 4px;
    top: 50%;
    transform: translateY(-50%);
    background: none;
    border: none;
    color: rgba(255,255,255,0.4);
    cursor: pointer;
    font-size: 11px;
    padding: 4px;
    display: none;
}
.lsp-fonte-search-clear.visible { display: block; }
.lsp-fonte-search-clear:hover { color: rgba(255,255,255,0.8); }
[data-theme="light"] .lsp-fonte-search-clear { color: rgba(0,0,0,0.3); }
[data-theme="light"] .lsp-fonte-search-clear:hover { color: rgba(0,0,0,0.7); }
.lsp-fonte-toolbar {
    display: flex;
    align-items: center;
    gap: 4px;
    margin-bottom: 8px;
}
.lsp-fonte-btn {
    background: rgba(255,255,255,0.08);
    border: 1px solid rgba(255,255,255,0.12);
    color: rgba(255,255,255,0.7);
    border-radius: 6px;
    padding: 3px 8px;
    font-size: 11px;
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s, color 0.15s;
}
.lsp-fonte-btn:hover { background: rgba(255,255,255,0.15); color: #fff; }
.lsp-fonte-btn.active { background: rgba(66,165,245,0.25); border-color: rgba(66,165,245,0.4); color: #42a5f5; }
[data-theme="light"] .lsp-fonte-btn {
    background: rgba(0,0,0,0.04);
    border-color: rgba(0,0,0,0.12);
    color: rgba(0,0,0,0.6);
}
[data-theme="light"] .lsp-fonte-btn:hover { background: rgba(0,0,0,0.08); color: #212121; }
[data-theme="light"] .lsp-fonte-btn.active { background: rgba(25,118,210,0.12); border-color: rgba(25,118,210,0.3); color: #1976d2; }
.lsp-fonte-separator {
    flex: 1;
    min-width: 8px;
}
.lsp-fonte-list {
    max-height: 200px;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

/* =============================================================================
   LEGEND ADJUSTMENTS IN IMMERSIVE MODE
   ============================================================================= */
/* Vertical legend: shift left of param sidebar */
body.ui-immersive .legend-vertical {
    right: calc(var(--ui-sidebar-w) + 12px) !important;
    background: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    box-shadow: none !important;
    border: none !important;
    padding: 4px 0 !important;
    min-width: auto !important;
}
body.ui-immersive .legend-vertical .legend-unit {
    border-top: none;
    padding-top: 2px;
    text-shadow: 0 1px 3px rgba(0,0,0,0.8);
}
body.ui-immersive .legend-vertical .legend-value-max,
body.ui-immersive .legend-vertical .legend-value-min {
    text-shadow: 0 1px 3px rgba(0,0,0,0.8);
}
body.ui-immersive .legend-vertical .legend-special {
    display: none;
}
body.ui-immersive .legend-vertical .legend-gradient-bar {
    border-radius: 4px;
    box-shadow: 0 1px 4px rgba(0,0,0,0.4);
}

/* =============================================================================
   MAP PADDING IN IMMERSIVE MODE
   ============================================================================= */
body.ui-immersive .map-container,
body.ui-immersive .app-container main {
    /* Map fills entire viewport, no header offset */
    top: 0 !important;
    height: 100vh !important;
}

/* =============================================================================
   STATION DETAIL SIDEBAR IN IMMERSIVE MODE
   ============================================================================= */
body.ui-immersive .station-detail-sidebar {
    right: var(--ui-sidebar-w);
    max-width: calc(95vw - var(--ui-sidebar-w));
}
body.ui-immersive .station-detail-sidebar:not(.open) {
    transform: translateX(calc(100% + var(--ui-sidebar-w)));
}

/* =============================================================================
   COMPARISON PANEL IN IMMERSIVE MODE
   ============================================================================= */
body.ui-immersive .comparison-panel {
    right: var(--ui-sidebar-w);
}

/* =============================================================================
   TOAST NOTIFICATIONS IN IMMERSIVE MODE — shift left of sidebar
   ============================================================================= */
body.ui-immersive .toast-container {
    right: calc(var(--ui-sidebar-w) + 12px);
}

/* Hide coordinate display and zoom indicator in immersive mode */
body.ui-immersive .zoom-indicator,
body.ui-immersive .coordinates,
body.ui-immersive .coordinate-tooltip { display: none !important; }

/* =============================================================================
   SEARCH BAR LIGHT MODE FIX — more visible border
   ============================================================================= */
[data-theme="light"] .floating-search {
    border: 1px solid rgba(0, 0, 0, 0.12);
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
}
[data-theme="light"] .floating-actions {
    border: 1px solid rgba(0, 0, 0, 0.1);
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
}
[data-theme="light"] .floating-logo a {
    border: 1px solid rgba(0, 0, 0, 0.08);
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
}

/* =============================================================================
   MOBILE IMMERSIVE UI — Observations (< 768px)
   Floating top bar, quick toggles, side panel, FABs
   ============================================================================= */

/* Hide all mobile-immersive components on desktop */
.mobile-top-bar,
.mobile-quick-toggles,
.mobile-right-fabs,
.qt-submenu {
    display: none;
}

/* Side panel tab pills hidden by default */
.side-panel-tabs {
    display: none;
}

@media (max-width: 768px) {

    /* =========================================================================
       FLOATING TOP BAR — Glass hamburger + search + geo
       ========================================================================= */
    .mobile-top-bar {
        position: fixed;
        top: calc(env(safe-area-inset-top, 0px) + 8px);
        left: 12px;
        right: 12px;
        height: 44px;
        z-index: 1100;
        display: flex;
        align-items: center;
        gap: 8px;
        background: var(--ui-glass, rgba(0, 0, 0, 0.55));
        backdrop-filter: blur(var(--ui-glass-blur, 20px));
        -webkit-backdrop-filter: blur(var(--ui-glass-blur, 20px));
        border: 1px solid var(--ui-glass-border, rgba(255, 255, 255, 0.1));
        border-radius: 22px;
        padding: 0 6px;
        box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
    }

    .mtb-btn {
        width: 36px;
        height: 36px;
        min-width: 36px;
        border: none;
        border-radius: 50%;
        background: rgba(255, 255, 255, 0.1);
        color: rgba(255, 255, 255, 0.9);
        font-size: 16px;
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        -webkit-tap-highlight-color: transparent;
        transition: background 0.2s;
    }
    .mtb-btn:active {
        background: rgba(255, 255, 255, 0.25);
        transform: scale(0.92);
    }

    .mtb-search-wrapper {
        flex: 1;
        position: relative;
        display: flex;
        align-items: center;
    }
    .mtb-search-icon {
        position: absolute;
        left: 10px;
        color: rgba(255, 255, 255, 0.5);
        font-size: 13px;
        pointer-events: none;
    }
    .mtb-search-input {
        width: 100%;
        height: 32px;
        border: none;
        border-radius: 16px;
        background: rgba(255, 255, 255, 0.08);
        color: white;
        font-size: 14px;
        padding: 0 12px 0 32px;
        outline: none;
        -webkit-appearance: none;
    }
    .mtb-search-input::placeholder {
        color: rgba(255, 255, 255, 0.4);
    }
    .mtb-search-input:focus {
        background: rgba(255, 255, 255, 0.15);
    }

    .mtb-search-suggestions {
        position: absolute;
        top: calc(100% + 8px);
        left: -6px;
        right: -6px;
        background: rgba(15, 20, 30, 0.95);
        backdrop-filter: blur(20px);
        -webkit-backdrop-filter: blur(20px);
        border: 1px solid rgba(255, 255, 255, 0.1);
        border-radius: 16px;
        padding: 8px;
        z-index: 1200;
        display: none;
        max-height: 300px;
        overflow-y: auto;
        box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
    }
    .mtb-search-suggestions.visible {
        display: block;
    }
    .mtb-suggestion-item {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 10px 12px;
        border-radius: 10px;
        color: rgba(255, 255, 255, 0.9);
        cursor: pointer;
        font-size: 14px;
        transition: background 0.15s;
    }
    .mtb-suggestion-item:active,
    .mtb-suggestion-item:hover {
        background: rgba(255, 255, 255, 0.1);
    }
    .mtb-suggestion-item i {
        color: rgba(255, 255, 255, 0.5);
        font-size: 13px;
        width: 18px;
        text-align: center;
    }
    .mtb-suggestion-item small {
        color: rgba(255, 255, 255, 0.4);
        font-size: 12px;
    }

    /* Light mode top bar */
    [data-theme="light"] .mobile-top-bar {
        background: rgba(255, 255, 255, 0.85);
        border-color: rgba(0, 0, 0, 0.08);
        box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
    }
    [data-theme="light"] .mtb-btn {
        background: rgba(0, 0, 0, 0.06);
        color: #333;
    }
    [data-theme="light"] .mtb-btn:active {
        background: rgba(0, 0, 0, 0.12);
    }
    [data-theme="light"] .mtb-search-input {
        background: rgba(0, 0, 0, 0.05);
        color: #333;
    }
    [data-theme="light"] .mtb-search-input::placeholder {
        color: rgba(0, 0, 0, 0.35);
    }
    [data-theme="light"] .mtb-search-input:focus {
        background: rgba(0, 0, 0, 0.08);
    }
    [data-theme="light"] .mtb-search-icon {
        color: rgba(0, 0, 0, 0.35);
    }
    [data-theme="light"] .mtb-search-suggestions {
        background: rgba(255, 255, 255, 0.97);
        border-color: rgba(0, 0, 0, 0.1);
    }
    [data-theme="light"] .mtb-suggestion-item {
        color: #333;
    }
    [data-theme="light"] .mtb-suggestion-item:active {
        background: rgba(0, 0, 0, 0.05);
    }
    [data-theme="light"] .mtb-suggestion-item i {
        color: rgba(0, 0, 0, 0.4);
    }
    [data-theme="light"] .mtb-suggestion-item small {
        color: rgba(0, 0, 0, 0.4);
    }

    /* =========================================================================
       FLOATING QUICK TOGGLES — Radar / Satellite / Wind / Lightning
       ========================================================================= */
    .mobile-quick-toggles {
        position: fixed;
        top: calc(env(safe-area-inset-top, 0px) + 60px);
        left: 12px;
        z-index: 1050;
        display: flex;
        gap: 6px;
    }

    .mqt-btn {
        width: 38px;
        height: 38px;
        border-radius: 12px;
        border: 1px solid rgba(255, 255, 255, 0.12);
        background: rgba(0, 0, 0, 0.5);
        backdrop-filter: blur(12px);
        -webkit-backdrop-filter: blur(12px);
        color: rgba(255, 255, 255, 0.7);
        font-size: 15px;
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        -webkit-tap-highlight-color: transparent;
        transition: all 0.2s;
        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
    }
    .mqt-btn.active {
        background: var(--accent-primary, #1a73e8);
        color: #fff;
        border-color: transparent;
        box-shadow: 0 2px 12px rgba(26, 115, 232, 0.5);
    }
    .mqt-btn:active {
        transform: scale(0.9);
    }

    /* Light mode quick toggles */
    [data-theme="light"] .mqt-btn {
        background: rgba(255, 255, 255, 0.85);
        border-color: rgba(0, 0, 0, 0.08);
        color: #555;
    }
    [data-theme="light"] .mqt-btn.active {
        background: var(--accent-primary, #1a73e8);
        color: #fff;
    }

    /* =========================================================================
       QUICK TOGGLE SUB-MENU — Pill row slide-down
       ========================================================================= */
    .qt-submenu {
        display: block;
        position: fixed;
        top: calc(env(safe-area-inset-top, 0px) + 104px);
        left: 12px;
        right: 60px;
        z-index: 1050;
        overflow: hidden;
        max-height: 0;
        opacity: 0;
        transition: max-height 0.25s ease, opacity 0.2s ease;
        pointer-events: none;
    }
    .qt-submenu.open {
        max-height: 70vh;
        opacity: 1;
        pointer-events: auto;
    }
    .qt-submenu-pills {
        display: flex;
        flex-direction: column;
        gap: 4px;
        padding: 8px;
        max-height: 60vh;
        overflow-y: auto;
        background: rgba(0,0,0,0.6);
        backdrop-filter: blur(16px);
        -webkit-backdrop-filter: blur(16px);
        border-radius: 12px;
        border: 1px solid rgba(255,255,255,0.1);
    }
    .qt-pill {
        height: 32px;
        padding: 0 14px;
        border-radius: 8px;
        border: 1px solid rgba(255, 255, 255, 0.12);
        background: rgba(0, 0, 0, 0.5);
        backdrop-filter: blur(12px);
        -webkit-backdrop-filter: blur(12px);
        color: rgba(255, 255, 255, 0.85);
        font-size: 13px;
        font-weight: 500;
        white-space: nowrap;
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: flex-start;
        -webkit-tap-highlight-color: transparent;
        transition: all 0.15s ease;
        box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
    }
    .qt-pill:active {
        transform: scale(0.93);
    }
    .qt-pill.active {
        background: var(--accent-primary, #1a73e8);
        color: #fff;
        border-color: transparent;
    }
    .qt-pill.disabled {
        opacity: 0.35;
        pointer-events: none;
    }
    /* ---- Stations Grid Mode (2 colonne con icone) ---- */
    .qt-submenu-pills.qt-submenu-grid {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 5px;
        padding: 10px;
        max-height: 65vh;
        -webkit-overflow-scrolling: touch;
    }
    .qt-pill.qt-pill-grid {
        height: 34px;
        padding: 0 8px;
        border-radius: 10px;
        font-size: 12px;
        gap: 6px;
        justify-content: flex-start;
        overflow: hidden;
    }
    .qt-pill-grid .qt-pill-icon {
        font-size: 12px;
        width: 14px;
        text-align: center;
        flex-shrink: 0;
        color: var(--pill-color, rgba(255, 255, 255, 0.6));
        transition: color 0.15s ease;
    }
    .qt-pill-grid.active .qt-pill-icon {
        color: #fff;
    }
    .qt-pill-grid .qt-pill-label {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        line-height: 1.2;
    }
    .qt-pill-none.qt-pill-none-grid {
        grid-column: 1 / -1;
        justify-content: center;
        gap: 6px;
        height: 32px;
        margin-top: 2px;
    }
    .qt-pill-none-grid .qt-pill-icon {
        font-size: 12px;
        color: rgba(255, 255, 255, 0.4);
    }

    .qt-pill-header {
        font-size: 9px;
        font-weight: 700;
        text-transform: uppercase;
        letter-spacing: 0.8px;
        color: rgba(255, 255, 255, 0.35);
        padding: 2px 8px 0;
        flex-shrink: 0;
    }
    [data-theme="light"] .qt-pill-header { color: rgba(0, 0, 0, 0.35); }
    .qt-pill-none {
        color: rgba(255, 255, 255, 0.5);
        border-style: dashed;
    }

    /* Light mode sub-menu */
    [data-theme="light"] .qt-submenu-pills {
        background: rgba(255,255,255,0.9);
        border-color: rgba(0,0,0,0.08);
    }
    [data-theme="light"] .qt-pill {
        background: rgba(0, 0, 0, 0.04);
        border-color: rgba(0, 0, 0, 0.08);
        color: #555;
        box-shadow: none;
    }
    [data-theme="light"] .qt-pill.active {
        background: var(--accent-primary, #1a73e8);
        color: #fff;
    }
    [data-theme="light"] .qt-pill-grid .qt-pill-icon {
        color: var(--pill-color, rgba(0, 0, 0, 0.5));
    }
    [data-theme="light"] .qt-pill-grid.active .qt-pill-icon {
        color: #fff;
    }
    [data-theme="light"] .qt-pill-none-grid .qt-pill-icon {
        color: rgba(0, 0, 0, 0.3);
    }
    [data-theme="light"] .qt-pill-none {
        color: rgba(0, 0, 0, 0.4);
    }

    /* =========================================================================
       RIGHT FABs — Info + Dark Mode
       ========================================================================= */
    .mobile-right-fabs {
        position: fixed;
        right: 12px;
        top: calc(env(safe-area-inset-top, 0px) + 60px);
        z-index: 1050;
        display: flex;
        flex-direction: column;
        gap: 8px;
    }

    .mrf-btn {
        width: 38px;
        height: 38px;
        border-radius: 50%;
        border: 1px solid rgba(255, 255, 255, 0.12);
        background: rgba(0, 0, 0, 0.5);
        backdrop-filter: blur(12px);
        -webkit-backdrop-filter: blur(12px);
        color: rgba(255, 255, 255, 0.8);
        font-size: 15px;
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
        -webkit-tap-highlight-color: transparent;
        transition: all 0.2s;
        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
    }
    .mrf-btn:active {
        transform: scale(0.9);
        background: rgba(0, 0, 0, 0.7);
    }

    [data-theme="light"] .mrf-btn {
        background: rgba(255, 255, 255, 0.85);
        border-color: rgba(0, 0, 0, 0.08);
        color: #555;
    }

    /* =========================================================================
       SIDE PANEL — Bottom sheet becomes right slide-in panel
       ========================================================================= */

    /* Hide drag handle in side panel mode */
    .sheet-drag-handle {
        display: none !important;
    }

    /* Hide old quick toggles inside sheet (now floating) */
    .sheet-quick-toggles {
        display: none !important;
    }

    /* Hide peek content in side panel mode */
    .sheet-peek-content {
        display: none !important;
    }

    /* Transform bottom sheet into side panel */
    .mobile-bottom-sheet {
        position: fixed;
        top: 0 !important;
        left: auto !important;
        right: 0 !important;
        bottom: 0 !important;
        width: 85vw;
        max-width: 380px;
        height: 100dvh !important;
        border-radius: 0 !important;
        background: rgba(15, 20, 30, 0.92) !important;
        backdrop-filter: blur(24px) !important;
        -webkit-backdrop-filter: blur(24px) !important;
        border: none !important;
        border-left: 1px solid rgba(255, 255, 255, 0.08) !important;
        box-shadow: -8px 0 40px rgba(0, 0, 0, 0.4) !important;
        transform: translateX(100%) !important;
        transition: transform 0.35s cubic-bezier(0.32, 0.72, 0, 1) !important;
        z-index: 1200 !important;
        padding-top: env(safe-area-inset-top, 0px);
    }

    .mobile-bottom-sheet[data-state="closed"] {
        transform: translateX(100%) !important;
        pointer-events: none;
    }

    /* Any non-closed state = visible */
    .mobile-bottom-sheet[data-state="peek"],
    .mobile-bottom-sheet[data-state="half"],
    .mobile-bottom-sheet[data-state="full"] {
        transform: translateX(0) !important;
        pointer-events: auto;
    }

    /* Sheet header adjustments for side panel */
    .sheet-header {
        padding: 16px 16px 8px 16px;
        border-bottom: none;
    }
    .sheet-title {
        font-size: 18px;
        font-weight: 700;
        color: rgba(255, 255, 255, 0.95);
    }
    .sheet-close-btn {
        color: rgba(255, 255, 255, 0.7);
    }

    /* Side panel tab pills */
    .side-panel-tabs {
        display: flex;
        gap: 6px;
        padding: 0 16px 12px 16px;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
    }
    .side-panel-tabs::-webkit-scrollbar { display: none; }

    .spt-pill {
        display: flex;
        align-items: center;
        gap: 6px;
        padding: 6px 14px;
        border-radius: 20px;
        border: 1px solid rgba(255, 255, 255, 0.12);
        background: rgba(255, 255, 255, 0.06);
        color: rgba(255, 255, 255, 0.6);
        font-size: 13px;
        font-weight: 500;
        white-space: nowrap;
        cursor: pointer;
        -webkit-tap-highlight-color: transparent;
        transition: all 0.2s;
    }
    .spt-pill i {
        font-size: 12px;
    }
    .spt-pill.active {
        background: rgba(255, 255, 255, 0.15);
        color: white;
        border-color: rgba(255, 255, 255, 0.25);
    }
    .spt-pill:active {
        transform: scale(0.95);
    }

    /* Sheet content scroll in side panel */
    .sheet-content {
        flex: 1;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
        padding-bottom: env(safe-area-inset-bottom, 0px);
    }

    /* Backdrop */
    .sheet-backdrop {
        z-index: 1150 !important;
    }

    /* Light mode side panel */
    [data-theme="light"] .mobile-bottom-sheet {
        background: rgba(255, 255, 255, 0.95) !important;
        border-left-color: rgba(0, 0, 0, 0.08) !important;
    }
    [data-theme="light"] .sheet-title {
        color: #333;
    }
    [data-theme="light"] .sheet-close-btn {
        color: #666;
    }
    [data-theme="light"] .spt-pill {
        background: rgba(0, 0, 0, 0.04);
        border-color: rgba(0, 0, 0, 0.08);
        color: rgba(0, 0, 0, 0.5);
    }
    [data-theme="light"] .spt-pill.active {
        background: rgba(0, 0, 0, 0.08);
        color: #333;
        border-color: rgba(0, 0, 0, 0.15);
    }

    /* Panel sections styling for dark side panel */
    .panel-section {
        border-bottom: 1px solid rgba(255, 255, 255, 0.06);
    }
    .section-title {
        color: rgba(255, 255, 255, 0.7);
    }
    [data-theme="light"] .panel-section {
        border-bottom-color: rgba(0, 0, 0, 0.06);
    }
    [data-theme="light"] .section-title {
        color: rgba(0, 0, 0, 0.6);
    }
} /* end @media (max-width: 768px) for mobile immersive */
