@import url('https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@400;600;700&display=swap');

body {
  margin: 0;
  padding: 0;
  font-family: 'Nunito Sans', Arial, sans-serif;
  line-height: 1.5;
  /* Migliora la leggibilità */
  -webkit-font-smoothing: antialiased;
  /* Migliora la nitidezza */
  text-rendering: optimizeLegibility;
}

#map {
  width: 100%;
  height: calc(100vh - 60px);
  margin-top: 60px;
  position: relative;

}

table {
  width: 100%;
  border-collapse: collapse;
  margin-bottom: 8px;
  margin-top: 10px;
}

th,
td {
  padding: 2px 3px;
  border: 1px solid #ccc;
  text-align: center;
  font-size: small;
  align-content: center;
}

/* Waypoints: linee orizzontali interne tratteggiate */
#waypoints-table-body td {
  /* rimuovo i bordi verticali orizzontali superiori/inferiori impostati globalmente */
  border-top: none;
  border-bottom: none;
}

/* dalla seconda riga in poi, aggiungo un bordo tratteggiato sopra ogni riga */
#waypoints-table-body tr+tr td {
  border-top: 1px dashed #999;
}

/* bordo inferiore solido all'ultima riga, per chiudere la tabella */
#waypoints-table-body tr:last-child td {
  border-bottom: 1px solid #ccc;
}

header {
  height: 60px;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  z-index: 100;
  background-color: #000e3a;
  color: white;
}

h1 {
  padding-left: 18px;
  margin-left: 100px;
  margin-top: 8px;
  margin-bottom: 8px;
  position: fixed;
}

h2 {
  margin-top: 30px;
  margin-bottom: 10px;
  text-align: center;
}

h4 {
  margin-bottom: 0px;
  margin-top: 5px;
  font-size: 12pt;
  padding-top: 5px;
  padding-bottom: 5px;
}

#logo {
  height: 100px;
  position: fixed;
  border: solid 1px white;
  border-radius: 7px;
  z-index: 1000;
}

#waypointsTitle,
#weatherTableheader,
#routeButtons {
  display: none;
}

/* Auto-grow per i textarea della modale */
.textarea-autogrow {
  overflow: hidden;
  /* niente scrollbar */
  resize: none;
  /* evita il resize manuale (opzionale) */
  min-height: 35px;
  /* base piacevole */
  max-height: 50vh;
  /* evita che il box prenda tutta la pagina */
  box-sizing: border-box;
}


#initialInfo .mini-btn {
  font-size: .7rem;
  line-height: 1;
  border: 1px solid black;
  border-radius: 6px;
  background: #aad9ff;
  cursor: pointer;
  height: 25px;
}

#initialInfo .mini-btn:hover {
  filter: brightness(.97);
}



/* Overlay centrato in alto */
#geocoder-overlay {
  position: absolute;
  top: 10px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 5;
  width: 320px;
  max-width: 80vw;
  pointer-events: none;
}

.seg-label {
  padding: 1px 4px;
  font: 900 12px 'Nunito Sans', Arial, sans-serif;
  color: var(--seg-label-color, #ffffff);
  /*background: rgba(255, 255, 255, 0.9);*/
  /*border: 1px solid rgba(0, 0, 0, .15);*/
  /*border-radius: 4px;*/
  /*box-shadow: 0 1px 4px rgba(0, 0, 0, .2);*/
  text-shadow: 0 0 5 #000000;
  white-space: nowrap;
  pointer-events: none;
  /* non cattura il click */
  user-select: none;
  display: inline-block;
  transform-origin: center center;
}

.seg-label-wrapper {
  display: inline-block;
}

/* stile compatto del campo */
#geocoder-overlay .mapboxgl-ctrl-geocoder {
  min-width: 0;
  width: 100%;
  font-size: 12px;
  box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.3);
  border: 1px solid #cfcfcf;
  border-radius: 8px;
  pointer-events: auto;
  width: 100%;

  /* Altezze uniformi */
  height: 40px;
  min-height: 40px;
  border-radius: 8px;
}

/* Campo input: stessa altezza e padding per non sovrapporre le icone */
#geocoder-overlay .mapboxgl-ctrl-geocoder input[type="text"] {
  height: 40px;
  line-height: 40px;
  padding-top: 0;
  padding-bottom: 0;
  padding-left: 38px;
  /* spazio per la lente a sinistra */
  padding-right: 40px;
  /* spazio per la X a destra */
  font-family: 'Nunito Sans', system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
  font-size: 14px;
}

#geocoder-overlay .mapboxgl-ctrl-geocoder--icon {
  width: 16px;
  height: 16px;
}

/* Centra verticalmente lente, spinner e bottone di clear */
#geocoder-overlay .mapboxgl-ctrl-geocoder .mapboxgl-ctrl-geocoder--icon,
#geocoder-overlay .mapboxgl-ctrl-geocoder .mapboxgl-ctrl-geocoder--icon-loading,

#geocoder-overlay .mapboxgl-ctrl-geocoder .mapboxgl-ctrl-geocoder--button {
  top: 50% !important;
  transform: translateY(-50%);
  height: 24px;
  width: 24px;
}

#geocoder-overlay .mapboxgl-ctrl-geocoder .mapboxgl-ctrl-geocoder--pin-right {
  top: 50% !important;
  height: 24px;
  width: 24px;
}

/* Facoltativo: dimensiona l’icona della X */
#geocoder-overlay .mapboxgl-ctrl-geocoder .mapboxgl-ctrl-geocoder--button svg {
  width: 18px;
  height: 18px;
  display: block;
  margin: 12px auto;
}


.waypoint-marker {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: #fff;
  border: 2px solid #000;
  color: #000;
  font: 700 11px/16px system-ui, sans-serif;
  text-align: center;
  box-shadow: 0 0 4px rgba(0, 0, 0, .3);
  cursor: grab;
  /* Shows open hand on hover */
}

.waypoint-marker:active {
  cursor: grabbing;
  /* Shows closed hand when clicking/dragging */
}

.waypoint-marker.wp-start {
  background: #0d9125;
  color: #fff;
}

.waypoint-marker.wp-end {
  background: #d73030;
  color: #fff;
}






/* From Uiverse.io by 00Kubi */
.radio-inputs {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  border-radius: 0.5rem;
  background-color: #adc1ed;
  box-sizing: border-box;
  box-shadow: 0 0 0px 1px rgba(0, 0, 0, 0.06);
  padding: 0.25rem;
  font-size: 14px;
  margin-top: 5px;
}

.radio-inputs .radio {
  flex: 1 1 auto;
  text-align: center;
}

.radio-inputs .radio input {
  display: none;
}

.radio-inputs .radio .name {
  display: flex;
  cursor: pointer;
  align-items: center;
  justify-content: center;
  border-radius: 0.5rem;
  border: none;
  color: rgba(51, 65, 85, 1);
  transition: all 0.15s ease-in-out;
}

.radio-inputs .radio input:checked+.name {
  background-color: #fff;
  font-weight: 600;
}

/* Hover effect */
.radio-inputs .radio:hover .name {
  background-color: rgba(255, 255, 255, 0.5);
}

/* Animation */
.radio-inputs .radio input:checked+.name {
  position: relative;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  animation: select 0.3s ease;
}

@keyframes select {
  0% {
    transform: scale(0.95);
  }

  50% {
    transform: scale(1.05);
  }

  100% {
    transform: scale(1);
  }
}

/* Particles */
.radio-inputs .radio input:checked+.name::before,
.radio-inputs .radio input:checked+.name::after {
  content: "";
  position: absolute;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: #3b82f6;
  opacity: 0;
  animation: particles 0.5s ease forwards;
}

.radio-inputs .radio input:checked+.name::before {
  top: -8px;
  left: 50%;
  transform: translateX(-50%);
}

.radio-inputs .radio input:checked+.name::after {
  bottom: -8px;
  left: 50%;
  transform: translateX(-50%);
}

@keyframes particles {
  0% {
    opacity: 0;
    transform: translateX(-50%) translateY(0);
  }

  50% {
    opacity: 1;
  }

  100% {
    opacity: 0;
    transform: translateX(-50%) translateY(var(--direction));
  }
}

