1 2 <!DOCTYPE html> 3<html lang="it"> 4<head> 5 <meta charset="utf-8"> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 7 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, viewport-fit=cover"> 8 <meta name="referrer" content="origin-when-cross-origin" /> 9 <meta name="x-monitoring-status" content="86f08250c70fae23e54511e45703a7161062c57fdbdde460535f3770585642f7" /> 10 <title>Una rete che unisce ⢠Sentieri Svizzeri</title> 11 12 <meta name="title" content="Una rete che unisce ⢠Sentieri Svizzeri"> 13 <meta name="description" content="Oltre 65 000 chilometri di sentieri ben tenuti collegano i più bei paesaggi naturali della Svizzera."> 14 <meta property="og:type" content="website"> 15 <meta property="og:title" content="Una rete che unisce ⢠Sentieri Svizzeri"> 16 <meta property="og:url" content="https://www.sentieri-svizzeri.ch/it/"> 17 <meta property="og:locale" content="it"> 18 <meta property="og:description" content="Oltre 65 000 chilometri di sentieri ben tenuti collegano i più bei paesaggi naturali della Svizzera."> 19 <link rel="canonical" href="https://www.sentieri-svizzeri.ch/it/"> 20 <meta property="og:image" content="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_image_seo/a8d5500c0d2fd8d5d554a08f41943ab51e93e24f4946989a0bf46ad528583f1d963450.jpg?2.2.43"> 21 <meta property="og:image:width" content="1200"> 22 <meta property="og:image:height" content="630"> 23 <meta property="og:image:alt" content="Una rete che unisce ⢠Sentieri Svizzeri"> 24 <meta property="og:image:type" content="image/jpeg"> 25 <meta name="twitter:card" content="summary_large_image"> 26 <meta name="twitter:title" content="Una rete che unisce ⢠Sentieri Svizzeri"> 27 <meta name="twitter:url" content="https://www.sentieri-svizzeri.ch/it/"> 28 <meta name="twitter:description" content="Oltre 65 000 chilometri di sentieri ben tenuti collegano i più bei paesaggi naturali della Svizzera."> 29 <meta name="twitter:image" content="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_image_seo/a8d5500c0d2fd8d5d554a08f41943ab51e93e24f4946989a0bf46ad528583f1d963450.jpg?2.2.43"> 30 31 32 33 34 35 <!-- Google Tag Manager (SWW Specific) --> 36
36<script>
vendor: 534 bytes, lines 36-48
36(function (w, d, s, l, i) { 37 w[l] = w[l] || []; 38 w[l].push({ 39 'gtm.start': 40 new Date().getTime(), event: 'gtm.js' 41 }); 42 var f = d.getElementsByTagName(s)[0], 43 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; 44 j.async = true; 45 j.src = 46 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; 47 f.parentNode.insertBefore(j, f); 48 })(window, document, 'script', 'dataLayer', '
48GTM-W6X7B79
vendor: 3 bytes, line 48
48');
48</script>
48 49 <!-- End Google Tag Manager --> 50 <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 50-51
50 51 <script async src="https://www.googletagmanager.com/gtag/js?id=
51G-15XPVNZMQB
vendor: 16 bytes, lines 51-52
51"></script> 52
52<script> 53
vendor: 177 bytes, lines 53-61
53window.dataLayer = window.dataLayer || []; 54 55 function gtag() { 56 dataLayer.push(arguments); 57 } 58 59 gtag('js', new Date()); 60 61 gtag('config', '
61G-15XPVNZMQB
vendor: 8 bytes, lines 61-62
61'); 62
62</script>
62 63 64 <link rel="preload" as="font" href="/assets/fonts/montserrat-400.woff2?2.2.43" type="font/woff2" crossorigin="anonymous"> 65 <link rel="preload" as="font" href="/assets/fonts/montserrat-400-italic.woff2?2.2.43" type="font/woff2" crossorigin="anonymous"> 66 <link rel="preload" as="font" href="/assets/fonts/montserrat-500.woff2?2.2.43" type="font/woff2" crossorigin="anonymous"> 67 <link rel="preload" as="font" href="/assets/fonts/montserrat-500-italic.woff2?2.2.43" type="font/woff2" crossorigin="anonymous"> 68 <link rel="preload" as="font" href="/assets/fonts/montserrat-600.woff2?2.2.43" type="font/woff2" crossorigin="anonymous"> 69 <link rel="preload" as="font" href="/assets/fonts/montserrat-600-italic.woff2?2.2.43" type="font/woff2" crossorigin="anonymous"> 70 <link rel="preload" as="font" href="/assets/fonts/montserrat-700.woff2?2.2.43" type="font/woff2" crossorigin="anonymous"> 71 <link rel="preload" as="font" href="/assets/fonts/montserrat-700-italic.woff2?2.2.43" type="font/woff2" crossorigin="anonymous"> 72 73 <style> 74 75 /* Montserrat - 400 */ 76 @font-face { 77 font-display: swap; 78 font-family: 'Montserrat'; 79 font-style: normal; 80 font-weight: 400; 81 src: url(/assets/fonts/montserrat-400.woff2?2.2.43) format('woff2'); 82 } 83 84 /* Montserrat - 400 italic */ 85 @font-face { 86 font-display: swap; 87 font-family: 'Montserrat'; 88 font-style: italic; 89 font-weight: 400; 90 src: url(/assets/fonts/montserrat-400-italic.woff2?2.2.43) format('woff2'); 91 } 92 93 /* Montserrat - 500 */ 94 @font-face { 95 font-display: swap; 96 font-family: 'Montserrat'; 97 font-style: normal; 98 font-weight: 500; 99 src: url(/assets/fonts/montserrat-500.woff2?2.2.43) format('woff2'); 100 } 101 102 /* Montserrat - 500 italic */ 103 @font-face { 104 font-display: swap; 105 font-family: 'Montserrat'; 106 font-style: italic; 107 font-weight: 500; 108 src: url(/assets/fonts/montserrat-500-italic.woff2?2.2.43) format('woff2'); 109 } 110 111 /* Montserrat - 600 */ 112 @font-face { 113 font-display: swap; 114 font-family: 'Montserrat'; 115 font-style: normal; 116 font-weight: 600; 117 src: url(/assets/fonts/montserrat-600.woff2?2.2.43) format('woff2'); 118 } 119 120 /* Montserrat - 600 italic */ 121 @font-face { 122 font-display: swap; 123 font-family: 'Montserrat'; 124 font-style: italic; 125 font-weight: 600; 126 src: url(/assets/fonts/montserrat-600-italic.woff2?2.2.43) format('woff2'); 127 } 128 129 /* Montserrat - 700 */ 130 @font-face { 131 font-display: swap; 132 font-family: 'Montserrat'; 133 font-style: normal; 134 font-weight: 700; 135 src: url(/assets/fonts/montserrat-700.woff2?2.2.43) format('woff2'); 136 } 137 138 /* Montserrat - 700 italic */ 139 @font-face { 140 font-display: swap; 141 font-family: 'Montserrat'; 142 font-style: italic; 143 font-weight: 700; 144 src: url(/assets/fonts/montserrat-700-italic.woff2?2.2.43) format('woff2'); 145 } 146 147 </style> 148 149 <link rel="icon" type="image/png" href="/assets/img/favicons/favicon-96x96.png?2.2.43" sizes="96x96" /> 150 <link rel="icon" type="image/svg+xml" href="/assets/img/favicons/favicon.svg?2.2.43" /> 151 <link rel="shortcut icon" href="/assets/img/favicons/favicon.ico?2.2.43" /> 152 <link rel="apple-touch-icon" sizes="180x180" href="/assets/img/favicons/apple-touch-icon.png?2.2.43" /> 153 <link rel="manifest" href="/assets/img/favicons/site.webmanifest?2.2.43" /> 154 <meta name="msapplication-TileColor" content="#FBC200"> 155 <meta name="theme-color" content="#FBC200"> 156 157 158 <link rel="alternate" 159 hreflang="x-default" 160 href="https://www.sentieri-svizzeri.ch/de/"/> 161 <link rel="alternate" 162 hreflang="fr" 163 href="https://www.sentieri-svizzeri.ch/fr/"/> 164 <link rel="alternate" 165 hreflang="it" 166 href="https://www.sentieri-svizzeri.ch/it/"/> 167 168 169 170 <link rel="stylesheet" href="/publicui/css/public.bundle.css?2.2.43"/> 171 172 173 <!-- /assets/img/logo/sww-logo_it.svg?2.2.43 174 --> 175 </head> 176 177<body class=" ct-route-cloudtec-page-show"> 178 179 180 <!-- Google Tag Manager (noscript) -->
vendor: 81 bytes, lines 180-182
180 181 <noscript> 182 <iframe src="https://www.googletagmanager.com/ns.html?id=
182GTM-W6X7B79
vendor: 92 bytes, lines 182-184
182" height="0" width="0" style="display:none;visibility:hidden"></iframe> 183 </noscript> 184
184<!-- End Google Tag Manager (noscript) --> 185 <div class="ct-wrapper ct-layout-mood-full"> 186 <div class="ct-hero-image ct-hero-image--landscape "> 187 <div uk-parallax="y: -64; start: 64"> 188 189 190 191 192 193 194 195 196 197 <picture> 198 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_huge/63f785eb5168a.jpg?2.2.43" alt="Image" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full_mood/63f785eb5168a.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_huge/63f785eb5168a.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/63f785eb5168a.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785eb5168a.jpg?2.2.43 610w"/> 199 </picture> 200 </div> 201 </div> 202 <div class="ct-hero-image ct-hero-image--portrait "> 203 <div uk-parallax="y: -64; start: 64"> 204 205 206 207 208 209 210 211 212 213 <picture> 214 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_huge/63f785eb5168a.jpg?2.2.43" alt="Image" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full_mood/63f785eb5168a.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_huge/63f785eb5168a.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/63f785eb5168a.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785eb5168a.jpg?2.2.43 610w"/> 215 </picture> 216 </div> 217 </div> 218 <header class="ct-header"> 219 <div class="uk-container"> 220 <nav class="uk-navbar-container uk-navbar" uk-navbar> 221 <a href="/it/" 222 class="uk-navbar-item uk-logo"> 223 <img src="/it/file/641865f611e29/read" 224 alt="logo"/> 225 </a> 226 227 <div class="ct-nav-container js-nav-container"> 228 <div class="uk-navbar-left"> 229 <ul class="uk-nav uk-nav-primary uk-navbar-nav"> 230 <li class=" uk-parent"> 231 <a href="/it/escursionismo" 232 title="Ai piedi della natura">Escursionismo 233 </a> 234 </li> 235 <li class=" uk-parent"> 236 <a href="/it/segnaletica" 237 title="In movimento per lâescursionismo">Segnaletica 238 </a> 239 </li> 240 <li class=" uk-parent"> 241 <a href="/it/sostegno" 242 title="Sostieni ciò che unisce">Sostegno 243 </a> 244 </li> 245 <li class=" uk-parent"> 246 <a href="/it/ispirazione" 247 title="Cosa spinge gli amanti della natura">Ispirazione 248 </a> 249 </li> 250 <li class=" uk-parent"> 251 <a href="/it/chi-siamo" 252 title="Chi siamo">Chi siamo 253 </a> 254 </li> 255 </ul> 256 </div> 257 <div class="uk-navbar-item uk-margin-auto-left@m"> 258 <div class="ct-navbar__actions"> 259 <div class="ct-btn-shop"> 260 <a href="/it/shop" 261 class="uk-button uk-button-light"> 262 Shop 263 </a> 264 <a href="/it/shop/cart" 265 class="uk-icon-button uk-button-white"> 266 <i class="fa-regular fa-bag-shopping"></i>
267 <span class="uk-badge l-cart-total-items uk-hidden">0</span> 268 </a> 269 </div> 270 271 272 <a href="/it/donazione/donare" 273 class="uk-button uk-button-primary l-donate">Donazione</a> 274 275 276 277 </div><!-- /.navbar__actions --> 278 </div> 279 </div><!-- /.ct-nav-container --> 280 </nav> 281 282 </div> 283 <!-- Hotjar Tracking Code for https://schweizer-wanderwege.ch --> 284
284<script defer>
vendor: 265 bytes, lines 284-289
284 285 (function(h, o, t, j, a, r) { 286 h.hj = h.hj || function() { 287 (h.hj.q = h.hj.q || []).push(arguments) 288 }; 289 h._hjSettings = {hjid:
2896457615
vendor: 426 bytes, lines 289-296
289, hjsv: 6}; 290 a = o.getElementsByTagName('head')[0]; 291 r = o.createElement('script'); 292 r.async = 1; 293 r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv; 294 a.appendChild(r); 295 })(window, document, 'https://static.hotjar.com/c/hotjar-', '.js?sv='); 296
296</script>
296 297 </header> 298 299 <main class="ct-main"> 300 <div class="ct-layout-grid"> 301 302<div class="ct-layout-grid"> 303 <div class="ct-hero"> 304 <div class="uk-container"> 305 <div class="ct-hero-inner" uk-parallax="y: -48; start: 48"> 306 <h4>Sentieri Svizzeri</h4> 307 <h1>Una rete che unisce</h1> 308 <div class="ct-hero-buttons"> 309 310 <a href="/it/tessera-sostenitore/diventando-sostenitore" class="uk-button uk-button-primary " 311 title="Tessera sostenitore">Tessera sostenitore</a> 312 313 </div> 314 </div> 315 </div> 316 317 318 <div class="uk-position-bottom-right uk-position-large"> 319 <a href="#page-section-0" class="uk-icon-button uk-button-primary" uk-scroll> 320 <i class="fa fa-arrow-down"></i> 321 </a> 322 </div> 323 </div> 324 325 326 327 328 329 <section 330 id="page-section-0" 331 class=" uk-section uk-section-default uk-section-small uk-padding-remove-top" 332 data-section="384372" 333 data-position="0"> 334 335 336 <div class="uk-container"> 337 <div class="ct-floating-grid ct-floating-grid-colgap-small ct-floating-grid-rowgap-small ct-floating-grid-align-stretch"> 338 339 340 341 342 343<div id="" 344 class=" ct-block-size-full ct-container-grid_filter"> 345 <div class="ct-block ct-block-type-grid_filter"> 346 347 348 349 350 351 <div id="filter-bar" class="ct-filter-bar"> 352 <form class="ct-filter-bar__form" action="/it/proposte-di-escursioni/" method="GET"> 353 <div class="ct-filter-bar__bar"> 354 <div class="ct-filter-bar__search"> 355 <div class="uk-inline"> 356 <input type="search" id="criteria_fulltext" name="criteria[fulltext]" class="uk-input" placeholder="Dove vuoi andare? (località , regione, numero di proposta escursionistica)" /> 357 </div> 358 359 </div> 360 <div class="ct-filter-bar__item ct-filter-bar__item--checkbox"> 361 <label>Stagione escursionistica</label> 362 <div class="uk-checks-inline"> 363 <div class="uk-margin"> 364 <input type="checkbox" id="criteria_seasons_68" name="criteria[seasons][]" data-icon="fa fa-sun-bright" class="uk-checkbox" value="68" /> 365 366 367 <label for="criteria_seasons_68"> 368 <i class="fa fa-sun-bright"></i> 369 Estate 370 </label> 371 </div> 372 <div class="uk-margin"> 373 <input type="checkbox" id="criteria_seasons_69" name="criteria[seasons][]" data-icon="fa fa-snowflake" class="uk-checkbox" value="69" /> 374 375 376 <label for="criteria_seasons_69"> 377 <i class="fa fa-snowflake"></i> 378 Inverno 379 </label> 380 </div> 381 </div> 382 383 </div> 384 <div class="ct-filter-bar__item ct-filter-bar__item--select"> 385 <label>Regione</label> 386 <div class="l-filter-multi"> 387 <select id="criteria_regions" name="criteria[regions][]" title="Scegli" data-placeholder="Scegli" data-loading-text="Caricamento..." data-no-choices-text="Nessuna scelta tra cui scegliere" data-item-select-text="Clicca per selezionare" data-unique-item-text="Possono essere aggiunti solo valori unici" data-custom-add-item-text="Solo i valori che corrispondono a condizioni specifiche possono essere aggiunti" data-no-results-text="Nessun risultato trovato" data-search-result-limit="10" data-search-placeholder-value="" hidden="hidden" data-all="Tutto" data-none="Tutto" class="form-control kt_selectpicker_pills" 388 multiple="multiple" data-live-search="true"> 389 <option value="14" 390 391 > 392 all'estero 393 </option> 394 <option value="6" 395 396 > 397 Altopiano centrale 398 </option> 399 <option value="5" 400 401 > 402 Giura 403 </option> 404 <option value="4" 405 406 > 407 Oberland Bernese 408 </option> 409 <option value="13" 410 411 > 412 Svizzera centrale 413 </option> 414 <option value="8" 415 416 > 417 Svizzera nord-occidentale 418 </option> 419 <option value="7" 420 421 > 422 Svizzera nord-orientale 423 </option> 424 <option value="12" 425 426 > 427 Svizzera occidentale 428 </option> 429 <option value="9" 430 431 > 432 Svizzera sudorientale 433 </option> 434 <option value="10" 435 436 > 437 Ticino 438 </option> 439 <option value="11" 440 441 > 442 Vallese 443 </option> 444 </select> 445 446 447
448 <div class="l-filter-multi-header" uk-toggle="target: #criteria_regions-toggle"> 449 <div class="l-filter-multi-selected uk-text-meta" data-placeholder=""></div> 450 <i class="fa fa-angle-down"></i> 451 </div> 452 <div class="l-filter-multi-options" id="criteria_regions-toggle" hidden> 453 <div class="l-filter-multi-options-inner"> 454 <div class="l-filter-multi-options-checkbox"> 455 <input id="criteria_regions_14" class="uk-checkbox" type="checkbox" data-value="14"> 456 <label for="criteria_regions_14">all'estero</label> 457 </div> 458 <div class="l-filter-multi-options-checkbox"> 459 <input id="criteria_regions_6" class="uk-checkbox" type="checkbox" data-value="6"> 460 <label for="criteria_regions_6">Altopiano centrale</label> 461 </div> 462 <div class="l-filter-multi-options-checkbox"> 463 <input id="criteria_regions_5" class="uk-checkbox" type="checkbox" data-value="5"> 464 <label for="criteria_regions_5">Giura</label> 465 </div> 466 <div class="l-filter-multi-options-checkbox"> 467 <input id="criteria_regions_4" class="uk-checkbox" type="checkbox" data-value="4"> 468 <label for="criteria_regions_4">Oberland Bernese</label> 469 </div> 470 <div class="l-filter-multi-options-checkbox"> 471 <input id="criteria_regions_13" class="uk-checkbox" type="checkbox" data-value="13"> 472 <label for="criteria_regions_13">Svizzera centrale</label> 473 </div> 474 <div class="l-filter-multi-options-checkbox"> 475 <input id="criteria_regions_8" class="uk-checkbox" type="checkbox" data-value="8"> 476 <label for="criteria_regions_8">Svizzera nord-occidentale</label> 477 </div> 478 <div class="l-filter-multi-options-checkbox"> 479 <input id="criteria_regions_7" class="uk-checkbox" type="checkbox" data-value="7"> 480 <label for="criteria_regions_7">Svizzera nord-orientale</label> 481 </div> 482 <div class="l-filter-multi-options-checkbox"> 483 <input id="criteria_regions_12" class="uk-checkbox" type="checkbox" data-value="12"> 484 <label for="criteria_regions_12">Svizzera occidentale</label> 485 </div> 486 <div class="l-filter-multi-options-checkbox"> 487 <input id="criteria_regions_9" class="uk-checkbox" type="checkbox" data-value="9"> 488 <label for="criteria_regions_9">Svizzera sudorientale</label> 489 </div> 490 <div class="l-filter-multi-options-checkbox"> 491 <input id="criteria_regions_10" class="uk-checkbox" type="checkbox" data-value="10"> 492 <label for="criteria_regions_10">Ticino</label> 493 </div> 494 <div class="l-filter-multi-options-checkbox"> 495 <input id="criteria_regions_11" class="uk-checkbox" type="checkbox" data-value="11"> 496 <label for="criteria_regions_11">Vallese</label> 497 </div> 498 </div> 499 </div> 500</div> 501 502 </div> 503 <div class="ct-filter-bar__item ct-filter-bar__item--select"> 504 <label>Categoria</label> 505 <div class="l-filter-multi"> 506 <select id="criteria_trailCategories" name="criteria[trailCategories][]" title="Scegli" data-placeholder="Scegli" data-loading-text="Caricamento..." data-no-choices-text="Nessuna scelta tra cui scegliere" data-item-select-text="Clicca per selezionare" data-unique-item-text="Possono essere aggiunti solo valori unici" data-custom-add-item-text="Solo i valori che corrispondono a condizioni specifiche possono essere aggiunti" data-no-results-text="Nessun risultato trovato" data-search-result-limit="10" data-search-placeholder-value="" hidden="hidden" data-all="Tutto" data-none="Tutto" class="form-control kt_selectpicker_pills" 507 multiple="multiple" > 508 <option value="56" 509 510 > 511 Escursione 512 </option> 513 <option value="53" 514 515 > 516 Escursione alpina 517 </option> 518 <option value="55" 519 520 > 521 Escursione con le ciaspole 522 </option> 523 <option value="54" 524 525 > 526 Escursione in montagna 527 </option>
528 <option value="57" 529 530 > 531 Escursione invernale 532 </option> 533 <option value="58" 534 535 > 536 Gita scolastica con escursione 537 </option> 538 <option value="59" 539 540 > 541 Gita scolastica senza escursione 542 </option> 543 </select> 544 545 546 547 <div class="l-filter-multi-header" uk-toggle="target: #criteria_trailCategories-toggle"> 548 <div class="l-filter-multi-selected uk-text-meta" data-placeholder=""></div> 549 <i class="fa fa-angle-down"></i> 550 </div> 551 <div class="l-filter-multi-options" id="criteria_trailCategories-toggle" hidden> 552 <div class="l-filter-multi-options-inner"> 553 <div class="l-filter-multi-options-checkbox"> 554 <input id="criteria_trailCategories_56" class="uk-checkbox" type="checkbox" data-value="56"> 555 <label for="criteria_trailCategories_56">Escursione</label> 556 </div> 557 <div class="l-filter-multi-options-checkbox"> 558 <input id="criteria_trailCategories_53" class="uk-checkbox" type="checkbox" data-value="53"> 559 <label for="criteria_trailCategories_53">Escursione alpina</label> 560 </div> 561 <div class="l-filter-multi-options-checkbox"> 562 <input id="criteria_trailCategories_55" class="uk-checkbox" type="checkbox" data-value="55"> 563 <label for="criteria_trailCategories_55">Escursione con le ciaspole</label> 564 </div> 565 <div class="l-filter-multi-options-checkbox"> 566 <input id="criteria_trailCategories_54" class="uk-checkbox" type="checkbox" data-value="54"> 567 <label for="criteria_trailCategories_54">Escursione in montagna</label> 568 </div> 569 <div class="l-filter-multi-options-checkbox"> 570 <input id="criteria_trailCategories_57" class="uk-checkbox" type="checkbox" data-value="57"> 571 <label for="criteria_trailCategories_57">Escursione invernale</label> 572 </div> 573 <div class="l-filter-multi-options-checkbox"> 574 <input id="criteria_trailCategories_58" class="uk-checkbox" type="checkbox" data-value="58"> 575 <label for="criteria_trailCategories_58">Gita scolastica con escursione</label> 576 </div> 577 <div class="l-filter-multi-options-checkbox"> 578 <input id="criteria_trailCategories_59" class="uk-checkbox" type="checkbox" data-value="59"> 579 <label for="criteria_trailCategories_59">Gita scolastica senza escursione</label> 580 </div> 581 </div> 582 </div> 583</div> 584 585 </div> 586 <div class="ct-filter-bar__item ct-filter-bar__item--button"> 587 588<div> 589 590 <a href="javascript:" 591 class="uk-icon-button uk-button-dark l-filter-map-trigger" 592 > 593 <i class="fa fa-map" aria-hidden="true"></i> 594 </a> 595 596</div> 597 598 </div> 599 <div class="ct-filter-bar__submit"> 600 601 <button class="uk-button-default uk-icon-button "
602 title="Applica filtro" 603 ><i class="fa fa-magnifying-glass"></i></button> 604 605 </div> 606 </div> 607 608 609 </form> 610 </div> 611 612
612<script> 613 let seasonIds = [68]; 614 document.addEventListener("DOMContentLoaded", function () { 615 seasonIds.forEach(function (id) { 616 $('#criteria_seasons_' + id).prop('checked', true); 617 }); 618 }); 619 </script>
619 620 </div> 621</div> 622 </div> 623 </div> 624 </section> 625 626 627 628 629 630 631 <section 632 id="page-section-1" 633 class=" uk-section uk-section-default uk-padding-remove-top" 634 data-section="384373" 635 data-position="1"> 636 637 638 <div class="uk-container"> 639 <div class="ct-floating-grid ct-floating-grid-colgap-medium ct-floating-grid-rowgap-large ct-floating-grid-align-stretch"> 640 641 642 643 644 645<div id="" 646 data-block-link-name="willkommen-im-club-treten-sie-ihrer-kantonalen-wanderweg-fachorganisation-bei" class=" ct-block-size-one_third ct-container-call_to_action ct-container-layout-default"> 647 <div class="ct-block ct-block-type-call_to_action"> 648 649 <div class="uk-card uk-card-default"> 650 <div class="uk-card-media-top"> 651 652 653 654 655 656 657 658 659 660 <picture> 661 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785e176ba3.jpg?2.2.43" alt="Image" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/63f785e176ba3.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785e176ba3.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/63f785e176ba3.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785e176ba3.jpg?2.2.43 610w"/> 662 </picture> 663 </div> 664 <div class="uk-card-body"> 665 <div class="uk-card-badge">Adesione allâassociazione</div> 666 <h3 class="uk-card-title">Benvenuto/a nel club: aderisci allâorganizzazione per lâescursionismo del tuo Cantone.</h3> 667 <a class="uk-button uk-button-default" href="/it/sostegno/adesione" 668 >Aderire allâassociazione</a> 669 </div> 670 </div> 671 </div> 672</div> 673 674 675 676 677 678<div id="" 679 class="sww-goenner-flow ct-block-size-one_third ct-container-call_to_action ct-container-global ct-container-layout-default"> 680 <div class="ct-block ct-block-type-call_to_action"> 681 682 <div class="uk-card uk-card-default"> 683 <div class="uk-card-media-top"> 684 685 686 687 688 689 690 691 692 693 <picture> 694 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/d23bfd80eac108e15a56a7514aaa4080ac198f32f469cc695acdd6ac6b8cb50a.jpg?2.2.43" alt="SWW_KV_Goenner_A1_quer_05" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/d23bfd80eac108e15a56a7514aaa4080ac198f32f469cc695acdd6ac6b8cb50a.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/d23bfd80eac108e15a56a7514aaa4080ac198f32f469cc695acdd6ac6b8cb50a.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/d23bfd80eac108e15a56a7514aaa4080ac198f32f469cc695acdd6ac6b8cb50a.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/d23bfd80eac108e15a56a7514aaa4080ac198f32f469cc695acdd6ac6b8cb50a.jpg?2.2.43 610w"/> 695 </picture> 696 </div> 697 <div class="uk-card-body"> 698 <h3 class="uk-card-title">Fai del bene</h3> 699 <div class="uk-text-default"> 700 <p>Desideri sostenere efficacemente Sentieri Svizzeri?<br /></p> 701 </div> 702 <a class="uk-button uk-button-default" href="/it/sostegno/diventando-sostenitore" 703 >Diventare sostenitore o sostenitrice</a> 704 </div> 705 </div> 706 </div> 707</div> 708 709 710 711 712 713<div id="" 714 class=" ct-block-size-one_third ct-container-call_to_action ct-container-layout-default"> 715 <div class="ct-block ct-block-type-call_to_action"> 716 717 <div class="uk-card uk-card-default"> 718 <div class="uk-card-media-top"> 719 720 721 722 723 724 725 726 727 728 <picture> 729 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f73fbbc368d.jpg?2.2.43" alt="Image" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/63f73fbbc368d.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f73fbbc368d.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/63f73fbbc368d.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f73fbbc368d.jpg?2.2.43 610w"/> 730 </picture> 731 </div> 732 <div class="uk-card-body"> 733 <div class="uk-card-badge">Escursionismo</div> 734 <h3 class="uk-card-title">Ispirazioni e informazioni utili sullâescursionismo</h3> 735 <a class="uk-button uk-button-default" href="/it/escursionismo" 736 >Vieni anche tu</a> 737 </div> 738 </div> 739 </div> 740</div> 741 </div> 742 </div> 743 </section> 744 745 746 747 748 749 750 <section 751 id="page-section-2" 752 class=" uk-section uk-section-default uk-padding-remove-top" 753 data-section="384374" 754 data-position="2"> 755 756 757 <div class="uk-container"> 758 <div class="ct-floating-grid ct-floating-grid-colgap-medium ct-floating-grid-rowgap-xxlarge ct-floating-grid-align-stretch"> 759 760 761 762 763 764<div id="" 765 class=" ct-block-size-one_third ct-container-information ct-container-global ct-container-layout-iconbox ct-container-theme-primary"> 766 <div class="ct-block ct-block-type-information"> 767 <div 768 class="ct-block-information "> 769 <div class="ct-block-icon"> 770 <i class="fa fa-signs-post"></i> 771 </div> 772 <div class="ct-block-text"> 773 <a class="ct-block-link uk-text-large" 774 href="/it/segnalare-difetti/" 775 > 776 Segnalaci eventuali danni 777 </a> 778 <p class="Liste1">Hai scoperto indicatori di direzione difettosi o mancanti lungo la 779rete dei sentieri escursionistici svizzeri? <i></i></p><p><i></i></p><i></i> 780 </div> 781 </div> 782 </div> 783</div> 784 785 786 787 788 789<div id="" 790 class=" ct-block-size-one_third ct-container-information ct-container-global ct-container-layout-iconbox ct-container-theme-primary"> 791 <div class="ct-block ct-block-type-information"> 792 <div 793 class="ct-block-information "> 794 <div class="ct-block-icon"> 795 <i class="fa fa-people-pants"></i> 796 </div> 797 <div class="ct-block-text"> 798 <a class="ct-block-link uk-text-large" 799 href="/it/cercare-compagni-descursione/" 800 > 801 Trovare compagnia per unâescursione 802 </a> 803 <p class="Liste1">Scopri come trovare facilmente compagni di escursione!</p><p></p> 804 </div> 805 </div> 806 </div> 807</div> 808 809 810 811 812 813<div id="" 814 class=" ct-block-size-one_third ct-container-information ct-container-global ct-container-layout-iconbox ct-container-theme-primary"> 815 <div class="ct-block ct-block-type-information"> 816 <div 817 class="ct-block-information "> 818 <div class="ct-block-icon"> 819 <i class="fa fa-envelope-open-text"></i> 820 </div> 821 <div class="ct-block-text"> 822 <a class="ct-block-link uk-text-large" 823 href="/it/iscrizione-newsletter" 824 > 825 Iscriviti alla nostra newsletter 826 </a> 827 <p>La nostra newsletter ti tiene aggiornato/a: riceverai le nostre notizie mensilmente e il suggerimento per un'escursione del giorno settimanalmente (in tedesco o francese).<br /></p> 828 </div> 829 </div> 830 </div> 831</div> 832 </div> 833 </div> 834 </section> 835 836 837 838 839 840 841 <section 842 id="page-section-3" 843 class=" uk-section uk-section-default uk-padding-remove-top" 844 data-section="384375" 845 data-position="3"> 846 847 848 <div class="uk-container"> 849 <div class="ct-floating-grid ct-floating-grid-colgap-medium ct-floating-grid-rowgap-xxlarge ct-floating-grid-align-stretch"> 850 851 852 853 854 855<div id="" 856 class=" ct-block-size-two_third ct-container-hike ct-container-global ct-container-layout-spotlight"> 857 <div class="ct-block ct-block-type-hike"> 858 859 860 <div class="uk-card uk-card-default l-hike-spotlight"> 861 <div class="uk-card-media-top"> 862 <picture> 863 <img src="https://www.sentieri-svizzeri.ch/media/cache/public_full/c8dabfeb518fe345d81ed893de87c6202fd6371e88c01b38b698db9da1b67652.jpg?2.2.43" alt="Auf den Spuren eines bekannten Waadtländer Malers"/> 864 </picture> 865 </div> 866 <div class="uk-card-body"> 867 <small> 868 Mézières VD, village 869 â Moudon 870 ⢠VD 871 </small> 872 <h3 class="uk-card-title uk-heading-xlarge">Auf den Spuren eines bekannten Waadtländer Malers</h3> 873 <div class="uk-text-default"> 874 <p>
874Eugène Burnand ist einer der wenigen Schweizer Künstler, die schon zu Lebzeiten Erfolg hatten und von ihren Werken leben konnten. Er war weitherum bekannt in Europa, wohnte zeitweise in Versailles, Florenz, Montpellier und Paris, wo er 1921 starb. Begraben wurde er aber in Vulliens im Jorat, diese Wanderung führt an seinem Grab vorbei. 875Burnands Schweizer Spuren ziehen sich durch eine Landschaft mit stattlichen Bauernhöfen, aus Stein gebaut und heute meist gut erhalten, grossen Ställen und weiten Feldern und â im Herbst â riesigen Haufen von Zuckerrüben. Orte, die Burnand schon im 20. Jahrhundert in realistischem Stil malte â inklusive der Menschen, die hier mit einfachen Mitteln schufteten. Heute tun sie es mit Maschinen, so sind viele Wege dieser Wanderung asphaltiert. Doch das tut der kulturellen Tour keinen Abbruch â im Gegenteil, sie ist auch bei nassem Wetter gut machbar. 876Man startet im waadtländischen Mézières, überquert den Carrouge und wandert auf die Anhöhe, von wo aus man die Hügelzüge gut sehen kann. Nach Vulliens erreicht man Seppey. In einem hiesigen Schloss hatte Burnand während des Ersten Weltkriegs gelebt und gearbeitet. Entstanden ist hier auch eines seiner Hauptwerke: «Labour dans le Jorat». Es zeigt zwei Männer mit Pflug, der von zwei Kühen und einem Pferd gezogen wird. Rechts im Bild ist das Dörfchen Syens erkennbar. 877Bald ist die Broye erreicht, entlang welcher man schliesslich nach Moudon gelangt. In dessen Oberstadt ist dem grossen Maler eigens ein Museum gewidmet, das aber nicht täglich offen hat.</p> 878 </div> 879 <a class="uk-button uk-button-primary" 880 href="/it/proposte-di-escursioni/3649/Auf-den-Spuren-eines-bekannten-Waadtlander-Malers">alla proposta escursionistica</a> 881 <div class="uk-card-footer l-hike-footer"> 882 <div class="l-hike-tscale"> 883 <span class="l-card-footer-icon fa fa-person-hiking"></span> 884 <span class="l-card-footer-label"><img src="/assets/img/map/icon-wanderung.svg?2.2.43" class="l-trail-category" alt="T1" />T1</span> 885 </div> 886 <div class="l-hike-time"> 887 <span class="l-card-footer-icon fa fa-thin fa-clock"></span> 888 <span class="l-card-footer-label">2 h 55 min</span> 889 </div> 890 <div class="l-hike-distance"> 891 <span class="l-card-footer-icon fa fa-arrows-left-right"></span> 892 <span class="l-card-footer-label">12,1 km</span> 893 </div> 894 <div class="l-hike-difficulty"> 895 <span class="l-card-footer-icon fa fa-thin fa-grin-beam"></span> 896 <span class="l-card-footer-label">Media</span> 897 </div> 898 </div> 899 900 </div> 901 </div> 902 903 904 </div> 905</div> 906 907 908 909 910 911<div id="" 912 class=" ct-block-size-one_third ct-container-call_to_action ct-container-layout-default"> 913 <div class="ct-block ct-block-type-call_to_action"> 914 915 <div class="uk-card uk-card-default"> 916 <div class="uk-card-media-top"> 917 918 919 920 921 922 923 924 925 926 <picture> 927 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/f25c45d35a5e4887cd3b1130e704dc83d5a1c19e423589a5850e190fc0ed79fa.jpg?2.2.43" alt="Brücke Encardens Foto Walter Deplazes 20250710 02" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/f25c45d35a5e4887cd3b1130e704dc83d5a1c19e423589a5850e190fc0ed79fa.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/f25c45d35a5e4887cd3b1130e704dc83d5a1c19e423589a5850e190fc0ed79fa.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/f25c45d35a5e4887cd3b1130e704dc83d5a1c19e423589a5850e190fc0ed79fa.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/f25c45d35a5e4887cd3b1130e704dc83d5a1c19e423589a5850e190fc0ed79fa.jpg?2.2.43 610w"/> 928 </picture> 929 </div> 930 <div class="uk-card-body"> 931 <div class="uk-card-badge">Rivista DAS WANDERN/LA RANDONNÃE</div> 932 <h3 class="uk-card-title">Un sentiero premiato in una valle selvaggia</h3> 933 <div class="uk-text-default"> 934 <p>In fondo alla Val Sumvitg, la caduta di massi rendeva il sentiero escursionistico sempre più pericoloso. Il tracciato è stato quindi spostato sullâaltro versante della valle ed è stato costruito un nuovo ponte. Ai lavori hanno partecipato anche i giovani del paese grigionese. Il progetto ha ricevuto il Prix Rando, il più importante riconoscimento svizzero per i sentieri escursionistici.</p> 935 </div> 936 <a class="uk-button uk-button-default" href="https://www.suisse-rando.ch/fr/la-randonnee/la-randonnee-5-2026/chemin-couronne-dans-une-vallee-sauvage" 937 target="_blank">Leggi lâarticolo in francese</a> 938 </div> 939 </div> 940 </div> 941</div> 942 943 944 945 946 947<div id="" 948 class=" ct-block-size-full ct-container-call_to_action ct-container-global ct-container-layout-default"> 949 <div class="ct-block ct-block-type-call_to_action"> 950 951 <div class="uk-card uk-card-default"> 952 <div class="uk-card-media-top"> 953 954 955 956 957 958 959 960 961 962 <picture> 963 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_full/e6763c9b9395e163bff24c2b44bea00454d9c984081d61fa75695d2a630ed595.jpg?2.2.43" alt="DSCF6405" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/e6763c9b9395e163bff24c2b44bea00454d9c984081d61fa75695d2a630ed595.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_full/e6763c9b9395e163bff24c2b44bea00454d9c984081d61fa75695d2a630ed595.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/e6763c9b9395e163bff24c2b44bea00454d9c984081d61fa75695d2a630ed595.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/e6763c9b9395e163bff24c2b44bea00454d9c984081d61fa75695d2a630ed595.jpg?2.2.43 610w"/> 964 </picture> 965 </div> 966 <div class="uk-card-body"> 967 <h3 class="uk-card-title">Sumvitg si aggiudica il premio principale del Prix Rando 2026</h3> 968 <div class="uk-text-default"> 969 <p>Il Comune di Sumvitg (GR) si aggiudica il premio principale del Prix Rando 2026. La giuria premia così lo spostamento di un tratto di sentiero escursionistico fuori dalla zona di pericolo e la costruzione di un ponte smontabile, due interventi che migliorano la sicurezza di escursioniste ed escursionisti.</p> 970 </div> 971 <a class="uk-button uk-button-default" href="https://www.sentieri-svizzeri.ch/it/sostegno/promozione-dei-sentieri-escursionistici/prix-rando" 972 target="_blank">Maggiori informazioni sul Prix Rando 2026</a> 973 </div> 974 </div> 975 </div> 976</div> 977 978 979 980 981 982<div id="" 983 class=" ct-block-size-one_fourth ct-container-call_to_action ct-container-layout-overlay"> 984 <div class="ct-block ct-block-type-call_to_action"> 985 986 <div class="uk-card uk-card-default"> 987 <div class="uk-card-media-top"> 988 989 990 991 992 993 994 995 996 997 <picture> 998 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_quarter/cc0dfc70358dfbf286588e5827f6b6f6396aadbaebc51559bc0eb64d4c89805f.jpg?2.2.43" alt="Schweizer_wanderwege_loktaufe_zuerich_12mai2026_21" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/cc0dfc70358dfbf286588e5827f6b6f6396aadbaebc51559bc0eb64d4c89805f.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_quarter/cc0dfc70358dfbf286588e5827f6b6f6396aadbaebc51559bc0eb64d4c89805f.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/cc0dfc70358dfbf286588e5827f6b6f6396aadbaebc51559bc0eb64d4c89805f.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/cc0dfc70358dfbf286588e5827f6b6f6396aadbaebc51559bc0eb64d4c89805f.jpg?2.2.43 610w"/> 999 </picture> 1000 </div> 1001 <div class="uk-card-body uk-light"> 1002 <h3 class="uk-card-title">I sentieri escursionistici salgono sui binari</h3> 1003 <div class="uk-text-default"> 1004 <p>Una locomotiva FFS nei colori di Sentieri Svizzeri percorre ora la Svizzera. Scopri il dietro le quinte del progetto, il making-of e i momenti più belli dellâinaugurazione alla stazione centrale di Zurigo.</p> 1005 </div> 1006 <a href="/it/escursionismo/eventi/la-locomotiva-ffs-nei-colori-di-sentieri-svizzeri" class="uk-button uk-button-text" 1007 >Alla pagina speciale</a> 1008 </div> 1009 </div> 1010 </div> 1011</div> 1012 1013 1014 1015 1016 1017<div id="" 1018 class=" ct-block-size-one_fourth ct-container-call_to_action ct-container-global ct-container-layout-overlay"> 1019 <div class="ct-block ct-block-type-call_to_action"> 1020 1021 <div class="uk-card uk-card-default"> 1022 <div class="uk-card-media-top"> 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 <picture> 1033 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_quarter/63f75fe22be26.jpg?2.2.43" alt="Image" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/63f75fe22be26.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_quarter/63f75fe22be26.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/63f75fe22be26.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f75fe22be26.jpg?2.2.43 610w"/> 1034 </picture> 1035 </div> 1036 <div class="uk-card-body uk-light"> 1037 <h3 class="uk-card-title">Escursionismo in autunno</h3> 1038 <div class="uk-text-default"> 1039 <p>Lâautunno è una stagione splendida per fare escursionismo. Il cielo terso sopra le cime già innevate e i larici dorati fanno battere più forte il cuore di ogni escursionista. Purtroppo le giornate si accorciano insieme ai tempi da dedicare alle escursioni. Può darsi che anche le infrastrutture, come ponti e funi di
1039sicurezza, possano già venire preparate per lâimminente inverno e smontate.<br /></p> 1040 </div> 1041 <a href="https://www.sentieri-svizzeri.ch/it/escursionismo/in-cammino/escursionismo-in-autunno" class="uk-button uk-button-text" 1042 target="_blank">I nostri consigli</a> 1043 </div> 1044 </div> 1045 </div> 1046</div> 1047 1048 1049 1050 1051 1052<div id="" 1053 class=" ct-block-size-one_fourth ct-container-call_to_action ct-container-layout-default"> 1054 <div class="ct-block ct-block-type-call_to_action"> 1055 1056 <div class="uk-card uk-card-default"> 1057 <div class="uk-card-media-top"> 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 <picture> 1068 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_quarter/0e073190f2d7829bd4b44bbbcc4d8114a10767f5a5f762f10c24f4c14ee494f3.png?2.2.43" alt="Bild-Newsbox-Landmarken-500x291-DE" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/0e073190f2d7829bd4b44bbbcc4d8114a10767f5a5f762f10c24f4c14ee494f3.png?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_quarter/0e073190f2d7829bd4b44bbbcc4d8114a10767f5a5f762f10c24f4c14ee494f3.png?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/0e073190f2d7829bd4b44bbbcc4d8114a10767f5a5f762f10c24f4c14ee494f3.png?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/0e073190f2d7829bd4b44bbbcc4d8114a10767f5a5f762f10c24f4c14ee494f3.png?2.2.43 610w"/> 1069 </picture> 1070 </div> 1071 <div class="uk-card-body"> 1072 <div class="uk-card-badge">Pubblicità </div> 1073 <h3 class="uk-card-title">Novità : orientarsi meglio con i punti di riferimento</h3> 1074 <div class="uk-text-default"> 1075 <p>Cime, torri, edifici famosi e altri elementi caratteristici sono ora visibili direttamente sulla carta swisstopo. Tocca un punto di riferimento per visualizzare informazioni aggiuntive. <br /></p> 1076 </div> 1077 <a class="uk-button uk-button-default" href="https://www.swisstopo.admin.ch/it/applicazione-swisstopo-1-24?mtm_campaign=wandern.ch&mtm_kwd=Newsbox%20App%20Landmarken%20IT" 1078 target="_blank">Per saperne di più</a> 1079 </div> 1080 </div> 1081 </div> 1082</div> 1083 1084 1085 1086 1087 1088<div id="" 1089 class=" ct-block-size-one_fourth ct-container-call_to_action ct-container-layout-default"> 1090 <div class="ct-block ct-block-type-call_to_action"> 1091 1092 <div class="uk-card uk-card-default"> 1093 <div class="uk-card-media-top"> 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 <picture> 1104 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_quarter/adf2bc5debd3c0f5878875a4b6120110ec1c5e3e0b1b24c85558d8c8d58a4d00.jpg?2.2.43" alt="Content (1)" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/adf2bc5debd3c0f5878875a4b6120110ec1c5e3e0b1b24c85558d8c8d58a4d00.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_quarter/adf2bc5debd3c0f5878875a4b6120110ec1c5e3e0b1b24c85558d8c8d58a4d00.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/adf2bc5debd3c0f5878875a4b6120110ec1c5e3e0b1b24c85558d8c8d58a4d00.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/adf2bc5debd3c0f5878875a4b6120110ec1c5e3e0b1b24c85558d8c8d58a4d00.jpg?2.2.43 610w"/> 1105 </picture> 1106 </div> 1107 <div class="uk-card-body"> 1108 <div class="uk-card-badge">Pubblicità </div> 1109 <h3 class="uk-card-title">Godetevi il panorama alpino e gustate tre deliziosi pasti</h3> 1110 <div class="uk-text-default"> 1111 <p>A Melchsee-Frutt, lâescursionismo diventa un vero piacere: prelibatezze culinarie e aria fresca di montagna trasformano questa escursione gastronomica in unâesperienza speciale da vivere nellâarco di una giornata. 1112Offerta forfaitaria a CHF 67.â, inclusa la corsa in cabinovia <br /></p> 1113 </div> 1114 <a class="uk-button uk-button-default" href="https://frutt.ch/sommer/entdecken/genusswanderung" 1115 target="_blank">Maggiori informazioni</a> 1116 </div> 1117 </div> 1118 </div> 1119</div> 1120 1121 1122 1123 1124 1125<div id="" 1126 class=" ct-block-size-full ct-container-ad_server_advertisement">
1127 <div class="ct-block ct-block-type-ad_server_advertisement"> 1128 <iframe id="ct-ad-billboard_one" src="/it/ad-iframe/billboard_one" width="100%" height="100%" frameborder="0" scrolling="no"></iframe> 1129 1130
1130<script> 1131 document.addEventListener("DOMContentLoaded",function () { 1132 let iframe = document.getElementById('ct-ad-billboard_one'); 1133 1134 function setupAutoResize() { 1135 // bail out if cross-origin (shouldnât be for your case) 1136 const iwin = iframe.contentWindow; 1137 const doc = iframe.contentDocument; 1138 if (!iwin || !doc) return; 1139 1140 // Single function to measure and set height 1141 const measureAndSet = () => { 1142 // Allow shrinking: reset before measuring 1143 iframe.style.height = '0px'; 1144 1145 const b = doc.body; 1146 const e = doc.documentElement; 1147 // Use a robust max of common metrics 1148 const height = Math.max( 1149 b.scrollHeight, e.scrollHeight, 1150 b.offsetHeight, e.offsetHeight, 1151 e.clientHeight 1152 ); 1153 1154 iframe.style.height = height + 'px'; 1155 }; 1156 1157 // Initial measure once iframeâs own content is ready 1158 measureAndSet(); 1159 } 1160 1161 // Run when the iframe finishes loading its document 1162 iframe.addEventListener('load', setupAutoResize); 1163 }) 1164 </script>
1164 1165 </div> 1166</div> 1167 1168 1169 1170 1171 1172<div id="" 1173 class=" ct-block-size-one_half ct-container-call_to_action ct-container-global ct-container-layout-overlay"> 1174 <div class="ct-block ct-block-type-call_to_action"> 1175 1176 <div class="uk-card uk-card-default"> 1177 <div class="uk-card-media-top"> 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 <picture> 1188 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/83340e63f375697f13a9949574629c75ecd9099f5c0e251561b7dcf0a33b7ce1386105.png?2.2.43" alt="2026-5_Web_1600x600px_WB" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/83340e63f375697f13a9949574629c75ecd9099f5c0e251561b7dcf0a33b7ce1386105.png?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/83340e63f375697f13a9949574629c75ecd9099f5c0e251561b7dcf0a33b7ce1386105.png?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/83340e63f375697f13a9949574629c75ecd9099f5c0e251561b7dcf0a33b7ce1386105.png?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/83340e63f375697f13a9949574629c75ecd9099f5c0e251561b7dcf0a33b7ce1386105.png?2.2.43 610w"/> 1189 </picture> 1190 </div> 1191 <div class="uk-card-body uk-light"> 1192 <h3 class="uk-card-title">In palio due giacche da escursionismo Vaude.</h3> 1193 <div class="uk-text-default"> 1194 <p>Mettiamo in palio due giacche da escursionismo Vaude.</p> 1195 </div> 1196 <a href="/it/ispirazione/concorso" class="uk-button uk-button-text" 1197 >Partecipa ora</a> 1198 </div> 1199 <div class="uk-card-badge">Concorso</div> 1200 </div> 1201 </div> 1202</div> 1203 1204 1205 1206 1207 1208<div id="" 1209 class=" ct-block-size-one_half ct-container-product ct-container-global"> 1210 <div class="ct-block ct-block-type-product"> 1211 1212 1213 1214<div class="uk-card uk-card-default"> 1215 <div class="uk-card-media-top"> 1216 <a href="/it/shop/product/1749/DAS-WANDERN-5-2026"> 1217 <picture> 1218 <img src="/media/cache/cloudtec_shop_product_card/a95cc5ca1d98e04af968f614e551d37c5648c3928ad476176443c527e8f9623a900713.jpg" alt="DAS WANDERN 5/2026"/> 1219 </picture> 1220 </a> 1221 </div> 1222 <div class="uk-card-body"> 1223 <h3 class="uk-card-title"><a 1224 href="/it/shop/product/1749/DAS-WANDERN-5-2026">DAS WANDERN 5/2026</a></h3> 1225 <p> 1226 <span class="price">CHF 13.50</span> 1227 </p> 1228 <div class="uk-card-badge">Nuovo</div> 1229 1230 <a href="/it/shop/product/1749/DAS-WANDERN-5-2026" class="uk-button uk-button-primary " 1231 title="Scegli l'opzione"><i class="fa fa-bag-shopping"></i>Scegli l'opzione</a> 1232 1233 1234 </div> 1235</div> 1236 </div> 1237</div> 1238 1239 1240 1241 1242 1243<div id="" 1244 class=" ct-block-size-one_third ct-container-information ct-container-global ct-container-layout-iconbox ct-container-theme-primary"> 1245 <div class="ct-block ct-block-type-information"> 1246 <div 1247 class="ct-block-information "> 1248 <div class="ct-block-icon"> 1249 <i class="fa fa-signs-post"></i> 1250 </div> 1251 <div class="ct-block-text"> 1252 <a class="ct-block-link uk-text-large" 1253 href="/it/segnalare-difetti/" 1254 > 1255 Segnalaci eventuali danni 1256 </a> 1257 <p class="Liste1">Hai scoperto indicatori di direzione difettosi o mancanti lungo la 1258rete dei sentieri escursionistici svizzeri? <i></i></p><p><i></i></p><i></i> 1259 </div> 1260 </div> 1261 </div> 1262</div> 1263 1264 1265 1266 1267 1268<div id="" 1269 class=" ct-block-size-one_third ct-container-information ct-container-global ct-container-layout-iconbox ct-container-theme-primary"> 1270 <div class="ct-block ct-block-type-information"> 1271 <div 1272 class="ct-block-information "> 1273 <div class="ct-block-icon"> 1274 <i class="fa fa-people-pants"></i> 1275 </div> 1276 <div class="ct-block-text"> 1277 <a class="ct-block-link uk-text-large" 1278 href="/it/cercare-compagni-descursione/" 1279 > 1280 Trovare compagnia per unâescursione 1281 </a> 1282 <p class="Liste1">Scopri come trovare facilmente compagni di escursione!</p><p></p> 1283 </div> 1284 </div> 1285 </div> 1286</div> 1287 1288 1289 1290 1291 1292<div id="" 1293 class=" ct-block-size-one_third ct-container-information ct-container-global ct-container-layout-iconbox ct-container-theme-primary"> 1294 <div class="ct-block ct-block-type-information"> 1295 <div 1296 class="ct-block-information "> 1297 <div class="ct-block-icon"> 1298 <i class="fa fa-envelope-open-text"></i> 1299 </div> 1300 <div class="ct-block-text"> 1301 <a class="ct-block-link uk-text-large" 1302 href="/it/iscrizione-newsletter" 1303 > 1304 Iscriviti alla nostra newsletter 1305 </a> 1306 <p>La nostra newsletter ti tiene aggiornato/a: riceverai le nostre notizie mensilmente e il suggerimento per un'escursione del giorno settimanalmente (in tedesco o francese).<br /></p> 1307 </div> 1308 </div> 1309 </div> 1310</div> 1311 </div> 1312 </div> 1313 </section> 1314 1315 1316 1317 1318 1319 1320 <section 1321 id="page-section-4" 1322 class=" uk-section uk-section-default uk-padding-remove-top" 1323 data-section="384376" 1324 data-position="4"> 1325 1326 1327 <div class="uk-container"> 1328 <div class="ct-floating-grid ct-floating-grid-colgap-medium ct-floating-grid-rowgap-xxlarge ct-floating-grid-align-stretch"> 1329 1330 1331 1332 1333 1334<div id="" 1335 class=" ct-block-size-full ct-container-ad_server_advertisement">
1336 <div class="ct-block ct-block-type-ad_server_advertisement"> 1337 <iframe id="ct-ad-billboard_two" src="/it/ad-iframe/billboard_two" width="100%" height="100%" frameborder="0" scrolling="no"></iframe> 1338 1339
1339<script> 1340 document.addEventListener("DOMContentLoaded",function () { 1341 let iframe = document.getElementById('ct-ad-billboard_two'); 1342 1343 function setupAutoResize() { 1344 // bail out if cross-origin (shouldnât be for your case) 1345 const iwin = iframe.contentWindow; 1346 const doc = iframe.contentDocument; 1347 if (!iwin || !doc) return; 1348 1349 // Single function to measure and set height 1350 const measureAndSet = () => { 1351 // Allow shrinking: reset before measuring 1352 iframe.style.height = '0px'; 1353 1354 const b = doc.body; 1355 const e = doc.documentElement; 1356 // Use a robust max of common metrics 1357 const height = Math.max( 1358 b.scrollHeight, e.scrollHeight, 1359 b.offsetHeight, e.offsetHeight, 1360 e.clientHeight 1361 ); 1362 1363 iframe.style.height = height + 'px'; 1364 }; 1365 1366 // Initial measure once iframeâs own content is ready 1367 measureAndSet(); 1368 } 1369 1370 // Run when the iframe finishes loading its document 1371 iframe.addEventListener('load', setupAutoResize); 1372 }) 1373 </script>
1373 1374 </div> 1375</div> 1376 </div> 1377 </div> 1378 </section> 1379 1380 1381 1382 1383 1384 1385 <section 1386 id="page-section-5" 1387 class=" uk-section uk-section-default uk-padding-remove-top" 1388 data-section="384377" 1389 data-position="5"> 1390 1391 1392 <div class="uk-container"> 1393 <div class="ct-floating-grid ct-floating-grid-colgap-xlarge ct-floating-grid-rowgap-medium ct-floating-grid-align-stretch"> 1394 1395 1396 1397 1398 1399<div id="" 1400 class=" ct-block-size-one_half ct-container-call_to_action ct-container-global ct-container-layout-overlay"> 1401 <div class="ct-block ct-block-type-call_to_action"> 1402 1403 <div class="uk-card uk-card-default"> 1404 <div class="uk-card-media-top"> 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 <picture> 1415 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/3383b52fd1c888d11087085277f613449be93671a05c5cff781ca42fdc11f861.jpg?2.2.43" alt="Bild1" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/3383b52fd1c888d11087085277f613449be93671a05c5cff781ca42fdc11f861.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/3383b52fd1c888d11087085277f613449be93671a05c5cff781ca42fdc11f861.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/3383b52fd1c888d11087085277f613449be93671a05c5cff781ca42fdc11f861.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/3383b52fd1c888d11087085277f613449be93671a05c5cff781ca42fdc11f861.jpg?2.2.43 610w"/> 1416 </picture> 1417 </div> 1418 <div class="uk-card-body uk-light"> 1419 <h3 class="uk-card-title">La Mobiliare sostiene ponti e passerelle sui sentieri escursionistici</h3> 1420 <div class="uk-text-default"> 1421 <p>Con il Fondo Mobiliare ponti 1422e passerelle, la Mobiliare Svizzera Società Cooperativa, in qualità di partner 1423principale di Sentieri Svizzeri, offre un sostegno finanziario per il 1424risanamento e la costruzione di ponti e passerelle sulla rete svizzera dei 1425sentieri escursionistici. Da ora è possibile ottenere contributi più elevati se 1426l'opera è comprovabilmente meglio protetta contro i pericoli naturali.</p> 1427 </div> 1428 <a href="https://www.sentieri-svizzeri.ch/fondo-mobiliare" class="uk-button uk-button-text" 1429 target="_blank">Invia un progetto di costruzione</a> 1430 </div> 1431 </div> 1432 </div> 1433</div> 1434 1435 1436 1437 1438 1439<div id="" 1440 class=" ct-block-size-one_half ct-container-call_to_action ct-container-global ct-container-layout-overlay"> 1441 <div class="ct-block ct-block-type-call_to_action"> 1442 1443 <div class="uk-card uk-card-default"> 1444 <div class="uk-card-media-top"> 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 <picture> 1455 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/63f73fce28884.jpg?2.2.43" alt="Image" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/63f73fce28884.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/63f73fce28884.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/63f73fce28884.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f73fce28884.jpg?2.2.43 610w"/> 1456 </picture> 1457 </div> 1458 <div class="uk-card-body uk-light"> 1459 <h3 class="uk-card-title">La Posta sostiene finanziariamente i sentieri escursionistici e i sentieri escursionistici invernali</h3> 1460 <div class="uk-text-default"> 1461 <p>Con il Premio promozionale Posta, La Posta Svizzera sostiene progetti attrattivi su sentieri escursionistici e sentieri escursionistici invernali che non potrebbero essere realizzati senza un sostegno esterno.<br /></p> 1462 </div> 1463 <a href="https://www.sentieri-svizzeri.ch/it/supporto/promozione-dei-sentieri-escursionistici/premio-posta" class="uk-button uk-button-text" 1464 target="_blank">Invia un progetto</a> 1465 </div> 1466 </div> 1467 </div> 1468</div> 1469 1470 1471 1472 1473 1474<div id="" 1475 class=" ct-block-size-one_half ct-container-call_to_action ct-container-layout-default"> 1476 <div class="ct-block ct-block-type-call_to_action"> 1477 1478 <div class="uk-card uk-card-default"> 1479 <div class="uk-card-media-top"> 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 <picture> 1490 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/d95c3de483d0d6c1cbe56fff96dddb1f144c0f288a45d8f29e2b58af7c71e793.JPG?2.2.43" alt="NM2_0854c" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/d95c3de483d0d6c1cbe56fff96dddb1f144c0f288a45d8f29e2b58af7c71e793.JPG?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/d95c3de483d0d6c1cbe56fff96dddb1f144c0f288a45d8f29e2b58af7c71e793.JPG?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/d95c3de483d0d6c1cbe56fff96dddb1f144c0f288a45d8f29e2b58af7c71e793.JPG?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/d95c3de483d0d6c1cbe56fff96dddb1f144c0f288a45d8f29e2b58af7c71e793.JPG?2.2.43 610w"/> 1491 </picture> 1492 </div> 1493 <div class="uk-card-body"> 1494 <small>Impegno della Mobiliare</small> 1495 <h3 class="uk-card-title">Attraversamento sicuro e confortevole della Murg (TG)</h3> 1496 <div class="uk-text-default"> 1497 <p>La passerella Frauwissteg a Münchwilen è stata completamente rinnovata. Un vero valore aggiunto, soprattutto per la Fondazione Sonnenhalde. Il centro di competenza per persone con disabilità multiple gravi ha fatto propria la filosofia «Partecipare alla vita» â un obiettivo che, grazie alla nuova passerella, sarà ancora più semplice da raggiungere.<br /></p> 1498 </div> 1499 <a class="uk-button uk-button-default" href="/it/sostegno/promozione-dei-sentieri-escursionistici/fondo-mobiliare-ponti-e-passerelle" 1500 >Il Fondo Mobiliare ponti e passerelle</a> 1501 </div> 1502 </div> 1503 </div> 1504</div> 1505 1506 1507 1508 1509 1510<div id="" 1511 class=" ct-block-size-one_half ct-container-call_to_action ct-container-layout-default"> 1512 <div class="ct-block ct-block-type-call_to_action"> 1513 1514 <div class="uk-card uk-card-default"> 1515 <div class="uk-card-media-top"> 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 <picture> 1526 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/487965ecb6d13a6423484c48e91eddfda00235d8442990986899cb1c96ac9c8e.JPEG?2.2.43" alt="IMG_1367" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/487965ecb6d13a6423484c48e91eddfda00235d8442990986899cb1c96ac9c8e.JPEG?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/487965ecb6d13a6423484c48e91eddfda00235d8442990986899cb1c96ac9c8e.JPEG?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/487965ecb6d13a6423484c48e91eddfda00235d8442990986899cb1c96ac9c8e.JPEG?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/487965ecb6d13a6423484c48e91eddfda00235d8442990986899cb1c96ac9c8e.JPEG?2.2.43 610w"/> 1527 </picture> 1528 </div> 1529 <div class="uk-card-body"> 1530 <small>Impegno della Posta</small> 1531 <h3 class="uk-card-title">Sostegno al risanamento dei danni causati dal maltempo</h3> 1532 <div class="uk-text-default"> 1533 <p>Con il Premio Posta, Sentieri Svizzeri premia ogni anno, insieme alla Posta Svizzera nellâambito della sua partnership principale, progetti di costruzione e manutenzione sulla rete dei sentieri escursionistici. Nel 2026 il riconoscimento va ad Adelboden, dove saranno risanati i danni causati dal maltempo al sentiero presso il Gilsbach.<br /></p> 1534 </div> 1535 <a class="uk-button uk-button-default" href="/it/sostegno/promozione-dei-sentieri-escursionistici/premio-posta" 1536 >Maggiori informazioni</a> 1537 </div> 1538 </div> 1539 </div> 1540</div> 1541 </div> 1542 </div> 1543 </section> 1544 1545 1546 1547 1548 1549 1550 <section 1551 id="page-section-6" 1552 class=" uk-section uk-section-default uk-padding-remove-top" 1553 data-section="384378" 1554 data-position="6"> 1555 1556 1557 <div class="uk-container"> 1558 <div class="ct-floating-grid ct-floating-grid-colgap-medium ct-floating-grid-rowgap-large ct-floating-grid-align-stretch"> 1559 1560 1561 1562 1563 1564<div id="" 1565 class=" ct-block-size-full ct-container-title ct-container-layout-line"> 1566 <div class="ct-block ct-block-type-title"> 1567 1568 1569 1570<h2 class="uk-heading-2xlarge uk-heading-line"> 1571 <span>Social Wall</span> 1572</h2> 1573 </div> 1574</div> 1575 1576 1577 1578 1579 1580<div id="" 1581 class=" ct-block-size-full ct-container-social_wall"> 1582 <div class="ct-block ct-block-type-social_wall"> 1583 <div id="flockler-embed-17ae22f001b05c11109710f94e45f202"></div>
1584<script> 1585 var _flocklerOverride = _flocklerOverride || {}; 1586 _flocklerOverride["17ae22f001b05c11109710f94e45f202"] = { 1587 count: 8, 1588 only: ["instagram"], 1589 tags: ["sentierisvizzeri"], 1590 locale: "it" 1591 }; 1592</script>
vendor: 1 bytes, line 1592
1592
1593<script src="https://plugins.flockler.com/embed/17a3e4a135b0c4792dfcceb356eaf73d/17ae22f001b05c11109710f94e45f202" async></script>
1593 1594 </div> 1595</div> 1596 </div> 1597 </div> 1598 </section> 1599 1600 1601 </div> 1602 1603 1604 1605 </div> 1606 1607 1608 </main> 1609 1610 <div id="js-add-item-to-cart-modal" class="uk-flex-top" uk-modal> 1611 <div class="uk-modal-dialog uk-margin-auto-vertical"> 1612 <div class="uk-modal-header"> 1613 <h2 class="uk-modal-title"> 1614 <i class="fa fa-cart-arrow-down"></i> 1615 L'articolo è stato aggiunto al carrello 1616 </h2> 1617 <button class="uk-modal-close-default" type="button" uk-close></button> 1618 </div> 1619 <div class="uk-modal-body"> 1620 <input class="uk-input l-cart-modal-item" id="js-add-item-to-cart-modal-product" type="text" readonly> 1621 </div> 1622 <div class="uk-modal-footer"> 1623 1624 1625 <button class="uk-button uk-button-light js-close-add-item-to-cart-modal" 1626 title="Continua a fare shopping" 1627 >Continua a fare shopping</button> 1628 1629 1630 1631 <a href="/it/shop/cart" class="uk-button uk-button-primary " 1632 title="Al carrello">Al carrello</a> 1633 1634 </div> 1635 </div> 1636</div> 1637 1638 <footer> 1639 <div class="ct-scroll-top"> 1640 <a href="#top" class="uk-icon-button uk-button-primary" uk-scroll><i class="fa fa-arrow-up"></i></a> 1641 </div> 1642 <section class="ct-page-section ct-section-partners"> 1643 <div class="ct-section-partners-decoration"></div> 1644 <div class="uk-container"> 1645 <div class="ct-floating-grid l-colgap-large l-rowgap-large"> 1646 <div class="ct-block-size-one_third ct-partners-head"> 1647 <small>Partnership</small> 1648 <h2 class="uk-heading-2xlarge l-bold">Grazie ai nostri partner, raggiungiamo altezze insperate.</h2> 1649 </div> 1650 <div class="ct-block-size-two_third"> 1651 <div class="ct-partners-grid"> 1652 <div class="ct-partner die-mobiliar"> 1653 <a href="https://www.mobiliare.ch/chi-siamo/sostenibilita-impegno/impegno-sociale/impegno-sentieri-svizzeri" target="_blank"> 1654 <img src="/it/media/read/a3c70f34bc74476a00572767de6ae5b87e710e17/easy" 1655 alt="La Mobiliare"> 1656 </a> 1657 <p class="uk-text-meta">PARTNER PRINCIPALE</p> 1658 </div><!-- /.ct-partner --> 1659 <div class="ct-partner die-post"> 1660 <a href="https://wandern.post.ch/it" target="_blank"> 1661 <img src="/it/media/read/805b2c08857d3ef8d8cb0eb6ef1cbbe2608be59d/easy" 1662 alt="La Posta"> 1663 </a> 1664 <p class="uk-text-meta">PARTNER PRINCIPALE E PARTNER DI TRASPORTO</p> 1665 </div><!-- /.ct-partner --> 1666 <div class="ct-partner"> 1667 <a href="https://www.transa.ch" target="_blank"> 1668 <img src="/it/media/read/2b288d0588085586605008b14628ec8367c47791/easy" 1669 alt="Transa"> 1670 </a> 1671 <p class="uk-text-meta">PARTNER</p> 1672 </div><!-- /.ct-partner --> 1673 <div class="ct-partner"> 1674 <a href="https://lowa.com/ch-de/" target="_blank"> 1675 <img src="/it/media/read/d6531488a0a62de3694b1d62d7f112e12c78531e/easy" 1676 alt="Lowa"> 1677 </a> 1678 <p class="uk-text-meta">PARTNER</p> 1679 </div><!-- /.ct-partner --> 1680 </div>
1680<!-- /.ct-partners --> 1681 1682 </div> 1683 </div> 1684 </div> 1685 </section> 1686 <div class="ct-footer ct-footer--alt"> 1687 <div class="uk-container"> 1688 1689 <div class="ct-footer-cols ct-footer-sponsors"> 1690 <div class="ct-footer-col"> 1691 <div class="ct-footer-contacts"> 1692 <h5>GESTORE</h5> 1693 <p>Sentieri Svizzeri</p> 1694 <p>Monbijoustrasse 61</p> 1695 <p>3007 Berna</p> 1696 1697 <br/> 1698 <p> 1699 <a href="mailto:obfc:jogpAtdixfj{fs.xboefsxfhf/di:obfc">obfc:jogpAtdixfj{fs.xboefsxfhf/di:obfc</a> 1700 </p> 1701 <p>031 370 10 20</p> 1702 <br/> 1703 <p>Servizio agli abbonati e ai donatori; informazioni generali.<br /> 1704Dal lunedì al giovedì dalle 8:00 alle 12:00 e dalle 13:30 alle 17:00.<br /> 1705Il venerdì dalle 8:00 alle 12:00 e dalle 13:30 alle 16:00.</p> 1706 <a href="/it/contatto/" 1707 class="uk-button uk-button-primary"> 1708 CONTATTO PER RICHIESTE 1709 </a> 1710 </div><!-- /.footer__contacts --> 1711 1712 </div><!-- /.ct-footer-col --> 1713 1714 <div class="ct-footer-col"> 1715 <div class="ct-footer-payments"> 1716 <h5>CONTO PER DONAZIONI</h5> 1717 <p>Sentieri Svizzeri, 3007 Berna</p> 1718 <p>IBAN CH48 0900 0000 4001 4552 5</p> 1719 <a href="https://www.zewo.ch" target="_blank" class="uk-display-inline-block"> 1720 <svg xmlns="http://www.w3.org/2000/svg" width="74.666" height="80.394" viewBox="0 0 74.666 80.394"> 1721 <path id="zewo-guetesiegel" 1722 d="M8852.157-2936.322l.13-5.007-1.687-.045.018-.663,4.1.107-.021.665-1.687-.045-.132,5.007Zm3.856-5.746.728-.062.5,5.659-.728.063Zm-7.928,5.413-.616-2.524-1.54-.288-.437,2.323-.7-.132,1.052-5.585,2.182.411a1.913,1.913,0,0,1,1.321.763,1.6,1.6,0,0,1,.226,1.216,1.513,1.513,0,0,1-.632,1.024,1.606,1.606,0,0,1-.741.268l.654,2.669Zm-2.033-3.465,1.483.279c.661.125,1.183-.056,1.317-.763s-.286-1.073-.946-1.2l-1.486-.281Zm12.493-2.2,3.595-.761.136.643-2.9.614.384,1.807,2.581-.547.141.658-2.584.547.516,2.443-.7.145Zm-19.359,3.222,1.924-5.337,3.568,1.285-.222.618-2.9-1.047-.587,1.627,2.546.919-.229.632-2.544-.919-.665,1.845,2.9,1.046-.223.616Zm24.188-4.427.689-.236,1.828,5.375-.689.234Zm2.41-.843,3.409-1.649.288.589-2.769,1.341.752,1.553,2.432-1.176.29.6-2.43,1.178.854,1.76,2.765-1.339.288.589-3.41,1.651Zm-30.372,3.528a2.183,2.183,0,0,1-1.047-1.279,3.051,3.051,0,0,1,.513-2.387,3.061,3.061,0,0,1,1.759-1.7,2.2,2.2,0,0,1,1.638.217,2.179,2.179,0,0,1,1.04,1.247,1.943,1.943,0,0,1-.141,1.406l-.646-.359a1.242,1.242,0,0,0,.114-.844,1.372,1.372,0,0,0-.694-.861,1.429,1.429,0,0,0-1.11-.
1722125,2.615,2.615,0,0,0-1.317,1.374,2.631,2.631,0,0,0-.473,1.843,1.437,1.437,0,0,0,.689.879,1.418,1.418,0,0,0,1.116.125,1.3,1.3,0,0,0,.667-.562l.645.357a1.981,1.981,0,0,1-1.127.875,1.981,1.981,0,0,1-.543.073A2.234,2.234,0,0,1,8835.412-2940.845Zm-11.1-32.8a29.2,29.2,0,0,1,29.2-29.2,29.038,29.038,0,0,1,12.938,3.052q-1,1.613-1.957,3.182a25.42,25.42,0,0,0-10.98-2.526,25.525,25.525,0,0,0-25.49,25.49,25.524,25.524,0,0,0,25.49,25.489A25.519,25.519,0,0,0,8879-2973.641a25.437,25.437,0,0,0-4.554-14.5c.7-1.116,1.41-2.242,2.122-3.367a29.055,29.055,0,0,1,6.143,17.87,29.2,29.2,0,0,1-29.2,29.2A29.2,29.2,0,0,1,8824.315-2973.641Zm42.092,28.153.794-1.477.571.353-.986,1.357Zm10.942-.009a3.045,3.045,0,0,1-2.1-1.247,3.034,3.034,0,0,1-1.049-2.2,2.194,2.194,0,0,1,.723-1.486,2.191,2.191,0,0,1,1.513-.587,1.947,1.947,0,0,1,1.285.58l-.544.5a1.218,1.218,0,0,0-.764-.375,1.377,1.377,0,0,0-1.037.382,1.456,1.456,0,0,0-.471,1.015,2.621,2.621,0,0,0,.886,1.683,2.61,2.61,0,0,0,1.593,1.035,1.437,1.437,0,0,0,1.056-.375,1.41,1.41,0,0,0,.471-1.015,1.292,1.292,0,0,0-.318-.812l.544-.5a1.984,1.984,0,0,1,.471,1.345,2.205,2.205,0,0,1-.714,1.475,2.2,2.2,0,0,1-1.476.588Zm-50.6-2.1,3.562-3.53-1.189-1.2.474-.466,2.885,2.914-.471.467-1.189-1.2-3.563,3.528Zm50.544-5.047,2.356-2.979.511.406-1.91,2.419,1.359,1.071,1.678-2.122.524.417-1.676,2.122,1.54,1.216,1.909-2.419.516.408-2.352,2.977Zm-53.25,1.99,1.292-2.245-.913-1.274-1.916,1.375-.415-.578,4.605-3.3,1.3,1.8a1.91,1.91,0,0,1,.429,1.462,1.616,1.616,0,0,1-.674,1.035,1.511,1.511,0,0,1-1.16.3,1.6,1.6,0,0,1-.721-.319l-1.366,2.376Zm.917-3.9.881,1.227c.391.544.891.776,1.478.357s.531-.973.141-1.517l-.882-1.227Zm55.35-2.075,1.082-1.946a1.907,1.907,0,0,1,1.141-1.013,1.6,1.6,0,0,1,1.225.167,1.5,1.5,0,0,1,.768.924,1.6,1.6,0,0,1,.021.788l2.735.221-.384.685-2.581-.21-.766,1.37,2.066,1.149-.349.623Zm1.656-1.626-.736,1.321,1.742.971.734-1.323c.328-.587.321-1.138-.306-1.488a1.083,1.083,0,0,0-.525-.153A1.089,1.089,0,0,0,8881.964-2958.262Zm-62.653-.277,5.085-2.535,1.7,3.4-.59.295-1.376-2.76-1.551.77,1.209,2.426-.6.3-1.207-2.423-1.758.877,1.376,2.76-.587.292Zm41.38,2.5a3.318,3.318,0,0,1-1.839-3.037,3.784,3.784,0,0,1,.375-1.64,3.622,3.622,0,0,1,3.211-2.117,3.113,3.113,0,0,1,1.346.3,3.321,3.321,0,0,1,1.838,3.039,3.835,3.835,0,0,1-.375,1.642,3.615,3.615,0,0,1-3.213,2.115A3.048,3.048,0,0,1,8860.69-2956.038Zm-10.577-1c-5.257-8.077-7.617-13.7-12.358-21.938a1.489,1.489,0,0,1,.113-1.756c1.613-1.419,6.623,1.013,6.866,1.622,2.438,6.194,1.56,4.9,4.364,11.023.191.419,1.02,2.106,
17221.37,2.789,1.024-2.515,2.108-4.965,3.36-7.618a240.019,240.019,0,0,1,14.746-26.78,5.985,5.985,0,0,0,1.022.1,5.76,5.76,0,0,0,1.8-.288,7.394,7.394,0,0,0,4.213-4.21,9.112,9.112,0,0,0,1.162-4.027,5.956,5.956,0,0,0-.306-1.879c-.011-.033-.031-.06-.042-.094,1.957,0,6.479,1.279,7.131,1.93,1.049,1.049-.314,2.876-.433,3.07-10.224,15.559-18.77,29.493-27.517,45.006l-1.448,2.818a2.76,2.76,0,0,1-2.181,1.114A2.227,2.227,0,0,1,8850.113-2957.033Zm33.671-5.2-.578,1.589-.627-.228,1.4-3.853.625.228-.578,1.589,4.715,1.714-.248.678Zm-65.623.652,5.347-1.894.243.685-5.347,1.9Zm-1.573-6.051.694-.154,4.909,2.3-.708-3.2.647-.143.891,4.023-.7.154-4.9-2.307.724,3.264-.649.143Zm67.674,1.651.165-.709,5.522,1.294-.165.709Zm.54-2.495.415-3.655.653.076-.337,2.943,1.839.21.3-2.626.67.076-.3,2.626,2.483.281-.081.709Zm-68.5-1.964,5.645-.526.067.723-5.646.527Zm4.835-1.85.078-2.959-1.848-.049-.069,2.64-.672-.018.069-2.64-2.494-.067.018-.712,5.67.149-.1,3.673Zm64.045-1.912,5.682-.031,0,.73-5.681.031Zm.422-2.3a2.2,2.2,0,0,1-.806-1.444,2.165,2.165,0,0,1,.384-1.575,1.915,1.915,0,0,1,1.21-.725l.1.729a1.234,1.234,0,0,0-.745.413,1.371,1.371,0,0,0-.276,1.071,1.449,1.449,0,0,0,.56.966,2.623,2.623,0,0,0,1.891.234,2.606,2.606,0,0,0,1.76-.716,1.441,1.441,0,0,0,.295-1.08,1.412,1.412,0,0,0-.564-.969,1.3,1.3,0,0,0-.851-.2l-.1-.73a1.986,1.986,0,0,1,1.375.382,2.2,2.2,0,0,1,.8,1.428,2.212,2.212,0,0,1-.4,1.6,3.066,3.066,0,0,1-2.223,1.011,6.715,6.715,0,0,1-.871.067A2.388,2.388,0,0,1,8885.6-2976.5Zm-69.1-2.106.1-.721,5.616.805-.1.721Zm5.226-1.359.433-1.631-4.837-1.283.183-.7,4.84,1.285.433-1.631.641.17-1.051,3.958Zm62.236-2.463-.239-.8,4.847-3.565.212.705-1.151.834.714,2.356,1.419.049.208.689Zm.566-.589,3.105.1-.58-1.921Zm-62.4-2.093a1.512,1.512,0,0,1-.848-.85,1.612,1.612,0,0,1-.087-.785l-2.745.022.319-.716,2.593-.018.641-1.433-2.158-.962.29-.651,5.184,2.309-.905,2.033a1.922,1.922,0,0,1-1.047,1.111,1.629,1.629,0,0,1-.543.1A1.681,1.681,0,0,1,8822.124-2985.11Zm-.139-2.129c-.274.614-.221,1.162.438,1.457s1.111-.031,1.384-.645l.616-1.383-1.821-.81Zm59.385-1.618.6-.281.714,1.531,4.543-2.118.306.652-4.545,2.117.716,1.531-.6.283Zm-56.049-.763,1.7-2.575-1.445-.951-1.488,2.26-.562-.37,1.49-2.26-1.638-1.08-1.7,2.575-.549-.362,2.091-3.171,4.739,3.126-2.089,3.168Zm55.772-.665a2.185,2.185,0,0,1-1.357-.93,2.179,2.179,0,0,1-.348-1.609,3.063,3.063,0,0,1,1.533-1.908,3.064,3.064,0,0,1,2.347-.7,2.175,2.175,0,0,1,1.356.931,2.151,2.151,0,0,1,.349,1.609,3.058,3.058,0,0,1-1.533,1.908,3.521,3.521,0,0,1-1.919.745A2.071,2.071,0,0,1,8881.094-2990.284Zm.238-3.838a2.641,2.641,0,0,0-1.256,1.433,1.445,1.445,0,0,0,.223,1.1,1.439,1.439,0,0,0,.931.62,2.625,2.625,0,0,0,1.8-.623,2.617,2.617,0,0,0,1.256-1.43,1.432,1.432,0,0,0-.221-1.1,1.451,1.451,0,0,0-.931-.623,1.354,1.354,0,0,0-.233-.02A3.025,3.025,0,0,0,8881.332-2994.122Zm-53.175.234-.952-5.342-2.249,2.479-.493-.446,2.815-3.1.529.48.961,5.342,2.2-2.428.493.448-2.776,3.055Zm5.559-7.174,1.968-9.5-5.408,2.918-.886-1.642,7.642-4.124.962,1.783-1.926,9.474,5.521-2.979.888,1.642-7.8,4.206Zm33.727-.578a4.551,4.551,0,0,1-2.337-2.6c-.546-1.647-.062-3.079.766-4.733s1.693-2.916,3.341-3.465a4.554,4.554,0,0,1,3.479.317,4.55,4.55,0,0,1,2.336,2.6c.549,1.647.056,3.095-.772,4.748s-1.685,2.9-3.331,3.449a4.18,4.18,0,0,1-1.321.211A4.836,4.836,0,0,1,8867.442-3001.639Zm2.481-8.938c-1.062.377-1.721,1.615-2.185,2.544a4.73,4.73,0,0,0-.724,3.258,2.5,2.5,0,0,0,1.261,1.47,2.5,2.5,0,0,0,1.935.129,4.732,4.732,0,0,0,2.176-2.53c.464-.926,1.064-2.2.728-3.273a2.483,2.483,0,0,0-1.261-1.468,2.555,2.555,0,0,0-1.138-.268A2.248,2.248,0,0,0,8869.924-3010.578Zm-28.6-4.286,7.908-1.549.359,1.832-5.889,1.154.507,2.582,5.183-1.013.357,1.816-5.184,1.015.594,3.039,5.889-1.154.359,1.832-7.908,1.549Zm18.694,10.26-1.39-8.031-3.3,7.455-2.042-.252-.884-11.239,1.948-.025.606,8,3.252-7.345,1.709.21,1.325,7.908,2.56-7.606,1.767.493-3.512,10.686Z" 1723 transform="translate(-8816.2 3016.696)"/> 1724 </svg> 1725 </a> 1726 </div><!-- /.footer__payments --> 1727 </div><!-- /.ct-footer-col --> 1728 1729 <div class="ct-footer-col"> 1730 <div class="ct-socials"> 1731 <h5>SEGUICI!</h5> 1732 <ul> 1733 <li> 1734 <a href="https://whatsapp.com/channel/0029Vb4p0s9FMqrVvKCAsY1F" target="_blank" 1735 class="uk-icon-button uk-button-white"> 1736 <i class="fa-brands fa-whatsapp"></i> 1737 </a> 1738 </li> 1739 <li> 1740 <a href="https://www.linkedin.com/company/schweizer-wanderwege" target="_blank" 1741 class="uk-icon-button uk-button-white"> 1742 <i class="fa-brands fa-linkedin"></i> 1743 </a> 1744 </li> 1745 <li> 1746 <a href="https://www.facebook.com/SchweizerWanderwege.SuisseRando" target="_blank" 1747 class="uk-icon-button uk-button-white"> 1748 <i class="fa-brands fa-facebook-f"></i> 1749 </a> 1750 </li> 1751 <li> 1752 <a href="https://www.youtube.com/user/SchweizerWanderwege" target="_blank" 1753 class="uk-icon-button uk-button-white"> 1754 <i class="fa-brands fa-youtube"></i> 1755 </a> 1756 </li> 1757 <li> 1758 <a href="https://www.instagram.com/schweizerwanderwege.ch.rando" target="_blank" 1759 class="uk-icon-button uk-button-white"> 1760 <i class="fa-brands fa-instagram"></i> 1761 </a> 1762 </li> 1763 </ul> 1764 </div><!-- /.footer__socials --> 1765 </div>
1765<!-- /.footer__col --> 1766 1767 <div class="ct-footer-col"> 1768 <div class="ct-footer-langs"> 1769 <h5>LINGUE</h5> 1770 <ul> 1771 <li > 1772 <a href="https://www.schweizer-wanderwege.ch/it/?_new_locale=de"> 1773 de 1774 </a> 1775 </li> 1776 <li > 1777 <a href="https://www.suisse-rando.ch/it/?_new_locale=fr"> 1778 fr 1779 </a> 1780 </li> 1781 <li class="is-selected"> 1782 <a href="https://www.sentieri-svizzeri.ch/it/?_new_locale=it"> 1783 it 1784 </a> 1785 </li> 1786 </ul> 1787 </div><!-- /.footer__langs --> 1788 </div><!-- /.ct-footer-col --> 1789 </div><!-- /.ct-footer-cols --> 1790 1791 <div class="ct-footer-logo"> 1792 <a href="/it/"> 1793 <img src="/it/file/641865f92e8ce/read" alt="Logo"> 1794 </a> 1795 </div> 1796 </div><!-- /.uk-container --> 1797 1798 <style> 1799 .ct-train-strip { 1800 position: relative; 1801 width: 100%; 1802 height: 90px; 1803 margin-top: -90px; 1804 overflow: visible; 1805 pointer-events: none; /* let clicks fall through to the footer bar... */ 1806 display: none; /* hidden until revealed by JS */ 1807 } 1808 body.ct-train-active .ct-train-strip { 1809 display: block; 1810 } 1811 .ct-train { 1812 position: absolute; 1813 bottom: -8px; 1814 left: 0; 1815 width: 300px; 1816 height: 90px; 1817 transform: translateX(-320px); /* parked off-screen until revealed */ 1818 pointer-events: auto; /* ...except the locomotive itself, which is clickable */ 1819 } 1820 body.ct-train-active .ct-train { 1821 animation: ct-train-drive 22s linear infinite; 1822 } 1823 @keyframes ct-train-drive { 1824 0% { transform: translateX(-320px); } 1825 35% { transform: translateX(calc(50vw - 332px)); } 1826 37% { transform: translateX(calc(50vw - 308px)); } 1827 40% { transform: translateX(calc(50vw - 322px)); } 1828 43% { transform: translateX(calc(50vw - 315px)); } 1829 46% { transform: translateX(calc(50vw - 320px)); } 1830 85% { transform: translateX(-340px); } 1831 100% { transform: translateX(-340px); } 1832 } 1833 body.ct-train-active .ct-footer-logo img { 1834 animation: ct-logo-bump 22s linear infinite; 1835 transform-origin: center bottom; 1836 will-change: transform; 1837 } 1838 @keyframes ct-logo-bump { 1839 0%, 35%, 46%, 100% { transform: translateX(0) rotate(0); } 1840 37% { transform: translateX(5px) rotate(3deg); } 1841 39% { transform: translateX(-3px) rotate(-2deg); } 1842 41% { transform: translateX(2px) rotate(1deg); } 1843 43% { transform: translateX(-1px) rotate(-0.5deg); } 1844 } 1845 .ct-train a { 1846 display: block; 1847 width: 100%; 1848 height: 100%; 1849 } 1850 .ct-train img { 1851 width: 100%; 1852 height: 100%; 1853 object-fit: contain; 1854 object-position: bottom; 1855 display: block; 1856 cursor: pointer; 1857 } 1858 @media (prefers-reduced-motion: reduce) { 1859 .ct-train, 1860 .ct-footer-logo img { 1861 animation: none !important; 1862 } 1863 } 1864</style> 1865 1866<div class="ct-train-strip"> 1867 <div class="ct-train"> 1868 <a href="/it/escursionismo/eventi/la-locomotiva-ffs-nei-colori-di-sentieri-svizzeri/hai-trovato-la-locomotiva?wl=6673ae8246c5d28baac9993d2ee8c07d" aria-label="Wanderlok"> 1869 <img data-train-src="/assets/img/train/re460_black.svg?2.2.43" alt=""> 1870 </a> 1871 </div> 1872</div> 1873
1874<script> 1875 (function () { 1876 // todo: remove the force-before prod deployment 1877 // ?tschutschu=ja force-shows the train (QA / on-demand testing); otherwise ~1 in 20 page 1878 // loads. The decision runs in the browser so it still varies behind the full-page cache. 1879 var force = /[?&]tschutschu=ja(&|$)/.test(window.location.search); 1880 if (!force && Math.random() >= 0.05) { 1881 return; 1882 } 1883 var img = document.querySelector('.ct-train img[data-train-src]'); 1884 if (img) { 1885 // Only fetch the (heavy) locomotive SVG when the train is actually shown. 1886 img.src = img.getAttribute('data-train-src'); 1887 } 1888 document.body.classList.add('ct-train-active'); 1889 })(); 1890</script>
1890 1891 <div class="ct-footer-bar"> 1892 <div class="uk-container"> 1893 <div class="ct-footer-bar-inner"> 1894 <p>© 2026 ⢠Sentieri Svizzeri</p> 1895 <ul> 1896 <li> 1897 <a onclick="Cookiebot.show()">Impostazioni dei cookie</a> 1898 </li> 1899 <li> 1900 <a target="_blank" 1901 href="/it/colophon">Colophon</a> 1902 </li> 1903 <li> 1904 <a target="_blank" 1905 href="/it/termini-e-condizioni-generali">Termini e condizioni generali</a> 1906 </li> 1907 <li> 1908 <a target="_blank" 1909 href="/it/protezionideidati">Protezioni dei dati</a> 1910 </li> 1911 <li> 1912 <a target="_blank" 1913 href="/it/linee-guida-intelligenza-artificiale">Linee guida intelligenza artificiale</a> 1914 </li> 1915 <li> 1916 <a href="/assets/pdf/larandonnee_md_2026-min.pdf?2.2.43">Dati media</a> 1917 1918 </li> 1919 </ul> 1920 </div><!-- /.ct-footer-bar-inner --> 1921 </div><!-- /.uk-container --> 1922 </div><!-- /.ct-footer-bar --> 1923 </div> 1924 </footer> 1925 1926 <nav class="ct-nav-secondary"> 1927 <ul> 1928 <li class="ct-nav-secondary-menu"> 1929 <a href="javascript:" uk-toggle="#l-navigation-offcanvas" class="uk-icon-button uk-button-white" 1930 data-icon="fa-bars" id="l-navigation-offcanvas-trigger"> 1931 <i class="fa fa-bars"></i> 1932 </a> 1933 </li> 1934 <li class="ct-nav-secondary-map"> 1935 <a href="javascript:" uk-toggle="target: #l-map-offcanvas" data-icon="fa-map" 1936 class="uk-icon-button uk-button-white" id="l-map-offcanvas-trigger"> 1937 <i class="fa fa-map"></i> 1938 <span class="l-label">Mappa</span> 1939 </a> 1940 </li> 1941 <li class="ct-nav-secondary-search"> 1942 <a href="javascript:" uk-toggle="#l-search-offcanvas" 1943 class="uk-icon-button uk-button-white" data-icon="fa-magnifying-glass"> 1944 <i class="fa fa-magnifying-glass"></i>
1945 <span class="l-label">Ricercare</span> 1946 </a> 1947 </li> 1948 <li class="ct-nav-secondary-profile"> 1949 <a href="/it/profilo/dashboard" class="uk-icon-button uk-button-white"> 1950 <i class="fa fa-user"></i> 1951 <span class="l-label">Il mio profilo</span> 1952 </a> 1953 </li> 1954 1955 <li class="ct-nav-secondary-shop"> 1956 <a href="/it/shop" class="uk-icon-button uk-button-white"> 1957 <i class="fa fa-bag-shopping"></i> 1958 <span class="l-label">Shop</span> 1959 <span class="uk-badge l-cart-total-items uk-hidden">0</span> 1960 </a> 1961 </li> 1962 1963 </ul> 1964 </nav> 1965 1966 </div> 1967 <div id="l-search-offcanvas" class="l-full-offcanvas uk-height-viewport" uk-overflow-auto 1968 uk-offcanvas="overlay: true; flip: true; mode: none; bg-close: false; esc-close: false; swiping: false" style="display: none;"> 1969 <div id="l-live-search-container" class="l-offcanvas-content"> 1970 <div class="uk-container"> 1971 1972 <form method="get" action="/it/public-search" class="ct-filter-bar__form uk-form-stacked" data-autocomplete-path="/it/live-public-search" novalidate="novalidate" autocomplete="off"> 1973 <div class="ct-filter-bar__bar"> 1974 <div class="ct-filter-bar__search"> 1975 <input class="uk-input uk-search-input" type="search" id="q" name="q" required="required" placeholder="Ricercare" aria-label="Ricercare" value="" autofocus> 1976 1977 </div> 1978 <div class="ct-filter-bar__submit"> 1979 1980 <button class="uk-button-primary uk-icon-button " 1981 title="Applica filtro" 1982 ><i class="fa fa-magnifying-glass"></i></button> 1983 1984 </div> 1985 </div> 1986</form> 1987 <div class="ct-filter-bar__topics uk-hidden"> 1988 <div class="ct-filter-bar__topics__scroll"></div> 1989 </div> 1990 <div class="ct-floating-grid l-search-results"></div> 1991 <div class="l-search-spinner uk-position-center uk-hidden" uk-spinner="ratio: 2"></div> 1992 </div> 1993 </div> 1994 </div> 1995 </div> 1996 <div id="l-navigation-offcanvas" class="l-full-offcanvas uk-height-viewport" uk-overflow-auto 1997 uk-offcanvas="overlay: true; flip: true; mode: none; bg-close: false; esc-close: false; swiping: false" style="display: none;"> 1998 <div id="l-navigation-offcanvas-container" class="l-offcanvas-content"> 1999 <div class="uk-container"> 2000 <div class="l-nav"> 2001 <ul class="uk-subnav ct-subnav" uk-switcher=".switcher-container"> 2002 <li> 2003 2004 <a href="/it/escursionismo" class="uk-button uk-button-white " 2005 title="Escursionismo">Escursionismo</a> 2006 2007 </li> 2008 <li> 2009 2010 <a href="/it/segnaletica" class="uk-button uk-button-white " 2011 title="Segnaletica">Segnaletica</a> 2012 2013 </li> 2014 <li> 2015 2016 <a href="/it/sostegno" class="uk-button uk-button-white " 2017 title="Sostegn
2017o">Sostegno</a> 2018 2019 </li> 2020 <li> 2021 2022 <a href="/it/ispirazione" class="uk-button uk-button-white " 2023 title="Ispirazione">Ispirazione</a> 2024 2025 </li> 2026 <li> 2027 2028 <a href="/it/chi-siamo" class="uk-button uk-button-white " 2029 title="Chi siamo">Chi siamo</a> 2030 2031 </li> 2032 </ul> 2033 <div class="l-nav-meta"> 2034 <div class="l-nav-shop"> 2035 <a href="/it/shop"> 2036 Shop 2037 <span class="uk-badge l-cart-total-items uk-hidden">0</span> 2038 </a> 2039 </div> 2040 <div class="l-nav-contact"> 2041 <a href="/it/contatto/"> 2042 Contatto per richieste 2043 </a> 2044 </div> 2045 </div> 2046 </div> 2047 <div class="uk-switcher ct-subnav-level-one switcher-container"> 2048 <div class="ct-subnav-panel"> 2049 <div class="ct-floating-grid l-colgap-large l-rowgap-large"> 2050 <div class="l-nav-pagetitle">Escursionismo</div> 2051 <div class="ct-block-size-two_third"> 2052 2053 <a href="/it/escursionismo" class="uk-button uk-button-text l-nav-discover" 2054 title="Scopri ora">Scopri ora</a> 2055 2056 <div class="l-nav-grid"> 2057 <ul class="uk-nav ct-subnav-level-two"> 2058 <li> 2059 <a href="/it/proposte-di-escursioni/" >Proposte escursionistiche</a> 2060 <ul class="uk-nav ct-subnav-level-three"> 2061 <li> 2062 <a href="/it/escursionismo/proposte-escursionistiche/in-gita-con-i-bambini" >In gita con i bambini</a> 2063 </li> 2064 <li> 2065 <a href="/it/escursionismo/proposte-escursionistiche/una-pausa-rinfrescante-lungo-il-cammino" >Una pausa rinfrescante lungo il cammino</a> 2066 </li> 2067 <li> 2068 <a href="/it/escursionismo/proposte-escursionistiche/le-escursioni-preferite-del-team-di-sentieri-svizzeri" >Le escursioni preferite del team di Sentieri Svizzeri</a> 2069 </li> 2070 <li> 2071 <a href="/it/escursionismo/proposte-escursionistiche/continuare-a-camminare" >Continuare a camminare</a> 2072 </li> 2073 <li> 2074 <a href="/it/escursionismo/proposte-escursionistiche/la-gioia-al-vertice" >La gioia al vertice</a> 2075 </li> 2076 <li> 2077 <a href="/it/escursionismo/proposte-escursionistiche/tra-rocce-e-fiumi" >Tra rocce e fiumi</a> 2078 </li> 2079 <li> 2080 <a href="/it/escursionismo/proposte-escursionistiche/escursioni-rinfrescanti-per-i-giorni-caldi" >Escursioni rinfrescanti per i giorni caldi</a> 2081 </li> 2082 </ul> 2083 </li> 2084 </ul> 2085 <ul class="uk-nav ct-subnav-level-two"> 2086 <li> 2087 <a href="/it/escursionismo/prepararsi-bene" >Per essere ben preparati</a> 2088 <ul class="uk-nav ct-subnav-level-three"> 2089 <li> 2090 <a href="/it/escursionismo/prepararsi-bene/previsioni-meteo" >Previsioni meteo</a> 2091 </li> 2092 <li> 2093 <a href="/it/escursionismo/prepararsi-bene/mangiare" >Consigli culinari</a> 2094 </li> 2095 <li> 2096 <a href="/it/escursionismo/prepararsi-bene/pern
2096ottamento" >Pernottamento</a> 2097 </li> 2098 <li> 2099 <a href="/it/escursionismo/prepararsi-bene/trasporto" >Trasporto</a> 2100 </li> 2101 <li> 2102 <a href="/it/escursionismo/prepararsi-bene/escursioni-con" >Escursioni con...</a> 2103 </li> 2104 <li> 2105 <a href="/it/escursionismo/prepararsi-bene/attrezzatura" >Attrezzatura</a> 2106 </li> 2107 <li> 2108 <a href="/it/cercare-compagni-descursione/" >Guida escursionistica</a> 2109 </li> 2110 </ul> 2111 </li> 2112 </ul> 2113 <ul class="uk-nav ct-subnav-level-two"> 2114 <li> 2115 <a href="/it/escursionismo/formazione-di-guide-escursionistiche" >Formazione</a> 2116 </li> 2117 </ul> 2118 <ul class="uk-nav ct-subnav-level-two"> 2119 <li> 2120 <a href="/it/escursionismo/eventi" >Eventi</a> 2121 <ul class="uk-nav ct-subnav-level-three"> 2122 <li> 2123 <a href="https://www.notte-escursionistica.ch/it" target="_blank">Notte escursionistica svizzera</a> 2124 </li> 2125 <li> 2126 <a href="/it/escursione-guidata/" >Escursioni guidate</a> 2127 </li> 2128 <li> 2129 <a href="/it/escursionismo/eventi/coop-escursione-in-famiglia" >Coop Escursione in Famiglia</a> 2130 </li> 2131 </ul> 2132 </li> 2133 </ul> 2134 <ul class="uk-nav ct-subnav-level-two"> 2135 <li> 2136 <a href="/it/escursionismo/in-cammino" >In cammino</a> 2137 <ul class="uk-nav ct-subnav-level-three"> 2138 <li> 2139 <a href="/it/escursionismo/in-cammino/sicurezza" >Sicurezza</a> 2140 </li> 2141 <li> 2142 <a href="/it/escursionismo/in-cammino/momentodim" >#MomentodiM</a> 2143 </li> 2144 <li> 2145 <a href="/it/escursionismo/in-cammino/animali" >Animali</a> 2146 </li> 2147 <li> 2148 <a href="/it/escursionismo/in-cammino/durante-i-temporal
2148i" >Durante i temporali</a> 2149 </li> 2150 <li> 2151 <a href="/it/escursionismo/in-cammino/mountain-bike-e-biciclette" >Mountain bike e biciclette</a> 2152 </li> 2153 <li> 2154 <a href="/it/escursionismo/in-cammino/nel-bosco" >Nel bosco</a> 2155 </li> 2156 <li> 2157 <a href="/it/escursionismo/in-cammino/like-to-hike" >Like to Hike</a> 2158 </li> 2159 <li> 2160 <a href="/it/escursionismo/in-cammino/escursioni-di-primavera" >Escursioni di primavera</a> 2161 </li> 2162 <li> 2163 <a href="/it/escursionismo/in-cammino/escursioni-in-estate" >Escursioni in estate</a> 2164 </li> 2165 <li> 2166 <a href="/it/escursionismo/in-cammino/escursionismo-in-autunno" >Escursionismo in autunno</a> 2167 </li> 2168 </ul> 2169 </li> 2170 </ul> 2171 <ul class="uk-nav ct-subnav-level-two"> 2172 <li> 2173 <a href="/it/escursionismo/primavera-estate26" >Opuscolo Escursioni â Primavera Estate 26</a> 2174 </li> 2175 </ul> 2176 </div> 2177 </div> 2178 <div class="ct-block-size-one_third ct-container-call_to_action ct-container-layout-overlay"> 2179 <div class="ct-block ct-block-type-call_to_action"> 2180 2181 <div class="uk-card uk-card-default"> 2182 <div class="uk-card-media-top"> 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 <picture> 2193 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f73fc4c22c4.jpg?2.2.43" alt="Image" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/63f73fc4c22c4.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f73fc4c22c4.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/63f73fc4c22c4.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f73fc4c22c4.jpg?2.2.43 610w"/> 2194 </picture> 2195 </div> 2196 <div class="uk-card-body uk-light"> 2197 <h3 class="uk-card-title">Sosteneteci</h3> 2198 <div class="uk-text-default"> 2199 <p>Attraverso una donazione puoi darci una mano, permettendoci di spianare anche in futuro la strada agli escursionisti.<br /></p> 2200 </div> 2201 <a href="/it/donazione/donare" class="uk-button uk-button-text" 2202 >Donazione</a> 2203 </div> 2204 </div> 2205 </div> 2206 </div> 2207 </div> 2208 <div class="ct-floating-grid l-rowgap-small l-nav-iconteaser"> 2209 <div class="ct-block-size-one_third ct-container-information ct-container-layout-iconbox ct-container-theme-primary"> 2210 <div 2211 class="ct-block-information "> 2212 <div class="ct-block-icon"> 2213 <i class="fa fa-signs-post"></i> 2214 </div> 2215 <div class="ct-block-text"> 2216 <a class="ct-block-link uk-text-large" 2217 href="/it/segnalare-difetti/" 2218 > 2219 Segnalaci eventuali danni 2220 </a> 2221 <p class="Liste1">Hai scoperto indicatori di direzione difettosi o mancanti lungo la 2222rete dei sentieri escursionistici svizzeri? <i></i></p><p><i></i></p><i></i> 2223 </div> 2224 </div> 2225 </div> 2226 <div class="ct-block-size-one_third ct-container-information ct-container-layout-iconbox ct-container-theme-primary"> 2227 <div 2228 class="ct-block-information "> 2229 <div class="ct-block-icon"> 2230 <i class="fa fa-people-pants"></i> 2231 </div> 2232 <div class="ct-block-text"> 2233 <a class="ct-block-link uk-text-large" 2234 href="/it/cercare-compagni-descursione/" 2235 > 2236 Trovare compagnia per unâescursione 2237 </a> 2238 <p class="Liste1">Scopri come trovare facilmente compagni di escursione!</p><p></p> 2239 </div> 2240 </div> 2241 </div> 2242 <div class="ct-block-size-one_third ct-container-information ct-container-layout-iconbox ct-container-theme-primary"> 2243 <div 2244 class="ct-block-information "> 2245 <div class="ct-block-icon"> 2246 <i class="fa fa-envelope-open-text"></i> 2247 </div> 2248 <div class="ct-block-text"> 2249 <a class="ct-block-link uk-text-large" 2250 href="/it/iscrizione-newsletter" 2251 > 2252 Iscriviti alla nostra newsletter 2253 </a> 2254 <p>La nostra newsletter ti tiene aggiornato/a: riceverai le nostre notizie mensilmente e il suggerimento per un'escursione del giorno settimanalmente (in tedesco o francese).<br /></p> 2255 </div> 2256 </div> 2257 </div> 2258 </div> 2259 </div> 2260 <div class="ct-sub
2260nav-panel"> 2261 <div class="ct-floating-grid l-colgap-large l-rowgap-large"> 2262 <div class="l-nav-pagetitle">Segnaletica</div> 2263 <div class="ct-block-size-two_third"> 2264 2265 <a href="/it/segnaletica" class="uk-button uk-button-text l-nav-discover" 2266 title="Scopri ora">Scopri ora</a> 2267 2268 <div class="l-nav-grid"> 2269 <ul class="uk-nav ct-subnav-level-two"> 2270 <li> 2271 <a href="/it/segnaletica-3/fatti-e-cifre-831afca7f30c3568e7d52f1b5213987f85397939" >Fatti e cifre</a> 2272 </li> 2273 </ul> 2274 <ul class="uk-nav ct-subnav-level-two"> 2275 <li> 2276 <a href="/it/segnaletica-3/osa-dicono-i-segnali-2" >Cosa dicono i segnali</a> 2277 </li> 2278 </ul> 2279 <ul class="uk-nav ct-subnav-level-two"> 2280 <li> 2281 <a href="/it/segnaletica-3/categorie-di-sentieri-escursionistici-2" >Categorie di sentieri escursionistici</a> 2282 </li> 2283 </ul> 2284 </div> 2285 </div> 2286 <div class="ct-block-size-one_third ct-container-call_to_action ct-container-layout-overlay"> 2287 </div> 2288 </div> 2289 </div> 2290 <div class="ct-subnav-panel"> 2291 <div class="ct-floating-grid l-colgap-large l-rowgap-large"> 2292 <div class="l-nav-pagetitle">Sostegno</div> 2293 <div class="ct-block-size-two_third"> 2294 2295 <a href="/it/sostegno" class="uk-button uk-button-text l-nav-discover" 2296 title="Scopri ora">Scopri ora</a> 2297 2298 <div class="l-nav-grid"> 2299 <ul class="uk-nav ct-subnav-level-two"> 2300 <li> 2301 <a href="/it/sostegno/diventando-sostenitore" >Diventare sostenitore</a> 2302 </li> 2303 </ul> 2304 <ul class="uk-nav ct-subnav-level-two"> 2305 <li> 2306 <a href="/it/sostegno/un-lascito-in-favore-dei-sentieri-svizzeri" >Un lascito in favore dei Sentieri Svizzeri</a> 2307 </li> 2308 </ul> 2309 <ul class="uk-nav ct-subnav-level-two"> 2310 <li> 2311 <a href="/it/sostegno/donazione" >Donazione</a> 2312 </li> 2313 </ul> 2314 <ul class="uk-nav ct-subnav-level-two"> 2315 <li> 2316 <a href="/it/sostegno/adesione" >Adesione allâassociazione</a> 2317 </li> 2318 </ul> 2319 <ul class="uk-nav ct-subnav-level-two"> 2320 <li> 2321 <a href="/it/sostegno/donazioni-in-memoria" >Donazioni in memoria</a> 2322 </li> 2323 </ul> 2324 <ul class="uk-nav ct-subnav-level-two"> 2325 <li> 2326 <a href="/it/sostegno/promozione-dei-sentieri-escursionistici" >Promozione dei sentieri escursionistici</a> 2327 <ul class="uk-nav ct-subnav-level-three"> 2328 <li> 2329 <a href="/it/sostegno/promozione-dei-sentieri-escursionistici/fondo-per-progetti-di-sentieri" >Fondo per progetti di sentieri</a> 2330 </li> 2331 <li> 2332 <a href="/it/sostegno/promozione-dei-sentieri-escursionistici/fondo-mobiliare-ponti-e-passerelle" >Fondo Mobiliare ponti e passerelle</a> 2333 </li> 2334 <li> 2335 <a href="/it/sostegno/promozione-dei-sentieri-escursionistici/premio-posta" >Premio Posta</a> 2336 </li> 2337 <li> 2338 <a href="/it/sostegno/promozione-dei-sentieri-escursionistici/prix-rando" >Prix Rando</a> 2339 </li> 2340 </ul> 2341 </li> 2342 </ul> 2343 <ul class="uk-nav ct-subnav-level-two"> 2344 <li> 2345 <a href="/it/sostegno/attivita-di-volontariato" >
2345Attività di volontariato</a> 2346 <ul class="uk-nav ct-subnav-level-three"> 2347 <li> 2348 <a href="/it/sostegno/attivita-di-volontariato/per-privati" >Per privati</a> 2349 </li> 2350 <li> 2351 <a href="/it/sostegno/attivita-di-volontariato/per-imprese" >Per imprese</a> 2352 </li> 2353 </ul> 2354 </li> 2355 </ul> 2356 </div> 2357 </div> 2358 <div class="ct-block-size-one_third ct-container-call_to_action ct-container-layout-overlay"> 2359 <div class="ct-block ct-block-type-call_to_action"> 2360 2361 <div class="uk-card uk-card-default"> 2362 <div class="uk-card-media-top"> 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 <picture> 2373 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785e5ade80.jpg?2.2.43" alt="Image" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/63f785e5ade80.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785e5ade80.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/63f785e5ade80.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785e5ade80.jpg?2.2.43 610w"/> 2374 </picture> 2375 </div> 2376 <div class="uk-card-body uk-light"> 2377 <h3 class="uk-card-title">Proposte escursionistiche</h3> 2378 <div class="uk-text-default"> 2379 <p><br /></p> 2380 </div> 2381 <a href="/it/proposte-di-escursioni/" class="uk-button uk-button-text" 2382 >Proposte escursionistiche</a> 2383 </div> 2384 <div class="uk-card-badge">Escursionismo</div> 2385 </div> 2386 </div> 2387 </div> 2388 </div> 2389 <div class="ct-floating-grid l-rowgap-small l-nav-iconteaser"> 2390 <div class="ct-block-size-one_third ct-container-information ct-container-layout-iconbox ct-container-theme-primary"> 2391 <div 2392 class="ct-block-information "> 2393 <div class="ct-block-icon"> 2394 <i class="fa fa-signs-post"></i> 2395 </div> 2396 <div class="ct-block-text"> 2397 <a class="ct-block-link uk-text-large" 2398 href="/it/segnalare-difetti/" 2399 > 2400 Segnalaci eventuali danni 2401 </a> 2402 <p class="Liste1">Hai scoperto indicatori di direzione difettosi o mancanti lungo la 2403rete dei sentieri escursionistici svizzeri? <i></i></p><p><i></i></p><i></i> 2404 </div> 2405 </div> 2406 </div> 2407 <div class="ct-block-size-one_third ct-container-information ct-container-layout-iconbox ct-container-theme-primary"> 2408 <div 2409 class="ct-block-information "> 2410 <div class="ct-block-icon"> 2411 <i class="fa fa-people-pants"></i> 2412 </div> 2413 <div class="ct-block-text"> 2414 <a class="ct-block-link uk-text-large" 2415 href="/it/cercare-compagni-descursione/" 2416 > 2417 Trovare compagnia per unâescursione 2418 </a> 2419 <p class="Liste1">Scopri come trovare facilmente compagni di escursione!</p><p></p> 2420 </div> 2421 </div> 2422 </div> 2423 <div class="ct-block-size-one_third ct-container-information ct-container-layout-iconbox ct-container-theme-primary"> 2424 <div 2425 class="ct-block-information "> 2426 <div class="ct-block-icon"> 2427 <i class="fa fa-envelope-open-text"></i> 2428 </div> 2429 <div class="ct-block-text"> 2430 <a class="ct-block-link uk-text-large" 2431 href="/it/iscrizione-newsletter" 2432 > 2433 Iscriviti alla nostra newsletter 2434 </a> 2435 <p>La nostra newsletter ti tiene aggiornato/a: riceverai le nostre notizie mensilmente e il suggerimento per un'escursione del giorno settimanalmente (in tedesco o francese).<br /></p> 2436 </div> 2437 </div> 2438 </div> 2439 </div> 2440 </div> 2441 <div class="ct-sub
2441nav-panel"> 2442 <div class="ct-floating-grid l-colgap-large l-rowgap-large"> 2443 <div class="l-nav-pagetitle">Ispirazione</div> 2444 <div class="ct-block-size-two_third"> 2445 2446 <a href="/it/ispirazione" class="uk-button uk-button-text l-nav-discover" 2447 title="Scopri ora">Scopri ora</a> 2448 2449 <div class="l-nav-grid"> 2450 <ul class="uk-nav ct-subnav-level-two"> 2451 <li> 2452 <a href="/it/gite-scolastiche/" >gite-scolastiche</a> 2453 </li> 2454 </ul> 2455 <ul class="uk-nav ct-subnav-level-two"> 2456 <li> 2457 <a href="/it/ispirazione/sentierisvizzeri" >#sentierisvizzeri</a> 2458 </li> 2459 </ul> 2460 <ul class="uk-nav ct-subnav-level-two"> 2461 <li> 2462 <a href="/it/ispirazione/concorso" >Concorso</a> 2463 </li> 2464 </ul> 2465 <ul class="uk-nav ct-subnav-level-two"> 2466 <li> 2467 <a href="/it/ispirazione/concorso-lowa" >Concorso Lowa</a> 2468 </li> 2469 </ul> 2470 </div> 2471 </div> 2472 <div class="ct-block-size-one_third ct-container-call_to_action ct-container-layout-overlay"> 2473 <div class="ct-block ct-block-type-call_to_action"> 2474 2475 <div class="uk-card uk-card-default"> 2476 <div class="uk-card-media-top"> 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 <picture> 2487 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785e5ade80.jpg?2.2.43" alt="Image" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/63f785e5ade80.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785e5ade80.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/63f785e5ade80.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785e5ade80.jpg?2.2.43 610w"/> 2488 </picture> 2489 </div> 2490 <div class="uk-card-body uk-light"> 2491 <h3 class="uk-card-title">Proposte escursionistiche</h3> 2492 <div class="uk-text-default"> 2493 <p><br /></p> 2494 </div>
2495 <a href="/it/proposte-di-escursioni/" class="uk-button uk-button-text" 2496 >Proposte escursionistiche</a> 2497 </div> 2498 <div class="uk-card-badge">Escursionismo</div> 2499 </div> 2500 </div> 2501 </div> 2502 </div> 2503 <div class="ct-floating-grid l-rowgap-small l-nav-iconteaser"> 2504 <div class="ct-block-size-one_third ct-container-information ct-container-layout-iconbox ct-container-theme-primary"> 2505 <div 2506 class="ct-block-information "> 2507 <div class="ct-block-icon"> 2508 <i class="fa fa-signs-post"></i> 2509 </div> 2510 <div class="ct-block-text"> 2511 <a class="ct-block-link uk-text-large" 2512 href="/it/segnalare-difetti/" 2513 > 2514 Segnalaci eventuali danni 2515 </a> 2516 <p class="Liste1">Hai scoperto indicatori di direzione difettosi o mancanti lungo la 2517rete dei sentieri escursionistici svizzeri? <i></i></p><p><i></i></p><i></i> 2518 </div> 2519 </div> 2520 </div> 2521 <div class="ct-block-size-one_third ct-container-information ct-container-layout-iconbox ct-container-theme-primary"> 2522 <div 2523 class="ct-block-information "> 2524 <div class="ct-block-icon"> 2525 <i class="fa fa-people-pants"></i> 2526 </div> 2527 <div class="ct-block-text"> 2528 <a class="ct-block-link uk-text-large" 2529 href="/it/cercare-compagni-descursione/" 2530 > 2531 Trovare compagnia per unâescursione 2532 </a> 2533 <p class="Liste1">Scopri come trovare facilmente compagni di escursione!</p><p></p> 2534 </div> 2535 </div> 2536 </div> 2537 <div class="ct-block-size-one_third ct-container-information ct-container-layout-iconbox ct-container-theme-primary"> 2538 <div 2539 class="ct-block-information "> 2540 <div class="ct-block-icon"> 2541 <i class="fa fa-envelope-open-text"></i> 2542 </div> 2543 <div class="ct-block-text"> 2544 <a class="ct-block-link uk-text-large" 2545 href="/it/iscrizione-newsletter" 2546 > 2547 Iscriviti alla nostra newsletter 2548 </a> 2549 <p>La nostra newsletter ti tiene aggiornato/a: riceverai le nostre notizie mensilmente e il suggerimento per un'escursione del giorno settimanalmente (in tedesco o francese).<br /></p> 2550 </div> 2551 </div> 2552 </div> 2553 </div> 2554 </div> 2555 <div class="ct-subnav-panel"> 2556 <div class="ct-floating-grid l-colgap-large l-rowgap-large"> 2557 <div class="l-nav-pagetitle">Chi siamo</div> 2558 <div class="ct-block-size-two_third"> 2559 2560 <a href="/it/chi-siamo" class="uk-button uk-button-text l-nav-discover" 2561 title="Scopri ora">Scopri ora</a> 2562 2563 <div class="l-nav-grid"> 2564 <ul class="uk-nav ct-subnav-level-two"> 2565 <li> 2566 <a href="/it/chi-siamo/associazione" >Associazione</a> 2567 <ul class="uk-nav ct-subnav-level-three"> 2568 <li> 2569 <a href="/it/chi-siamo/associazione/i-nostri-compiti" >I nostri compiti</a> 2570 </li> 2571 <li> 2572 <a href="/it/chi-siamo/associazione/la-nostra-storia" >
2572La nostra storia</a> 2573 </li> 2574 <li> 2575 <a href="/it/chi-siamo/associazione/le-organizzazioni-cantonali-per-lescursionismo" >Le organizzazioni cantonali per lâescursionismo</a> 2576 </li> 2577 </ul> 2578 </li> 2579 </ul> 2580 <ul class="uk-nav ct-subnav-level-two"> 2581 <li> 2582 <a href="/it/chi-siamo/squadra" >Squadra</a> 2583 <ul class="uk-nav ct-subnav-level-three"> 2584 <li> 2585 <a href="/it/chi-siamo/squadra/offerte-di-lavoro" >Offerte di lavoro</a> 2586 </li> 2587 </ul> 2588 </li> 2589 </ul> 2590 <ul class="uk-nav ct-subnav-level-two"> 2591 <li> 2592 <a href="/it/chi-siamo/i-nostri-partner" >I nostri partner</a> 2593 </li> 2594 </ul> 2595 </div> 2596 </div> 2597 <div class="ct-block-size-one_third ct-container-call_to_action ct-container-layout-overlay"> 2598 <div class="ct-block ct-block-type-call_to_action"> 2599 2600 <div class="uk-card uk-card-default"> 2601 <div class="uk-card-media-top"> 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 <picture> 2612 <img src="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785e5ade80.jpg?2.2.43" alt="Image" loading="lazy" srcset="https://www.sentieri-svizzeri.ch/media/cache/cloudtec_medias_full/63f785e5ade80.jpg?2.2.43 2000w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785e5ade80.jpg?2.2.43 1440w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_medium/63f785e5ade80.jpg?2.2.43 815w,https://www.sentieri-svizzeri.ch/media/cache/cloudtec_block_media_small/63f785e5ade80.jpg?2.2.43 610w"/> 2613 </picture> 2614 </div> 2615 <div class="uk-card-body uk-light"> 2616 <h3 class="uk-card-title">Proposte escursionistiche</h3> 2617 <div class="uk-text-default"> 2618 <p><br /></p> 2619 </div>
2620 <a href="/it/proposte-di-escursioni/" class="uk-button uk-button-text" 2621 >Proposte escursionistiche</a> 2622 </div> 2623 <div class="uk-card-badge">Escursionismo</div> 2624 </div> 2625 </div> 2626 </div> 2627 </div> 2628 <div class="ct-floating-grid l-rowgap-small l-nav-iconteaser"> 2629 <div class="ct-block-size-one_third ct-container-information ct-container-layout-iconbox ct-container-theme-primary"> 2630 <div 2631 class="ct-block-information "> 2632 <div class="ct-block-icon"> 2633 <i class="fa fa-signs-post"></i> 2634 </div> 2635 <div class="ct-block-text"> 2636 <a class="ct-block-link uk-text-large" 2637 href="/it/segnalare-difetti/" 2638 > 2639 Segnalaci eventuali danni 2640 </a> 2641 <p class="Liste1">Hai scoperto indicatori di direzione difettosi o mancanti lungo la 2642rete dei sentieri escursionistici svizzeri? <i></i></p><p><i></i></p><i></i> 2643 </div> 2644 </div> 2645 </div> 2646 <div class="ct-block-size-one_third ct-container-information ct-container-layout-iconbox ct-container-theme-primary"> 2647 <div 2648 class="ct-block-information "> 2649 <div class="ct-block-icon"> 2650 <i class="fa fa-people-pants"></i> 2651 </div> 2652 <div class="ct-block-text"> 2653 <a class="ct-block-link uk-text-large" 2654 href="/it/cercare-compagni-descursione/" 2655 > 2656 Trovare compagnia per unâescursione 2657 </a> 2658 <p class="Liste1">Scopri come trovare facilmente compagni di escursione!</p><p></p> 2659 </div> 2660 </div> 2661 </div> 2662 <div class="ct-block-size-one_third ct-container-information ct-container-layout-iconbox ct-container-theme-primary"> 2663 <div 2664 class="ct-block-information "> 2665 <div class="ct-block-icon"> 2666 <i class="fa fa-envelope-open-text"></i> 2667 </div> 2668 <div class="ct-block-text"> 2669 <a class="ct-block-link uk-text-large" 2670 href="/it/iscrizione-newsletter" 2671 > 2672 Iscriviti alla nostra newsletter 2673 </a> 2674 <p>La nostra newsletter ti tiene aggiornato/a: riceverai le nostre notizie mensilmente e il suggerimento per un'escursione del giorno settimanalmente (in tedesco o francese).<br /></p> 2675 </div> 2676 </div> 2677 </div> 2678 </div> 2679 </div> 2680 </div> 2681 </div> 2682 </div> 2683 </div> 2684 <div id="l-map-offcanvas" class="l-full-offcanvas uk-height-viewport" uk-overflow-auto 2685 uk-offcanvas="overlay: true; flip: true; mode: none; bg-close: false; esc-close: false; swiping: false" style="display: none;"> 2686 <div id="map"> 2687 <div class="map-copyright"><i class="fa fa-copyright"></i>Dati:<a target="_blank" 2688 href="https://www.swisstopo.admin.ch/it/home.html">swisstopo</a>,<a 2689 href="/it">www.sentieri-svizzeri.ch</a></div> 2690 </div> 2691 2692 <div id="l-map-offcanvas-container" class="l-offcanvas-content"> 2693 <div id="overlay-map-filter" class="uk-container"> 2694 <form name="app_f
2694ilter_map" method="post" class="uk-form-stacked" novalidate="novalidate" autocomplete="off"> 2695 2696 <div id="grid-filter" class="ct-filter-bar"> 2697 <div class="ct-filter-bar__bar"> 2698 <div class="ct-filter-bar__search"> 2699 <div class="uk-inline"> 2700 <input type="text" id="app_filter_map_fulltext" name="app_filter_map[fulltext]" required="required" class="uk-input uk-input" placeholder="Dove vuoi andare? (località , regione, numero di proposta escursionistica)" /> 2701 </div> 2702 2703 2704 </div> 2705 <div class="ct-filter-bar__settings"> 2706 <button type="button" class="uk-icon-button uk-button-dark" 2707 uk-toggle="target: .map-filter-settings; animation: uk-animation-slide-top-small"> 2708 <i class="fa fa-sliders map-filter-settings" style=""></i> 2709 <i class="fa fa-xmark map-filter-settings" style="" hidden=""></i> 2710 </button> 2711 </div> 2712 <div class="ct-filter-bar__submit"> 2713 <button type="submit" class="uk-button uk-button-primary"><i class="fa fa-magnifying-glass"></i></button> 2714 </div> 2715 </div> 2716 <div class="ct-filter-bar__panel map-filter-settings" hidden> 2717 <div class="ct-filter-bar__panel__grid"> 2718 <div class="l-filter-toggle"> 2719 <label class="uk-form-label">Attiva/disattiva i livelli</label> 2720 <div class="l-filter-toggle-switch"> 2721 <label for="app_filter_map_layers_0" class="l-layer-toggle-hikes uk-button l-is-pill uk-button-primary"> 2722 Proposte escursionistiche 2723 <input id="app_filter_map_layers_0" name="app_filter_map[layers][]" type="checkbox" value="hikes" hidden="hidden" checked="checked"/> 2724 </label> 2725 <label for="app_filter_map_layers_1" class="l-layer-toggle-guided-hikes uk-button l-is-pill uk-button-primary"> 2726 Escursioni guidate 2727 <input id="app_filter_map_layers_1" name="app_filter_map[layers][]" type="checkbox" value="guided-hikes" hidden="hidden" checked="checked"/> 2728 </label> 2729 <label for="app_filter_map_layers_2" class="l-layer-toggle-restaurants uk-button l-is-pill uk-button-primary"> 2730 Punti di ristoro 2731 <input id="app_filter_map_layers_2" name="app_filter_map[layers][]" type="checkbox" value="restaurants" hidden="hidden" checked="checked"/> 2732 </label> 2733 <label for="app_filter_map_layers_3" class="l-layer-toggle-hotels uk-button l-is-pill uk-button-primary"> 2734 Alberghi per escursionisti 2735 <input id="app_filter_map_layers_3" name="app_filter_map[layers][]" type="checkbox" value="hotels" hidden="hidden" checked="checked"/> 2736 </label> 2737 <label for="app_filter_map_layers_4" class="l-layer-toggle-fireplaces uk-button l-is-pill uk-button-primary"> 2738 Aree per grigliate 2739 <input id="app_filter_map_layers_4" name="app_filter_map[layers][]" type="checkbox" value="fireplaces" hidden="hidden" checked="checked"/> 2740 </label> 2741 <label for="app_f
2741ilter_map_layers_5" class="l-layer-toggle-videos uk-button l-is-pill uk-button-primary"> 2742 Filmati video 2743 <input id="app_filter_map_layers_5" name="app_filter_map[layers][]" type="checkbox" value="videos" hidden="hidden" checked="checked"/> 2744 </label> 2745 <label for="app_filter_map_layers_6" class="l-layer-toggle-mobiliar-sponsorship uk-button l-is-pill uk-button-primary"> 2746 Fondo Mobiliare ponti e passerelle 2747 <input id="app_filter_map_layers_6" name="app_filter_map[layers][]" type="checkbox" value="mobiliar-sponsorship" hidden="hidden" checked="checked"/> 2748 </label> 2749 <label for="app_filter_map_layers_7" class="l-layer-toggle-post-sponsorship uk-button l-is-pill uk-button-primary"> 2750 Premio Posta 2751 <input id="app_filter_map_layers_7" name="app_filter_map[layers][]" type="checkbox" value="post-sponsorship" hidden="hidden" checked="checked"/> 2752 </label> 2753 <label for="app_filter_map_layers_8" class="l-layer-toggle-hiking-report uk-button l-is-pill uk-button-primary"> 2754 Articolo DAS WANDERN / LA RANDONNÃE 2755 <input id="app_filter_map_layers_8" name="app_filter_map[layers][]" type="checkbox" value="hiking-report" hidden="hidden" checked="checked"/> 2756 </label> 2757 </div> 2758 </div> 2759 2760 2761 <div class="l-filter-multi"> 2762 <select id="app_filter_map_seasons" name="app_filter_map[seasons][]" required="required" data-all="Tutto" data-none="Tutto" title="Scegli" data-placeholder="Scegli" data-loading-text="Caricamento..." data-no-choices-text="Nessuna scelta tra cui scegliere" data-item-select-text="Clicca per selezionare" data-unique-item-text="Possono essere aggiunti solo valori unici" data-custom-add-item-text="Solo i valori che corrispondono a condizioni specifiche possono essere aggiunti" data-no-results-text="Nessun risultato trovato" data-search-result-limit="10" data-search-placeholder-value="" hidden="hidden" class="uk-select" multiple="multiple"><option value="68" data-icon="" selected="selected">Estate</option><option value="69" data-icon="">Inverno</option></select> 2763 <div class="l-filter-multi-header"> 2764 <div class="l-filter-multi-header-inner"> 2765 <label class="uk-form-label l-filter-multi-label required">Stagione escursionistica <span class="uk-badge l-filter-multi-counter">1</span></label> 2766 <div class="l-filter-multi-selected uk-text-meta"></div> 2767 </div> 2768 <div class="uk-icon-button uk-button-light uk-button-xsmall l-filter-multi-header-expand" uk-toggle="target: #app_filter_map_seasons-toggle; animation: uk-animation-slide-top-small"> 2769 <i class="fa fa-plus"></i> 2770 </div> 2771 </div> 2772 <div class="l-filter-multi-options" id="app_filter_map_seasons-toggle" hidden> 2773 <div class="l-filter-multi-options-inner"> 2774 <div class="l-filter-multi-options-checkbox"> 2775 <input id="app_filter_map_seasons_68" class="uk-checkbox" type="checkbox" checked data-value="68"> 2776 <label for="app_filter_map_seasons_68">Estate</label> 2777 </div> 2778 <div class="l-filter-multi-options-checkbox"> 2779 <input id="app_filter_map_seasons_69" class="uk-checkbox" type="checkbox" data-value="69"> 2780 <label for="app_filter_map_seasons_69">Inverno</label> 2781 </div> 2782 </div> 2783 <div class="l-filter-multi-options-select"> 2784 <div class="uk-button uk-button-light l-is-pill l-filter-multi-options-select-all">Seleziona tutti</div> 2785 <div class="uk-button uk-button-light l-is-pill l-filter-multi-options-select-reset">Azzeramento</div> 2786 </div> 2787 </div> 2788 2789 2790 </div> 2791 2792 2793 <div class="l-filter-multi"> 2794 <select id="app_filter_map_trailCategories" name="app_f
2794ilter_map[trailCategories][]" required="required" data-all="Tutto" data-none="Tutto" title="Scegli" data-placeholder="Scegli" data-loading-text="Caricamento..." data-no-choices-text="Nessuna scelta tra cui scegliere" data-item-select-text="Clicca per selezionare" data-unique-item-text="Possono essere aggiunti solo valori unici" data-custom-add-item-text="Solo i valori che corrispondono a condizioni specifiche possono essere aggiunti" data-no-results-text="Nessun risultato trovato" data-search-result-limit="10" data-search-placeholder-value="" hidden="hidden" class="uk-select" multiple="multiple"><option value="56" data-icon="">Escursione</option><option value="53" data-icon="">Escursione alpina</option><option value="55" data-icon="">Escursione con le ciaspole</option><option value="54" data-icon="">Escursione in montagna</option><option value="57" data-icon="">Escursione invernale</option><option value="58" data-icon="">Gita scolastica con escursione</option><option value="59" data-icon="">Gita scolastica senza escursione</option></select> 2795 <div class="l-filter-multi-header"> 2796 <div class="l-filter-multi-header-inner"> 2797 <label class="uk-form-label l-filter-multi-label required">Categoria <span class="uk-badge l-filter-multi-counter">0</span></label> 2798 <div class="l-filter-multi-selected uk-text-meta"></div> 2799 </div> 2800 <div class="uk-icon-button uk-button-light uk-button-xsmall l-filter-multi-header-expand" uk-toggle="target: #app_filter_map_trailCategories-toggle; animation: uk-animation-slide-top-small"> 2801 <i class="fa fa-plus"></i> 2802 </div> 2803 </div> 2804 <div class="l-filter-multi-options" id="app_filter_map_trailCategories-toggle" hidden> 2805 <div class="l-filter-multi-options-inner"> 2806 <div class="l-filter-multi-options-checkbox"> 2807 <input id="app_filter_map_trailCategories_56" class="uk-checkbox" type="checkbox" data-value="56"> 2808 <label for="app_filter_map_trailCategories_56">Escursione</label> 2809 </div> 2810 <div class="l-filter-multi-options-checkbox"> 2811 <input id="app_filter_map_trailCategories_53" class="uk-checkbox" type="checkbox" data-value="53"> 2812 <label for="app_filter_map_trailCategories_53">Escursione alpina</label> 2813 </div> 2814 <div class="l-filter-multi-options-checkbox"> 2815 <input id="app_filter_map_trailCategories_55" class="uk-checkbox" type="checkbox" data-value="55"> 2816 <label for="app_filter_map_trailCategories_55">Escursione con le ciaspole</label> 2817 </div> 2818 <div class="l-filter-multi-options-checkbox"> 2819 <input id="app_filter_map_trailCategories_54" class="uk-checkbox" type="checkbox" data-value="54"> 2820 <label for="app_filter_map_trailCategories_54">Escursione in montagna</label> 2821 </div> 2822 <div class="l-filter-multi-options-checkbox"> 2823 <input id="app_filter_map_trailCategories_57" class="uk-checkbox" type="checkbox" data-value="57"> 2824 <label for="app_filter_map_trailCategories_57">Escursione invernale</label> 2825 </div> 2826 <div class="l-filter-multi-options-checkbox"> 2827 <input id="app_filter_map_trailCategories_58" class="uk-checkbox" type="checkbox" data-value="58">
2828 <label for="app_filter_map_trailCategories_58">Gita scolastica con escursione</label> 2829 </div> 2830 <div class="l-filter-multi-options-checkbox"> 2831 <input id="app_filter_map_trailCategories_59" class="uk-checkbox" type="checkbox" data-value="59"> 2832 <label for="app_filter_map_trailCategories_59">Gita scolastica senza escursione</label> 2833 </div> 2834 </div> 2835 <div class="l-filter-multi-options-select"> 2836 <div class="uk-button uk-button-light l-is-pill l-filter-multi-options-select-all">Seleziona tutti</div> 2837 <div class="uk-button uk-button-light l-is-pill l-filter-multi-options-select-reset">Azzeramento</div> 2838 </div> 2839 </div> 2840 2841 2842 </div> 2843 2844 2845 <div class="l-filter-multi"> 2846 <select id="app_filter_map_tscales" name="app_filter_map[tscales][]" required="required" data-all="Tutto" data-none="Tutto" title="Scegli" data-placeholder="Scegli" data-loading-text="Caricamento..." data-no-choices-text="Nessuna scelta tra cui scegliere" data-item-select-text="Clicca per selezionare" data-unique-item-text="Possono essere aggiunti solo valori unici" data-custom-add-item-text="Solo i valori che corrispondono a condizioni specifiche possono essere aggiunti" data-no-results-text="Nessun risultato trovato" data-search-result-limit="10" data-search-placeholder-value="" hidden="hidden" class="uk-select" multiple="multiple"><option value="74" data-icon="">Blu</option><option value="76" data-icon="">Nero</option><option value="75" data-icon="">Rosso</option><option value="70" data-icon="">T1</option><option value="71" data-icon="">T2</option><option value="72" data-icon="">T3</option><option value="73" data-icon="">T4</option><option value="77" data-icon="">WT1</option><option value="78" data-icon="">WT2</option><option value="79" data-icon="">WT3</option></select> 2847 <div class="l-filter-multi-header"> 2848 <div class="l-filter-multi-header-inner"> 2849 <label class="uk-form-label l-filter-multi-label required">Scala T <span class="uk-badge l-filter-multi-counter">0</span></label> 2850 <div class="l-filter-multi-selected uk-text-meta"></div> 2851 </div> 2852 <div class="uk-icon-button uk-button-light uk-button-xsmall l-filter-multi-header-expand" uk-toggle="target: #app_filter_map_tscales-toggle; animation: uk-animation-slide-top-small"> 2853 <i class="fa fa-plus"></i> 2854 </div> 2855 </div> 2856 <div class="l-filter-multi-options" id="app_filter_map_tscales-toggle" hidden> 2857 <div class="l-filter-multi-options-inner"> 2858 <div class="l-filter-multi-options-checkbox"> 2859 <input id="app_filter_map_tscales_74" class="uk-checkbox" type="checkbox" data-value="74"> 2860 <label for="app_filter_map_tscales_74">Blu</label> 2861 </div> 2862 <div class="l-filter-multi-options-checkbox"> 2863 <input id="app_filter_map_tscales_76" class="uk-checkbox" type="checkbox" data-value="76"> 2864 <label for="app_filter_map_tscales_76">Nero</label> 2865 </div> 2866 <div class="l-filter-multi-options-checkbox"> 2867 <input id="app_filter_map_tscales_75" class="uk-checkbox" type="checkbox" data-value="75"> 2868 <label for="app_filter_map_tscales_75">Rosso</label> 2869 </div> 2870 <div class="l-filter-multi-options-checkbox"> 2871 <input id="app_filter_map_tscales_70" class="uk-checkbox" type="checkbox" data-value="70">
2872 <label for="app_filter_map_tscales_70">T1</label> 2873 </div> 2874 <div class="l-filter-multi-options-checkbox"> 2875 <input id="app_filter_map_tscales_71" class="uk-checkbox" type="checkbox" data-value="71"> 2876 <label for="app_filter_map_tscales_71">T2</label> 2877 </div> 2878 <div class="l-filter-multi-options-checkbox"> 2879 <input id="app_filter_map_tscales_72" class="uk-checkbox" type="checkbox" data-value="72"> 2880 <label for="app_filter_map_tscales_72">T3</label> 2881 </div> 2882 <div class="l-filter-multi-options-checkbox"> 2883 <input id="app_filter_map_tscales_73" class="uk-checkbox" type="checkbox" data-value="73"> 2884 <label for="app_filter_map_tscales_73">T4</label> 2885 </div> 2886 <div class="l-filter-multi-options-checkbox"> 2887 <input id="app_filter_map_tscales_77" class="uk-checkbox" type="checkbox" data-value="77"> 2888 <label for="app_filter_map_tscales_77">WT1</label> 2889 </div> 2890 <div class="l-filter-multi-options-checkbox"> 2891 <input id="app_filter_map_tscales_78" class="uk-checkbox" type="checkbox" data-value="78"> 2892 <label for="app_filter_map_tscales_78">WT2</label> 2893 </div> 2894 <div class="l-filter-multi-options-checkbox"> 2895 <input id="app_filter_map_tscales_79" class="uk-checkbox" type="checkbox" data-value="79"> 2896 <label for="app_filter_map_tscales_79">WT3</label> 2897 </div> 2898 </div> 2899 <div class="l-filter-multi-options-select"> 2900 <div class="uk-button uk-button-light l-is-pill l-filter-multi-options-select-all">Seleziona tutti</div> 2901 <div class="uk-button uk-button-light l-is-pill l-filter-multi-options-select-reset">Azzeramento</div> 2902 </div> 2903 </div> 2904 2905 2906 </div> 2907 2908 2909 <div class="l-filter-multi"> 2910 <select id="app_filter_map_types" name="app_filter_map[types][]" required="required" data-all="Tutto" data-none="Tutto" title="Scegli" data-placeholder="Scegli" data-loading-text="Caricamento..." data-no-choices-text="Nessuna scelta tra cui scegliere" data-item-select-text="Clicca per selezionare" data-unique-item-text="Possono essere aggiunti solo valori unici" data-custom-add-item-text="Solo i valori che corrispondono a condizioni specifiche possono essere aggiunti" data-no-results-text="Nessun risultato trovato" data-search-result-limit="10" data-search-placeholder-value="" hidden="hidden" class="uk-select" multiple="multiple"><option value="41" data-icon="">Escursione al laghetto alpino</option><option value="49" data-icon="">Escursione circolare</option><option value="46" data-icon="">Escursione culturale</option><option value="47" data-icon="">Escursione di più giorni</option><option value="45" data-icon="">Escursione in alta quota e panoramica</option><option value="42" data-icon="">Escursione in vetta</option><option value="50" data-icon="">Escursione lungo i canali dâirrigazione</option><option value="51" data-icon="">Escursione lungo le rive</option><option value="48" data-icon="">Escursione pomeridiana</option><option value="43" data-icon="">Escursione sul crinale</option><option value="52" data-icon="">Escursione urbana</option></select> 2911 <div class="l-filter-multi-header"> 2912 <div class="l-filter-multi-header-inner"> 2913 <label class="uk-form-label l-filter-multi-label required">Tipo <span class="uk-badge l-filter-multi-counter">0</span></label> 2914 <div class="l-filter-multi-selected uk-text-meta"></div> 2915 </div> 2916 <div class="uk-icon-button uk-button-light uk-button-xsmall l-filter-multi-header-expand" uk-toggle="target: #app_filter_map_types-toggle;
2916 animation: uk-animation-slide-top-small"> 2917 <i class="fa fa-plus"></i> 2918 </div> 2919 </div> 2920 <div class="l-filter-multi-options" id="app_filter_map_types-toggle" hidden> 2921 <div class="l-filter-multi-options-inner"> 2922 <div class="l-filter-multi-options-checkbox"> 2923 <input id="app_filter_map_types_41" class="uk-checkbox" type="checkbox" data-value="41"> 2924 <label for="app_filter_map_types_41">Escursione al laghetto alpino</label> 2925 </div> 2926 <div class="l-filter-multi-options-checkbox"> 2927 <input id="app_filter_map_types_49" class="uk-checkbox" type="checkbox" data-value="49"> 2928 <label for="app_filter_map_types_49">Escursione circolare</label> 2929 </div> 2930 <div class="l-filter-multi-options-checkbox"> 2931 <input id="app_filter_map_types_46" class="uk-checkbox" type="checkbox" data-value="46"> 2932 <label for="app_filter_map_types_46">Escursione culturale</label> 2933 </div> 2934 <div class="l-filter-multi-options-checkbox"> 2935 <input id="app_filter_map_types_47" class="uk-checkbox" type="checkbox" data-value="47"> 2936 <label for="app_filter_map_types_47">Escursione di più giorni</label> 2937 </div> 2938 <div class="l-filter-multi-options-checkbox"> 2939 <input id="app_filter_map_types_45" class="uk-checkbox" type="checkbox" data-value="45"> 2940 <label for="app_filter_map_types_45">Escursione in alta quota e panoramica</label> 2941 </div> 2942 <div class="l-filter-multi-options-checkbox"> 2943 <input id="app_filter_map_types_42" class="uk-checkbox" type="checkbox" data-value="42"> 2944 <label for="app_filter_map_types_42">Escursione in vetta</label> 2945 </div> 2946 <div class="l-filter-multi-options-checkbox"> 2947 <input id="app_filter_map_types_50" class="uk-checkbox" type="checkbox" data-value="50"> 2948 <label for="app_filter_map_types_50">Escursione lungo i canali dâirrigazione</label> 2949 </div> 2950 <div class="l-filter-multi-options-checkbox"> 2951 <input id="app_filter_map_types_51" class="uk-checkbox" type="checkbox" data-value="51"> 2952 <label for="app_filter_map_types_51">Escursione lungo le rive</label> 2953 </div> 2954 <div class="l-filter-multi-options-checkbox"> 2955 <input id="app_filter_map_types_48" class="uk-checkbox" type="checkbox" data-value="48"> 2956 <label for="app_filter_map_types_48">Escursione pomeridiana</label> 2957 </div> 2958 <div class="l-filter-multi-options-checkbox"> 2959 <input id="app_filter_map_types_43" class="uk-checkbox" type="checkbox" data-value="43">
2960 <label for="app_filter_map_types_43">Escursione sul crinale</label> 2961 </div> 2962 <div class="l-filter-multi-options-checkbox"> 2963 <input id="app_filter_map_types_52" class="uk-checkbox" type="checkbox" data-value="52"> 2964 <label for="app_filter_map_types_52">Escursione urbana</label> 2965 </div> 2966 </div> 2967 <div class="l-filter-multi-options-select"> 2968 <div class="uk-button uk-button-light l-is-pill l-filter-multi-options-select-all">Seleziona tutti</div> 2969 <div class="uk-button uk-button-light l-is-pill l-filter-multi-options-select-reset">Azzeramento</div> 2970 </div> 2971 </div> 2972 2973 2974 </div> 2975 2976 2977 <div class="l-filter-multi"> 2978 <select id="app_filter_map_difficulties" name="app_filter_map[difficulties][]" required="required" data-all="Tutto" data-none="Tutto" title="Scegli" data-placeholder="Scegli" data-loading-text="Caricamento..." data-no-choices-text="Nessuna scelta tra cui scegliere" data-item-select-text="Clicca per selezionare" data-unique-item-text="Possono essere aggiunti solo valori unici" data-custom-add-item-text="Solo i valori che corrispondono a condizioni specifiche possono essere aggiunti" data-no-results-text="Nessun risultato trovato" data-search-result-limit="10" data-search-placeholder-value="" hidden="hidden" class="uk-select" multiple="multiple"><option value="62" data-icon="">Alta</option><option value="60" data-icon="">Bassa</option><option value="61" data-icon="">Media</option></select> 2979 <div class="l-filter-multi-header"> 2980 <div class="l-filter-multi-header-inner"> 2981 <label class="uk-form-label l-filter-multi-label required">Requisiti fisici <span class="uk-badge l-filter-multi-counter">0</span></label> 2982 <div class="l-filter-multi-selected uk-text-meta"></div> 2983 </div> 2984 <div class="uk-icon-button uk-button-light uk-button-xsmall l-filter-multi-header-expand" uk-toggle="target: #app_filter_map_difficulties-toggle; animation: uk-animation-slide-top-small"> 2985 <i class="fa fa-plus"></i> 2986 </div> 2987 </div> 2988 <div class="l-filter-multi-options" id="app_filter_map_difficulties-toggle" hidden> 2989 <div class="l-filter-multi-options-inner"> 2990 <div class="l-filter-multi-options-checkbox"> 2991 <input id="app_filter_map_difficulties_62" class="uk-checkbox" type="checkbox" data-value="62"> 2992 <label for="app_filter_map_difficulties_62">Alta</label> 2993 </div> 2994 <div class="l-filter-multi-options-checkbox"> 2995 <input id="app_filter_map_difficulties_60" class="uk-checkbox" type="checkbox" data-value="60"> 2996 <label for="app_filter_map_difficulties_60">Bassa</label> 2997 </div> 2998 <div class="l-filter-multi-options-checkbox"> 2999 <input id="app_filter_map_difficulties_61" class="uk-checkbox" type="checkbox" data-value="61"> 3000 <label for="app_filter_map_difficulties_61">Media</label> 3001 </div> 3002 </div> 3003 <div class="l-filter-multi-options-select"> 3004 <div class="uk-button uk-button-light l-is-pill l-filter-multi-options-select-all">Seleziona tutti</div> 3005 <div class="uk-button uk-button-light l-is-pill l-filter-multi-options-select-reset">Azzeramento</div> 3006 </div> 3007 </div> 3008 3009 3010 </div> 3011 3012 3013 <div class="l-filter-multi"> 3014 <select id="app_filter_map_suitabilities" name="app_f
3014ilter_map[suitabilities][]" required="required" data-all="Tutto" data-none="Tutto" title="Scegli" data-placeholder="Scegli" data-loading-text="Caricamento..." data-no-choices-text="Nessuna scelta tra cui scegliere" data-item-select-text="Clicca per selezionare" data-unique-item-text="Possono essere aggiunti solo valori unici" data-custom-add-item-text="Solo i valori che corrispondono a condizioni specifiche possono essere aggiunti" data-no-results-text="Nessun risultato trovato" data-search-result-limit="10" data-search-placeholder-value="" hidden="hidden" class="uk-select" multiple="multiple"><option value="63" data-icon="">Ciclo 1 (Scuola elementare / 6 - 9 anni)</option><option value="64" data-icon="">Ciclo 2 (scuola media / 10 - 12 anni)</option><option value="65" data-icon="">Ciclo 3 (Scuola superiore / 13 - 16 anni)</option><option value="66" data-icon="">per le famiglie</option><option value="67" data-icon="">per le persone che non soffrono di vertigini</option></select> 3015 <div class="l-filter-multi-header"> 3016 <div class="l-filter-multi-header-inner"> 3017 <label class="uk-form-label l-filter-multi-label required">Idoneità <span class="uk-badge l-filter-multi-counter">0</span></label> 3018 <div class="l-filter-multi-selected uk-text-meta"></div> 3019 </div> 3020 <div class="uk-icon-button uk-button-light uk-button-xsmall l-filter-multi-header-expand" uk-toggle="target: #app_filter_map_suitabilities-toggle; animation: uk-animation-slide-top-small"> 3021 <i class="fa fa-plus"></i> 3022 </div> 3023 </div> 3024 <div class="l-filter-multi-options" id="app_filter_map_suitabilities-toggle" hidden> 3025 <div class="l-filter-multi-options-inner"> 3026 <div class="l-filter-multi-options-checkbox"> 3027 <input id="app_filter_map_suitabilities_63" class="uk-checkbox" type="checkbox" data-value="63"> 3028 <label for="app_filter_map_suitabilities_63">Ciclo 1 (Scuola elementare / 6 - 9 anni)</label> 3029 </div> 3030 <div class="l-filter-multi-options-checkbox"> 3031 <input id="app_filter_map_suitabilities_64" class="uk-checkbox" type="checkbox" data-value="64"> 3032 <label for="app_filter_map_suitabilities_64">Ciclo 2 (scuola media / 10 - 12 anni)</label> 3033 </div> 3034 <div class="l-filter-multi-options-checkbox"> 3035 <input id="app_filter_map_suitabilities_65" class="uk-checkbox" type="checkbox" data-value="65"> 3036 <label for="app_filter_map_suitabilities_65">Ciclo 3 (Scuola superiore / 13 - 16 anni)</label> 3037 </div> 3038 <div class="l-filter-multi-options-checkbox"> 3039 <input id="app_filter_map_suitabilities_66" class="uk-checkbox" type="checkbox" data-value="66"> 3040 <label for="app_filter_map_suitabilities_66">per le famiglie</label> 3041 </div> 3042 <div class="l-filter-multi-options-checkbox"> 3043 <input id="app_filter_map_suitabilities_67" class="uk-checkbox" type="checkbox" data-value="67"> 3044 <label for="app_filter_map_suitabilities_67">per le persone che non soffrono di vertigini</label> 3045 </div> 3046 </div> 3047 <div class="l-filter-multi-options-select"> 3048 <div class="uk-button uk-button-light l-is-pill l-filter-multi-options-select-all">Seleziona tutti</div> 3049 <div class="uk-button uk-button-light l-is-pill l-filter-multi-options-select-reset">Azzeramento</div> 3050 </div> 3051 </div> 3052 3053 3054 </div> 3055 3056 <div class="l-flex-break"></div> 3057 3058 3059 3060 3061 <div class="uk-margin-medium-top">
3061 <label class="uk-form-label required" for="app_filter_map_duration_from">Durata da 3062 </label><div class="uk-form-controls "> <select id="app_filter_map_duration_from" name="app_filter_map[duration][from]" required="required" title="Niente è stato selezionato" data-placeholder="Niente è stato selezionato" data-loading-text="Caricamento..." data-no-choices-text="Nessuna scelta tra cui scegliere" data-item-select-text="Clicca per selezionare" data-unique-item-text="Possono essere aggiunti solo valori unici" data-custom-add-item-text="Solo i valori che corrispondono a condizioni specifiche possono essere aggiunti" data-no-results-text="Nessun risultato trovato" data-search-result-limit="10" data-search-placeholder-value="" class="uk-select"><option value="">Niente è stato selezionato</option><option value="0" selected="selected">Meno di 1 h</option><option value="1">1 h</option><option value="2">2 h</option><option value="3">3 h</option><option value="4">4 h</option><option value="5">5 h</option><option value="6">6 h</option></select> </div> 3063 </div> 3064 3065 3066 <div class="uk-margin-medium-top"> <label class="uk-form-label required" for="app_filter_map_duration_to">Durata a 3067 </label><div class="uk-form-controls "> <select id="app_filter_map_duration_to" name="app_filter_map[duration][to]" required="required" title="Niente è stato selezionato" data-placeholder="Niente è stato selezionato" data-loading-text="Caricamento..." data-no-choices-text="Nessuna scelta tra cui scegliere" data-item-select-text="Clicca per selezionare" data-unique-item-text="Possono essere aggiunti solo valori unici" data-custom-add-item-text="Solo i valori che corrispondono a condizioni specifiche possono essere aggiunti" data-no-results-text="Nessun risultato trovato" data-search-result-limit="10" data-search-placeholder-value="" class="uk-select"><option value="">Niente è stato selezionato</option><option value="0">1 h</option><option value="1">2 h</option><option value="2">3 h</option><option value="3">4 h</option><option value="4">5 h</option><option value="5">6 h</option><option value="6" selected="selected">Più di 6 h</option></select> </div> 3068 </div> 3069 3070 3071 3072 3073 3074 <div class="uk-margin-medium-top"> <label class="uk-form-label required" for="app_filter_map_date_from">Data da 3075 </label><div class="uk-form-controls "> <div class="uk-inline"> 3076 <span class="uk-form-icon uk-form-icon-flip"><i class="fa fa-calendar"></i></span> 3077 <input type="text" id="app_filter_map_date_from" name="app_filter_map[date][from]" required="required" class="l-datepicker uk-input" data-disable-past="0" data-disable-weekends="0" data-disable-saturdays="0" data-disable-sundays="0" data-disable-dates="[]" data-uk-datepicker="{format:'DD.MM.YYYY'}" placeholder="Scegli la data" /> 3078 </div> 3079 3080 </div> 3081 </div> 3082 3083 3084 <div class="uk-margin-medium-top"> <label class="uk-form-label required" for="app_filter_map_date_to">Data a 3085 </label><div class="uk-form-controls "> <div class="uk-inline"> 3086 <span class="uk-form-icon uk-form-icon-flip"><i class="fa fa-calendar"></i></span> 3087 <input type="text" id="app_filter_map_date_to" name="app_filter_map[date][to]" required="required" class="l-datepicker uk-input" data-disable-past="0" data-disable-weekends="0" data-disable-saturdays="0" data-disable-sundays="0" data-disable-dates="[]" data-uk-datepicker="{format:'DD.MM.YYYY'}" placeholder="Scegli la data" /> 3088 </div> 3089 3090 </div> 3091 </div> 3092 3093 <div class="l-filter-footer"> 3094 <button type="submit" class="uk-button uk-button-primary l-map-search-submit" 3095 data-result-text="Mostra %COUNT% escursioni">Visualizza le escursioni</button> 3096 <button type="button" 3097 class="uk-button uk-button-secondary l-map-search-reset">Resetta i filtri</button> 3098 </div> 3099 </div> 3100 </div> 3101 </div> 3102 <div class="uk-inline"> 3103 <input type="hidden" id="app_filter_map__token" name="app_f
3103ilter_map[_token]" class="uk-input" placeholder="" value="cd8c077f3649.6xs96HzMl5oafGqt0GyEi6J8UtFO8Lkh6epWzGifVRg.qSpOsE2t4PN0LFuYiBvn-OkdI7AKktFkh9oZtQr4bCG-b3ncLPimw1MrBQ" /> 3104 </div> 3105 3106 </form> 3107 </div> 3108 </div> 3109 </div> 3110 3111 <div id="overlay-map-selection" class="l-map-popup-container"> 3112 <div class="l-popup-controls"> 3113 <span class="l-map-popup-previous l-map-popup-navigation uk-icon-button uk-button-light l-is-xsmall"> 3114 <i class="fa fa-arrow-left"></i> 3115 </span> 3116 <span class="l-map-popup-next l-map-popup-navigation uk-icon-button uk-button-light l-is-xsmall"> 3117 <i class="fa fa-arrow-right"></i> 3118 </span> 3119 <span class="l-map-popup-close uk-icon-button uk-button-danger l-is-xsmall"> 3120 <i class="fa fa-times"></i> 3121 </span> 3122 </div> 3123 </div> 3124 <template id="template-popup" 3125 data-label-point-of-interest="Punto di interesse" 3126 data-label-wanderhotel="Alberghi per escursionisti" 3127 data-label-fireplace="Aree per grigliate" 3128 data-label-video="Video" 3129 data-label-hiking-bench="Panca escursionistiche" 3130 data-label-farm-shop="Negozio agricolo"> 3131 <div class="l-map-popup"> 3132 <div class="l-image-wrapper"> 3133 <picture> 3134 <img class="l-popup-main-image" src=""> 3135 <span class="l-image-annotation"></span> 3136 </picture> 3137 <span class="l-abo-badge">ABO</span> 3138 </div> 3139 <div class="l-map-popup-content"> 3140 <div class="l-badge"></div> 3141 <div class="l-subtitle-container"> 3142 <img src="" class="l-icon" alt="Route"/> 3143 <small class="l-subtitle"></small> 3144 </div> 3145 <h3><a class="l-title"></a></h3> 3146 <span class="l-text"></span> 3147 </div> 3148 <div class="l-hike-footer"> 3149 <div class="l-evening-night-hike l-hike-meta"> 3150 <span class="l-card-footer-icon fa"></span> 3151 <span class="l-card-footer-label"></span> 3152 </div> 3153 <div class="l-hike-tscale l-hike-meta"> 3154 <span class="l-card-footer-icon fa fa-person-hiking"></span> 3155 <img class="l-trail-category" alt="T-Scale"/> 3156 <span class="l-card-footer-label"></span> 3157 </div> 3158 <div class="l-hike-time l-hike-meta"> 3159 <span class="l-card-footer-icon fa fa-thin fa-clock"></span> 3160 <span class="l-card-footer-label"></span> 3161 </div> 3162 <div class="l-hike-distance l-hike-meta"> 3163 <span class="l-card-footer-icon fa fa-arrows-left-right"></span> 3164 <span class="l-card-footer-label"></span> 3165 </div> 3166 <div class="l-hike-difficulty l-hike-meta"> 3167 <span class="l-card-footer-icon fa fa-thin fa-face-hand-over-mouth"></span> 3168 <span class="l-card-footer-label"></span> 3169 </div> 3170 <div class="l-for-families"> 3171 <span class="l-card-footer-icon fa fa-thin fa-family"></span> 3172 <span class="l-card-footer-label">Adatto per le famiglie</span> 3173 </div> 3174 </div> 3175 </div> 3176</template> 3177 3178 3179 <!-- Meta Pixel Code --> 3180
3180<script>
vendor: 531 bytes, lines 3180-3189
3180 3181 !function(f,b,e,v,n,t,s) 3182 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 3183 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 3184 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 3185 n.queue=[];t=b.createElement(e);t.async=!0; 3186 t.src=v;s=b.getElementsByTagName(e)[0]; 3187 s.parentNode.insertBefore(t,s)}(window, document,'script', 3188 'https://connect.facebook.net/en_US/fbevents.js'); 3189 fbq('init', '
3189309093879966080
vendor: 16 bytes, lines 3189-3190
3189'); 3190
3190fbq('init', '974407906983583'); 3191 fbq('track', 'PageView'); 3192 </script>
3192 3193 <noscript> 3194 <img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=309093879966080&ev=PageView&noscript=1" /> 3195 <img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=974407906983583&ev=PageView&noscript=1" /> 3196 </noscript> 3197 <!-- End Meta Pixel Code --> 3198 3199
3199<script> 3200 (function () { 3201 const STATE_COOKIE = `sww_popup_state`; 3202 const TWO_YEARS_SECONDS = 60 * 60 * 24 * 365 * 2; // cookie lifetime 3203 const SESSION_TIMEOUT_MS = 30 * 60 * 1000; 3204 const SCROLL_ENGAGEMENT_THRESHOLD = 0.6; 3205 const SCROLL_TRIGGER_THRESHOLD = 0.5; 3206 const DWELL_ENGAGEMENT_MS = 60 * 1000; 3207 3208 // `firstContact` defaults to false; only the brand-new-user path 3209 // (no cookie) flips it to true so subsequent sessions are non-first. 3210 function defaultSession() { 3211 return { 3212 startedAt: new Date().toISOString(), 3213 firstContact: false, 3214 pageviews: 0, 3215 highEngagement: false 3216 }; 3217 } 3218 3219 // Reads the cookie that contains all popup infos. Mainly to record user actions. 3220 function readState() { 3221 const cookieMatch = document.cookie.match(new RegExp("(?:^|; )" + STATE_COOKIE + "=([^;]*)")); 3222 const raw = cookieMatch ? decodeURIComponent(cookieMatch[1]) : null; 3223 const firstSession = { ...defaultSession(), firstContact: true }; 3224 const fallback = { v: 1, lastSeenAt: null, popups: {}, session: firstSession }; 3225 if (!raw) return fallback; // On first visit 3226 try { 3227 const parsed = JSON.parse(raw); 3228 parsed.popups = parsed.popups || {}; 3229 parsed.session = parsed.session || defaultSession(); 3230 if (isNewSession(parsed)) parsed.session = defaultSession(); 3231 return parsed; 3232 } catch (error) { 3233 return fallback; 3234 } 3235 } 3236 3237 function writeState(state) { 3238 state.lastSeenAt = new Date().toISOString(); 3239 document.cookie = STATE_COOKIE + "=" + encodeURIComponent(JSON.stringify(state)) 3240 + "; Path=/; Max-Age=" + TWO_YEARS_SECONDS + "; SameSite=Lax"; 3241 } 3242 3243 // New session = no previous activity or last activity > 30 min ago. 3244 function isNewSession(state) { 3245 if (!state.lastSeenAt) return true; 3246 const lastSeenMs = Date.parse(state.lastSeenAt); 3247 if (isNaN(lastSeenMs)) return true; 3248 return Date.now() - lastSeenMs > SESSION_TIMEOUT_MS; 3249 } 3250 3251 // Read, roll the session if it has expired, mutate, then persist. 3252 function updateState(mutate) { 3253 const state = readState(); 3254 mutate(state); 3255 writeState(state); 3256 } 3257 3258 function scrollFraction() { 3259 const scrolled = window.scrollY || document.documentElement.scrollTop; 3260 const scrollable = document.documentElement.scrollHeight - window.innerHeight; 3261 return scrollable > 0 ? scrolled / scrollable : 0; 3262 } 3263 3264 // Bump pageview counter once per pageview; keep `state` for the 3265 // engagement listeners so they see the post-update values. 3266 updateState(function (current) { 3267 current.session.pageviews = (current.session.pageviews || 0) + 1; 3268 }); 3269 const state = readState(); 3270 3271 // High engagement = 60s dwell AND 50% scroll on this pageview; 3272 // written once per session, sticky for the rest of the session. 3273 let highEngagementRecorded = state.session.highEngagement === true; 3274 let scrollReached = false; 3275 let dwellReached = false; 3276 function markHighEngagement() { 3277 if (highEngagementRecorded || !scrollReached || !dwellReached) return; 3278 highEngagementRecorded = true; 3279 updateState(function (current) { current.session.highEngagement = true; }); 3280 } 3281 function onEngagementScroll() { 3282 if (highEngagementRecorded || scrollReached) return; 3283 if (scrollFraction() < SCROLL_ENGAGEMENT_THRESHOLD) return; 3284 scrollReached = true; 3285 window.removeEventListener("scroll", onEngagementScroll); 3286 markHighEngagement(); 3287 } 3288 if (!highEngagementRecorded) { 3289 window.addEventListener("scroll", onEngagementScroll, { passive: true }); 3290 setTimeout(function () { 3291 dwellReached = true; 3292 markHighEngagement(); 3293 }, DWELL_ENGAGEMENT_MS); 3294 } 3295 3296 // Everything below only runs when a popup was rendered. 3297 const dialog = document.getElementById("popup"); 3298 if (!dialog || !dialog.dataset.popupId) return; 3299 3300 const popupId = dialog.dataset.popupId; 3301 3302 function recordAction(action) { 3303 updateState(function (current) { 3304 current.popups = current.popups || {}; 3305 current.popups[popupId] = { action: action, at: new Date().toISOString() }; 3306 if (action === `shown`) { 3307 current.session.lastShownAtPageview = current.session.pageviews || 0; 3308 } 3309 }); 3310 gtag('event', 'popup', { 3311 'id': popupId, 3312 'action': action 3313 }); 3314 } 3315 3316 dialog.querySelectorAll('.l-popup-confirm').forEach(function (element) { 3317 element.addEventListener('click', function () { 3318 recordAction(`click`); 3319 dialog.close('confirm'); 3320 }); 3321 }); 3322 3323 // Escape, backdrop click, or programmatic close all count as reject. 3324 dialog.addEventListener("close", function () { 3325 if (dialog.returnValue !== 'confirm') { 3326 recordAction(`reject`); 3327 } 3328 }); 3329 3330 let shown = false; // prevents popup from showing again after dismissal 3331 function show() { 3332 if (shown) return; 3333 shown = true; 3334 dialog.showModal(); 3335 window.removeEventListener("scroll", onTriggerScroll); 3336 document.removeEventListener("mouseout", onMouseOut); 3337 recordAction(`shown`); 3338 } 3339 3340 // show popup after x seconds 3341 const timerSeconds = parseInt(dialog.dataset.triggerTimer || "0"); 3342 if (timerSeconds > 0) { 3343 setTimeout(show, timerSeconds * 1000); 3344 } 3345 3346 // 50% page-height trigger 3347 function onTriggerScroll() { 3348 if (scrollFraction() >= SCROLL_TRIGGER_THRESHOLD) show(); 3349 } 3350 if (dialog.dataset.triggerScroll === "true") { 3351 window.addEventListener("scroll", onTriggerScroll, { passive: true }); 3352 } 3353 3354 // Exit-intent: cursor leaves the viewport at the top edge. 3355 function onMouseOut(event) { 3356 if (!event.relatedTarget && event.clientY <= 0) show(); 3357 } 3358 if (dialog.dataset.triggerExitintent === "true") { 3359 document.addEventListener("mouseout", onMouseOut); 3360 } 3361})(); </script>
3361 3362 3363 3364 <div class="modal fade" id="pdf-modal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" 3365 aria-hidden="true" style="display: none;"> 3366 <div class="modal-dialog modal-xl modal-lg" role="document" style="height: 90%; max-width: 1140px !important;"> 3367 <div class="modal-content" style="height: 100%;"> 3368 <div class="modal-header"> 3369 <h5 class="modal-title" id="exampleModalLabel">Modal title</h5> 3370 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fa fa-close icon-2x"></i></button> 3371 </div> 3372 <div class="modal-body p-0"> 3373 <iframe src="" frameborder="0" style="width: 100%; height: 100%; position: absolute;"></iframe> 3374 </div> 3375 </div> 3376 </div> 3377 </div> 3378 3379
3379<script> 3380 let switcherShown = false; 3381 document.addEventListener('uikit:init', () => { 3382 UIkit.util.on('.switcher-container > .ct-subnav-panel', 'beforeshow', function (event) { 3383 if (switcherShown === false) { 3384 // Prevent showing the sub menu on smaller screens 3385 if (960 > window.innerWidth) event.preventDefault(); 3386 3387 switcherShown = true; 3388 } 3389 }); 3390 }); 3391 </script>
3391 3392 3393
3393<script> 3394 const isBackend = false; 3395 const is_mobile = false; 3396 </script>
3396 3397
3397<script> 3398 const locale = `it`; 3399 const PATH_TO_PURIFY_RTE = `/it/purify-rte`; 3400 const environment = `prod`; 3401 </script>
3401 3402 3403
3403<script src="/js/libraries/openlayers-v9.0.0.js?2.2.43"></script>
3403 3404
3404<script src="/js/libraries/proj4-v2.9.0.js?2.2.43"></script>
3404 3405
3405<script> 3406 const ol = openlayersV900; // alias global openlayers variable 3407 proj4.defs("EPSG:2056", "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs"); 3408 ol.proj.proj4.register(proj4); 3409 const swissExtent = [670433, 5744676, 1162476, 6078756]; 3410 3411 function scaleExtent(extent, factor) { 3412 let geom = ol.geom.Polygon.fromExtent(extent); 3413 geom.scale(factor); 3414 return geom.getExtent(); 3415 } 3416 3417 const WMS_TILE_SIZE = 512; // px 3418 const TILEGRID_ORIGIN = [2420000, 1350000]; // in EPSG:2056 3419 // resolutions in meter/pixel 3420 const TILEGRID_RESOLUTIONS = [ 3421 4000, 3422 3750, 3423 3500, 3424 3250, 3425 3000, 3426 2750, 3427 2500, 3428 2250, 3429 2000, 3430 1750, 3431 1500, 3432 1250, 3433 1000, 3434 750, 3435 650, 3436 500, 3437 250, 3438 100, 3439 50, 3440 20, 3441 10, 3442 5, 3443 2.5, 3444 2, 3445 1.5, 3446 1, 3447 0.5, 3448 0.25, 3449 0.1 3450 ]; 3451 </script>
3451 3452 3453
3453<script> 3454 let cloudtec_flashes = []; 3455 </script>
3455 3456 3457 3458
3458<script src="/publicui/js/public.bundle.js?2.2.43"></script>
3458 3459
3459<script src="/bundles/cloudtecadmin/js/cloudtec-collection.js?2.2.43"></script>
3459 3460
3460<script src="/bundles/cloudtecadmin/js/multiselect.js?2.2.43"></script>
3460 3461
3461<script src="/bundles/cloudtecadmin/js/shared.js?2.2.43"></script>
3461 3462
3462<script src="/bundles/cloudtecadmin/js/public.js?2.2.43"></script>
3462 3463
3463<script src="/adminui/plugins/custom/upload/uploads.bundle.js?2.2.43" type="text/javascript"></script>
3463 3464
3464<script type="text/javascript" defer>// Immediately after the js include 3465 Dropzone.autoDiscover = false; 3466 </script>
3466 3467
3467<script src="/bundles/cloudtecupload/js/upload-bundle.js?2.2.43" type="text/javascript" defer></script>
3467 3468
3468<script src="/bundles/cloudtecadmin/js/image-focus.umd.js?2.2.43" type="text/javascript" defer></script>
3468 3469
3469<script> 3470 3471(function ($) { 3472 $.extend($.summernote.lang, { 3473 'it': { 3474 font: { 3475 bold: 'Grassetto', 3476 italic: 'Corsivo', 3477 underline: 'Sottolineare', 3478 clear: 'Rimuovi\u0020stile\u0020carattere', 3479 height: 'Altezza\u0020della\u0020linea', 3480 name: 'Famiglia\u0020di\u0020caratteri', 3481 strikethrough: 'Barrato', 3482 subscript: 'Pedice', 3483 superscript: 'Apice', 3484 size: 'Dimensione\u0020del\u0020carattere', 3485 }, 3486 image: { 3487 image: 'Vignetta', 3488 insert: 'Inserisci\u0020immagine', 3489 resizeFull: 'Ridimensiona\u0020completamente', 3490 resizeHalf: 'Ridimensiona\u0020met\u00E0', 3491 resizeQuarter: 'Ridimensiona\u0020il\u0020quarto', 3492 floatLeft: 'Galleggiante\u0020a\u0020sinistra', 3493 floatRight: 'Galleggiante\u0020a\u0020destra', 3494 floatNone: 'Rimuovi\u0020il\u0020galleggiante', 3495 shapeRounded: 'Forma\u003A\u0020Arrotondata', 3496 shapeCircle: 'Forma\u003A\u0020Cerchio', 3497 shapeThumbnail: 'Forma\u003A\u0020Miniatura', 3498 shapeNone: 'Forma\u003A\u0020Nessuna', 3499 dragImageHere: 'Trascina\u0020qui\u0020l\u0027immagine\u0020o\u0020il\u0020testo', 3500 dropImage: 'Rilascia\u0020immagine\u0020o\u0020testo', 3501 selectFromFiles: 'Seleziona\u0020dai\u0020file', 3502 maximumFileSize: 'Dimensione\u0020massima\u0020del\u0020file', 3503 maximumFileSizeError: 'La\u0020dimensione\u0020massima\u0020del\u0020file\u0020\u00E8\u0020stata\u0020superata.', 3504 url: 'URL\u0020dell\u0027immagine', 3505 remove: 'Rimuovi\u0020immagine', 3506 original: 'Originale', 3507 }, 3508 video: { 3509 video: 'Video', 3510 videoLink: 'Link\u0020al\u0020video', 3511 insert: 'Inserisci\u0020video', 3512 url: 'URL\u0020del\u0020video', 3513 providers: '\u0028YouTube,\u0020Google\u0020Drive,\u0020Vimeo,\u0020Vine,\u0020Instagram,\u0020DailyMotion,\u0020Youku,\u0020Peertube\u0029', 3514 }, 3515 link: { 3516 link: 'Link', 3517 insert: 'Inserisci\u0020link', 3518 unlink: 'Scollega\u0020il\u0020link', 3519 edit: 'Modifica', 3520 textToDisplay: 'Testo\u0020da\u0020visualizzare', 3521 url: 'A\u0020quale\u0020URL\u0020deve\u0020andare\u0020questo\u0020link\u003F', 3522 openInNewWindow: 'Apri\u0020in\u0020una\u0020nuova\u0020finestra', 3523 }, 3524 table: { 3525 table: 'Tabella', 3526 addRowAbove: 'Aggiungi\u0020riga\u0020sopra', 3527 addRowBelow: 'Aggiungi\u0020riga\u0020sotto', 3528 addColLeft: 'Aggiungi\u0020colonna\u0020a\u0020sinistra', 3529 addColRight: 'Aggiungi\u0020colonna\u0020a\u0020destra', 3530 delRow: 'Elimina\u0020riga', 3531 delCol: 'Elimina\u0020colonna', 3532 delTable: 'Elimina\u0020tabella', 3533 }, 3534 hr: { 3535 insert: 'Inserisci\u0020regola\u0020orizzontale', 3536 }, 3537 style: { 3538 style: 'Stile', 3539 normal: 'Normale', 3540 p: 'Citazione', 3541 blockquote: 'Citazione\u0020a\u0020blocchi', 3542 pre: 'Codice', 3543 h1: 'Intestazione\u00201', 3544 h2: 'Intestazione\u00202', 3545 h3: 'Intestazione\u00203', 3546 h4: 'Intestazione\u00204', 3547 h5: 'Intestazione\u00205', 3548 h6: 'Intestazione\u00206', 3549 }, 3550 lists: { 3551 unordered: 'Elenco\u0020non\u0020ordinato', 3552 ordered: 'Elenco\u0020ordinato', 3553 }, 3554 options: { 3555 help: 'Aiuto', 3556 fullscreen: 'Schermo\u0020intero', 3557 codeview: 'Vista\u0020del\u0020codice', 3558 }, 3559 paragraph: { 3560 paragraph: 'Paragrafo',
3561 outdent: 'Fuoriuscita', 3562 indent: 'Rientro', 3563 left: 'Allinea\u0020a\u0020sinistra', 3564 center: 'Allinea\u0020il\u0020centro', 3565 right: 'Allinea\u0020a\u0020destra', 3566 justify: 'Giustificare\u0020completamente', 3567 }, 3568 color: { 3569 recent: 'Colore\u0020recente', 3570 more: 'Altro\u0020colore', 3571 background: 'Colore\u0020di\u0020sfondo', 3572 foreground: 'Colore\u0020del\u0020testo', 3573 transparent: 'Trasparente', 3574 setTransparent: 'Imposta\u0020trasparente', 3575 reset: 'Reset', 3576 resetToDefault: 'Ripristinare\u0020le\u0020impostazioni\u0020predefinite', 3577 }, 3578 shortcut: { 3579 shortcuts: 'Tasti\u0020rapidi', 3580 close: 'Chiudere', 3581 textFormatting: 'Formattazione\u0020del\u0020testo', 3582 action: 'Azione', 3583 paragraphFormatting: 'Formattazione\u0020del\u0020paragrafo', 3584 documentStyle: 'Stile\u0020del\u0020documento', 3585 extraKeys: 'Chiavi\u0020extra', 3586 }, 3587 help: { 3588 'insertParagraph': 'Inserisci\u0020paragrafo', 3589 'undo': 'Annulla\u0020l\u0027ultimo\u0020comando', 3590 'redo': 'Ripeti\u0020l\u0027ultimo\u0020comando', 3591 'tab': 'Scheda', 3592 'untab': 'Togli\u0020scheda', 3593 'bold': 'Imposta\u0020uno\u0020stile\u0020audace', 3594 'italic': 'Imposta\u0020uno\u0020stile\u0020corsivo', 3595 'underline': 'Imposta\u0020uno\u0020stile\u0020di\u0020sottolineatura', 3596 'strikethrough': 'Imposta\u0020uno\u0020stile\u0020barrato', 3597 'removeFormat': 'Pulisci\u0020uno\u0020stile', 3598 'justifyLeft': 'Imposta\u0020allineamento\u0020a\u0020sinistra', 3599 'justifyCenter': 'Imposta\u0020allineamento\u0020centrale', 3600 'justifyRight': 'Imposta\u0020allineamento\u0020a\u0020destra', 3601 'justifyFull': 'Imposta\u0020allineamento\u0020completo', 3602 'insertUnorderedList': 'Alterna\u0020l\u0027elenco\u0020non\u0020ordinato', 3603 'insertOrderedList': 'Alterna\u0020l\u0027elenco\u0020ordinato', 3604 'outdent': 'Aumentare\u0020il\u0020rientro\u0020del\u0020paragrafo', 3605 'indent': 'Diminuire\u0020il\u0020rientro\u0020del\u0020paragrafo', 3606 'formatPara': 'Cambia\u0020il\u0020formato\u0020del\u0020blocco\u0020corrente\u0020come\u0020paragrafo\u0020\u0028tag\u0020P\u0029',
3607 'formatH1': 'Cambia\u0020il\u0020formato\u0020del\u0020blocco\u0020corrente\u0020come\u0020H1', 3608 'formatH2': 'Cambia\u0020il\u0020formato\u0020del\u0020blocco\u0020corrente\u0020come\u0020H2', 3609 'formatH3': 'Cambia\u0020il\u0020formato\u0020del\u0020blocco\u0020corrente\u0020come\u0020H3', 3610 'formatH4': 'Cambia\u0020il\u0020formato\u0020del\u0020blocco\u0020corrente\u0020come\u0020H4', 3611 'formatH5': 'Cambia\u0020il\u0020formato\u0020del\u0020blocco\u0020corrente\u0020come\u0020H5', 3612 'formatH6': 'Cambia\u0020il\u0020formato\u0020del\u0020blocco\u0020corrente\u0020come\u0020H6', 3613 'insertHorizontalRule': 'Inserisci\u0020regola\u0020orizzontale', 3614 'linkDialog.show': 'Mostra\u0020finestra\u0020di\u0020collegamento', 3615 }, 3616 history: { 3617 undo: 'Annulla', 3618 redo: 'Rifare', 3619 }, 3620 specialChar: { 3621 specialChar: 'CARATTERI\u0020SPECIALI', 3622 select: 'Seleziona\u0020i\u0020caratteri\u0020speciali', 3623 }, 3624 }, 3625 }); 3626})(jQuery); 3627 </script>
3627 3628 3629
3629<script> 3630 $(document).ready(function () { 3631 const scroll = UIkit.scroll('body', { 3632 offset: 48 3633 }) 3634 3635 $('#l-section-navigation > li > a').each((index, element) => { 3636 UIkit.util.on(element, 'beforescroll', function (e) { 3637 if ($(element).data('link-name')) { 3638 e.preventDefault(); 3639 scroll.scrollTo($('[data-block-link-name="' + $(element).attr('href').replace(/^#/, '') + '"]')); } 3640 }); 3641 }); 3642 3643 let hash = window.location.hash.substring(1); 3644 3645 if (hash) { 3646 let $targetElement = $(`[data-block-link-name="${hash}"]`); 3647 3648 if ($targetElement.length) { 3649 scroll.scrollTo($targetElement); 3650 } 3651 } 3652}); 3653 </script>
3653 3654 3655 3656
3656<script src="/js/public/htmlburger/main.js?2.2.43"></script>
3656 3657
3657<script src="/bundles/cloudtecshop/js/shop.js?2.2.43"></script>
3657 3658
3658<script src="/js/public/sww.js?2.2.43"></script>
3658 3659
3659<script src="/js/libraries/sww.js?2.2.43"></script>
3659 3660
3660<script> 3661 sww.setEnvironment(`prod`); 3662 </script>
3662 3663
3663<script> 3664 /** 3665 * LocationSearch instance is created on coordinate picker and map instances. 3666 * It encapsulates the logic to fetch location data from the GeoAdmin API and 3667 * To achieve this it reinitialized the autoComplete.js instance already present. 3668 * 3669 * Usage: 3670 * Initialize by passing the target container relative to this. 3671 * The callback function is called with the selected location data. 3672 * Data reference should be used as read-only, it's not guaranteed it will affect the event itself. 3673 * 3674 * this.locationSearch = new LocationSearch( 3675 * this.#container.parent().find('.ct-autocomplete'), 3676 * (data) => this.displayCoordinates(data.lon, data.lat, data.label) 3677 * ); 3678 */ 3679class LocationSearch { 3680 #options = { 3681 locationSearchUrl: 'https://api3.geo.admin.ch/rest/services/api/SearchServer', 3682 origins: [ 3683 'parcel', 3684 'district', 3685 'zipcode', 3686 'gg25', 3687 'district', 3688 'kantone', 3689 'gazetteer', 3690 'address' 3691 ] 3692 }; 3693 3694 #container; 3695 3696 constructor(container, callback) { 3697 if (container.length < 1 || !container[0]._autocomplete) { 3698 this.#container = null; 3699 return; 3700 } 3701 3702 this.#container = container[0]._autocomplete; 3703 3704 this.#container.unInit(); 3705 let autocompleteConfig = this.#container.options; 3706 3707 autocompleteConfig.data.src = async (query) => { 3708 try { 3709 let source = await fetch(`${this.#options.locationSearchUrl}?searchText=${query}&origins=${this.#options.origins.join(",")}&type=locations&lang=${locale}`); 3710 let json = await source.json(); 3711 3712 return json.results.map( 3713 r => ({ 3714 id: r.id, 3715 code: r.attrs.detail, 3716 label: r.attrs.label, 3717 lat: r.attrs.lat, 3718 lon: r.attrs.lon 3719 }) 3720 ); 3721 } catch (error) { 3722 return error; 3723 } 3724 } 3725 3726 // we create a copy of the original selection event which is appended to the custom handler event passed through the constructor 3727 // parent is the extended functionality of the cloudtec auto complete 3728 let parent = autocompleteConfig.events.input.selection; 3729 3730 autocompleteConfig.events.input.selection = (event) => { 3731 event.detail.selection.value[event.detail.selection.key] = $("<p>").html(event.detail.selection.value.label).text(); 3732 callback(event.detail.selection.value); 3733 parent(event); 3734 } 3735 3736 this.#container = new autoComplete(autocompleteConfig); 3737 } 3738}
3739 class Mappy extends EventTarget { 3740 #options = { 3741 boundingBox: [670433, 5744676, 1162476, 6078756], // swiss extent in EPSG:3857 3742 zoom: 9.4, 3743 topoMapUrl: 'https://map.geo.admin.ch', 3744 topoMapZoom: 1.3, 3745 backgroundLayerUrl: `https://wmts.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-farbe/default/current/3857/{z}/{x}/{y}.jpeg`, 3746 backgroundAerialLayerUrl: 'https://wms0.geo.admin.ch/?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=ch.swisstopo.swissimage-product&LANG=de', 3747 defaultLayers: [ 3748 'schiessanzeigen', 3749 'herdenschutzhunde', 3750 'wanderwegnetz', 3751 'öv', 3752 'poi', 3753 'detours', 3754 ], 3755 hoverEnabled: true, 3756 hoverScale: 1.5, 3757 hoverCursor: 'pointer', // set to empty string to disable pointer cursor 3758 dataUrl: 'https://www.schweizer-wanderwege.ch', 3759 enableFullScreen: false, 3760 fullScreenSource: null 3761 }; 3762 #container; 3763 #currentZoomLevel; 3764 clickableLayers = []; 3765 3766 // layers that are from swisstopo and can be queried for feature information 3767 static swisstopoApiLayers = []; 3768 static get camp2campApiLayers() { 3769 return [ 3770 'hiking_proposition', 3771 'hiking_activity', 3772 'poi', 3773 'hiking', 3774 'detour' 3775 ]; 3776 } 3777 3778 constructor(container, options) { 3779 super(); 3780 3781 // singleton 3782 if ($(container).data('map')) { 3783 return $(container).data('map'); 3784 } else { 3785 $(container).data('map', this); 3786 } 3787 3788 this.#container = container; 3789 $.extend(this.#options, options); 3790 3791 // map layer 3792 this.backgroundLayer = new ol.layer.Tile({ 3793 name: "background", 3794 source: new ol.source.XYZ({ 3795 url: this.options.backgroundLayerUrl, 3796 crossOrigin: 'anonymous', 3797 zDirection: -1 3798 }) 3799 }); 3800 this.backgroundAerialLayer = new ol.layer.Tile({ 3801 visible: false, 3802 source: new ol.source.TileWMS({ 3803 url: this.options.backgroundAerialLayerUrl, 3804 crossOrigin: 'anonymous', 3805 tileGrid: new ol.tilegrid.TileGrid({ 3806 projection: "EPSG:21781", 3807 tileSize: WMS_TILE_SIZE, 3808 origin: TILEGRID_ORIGIN, 3809 resolutions: TILEGRID_RESOLUTIONS 3810 }) 3811 }) 3812 }); 3813 3814 // perspective 3815 this.view = new ol.View({ 3816 projection: "EPSG:3857", // WGS84/Pseudo-Mercator. Also used in Google Maps, Bing, etc. 3817 zoom: this.options.zoom, 3818 maxZoom: 18, 3819 extent: this.#scaleExtent(this.#options.boundingBox, 1.2) 3820 }) 3821 this.view.fit(this.#options.boundingBox); 3822 3823 // initialize openlayers 3824 let mapControls = ol.control.defaults.defaults({rotate: false}).extend([ 3825 new ol.control.ScaleLine({ 3826 units: "metric" 3827 }) 3828 ]); 3829 if (this.options.enableFullScreen) { 3830 let fullScreenOptions = { 3831 label: $('<span class="fa fa-expand"></span>').get(0), 3832 labelActive: $('<span class="fa fa-compress"></span>').get(0) 3833 }; 3834 if (this.options.fullScreenSource) { 3835 fullScreenOptions.source = this.options.fullScreenSource; 3836 } 3837 mapControls.extend([ 3838 new ol.control.FullScreen(fullScreenOptions) 3839 ]); 3840 document.addEventListener('fullscreenchange', () => { 3841 $('#overlay-map-selection').hide(); 3842 }); 3843 } 3844 this.map = new ol.Map({ 3845 target: this.container.get(0), 3846 controls: mapControls, 3847 layers: [this.backgroundLayer, this.backgroundAerialLayer], 3848 view: this.view, 3849 interactions: ol.interaction.defaults.defaults({altShiftDragRotate: false, pinchRotate: false}) 3850 }); 3851 3852 // mouseenter and mouseleave events on features. does not work on camp2camp & swisstopo layers (so most features) 3853 let selectClick = new ol.interaction.Select({ 3854 condition: ol.events.condition.singleClick, 3855 style: null 3856 }); 3857 this.map.addInteraction(selectClick); 3858 selectClick.on('select', (e) => { 3859 if (e.selected.length === 0) { 3860 return; 3861 } 3862 let cursor = [e.mapBrowserEvent.originalEvent.clientX, e.mapBrowserEvent.originalEvent.clientY]; 3863 let properties = e.selected[0].getProperties(); 3864 if (properties.features !== undefined) { 3865 // selected a clustered feature 3866 this.dispatchEvent(new CustomEvent('select', {'detail': {features: properties.features, 'cursor': cursor}})); 3867 } else { 3868 // selected a single feature 3869 this.dispatchEvent(new CustomEvent('select', {'detail': {features: e.selected[0], 'cursor': cursor}})); 3870 } 3871 }); 3872 // mouseenter and mouseleave events on features. does not work on camp2camp & swisstopo layers (so most features) 3873 let selectOnHover = new ol.interaction.Select({ 3874 condition: ol.events.condition.pointerMove, 3875 style: null 3876 }); 3877 this.map.addInteraction(selectOnHover); 3878 selectOnHover.on('select', (e) => { 3879 let cursor = [e.mapBrowserEvent.originalEvent.clientX, e.mapBrowserEvent.originalEvent.clientY]; 3880 // pointer on hover 3881 this.map.getTargetElement().style.cursor = (e.selected.length) ? this.options.hoverCurs
3881or : ''; 3882 // dispatch enter/leave events 3883 for (const feature of e.deselected) { 3884 this.dispatchEvent(new CustomEvent('mouseleave', {'detail': {features: feature, 'cursor': cursor}})); 3885 } 3886 for (const feature of e.selected) { 3887 this.dispatchEvent(new CustomEvent('mouseenter', {'detail': {features: feature, 'cursor': cursor}})); 3888 } 3889 }); 3890 this.map.on("singleclick", async (event) => { 3891 const clickedFeatures = this.map.getFeaturesAtPixel(event.pixel, { 3892 layerFilter: (layer) => this.clickableLayers.includes(layer.get("layer")) 3893 }); 3894 if (clickedFeatures.length > 0) { 3895 const layer = clickedFeatures[0].getProperties().layer; 3896 let uuids = []; 3897 if ('uuids' in clickedFeatures[0].getProperties()) { 3898 uuids = JSON.parse(clickedFeatures[0].getProperties().uuids); 3899 } else { 3900 uuids = [clickedFeatures[0].getProperties().uuid]; 3901 } 3902 const fetchMapItems = await Promise.all(uuids.map((uuid) => this.fetchCamp2CampLayerData(layer, uuid).catch(() => null))); 3903 let mapItems = fetchMapItems.filter((item) => item && item.detail !== 'Not Found'); 3904 this.dispatchEvent(new CustomEvent('select', {'detail': {features: mapItems, 'cursor': [event.originalEvent.clientX, event.originalEvent.clientY]}})); 3905 } else { 3906 // get names of all used layers 3907 let mapLayers = this.map.getLayers().getArray().map((layer) => layer.get('name')); 3908 // check if a swisstopo api layer is visible 3909 let visibleQueryLayers = Mappy.swisstopoApiLayers.filter((layer) => mapLayers.includes(layer) && this.clickableLayers.includes(layer) && this.zoom > this.getLayer(layer).getMinZoom()); 3910 if (visibleQueryLayers.length === 0) return; // don't query if there is nothing visible 3911 3912 $.get('https://api3.geo.admin.ch/rest/services/api/MapServer/identify', { 3913 'geometryType': 'esriGeometryPoint', 3914 'geometry': event.coordinate.join(','), 3915 'sr': '3857', // projection 3916 'layers': 'all:' + visibleQueryLayers.join(','), 3917 'tolerance': 5, 3918 'imageDisplay': [...this.map.getSize(), this.map.getView().getResolution()].join(','), 3919 'mapExtent': this.map.getView().calculateExtent(this.map.getSize()).join(','), 3920 'lang': locale 3921 }).then((data) => { 3922 // de-duplicate POIs with the same key & name (e.g. from different layers) 3923 const seen = new Set(); 3924 const features = data.results.filter((feature) => { 3925 const key = `${feature.layerBodId}::${feature.attributes?.label}`; 3926 if (seen.has(key)) { 3927 return false; 3928 } 3929 seen.add(key); 3930 return true; 3931 }); 3932 if (features.length) { 3933 this.dispatchEvent(new CustomEvent('select', {'detail': {features: features, 'cursor': [event.originalEvent.clientX, event.originalEvent.clientY]}})); 3934 } 3935 }); 3936 } 3937 // highlight feature on all layers that support it 3938 this.applyHighlightAtPixel(event.pixel, 'click'); 3939 }); 3940 3941 // Use displayPopup which is available on public and admin to display the popup 3942 this.addEventListener('select', function (e) {
3943 displayPopup(e.detail.features, e.detail.cursor); 3944 }); 3945 3946 // hover effect 3947 if (this.options.hoverEnabled) { 3948 this.addEventListener('mouseenter', (e) => { 3949 this.hoverFeature(e.detail.features); 3950 }); 3951 this.addEventListener('mouseleave', (e) => { 3952 this.unhoverFeature(e.detail.features); 3953 }); 3954 } 3955 // pointer cursor on hover 3956 this.map.on("pointermove", (e) => { 3957 if (!e.dragging) { 3958 const pixel = e.map.getEventPixel(e.originalEvent); 3959 const hit = this.map.hasFeatureAtPixel(pixel, { 3960 layerFilter: (layer) => this.clickableLayers.includes(layer.get("layer")) 3961 }); 3962 e.map.getTargetElement().style.cursor = hit ? "pointer" : ""; 3963 this.applyHighlightAtPixel(pixel, 'hover'); 3964 } 3965 }); 3966 3967 // clear route highlight on popup close 3968 $(document).on('click', '.l-map-popup-close', () => { 3969 // per camp2camp MVT-layer docs, route highlighting can only be cleared by calling highlightAtPixel() 3970 // on a pixel with no feature. Passing an off-map pixel clears the highlight. 3971 this.applyHighlightAtPixel([-9999, -9999], 'click'); 3972 }); 3973 3974 3975 // add default layers 3976 this.addDefaultLayers(); 3977 3978 // toggle for layers 3979 $('.l-layers-toggle').on('click', function () { 3980 $(this).toggleClass('active'); 3981 $('.l-layers-options').toggleClass('hidden'); 3982 }); 3983 3984 $('.l-layer-aerial', this.#container).on('click', (e) => { 3985 this.backgroundAerialLayer.setVisible(!this.backgroundAerialLayer.getVisible()); 3986 $(e.currentTarget).toggleClass('active', this.backgroundAerialLayer.getVisible()).blur(); 3987 }); 3988 $('.l-layer-aerial', this.#container).toggleClass('active', this.backgroundAerialLayer.getVisible()); 3989 3990 if (this.getLayer('ch.bav.haltestellen-oev')) { 3991 $('.l-layer-public-transportation', this.#container).on('click', (e) => { 3992 let layer = this.getLayer('ch.bav.haltestellen-oev'); 3993 layer.setVisible(!layer.getVisible()); 3994 $(e.currentTarget).toggleClass('active', layer.getVisible()).blur(); 3995 }); 3996 $('.l-layer-public-transportation', this.#container).toggleClass('active', this.getLayer('ch.bav.haltestellen-oev').getVisible()); 3997 } 3998 3999 if (this.detourLayer) { 4000 $('.l-layer-detour', this.#container).on('click', (e) => { 4001 this.detourLayer.setVisible(!this.detourLayer.getVisible()); 4002 $(e.currentTarget).toggleClass('active', this.detourLayer.getVisible()).blur(); 4003 }); 4004 $('.l-layer-detour', this.#container).toggleClass('active', this.detourLayer.getVisible()); 4005 } 4006 4007 if (this.getLayer('ch.swisstopo.swisstlm3d-wanderwege')) { 4008 $('.l-layer-hiking-trails', this.#container).on('click', (e) => { 4009 let layer = this.getLayer('ch.swisstopo.swisstlm3d-wanderwege'); 4010 layer.setVisible(!layer.getVisible()); 4011 $(e.currentTarget).toggleClass('active', layer.getVisible()).blur(); 4012 }); 4013 $('.l-layer-hiking-trails', this.#container).toggleClass('active', this.getLayer('ch.swisstopo.swisstlm3d-wanderwege').getVisible()); 4014 } 4015 4016 if (this.pointOfInterestLayer) { 4017 $('.l-layer-poi', this.#container).on('click', (e) => { 4018 this.pointOfInterestLayer.setVisible(!this.pointOfInterestLayer.getVisible()); 4019 $(e.currentTarget).toggleClass('active', this.pointOfInterestLayer.getVisible()).blur(); 4020 }); 4021 $('.l-layer-poi', this.#container).toggleClass('active', this.pointOfInterestLayer.getVisible()); 4022 } 4023 4024 // zoom 4025 this.#currentZoomLevel = this.view.getZoom(); 4026 this.view.on('change:resolution', (e) => { 4027 var newZoomLevel = this.view.getZoom(); 4028 if (this.#currentZoomLevel !== newZoomLevel) { 4029 this.dispatchEvent(new CustomEvent('zoom', {'detail': newZoomLevel})); 4030 this.#currentZoomLevel = newZoomLevel; 4031 } 4032 }); 4033 4034 this.map.on('movestart', (e) => { 4035 this.dispatchEvent(new CustomEvent('move')); 4036 }); 4037 4038 // initialize location search on corresponding element 4039 // if not present, either not rendered or not needed instance has container property set to null 4040 this.locationSearch = new LocationSearch( 4041 this.#container.parent().find('.ct-autocomplete'), 4042 (data) => this.displayCoordinates(data.lon, data.lat, data.label) 4043 ); 4044 } 4045 4046 async fetchCamp2CampLayerData(layer, uuid) { 4047 if (layer === 'hiking_proposition_lines') { 4048 layer = 'hiking_proposition'; 4049 } 4050 if (layer === 'hiking_activity_lines') { 4051 layer = 'hiking_activity'; 4052 } 4053 if (layer === 'hiking_lines') { 4054 layer = 'hiking'; 4055 } 4056 if (layer === 'stop_over') { 4057 layer = 'hiking_proposition'; 4058 } 4059 4060 // normalize detour layers to simplify accessing the c2c mapquery endpoint 4061 if (layer.startsWith('detour_')) { 4062 layer = 'detour'; 4063 } 4064 4065 let headers = {}; 4066 const token = ``; 4067 if (token) { 4068 headers['Authorization'] = `Bearer ${token}`; 4069 } 4070 const response = await fetch(`https\u003A\/\/prod.sww\u002Dgeo.apps.gs\u002Dch\u002Dprod.camptocamp.com/${layer}/mapquery/${uuid}`, { 4071 headers 4072 }); 4073 const data = await response.json(); 4074 data.type = layer; 4075 data.uuid = uuid; 4076 return data; 4077 } 4078 4079 // I am probably using some internal apis, but this is the best (and only) working solution I got after a half days work. 4080 hoverFeature(feature) { 4081 let hoverStyle; 4082 if (feature.get('hoverStyle')) { 4083 // use pre generated hover style if available (use for clustered style) 4084 hoverStyle = feature.get('hoverStyle'); 4085 } else { 4086 // otherwise clone existing style and apply hover scale to icon 4087 let style = feature.getStyleFunction()(feature);
4088 if ('clone' in style) { 4089 hoverStyle = style.clone(); 4090 hoverStyle.getImage().setScale(hoverStyle.getImage().getScale() * this.options.hoverScale); 4091 } 4092 } 4093 if (hoverStyle) { 4094 feature.set("savedStyle", feature.getStyle()); 4095 feature.setStyle(hoverStyle); 4096 } 4097 } 4098 4099 unhoverFeature(feature) { 4100 if (feature.get('savedStyle')) { 4101 // reset to previously saved style 4102 feature.setStyle(feature.get('savedStyle')); 4103 } 4104 if (feature.get('hoverStyle')) { 4105 // the clustered style has a style function for the whole source, so we have to reset the custom style for this one feature 4106 feature.setStyle(); 4107 } 4108 } 4109 4110 setKML(src) { 4111 // remove previous kml 4112 let kmlLayer = this.getLayer('kml'); 4113 if (kmlLayer) { 4114 this.map.removeLayer(kmlLayer); 4115 } 4116 4117 // add kml with source 4118 let kmlSource = new ol.source.Vector({ 4119 url: src, 4120 format: new ol.format.KML() 4121 }) 4122 kmlLayer = new ol.layer.Vector({ 4123 name: 'kml', 4124 source: kmlSource 4125 }); 4126 this.map.addLayer(kmlLayer); 4127 } 4128 4129 displayCoordinates(long, lat, title = '') { 4130 let pinLayer = this.getLayer('pin'); 4131 if (!pinLayer) { 4132 pinLayer = new ol.layer.Vector({ 4133 name: 'pin', 4134 source: new ol.source.Vector(), 4135 style: (feature) => { 4136 let styleFunction = (scale) => { 4137 return new ol.style.Style({ 4138 image: new ol.style.Icon({ 4139 anchor: [0.5, 1], 4140 src: '\/assets\/img\/map\/icon\u002Dpin.svg\u003F2.2.43', 4141 scale: scale 4142 }) 4143 }); 4144 } 4145 feature.set('hoverStyle', styleFunction(0.15 * this.options.hoverScale)) 4146 return styleFunction(0.15); 4147 } 4148 }); 4149 this.map.addLayer(pinLayer); 4150 } 4151 pinLayer.getSource().clear(); 4152 var pin = new ol.Feature({ 4153 name: title, 4154 geometry: new ol.geom.Point(ol.proj.fromLonLat([long, lat])) 4155 }); 4156 pinLayer.getSource().addFeature(pin); 4157 this.focusSource(pinLayer.getSource()); 4158 } 4159 4160 /** 4161 * Adds layer from swisstopo by id. 4162 * @param id swisstopo id of the layer 4163 * @param clickable if the layer is clickable and should display a pointer mouse cursor 4164 * @param minZoom minimum zoom level of the map for the layer to be displayed. Used to limit the amount of stuff that is displayed at the same time. 4165 * @param opacity opacity of the layer 4166 * @param zIndex 4167 */ 4168 addSwisstopoLayer(id, clickable, minZoom, opacity = 0.8, zIndex = 0) { 4169 let layerUrl = `https://wms0.geo.admin.ch/?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=${id}&LANG=en`; 4170 let layer = new ol.layer.Tile({ 4171 name: id, 4172 layer: id, 4173 minZoom: minZoom, 4174 opacity: opacity, 4175 zIndex: zIndex, 4176 source: new ol.source.TileWMS({ 4177 url: layerUrl, 4178 crossOrigin: 'anonymous', 4179 gutter: 120, 4180 tileGrid: new ol.tilegrid.TileGrid({ 4181 projection: "EPSG:2056", 4182 tileSize: WMS_TILE_SIZE, 4183 origin: TILEGRID_ORIGIN, 4184 resolutions: TILEGRID_RESOLUTIONS 4185 }) 4186 }) 4187 }); 4188 this.map.addLayer(layer); 4189 Mappy.swisstopoApiLayers.push(id); 4190 if (clickable) { 4191 this.clickableLayers.push(id); 4192 } 4193 } 4194 4195 addDefaultLayers() { 4196 if (this.options.defaultLayers.includes('schiessanzeigen')) { 4197 this.addSwisstopoLayer('ch.vbs.schiessanzeigen', true, 11, 0.4); 4198 } 4199 if (this.options.defaultLayers.includes('herdenschutzhunde')) { 4200 this.addSwisstopoLayer('ch.bafu.alpweiden-herdenschutzhunde', true, 11, 0.4); 4201 } 4202 if (this.options.defaultLayers.includes('wanderwegnetz')) { 4203 this.addSwisstopoLayer('ch.swisstopo.swisstlm3d-wanderwege', false, 11); 4204 } 4205 if (this.options.defaultLayers.includes('öv')) { 4206 this.addSwisstopoLayer('ch.bav.haltestellen-oev', true, 11, 1); 4207 } 4208 4209 // point of interest layer 4210 if (this.options.defaultLayers.includes('poi')) { 4211 this.pointOfInterestLayer = new sww.MVTLayer({ 4212 layer: "poi", 4213 name: "poi", 4214 organisation: `Schweizer\u0020Wanderwege`, 4215 zIndex: 20 4216 }); 4217 this.map.addLayer(this.pointOfInterestLayer); 4218 this.clickableLayers.push('poi'); 4219 } 4220 4221 if (this.options.defaultLayers.includes('detours')) { 4222 this.detourLayer = new sww.MVTLayer({ 4223 layer: "detours", 4224 name: "detour", 4225 organisation: `Schweizer\u0020Wanderwege`, 4226 zIndex: 10 4227 }); 4228 this.map.addLayer(this.detourLayer); 4229 this.clickableLayers.push('detours'); 4230 } 4231 } 4232 4233 #focusListenerKey; 4234 4235 /** 4236 * Moves and zooms the view so the whole source can be viewed. 4237 * @param source openlayer Source 4238 */ 4239 focusSource(source) { 4240 if (this.#focusListenerKey) { 4241 ol.Observable.unByKey(this.#focusListenerKey); 4242 } 4243 let focus = () => { 4244 if (source.getState() === 'ready' && source.getExtent()[0] !== Infinity) { 4245 this.map.getView().fit(source.getExtent(), this.map.getSize()); 4246 this.map.getView().setZoom(Math.min(this.map.getView().getZoom() - 0.25, 17)); 4247 this.#currentZoomLevel = this.map.getView().getZoom(); 4248 ol.Observable.unByKey(this.#focusListenerKey); 4249 this.dispatchEvent(new CustomEvent('endfocus')); 4250 } 4251 } 4252 4253 if (source.getState() === 'ready' && source.getExtent()[0] !== Infinity) { 4254 // if source is already loaded then focus immediately (there won't be a change event) 4255 focus(); 4256 } else { 4257 // wait until the source is ready 4258 this.#focusListenerKey = source.on('change', (e) => { 4259 focus(); 4260 }); 4261 } 4262 } 4263 4264 getLayer(name) { 4265 return this.map.getLayers().getArray().find(layer => layer.get('name') === name); 4266 } 4267 4268 generateMapUrl() { 4269 let rawKml = this.#container.data('swisstopo-kml'); 4270 if (!rawKml) { 4271 return false;
4272 } 4273 4274 if (!/@style=/.test(rawKml)) { 4275 rawKml = rawKml + '@style=default@clampToGround=false'; 4276 } 4277 4278 // manually encode kml to make sure '@' is not encoded through double encoding the url 4279 const encodedKml = encodeURI(rawKml); 4280 4281 const layers = [ 4282 'ch.astra.wanderland-sperrungen_umleitungen', 4283 'ch.bafu.alpweiden-herdenschutzhunde', 4284 'ch.astra.wanderland', 4285 'ch.swisstopo.swisstlm3d-wanderwege', 4286 'ch.bav.haltestellen-oev', 4287 `KML|${encodedKml}` 4288 ].join(';'); 4289 4290 const center = ol.proj.transform( 4291 this.map.getView().getCenter(), 4292 'EPSG:3857', 4293 'EPSG:2056' 4294 ).map(Math.round).join(','); 4295 4296 const params = [ 4297 `lang=${locale}`, 4298 `center=${center}`, 4299 `z=${this.options.topoMapZoom}`, 4300 `topic=ech`, 4301 `layers=${layers}`, 4302 `bgLayer=ch.swisstopo.pixelkarte-farbe` 4303 ].join('&'); 4304 4305 return `${this.options.topoMapUrl}/#/map?${params}`; 4306 } 4307 4308 set zoom (newZoomLevel) { 4309 this.view.setZoom(newZoomLevel); 4310 this.#currentZoomLevel = newZoomLevel; 4311 } 4312 4313 get container() { 4314 return this.#container; 4315 } 4316 4317 get zoom() { 4318 return this.#currentZoomLevel; 4319 } 4320 4321 get options() { 4322 return this.#options; 4323 } 4324 4325 #scaleExtent(extent, factor) { 4326 let geom = ol.geom.Polygon.fromExtent(extent); 4327 geom.scale(factor); 4328 return geom.getExtent(); 4329 } 4330 4331 applyHighlightAtPixel(pixel, type = 'click') { 4332 this.map.getLayers().forEach((olLayer) => { 4333 if (typeof olLayer.highlightAtPixel !== 'function') return; 4334 olLayer.highlightAtPixel(pixel, type); 4335 }); 4336 } 4337} 4338 /** 4339 * CoordinatePicker 4340 * The map uses EPSG:3857 (WGS84/Pseudo-Mercator) as projection given by swisstopo. 4341 * But all interfaces (setData, inputs, events) use EPSG:4326 (WGS84, GPS) as it's the most common format. 4342 * 4343 * Events: 4344 * - select: {long, lat} when a coordinate is selected 4345 * 4346 * Usage: 4347 * CoordinatePicker.options.zoom = 10; // global default 4348 * new CoordinatePicker('#map', {zoom: 10}); // initialization with selector & options 4349 * new CoordinatePicker($('#map')); // initialization with jQuery object 4350 * new CoordinatePicker($('#map')).rollback() // getting already initialized picker and rollback it 4351 */ 4352class CoordinatePicker extends EventTarget { 4353 // global defaults 4354 static options = { 4355 center: [915000, 5910000], // center of switzerland 4356 boundingBox: [670433, 5744676, 1162476, 6078756], // swiss extent in EPSG:3857 4357 zoom: 14, // used when there is already a coordinate set 4358 backgroundLayerUrl: `https://wmts.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-farbe/default/current/3857/{z}/{x}/{y}.jpeg`, 4359 }; 4360 4361 #container; 4362 #mapElement; 4363 #options = {} 4364 #originalData = {long: 0, lat: 0} 4365 4366 constructor(container, options) { 4367 super(); 4368 container = $(container); // make sure it's a jQuery object 4369 $.extend(this.#options, CoordinatePicker.options, options); 4370 4371 // prevent double initialization 4372 if (container.data('coordinate-picker')) { 4373 return container.data('coordinate-picker'); 4374 } 4375 this.#container = container; 4376 container.data('coordinate-picker', this); 4377 4378 this.#mapElement = $('.l-map', container); 4379 4380 // save existing data for rollback 4381 let inputs = this.getInputs(); 4382 this.#originalData = { 4383 long: parseFloat(inputs.long.val()), 4384 lat: parseFloat(inputs.lat.val()) 4385 }; 4386 4387 // map layer 4388 this.backgroundLayer = new ol.layer.Tile({ 4389 name: "background", 4390 source: new ol.source.XYZ({ 4391 url: this.#options.backgroundLayerUrl 4392 }) 4393 }); 4394 // marker layer 4395 this.markerSource = new ol.source.Vector() 4396 this.markerLayer = new ol.layer.Vector({ 4397 source: this.markerSource, 4398 style: new ol.style.Style({ 4399 image: new ol.style.Icon({ 4400 src: `\/assets\/img\/map\/icon\u002Dpin.svg\u003F2.2.43`, 4401 anchor: [0.5, 1], 4402 scale: 0.15 4403 }) 4404 }) 4405 }); 4406 4407 // perspective 4408 this.view = new ol.View({ 4409 projection: "EPSG:3857", // WGS84/Pseudo-Mercator. Also used in Google Maps, Bing, etc. 4410 center: this.#options.center, 4411 zoom: this.#options.zoom, 4412 extent: this.#scaleExtent(this.#options.boundingBox, 1.1) 4413 }) 4414 4415 // initialize openlayers 4416 this.map = new ol.Map({ 4417 target: this.#mapElement.get(0), 4418 controls: ol.control.defaults.defaults({ 4419 zoom: true, 4420 attribution: false, 4421 rotate: false 4422 }), 4423 layers: [this.backgroundLayer, this.markerLayer], 4424 view: this.view 4425 }); 4426 4427 // click on map event 4428 this.map.on('singleclick', (e) => { 4429 let lonLat = ol.proj.toLonLat(e.coordinate, 'EPSG:3857'); // convert to GPS coordinates 4430 this.dispatchEvent(new CustomEvent('select', {detail: {long: lonLat[0], lat: lonLat[1]}})); 4431 }); 4432 4433 // update input fields on coordinate select 4434 this.addEventListener('select', (e) => { 4435 this.setData(e.detail.long, e.detail.lat); 4436 }); 4437 4438 // set initial data 4439 if (this.#originalData.long && this.#originalData.lat) { 4440 // set marker and zoom to it 4441 this.setData(this.#originalData.long, this.#originalData.lat); 4442 let coords = ol.proj.transform([this.#originalData.long, this.#originalData.lat], 'EPSG:4326', 'EPSG:3857'); 4443 this.view.setCenter(coords) 4444 } else { 4445 // remove rollback button and show full swiss map 4446 $('.l-rollback', this.#container).remove(); 4447 this.view.fit(this.#options.boundingBox); 4448 } 4449 4450 // wire controls 4451 $('.l-rollback', this.#container).on('click', () => this.rollback()); 4452 $('.l-clear', this.#container).on('click', () => this.clear()); 4453 4454 // hide rollback initially. will be displayed as soon as user changes the coordinates 4455 $('.l-rollback', this.#container).hide(); 4456 4457 // long lat inputs 4458 inputs.long.on('change', this.#updateMaker.bind(this)); 4459 inputs.lat.on('change', this.#updateMaker.bind(this)); 4460 4461 this.locationSearch = new LocationSearch( 4462 this.#container.parent().find('.ct-autocomplete'), 4463 (data) => { 4464 this.setData(data.lon, data.lat); 4465 this.#focusCurrentSource(); 4466 } 4467 ); 4468 } 4469 4470 // expects coordinates in GPS (WGS84, EPSG:4326) format 4471 setData(long, lat) { 4472 // round to 6 decimal places 4473 long = parseFloat(long).toFixed(6); 4474 lat = parseFloat(lat).toFixed(6); 4475 4476 // set data on input fields 4477 let inputs = this.getInputs(); 4478 inputs.long.val(long); 4479 inputs.lat.val(lat); 4480 // trigger change event on input fields 4481 inputs.long.trigger("change"); 4482 inputs.lat.trigger("change"); 4483 // set marker 4484 this.#updateMaker(); 4485 $('.l-rollback', this.#container).show(); 4486 } 4487 4488 getInputs() { 4489 return { 4490 long: $('input[name$="[longitude]"]', this.#container), 4491 lat: $('input[name$="[latitude]"]', this.#container) 4492 } 4493 } 4494 4495 rollback() { 4496 this.setData(this.#originalData.long, this.#originalData.lat); 4497 let coords = ol.proj.transform([this.#originalData.long, this.#originalData.lat], 'EPSG:4326', 'EPSG:3857'); // convert to map coordinates 4498 this.view.setCenter(coords); 4499 $('.l-rollback', this.#container).hide(); 4500 } 4501 4502 clear() { 4503 // clear data on input fields 4504 let inputs = this.getInputs(); 4505 inputs.long.val(''); 4506 inputs.lat.val(''); 4507 // trigger change event on input fields 4508 inputs.long.trigger("change"); 4509 inputs.lat.trigger("change"); 4510 // remove marker 4511 this.markerSource.clear(); 4512 } 4513 4514 #updateMaker() { 4515 let inputs = this.getInputs(); 4516 let long = parseFloat(inputs.long.val()); 4517 let lat = parseFloat(inputs.lat.val()); 4518 if (long && lat) { 4519 let coords = ol.proj.transform([long, lat], 'EPSG:4326', 'EPSG:3857'); // convert to map coordinates 4520 this.markerSource.clear(); 4521 this.markerSource.addFeature(new ol.Feature({ 4522 geometry: new ol.geom.Point(coords) 4523 })); 4524 } 4525 } 4526 4527 #focusCurrentSource() { 4528 if (this.markerSource.getState() === 'ready' && this.markerSource.getExtent()[0] !== Infinity) { 4529 this.map.getView().fit(this.markerSource.getExtent(), this.map.getSize()); 4530 this.map.getView().setZoom(Math.min(this.map.getView().getZoom() - 0.25, 17)); 4531 } 4532 } 4533 4534 #scaleExtent(extent, factor) { 4535 let geom = ol.geom.Polygon.fromExtent(extent); 4536 geom.scale(factor); 4537 return geom.getExtent(); 4538 } 4539} 4540 4541 $(() => { 4542 $('.l-coordinate-picker').each(function () { 4543 new CoordinatePicker(this); 4544 }); 4545 }); 4546 4547 // 4548// This is the offcanvas, fullscreen map available on all frontend pages 4549// 4550 4551$(function () { 4552 UIkit.util.on('#l-map-offcanvas', 'shown', function (e) { 4553 if (e.target !== e.currentTarget) { 4554 return; // do not trigger when shown event of component inside offcanvas fires 4555 } 4556 init_map(); 4557 $('#overlay-map-selection > .l-hike').remove(); 4558 $('input[name="q"]', this).focus(); 4559 if (!window.location.hash.startsWith('#/map')) { 4560 window.location.hash = "#/map"; 4561 } 4562 }); 4563 4564 UIkit.util.on('#l-map-offcanvas', 'hidden', function (e) { 4565 if (e.target !== e.currentTarget) { 4566 return; // do not trigger when hidden event of component inside offcanvas fires 4567 } 4568 $('#overlay-map-selection > .l-hike').remove(); 4569 $('.l-popup-navigation').hide(); 4570 window.location.hash = ""; 4571 }); 4572}); 4573 4574let overviewMap = false;
4575let lastFilterResults = false; 4576function init_map() { 4577 // the filter toggle also triggers the offcanvas show event. So this makes sure this code is only run once. 4578 if (overviewMap) { 4579 return; 4580 } 4581 4582 let map = new Mappy($('#map')); 4583 map.hikeSourcesLoaded = false; 4584 overviewMap = map; // expose overviewMap to make it available to other scripts. 4585 4586 // hike layer 4587 const hikingPropositionLayer = new sww.MVTLayer({ 4588 layer: "hiking_proposition", 4589 name: "hiking_proposition", 4590 organisation: `Schweizer\u0020Wanderwege` 4591 }); 4592 map.map.addLayer(hikingPropositionLayer); 4593 map.clickableLayers.push("hiking_proposition"); 4594 4595 4596 // guided hikes layer 4597 const hikingActivityLayer = new sww.MVTLayer({ 4598 layer: "hiking_activity", 4599 name: "hiking_activity", 4600 organisation: `Schweizer\u0020Wanderwege` 4601 }); 4602 map.map.addLayer(hikingActivityLayer); 4603 map.clickableLayers.push("hiking_activity"); 4604 4605 // self drawn hikes 4606 4607 // filter 4608 let filterHikeMarkers = function(data, closeForm) { 4609 lastFilterResults = data; 4610 4611 hikingPropositionLayer.getSource().set('uuids', data.hikes.join(',')); 4612 hikingPropositionLayer.getSource().refresh(); 4613 4614 hikingActivityLayer.getSource().set('uuids', data.guidedHikes.join(',')); 4615 hikingActivityLayer.getSource().refresh(); 4616 4617 if (closeForm === true) { 4618 if ($('#overlay-map-filter .l-map-search-submit').is(':visible')) { 4619 UIkit.toggle($('#overlay-map-filter .ct-filter-bar__settings [uk-toggle]').removeClass('uk-active').get(0)).toggle(); 4620 } 4621 } 4622 4623 updateFilterResultCount(); 4624 } 4625 4626 let updateFilterResultCount = function () { 4627 if (!lastFilterResults) { 4628 return; 4629 } 4630 let count = 0; 4631 if ($('.l-layer-toggle-hikes input').is(':checked')) { 4632 count += lastFilterResults.hikes.length; 4633 } 4634 if ($('.l-layer-toggle-guided-hikes input').is(':checked')) { 4635 count += lastFilterResults.guidedHikes.length; 4636 } 4637 // update result count 4638 $('.l-map-search-submit').html($('.l-map-search-submit').data('result-text').replace('\%COUNT\%', count)); 4639 4640 // hide save search query button if no results 4641 if (count) { 4642 $('.l-save-search-query').removeClass('uk-hidden'); 4643 } else { 4644 $('.l-save-search-query').addClass('uk-hidden'); 4645 } 4646 } 4647 4648 4649 function applyFilter(closeForm = false) { 4650 $.ajax(`\/it\/map\u002Dfilter`, { 4651 data: $('#overlay-map-filter form').serialize(), 4652 success: (data) => { 4653 filterHikeMarkers(data, closeForm); 4654 } 4655 }); 4656 } 4657 4658 $('#overlay-map-filter form').on('submit', (e) => { 4659 e.preventDefault(); 4660 applyFilter(true) 4661 }); 4662 let debouncedApplyFilter = debounce(function() { 4663 updateFilterUrl($('form[name="app_filter_map"]')); 4664 applyFilter(); 4665 }, 300); 4666 map.applyFilter = debouncedApplyFilter; 4667 $('#grid-filter [type=text]').on('input', debouncedApplyFilter); 4668 $('#grid-filter select').on('change', debouncedApplyFilter); 4669 4670 // toggle layers 4671 function updateToggleButton(toggleEl, layer, zoomLevel) { 4672 toggleEl.toggleClass('uk-button-primary', layer.getVisible()); 4673 if (zoomLevel <= layer.getMinZoom()) { 4674 // layer is disabled 4675 toggleEl.toggleClass('uk-button-disabled', true); 4676 UIkit.tooltip(toggleEl, {'title': `Ingrandisci\u0020per\u0020vedere\u0020queste\u0020informazioni`}); 4677 } else { 4678 // layer is in visible zoom range 4679 toggleEl.toggleClass('uk-button-disabled', false); 4680 UIkit.tooltip(toggleEl, {'title': ''}); // disable tooltip 4681 } 4682 } 4683 4684 $('#overlay-map-filter .l-layer-toggle-hikes input').on('change', function () { 4685 hikingPropositionLayer.setVisible($(this).is(':checked')); 4686 updateToggleButton($(this).parent(), hikingPropositionLayer, map.zoom); 4687 updateFilterResultCount(); 4688 });
4689 $('#overlay-map-filter .l-layer-toggle-guided-hikes input').on('change', function () { 4690 hikingActivityLayer.setVisible($(this).is(':checked')); 4691 updateToggleButton($(this).parent(), hikingActivityLayer, map.zoom); 4692 updateFilterResultCount(); 4693 }); 4694 4695 const poiLayers = [ 4696 {suffix: 'restaurants', c2cType: 'hiking restaurant'}, 4697 {suffix: 'hotels', c2cType: 'hiking hotels'}, 4698 {suffix: 'fireplaces', c2cType: 'fireplaces'}, 4699 {suffix: 'videos', c2cType: 'hiking videos'}, 4700 {suffix: 'hiking-bench', c2cType: 'hiking bench'}, 4701 {suffix: 'farm-shop', c2cType: 'farm shop'}, 4702 {suffix: 'mobiliar-sponsorship', c2cType: 'mobiliar sponsorship'}, 4703 {suffix: 'post-sponsorship', c2cType: 'post sponsorship'}, 4704 {suffix: 'hiking-report', c2cType: 'hiking report'} 4705 ]; 4706 4707 poiLayers.forEach(layer => { 4708 $(`#overlay-map-filter .l-layer-toggle-${layer.suffix} input`) 4709 .on('change', updatePoiLayerVisibility); 4710 }); 4711 4712 function updatePoiLayerVisibility() { 4713 let types = []; 4714 4715 poiLayers.forEach(layer => { 4716 const input = $(`#overlay-map-filter .l-layer-toggle-${layer.suffix} input`); 4717 const checked = input.is(':checked'); 4718 if (checked) { 4719 types.push(layer.c2cType); 4720 } 4721 input.parent().toggleClass('uk-button-primary', checked); 4722 }); 4723 4724 // update visibility of the poi layers based on the selected types 4725 if (types.length > 0) { 4726 map.pointOfInterestLayer.setVisible(true); 4727 map.pointOfInterestLayer.getSource().set("poi_types", types); 4728 map.pointOfInterestLayer.getSource().refresh(); 4729 } else { 4730 map.pointOfInterestLayer.setVisible(false); 4731 } 4732 } 4733 4734 // only show layer toggle when layer can be visible 4735 map.addEventListener('zoom', (e) => { 4736 $('#overlay-map-selection').hide(); 4737 }); 4738 4739 // only show layer toggle when layer can be visible 4740 map.addEventListener('move', (e) => { 4741 $('#overlay-map-selection').hide(); 4742 }); 4743 4744 function updateFilterUrl(filterForm) { 4745 if (!window.location.hash.startsWith('#/map')) { 4746 return; 4747 } 4748 let map = new Mappy($('#map')); 4749 let [x, y] = map.map.getView().getCenter(); 4750 let zoom = map.map.getView().getZoom(); 4751 window.location.hash = `#/map/?x=${x}&y=${y}&zoom=${zoom}&` + $('input[id!=app_filter_map__token], select', filterForm).serialize().replaceAll('app_filter_map', 'criteria'); 4752 } 4753 let mapFilterForm = $('form[name="app_filter_map"]'); 4754 map.map.on('moveend', function () { 4755 updateFilterUrl(mapFilterForm); 4756 }); 4757 $('.l-map-search-reset').click(function () { 4758 updateFilterUrl(mapFilterForm); 4759 }); 4760} 4761 4762 $(() => { 4763 $('.l-nav-pagetitle').click(function () { 4764 $('.ct-subnav-panel.uk-active').removeClass('uk-active'); 4765 }); 4766 }); 4767 4768 // Popup positioning 4769 let poperVirtualElement, overlayPopper; 4770 $(() => { 4771 if ($(window).width() > 600) { // mobile-medium breakpoint 4772 poperVirtualElement = { 4773 getBoundingClientRect: generatePopperPosition(0, 0) 4774 }; 4775 4776 overlayPopper = createPopper(poperVirtualElement, document.getElementById('overlay-map-selection'), { 4777 modifiers: [ 4778 { 4779 ...popperModifierPreventOverflow, ...{ 4780 options: { 4781 boundary: document.body, 4782 altAxis: true, 4783 } 4784 } 4785 }, 4786 popperModifierFlip, 4787 {...popperModifierOffset, ...{options: {offset: [0, 30]}}}, 4788 {name: 'eventListeners', enabled: false}, 4789 ], 4790 }); 4791 } 4792 } 4793 ); 4794 4795 // Popup hide when overlay is opened/closed 4796 $(() => { 4797 $('.ct-nav-secondary li').click(function() { 4798 $('#overlay-map-selection').hide(); 4799 }); 4800 }); 4801 4802 /** 4803 * Map popup js logic. Works for both front- and backend 4804 * 4805 */ 4806let popupFeatures = []; 4807let popupCurrentFeature = null; 4808 4809 4810/** 4811 * Handles all features from our various kml sources and features provided by the swisstopo api. 4812 * @param feature 4813 * @param cursor Position of the mouse at the event 4814 */ 4815function displayPopup(feature, cursor) { 4816 if (!feature || feature?.length === 0) { 4817 return; 4818 } 4819
4820 if (!isBackend) { 4821 // Move the popup on public to the top layer so it works with fullscreen modes. On admin the popup is always in the editor 4822 (document.fullscreenElement ?? document.body).appendChild(document.querySelector('#overlay-map-selection')); 4823 } 4824 4825 $('.l-map-popup-container').show(); 4826 4827 // check if a single feature was passed or multiple 4828 if (typeof feature[Symbol.iterator] === 'function' && feature.length === 1) { 4829 // unwrap single feature in a array 4830 feature = feature[0]; 4831 } 4832 4833 if (typeof feature[Symbol.iterator] === 'function') { 4834 // a set of features was passed 4835 popupFeatures = feature; 4836 feature = popupCurrentFeature = feature[0]; 4837 // only show navigation when there is actually more than one feature 4838 $('.l-map-popup-container .l-map-popup-navigation').toggle(popupFeatures.length > 1); 4839 } else { 4840 // only a single feature was passed 4841 if (!popupFeatures.includes(feature)) { 4842 // a single feature has been selected 4843 popupFeatures = [feature]; 4844 popupCurrentFeature = feature; 4845 $('.l-map-popup-container .l-map-popup-navigation').hide(); // hide navigation 4846 } else { 4847 // switch to new item in current selection 4848 popupCurrentFeature = feature; 4849 } 4850 } 4851 4852 let template = $('#template-popup').get(0).content.cloneNode(true); 4853 4854 4855 if (typeof feature.getProperties === 'function') { 4856 // Wandernacht (KML) 4857 let properties = feature.getProperties(); 4858 4859 // link 4860 $('a', template).attr('href', properties['url']); 4861 4862 // image 4863 if (properties['image']) { 4864 $('.l-popup-main-image', template).attr('src', properties['image']); 4865 } 4866 4867 // number 4868 if (properties['number']) { 4869 $('.l-image-annotation', template).text(properties['number']); 4870 } 4871 4872 // subtitle 4873 let text = properties['regionText']; 4874 $('.l-subtitle', template).text(text); 4875 4876 // title 4877 $('.l-title', template).text(('title-' + locale in properties) ? properties['title-' + locale] : properties['name']); 4878 4879 // metadata 4880 $('.l-evening-night-hike .l-card-footer-icon', template).addClass('fa-' + properties['categoryIcon']); 4881 $('.l-evening-night-hike .l-card-footer-label', template).text(properties['categoryText']); 4882 $('.l-hike-time .l-card-footer-label', template).text(properties['duration']); 4883 $('.l-hike-difficulty .l-card-footer-label', template).text(properties['difficulty']); 4884 if (properties['for-families']) { 4885 $('.l-for-families', template).css('display', 'block'); 4886 } 4887 4888 if (properties['badge']) { 4889 $('.l-badge', template).text(properties['badge']); 4890 $('.l-badge', template).addClass('l-' + properties['badge-style']); 4891 } 4892 } else if (feature.layerBodId === 'ch.astra.wanderland') { 4893 // Wanderland 4894 $('.l-text', template).html(`<b>${feature.id}</b><br/>${feature.attributes.label}`); 4895 } else if (Mappy.camp2campApiLayers.includes(feature?.type)) { 4896 // DISPLAY CAMP2CAMP API FEATURE 4897 let icon, text, subtitle, url; 4898 if (feature.type === 'hiking_proposition') { 4899 subtitle = feature.label; 4900 feature.url = `\/it\/proposte\u002Ddi\u002Descursioni\/uuid\/UUID`.replace('UUID', feature.uuid); 4901 } else if (feature.type === 'hiking_activity') { 4902 icon = `\/assets\/img\/map\/icon\u002Dgefuehrte\u002Dwanderung.svg\u003F2.2.43`; 4903 let date = new Date(feature.label); 4904 subtitle = `${date.getDate().toString().padStart(2, '0')}.${(date.getMonth() + 1).toString().padStart(2, '0')}.${date.getFullYear()}`; 4905 url = `\/it\/escursione\u002Dguidata\/uuid\/UUID`.replace('UUID', feature.uuid); 4906 // fully booked / canceled badge 4907 if (feature.canceled) { 4908 $('.l-badge', template).text(`Annullato`); 4909 $('.l-badge', template).addClass('l-danger'); 4910 } else if (feature.fully_booked) { 4911 $('.l-badge', template).text(`Al\u0020completo`); 4912 $('.l-badge', template).addClass('l-warning'); 4913 } 4914 } else if (feature.type === 'poi') { 4915 switch (feature.label) { 4916 case 'hiking restaurant': 4917 icon = `\/assets\/img\/map\/icon\u002Dwanderbeizli.svg\u003F2.2.43`; 4918 subtitle = `Punti\u0020di\u0020ristoro`; 4919 text = `Visita\u0020il\u0020sito`; 4920 break; 4921 case 'hiking hotels': 4922 icon = `\/assets\/img\/map\/icon\u002Dwanderhotel.svg\u003F2.2.43`; 4923 subtitle = `Alberghi\u0020per\u0020escursionisti`; 4924 text = `Prenota\u0020una\u0020camera`; 4925 break; 4926 case 'fireplaces': 4927 icon = `\/assets\/img\/map\/icon\u002Dfeuerstellen.svg\u003F2.2.43`; 4928 subtitle = `Aree\u0020per\u0020grigliate`; 4929 text = `Per\u0020saperne\u0020di\u0020pi\u00F9`; 4930 break; 4931 case 'hiking videos': 4932 icon = `\/assets\/img\/map\/icon\u002Dplay.svg\u003F2.2.43`; 4933 subtitle = `Video`; 4934 text = `Gioca\u0020su\u0020YouTube`; 4935 break; 4936 case 'hiking bench': 4937 icon = `\/assets\/img\/map\/icon\u002Dwanderbaenkli.svg\u003F2.2.43`; 4938 subtitle = `Panca\u0020escursionistiche`; 4939 text = `Per\u0020saperne\u0020di\u0020pi\u00F9`; 4940 break; 4941 case 'farm shop': 4942 icon = `\/assets\/img\/map\/icon\u002Dhofladen.svg\u003F2.2.43`; 4943 subtitle = `Negozio\u0020agricolo`; 4944 text = `Per\u0020saperne\u0020di\u0020pi\u00F9`; 4945 break; 4946 case 'mobiliar sponsorship': 4947 icon = `\/assets\/img\/map\/icon\u002Dmobiliar.svg\u003F2.2.43`; 4948 subtitle = `Fondo Mobiliare ponti e passerelle`; 4949 text = `Per\u0020saperne\u0020di\u0020pi\u00F9`; 4950 break; 4951 case 'post sponsorship': 4952 icon = `\/assets\/img\/map\/icon\u002Dpost.svg\u003F2.2.43`; 4953 subtitle = `Premio\u0020Posta`; 4954 text = `Per\u0020saperne\u0020di\u0020pi\u00F9`; 4955 break; 4956 case 'hiking report': 4957 icon = `\/assets\/img\/map\/icon\u002Dreportagen.svg\u003F2.2.43`; 4958 4959 const hikingReportLanguages = ['de', 'fr']; 4960 const reportLocale = hikingReportLanguages.includes(locale) ? locale : 'de'; 4961 4962 subtitle = feature.poi_category[reportLocale] ?? feature.poi_category?.de ?? feature.poi_category ?? ''; 4963 4964 if (feature.abo) { 4965 $('.l-abo-badge', template).css('display', 'block'); 4966 } 4967 4968 const title = feature.title[reportLocale] ?? feature.title?.de ?? feature.title ?? ''; 4969 $('.l-title', template).text(title); 4970 4971 // take only the first line of the localized description 4972 const fullDesc = feature.description[reportLocale] ?? feature.description?.de ?? feature.description ?? ''; 4973 text = fullDesc.split('\n')[0]; 4974 break; 4975 } 4976 } else if (feature.type === 'hiking') { 4977 icon = `\/assets\/img\/map\/icon\u002Dplanned\u002Dhike.svg\u003F2.2.43`; 4978 subtitle = feature.label; 4979 url = `\/it\/profilo\/le\u002Dmie\u002Descursioni\u002Dplanned\/uuid\/UUI
4979D`.replace('UUID', feature.uuid); 4980 } else if (feature.type === 'detour') { 4981 4982 // we need to map the c2c detour categories to translated strings as they are not translated inside the GeoDB 4983 const detourReasonTranslations = { 4984 "Construction & maintenance work": `Costruzione\u0020e\u0020manutenzione`, 4985 "Forestry work": `Lavori\u0020forestali`, 4986 "Major event": `Manifestazione`, 4987 "Rockfall": `Caduta\u0020di\u0020rocce`, 4988 "Landslide": `Smottamento`, 4989 "Stone chipping": `Caduta\u0020di\u0020pietre`, 4990 "Spring avalanche": `Valanga\u0020primaverile`, 4991 "Storm damage": `Danni\u0020da\u0020tempesta`, 4992 "Flooding": `Inondazioni`, 4993 "Amended routing": `Cambiamento\u0020di\u0020percorso`, 4994 "Other": `Altro`, 4995 "Path impassable": `Sentiero\u0020impraticabile`, 4996 "Structure removed or closed": `Struttura\u0020rimossa\u0020o\u0020chiusa` 4997 }; 4998 4999 const dateBegin = feature.date_begin?.split('-').reverse().join('.') ?? ''; 5000 const dateEnd = feature.date_end?.split('-').reverse().join('.') ?? ''; 5001 5002 $('.l-subtitle', template).html(`${dateBegin} - ${dateEnd}`); 5003 $('.l-title', template).text(feature.title[locale] ?? feature.title?.de ?? ''); 5004 5005 // Detour text 5006 const detourContent = []; 5007 const detourReason = detourReasonTranslations[feature.detour_reason] ?? feature.detour_reason; 5008 detourContent.push( 5009 `<p><b>Motivo:</b> ${detourReason}</p>` 5010 ); 5011 const durationLabel = feature.label[locale] ?? feature.label?.de ?? ''; 5012 if (durationLabel) { 5013 detourContent.push(`<p><b>Durata:</b> ${durationLabel}</p>`); 5014 } 5015 if (feature.status_validate) { 5016 const statusTranslations = { 5017 "validated": `Convalidato`, 5018 "provisory": `Provvisorio`, 5019 } 5020 detourContent.push(`<p><b>Stato:</b> ${statusTranslations[feature.status_validate]}</p>`); 5021 } 5022 const description = feature.description[locale] ?? feature.description?.de ?? ''; 5023 if (description) { 5024 detourContent.push(`<p>${description}</p>`); 5025 } 5026 if (feature.file) { 5027 const fileUrl = `https\u003A\/\/prod.sww\u002Dgeo.apps.gs\u002Dch\u002Dprod.camptocamp.com\/file\/FILE_UUID`.replace('FILE_UUID', feature.file); 5028 detourContent.push(`<p><a href="${fileUrl}" target="_blank">Scarica\u0020PDF</a></p>`); 5029 } 5030 if (feature.url) { 5031 detourContent.push(`<p><a href="${feature.url}" target="_blank">Ulteriori\u0020informazioni</a></p>`); 5032 } 5033 const dataComprehensivenessUrl = '\/it\/nota\u002Dsulla\u002Dcompletezza\u002Ddei\u002Ddati'; 5034 detourContent.push(`<p><a href="${dataComprehensivenessUrl}" target="_blank">Nota\u0020sulla\u0020completezza\u0020dei\u0020dati</a></p>`); 5035 5036 $('.l-text', template).html(detourContent.join('')); 5037 $('.l-text', template).addClass('l-text-long'); 5038 } 5039 5040 // link 5041 const linkUrl = url ?? feature.url?.[locale] ?? feature.url?.de ?? feature.url ?? '#'; 5042 if (typeof linkUrl === 'string') { 5043 $('a', template).attr('href', linkUrl); 5044 $('.l-text', template).addClass('l-readmore'); 5045 if (!linkUrl.startsWith('#')) { 5046 $('a', template).attr('target', '_blank'); 5047 } 5048 } 5049 5050 // icon 5051 if (icon) { 5052 $('.l-icon', template).attr('src', icon); 5053 } 5054 5055 // image 5056 if (feature.type === 'hiking_proposition') { 5057 src = `\/it\/proposte\u002Ddi\u002Descursioni\/uuid\/UUID\/popup\u002Dimage`.replace('UUID', feature.uuid); 5058 $('.l-popup-main-image', template).attr('src', src); 5059 } else if (feature.type === 'hiking_activity') {
5060 src = `\/it\/escursione\u002Dguidata\/uuid\/UUID\/popup\u002Dimage`.replace('UUID', feature.uuid); 5061 $('.l-popup-main-image', template).attr('src', src); 5062 } else if (feature.type === 'poi' && feature.photo && Object.keys(feature.photo).length > 0) { 5063 const src = feature.photo[locale] ?? feature.photo?.de ?? feature.photo ?? ''; 5064 $('.l-popup-main-image', template).attr('src', src); 5065 } 5066 5067 // Number 5068 if (feature.number) { 5069 $('.l-image-annotation', template).text(`Nr. ${feature.number}`); 5070 } 5071 5072 // Route / Label 5073 if (feature.type !== 'detour') { 5074 $('.l-subtitle', template).html(subtitle); 5075 $('.l-title', template).text(feature.title[locale] || feature.title.de); 5076 $('.l-text', template).text(text); 5077 } 5078 5079 // HIKE METADATA 5080 if (feature.type === 'hiking_proposition' || feature.type === 'hiking_activity' || feature.type === 'hiking') { 5081 const trailCategoryIcons = { 5082 'hike': `\/assets\/img\/map\/icon\u002Dwanderung.svg\u003F2.2.43`, 5083 'alpine hike': `\/assets\/img\/map\/icon\u002Dalpinwanderung.svg\u003F2.2.43`, 5084 'mountain hike': `\/assets\/img\/map\/icon\u002Dbergwanderung.svg\u003F2.2.43`, 5085 'winter hike': `\/assets\/img\/map\/icon\u002Dwinterwanderung.svg\u003F2.2.43`, 5086 'snow shoe hike': `\/assets\/img\/map\/icon\u002Dschneeschuhroute.svg\u003F2.2.43`, 5087 'schooltrip with hike': `\/assets\/img\/map\/icon\u002Dschulreisen.svg\u003F2.2.43`, 5088 'schooltrip without hike': `\/assets\/img\/map\/icon\u002Dschulreisen.svg\u003F2.2.43`, 5089 } 5090 $('.l-trail-category', template).attr('src', trailCategoryIcons[feature?.category || 'hike']); 5091 const tscaleTranslation = { 5092 'BLACK': 'Nero', 5093 'BLUE': 'Blu', 5094 'RED': 'Rosso', 5095 'T1': 'T1', 5096 'T2': 'T2', 5097 'T3': 'T3', 5098 'T4': 'T4', 5099 'WT1': 'WT1', 5100 'WT2': 'WT2', 5101 'WT3': 'WT3', 5102 } 5103 if (feature.difficulty_t_scale) { 5104 $('.l-hike-tscale .l-card-footer-label', template).text(tscaleTranslation[feature?.difficulty_t_scale]); 5105 } 5106 if (feature.hiking_time) { 5107 let roundedTime = Math.round(feature.hiking_time / 5) * 5; 5108 let hours = Math.floor(roundedTime / 60); 5109 let minutes = roundedTime % 60; 5110 let timeText = (hours ? hours + ' h ' : '') + minutes + ' min'; 5111 $('.l-hike-time .l-card-footer-label', template).text(timeText); 5112 } 5113 5114 if (feature.distance) { 5115 $('.l-hike-distance .l-card-footer-label', template).text((feature.distance / 1000).toFixed(1).replace('.', ',') + ' km'); 5116 } 5117 5118 const difficultyTranslation = { 5119 'low': 'Bassa', 5120 'medium': 'Media', 5121 'high': 'Alta', 5122 } 5123 if (feature.physical_demand) { 5124 $('.l-hike-difficulty .l-card-footer-label', template).text(difficultyTranslation[feature.physical_demand]); 5125 } 5126 } 5127 5128 } else { 5129 // DISPLAY SWISSTOPO API FEATURE 5130 if (feature.layerBodId === "ch.bafu.alpweiden-herdenschutzhunde") { 5131 $('.l-subtitle', template).text(feature.layerName); 5132 $('.l-title', template).text(feature.attributes.label); 5133 } 5134 if (feature.layerBodId === "ch.vbs.schiessanzeigen") { 5135 let url = feature.attributes['url_' + locale]; 5136 $('a', template).attr('target', '_blank'); 5137 $('.l-subtitle', template).text(feature.layerName); 5138 $('.l-title', template).text(feature.attributes.label); 5139 $('.l-title', template).attr('href', url); 5140 $('.l-text', template).text(feature.attributes.infobezeichnung); 5141 $('.l-text', template).addClass('l-text-long'); 5142 } 5143 if (feature.layerBodId === "ch.bav.haltestellen-oev") { 5144 $('.l-subtitle', template).text(feature.layerName); 5145 $('.l-title', template).text(feature.attributes.label); 5146 } 5147 } 5148 5149 const $popupTitle = $('.l-title', template); 5150 const popupTitleHref = $popupTitle.attr('href'); 5151 if (!popupTitleHref || popupTitleHref === '#') { 5152 $popupTitle.removeAttr('href').addClass('l-title--static'); 5153 } 5154 5155 $('.l-map-popup-container > .l-map-popup').remove(); // remove previous popup 5156 $('.l-map-popup-container').append(template); 5157 5158 if ($(window).width() > 600 && cursor && typeof poperVirtualElement !== 'undefined') { // mobile-medium breakpoint 5159 poperVirtualElement.getBoundingClientRect = generatePopperPosition(cursor[0], cursor[1]);
5160 overlayPopper.update(); 5161 } 5162} 5163 5164// close button 5165$('.l-map-popup-close').click(() => { 5166 $('.l-map-popup-container > .l-map-popup').remove(); 5167 $('.l-map-popup-container').hide(); 5168}); 5169// next button 5170$('.l-map-popup-next').click(() => { 5171 let index = $.inArray(popupCurrentFeature, popupFeatures); 5172 let newIndex = (index + 1) % popupFeatures.length; 5173 displayPopup(popupFeatures[newIndex]); 5174}); 5175// previous button 5176$('.l-map-popup-previous').click(() => { 5177 let index = $.inArray(popupCurrentFeature, popupFeatures); 5178 let newIndex = (index - 1 + popupFeatures.length) % popupFeatures.length; 5179 displayPopup(popupFeatures[newIndex]); 5180}); 5181 // Tooltips are appended to the body, which is not rendered while an element is fullscreen. 5182 // This places the tooltip element on the top frame. 5183 UIkit.util.on(document, 'beforeshow', '.uk-tooltip', (e) => { 5184 const root = document.fullscreenElement ?? document.body; 5185 if (e.current.parentNode !== root) root.appendChild(e.current); 5186 }); 5187 </script>
5187 5188
5188<script> 5189 $(function () { 5190 const router = new Navigo('/', {hash: true}); 5191 let mapFilterForm = $('form[name="app_filter_map"]'); 5192 router.on('/map', ({data, params, queryString}) => { 5193 if ($('#l-map-offcanvas').hasClass('uk-open') === false) { 5194 UIkit.offcanvas('#l-map-offcanvas').toggle(); 5195 $('#l-map-offcanvas-trigger').trigger('click'); 5196 init_map(); 5197 5198 if (params) { 5199 Object.keys(params).forEach(key => { 5200 let realKey = key.replace('criteria', 'app_filter_map'); 5201 5202 if (realKey === 'app_filter_map[layers][]') { 5203 // handle layers separately because they are checkboxes with the same name 5204 $(`#overlay-map-filter input[name="${realKey}"]`).prop('checked', false); 5205 if (!Array.isArray(params[key])) { 5206 params[key] = [params[key]]; 5207 } 5208 params[key].forEach(layer => { 5209 $(`#overlay-map-filter input[name="${realKey}"][value="${layer}"]`).prop('checked', true); 5210 }); 5211 } else { 5212 $(`#overlay-map-filter [name="${realKey}"]`).val(params[key]); 5213 } 5214 }); 5215 $('#overlay-map-filter .l-filter-multi').multiselect('update'); 5216 $('#overlay-map-filter .l-filter-toggle-switch input').trigger('change'); 5217 let map = new Mappy($('#map')); 5218 // Trigger the search with the filters passed in the hash 5219 map.applyFilter(false); 5220 5221 // move map to selected position 5222 if (params.x && params.y) { 5223 map.map.getView().setCenter([parseFloat(params.x), parseFloat(params.y)]); 5224 } 5225 if (params.zoom) { 5226 map.map.getView().setZoom(parseFloat(params.zoom)); 5227 } 5228 } 5229 5230 $('input, select', mapFilterForm).on('change', submitMapFilter); 5231 $('.l-filter-multi-options-select-all, .l-filter-multi-options-select-reset').on('click', submitMapFilter); 5232 $('.ct-filter-bar__submit', mapFilterForm).on('click', function (e) { 5233 e.preventDefault(); 5234 submitMapFilter(); 5235 }); 5236 } 5237 }); 5238 5239 const submitMapFilter = function () { 5240 let map = new Mappy($('#map')); 5241 map.applyFilter(false); 5242 } 5243 5244 router.on('coordinate/:long/:lat/:title', ({data}) => { 5245 if (!$('#l-map-offcanvas').hasClass('uk-open')) { 5246 UIkit.offcanvas('#l-map-offcanvas').toggle(); 5247 $('#l-map-offcanvas-trigger').trigger('click'); 5248 init_map(); 5249 overviewMap.displayCoordinates(data.long, data.lat, data.title); 5250 } 5251 }); 5252 5253 if (window.location.hash && (window.location.hash.indexOf('map') || window.location.hash.indexOf('coordinate'))) { 5254 router.resolve(window.location.href); 5255 } 5256 5257 $('.l-map-search-reset').click(function () { 5258 $('.l-filter-multi').multiselect('selectNone'); 5259 $(this).parents('form')[0].reset(); 5260 $('#overlay-map-filter form').trigger('submit', false); 5261 toastr.success(`Il filtro è stato reimpostato correttamente`); 5262 }); 5263 5264 $(mapFilterForm).on('submit', function () { 5265 let saveQuerybutton = $('.l-save-search-query'); 5266 saveQuerybutton.attr('disabled', false); 5267 }); 5268 }); 5269 </script>
5269 5270 <!-- Cookie-Bot for SWW --> 5271
5271<script id="Cookiebot" data-culture="it" src="https://consent.cookiebot.com/uc.js" data-cbid="bd849e06-8f7e-4c46-a50a-17483da9dbdb" data-blockingmode="auto" type="text/javascript" defer></script>
5271 5272 </body> 5273</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.