.radio-inputs .radio input:checked+.name::before {
  --direction: -10px;
}

.radio-inputs .radio input:checked+.name::after {
  --direction: 10px;
}



#controls {
  padding: 1em;
  background: #000e3ae6;
  color: white;
  position: absolute;
  top: 115px;
  max-height: 80vh;
  overflow-y: hidden;
  border-top-right-radius: 15px;
  border-bottom-right-radius: 15px;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.5);
  width: 410px;
  display: flex;
  flex-direction: column;
}

#waypointsTableContainer {
  overflow-y: auto;
  flex: 1 1 auto;
  min-height: 0;
  width: 100%;
}

#waypointsTitle,
#routeButtons,
#box1 {
  flex-shrink: 0;
}

/* Intestaizione della tabella Waypoints */
#weatherTableheader th {
  vertical-align: middle;
  /* centra verticalmente il testo */
}


button {
  height: 35px;
  border-radius: 5px;
  border: solid 1px rgb(0, 0, 0);
  font-family: 'Nunito Sans';
}

#openDetails {
  width: 160px;
  position: relative;
  display: block;
  right: 0px;
}

#routeButtons {
  display: flex;
  flex-direction: row;
  margin-top: 6px;
}


.squareButton {
  width: 4.6vh;
  height: 4.6vh;
  border: solid 2px #000e3a;
  border-radius: 5px;
  background-size: contain;
  background-repeat: no-repeat;
  background-position: right;
  font-family: 'Nunito Sans';
  box-shadow: 0px 4px 4px 1px #0000004d;
}

#clearButton {
  position: static;
  right: auto;
  top: auto;
  height: 35px;
  padding: 6px 10px;
  background-color: #ff8181;
  border: 1px solid #000;
  border-radius: 5px;
}


button:hover,
.squareButton:hover {
  transform: scale(1.05);
  box-shadow: 0 3px 5px rgba(1, 54, 228, 0.5);
}



#route-config-modal {
  position: fixed;
  top: 9%;
  right: 0%;
  /* transform: translate(-50%, -50%); */
  background-color: #000e3a;
  color: white;
  border: 1px solid #ccc;
  padding: 20px;
  z-index: 1000;
  width: 1200px;
  border-radius: 10px;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.5);
  overflow-y: auto;
  max-height: 80vh;
}



#timing-table {
  width: 100%;
  margin-top: 20px;
  display: table;
  background-color: white;
  color: black;
}

#closeModal {
  position: inherit;
  right: 20px;
  top: 15px;
  border: none;
  background-color: #9d1613;
  border-radius: 20%;
  padding-left: 12px;
  padding-right: 12px;
  padding-bottom: 3px;
  font-size: 22px;
  color: white;
}

#loadWeatherData,
#previewBulletin,
#sendBulletin {
  text-align: center;
  width: fit-content;
  padding: 4px;
}

#previewBulletin,
#sendBulletin {
  background-color: #62d368;
  display: block;
  margin-top: 20px;
  /*width: 190px;*/
  font-size: larger;
  padding-left: 10px;
  padding-right: 10px;
  ;

}

#previewBulletin {
  background-color: #62d368;
}

#sendBulletin {
  background-color: #ff5555;
}

.bulletinButtons {
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 10px;
}

#commands {
  display: flex;
  position: fixed;
  right: 10px;
  top: 70px;
  text-align: center;
  flex-direction: column;
  gap: 0.5vh;
  justify-content: space-between;
  align-items: flex-end;
}

thead {
  background-color: #b0c9ff47;
}

#main {
  padding: 20px;
  margin: auto;
  width: 1200px;
}

#warning,
#synopticAnalysis,
#forecasterNotes {
  font-family: 'Nunito Sans';
  height: -webkit-fill-available;
  resize: none;
  border: none;
  padding: 5px;

}

#warningLabel {
  background-color: #d1001d;
}

h3 {
  margin-top: 0%;
  margin-bottom: 0%;
  width: 100%;
  background-color: #d1001d;
  color: white;

}

#specifications {
  border: solid 1px light-dark(rgb(118, 118, 118), rgb(133, 133, 133));
  display: inline-block;
  width: 99%;
  height: 450px;
  margin-left: 2px;
}

#texts {
  position: relative;
  width: 100%;
  display: flex;
  flex-direction: column;
  background-color: #62d368;
}


#container {
  /* Imposta un layout a griglia */
  display: grid;
  gap: 16px;
  /* spazio uniforme orizz/vert */
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  /* Due colonne di uguale larghezza */
  align-items: start;
  /* evita allineamenti strani in altezza */
  /* Il contenitore occupa tutta la larghezza del body */
  padding-top: 20px;
}

/* wrapper verticale: label sopra + box immagine sotto */
.image-card {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

/* stile della label sopra l’anteprima */
.img-label {
  font: 600 13px/1.2 'Nunito Sans', system-ui, sans-serif;
  color: #ffffff;
  cursor: pointer;
  /* così capisci che è cliccabile */
  user-select: none;
  align-self: center;
}



#infoDataGroup {
  display: inline-block;
  width: 100%;
}

.specsRows {
  display: inline-flex;
  width: 100%;
  border-bottom: solid 1px gray;
}


.routeInfoLabels {
  background-color: #acd9ff;
  color: black;
  margin-top: 0px;
  padding-top: 5px;
  padding-bottom: 5px;
  padding-left: 6px;
  padding-right: 6px;
  text-align: left;
  align-content: center;
}

#routeData_column1 {
  display: inline;
}

.specsBoxes {
  width: inherit;
  height: 20px;
  resize: none;
  overflow: hidden;
  font-family: 'Nunito Sans';
  align-self: end;
  font-size: 12pt;
  border: none;
  padding: 7px;

}

.image-container {
  position: relative;
  /* per l'overlay assoluto */
  aspect-ratio: 16 / 9;
  /* tutte le card hanno stessa “altezza visiva” */
  border: 1px solid #ccc;
  border-radius: 8px;
  overflow: hidden;
  background: #f6f6f6;
  /* placeholder */
}

/* l’anteprima riempie il box senza deformarsi */
.image-preview {
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* usa 'contain' se non vuoi tagli */
  display: block;
}

.image-container:hover .image-preview {
  transform: scale(1.05);
  /* Zooma leggermente l'immagine al passaggio del mouse */
}

/* overlay con bottone centrato */
.overlay {
  position: absolute;
  inset: 0;
  /* top/right/bottom/left: 0 */
  display: flex;
  align-items: center;
  justify-content: center;
  /*background: rgba(0, 0, 0, 0.35);*/
  opacity: 0;
  transition: opacity .2s;
}

.image-container:hover .overlay {
  opacity: 1;
}

/* bottone “carica” */
.edit-icon {
  font: 600 14px / 1.2 'Nunito Sans', system-ui, sans-serif;
  padding: 8px 12px;
  border-radius: 6px;
  border: 1px solid #fff;
  background: rgb(255 255 255 / 70%);
  cursor: pointer;
  width: 100%;
  height: 100%;
}

p {
  padding-right: 2%;
  margin: 0%;
  font-size: 0.8em;
}

/* Stile generale della scrollbar */
::-webkit-scrollbar {
  width: 12px;
  /* Larghezza */
  height: 12px;
  /* Altezza per lo scorrimento orizzontale */
}

/* Colore dello sfondo della scrollbar */
::-webkit-scrollbar-track {
  background: #f0f0f0;
  /* Sfondo del track */
  border-radius: 10px;
  /* Arrotondamento */
}

/* Thumb (maniglia) */
::-webkit-scrollbar-thumb {
  background: #9c1515;
  /* Colore della maniglia */
  border-radius: 10px;
  /* Arrotondamento */
}

/* Thumb al passaggio del mouse */
::-webkit-scrollbar-thumb:hover {
  background: #b86262;
  /* Cambia colore al passaggio del mouse */
}




#no-data-message {
  color: red;
  font-weight: bold;
  display: none;
  font-size: 18pt;
  background-color: yellow;
  margin-bottom: 10px;
  text-align: center;
  position: absolute;
  top: 470px;
  left: 0%;
  border: solid 3px red;
  padding-left: 13px;
  padding-right: 13px;
  padding-top: 2px;
  padding-bottom: 2px;
}

/* Pulsante "?" */
#help-button {
  position: fixed;
  bottom: 30px;
  right: 20px;
  width: 50px;
  height: 50px;
  background-color: #007BFF;
  color: white;
  font-size: 24px;
  font-weight: bold;
  border-radius: 50%;
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5);
}

#help-button:hover {
  transform: scale(1.1);
  box-shadow: 0 3px 5px rgba(1, 54, 228, 0.5);
}

/* Popup del tutorial */
#tutorial-popup {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 80%;
  max-width: 600px;
  max-height: 80%;
  background-color: white;
  border-radius: 10px;
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.5);
  display: none;
  overflow: auto;
  z-index: 1000;
  padding: 20px;
}

/* Contenuto del popup */
#popup-content {
  font-family: 'Nunito Sans', sans-serif;
  line-height: 1.6;
}

#popup-content h2 {
  margin: 0 0 10px;
  font-size: 20px;
  color: #333;
  text-align: center;
}

#popup-content h3 {
  margin-top: 15px;
  font-size: 16px;
  color: #007BFF;
}

#popup-content p {
  margin: 10px 0;
  font-size: 14px;
  color: #555;
}

#popup-content hr {
  margin: 15px 0;
  border: none;
  border-top: 1px solid #ddd;
}

/* Pulsante di chiusura */
#close-popup {
  position: absolute;
  top: 10px;
  right: 10px;
  background: none;
  border: none;
  font-size: 18px;
  color: #888;
  cursor: pointer;
}

#close-popup:hover {
  color: #333;
}

/* Overlay scuro */
#tutorialOverlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  /* Sfondo nero semi-trasparente */
  z-index: 999;
  /* Dietro al popup */
  display: none;
  /* Nascondilo di default */
}

/* Modal di selezione della rotta */
.modal {
  display: none;
  /* Nascosta di default */
  position: fixed;
  z-index: 1000;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  overflow: auto;
  background-color: rgba(0, 0, 0, 0.4);
}

.modal-content {
  background-color: #fefefe;
  margin: 10% auto;
  padding: 20px;
  border: 1px solid #888;
  width: fit-content;
  /* max-width: 500px; */
  border-radius: 5px;
  overflow: auto;
  max-height: 75vh;
}

.modal-content ul {
  list-style-type: none;
  padding: 0;
}

.modal-content li {
  padding: 2px;
  border-bottom: 1px solid #ddd;
  cursor: pointer;
}

.modal-content li:hover {
  background-color: #007bff;
  color: white;
}

.close {
  color: #aaa;
  float: right;
  font-size: 28px;
  font-weight: bold;
  cursor: pointer;
}

.close:hover,
.close:focus {
  color: black;
}

#routeInfoBox {
  display: flex;

  flex-direction: column;
  width: 48%;
}

.textsLabels {
  background-color: #acd9ff;
  color: black;
}

#box1,
#routeInfoBox {
  flex: 1;
  /* Entrambi occuperanno metà dello spazio disponibile */
  /* Oppure puoi specificare una larghezza fissa se preferisci:
             width: 50%;
          */
}


#route {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  align-items: flex-start;

}

#timing-summary {
  margin-top: 10px;
  color: white;
}

#routeInfoTitle {
  background-color: #000e3a;
  padding-top: 3px;
  padding-bottom: 10px;
  color: #acd9ff;
  text-align-last: center;
}

/* mostro il tooltip al passaggio */
#downloadRouteButton:hover .tooltip,
#uploadRouteButton:hover .tooltip,
#selectRouteButton:hover .tooltip,
#screenShotButton:hover .tooltip,
#wxChartsButton:hover .tooltip {
  visibility: visible;
  opacity: 1;
}

/* stile del tooltip */
#downloadRouteButton .tooltip,
#uploadRouteButton .tooltip,
#selectRouteButton .tooltip,
#screenShotButton .tooltip,
#wxChartsButton .tooltip {
  visibility: hidden;
  background-color: rgba(0, 0, 0, 0.8);
  color: #fff;
  text-align: center;
  font-size: 14px;
  padding: 5px 10px;
  border-radius: 5px;
  position: absolute;
  top: 20%;
  right: 115%;
  white-space: nowrap;
  z-index: 1000;
  opacity: 0;
  transition: opacity 0.2s;
}

/* freccia del tooltip */
#downloadRouteButton .tooltip::after,
#uploadRouteButton .tooltip::after,
#selectRouteButton .tooltip::after,
#screenShotButton .tooltip::after,
#wxChartsButton .tooltip::after {
  content: '';
  position: absolute;
  bottom: 50%;
  right: -14px;
  transform: translateX(-50%) rotate(-90deg);
  /* combinato */
  border-width: 5px;
  border-style: solid;
  border-color: rgba(0, 0, 0, 0.8) transparent transparent transparent;
}


#modalOverlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  /* Sfondo scuro trasparente */
  z-index: 999;
  /* Deve essere inferiore alla modale */
  display: none;
}


/* Pannello fisso a destra per la tabella Timing */
#timing-panel {
  position: static;
  /* togli layout fisso */
  width: 100%;
  /* scroll dentro la modale se diventa lungo */
  overflow: auto;
  background: #fff;
  border: 1px solid #ddd;
  border-radius: 10px;
  padding: 8px 10px;
  box-sizing: border-box;
  margin-top: 20px;
  margin-bottom: 20px;
}

/* Manteniamo lo stile della tabella Timing coerente */
#timing-panel thead {
  background-color: #b0c9ff47;
}

#timing-table {
  background-color: #fff;
  color: #000;
  border-collapse: collapse;
  table-layout: auto;

}

/* opzionale: stringhe lunghe non spezzino il layout */
#timing-table th,
#timing-table td {
  max-width: 55px;
  min-width: 0 !important;
  /* sovrascrive i min-width inline delle <th> */
  white-space: nowrap;
  /* evita a-capo, permette misurazione overflow */
  overflow: visible;
  /* niente ellissi: vogliamo che, se serve, si allarghi */
  box-sizing: border-box;
}

/* Piccolo adattamento se lo schermo è stretto: la tabella occupa tutta la larghezza disponibile */
@media (max-width: 1200px) {
  #timing-panel {
    right: 10px;
    /* quando manca spazio, non riserviamo il canale comandi */
    width: calc(100vw - 20px);
  }
}

/* Riga azioni in #box1 */
.actionRow {
  display: flex;
  gap: 8px;
  align-items: center;
}

#projection-toggle {
  display: flex;
  align-items: center;
  column-gap: 8px;
  /* spazio tra testo e toggle */
  flex-wrap: wrap;
  /* i radio possono andare sotto */
  width: 200px;
  /* tua larghezza fissa */
  box-sizing: border-box;
  justify-content: center;
}

/* Aspetto della scritta */
#projection-toggle .map-style-caption {
  font-weight: 600;
  margin-right: 2px;
  white-space: nowrap;
  /* evita che vada a capo da sola */
}

/* I radio (Light/Dark/Satellite) vanno sotto, a tutta riga */
#basemapRadios {
  flex-basis: 100%;
  width: 100%;
  margin-top: 10px;
}


/* Contenitore toggle sotto ai pulsanti, allineato a destra */
#commands .projection-toggle {
  text-align: right;
}






/* ==== Map 3D toggle (Uiverse by Shoh2008) ==== */
.checkbox-wrapper-8 .tgl {
  display: none;
}

.checkbox-wrapper-8 .tgl,
.checkbox-wrapper-8 .tgl:after,
.checkbox-wrapper-8 .tgl:before,
.checkbox-wrapper-8 .tgl *,
.checkbox-wrapper-8 .tgl *:after,
.checkbox-wrapper-8 .tgl *:before,
.checkbox-wrapper-8 .tgl+.tgl-btn {
  box-sizing: border-box;
}

.checkbox-wrapper-8 .tgl::-moz-selection,
.checkbox-wrapper-8 .tgl:after::-moz-selection,
.checkbox-wrapper-8 .tgl:before::-moz-selection,
.checkbox-wrapper-8 .tgl *::-moz-selection,
.checkbox-wrapper-8 .tgl *:after::-moz-selection,
.checkbox-wrapper-8 .tgl *:before::-moz-selection,
.checkbox-wrapper-8 .tgl+.tgl-btn::-moz-selection,
.checkbox-wrapper-8 .tgl::selection,
.checkbox-wrapper-8 .tgl:after::selection,
.checkbox-wrapper-8 .tgl:before::selection,
.checkbox-wrapper-8 .tgl *::selection,
.checkbox-wrapper-8 .tgl *:after::selection,
.checkbox-wrapper-8 .tgl *:before::selection,
.checkbox-wrapper-8 .tgl+.tgl-btn::selection {
  background: none;
}

.checkbox-wrapper-8 .tgl+.tgl-btn {
  outline: 0;
  display: block;
  width: 4em;
  height: 2em;
  position: relative;
  cursor: pointer;
  user-select: none;
}

.checkbox-wrapper-8 .tgl+.tgl-btn:after,
.checkbox-wrapper-8 .tgl+.tgl-btn:before {
  position: relative;
  display: block;
  content: "";
  width: 50%;
  height: 100%;
}

.checkbox-wrapper-8 .tgl+.tgl-btn:after {
  left: 0;
}

.checkbox-wrapper-8 .tgl+.tgl-btn:before {
  display: none;
}

.checkbox-wrapper-8 .tgl:checked+.tgl-btn:after {
  left: 50%;
}

.checkbox-wrapper-8 .tgl-skewed+.tgl-btn {
  overflow: hidden;
  transform: skew(-10deg);
  backface-visibility: hidden;
  transition: all 0.2s ease;
  font-family: 'Nunito Sans', Arial, sans-serif;
  background: #d17d00;
}

.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:after,
.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:before {
  transform: skew(10deg);
  display: inline-block;
  transition: all 0.2s ease;
  width: 100%;
  text-align: center;
  position: absolute;
  line-height: 2em;
  font-weight: bold;
  color: #fff;
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.6);
}

.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:after {
  left: 100%;
  content: attr(data-tg-on);
}

.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:before {
  left: 0;
  content: attr(data-tg-off);
}

.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:active {
  background: #274885;
}

.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:active:before {
  left: -10%;
}

.checkbox-wrapper-8 .tgl-skewed:checked+.tgl-btn {
  background: #349e44;
}

.checkbox-wrapper-8 .tgl-skewed:checked+.tgl-btn:before {
  left: -100%;
}

.checkbox-wrapper-8 .tgl-skewed:checked+.tgl-btn:after {
  left: 0;
}

.checkbox-wrapper-8 .tgl-skewed:checked+.tgl-btn:active:after {
  left: 10%;
}

/* (Facoltativo) allineamento a destra dentro #commands */
#commands #projection-toggle {
  text-align: right;
  background-color: #000e3a;
  padding: 10px;
  border-radius: 5px;
  color: white;
}

#commands #projection-toggle .map-style-caption {
  font-size: 0.9em;
  vertical-align: middle;
}

/* il toggle (label) compare subito dopo il testo */
#projectionCheckbox+.tgl-btn {
  margin-left: 8px;
  /* piccolo distacco dal testo */
}

/* abilita prospettiva 3D al contenitore della modale */
#route-config-modal {
  perspective: 1000px;
}

/* anima il pannello (l’intera modale nel tuo caso) */
.slide-in-right {
  -webkit-animation: slide-in-right 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both;
  animation: slide-in-right 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both;
}

/* === Loader overlay === */
#nmLoaderOverlay {
  position: fixed;
  inset: 0;
  display: none;
  /* mostrato via JS */
  align-items: center;
  justify-content: center;
  background: rgba(0, 0, 0, .45);
  z-index: 10000;
  /* sopra a tutto */
}

/* From Uiverse.io by Nishank0744 (adattato) */
.cubes {
  position: relative;
  /* assoluto -> relativo per centrare dentro overlay */
  transform-style: preserve-3d;
  top: 0;
  left: 0;
  /* centriamo via flex del parent */
}

.loop {
  transform: rotateX(-38deg) rotateY(-46deg) translateZ(1.5625em);
}

@keyframes s {
  to {
    transform: scale3d(0.2, 0.2, 0.2);
  }
}

.item {
  margin: -1.5625em;
  width: 3.125em;
  height: 3.125em;
  transform-origin: 50% 50% -1.5625em;
  box-shadow: 0 0 0.125em currentColor;
  background: currentColor;
  animation: s .6s cubic-bezier(.45, .03, .51, .95) infinite alternate;
}

.item:before,
.item:after {
  position: absolute;
  width: inherit;
  height: inherit;
  transform-origin: 0 100%;
  box-shadow: inherit;
  background: currentColor;
  content: "";
}

.item:before {
  bottom: 100%;
  transform: rotateX(90deg);
}

.item:after {
  left: 100%;
  transform: rotateY(90deg);
}

.item:nth-child(1) {
  margin-top: 6.25em;
  color: #14214a;
  animation-delay: -1.2s;
}

.item:nth-child(1):before {
  color: #2d3d70;
}

.item:nth-child(1):after {
  color: #000e3a;
}

.item:nth-child(2) {
  margin-top: 3.125em;
  color: #b8464b;
  animation-delay: -1s;
}

.item:nth-child(2):before {
  color: #ff9ca1;
}

.item:nth-child(2):after {
  color: #c42028;
}

.item:nth-child(3) {
  margin-top: 0em;
  color: #14214a;
  animation-delay: -0.8s;
}

.item:nth-child(3):before {
  color: #2d3d70;
}

.item:nth-child(3):after {
  color: #000e3a;
}

.item:nth-child(4) {
  margin-top: -3.125em;
  color: #b8464b;
  animation-delay: -0.6s;
}

.item:nth-child(4):before {
  color: #ff9ca1;
}

.item:nth-child(4):after {
  color: #c42028;
}

.item:nth-child(5) {
  margin-top: -6.25em;
  color: #14214a;
  animation-delay: -0.4s;
}

.item:nth-child(5):before {
  color: #2d3d70;
}

.item:nth-child(5):after {
  color: #000e3a;
}

.item:nth-child(6) {
  margin-top: -9.375em;
  color: #b8464b;
  animation-delay: -0.2s;
}

.item:nth-child(6):before {
  color: #ff9ca1;
}

.item:nth-child(6):after {
  color: #c42028;
}

#previewBulletin,
#sendBulletin {
  position: relative;
}

#previewBulletin .tooltip,
#sendBulletin .tooltip {
  visibility: hidden;
  background-color: rgba(0, 0, 0, 0.8);
  color: #fff;
  text-align: center;
  font-size: 14px;
  padding: 5px 10px;
  border-radius: 5px;
  position: absolute;
  z-index: 1000;
  bottom: 120%;
  left: 100%;
  transform: translateX(-50%);
  white-space: nowrap;
  opacity: 0;
  transition: opacity 0.2s;
}

#previewBulletin:hover .tooltip,
#sendBulletin:hover .tooltip {
  visibility: visible;
  opacity: 1;
}

#previewBulletin .tooltip::after,
#sendBulletin .tooltip::after {
  content: '';
  position: absolute;
  top: 100%;
  left: 20%;
  margin-left: -5px;
  border-width: 5px;
  border-style: solid;
  border-color: rgb(255, 255, 255) transparent transparent transparent;
}

/* Timeline styles */
#timeline-container {
  position: fixed;
  bottom: 21px;
  right: 0;
  width: calc(100% - 470px);
  background-color: rgb(255 255 255 / 90%);
  color: #000e3a;
  padding: 10px;
  z-index: 1000;
  box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.5);
  display: flex;
  justify-content: center;
  align-items: center;
  border-top-left-radius: 10px;
  border-bottom-left-radius: 10px;
}

#timeline-controls {
  width: 95%;
  display: flex;
  align-items: center;
  gap: 20px;
}

#timeline-label {
  font-family: 'Nunito Sans', sans-serif;
  font-weight: bold;
  min-width: 120px;
  font-size: 1.1em;
}

#timeline-slider {
  flex-grow: 1;
  cursor: pointer;
}

.timeline-vessel-marker {
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: #3ba8ff;
  border: 2px solid #003f8c;
  box-shadow: 0 0 8px rgba(0, 123, 255, 0.75);
}

/* Snow effect */
.g-snows {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  pointer-events: none;
  z-index: 1;
  list-style: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
}

.g-snows>li {
  opacity: 0;
  position: absolute;
  top: 0;
  border-radius: 100%;
  background-color: #FFFFFF;
  background-repeat: no-repeat;
  background-size: 100% auto;
  animation-name: snow-drop;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  animation-fill-mode: forwards;
}

.g-snows>li:nth-child(1) {
  left: 50.70993062965428%;
  width: 11.733017838120347px;
  height: 11.733017838120347px;
  animation-duration: 8809.014748188929ms;
  animation-delay: 776.7585067651239ms;
  filter: blur(1.1013572624724821px);
}

.g-snows>li:nth-child(2) {
  left: 104.62164322965525%;
  width: 9.243819263963498px;
  height: 9.243819263963498px;
  animation-duration: 10321.64623797352ms;
  animation-delay: 4039.7228815099506ms;
  filter: blur(1.3629243243110825px);
}

.g-snows>li:nth-child(3) {
  left: 73.72649992228737%;
  width: 8.095852161935397px;
  height: 8.095852161935397px;
  animation-duration: 9107.899175519662ms;
  animation-delay: 4650.571661007592ms;
  filter: blur(2.986273716051865px);
}

.g-snows>li:nth-child(4) {
  left: 87.4053690437013%;
  width: 1.8420370701804742px;
  height: 1.8420370701804742px;
  animation-duration: 9362.633278021904ms;
  animation-delay: 4668.674765489588ms;
  filter: blur(0.2417831608451939px);
}

.g-snows>li:nth-child(5) {
  left: 49.80356822850665%;
  width: 5.903955944369699px;
  height: 5.903955944369699px;
  animation-duration: 7841.295429046109ms;
  animation-delay: 890.8936119568866ms;
  filter: blur(4.341687234453629px);
}

.g-snows>li:nth-child(6) {
  left: 45.26343036390291%;
  width: 13.321965242792075px;
  height: 13.321965242792075px;
  animation-duration: 9086.779241301889ms;
  animation-delay: 330.79238965578406ms;
  filter: blur(1.4704517732397484px);
}

.g-snows>li:nth-child(7) {
  left: 31.313342029124726%;
  width: 7.058714022255732px;
  height: 7.058714022255732px;
  animation-duration: 9947.742747474287ms;
  animation-delay: 119.70313144049949ms;
  filter: blur(3.0511470934090603px);
}

.g-snows>li:nth-child(8) {
  left: 33.657017931448465%;
  width: 0.08213272068792321px;
  height: 0.08213272068792321px;
  animation-duration: 5232.737312356255ms;
  animation-delay: 861.3408500660979ms;
  filter: blur(1.0611727472445098px);
}

.g-snows>li:nth-child(9) {
  left: 121.82012184281166%;
  width: 21.865778291291544px;
  height: 21.865778291291544px;
  animation-duration: 10954.041460320877ms;
  animation-delay: 2851.989552364286ms;
  filter: blur(1.4640382010829183px);
}

.g-snows>li:nth-child(10) {
  left: 144.42412989819192%;
  width: 0.5556949892425216px;
  height: 0.5556949892425216px;
  animation-duration: 8259.391879798623ms;
  animation-delay: 3071.9905392316514ms;
  filter: blur(0.014870325910379734px);
}

.g-snows>li:nth-child(11) {
  left: 103.32677408938241%;
  width: 6.437806896170489px;
  height: 6.437806896170489px;
  animation-duration: 11553.311049479194ms;
  animation-delay: 285.3577742644242ms;
  filter: blur(1.7305211648874064px);
}

.g-snows>li:nth-child(12) {
  left: 11.826037882913568%;
  width: 4.619647131014929px;
  height: 4.619647131014929px;
  animation-duration: 8546.109096072769ms;
  animation-delay: 324.25686079107675ms;
  filter: blur(0.5974996127670984px);
}

.g-snows>li:nth-child(13) {
  left: 41.25848870644862%;
  width: 8.54497246153224px;
  height: 8.54497246153224px;
  animation-duration: 6909.061757792008ms;
  animation-delay: 1142.941890063376ms;
  filter: blur(0.8742553385186471px);
}

.g-snows>li:nth-child(14) {
  left: 18.85260411964901%;
  width: 9.798670395995552px;
  height: 9.798670395995552px;
  animation-duration: 8449.423713685735ms;
  animation-delay: 3165.7963871155225ms;
  filter: blur(1.152899278274874px);
}

.g-snows>li:nth-child(15) {
  left: 85.13920728063756%;
  width: 0.4786503632468375px;
  height: 0.4786503632468375px;
  animation-duration: 8689.308350284067ms;
  animation-delay: 3536.8043732119013ms;
  filter: blur(0.6833547424850668px);
}

.g-snows>li:nth-child(16) {
  left: 22.943791909922524%;
  width: 3.8039363484474658px;
  height: 3.8039363484474658px;
  animation-duration: 9180.171256598875ms;
  animation-delay: 1165.8797751993254ms;
  filter: blur(3.8273450770533413px);
}

.g-snows>li:nth-child(17) {
  left: 0.9440241062959132%;
  width: 11.10151923767971px;
  height: 11.10151923767971px;
  animation-duration: 11415.42440065626ms;
  animation-delay: 2705.6595283970373ms;
  filter: blur(0.7770794533735215px);
}

.g-snows>li:nth-child(18) {
  left: 8.504552193843306%;
  width: 4.062791710770475px;
  height: 4.062791710770475px;
  animation-duration: 5114.801561327961ms;
  animation-delay: 4867.5006489037ms;
  filter: blur(0.026323277407603873px);
}

.g-snows>li:nth-child(19) {
  left: 73.70272482912162%;
  width: 8.305443555241382px;
  height: 8.305443555241382px;
  animation-duration: 8096.106296911818ms;
  animation-delay: 2189.1409189341716ms;
  filter: blur(4.173823674136632px);
}

.g-snows>li:nth-child(20) {
  left: 82.88896438351823%;
  width: 8.131722257666343px;
  height: 8.131722257666343px;
  animation-duration: 13290.520418226635ms;
  animation-delay: 4605.762490751151ms;
  filter: blur(0.7783051848897165px);
}

.g-snows>li:nth-child(21) {
  left: 120.53282629851915%;
  width: 4.251350569112951px;
  height: 4.251350569112951px;
  animation-duration: 5894.146559857467ms;
  animation-delay: 2006.2513967093375ms;
  filter: blur(0.991143447352604px);
}

.g-snows>li:nth-child(22) {
  left: 90.32668353395422%;
  width: 8.987020342342745px;
  height: 8.987020342342745px;
  animation-duration: 9336.467193393768ms;
  animation-delay: 1333.3003718353687ms;
  filter: blur(2.5896424546703436px);
}

.g-snows>li:nth-child(23) {
  left: 49.6554049989045%;
  width: 21.13195376108404px;
  height: 21.13195376108404px;
  animation-duration: 11685.490754467513ms;
  animation-delay: 2692.1422149478026ms;
  filter: blur(1.9257892356371575px);
}

.g-snows>li:nth-child(24) {
  left: 42.466168910552184%;
  width: 19.061073594329336px;
  height: 19.061073594329336px;
  animation-duration: 6539.949059845043ms;
  animation-delay: 886.7979534546333ms;
  filter: blur(4.184060812940893px);
}

.g-snows>li:nth-child(25) {
  left: 13.5954064025361%;
  width: 1.8478720002676354px;
  height: 1.8478720002676354px;
  animation-duration: 9452.488332157978ms;
  animation-delay: 2809.876487173848ms;
  filter: blur(0.3086393939241783px);
}

.g-snows>li:nth-child(26) {
  left: 17.678736223956975%;
  width: 5.747083627578015px;
  height: 5.747083627578015px;
  animation-duration: 6095.623023668302ms;
  animation-delay: 3671.104106485258ms;
  filter: blur(0.0005471223128383773px);
}

.g-snows>li:nth-child(27) {
  left: 41.87191472499204%;
  width: 1.2904405236027596px;
  height: 1.2904405236027596px;
  animation-duration: 5118.622341782315ms;
  animation-delay: 4202.458155522079ms;
  filter: blur(1.1261009092965715px);
}

.g-snows>li:nth-child(28) {
  left: 96.522833682118%;
  width: 21.912864818137162px;
  height: 21.912864818137162px;
  animation-duration: 6202.876734216553ms;
  animation-delay: 1829.1161849222804ms;
  filter: blur(0.2408406505633378px);
}

.g-snows>li:nth-child(29) {
  left: 146.6971188556583%;
  width: 0.18656559800191452px;
  height: 0.18656559800191452px;
  animation-duration: 11256.29656527931ms;
  animation-delay: 1629.4407547316237ms;
  filter: blur(3.2951813872995466px);
}

.g-snows>li:nth-child(30) {
  left: 84.7628479438296%;
  width: 0.918080447615381px;
  height: 0.918080447615381px;
  animation-duration: 7695.199416347707ms;
  animation-delay: 376.64848445414844ms;
  filter: blur(1.3226449005366883px);
}

.g-snows>li:nth-child(31) {
  left: 1.9559672909710315%;
  width: 6.226161192063277px;
  height: 6.226161192063277px;
  animation-duration: 5325.305140923318ms;
  animation-delay: 104.44048549278828ms;
  filter: blur(2.6163549786469975px);
}

.g-snows>li:nth-child(32) {
  left: 5.409243652998242%;
  width: 6.681574200393655px;
  height: 6.681574200393655px;
  animation-duration: 13313.085585707659ms;
  animation-delay: 2865.135367912487ms;
  filter: blur(1.0069699706244895px);
}

.g-snows>li:nth-child(33) {
  left: 39.82996069903513%;
  width: 4.211306609012514px;
  height: 4.211306609012514px;
  animation-duration: 7914.4048702874725ms;
  animation-delay: 252.02533116147063ms;
  filter: blur(0.34385356088987074px);
}

.g-snows>li:nth-child(34) {
  left: 102.84110843452312%;
  width: 1.073548984666175px;
  height: 1.073548984666175px;
  animation-duration: 6013.565539443042ms;
  animation-delay: 549.9644353031518ms;
  filter: blur(0.4893087812777652px);
}

.g-snows>li:nth-child(35) {
  left: 42.525139463255684%;
  width: 20.473614754265004px;
  height: 20.473614754265004px;
  animation-duration: 6508.751787580324ms;
  animation-delay: 4582.393582079838ms;
  filter: blur(1.091567016413515px);
}

.g-snows>li:nth-child(36) {
  left: 5.4153051003178785%;
  width: 6.229351520112818px;
  height: 6.229351520112818px;
  animation-duration: 10844.004585794954ms;
  animation-delay: 1551.5292485523469ms;
  filter: blur(3.7568419217492766px);
}

.g-snows>li:nth-child(37) {
  left: 59.368850403015045%;
  width: 6.295259007001652px;
  height: 6.295259007001652px;
  animation-duration: 5262.9518140557075ms;
  animation-delay: 1914.3953290139693ms;
  filter: blur(0.5547536108621209px);
}

.g-snows>li:nth-child(38) {
  left: 20.43670615928403%;
  width: 19.387858752510333px;
  height: 19.387858752510333px;
  animation-duration: 10225.45941413163ms;
  animation-delay: 3255.280362048285ms;
  filter: blur(0.6032744076871688px);
}

.g-snows>li:nth-child(39) {
  left: 36.09590170489037%;
  width: 18.996936180387966px;
  height: 18.996936180387966px;
  animation-duration: 12365.5268118207ms;
  animation-delay: 180.71343701260844ms;
  filter: blur(0.015703401127568295px);
}

.g-snows>li:nth-child(40) {
  left: 81.58864152051454%;
  width: 9.760710720771892px;
  height: 9.760710720771892px;
  animation-duration: 5890.271650832644ms;
  animation-delay: 1979.947895779658ms;
  filter: blur(1.2664751751372683px);
}

.g-snows>li:nth-child(41) {
  left: 0.05650988003110058%;
  width: 17.463780886899386px;
  height: 17.463780886899386px;
  animation-duration: 6579.484047833328ms;
  animation-delay: 2570.347737430766ms;
  filter: blur(1.8451823757630705px);
}

.g-snows>li:nth-child(42) {
  left: 105.53847553473348%;
  width: 20.53927943081161px;
  height: 20.53927943081161px;
  animation-duration: 11250.262406272435ms;
  animation-delay: 3352.1116050657583ms;
  filter: blur(1.2147410448804286px);
}

.g-snows>li:nth-child(43) {
  left: 55.607273624028814%;
  width: 4.3055874625914665px;
  height: 4.3055874625914665px;
  animation-duration: 7845.070002241446ms;
  animation-delay: 3940.607576142879ms;
  filter: blur(2.329693266731211px);
}

.g-snows>li:nth-child(44) {
  left: 58.55911010374999%;
  width: 15.657132655671301px;
  height: 15.657132655671301px;
  animation-duration: 7431.313299652336ms;
  animation-delay: 1778.0566897932038ms;
  filter: blur(1.0961564038400553px);
}

.g-snows>li:nth-child(45) {
  left: 61.74786903638939%;
  width: 8.442931198714314px;
  height: 8.442931198714314px;
  animation-duration: 12135.762731978451ms;
  animation-delay: 2917.434159117831ms;
  filter: blur(2.426115886447792px);
}

.g-snows>li:nth-child(46) {
  left: 4.585465238782163%;
  width: 7.831548703155449px;
  height: 7.831548703155449px;
  animation-duration: 9003.733571367551ms;
  animation-delay: 3686.7046409043014ms;
  filter: blur(0.7196537262357205px);
}

.g-snows>li:nth-child(47) {
  left: 0.767379212189546%;
  width: 7.765354940762732px;
  height: 7.765354940762732px;
  animation-duration: 12737.305513048712ms;
  animation-delay: 1225.2132695387274ms;
  filter: blur(0.5961272512822404px);
}

.g-snows>li:nth-child(48) {
  left: 61.24575854127984%;
  width: 3.077963347157681px;
  height: 3.077963347157681px;
  animation-duration: 13162.443511107453ms;
  animation-delay: 1511.0329499622121ms;
  filter: blur(2.943315121051037px);
}

.g-snows>li:nth-child(49) {
  left: 76.21367615171087%;
  width: 21.845211883724264px;
  height: 21.845211883724264px;
  animation-duration: 12665.031951976714ms;
  animation-delay: 3583.330779089233ms;
  filter: blur(1.0980994993718887px);
}

.g-snows>li:nth-child(50) {
  left: 35.40603748546607%;
  width: 1.9880337777237251px;
  height: 1.9880337777237251px;
  animation-duration: 13393.87749656335ms;
  animation-delay: 3178.121616022813ms;
  filter: blur(0.4005601744769667px);
}

.g-snows>li:nth-child(51) {
  left: 53.43751508575144%;
  width: 11.322423512117313px;
  height: 11.322423512117313px;
  animation-duration: 7655.720068606182ms;
  animation-delay: 3980.507868780557ms;
  filter: blur(0.256436510997492px);
}

.g-snows>li:nth-child(52) {
  left: 22.032415966246102%;
  width: 2.700419597187844px;
  height: 2.700419597187844px;
  animation-duration: 7059.953835152152ms;
  animation-delay: 4990.691047514254ms;
  filter: blur(0.14429582067338664px);
}

.g-snows>li:nth-child(53) {
  left: 51.518847646928194%;
  width: 18.749458508110266px;
  height: 18.749458508110266px;
  animation-duration: 9599.215747027252ms;
  animation-delay: 3387.6187429041593ms;
  filter: blur(0.2089559797831808px);
}

.g-snows>li:nth-child(54) {
  left: 23.97686918932088%;
  width: 23.612615173607637px;
  height: 23.612615173607637px;
  animation-duration: 6436.745032814208ms;
  animation-delay: 1018.6566818414677ms;
  filter: blur(4.013048315206557px);
}

.g-snows>li:nth-child(55) {
  left: 52.800979689456426%;
  width: 0.7358362667116296px;
  height: 0.7358362667116296px;
  animation-duration: 5624.073636312852ms;
  animation-delay: 2787.761536289418ms;
  filter: blur(1.531305639581205px);
}

.g-snows>li:nth-child(56) {
  left: 79.79112588521227%;
  width: 10.796986723039133px;
  height: 10.796986723039133px;
  animation-duration: 11020.10776296841ms;
  animation-delay: 3002.0260894512217ms;
  filter: blur(1.1152122535745015px);
}

.g-snows>li:nth-child(57) {
  left: 104.95939360782826%;
  width: 5.5001012085204115px;
  height: 5.5001012085204115px;
  animation-duration: 10075.28875199096ms;
  animation-delay: 4235.589119584094ms;
  filter: blur(1.2323345311179534px);
}

.g-snows>li:nth-child(58) {
  left: 42.88631837390152%;
  width: 16.76447229915927px;
  height: 16.76447229915927px;
  animation-duration: 9771.945894523673ms;
  animation-delay: 615.9523743511186ms;
  filter: blur(4.155779286603067px);
}

.g-snows>li:nth-child(59) {
  left: 122.72335554624811%;
  width: 6.292988865957259px;
  height: 6.292988865957259px;
  animation-duration: 8092.82667108715ms;
  animation-delay: 109.64793371954218ms;
  filter: blur(1.5731682060991947px);
}

.g-snows>li:nth-child(60) {
  left: 25.778293431925803%;
  width: 10.423162329161903px;
  height: 10.423162329161903px;
  animation-duration: 9531.954603436741ms;
  animation-delay: 4179.790248295944ms;
  filter: blur(1.42766888174923px);
}

.g-snows>li:nth-child(61) {
  left: 77.13278022246263%;
  width: 4.299521224064591px;
  height: 4.299521224064591px;
  animation-duration: 5042.942931128375ms;
  animation-delay: 4183.574819866386ms;
  filter: blur(3.623096688103829px);
}

.g-snows>li:nth-child(62) {
  left: 58.333965483806296%;
  width: 18.55645134249256px;
  height: 18.55645134249256px;
  animation-duration: 7375.6179196101375ms;
  animation-delay: 78.04589040452447ms;
  filter: blur(2.2553860282750895px);
}

.g-snows>li:nth-child(63) {
  left: 116.25742354768613%;
  width: 25.937444634338068px;
  height: 25.937444634338068px;
  animation-duration: 7995.564457487229ms;
  animation-delay: 945.063715504143ms;
  filter: blur(2.1920499055538403px);
}

.g-snows>li:nth-child(64) {
  left: 67.18104785664792%;
  width: 18.280336513526663px;
  height: 18.280336513526663px;
  animation-duration: 5607.068138458566ms;
  animation-delay: 2999.205906173831ms;
  filter: blur(0.677427153108523px);
}

.g-snows>li:nth-child(65) {
  left: 1.3367803943422985%;
  width: 12.45472045783284px;
  height: 12.45472045783284px;
  animation-duration: 7292.9347407854975ms;
  animation-delay: 2990.5014401459ms;
  filter: blur(0.9017842584844362px);
}

.g-snows>li:nth-child(66) {
  left: 16.177607361541064%;
  width: 20.769245183982274px;
  height: 20.769245183982274px;
  animation-duration: 10755.437508527708ms;
  animation-delay: 2993.695840122993ms;
  filter: blur(2.7211180230583367px);
}

.g-snows>li:nth-child(67) {
  left: 44.131202745517314%;
  width: 2.995188768861998px;
  height: 2.995188768861998px;
  animation-duration: 9674.322813532555ms;
  animation-delay: 3791.3474317273544ms;
  filter: blur(3.914218660535223px);
}

.g-snows>li:nth-child(68) {
  left: 92.6990911536878%;
  width: 5.588489279397617px;
  height: 5.588489279397617px;
  animation-duration: 7066.877919905101ms;
  animation-delay: 1443.1008673059587ms;
  filter: blur(3.7319374475891505px);
}

.g-snows>li:nth-child(69) {
  left: 66.89696681908224%;
  width: 16.068365769343266px;
  height: 16.068365769343266px;
  animation-duration: 5970.787144531656ms;
  animation-delay: 2797.4319087629883ms;
  filter: blur(2.6255176141538685px);
}

.g-snows>li:nth-child(70) {
  left: 20.273706453101436%;
  width: 17.77657388427418px;
  height: 17.77657388427418px;
  animation-duration: 13230.533086296948ms;
  animation-delay: 2423.89301456566ms;
  filter: blur(2.463500621664102px);
}

.g-snows>li:nth-child(71) {
  left: 74.5055405131671%;
  width: 14.919635728316793px;
  height: 14.919635728316793px;
  animation-duration: 9351.595451182211ms;
  animation-delay: 396.4582952067808ms;
  filter: blur(3.1253438549099357px);
}

.g-snows>li:nth-child(72) {
  left: 109.02919025241098%;
  width: 19.44742496146628px;
  height: 19.44742496146628px;
  animation-duration: 5306.115626309713ms;
  animation-delay: 3491.8246671644283ms;
  filter: blur(3.248957971511447px);
}

.g-snows>li:nth-child(73) {
  left: 95.33619462969156%;
  width: 20.01298690116185px;
  height: 20.01298690116185px;
  animation-duration: 10376.59006050754ms;
  animation-delay: 1246.2947556485415ms;
  filter: blur(1.4808716453941762px);
}

.g-snows>li:nth-child(74) {
  left: 19.565625452320845%;
  width: 23.054411951539844px;
  height: 23.054411951539844px;
  animation-duration: 8212.951578131007ms;
  animation-delay: 4181.075320409974ms;
  filter: blur(4.222119277550291px);
}

.g-snows>li:nth-child(75) {
  left: 38.0510443337238%;
  width: 1.132182017486226px;
  height: 1.132182017486226px;
  animation-duration: 6523.120706003081ms;
  animation-delay: 3377.3075135212484ms;
  filter: blur(0.5774708845376544px);
}

.g-snows>li:nth-child(76) {
  left: 100.53303811322785%;
  width: 5.94197986880478px;
  height: 5.94197986880478px;
  animation-duration: 5012.588823694248ms;
  animation-delay: 4363.8258406830255ms;
  filter: blur(3.05543602306243px);
}

.g-snows>li:nth-child(77) {
  left: 24.379538617261463%;
  width: 8.380711145711588px;
  height: 8.380711145711588px;
  animation-duration: 7214.147616095581ms;
  animation-delay: 3015.574407276296ms;
  filter: blur(0.07681724416510827px);
}

.g-snows>li:nth-child(78) {
  left: 101.64460821210093%;
  width: 2.3425702501817973px;
  height: 2.3425702501817973px;
  animation-duration: 10728.056302427709ms;
  animation-delay: 4496.199687868186ms;
  filter: blur(0.03854053598455165px);
}

.g-snows>li:nth-child(79) {
  left: 11.527116059989865%;
  width: 10.94172471993679px;
  height: 10.94172471993679px;
  animation-duration: 6615.279656934768ms;
  animation-delay: 821.3800700292251ms;
  filter: blur(4.006620684315813px);
}

.g-snows>li:nth-child(80) {
  left: 53.619574366464576%;
  width: 11.488822439551942px;
  height: 11.488822439551942px;
  animation-duration: 10161.569382939642ms;
  animation-delay: 1230.6062769804826ms;
  filter: blur(1.9504190946759694px);
}

.g-snows>li:nth-child(81) {
  left: 58.55486073976527%;
  width: 9.28046667630348px;
  height: 9.28046667630348px;
  animation-duration: 8802.413709519955ms;
  animation-delay: 1723.2340385278267ms;
  filter: blur(1.4139276896642778px);
}

.g-snows>li:nth-child(82) {
  left: 72.82646702700418%;
  width: 17.05196985900701px;
  height: 17.05196985900701px;
  animation-duration: 8409.299806025647ms;
  animation-delay: 2188.988424136329ms;
  filter: blur(3.3211833615629907px);
}

.g-snows>li:nth-child(83) {
  left: 80.72848842538653%;
  width: 14.477768844347207px;
  height: 14.477768844347207px;
  animation-duration: 11683.280810217428ms;
  animation-delay: 39.537970868189774ms;
  filter: blur(1.4655570537258962px);
}

.g-snows>li:nth-child(84) {
  left: 5.296716369174504%;
  width: 16.427403810403003px;
  height: 16.427403810403003px;
  animation-duration: 7300.683565466839ms;
  animation-delay: 1212.6284958543465ms;
  filter: blur(0.5243696201297432px);
}

.g-snows>li:nth-child(85) {
  left: 10.26129353516751%;
  width: 0.7718181212140927px;
  height: 0.7718181212140927px;
  animation-duration: 9792.718533845844ms;
  animation-delay: 1069.4150337425967ms;
  filter: blur(0.7106810241486536px);
}

.g-snows>li:nth-child(86) {
  left: 9.582973341546591%;
  width: 19.915268935125155px;
  height: 19.915268935125155px;
  animation-duration: 9967.749931247907ms;
  animation-delay: 2190.8884961090735ms;
  filter: blur(2.8377793520865877px);
}

.g-snows>li:nth-child(87) {
  left: 47.703163442512164%;
  width: 1.8086213219989133px;
  height: 1.8086213219989133px;
  animation-duration: 5895.820868598083ms;
  animation-delay: 4806.812166830647ms;
  filter: blur(1.4974907364018417px);
}

.g-snows>li:nth-child(88) {
  left: 12.838630786573614%;
  width: 0.6609543020715662px;
  height: 0.6609543020715662px;
  animation-duration: 7519.946108717501ms;
  animation-delay: 3921.7934205340775ms;
  filter: blur(0.7777468077738794px);
}

.g-snows>li:nth-child(89) {
  left: 50.22245141908407%;
  width: 12.093237126590802px;
  height: 12.093237126590802px;
  animation-duration: 7661.80731923483ms;
  animation-delay: 4985.428868373912ms;
  filter: blur(1.8679190313709049px);
}

.g-snows>li:nth-child(90) {
  left: 14.934901699950117%;
  width: 7.997713723235911px;
  height: 7.997713723235911px;
  animation-duration: 8944.71549479925ms;
  animation-delay: 3137.8044133788417ms;
  filter: blur(1.2844237792276767px);
}

.g-snows>li:nth-child(91) {
  left: 9.778700270011356%;
  width: 19.62484820387598px;
  height: 19.62484820387598px;
  animation-duration: 6588.965952224612ms;
  animation-delay: 2615.9511066578566ms;
  filter: blur(0.24464896616039766px);
}

.g-snows>li:nth-child(92) {
  left: 23.03627579690378%;
  width: 0.2189698629086667px;
  height: 0.2189698629086667px;
  animation-duration: 6778.749094978736ms;
  animation-delay: 2702.78653108342ms;
  filter: blur(1.4273401377566974px);
}

.g-snows>li:nth-child(93) {
  left: 135.01897851047892%;
  width: 16.202338467767632px;
  height: 16.202338467767632px;
  animation-duration: 5671.660256898459ms;
  animation-delay: 3376.0660139595166ms;
  filter: blur(0.2279721802885959px);
}

.g-snows>li:nth-child(94) {
  left: 31.018040408981236%;
  width: 26.408344882646904px;
  height: 26.408344882646904px;
  animation-duration: 7854.761316195079ms;
  animation-delay: 2829.2720670189165ms;
  filter: blur(3.8172993835224736px);
}

.g-snows>li:nth-child(95) {
  left: 51.58287580543294%;
  width: 12.090369082523537px;
  height: 12.090369082523537px;
  animation-duration: 11277.223352677429ms;
  animation-delay: 336.3845929462339ms;
  filter: blur(3.263402682677076px);
}

.g-snows>li:nth-child(96) {
  left: 30.091023324584416%;
  width: 18.98688684071783px;
  height: 18.98688684071783px;
  animation-duration: 5708.004565673236ms;
  animation-delay: 3816.936577907566ms;
  filter: blur(1.9628945755262168px);
}

.g-snows>li:nth-child(97) {
  left: 6.290372892764012%;
  width: 4.275199562362498px;
  height: 4.275199562362498px;
  animation-duration: 9751.459552247838ms;
  animation-delay: 3353.165513426919ms;
  filter: blur(0.22672520243772665px);
}

.g-snows>li:nth-child(98) {
  left: 14.68111022453968%;
  width: 0.10553662283223098px;
  height: 0.10553662283223098px;
  animation-duration: 8653.463771980314ms;
  animation-delay: 2431.796114043494ms;
  filter: blur(3.2972363904606405px);
}

.g-snows>li:nth-child(99) {
  left: 103.16756971568905%;
  width: 2.610425137450516px;
  height: 2.610425137450516px;
  animation-duration: 7275.1752761402895ms;
  animation-delay: 2906.4749520411224ms;
  filter: blur(0.6038204876934579px);
}

.g-snows>li:nth-child(100) {
  left: 58.34639196344937%;
  width: 21.965666246215115px;
  height: 21.965666246215115px;
  animation-duration: 5440.072348124867ms;
  animation-delay: 3879.9072429877015ms;
  filter: blur(0.6612379073206087px);
}

@keyframes snow-drop {
  0% {
    transform: translate(0, 0);
    opacity: 0.5;
    margin-left: 0;
  }

  10% {
    margin-left: 15px;
  }

  20% {
    margin-left: 20px;
  }

  25% {
    transform: translate(0, 166px);
    opacity: 0.75;
  }

  30% {
    margin-left: 15px;
  }

  40% {
    margin-left: 0;
  }

  50% {
    transform: translate(0, 333px);
    opacity: 1;
    margin-left: -15px;
  }

  60% {
    margin-left: -20px;
  }

  70% {
    margin-left: -15px;
  }

  75% {
    transform: translate(0, 500px);
    opacity: 0.5;
  }

  80% {
    margin-left: 0;
  }

  100% {
    transform: translate(0, 666px);
    opacity: 0;
  }
}

#mouse-coordinates {
  position: absolute;
  background-color: rgba(255, 255, 255, 0.8);
  /* Dark blue semi-transparent matching header */
  color: rgb(0, 0, 0);
  padding: 4px 8px;
  border-radius: 15px;
  font-family: 'Nunito Sans', sans-serif;
  font-size: 12px;
  pointer-events: none;
  /* Allows clicking through the tooltip */
  z-index: 1000;
  display: none;
  /* Hidden by default */
  white-space: nowrap;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
  /* The position will be updated via JS (top/left) */
}

/* Default cursor: Pencil */
.mapboxgl-canvas-container.mapboxgl-interactive {
  cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='%23ffffff' stroke='%23000000' stroke-width='1'%3E%3Cpath d='M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z'/%3E%3C/svg%3E") 0 24, auto !important;
}

/* Grabbing cursor when dragging (active state) */
.mapboxgl-canvas-container.mapboxgl-interactive:active {
  cursor: grabbing !important;
}

/* --- Route Type Toggle --- */
.route-type-toggle-container {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 10px;
}

.route-type-label {
  font-size: 0.9em;
  font-weight: 600;
}

.switch {
  position: relative;
  display: inline-block;
  width: 40px;
  height: 20px;
}

.switch input {
  opacity: 0;
  width: 0;
  height: 0;
}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  -webkit-transition: .4s;
  transition: .4s;
}

.slider:before {
  position: absolute;
  content: "";
  height: 16px;
  width: 16px;
  left: 2px;
  bottom: 2px;
  background-color: white;
  -webkit-transition: .4s;
  transition: .4s;
}

input:checked+.slider {
  background-color: #2196F3;
}

input:focus+.slider {
  box-shadow: 0 0 1px #2196F3;
}

input:checked+.slider:before {
  -webkit-transform: translateX(20px);
  -ms-transform: translateX(20px);
  transform: translateX(20px);
}

/* Rounded sliders */
.slider.round {
  border-radius: 34px;
}

.slider.round:before {
  border-radius: 50%;
}